/objects/sink/sink_1/shape/visual
+```
+
+
+You will get a nice rendering of the sink, and should see the metal parts have specular highlgihts, and shadows
+ should be casted.
+
+
+#### Velodyne VLP-16 Example
+In this example, we show a demo of 16-beam Velodyne VLP-16 LiDAR placed on top of a virtual Turtlebot. The code can be found in [examples/demo/lidar_velodyne_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/lidar_velodyne_example.py).
+
+The Velodyne VLP-16 LiDAR visualization will look like this:
+
+
#### Render to PyTorch Tensors
-In this example, we show that MeshRenderer can directly render into a PyTorch tensor to maximize efficiency. PyTorch installation is required (otherwise, iGibson does not depend on PyTorch). The code can be found in [examples/demo/mesh_renderer_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/mesh_renderer_gpu_example.py).
+In this example, we show that MeshRenderer can directly render into a PyTorch tensor to maximize efficiency. PyTorch installation is required (otherwise, iGibson does not depend on PyTorch). The code can be found in [examples/demo/mesh_renderer_gpu_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/mesh_renderer_gpu_example.py).
diff --git a/docs/robots.md b/docs/robots.md
index d5702c45a..35214a99e 100644
--- a/docs/robots.md
+++ b/docs/robots.md
@@ -38,13 +38,16 @@ def apply_robot_action(action):
```
Note that `robot_action` is a normalized joint velocity, i.e. `robot_action[n] == 1.0` means executing the maximum joint velocity for the nth joint. The limits of joint position, velocity and torque are extracted from the URDF file of the robot.
-Most of the code can be found here: [gibson2/physics/robot_locomotors.py](https://github.com/StanfordVL/iGibson/blob/master/gibson2/physics/robot_locomotors.py).
+Most of the code can be found here: [gibson2/robots](https://github.com/StanfordVL/iGibson/blob/master/gibson2/robots).
### Examples
In this example, we import four different robots into PyBullet. We keep them still for around 10 seconds and then move them with small random actions for another 10 seconds. The code can be found here: [examples/demo/robot_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/robot_example.py).
```python
-from gibson2.robots.robot_locomotor import Locobot, Turtlebot, JR2_Kinova, Fetch
+from gibson2.robots.locobot_robot import Locobot
+from gibson2.robots.turtlebot_robot import Turtlebot
+from gibson2.robots.jr2_kinova_robot import JR2_Kinova
+from gibson2.robots.fetch_robot import Fetch
from gibson2.utils.utils import parse_config
import os
import time
@@ -52,9 +55,10 @@ import numpy as np
import pybullet as p
import pybullet_data
+
def main():
p.connect(p.GUI)
- p.setGravity(0,0,-9.8)
+ p.setGravity(0, 0, -9.8)
p.setTimeStep(1./240.)
floor = os.path.join(pybullet_data.getDataPath(), "mjcf/ground_plane.xml")
diff --git a/docs/scenes.md b/docs/scenes.md
index b6394c34b..c46bd671c 100644
--- a/docs/scenes.md
+++ b/docs/scenes.md
@@ -1,20 +1,35 @@
# Scenes
### Overview
-We provide three types of scenes.
-- `EmptyScene` and `StadiumScene`: they are simple scenes with flat grounds and no obstacles, very good for debugging.
-- `BuildingScene`: it loads realistic 3D scenes from `gibson2.dataset_path`.
+We provide four types of scenes.
+- `EmptyScene` and `StadiumScene`: they are simple scenes with flat grounds and no obstacles, useful for debugging purposes.
+- `StaticIndoorScene`: it loads static 3D scenes from `gibson2.g_dataset_path`.
+- `InteractiveIndoorScene`: it loads fully interactive 3D scenes from `gibson2.ig_dataset_path`.
-Typically, they take in the `scene_id` of a scene and provide a `load` function that be invoked externally (usually by `import_scene` of the `Simulator`).
+Typically, they take in the `scene_id` of a scene and provide a `load` function that be invoked externally (usually by `import_scene` and `import_ig_scene` of the `Simulator`).
-To be more specific, the `load` function of `BuildingScene`
+To be more specific, the `load` function of `StaticIndoorScene`
- stores the floor information (we have many multistory houses in our dataset)
- loads the scene mesh into PyBullet
- builds an internal traversability graph for each floor based on the traversability maps stored in the scene folder (e.g. `dataset/Rs/floor_trav_0.png`)
-- loads the scene objects and places them in their original locations if the scene is interactive
- provides APIs for sampling a random location in the scene, and for computing the shortest path between two locations in the scene.
-Most of the code can be found here: [gibson2/physics/scene.py](https://github.com/StanfordVL/iGibson/blob/master/gibson2/physics/scene.py).
+In addition to everything mentioned above, the `load` function of `InteractiveIndoorScene` also
+- provides material/texture randomization functionality: randomize the material, texture and dynamic property of scene object models
+- provides object randomization functionality: randomize scene object models while keeping object poses and categories intact
+- provides scene quality check: check if object models have collisions and if fixed, articulated objects can extend their joints fully without collision
+- provides partial scene loading functionality: 1) only load objects of certain categories, 2) only load objects in certain room types, 3) only load objects in certain room instances.
+- provides APIs for changing the state of articulated objects (e.g. open all "fridges" and "ovens" in the scene)
+
+Most of the code can be found here: [gibson2/scenes](https://github.com/StanfordVL/iGibson/blob/master/gibson2/scenes).
+
+### Adding other scenes to iGibson
+We provide detailed instructions and scripts to import scenes from the following sources into iGibson:
+1. [CubiCasa5k](https://github.com/CubiCasa/CubiCasa5k): A Dataset and an Improved Multi-Task Model for Floorplan Image Analysis. (Kalervo, Ahti, et al.)
+2. [3D-FRONT](https://tianchi.aliyun.com/specials/promotion/alibaba-3d-scene-dataset): 3D Furnished Rooms with layOuts and semaNTics. (Fu, Huanl, et al.)
+
+Instruction can be found here: [External Scenes](https://github.com/StanfordVL/iGibson/blob/master/gibson2/utils/data_utils/ext_scene).
+
### Examples
@@ -93,13 +108,53 @@ if __name__ == '__main__':
```
#### Interactive Building Scenes
+In this example, we import a fully interactive scene, and randomly sample points given a room type such as "living_room". This can be useful for tasks that require the robot to always be spawned in certain room types. We support fifteen such scenes right now as part of the new iGibson Dataset. The code can be found here: [examples/demo/scene_interactive_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/scene_interactive_example.py).
-In this example, we import an interactive scene. We support ten such scenes right now (the list can be found in `dataset/gibson_list`). All you need to do is to turn on the flag `is_interactive=True` when you initialize `BuildingScene`. The code can be found here: [examples/demo/scene_interactive_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/scene_interactive_example.py).
+Note that all objects in these scenes can be interacted realistically.
+
-The interactive scene will replace the annotated objects with very similar CAD models with their original texture, aligned to their original poses. Because removing the annotated objects will inevitably create holes on the floor, we add additional floor planes with the original floor texture as well.
+```python
+from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
+from gibson2.simulator import Simulator
+import numpy as np
-For example, in the scene `Placida` below, the couches, the coffee table, the dining table and the dining chairs are all interactive objects.
-
+
+def main():
+ s = Simulator(mode='gui', image_width=512,
+ image_height=512, device_idx=0)
+ scene = InteractiveIndoorScene(
+ 'Rs_int', texture_randomization=False, object_randomization=False)
+ s.import_ig_scene(scene)
+
+ np.random.seed(0)
+ for _ in range(10):
+ pt = scene.get_random_point_by_room_type('living_room')[1]
+ print('random point in living_room', pt)
+
+ for _ in range(1000):
+ s.step()
+ s.disconnect()
+
+
+if __name__ == '__main__':
+ main()
+
+```
+
+##### Texture Randomization
+In this example, we demonstrate material/texture randomization functionality of `InteractiveIndoorScene`. The goal is to randomize the material, texture and dynamic properties of all scene objects by calling `scene.randomize_texture` on-demand. The code can be found here: [examples/demo/scene_interactive_texture_rand_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/scene_interactive_texture_rand_example.py).
+
+The randomized materials in the `ExternalView` window should look like this.
+
+
+##### Object Randomization
+In this example, we demonstrate object randomization functionality of `InteractiveIndoorScene`. The goal is to randomize the object models while maintaining their poses and categories. Note that when object models are randomized, there is no guarantee that they have no collisions or the fixed, articulated objects can extend their joints without collision. We provide `scene.check_scene_quality` functionality to check scene quality and you should do object model re-sampling if this function returns `False`. An alternative way (recommended) is to use randoml object model configuration that we provide (10 for each scenes) which guarantees scene quality, by passing in `object_randomization_idx=[0-9]`. Finally, object randomization can be expensive because the new object models need to be loaded to the simulator each time, so we recommend only using it occasionally (e.g. every 1000 training episodes). The code can be found here: [examples/demo/scene_interactive_object_rand_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/scene_interactive_object_rand_example.py).
+
+The randomized object models in the `ExternalView` window should look like this.
+
+
+##### Partial Scene Loading
+In this example, we demonstrate partial scene loading functionality of `InteractiveIndoorScene`. Specifically in this example we only load "chairs" in "living rooms". This can be useful for tasks that only require certain object categories or rooms. The code can be found here: [examples/demo/scene_interactive_partial_loading_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/scene_interactive_partial_loading_example.py).
#### Visualize Traversability Map
diff --git a/docs/simulators.md b/docs/simulators.md
index 3c0cb7f04..b2ad94c73 100644
--- a/docs/simulators.md
+++ b/docs/simulators.md
@@ -6,34 +6,38 @@
Some key functions are the following:
- `load`: initialize PyBullet physics engine and MeshRenderer
-- `import_scene`: import the scene into PyBullet by calling `scene.load`, and then import it into MeshRenderer by calling `self.renderer.add_instance`. If the scene is interactive (`is_interactive=True`), all the objects in the scene will be imported as well.
+- `import_{scene, ig_scene}`: import the scene into PyBullet by calling `scene.load`, and then import it into MeshRenderer by calling `self.renderer.add_instance`. If `InteractiveIndoorScene` is imported using `import_ig_scene`, all objects in the scene are also imported.
- `import_{object, articulated_object, robot}`: import the object, articulated object and robot into the simulator in a similar manner
- `sync`: synchronize the poses of the dynamic objects (including the robots) between PyBullet and MeshRenderer. Specifically, it calls `update_position` for each object, in which it retrieve the object's pose in PyBullet, and then update its pose accordingly in MeshRenderer.
-If `Simulator` uses `gui` mode, by default it will also maintain a `Viewer`, which essentially is a virtual camera in the scene that can render images. More info about the `Viewer` can be found here: [gibson2/render/viewer.py](https://github.com/StanfordVL/iGibson/blob/master/gibson2/render/viewer.py).
+If `Simulator` uses `gui` mode, by default it will also maintain a `Viewer`, which essentially is a virtual camera in the scene that can render images. More info about the `Viewer` can be found here: [gibson2/render/viewer.py](https://github.com/StanfordVL/iGibson/blob/master/gibson2/render/viewer.py). Notably, you can press `h` in the `ExternalView` window to show the help menu for mouse/keyboard control.
Most of the code can be found here: [gibson2/simulator.py](https://github.com/StanfordVL/iGibson/blob/master/gibson2/simulator.py).
### Examples
-In this example, we import a `BuildingScene`, a `Turtlebot`, and ten `YCBObject` into the simulator. The code can be found here: [examples/demo/simulator_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/simulator_example.py)
+In this example, we import a `StaticIndoorScene`, a `Turtlebot`, and ten `YCBObject` into the simulator. The code can be found here: [examples/demo/simulator_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/simulator_example.py)
```python
-from gibson2.robots.robot_locomotor import Turtlebot
+from gibson2.robots.turtlebot_robot import Turtlebot
from gibson2.simulator import Simulator
from gibson2.scenes.gibson_indoor_scene import StaticIndoorScene
from gibson2.objects.ycb_object import YCBObject
from gibson2.utils.utils import parse_config
-import pybullet as p
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
import numpy as np
from gibson2.render.profiler import Profiler
+from IPython import embed
def main():
config = parse_config('../configs/turtlebot_demo.yaml')
- s = Simulator(mode='gui', image_width=512, image_height=512)
- scene = BuildingScene('Rs',
- build_graph=True,
- pybullet_load_texture=True)
+ settings = MeshRendererSettings(enable_shadow=False, msaa=False)
+ s = Simulator(mode='gui', image_width=256,
+ image_height=256, rendering_settings=settings)
+
+ scene = StaticIndoorScene('Rs',
+ build_graph=True,
+ pybullet_load_texture=True)
s.import_scene(scene)
turtlebot = Turtlebot(config)
s.import_robot(turtlebot)
@@ -41,17 +45,20 @@ def main():
for _ in range(10):
obj = YCBObject('003_cracker_box')
s.import_object(obj)
- obj.set_position_orientation(np.random.uniform(low=0, high=2, size=3), [0,0,0,1])
+ obj.set_position_orientation(np.random.uniform(
+ low=0, high=2, size=3), [0, 0, 0, 1])
+
+ print(s.renderer.instances)
for i in range(10000):
with Profiler('Simulator step'):
- turtlebot.apply_action([0.1,0.1])
+ turtlebot.apply_action([0.1, 0.1])
s.step()
rgb = s.renderer.render_robot_cameras(modes=('rgb'))
-
s.disconnect()
if __name__ == '__main__':
main()
+
```
diff --git a/docs/tests.md b/docs/tests.md
index 882a69819..a1629b5a6 100644
--- a/docs/tests.md
+++ b/docs/tests.md
@@ -3,7 +3,7 @@
We provide tests in [test](https://github.com/StanfordVL/iGibson/tree/master/test). You can run them by this:
```bash
cd test
-pytest
+pytest --ignore disabled --ignore benchmark
```
It will take a few minutes. If all tests pass, you will see something like this
```bash
@@ -22,5 +22,4 @@ test_scene_importing.py .... [ 9
test_simulator.py . [ 96% ]
test_viewer.py
```
-We will further improve our test coverage in the next few weeks.
diff --git a/docs/viewer.md b/docs/viewer.md
new file mode 100644
index 000000000..07a0c52d8
--- /dev/null
+++ b/docs/viewer.md
@@ -0,0 +1,38 @@
+# Viewer
+
+### Overview
+
+We developed an easy-to-use iGibson-human interface called **Viewer** for users to inspect and interact with our scenes and objects. The Viewer will automatically pop up if you use `gui` or `iggui` mode in `Simulator`.
+
+
+
+On the top left corner, you can see `px 0.4 py -0.9 pz 1.2`, which indicates the camera position, `[1.0, 0.1, -0.1]`, which indicates the camera orientation, and `manip mode`, which indicates the current control mode you are in (explained below).
+
+Keyboard control includes the following
+- `W`, `A`, `S`, `D`: translate forward/left/backward/right
+- `Q`, `E`: rotate left/right
+- `M`: choose between different control mode (navigation, manipulation and planning)
+- `R`: start/stop recording
+- `P`: pause/resume recording
+- `H`: show help menu
+- `ESC`: exit
+
+We have three control modes (navigation, manipulation and planning) and the mouse control is different for each control mode. You may switch between these control modes by pressing `M`.
+
+Mouse control in navigation mode
+- Left click and drag: rotate camera
+- CTRL + left click and drag: translate camera
+- Middle click and drag: translate camera closer/further away in the viewing direction
+
+Mouse control in manipulation mode
+- Left click and drag: create ball-joint connection to the clicked object and move it
+- Middle click and drag: create fixed-joint connection to the clicked object and move it
+- CTRL + click and drag: move the object further/closer
+
+Mouse control in planning mode
+- Left click and drag: create (click), visualize (drag) and plan / execute (release) a base motion subgoal for the robot base to reach the physical point that corresponds to the clicked pixel
+- Middle click: create create, and plan / execute an arm motion subgoal for the robot end-effector to reach the physical point that corresponds to the clicked pixel
+
+In manipulation and planning modes, a visual indicator will be visualized in the `Viewer` to assist control (e.g. the blue sphere at the bottom in the image above).
+
+Most of the code can be found in [gibson2/render/viewer.py](https://github.com/StanfordVL/iGibson/tree/master/gibson2/render/viewer.py).
diff --git a/examples/configs/fetch_p2p_nav.yaml b/examples/configs/fetch_reaching.yaml
similarity index 71%
rename from examples/configs/fetch_p2p_nav.yaml
rename to examples/configs/fetch_reaching.yaml
index 5aff2078a..259397209 100644
--- a/examples/configs/fetch_p2p_nav.yaml
+++ b/examples/configs/fetch_reaching.yaml
@@ -1,51 +1,58 @@
# scene
-scene: gibson
-scene_id: Rs
+scene: igibson
+scene_id: Rs_int
build_graph: true
load_texture: true
+pybullet_load_texture: true
+trav_map_type: no_obj
trav_map_resolution: 0.1
trav_map_erosion: 3
+should_open_all_doors: true
+
+# domain randomization
+texture_randomization_freq: null
+object_randomization_freq: null
# robot
robot: Fetch
-is_discrete: false
-wheel_velocity: 1.0
-torso_lift_velocity: 1.0
-arm_velocity: 1.0
+wheel_velocity: 0.8
+torso_lift_velocity: 0.8
+arm_velocity: 0.8
-# task, observation and action
-task: pointgoal # pointgoal|objectgoal|areagoal|reaching
+# task
+task: reaching_random
target_dist_min: 1.0
target_dist_max: 10.0
-initial_pos_z_offset: 0.1
-additional_states_dim: 4
+goal_format: polar
+task_obs_dim: 4
# reward
-reward_type: geodesic
+reward_type: l2
success_reward: 10.0
-slack_reward: -0.01
potential_reward_weight: 1.0
collision_reward_weight: -0.1
-collision_ignore_link_a_ids: [0, 1, 2] # ignore collisions with these robot links
# discount factor
discount_factor: 0.99
# termination condition
-dist_tol: 0.5 # body width
+dist_tol: 0.36 # body width
max_step: 500
max_collisions_allowed: 500
-goal_format: polar
+
+# misc config
+initial_pos_z_offset: 0.1
+collision_ignore_link_a_ids: [0, 1, 2] # ignore collisions with these robot links
# sensor spec
-output: [sensor, rgb, depth, scan]
+output: [task_obs, rgb, depth, scan]
# image
# Primesense Carmine 1.09 short-range RGBD sensor
# http://xtionprolive.com/primesense-carmine-1.09
fisheye: false
-image_width: 160
-image_height: 120
-vertical_fov: 45
+image_width: 128
+image_height: 128
+vertical_fov: 90
# depth
depth_low: 0.35
depth_high: 3.0
@@ -67,4 +74,3 @@ scan_noise_rate: 0.0
# visual objects
visual_object_at_initial_target_pos: true
target_visual_object_visible_to_agent: false
-
diff --git a/examples/configs/fetch_room_rearrangement.yaml b/examples/configs/fetch_room_rearrangement.yaml
new file mode 100644
index 000000000..b33408cd4
--- /dev/null
+++ b/examples/configs/fetch_room_rearrangement.yaml
@@ -0,0 +1,81 @@
+# scene
+scene: igibson
+scene_id: Rs_int
+build_graph: true
+load_texture: true
+pybullet_load_texture: true
+trav_map_type: no_obj
+trav_map_resolution: 0.1
+trav_map_erosion: 3
+should_open_all_doors: true
+
+# domain randomization
+texture_randomization_freq: null
+object_randomization_freq: null
+
+# robot
+robot: Fetch
+wheel_velocity: 0.8
+torso_lift_velocity: 0.8
+arm_velocity: 0.8
+
+# task
+task: room_rearrangement
+load_object_categories: [
+ bottom_cabinet,
+ bottom_cabinet_no_top,
+ top_cabinet,
+ dishwasher,
+ fridge,
+ microwave,
+ oven,
+ washer
+ dryer,
+]
+
+# reward
+potential_reward_weight: 1.0
+prismatic_joint_reward_scale: 3.0
+revolute_joint_reward_scale: 1.0
+
+# discount factor
+discount_factor: 0.99
+
+# termination condition
+max_step: 500
+max_collisions_allowed: 500
+
+# misc config
+initial_pos_z_offset: 0.1
+collision_ignore_link_a_ids: [0, 1, 2] # ignore collisions with these robot links
+
+# sensor spec
+output: [rgb, depth, scan]
+# image
+# Primesense Carmine 1.09 short-range RGBD sensor
+# http://xtionprolive.com/primesense-carmine-1.09
+fisheye: false
+image_width: 128
+image_height: 128
+vertical_fov: 90
+# depth
+depth_low: 0.35
+depth_high: 3.0
+# scan
+# SICK TIM571 scanning range finder
+# https://docs.fetchrobotics.com/robot_hardware.html
+# n_horizontal_rays is originally 661, sub-sampled 1/3
+n_horizontal_rays: 220
+n_vertical_beams: 1
+laser_linear_range: 25.0
+laser_angular_range: 220.0
+min_laser_dist: 0.05
+laser_link_name: laser_link
+
+# sensor noise
+depth_noise_rate: 0.0
+scan_noise_rate: 0.0
+
+# visual objects
+visual_object_at_initial_target_pos: true
+target_visual_object_visible_to_agent: false
diff --git a/examples/configs/jr_p2p_nav.yaml b/examples/configs/jr_reaching.yaml
similarity index 73%
rename from examples/configs/jr_p2p_nav.yaml
rename to examples/configs/jr_reaching.yaml
index 03d3a5dd9..a9c1b1bf0 100644
--- a/examples/configs/jr_p2p_nav.yaml
+++ b/examples/configs/jr_reaching.yaml
@@ -1,11 +1,17 @@
# scene
-scene: gibson
-scene_id: Rs
-
+scene: igibson
+scene_id: Rs_int
build_graph: true
load_texture: true
+pybullet_load_texture: true
+trav_map_type: no_obj
trav_map_resolution: 0.1
trav_map_erosion: 3
+should_open_all_doors: true
+
+# domain randomization
+texture_randomization_freq: null
+object_randomization_freq: null
# robot
robot: JR2_Kinova
@@ -13,32 +19,33 @@ is_discrete: false
wheel_velocity: 0.3
arm_velocity: 1.0
-# task, observation and action
-task: pointgoal # pointgoal|objectgoal|areagoal|reaching
+# task
+task: reaching_random
target_dist_min: 1.0
target_dist_max: 10.0
-initial_pos_z_offset: 0.1
-additional_states_dim: 4
+goal_format: polar
+task_obs_dim: 4
# reward
-reward_type: geodesic
+reward_type: l2
success_reward: 10.0
-slack_reward: -0.01
potential_reward_weight: 1.0
collision_reward_weight: -0.1
-collision_ignore_link_a_ids: [2, 3, 5, 7] # ignore collisions with these robot links
# discount factor
discount_factor: 0.99
# termination condition
-dist_tol: 0.5 # body width
+dist_tol: 0.36 # body width
max_step: 500
max_collisions_allowed: 500
-goal_format: polar
+
+# misc config
+initial_pos_z_offset: 0.1
+collision_ignore_link_a_ids: [2, 3, 5, 7] # ignore collisions with these robot links
# sensor spec
-output: [sensor, rgb, depth]
+output: [task_obs, rgb, depth]
# image
# Intel Realsense Depth Camera D435
# https://store.intelrealsense.com/buy-intel-realsense-depth-camera-d435.html
@@ -56,4 +63,3 @@ depth_noise_rate: 0.0
# visual objects
visual_object_at_initial_target_pos: true
target_visual_object_visible_to_agent: false
-
diff --git a/examples/configs/locobot_p2p_nav.yaml b/examples/configs/locobot_p2p_nav.yaml
deleted file mode 100644
index 587aae45a..000000000
--- a/examples/configs/locobot_p2p_nav.yaml
+++ /dev/null
@@ -1,58 +0,0 @@
-# scene
-scene: gibson
-scene_id: Rs
-build_graph: true
-load_texture: true
-trav_map_resolution: 0.1
-trav_map_erosion: 2
-
-# robot
-robot: Locobot
-is_discrete: false
-linear_velocity: 0.5
-angular_velocity: 1.5707963267948966
-
-# task, observation and action
-task: pointgoal # pointgoal|objectgoal|areagoal|reaching
-target_dist_min: 1.0
-target_dist_max: 10.0
-initial_pos_z_offset: 0.1
-additional_states_dim: 4
-
-# reward
-reward_type: geodesic
-success_reward: 10.0
-slack_reward: -0.01
-potential_reward_weight: 1.0
-collision_reward_weight: -0.1
-collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
-
-# discount factor
-discount_factor: 0.99
-
-# termination condition
-dist_tol: 0.36 # body width
-max_step: 500
-max_collisions_allowed: 500
-goal_format: polar
-
-# sensor spec
-output: [sensor, rgb, depth]
-# image
-# Intel Realsense Depth Camera D435
-# https://store.intelrealsense.com/buy-intel-realsense-depth-camera-d435.html
-fisheye: false
-image_width: 160
-image_height: 90
-vertical_fov: 42.5
-# depth
-depth_low : 0.1
-depth_high: 10.0
-
-# sensor noise
-depth_noise_rate: 0.0
-
-# visual objects
-visual_object_at_initial_target_pos: true
-target_visual_object_visible_to_agent: false
-
diff --git a/examples/configs/locobot_interactive_demo.yaml b/examples/configs/locobot_point_nav.yaml
similarity index 79%
rename from examples/configs/locobot_interactive_demo.yaml
rename to examples/configs/locobot_point_nav.yaml
index 628ccdfe4..5e0001b2a 100644
--- a/examples/configs/locobot_interactive_demo.yaml
+++ b/examples/configs/locobot_point_nav.yaml
@@ -15,24 +15,22 @@ object_randomization_freq: null
# robot
robot: Locobot
+is_discrete: false
linear_velocity: 0.5
angular_velocity: 1.5707963267948966
-# task, observation and action
-task: pointgoal # pointgoal|objectgoal|areagoal|reaching
-goal_format: polar
+# task
+task: point_nav_random
target_dist_min: 1.0
target_dist_max: 10.0
-initial_pos_z_offset: 0.1
-additional_states_dim: 4
+goal_format: polar
+task_obs_dim: 4
# reward
reward_type: geodesic
success_reward: 10.0
-slack_reward: -0.01
potential_reward_weight: 1.0
collision_reward_weight: -0.1
-collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
# discount factor
discount_factor: 0.99
@@ -42,25 +40,26 @@ dist_tol: 0.36 # body width
max_step: 500
max_collisions_allowed: 500
+# misc config
+initial_pos_z_offset: 0.1
+collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
+
# sensor spec
-output: [sensor, rgb, depth]
+output: [task_obs, rgb, depth]
# image
-# ASUS Xtion PRO LIVE
-# https://www.asus.com/us/3D-Sensor/Xtion_PRO_LIVE
+# Intel Realsense Depth Camera D435
+# https://store.intelrealsense.com/buy-intel-realsense-depth-camera-d435.html
fisheye: false
image_width: 160
image_height: 90
vertical_fov: 42.5
-
# depth
-depth_low: 0.1
+depth_low : 0.1
depth_high: 10.0
# sensor noise
depth_noise_rate: 0.0
-scan_noise_rate: 0.0
# visual objects
visual_object_at_initial_target_pos: true
target_visual_object_visible_to_agent: false
-
diff --git a/examples/configs/turtlebot_demo.yaml b/examples/configs/turtlebot_demo.yaml
index cc7136cf5..c8fa5bfb2 100644
--- a/examples/configs/turtlebot_demo.yaml
+++ b/examples/configs/turtlebot_demo.yaml
@@ -4,28 +4,32 @@ scene_id: Rs
build_graph: true
load_texture: true
pybullet_load_texture: true
+trav_map_type: no_obj
trav_map_resolution: 0.1
trav_map_erosion: 2
+should_open_all_doors: true
+
+# domain randomization
+texture_randomization_freq: null
+object_randomization_freq: null
# robot
robot: Turtlebot
is_discrete: false
velocity: 1.0
-# task, observation and action
-task: pointgoal # pointgoal|objectgoal|areagoal|reaching
+# task
+task: point_nav_random
target_dist_min: 1.0
target_dist_max: 10.0
-initial_pos_z_offset: 0.1
-additional_states_dim: 4
+goal_format: polar
+task_obs_dim: 4
# reward
reward_type: geodesic
success_reward: 10.0
-slack_reward: -0.01
potential_reward_weight: 1.0
collision_reward_weight: -0.1
-collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
# discount factor
discount_factor: 0.99
@@ -34,16 +38,19 @@ discount_factor: 0.99
dist_tol: 0.36 # body width
max_step: 500
max_collisions_allowed: 500
-goal_format: polar
+
+# misc config
+initial_pos_z_offset: 0.1
+collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
# sensor spec
-output: [sensor, rgb, depth, scan]
+output: [task_obs, rgb, depth, scan]
# image
# ASUS Xtion PRO LIVE
# https://www.asus.com/us/3D-Sensor/Xtion_PRO_LIVE
fisheye: false
-image_width: 640
-image_height: 480
+image_width: 160
+image_height: 120
vertical_fov: 45
# depth
depth_low: 0.8
@@ -66,4 +73,3 @@ scan_noise_rate: 0.0
# visual objects
visual_object_at_initial_target_pos: true
target_visual_object_visible_to_agent: false
-
diff --git a/examples/configs/turtlebot_interactive_demo.yaml b/examples/configs/turtlebot_dynamic_nav.yaml
similarity index 86%
rename from examples/configs/turtlebot_interactive_demo.yaml
rename to examples/configs/turtlebot_dynamic_nav.yaml
index 19677b74d..43c7322dd 100644
--- a/examples/configs/turtlebot_interactive_demo.yaml
+++ b/examples/configs/turtlebot_dynamic_nav.yaml
@@ -4,8 +4,10 @@ scene_id: Rs_int
build_graph: true
load_texture: true
pybullet_load_texture: true
+trav_map_type: no_obj
trav_map_resolution: 0.1
trav_map_erosion: 2
+should_open_all_doors: true
# domain randomization
texture_randomization_freq: null
@@ -16,20 +18,18 @@ robot: Turtlebot
is_discrete: false
velocity: 1.0
-# task, observation and action
-task: pointgoal # pointgoal|objectgoal|areagoal|reaching
+# task
+task: dynamic_nav_random
target_dist_min: 1.0
target_dist_max: 10.0
-initial_pos_z_offset: 0.1
-additional_states_dim: 4
+goal_format: polar
+task_obs_dim: 4
# reward
reward_type: geodesic
success_reward: 10.0
-slack_reward: -0.01
potential_reward_weight: 1.0
collision_reward_weight: -0.1
-collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
# discount factor
discount_factor: 0.99
@@ -38,16 +38,19 @@ discount_factor: 0.99
dist_tol: 0.36 # body width
max_step: 500
max_collisions_allowed: 500
-goal_format: polar
+
+# misc config
+initial_pos_z_offset: 0.1
+collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
# sensor spec
-output: [sensor, rgb, depth, scan]
+output: [task_obs, rgb, depth, scan]
# image
# ASUS Xtion PRO LIVE
# https://www.asus.com/us/3D-Sensor/Xtion_PRO_LIVE
fisheye: false
-image_width: 640
-image_height: 480
+image_width: 160
+image_height: 120
vertical_fov: 45
# depth
depth_low: 0.8
@@ -70,4 +73,3 @@ scan_noise_rate: 0.0
# visual objects
visual_object_at_initial_target_pos: true
target_visual_object_visible_to_agent: false
-
diff --git a/examples/configs/turtlebot_interactive_nav.yaml b/examples/configs/turtlebot_interactive_nav.yaml
new file mode 100644
index 000000000..f159820d3
--- /dev/null
+++ b/examples/configs/turtlebot_interactive_nav.yaml
@@ -0,0 +1,75 @@
+# scene
+scene: igibson
+scene_id: Rs_int
+build_graph: true
+load_texture: true
+pybullet_load_texture: true
+trav_map_type: no_obj
+trav_map_resolution: 0.1
+trav_map_erosion: 2
+should_open_all_doors: true
+
+# domain randomization
+texture_randomization_freq: null
+object_randomization_freq: null
+
+# robot
+robot: Turtlebot
+is_discrete: false
+velocity: 1.0
+
+# task
+task: interactive_nav_random
+target_dist_min: 1.0
+target_dist_max: 10.0
+goal_format: polar
+task_obs_dim: 4
+
+# reward
+reward_type: geodesic
+success_reward: 10.0
+potential_reward_weight: 1.0
+collision_reward_weight: -0.1
+
+# discount factor
+discount_factor: 0.99
+
+# termination condition
+dist_tol: 0.36 # body width
+max_step: 500
+max_collisions_allowed: 500
+
+# misc config
+initial_pos_z_offset: 0.1
+collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
+
+# sensor spec
+output: [task_obs, rgb, depth, scan]
+# image
+# ASUS Xtion PRO LIVE
+# https://www.asus.com/us/3D-Sensor/Xtion_PRO_LIVE
+fisheye: false
+image_width: 160
+image_height: 120
+vertical_fov: 45
+# depth
+depth_low: 0.8
+depth_high: 3.5
+# scan
+# Hokuyo URG-04LX-UG01
+# https://www.hokuyo-aut.jp/search/single.php?serial=166
+# n_horizontal_rays is originally 683, sub-sampled 1/3
+n_horizontal_rays: 228
+n_vertical_beams: 1
+laser_linear_range: 5.6
+laser_angular_range: 240.0
+min_laser_dist: 0.05
+laser_link_name: scan_link
+
+# sensor noise
+depth_noise_rate: 0.0
+scan_noise_rate: 0.0
+
+# visual objects
+visual_object_at_initial_target_pos: true
+target_visual_object_visible_to_agent: false
diff --git a/examples/configs/turtlebot_p2p_nav_discrete.yaml b/examples/configs/turtlebot_point_nav.yaml
similarity index 75%
rename from examples/configs/turtlebot_p2p_nav_discrete.yaml
rename to examples/configs/turtlebot_point_nav.yaml
index 7e005bc1a..3e154ec35 100644
--- a/examples/configs/turtlebot_p2p_nav_discrete.yaml
+++ b/examples/configs/turtlebot_point_nav.yaml
@@ -1,30 +1,35 @@
# scene
-scene: gibson
-scene_id: Rs
+scene: igibson
+scene_id: Rs_int
build_graph: true
load_texture: true
+pybullet_load_texture: true
+trav_map_type: no_obj
trav_map_resolution: 0.1
trav_map_erosion: 2
+should_open_all_doors: true
+
+# domain randomization
+texture_randomization_freq: null
+object_randomization_freq: null
# robot
robot: Turtlebot
-is_discrete: true
+is_discrete: false
velocity: 1.0
-# task, observation and action
-task: pointgoal # pointgoal|objectgoal|areagoal|reaching
+# task
+task: point_nav_random
target_dist_min: 1.0
target_dist_max: 10.0
-initial_pos_z_offset: 0.1
-additional_states_dim: 4
+goal_format: polar
+task_obs_dim: 4
# reward
reward_type: geodesic
success_reward: 10.0
-slack_reward: -0.01
potential_reward_weight: 1.0
collision_reward_weight: -0.1
-collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
# discount factor
discount_factor: 0.99
@@ -33,16 +38,19 @@ discount_factor: 0.99
dist_tol: 0.36 # body width
max_step: 500
max_collisions_allowed: 500
-goal_format: polar
+
+# misc config
+initial_pos_z_offset: 0.1
+collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
# sensor spec
-output: [sensor, rgb, depth, scan]
+output: [task_obs, rgb, depth, scan]
# image
# ASUS Xtion PRO LIVE
# https://www.asus.com/us/3D-Sensor/Xtion_PRO_LIVE
fisheye: false
-image_width: 160
-image_height: 120
+image_width: 160
+image_height: 120
vertical_fov: 45
# depth
depth_low: 0.8
@@ -58,11 +66,10 @@ laser_angular_range: 240.0
min_laser_dist: 0.05
laser_link_name: scan_link
-# sensor noise
+# sensor noise
depth_noise_rate: 0.0
scan_noise_rate: 0.0
# visual objects
visual_object_at_initial_target_pos: true
target_visual_object_visible_to_agent: false
-
diff --git a/examples/configs/turtlebot_p2p_nav_stadium.yaml b/examples/configs/turtlebot_point_nav_stadium.yaml
similarity index 73%
rename from examples/configs/turtlebot_p2p_nav_stadium.yaml
rename to examples/configs/turtlebot_point_nav_stadium.yaml
index 6a493ef0e..ee002a49d 100644
--- a/examples/configs/turtlebot_p2p_nav_stadium.yaml
+++ b/examples/configs/turtlebot_point_nav_stadium.yaml
@@ -1,25 +1,34 @@
# scene
scene: stadium
+build_graph: false
+load_texture: true
+pybullet_load_texture: true
+trav_map_type: no_obj
+trav_map_resolution: 0.1
+trav_map_erosion: 2
+should_open_all_doors: true
+
+# domain randomization
+texture_randomization_freq: null
+object_randomization_freq: null
# robot
robot: Turtlebot
is_discrete: false
velocity: 1.0
-# task, observation and action
-task: pointgoal # pointgoal|objectgoal|areagoal|reaching
+# task
+task: point_nav_random
target_dist_min: 1.0
target_dist_max: 10.0
-initial_pos_z_offset: 0.1
-additional_states_dim: 4
+goal_format: polar
+task_obs_dim: 4
# reward
reward_type: l2
success_reward: 10.0
-slack_reward: -0.01
potential_reward_weight: 1.0
collision_reward_weight: -0.1
-collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
# discount factor
discount_factor: 0.99
@@ -28,16 +37,19 @@ discount_factor: 0.99
dist_tol: 0.36 # body width
max_step: 500
max_collisions_allowed: 500
-goal_format: polar
+
+# misc config
+initial_pos_z_offset: 0.1
+collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
# sensor spec
-output: [sensor, rgb, depth, scan]
+output: [task_obs, rgb, depth, scan]
# image
# ASUS Xtion PRO LIVE
# https://www.asus.com/us/3D-Sensor/Xtion_PRO_LIVE
fisheye: false
-image_width: 160
-image_height: 120
+image_width: 160
+image_height: 120
vertical_fov: 45
# depth
depth_low: 0.8
@@ -53,11 +65,10 @@ laser_angular_range: 240.0
min_laser_dist: 0.05
laser_link_name: scan_link
-# sensor noise
+# sensor noise
depth_noise_rate: 0.0
scan_noise_rate: 0.0
# visual objects
visual_object_at_initial_target_pos: true
target_visual_object_visible_to_agent: false
-
diff --git a/examples/demo/env_customized_example.py b/examples/demo/env_customized_example.py
deleted file mode 100644
index 8c41ced4d..000000000
--- a/examples/demo/env_customized_example.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from gibson2.envs.locomotor_env import NavigationRandomEnvSim2Real
-from time import time
-import numpy as np
-from time import time
-import gibson2
-import os
-from gibson2.render.profiler import Profiler
-
-
-def main():
- config_filename = os.path.join(os.path.dirname(gibson2.__file__),
- '../examples/configs/turtlebot_demo.yaml')
- nav_env = NavigationRandomEnvSim2Real(config_file=config_filename,
- mode='gui',
- track='interactive')
- for j in range(10):
- nav_env.reset()
- for i in range(100):
- with Profiler('Env action step'):
- action = nav_env.action_space.sample()
- state, reward, done, info = nav_env.step(action)
- if done:
- print("Episode finished after {} timesteps".format(i + 1))
- break
-
-if __name__ == "__main__":
- main()
diff --git a/examples/demo/env_example.py b/examples/demo/env_example.py
index 4c9c0cf6a..7022eeebe 100644
--- a/examples/demo/env_example.py
+++ b/examples/demo/env_example.py
@@ -1,27 +1,28 @@
-from gibson2.envs.locomotor_env import NavigationRandomEnv
-from time import time
-import numpy as np
+from gibson2.envs.igibson_env import iGibsonEnv
from time import time
import gibson2
import os
from gibson2.render.profiler import Profiler
import logging
-#logging.getLogger().setLevel(logging.DEBUG) #To increase the level of logging
def main():
- config_filename = os.path.join(os.path.dirname(gibson2.__file__),
- '../examples/configs/turtlebot_demo.yaml')
- nav_env = NavigationRandomEnv(config_file=config_filename, mode='gui')
+ config_filename = os.path.join(
+ os.path.dirname(gibson2.__file__),
+ '../examples/configs/turtlebot_demo.yaml')
+ env = iGibsonEnv(config_file=config_filename, mode='gui')
for j in range(10):
- nav_env.reset()
+ env.reset()
for i in range(100):
with Profiler('Environment action step'):
- action = nav_env.action_space.sample()
- state, reward, done, info = nav_env.step(action)
+ action = env.action_space.sample()
+ state, reward, done, info = env.step(action)
if done:
- logging.info("Episode finished after {} timesteps".format(i + 1))
+ logging.info(
+ "Episode finished after {} timesteps".format(i + 1))
break
+ env.close()
+
if __name__ == "__main__":
main()
diff --git a/examples/demo/env_interactive_example.py b/examples/demo/env_interactive_example.py
index c74da2aeb..02c0d4198 100644
--- a/examples/demo/env_interactive_example.py
+++ b/examples/demo/env_interactive_example.py
@@ -1,25 +1,28 @@
-from gibson2.envs.locomotor_env import NavigationRandomEnv
-from time import time
-import numpy as np
+from gibson2.envs.igibson_env import iGibsonEnv
from time import time
import gibson2
import os
from gibson2.render.profiler import Profiler
+import logging
def main():
- config_filename = os.path.join(os.path.dirname(gibson2.__file__),
- '../examples/configs/turtlebot_interactive_demo.yaml')
- nav_env = NavigationRandomEnv(config_file=config_filename, mode='iggui')
+ config_filename = os.path.join(
+ os.path.dirname(gibson2.__file__),
+ '../examples/configs/turtlebot_point_nav.yaml')
+ env = iGibsonEnv(config_file=config_filename, mode='gui')
for j in range(10):
- nav_env.reset()
+ env.reset()
for i in range(100):
- with Profiler('Env action step'):
- action = nav_env.action_space.sample()
- state, reward, done, info = nav_env.step(action)
+ with Profiler('Environment action step'):
+ action = env.action_space.sample()
+ state, reward, done, info = env.step(action)
if done:
- print("Episode finished after {} timesteps".format(i + 1))
+ logging.info(
+ "Episode finished after {} timesteps".format(i + 1))
break
+ env.close()
+
if __name__ == "__main__":
main()
diff --git a/examples/demo/igsdf_example.py b/examples/demo/igsdf_example.py
index 017d53b65..b528b716c 100644
--- a/examples/demo/igsdf_example.py
+++ b/examples/demo/igsdf_example.py
@@ -1,6 +1,6 @@
from gibson2.simulator import Simulator
from gibson2.scenes.igibson_indoor_scene import iGSDFScene
-from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRendererSettings
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
from gibson2.render.profiler import Profiler
import argparse
diff --git a/examples/demo/igsdf_obj_viz.py b/examples/demo/igsdf_obj_viz.py
index cdbda4bf3..90b0fbe23 100644
--- a/examples/demo/igsdf_obj_viz.py
+++ b/examples/demo/igsdf_obj_viz.py
@@ -4,7 +4,7 @@ import os
import numpy as np
from gibson2.simulator import Simulator
from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRenderer
-from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRendererSettings
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
from gibson2.render.profiler import Profiler
# from gibson2.utils.assets_utils import get_model_path
from gibson2.objects.articulated_object import ArticulatedObject
diff --git a/examples/demo/igsdf_tour.py b/examples/demo/igsdf_tour.py
index 033ac0b9b..1a9df6ca9 100644
--- a/examples/demo/igsdf_tour.py
+++ b/examples/demo/igsdf_tour.py
@@ -1,7 +1,7 @@
import gibson2
from gibson2.simulator import Simulator
from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
-from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRendererSettings
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
from gibson2.render.profiler import Profiler
from gibson2.utils.assets_utils import get_ig_scene_path
import argparse
diff --git a/examples/demo/lidar_velodyne_example.py b/examples/demo/lidar_velodyne_example.py
new file mode 100644
index 000000000..76eafb014
--- /dev/null
+++ b/examples/demo/lidar_velodyne_example.py
@@ -0,0 +1,39 @@
+from gibson2.robots.turtlebot_robot import Turtlebot
+from gibson2.simulator import Simulator
+from gibson2.scenes.gibson_indoor_scene import StaticIndoorScene
+from gibson2.objects.ycb_object import YCBObject
+from gibson2.utils.utils import parse_config
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
+import numpy as np
+from gibson2.render.profiler import Profiler
+from IPython import embed
+
+
+def main():
+ config = parse_config('../configs/turtlebot_demo.yaml')
+ settings = MeshRendererSettings()
+ s = Simulator(mode='gui',
+ image_width=256,
+ image_height=256,
+ rendering_settings=settings)
+
+ scene = StaticIndoorScene('Rs',
+ build_graph=True,
+ pybullet_load_texture=True)
+ s.import_scene(scene)
+ turtlebot = Turtlebot(config)
+ s.import_robot(turtlebot)
+
+ for i in range(10000):
+ with Profiler('Simulator step'):
+ turtlebot.apply_action([0.1, -0.1])
+ s.step()
+ lidar = s.renderer.get_lidar_all()
+ print(lidar.shape)
+ # TODO: visualize lidar scan
+
+ s.disconnect()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/examples/demo/mesh_renderer_example.py b/examples/demo/mesh_renderer_example.py
index 5d60a16e2..ed7a5be95 100644
--- a/examples/demo/mesh_renderer_example.py
+++ b/examples/demo/mesh_renderer_example.py
@@ -13,15 +13,14 @@ def main():
if len(sys.argv) > 1:
model_path = sys.argv[1]
else:
- model_path = os.path.join(get_scene_path('Rs_int'), 'mesh_z_up.obj')
+ model_path = os.path.join(get_scene_path('Rs'), 'mesh_z_up.obj')
renderer = MeshRenderer(width=512, height=512)
renderer.load_object(model_path)
-
+
renderer.add_instance(0)
print(renderer.visual_objects, renderer.instances)
print(renderer.materials_mapping, renderer.mesh_materials)
-
px = 0
py = 0.2
@@ -45,8 +44,10 @@ def main():
dy = (y - _mouse_iy) / 100.0
_mouse_ix = x
_mouse_iy = y
- r1 = np.array([[np.cos(dy), 0, np.sin(dy)], [0, 1, 0], [-np.sin(dy), 0, np.cos(dy)]])
- r2 = np.array([[np.cos(-dx), -np.sin(-dx), 0], [np.sin(-dx), np.cos(-dx), 0], [0, 0, 1]])
+ r1 = np.array([[np.cos(dy), 0, np.sin(dy)], [
+ 0, 1, 0], [-np.sin(dy), 0, np.cos(dy)]])
+ r2 = np.array([[np.cos(-dx), -np.sin(-dx), 0],
+ [np.sin(-dx), np.cos(-dx), 0], [0, 0, 1]])
view_direction = r1.dot(r2).dot(view_direction)
elif event == cv2.EVENT_LBUTTONUP:
down = False
@@ -57,7 +58,8 @@ def main():
while True:
with Profiler('Render'):
frame = renderer.render(modes=('rgb'))
- cv2.imshow('test', cv2.cvtColor(np.concatenate(frame, axis=1), cv2.COLOR_RGB2BGR))
+ cv2.imshow('test', cv2.cvtColor(
+ np.concatenate(frame, axis=1), cv2.COLOR_RGB2BGR))
q = cv2.waitKey(1)
if q == ord('w'):
px += 0.01
@@ -70,7 +72,8 @@ def main():
elif q == ord('q'):
break
camera_pose = np.array([px, py, 0.5])
- renderer.set_camera(camera_pose, camera_pose + view_direction, [0, 0, 1])
+ renderer.set_camera(camera_pose, camera_pose +
+ view_direction, [0, 0, 1])
# start = time.time()
@@ -84,4 +87,4 @@ def main():
if __name__ == '__main__':
- main()
\ No newline at end of file
+ main()
diff --git a/examples/demo/mesh_renderer_example_pbr.py b/examples/demo/mesh_renderer_example_pbr.py
index 44f5e882d..1483e1171 100644
--- a/examples/demo/mesh_renderer_example_pbr.py
+++ b/examples/demo/mesh_renderer_example_pbr.py
@@ -2,12 +2,14 @@ import cv2
import sys
import os
import numpy as np
-from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRenderer, MeshRendererSettings
+from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRenderer
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
from gibson2.render.profiler import Profiler
from gibson2.utils.assets_utils import get_scene_path
from PIL import Image
+import gibson2
-def load_obj_np(filename_obj, normalization=False, texture_size=4, load_texture=False,
+def load_obj_np(filename_obj, normalization=False, texture_size=4,
texture_wrapping='REPEAT', use_bilinear=True):
"""Load Wavefront .obj file into numpy array
This function only supports vertices (v x x x) and faces (f x x x).
@@ -39,33 +41,9 @@ def load_obj_np(filename_obj, normalization=False, texture_size=4, load_texture=
faces.append((v0, v1, v2))
faces = np.vstack(faces).astype(np.int32) - 1
- # load textures
- textures = None
-
- assert load_texture is False # Since I commented out the block below
- # if load_texture:
- # for line in lines:
- # if line.startswith('mtllib'):
- # filename_mtl = os.path.join(os.path.dirname(filename_obj), line.split()[1])
- # textures = load_textures(filename_obj, filename_mtl, texture_size,
- # texture_wrapping=texture_wrapping,
- # use_bilinear=use_bilinear)
- # if textures is None:
- # raise Exception('Failed to load textures.')
- # textures = textures.cpu().numpy()
-
assert normalization is False # Since I commented out the block below
- # # normalize into a unit cube centered zero
- # if normalization:
- # vertices -= vertices.min(0)[0][None, :]
- # vertices /= torch.abs(vertices).max()
- # vertices *= 2
- # vertices -= vertices.max(0)[0][None, :] / 2
-
- if load_texture:
- return vertices, faces, textures
- else:
- return vertices, faces
+
+ return vertices, faces
def main():
@@ -76,14 +54,10 @@ def main():
else:
model_path = os.path.join(get_scene_path('Rs_int'), 'mesh_z_up.obj')
settings = MeshRendererSettings(msaa=True, enable_shadow=True)
- renderer = MeshRenderer(width=512, height=512, vertical_fov=90, rendering_settings=settings)
+ renderer = MeshRenderer(width=1024, height=1024, vertical_fov=70, rendering_settings=settings)
renderer.set_light_position_direction([0,0,10], [0,0,0])
- renderer.load_object('plane/plane_z_up_0.obj', scale=[3,3,3])
- renderer.add_instance(0)
- renderer.set_pose([0,0,-1.5,1, 0, 0.0, 0.0], -1)
-
- i = 1
+ i = 0
v = []
for fn in os.listdir(model_path):
@@ -95,22 +69,16 @@ def main():
print(v.shape)
xlen = np.max(v[:,0]) - np.min(v[:,0])
ylen = np.max(v[:,1]) - np.min(v[:,1])
- scale = 1.0/(max(xlen, ylen))
+ scale = 2.0/(max(xlen, ylen))
for fn in os.listdir(model_path):
if fn.endswith('obj'):
renderer.load_object(os.path.join(model_path, fn), scale=[scale, scale, scale])
renderer.add_instance(i)
i += 1
- renderer.instances[-1].use_pbr = True
- renderer.instances[-1].use_pbr_mapping = True
- renderer.instances[-1].metalness = 1
- renderer.instances[-1].roughness = 0.1
-
print(renderer.visual_objects, renderer.instances)
print(renderer.materials_mapping, renderer.mesh_materials)
-
px = 1
py = 1
@@ -123,58 +91,48 @@ def main():
_mouse_ix, _mouse_iy = -1, -1
down = False
- # def change_dir(event, x, y, flags, param):
- # global _mouse_ix, _mouse_iy, down, view_direction
- # if event == cv2.EVENT_LBUTTONDOWN:
- # _mouse_ix, _mouse_iy = x, y
- # down = True
- # if event == cv2.EVENT_MOUSEMOVE:
- # if down:
- # dx = (x - _mouse_ix) / 100.0
- # dy = (y - _mouse_iy) / 100.0
- # _mouse_ix = x
- # _mouse_iy = y
- # r1 = np.array([[np.cos(dy), 0, np.sin(dy)], [0, 1, 0], [-np.sin(dy), 0, np.cos(dy)]])
- # r2 = np.array([[np.cos(-dx), -np.sin(-dx), 0], [np.sin(-dx), np.cos(-dx), 0], [0, 0, 1]])
- # view_direction = r1.dot(r2).dot(view_direction)
- # elif event == cv2.EVENT_LBUTTONUP:
- # down = False
+ def change_dir(event, x, y, flags, param):
+ global _mouse_ix, _mouse_iy, down, view_direction
+ if event == cv2.EVENT_LBUTTONDOWN:
+ _mouse_ix, _mouse_iy = x, y
+ down = True
+ if event == cv2.EVENT_MOUSEMOVE:
+ if down:
+ dx = (x - _mouse_ix) / 100.0
+ dy = (y - _mouse_iy) / 100.0
+ _mouse_ix = x
+ _mouse_iy = y
+ r1 = np.array([[np.cos(dy), 0, np.sin(dy)], [0, 1, 0], [-np.sin(dy), 0, np.cos(dy)]])
+ r2 = np.array([[np.cos(-dx), -np.sin(-dx), 0], [np.sin(-dx), np.cos(-dx), 0], [0, 0, 1]])
+ view_direction = r1.dot(r2).dot(view_direction)
+ elif event == cv2.EVENT_LBUTTONUP:
+ down = False
- # cv2.namedWindow('test')
- # cv2.setMouseCallback('test', change_dir)
+ cv2.namedWindow('test')
+ cv2.setMouseCallback('test', change_dir)
- theta = 0
- r = 1.5
- imgs = []
- for i in range(60):
- theta += np.pi*2/60
- renderer.set_pose([0,0,-1.5,np.cos(-theta/2), 0, 0.0, np.sin(-theta/2)], 0)
+ while True:
with Profiler('Render'):
- frame = renderer.render(modes=('rgb'))
+ frame = renderer.render(modes=('rgb', 'normal'))
cv2.imshow('test', cv2.cvtColor(np.concatenate(frame, axis=1), cv2.COLOR_RGB2BGR))
- imgs.append(Image.fromarray((255*np.concatenate(frame, axis=1)[:,:,:3]).astype(np.uint8)))
-
q = cv2.waitKey(1)
if q == ord('w'):
- px += 0.01
+ px += 0.1
elif q == ord('s'):
- px -= 0.01
+ px -= 0.1
elif q == ord('a'):
- py += 0.01
+ py += 0.1
elif q == ord('d'):
- py -= 0.01
+ py -= 0.1
elif q == ord('q'):
break
- px = r*np.sin(theta)
- py = r*np.cos(theta)
- camera_pose = np.array([px, py, pz])
- renderer.set_camera(camera_pose, [0,0,0], [0, 0, 1])
+ camera_pose = np.array([px, py, 1])
+ renderer.set_camera(camera_pose, camera_pose + view_direction, [0, 0, 1])
renderer.release()
- imgs[0].save('{}.gif'.format('/data2/gifs/' + model_path.replace('/', '_')),
- save_all=True, append_images=imgs[1:], optimize=False, duration=40, loop=0)
+
if __name__ == '__main__':
main()
\ No newline at end of file
diff --git a/examples/demo/mesh_renderer_gpu_example.py b/examples/demo/mesh_renderer_gpu_example.py
index ef1904905..44b65cabc 100644
--- a/examples/demo/mesh_renderer_gpu_example.py
+++ b/examples/demo/mesh_renderer_gpu_example.py
@@ -11,7 +11,7 @@ def main():
if len(sys.argv) > 1:
model_path = sys.argv[1]
else:
- model_path = os.path.join(get_scene_path('Rs_int'), 'mesh_z_up.obj')
+ model_path = os.path.join(get_scene_path('Rs'), 'mesh_z_up.obj')
renderer = MeshRendererG2G(width=512, height=512, device_idx=0)
renderer.load_object(model_path)
@@ -28,8 +28,10 @@ def main():
frame = renderer.render(modes=('rgb', 'normal', '3d'))
print(frame)
- img_np = frame[0].flip(0).data.cpu().numpy().reshape(renderer.height, renderer.width, 4)
- normal_np = frame[1].flip(0).data.cpu().numpy().reshape(renderer.height, renderer.width, 4)
+ img_np = frame[0].flip(0).data.cpu().numpy().reshape(
+ renderer.height, renderer.width, 4)
+ normal_np = frame[1].flip(0).data.cpu().numpy().reshape(
+ renderer.height, renderer.width, 4)
plt.imshow(np.concatenate([img_np, normal_np], axis=1))
plt.show()
diff --git a/examples/demo/mesh_renderer_simple_example.py b/examples/demo/mesh_renderer_simple_example.py
index db3dde870..5f49d9d56 100644
--- a/examples/demo/mesh_renderer_simple_example.py
+++ b/examples/demo/mesh_renderer_simple_example.py
@@ -5,11 +5,12 @@ import numpy as np
from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRenderer
from gibson2.utils.assets_utils import get_scene_path
+
def main():
if len(sys.argv) > 1:
model_path = sys.argv[1]
else:
- model_path = os.path.join(get_scene_path('Rs_int'), 'mesh_z_up.obj')
+ model_path = os.path.join(get_scene_path('Rs'), 'mesh_z_up.obj')
renderer = MeshRenderer(width=512, height=512)
renderer.load_object(model_path)
@@ -18,7 +19,8 @@ def main():
view_direction = np.array([1, 0, 0])
renderer.set_camera(camera_pose, camera_pose + view_direction, [0, 0, 1])
renderer.set_fov(90)
- frames = renderer.render(modes=('rgb', 'normal', '3d'))
+ frames = renderer.render(
+ modes=('rgb', 'normal', '3d'))
frames = cv2.cvtColor(np.concatenate(frames, axis=1), cv2.COLOR_RGB2BGR)
cv2.imshow('image', frames)
cv2.waitKey(0)
diff --git a/examples/demo/motion_planning_example.py b/examples/demo/motion_planning_example.py
new file mode 100644
index 000000000..5aed7cde2
--- /dev/null
+++ b/examples/demo/motion_planning_example.py
@@ -0,0 +1,33 @@
+from gibson2.envs.igibson_env import iGibsonEnv
+from gibson2.utils.motion_planning_wrapper import MotionPlanningWrapper
+import argparse
+import numpy as np
+
+def run_example(args):
+ nav_env = iGibsonEnv(config_file=args.config,
+ mode=args.mode,
+ action_timestep=1.0 / 120.0,
+ physics_timestep=1.0 / 120.0)
+
+ motion_planner = MotionPlanningWrapper(nav_env)
+ state = nav_env.reset()
+
+ while True:
+ action = np.zeros(nav_env.action_space.shape)
+ state, reward, done, _ = nav_env.step(action)
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '--config',
+ '-c',
+ help='which config file to use [default: use yaml files in examples/configs]')
+ parser.add_argument('--mode',
+ '-m',
+ choices=['headless', 'gui', 'iggui'],
+ default='headless',
+ help='which mode for simulation (default: headless)')
+
+ args = parser.parse_args()
+ run_example(args)
+
diff --git a/examples/demo/mouse_interaction.py b/examples/demo/mouse_interaction.py
index 7a5da63ed..da01c448b 100644
--- a/examples/demo/mouse_interaction.py
+++ b/examples/demo/mouse_interaction.py
@@ -1,44 +1,64 @@
#!/usr/bin/env python
-from gibson2.simulator import Simulator
-from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
-from gibson2.utils.utils import parse_config
-from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRendererSettings
import os
-import gibson2
+import sys
import time
import random
-import sys
-import matplotlib.pyplot as plt
+import gibson2
+import argparse
+import numpy as np
import pybullet as p
+import matplotlib.pyplot as plt
+from gibson2.simulator import Simulator
+from gibson2.utils.utils import parse_config
+from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
+from gibson2.utils.assets_utils import get_ig_scene_path,get_cubicasa_scene_path,get_3dfront_scene_path
# human interaction demo
-def test_import_igsdf():
+def test_import_igsdf(scene_name, scene_source):
hdr_texture = os.path.join(
gibson2.ig_dataset_path, 'scenes', 'background', 'probe_02.hdr')
hdr_texture2 = os.path.join(
gibson2.ig_dataset_path, 'scenes', 'background', 'probe_03.hdr')
+
+ if scene_source == "IG":
+ scene_dir = get_ig_scene_path(scene_name)
+ elif scene_source == "CUBICASA":
+ scene_dir = get_cubicasa_scene_path(scene_name)
+ else:
+ scene_dir = get_3dfront_scene_path(scene_name)
+
light_modulation_map_filename = os.path.join(
- gibson2.ig_dataset_path, 'scenes', 'Rs_int', 'layout', 'floor_lighttype_0.png')
+ scene_dir, 'layout', 'floor_lighttype_0.png')
background_texture = os.path.join(
- gibson2.ig_dataset_path, 'scenes', 'background', 'urban_street_01.jpg')
+ gibson2.ig_dataset_path, 'scenes', 'background',
+ 'urban_street_01.jpg')
scene = InteractiveIndoorScene(
- 'Beechwood_0_int', texture_randomization=False, object_randomization=False)
- #scene._set_first_n_objects(10)
+ scene_name,
+ texture_randomization=False,
+ object_randomization=False,
+ scene_source=scene_source)
+
settings = MeshRendererSettings(env_texture_filename=hdr_texture,
env_texture_filename2=hdr_texture2,
env_texture_filename3=background_texture,
light_modulation_map_filename=light_modulation_map_filename,
enable_shadow=True, msaa=True,
light_dimming_factor=1.0)
- s = Simulator(mode='headless', image_width=960,
+ s = Simulator(mode='iggui', image_width=960,
image_height=720, device_idx=0, rendering_settings=settings)
- #s.viewer.min_cam_z = 1.0
-
s.import_ig_scene(scene)
fpss = []
+
+ np.random.seed(0)
+ _,(px,py,pz) = scene.get_random_point()
+ s.viewer.px = px
+ s.viewer.py = py
+ s.viewer.pz = 1.7
+ s.viewer.update()
for i in range(3000):
if i == 2500:
@@ -57,7 +77,16 @@ def test_import_igsdf():
plt.show()
def main():
- test_import_igsdf()
+ parser = argparse.ArgumentParser(
+ description='Open a scene with iGibson interactive viewer.')
+ parser.add_argument('--scene', dest='scene_name',
+ type=str, default='Rs_int',
+ help='The name of the scene to load')
+ parser.add_argument('--source', dest='scene_source',
+ type=str, default='IG',
+ help='The name of the source dataset, among [IG,CUBICASA,THREEDFRONT]')
+ args = parser.parse_args()
+ test_import_igsdf(args.scene_name, args.scene_source)
if __name__ == "__main__":
diff --git a/examples/demo/object_example.py b/examples/demo/object_example.py
index 8081be93e..dc7e288b5 100644
--- a/examples/demo/object_example.py
+++ b/examples/demo/object_example.py
@@ -6,28 +6,31 @@ import pybullet as p
import pybullet_data
import time
+
def main():
p.connect(p.GUI)
- p.setGravity(0,0,-9.8)
+ p.setGravity(0, 0, -9.8)
p.setTimeStep(1./240.)
floor = os.path.join(pybullet_data.getDataPath(), "mjcf/ground_plane.xml")
p.loadMJCF(floor)
- cabinet_0007 = os.path.join(gibson2.assets_path, 'models/cabinet2/cabinet_0007.urdf')
- cabinet_0004 = os.path.join(gibson2.assets_path, 'models/cabinet/cabinet_0004.urdf')
+ cabinet_0007 = os.path.join(
+ gibson2.assets_path, 'models/cabinet2/cabinet_0007.urdf')
+ cabinet_0004 = os.path.join(
+ gibson2.assets_path, 'models/cabinet/cabinet_0004.urdf')
obj1 = ArticulatedObject(filename=cabinet_0007)
obj1.load()
- obj1.set_position([0,0,0.5])
+ obj1.set_position([0, 0, 0.5])
obj2 = ArticulatedObject(filename=cabinet_0004)
obj2.load()
- obj2.set_position([0,0,2])
+ obj2.set_position([0, 0, 2])
obj3 = YCBObject('003_cracker_box')
obj3.load()
- obj3.set_position_orientation([0,0,1.2], [0,0,0,1])
+ obj3.set_position_orientation([0, 0, 1.2], [0, 0, 0, 1])
for _ in range(24000): # at least 100 seconds
p.stepSimulation()
diff --git a/examples/demo/physics_engine_example.py b/examples/demo/physics_engine_example.py
index 6f70ac45a..7c4fbcb83 100644
--- a/examples/demo/physics_engine_example.py
+++ b/examples/demo/physics_engine_example.py
@@ -11,10 +11,10 @@ def main():
if len(sys.argv) > 1:
model_path = sys.argv[1]
else:
- model_path = os.path.join(get_scene_path('Rs_int'), 'mesh_z_up.obj')
+ model_path = os.path.join(get_scene_path('Rs'), 'mesh_z_up.obj')
p.connect(p.GUI)
- p.setGravity(0,0,-9.8)
+ p.setGravity(0, 0, -9.8)
p.setTimeStep(1./240.)
# Load scenes
@@ -25,19 +25,21 @@ def main():
visual_id = p.createVisualShape(p.GEOM_MESH,
fileName=model_path,
meshScale=1.0)
- texture_filename = get_texture_file(model_path)
- texture_id = p.loadTexture(texture_filename)
mesh_id = p.createMultiBody(baseCollisionShapeIndex=collision_id,
baseVisualShapeIndex=visual_id)
# Load robots
- turtlebot_urdf = os.path.join(gibson2.assets_path, 'models/turtlebot/turtlebot.urdf')
- robot_id = p.loadURDF(turtlebot_urdf, flags=p.URDF_USE_MATERIAL_COLORS_FROM_MTL)
+ turtlebot_urdf = os.path.join(
+ gibson2.assets_path, 'models/turtlebot/turtlebot.urdf')
+ robot_id = p.loadURDF(
+ turtlebot_urdf, flags=p.URDF_USE_MATERIAL_COLORS_FROM_MTL)
# Load objects
- obj_visual_filename = os.path.join(gibson2.assets_path, 'models/ycb/002_master_chef_can/textured_simple.obj')
- obj_collision_filename = os.path.join(gibson2.assets_path, 'models/ycb/002_master_chef_can/textured_simple_vhacd.obj')
+ obj_visual_filename = os.path.join(
+ gibson2.assets_path, 'models/ycb/002_master_chef_can/textured_simple.obj')
+ obj_collision_filename = os.path.join(
+ gibson2.assets_path, 'models/ycb/002_master_chef_can/textured_simple_vhacd.obj')
collision_id = p.createCollisionShape(p.GEOM_MESH,
fileName=obj_collision_filename,
meshScale=1.0)
@@ -57,4 +59,3 @@ def main():
if __name__ == '__main__':
main()
-
diff --git a/examples/demo/robot_example.py b/examples/demo/robot_example.py
index e0112b516..94bb9e506 100644
--- a/examples/demo/robot_example.py
+++ b/examples/demo/robot_example.py
@@ -9,9 +9,10 @@ import numpy as np
import pybullet as p
import pybullet_data
+
def main():
p.connect(p.GUI)
- p.setGravity(0,0,-9.8)
+ p.setGravity(0, 0, -9.8)
p.setTimeStep(1./240.)
floor = os.path.join(pybullet_data.getDataPath(), "mjcf/ground_plane.xml")
@@ -63,4 +64,3 @@ def main():
if __name__ == '__main__':
main()
-
diff --git a/examples/demo/scene_example.py b/examples/demo/scene_example.py
index aca6978f3..4c1d9057e 100644
--- a/examples/demo/scene_example.py
+++ b/examples/demo/scene_example.py
@@ -3,9 +3,10 @@ import pybullet as p
import numpy as np
import time
+
def main():
p.connect(p.GUI)
- p.setGravity(0,0,-9.8)
+ p.setGravity(0, 0, -9.8)
p.setTimeStep(1./240.)
scene = StaticIndoorScene('Rs',
@@ -18,7 +19,8 @@ def main():
random_floor = scene.get_random_floor()
p1 = scene.get_random_point(random_floor)[1]
p2 = scene.get_random_point(random_floor)[1]
- shortest_path, geodesic_distance = scene.get_shortest_path(random_floor, p1[:2], p2[:2], entire_path=True)
+ shortest_path, geodesic_distance = scene.get_shortest_path(
+ random_floor, p1[:2], p2[:2], entire_path=True)
print('random point 1:', p1)
print('random point 2:', p2)
print('geodesic distance between p1 and p2', geodesic_distance)
diff --git a/examples/demo/scene_interactive_example.py b/examples/demo/scene_interactive_example.py
index 2d7159a2b..828553db0 100644
--- a/examples/demo/scene_interactive_example.py
+++ b/examples/demo/scene_interactive_example.py
@@ -1,33 +1,23 @@
-from gibson2.scenes.gibson_indoor_scene import StaticIndoorScene
-import pybullet as p
+from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
+from gibson2.simulator import Simulator
import numpy as np
-import time
+
def main():
- p.connect(p.GUI)
- p.setGravity(0,0,-9.8)
- p.setTimeStep(1./240.)
-
- scene = StaticIndoorScene('Placida',
- build_graph=True,
- pybullet_load_texture=True)
- scene.load()
+ s = Simulator(mode='gui', image_width=512,
+ image_height=512, device_idx=0)
+ scene = InteractiveIndoorScene(
+ 'Rs_int', texture_randomization=False, object_randomization=False)
+ s.import_ig_scene(scene)
np.random.seed(0)
for _ in range(10):
- random_floor = scene.get_random_floor()
- p1 = scene.get_random_point(random_floor)[1]
- p2 = scene.get_random_point(random_floor)[1]
- shortest_path, geodesic_distance = scene.get_shortest_path(random_floor, p1[:2], p2[:2], entire_path=True)
- print('random point 1:', p1)
- print('random point 2:', p2)
- print('geodesic distance between p1 and p2', geodesic_distance)
- print('shortest path from p1 to p2:', shortest_path)
+ pt = scene.get_random_point_by_room_type('living_room')[1]
+ print('random point in living_room', pt)
- for _ in range(24000): # at least 100 seconds
- p.stepSimulation()
- time.sleep(1./240.)
- p.disconnect()
+ for _ in range(1000):
+ s.step()
+ s.disconnect()
if __name__ == '__main__':
diff --git a/examples/demo/scene_interactive_object_rand_example.py b/examples/demo/scene_interactive_object_rand_example.py
new file mode 100644
index 000000000..45203fbef
--- /dev/null
+++ b/examples/demo/scene_interactive_object_rand_example.py
@@ -0,0 +1,23 @@
+from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
+from gibson2.simulator import Simulator
+
+
+def main():
+ s = Simulator(mode='gui', image_width=512,
+ image_height=512, device_idx=0)
+
+ for random_seed in range(10):
+ scene = InteractiveIndoorScene('Rs_int',
+ texture_randomization=False,
+ object_randomization=True,
+ object_randomization_idx=random_seed)
+ s.import_ig_scene(scene)
+ for i in range(1000):
+ s.step()
+ s.reload()
+
+ s.disconnect()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/examples/demo/scene_interactive_partial_loading_example.py b/examples/demo/scene_interactive_partial_loading_example.py
new file mode 100644
index 000000000..0d2d78f20
--- /dev/null
+++ b/examples/demo/scene_interactive_partial_loading_example.py
@@ -0,0 +1,19 @@
+from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
+from gibson2.simulator import Simulator
+
+
+def main():
+ s = Simulator(mode='gui', image_width=512,
+ image_height=512, device_idx=0)
+ scene = InteractiveIndoorScene(
+ 'Rs_int', texture_randomization=False, object_randomization=False,
+ load_object_categories=['chair'], load_room_types=['living_room'])
+ s.import_ig_scene(scene)
+
+ for _ in range(1000):
+ s.step()
+ s.disconnect()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/examples/demo/scene_interactive_texture_rand_example.py b/examples/demo/scene_interactive_texture_rand_example.py
new file mode 100644
index 000000000..dd0f3a91a
--- /dev/null
+++ b/examples/demo/scene_interactive_texture_rand_example.py
@@ -0,0 +1,20 @@
+from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
+from gibson2.simulator import Simulator
+
+
+def main():
+ s = Simulator(mode='gui', image_width=512,
+ image_height=512, device_idx=0)
+ scene = InteractiveIndoorScene(
+ 'Rs_int', texture_randomization=True, object_randomization=False)
+ s.import_ig_scene(scene)
+
+ for i in range(10000):
+ if i % 1000 == 0:
+ scene.randomize_texture()
+ s.step()
+ s.disconnect()
+
+
+if __name__ == '__main__':
+ main()
diff --git a/examples/demo/scene_remove_duplicates.py b/examples/demo/scene_remove_duplicates.py
new file mode 100644
index 000000000..0d4bc360a
--- /dev/null
+++ b/examples/demo/scene_remove_duplicates.py
@@ -0,0 +1,22 @@
+from gibson2.core.physics.scene import BuildingScene
+import pybullet as p
+import numpy as np
+import time
+
+def main():
+ scenes = ['Bolton', 'Connellsville', 'Pleasant', 'Cantwell', 'Placida', 'Nicut', 'Brentsville', 'Samuels', 'Oyens', 'Kerrtown']
+ for scene in scenes:
+ print('scene: ', scene, '-' * 50)
+ p.connect(p.DIRECT)
+ p.setGravity(0,0,-9.8)
+ p.setTimeStep(1./240.)
+
+ scene = BuildingScene(scene,
+ is_interactive=True,
+ build_graph=True,
+ pybullet_load_texture=True)
+ scene.load()
+ p.disconnect()
+
+if __name__ == '__main__':
+ main()
diff --git a/examples/demo/simulator_example.py b/examples/demo/simulator_example.py
index 2859bac14..439e649c0 100644
--- a/examples/demo/simulator_example.py
+++ b/examples/demo/simulator_example.py
@@ -3,15 +3,17 @@ from gibson2.simulator import Simulator
from gibson2.scenes.gibson_indoor_scene import StaticIndoorScene
from gibson2.objects.ycb_object import YCBObject
from gibson2.utils.utils import parse_config
-from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRendererSettings
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
import numpy as np
from gibson2.render.profiler import Profiler
+from IPython import embed
def main():
config = parse_config('../configs/turtlebot_demo.yaml')
- settings = MeshRendererSettings(enable_shadow=True, msaa=False)
- s = Simulator(mode='gui', image_width=256, image_height=256, rendering_settings=settings)
+ settings = MeshRendererSettings(enable_shadow=False, msaa=False)
+ s = Simulator(mode='gui', image_width=256,
+ image_height=256, rendering_settings=settings)
scene = StaticIndoorScene('Rs',
build_graph=True,
@@ -23,22 +25,16 @@ def main():
for _ in range(10):
obj = YCBObject('003_cracker_box')
s.import_object(obj)
- obj.set_position_orientation(np.random.uniform(low=0, high=2, size=3), [0,0,0,1])
+ obj.set_position_orientation(np.random.uniform(
+ low=0, high=2, size=3), [0, 0, 0, 1])
print(s.renderer.instances)
- for item in s.renderer.instances[1:]:
- item.use_pbr = True
- item.use_pbr_mapping = False
- item.metalness = np.random.random()
- item.roughness = np.random.random()
-
for i in range(10000):
with Profiler('Simulator step'):
- turtlebot.apply_action([0.1,0.1])
+ turtlebot.apply_action([0.1, 0.1])
s.step()
rgb = s.renderer.render_robot_cameras(modes=('rgb'))
-
s.disconnect()
diff --git a/examples/demo/web_ui/static/Beechwood_0.gif b/examples/demo/web_ui/static/Beechwood_0.gif
new file mode 100644
index 000000000..82c18fd37
Binary files /dev/null and b/examples/demo/web_ui/static/Beechwood_0.gif differ
diff --git a/examples/demo/web_ui/static/Merom_1.gif b/examples/demo/web_ui/static/Merom_1.gif
new file mode 100644
index 000000000..1ca031d82
Binary files /dev/null and b/examples/demo/web_ui/static/Merom_1.gif differ
diff --git a/examples/demo/web_ui/static/Rs.gif b/examples/demo/web_ui/static/Rs.gif
new file mode 100644
index 000000000..509ae2bfe
Binary files /dev/null and b/examples/demo/web_ui/static/Rs.gif differ
diff --git a/examples/demo/web_ui/static/fetch.jpg b/examples/demo/web_ui/static/fetch.jpg
new file mode 100644
index 000000000..262153a8f
Binary files /dev/null and b/examples/demo/web_ui/static/fetch.jpg differ
diff --git a/examples/demo/web_ui/static/igibson_logo.png b/examples/demo/web_ui/static/igibson_logo.png
new file mode 100644
index 000000000..310da6549
Binary files /dev/null and b/examples/demo/web_ui/static/igibson_logo.png differ
diff --git a/examples/demo/web_ui/static/turtlebot.jpg b/examples/demo/web_ui/static/turtlebot.jpg
new file mode 100644
index 000000000..a99e7dab0
Binary files /dev/null and b/examples/demo/web_ui/static/turtlebot.jpg differ
diff --git a/examples/demo/web_ui/templates/demo.html b/examples/demo/web_ui/templates/demo.html
new file mode 100644
index 000000000..3e89adce1
--- /dev/null
+++ b/examples/demo/web_ui/templates/demo.html
@@ -0,0 +1,79 @@
+
+
+ iGibson Web Interface
+
+
+
+
+
+
+
+
+
+ "ASWD" to send moving signal, "F" to stop, everything is physically simulated in real time.
+
+
+
+
\ No newline at end of file
diff --git a/examples/demo/web_ui/templates/finished.jpg b/examples/demo/web_ui/templates/finished.jpg
new file mode 100644
index 000000000..60df96ae4
Binary files /dev/null and b/examples/demo/web_ui/templates/finished.jpg differ
diff --git a/examples/demo/web_ui/templates/index.html b/examples/demo/web_ui/templates/index.html
new file mode 100644
index 000000000..4f0301492
--- /dev/null
+++ b/examples/demo/web_ui/templates/index.html
@@ -0,0 +1,129 @@
+
+
+ iGibson Web Interface
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/demo/web_ui/templates/loading.jpg b/examples/demo/web_ui/templates/loading.jpg
new file mode 100644
index 000000000..a57c0bc4a
Binary files /dev/null and b/examples/demo/web_ui/templates/loading.jpg differ
diff --git a/examples/demo/web_ui/templates/waiting.jpg b/examples/demo/web_ui/templates/waiting.jpg
new file mode 100644
index 000000000..49da78455
Binary files /dev/null and b/examples/demo/web_ui/templates/waiting.jpg differ
diff --git a/examples/demo/web_ui/web_ui.py b/examples/demo/web_ui/web_ui.py
new file mode 100644
index 000000000..2ba1c3001
--- /dev/null
+++ b/examples/demo/web_ui/web_ui.py
@@ -0,0 +1,405 @@
+from flask import Flask, render_template, Response, request, session
+import sys
+import pickle
+from gibson2.robots.turtlebot_robot import Turtlebot
+from gibson2.robots.fetch_robot import Fetch
+
+from gibson2.simulator import Simulator
+from gibson2.scenes.gibson_indoor_scene import StaticIndoorScene
+from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
+import gibson2
+import os
+
+from gibson2.objects.ycb_object import YCBObject
+from gibson2.utils.utils import parse_config
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
+import numpy as np
+from gibson2.render.profiler import Profiler
+import cv2
+from PIL import Image
+from io import BytesIO
+import base64
+import binascii
+import multiprocessing
+import traceback
+import atexit
+import time
+import cv2
+import uuid
+
+interactive = True
+
+def pil_image_to_base64(pil_image):
+ buf = BytesIO()
+ pil_image.save(buf, format="JPEG")
+ return base64.b64encode(buf.getvalue())
+
+
+class ProcessPyEnvironment(object):
+ """Step a single env in a separate process for lock free paralellism."""
+
+ # Message types for communication via the pipe.
+ _READY = 1
+ _ACCESS = 2
+ _CALL = 3
+ _RESULT = 4
+ _EXCEPTION = 5
+ _CLOSE = 6
+
+ def __init__(self, env_constructor):
+ self._env_constructor = env_constructor
+
+
+ def start(self):
+ """Start the process."""
+ self._conn, conn = multiprocessing.Pipe()
+ self._process = multiprocessing.Process(target=self._worker,
+ args=(conn, self._env_constructor))
+ atexit.register(self.close)
+ self._process.start()
+ result = self._conn.recv()
+ if isinstance(result, Exception):
+ self._conn.close()
+ self._process.join(5)
+ raise result
+ assert result is self._READY, result
+
+ def __getattr__(self, name):
+ """Request an attribute from the environment.
+ Note that this involves communication with the external process, so it can
+ be slow.
+
+ :param name: attribute to access.
+ :return: value of the attribute.
+ """
+ print('gettinng', name)
+ self._conn.send((self._ACCESS, name))
+ return self._receive()
+
+ def call(self, name, *args, **kwargs):
+ """Asynchronously call a method of the external environment.
+
+ :param name: name of the method to call.
+ :param args: positional arguments to forward to the method.
+ :param kwargs: keyword arguments to forward to the method.
+ :return: promise object that blocks and provides the return value when called.
+ """
+ payload = name, args, kwargs
+ self._conn.send((self._CALL, payload))
+ return self._receive
+
+ def close(self):
+ """Send a close message to the external process and join it."""
+ try:
+ self._conn.send((self._CLOSE, None))
+ self._conn.close()
+ except IOError:
+ # The connection was already closed.
+ pass
+ self._process.join(5)
+
+ def step(self, action, blocking=True):
+ """Step the environment.
+
+ :param action: the action to apply to the environment.
+ :param blocking: whether to wait for the result.
+ :return: (next_obs, reward, done, info) tuple when blocking, otherwise callable that returns that tuple
+ """
+ promise = self.call('step', action)
+ if blocking:
+ return promise()
+ else:
+ return promise
+
+ def reset(self, blocking=True):
+ """Reset the environment.
+
+ :param blocking: whether to wait for the result.
+ :return: next_obs when blocking, otherwise callable that returns next_obs
+ """
+ promise = self.call('reset')
+ if blocking:
+ return promise()
+ else:
+ return promise
+
+ def _receive(self):
+ """Wait for a message from the worker process and return its payload.
+
+ :raise Exception: an exception was raised inside the worker process.
+ :raise KeyError: the reveived message is of an unknown type.
+
+ :return: payload object of the message.
+ """
+ message, payload = self._conn.recv()
+ # Re-raise exceptions in the main process.
+ if message == self._EXCEPTION:
+ stacktrace = payload
+ raise Exception(stacktrace)
+ if message == self._RESULT:
+ return payload
+ self.close()
+ raise KeyError(
+ 'Received message of unexpected type {}'.format(message))
+
+ def _worker(self, conn, env_constructor):
+ """The process waits for actions and sends back environment results.
+
+ :param conn: connection for communication to the main process.
+ :param env_constructor: env_constructor for the OpenAI Gym environment.
+
+
+ :raise KeyError: when receiving a message of unknown type.
+ """
+ try:
+ np.random.seed()
+ env = env_constructor()
+ conn.send(self._READY) # Ready.
+ while True:
+ try:
+ # Only block for short times to have keyboard exceptions be raised.
+ if not conn.poll(0.1):
+ continue
+ message, payload = conn.recv()
+ except (EOFError, KeyboardInterrupt):
+ break
+ if message == self._ACCESS:
+ name = payload
+ result = getattr(env, name)
+ conn.send((self._RESULT, result))
+ continue
+ if message == self._CALL:
+ name, args, kwargs = payload
+ if name == 'step' or name == 'reset':
+ result = getattr(env, name)(*args, **kwargs)
+ conn.send((self._RESULT, result))
+ continue
+ if message == self._CLOSE:
+ getattr(env, 'close')()
+ assert payload is None
+ break
+ raise KeyError(
+ 'Received message of unknown type {}'.format(message))
+ except Exception: # pylint: disable=broad-except
+ etype, evalue, tb = sys.exc_info()
+ stacktrace = ''.join(traceback.format_exception(etype, evalue, tb))
+ message = 'Error in environment process: {}'.format(stacktrace)
+ conn.send((self._EXCEPTION, stacktrace))
+ finally:
+ conn.close()
+
+class ToyEnv(object):
+ def __init__(self):
+ config = parse_config('../../configs/turtlebot_demo.yaml')
+ hdr_texture = os.path.join(
+ gibson2.ig_dataset_path, 'scenes', 'background', 'probe_02.hdr')
+ hdr_texture2 = os.path.join(
+ gibson2.ig_dataset_path, 'scenes', 'background', 'probe_03.hdr')
+ light_modulation_map_filename = os.path.join(
+ gibson2.ig_dataset_path, 'scenes', 'Rs_int', 'layout', 'floor_lighttype_0.png')
+ background_texture = os.path.join(
+ gibson2.ig_dataset_path, 'scenes', 'background', 'urban_street_01.jpg')
+
+ settings = MeshRendererSettings(enable_shadow=False, enable_pbr=False)
+
+
+ self.s = Simulator(mode='headless', image_width=400,
+ image_height=400, rendering_settings=settings)
+ scene = StaticIndoorScene('Rs')
+ self.s.import_scene(scene)
+ #self.s.import_ig_scene(scene)
+ self.robot = Turtlebot(config)
+ self.s.import_robot(self.robot)
+
+ for _ in range(5):
+ obj = YCBObject('003_cracker_box')
+ self.s.import_object(obj)
+ obj.set_position_orientation(np.random.uniform(
+ low=0, high=2, size=3), [0, 0, 0, 1])
+ print(self.s.renderer.instances)
+
+ def step(self, a):
+ self.robot.apply_action(a)
+ self.s.step()
+ frame = self.s.renderer.render_robot_cameras(modes=('rgb'))[0]
+ return frame
+
+ def close(self):
+ self.s.disconnect()
+
+
+
+class ToyEnvInt(object):
+ def __init__(self, robot='turtlebot', scene='Rs_int'):
+ config = parse_config('../../configs/turtlebot_demo.yaml')
+ hdr_texture = os.path.join(
+ gibson2.ig_dataset_path, 'scenes', 'background', 'probe_02.hdr')
+ hdr_texture2 = os.path.join(
+ gibson2.ig_dataset_path, 'scenes', 'background', 'probe_03.hdr')
+ light_modulation_map_filename = os.path.join(
+ gibson2.ig_dataset_path, 'scenes', 'Rs_int', 'layout', 'floor_lighttype_0.png')
+ background_texture = os.path.join(
+ gibson2.ig_dataset_path, 'scenes', 'background', 'urban_street_01.jpg')
+
+ scene = InteractiveIndoorScene(
+ scene, texture_randomization=False, object_randomization=False)
+ #scene._set_first_n_objects(5)
+ scene.open_all_doors()
+
+ settings = MeshRendererSettings(env_texture_filename=hdr_texture,
+ env_texture_filename2=hdr_texture2,
+ env_texture_filename3=background_texture,
+ light_modulation_map_filename=light_modulation_map_filename,
+ enable_shadow=True, msaa=True,
+ light_dimming_factor=1.0,
+ optimized=True)
+
+ self.s = Simulator(mode='headless', image_width=400,
+ image_height=400, rendering_settings=settings)
+ self.s.import_ig_scene(scene)
+
+ if robot=='turtlebot':
+ self.robot = Turtlebot(config)
+ else:
+ self.robot = Fetch(config)
+
+ self.s.import_robot(self.robot)
+
+ for _ in range(5):
+ obj = YCBObject('003_cracker_box')
+ self.s.import_object(obj)
+ obj.set_position_orientation(np.random.uniform(
+ low=0, high=2, size=3), [0, 0, 0, 1])
+ print(self.s.renderer.instances)
+
+ def step(self, a):
+ action = np.zeros(self.robot.action_space.shape)
+ if isinstance(self.robot, Turtlebot):
+ action[0] = a[0]
+ action[1] = a[1]
+ else:
+ action[1] = a[0]
+ action[0] = a[1]
+
+ self.robot.apply_action(action)
+ self.s.step()
+ frame = self.s.renderer.render_robot_cameras(modes=('rgb'))[0]
+ return frame
+
+ def close(self):
+ self.s.disconnect()
+
+class iGFlask(Flask):
+ def __init__(self, args, **kwargs):
+ super(iGFlask, self).__init__(args, **kwargs)
+ self.action= {}
+ self.envs = {}
+ self.envs_inception_time = {}
+ def cleanup(self):
+ print(self.envs)
+ for k,v in self.envs_inception_time.items():
+ if time.time() - v > 200:
+ # clean up an old environment
+ self.stop_app(k)
+
+ def prepare_app(self, uuid, robot, scene):
+ self.cleanup()
+
+ def env_constructor():
+ if interactive:
+ return ToyEnvInt(robot=robot, scene=scene)
+ else:
+ return ToyEnv()
+
+ self.envs[uuid] = ProcessPyEnvironment(env_constructor)
+ self.envs[uuid].start()
+ self.envs_inception_time[uuid] = time.time()
+
+ def stop_app(self, uuid):
+ self.envs[uuid].close()
+ del self.envs[uuid]
+ del self.envs_inception_time[uuid]
+
+app = iGFlask(__name__)
+
+@app.route('/')
+def index():
+ id = uuid.uuid4()
+ return render_template('index.html', uuid=id)
+
+@app.route('/demo')
+def demo():
+ args = request.args
+ id = uuid.uuid4()
+ robot = args['robot']
+ scene = args['scene']
+ return render_template('demo.html', uuid=id, robot=robot, scene=scene)
+
+
+def gen(app, unique_id, robot, scene):
+ image = np.array(Image.open("templates/loading.jpg").resize((400, 400))).astype(np.uint8)
+ loading_frame = pil_image_to_base64(Image.fromarray(image))
+ loading_frame = binascii.a2b_base64(loading_frame)
+
+ image = np.array(Image.open("templates/waiting.jpg").resize((400, 400))).astype(np.uint8)
+ waiting_frame = pil_image_to_base64(Image.fromarray(image))
+ waiting_frame = binascii.a2b_base64(waiting_frame)
+
+ image = np.array(Image.open("templates/finished.jpg").resize((400, 400))).astype(np.uint8)
+ finished_frame = pil_image_to_base64(Image.fromarray(image))
+ finished_frame = binascii.a2b_base64(finished_frame)
+ id = unique_id
+ if len(app.envs) < 3:
+ for i in range(5):
+ yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + loading_frame + b'\r\n\r\n')
+ app.prepare_app(id, robot, scene)
+ try:
+ start_time = time.time()
+ if interactive:
+ timeout = 200
+ else:
+ timeout = 30
+ while time.time() - start_time < timeout:
+ frame = app.envs[id].step(app.action[id])
+ frame = (frame[:, :, :3] * 255).astype(np.uint8)
+ frame = pil_image_to_base64(Image.fromarray(frame))
+ frame = binascii.a2b_base64(frame)
+ yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
+ except:
+ pass
+ finally:
+ app.stop_app(id)
+ for i in range(5):
+ yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + finished_frame + b'\r\n\r\n')
+ else:
+ for i in range(5):
+ yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + waiting_frame + b'\r\n\r\n')
+
+@app.route('/video_feed', methods=['POST', 'GET'])
+def video_feed():
+ unique_id = request.args['uuid']
+ if 'robot' in request.args.keys():
+ robot = request.args['robot']
+ if 'scene' in request.args.keys():
+ scene = request.args['scene']
+ print(unique_id)
+ if request.method == 'POST':
+ key = request.args['key']
+ if key == 'w':
+ app.action[unique_id] = [1,1]
+ if key == 's':
+ app.action[unique_id] = [-1,-1]
+ if key == 'd':
+ app.action[unique_id] = [0.3,-0.3]
+ if key == 'a':
+ app.action[unique_id] = [-0.3,0.3]
+ if key == 'f':
+ app.action[unique_id] = [0,0]
+ return ""
+ else:
+ app.action[unique_id] = [0,0]
+ return Response(gen(app, unique_id, robot, scene), mimetype='multipart/x-mixed-replace; boundary=frame')
+
+if __name__ == '__main__':
+ port = int(sys.argv[1])
+ app.run(host="0.0.0.0", port=port)
diff --git a/examples/ros/gibson2-ros/turtlebot_rgbd.py b/examples/ros/gibson2-ros/turtlebot_rgbd.py
index 6f1a45e76..89fa40bfc 100755
--- a/examples/ros/gibson2-ros/turtlebot_rgbd.py
+++ b/examples/ros/gibson2-ros/turtlebot_rgbd.py
@@ -11,7 +11,7 @@ import rospkg
import numpy as np
from cv_bridge import CvBridge
import tf
-from gibson2.envs.locomotor_env import NavigationEnv
+from gibson2.envs.igibson import iGibsonEnv
class SimNode:
@@ -24,15 +24,19 @@ class SimNode:
self.cmdx = 0.0
self.cmdy = 0.0
- self.image_pub = rospy.Publisher("/gibson_ros/camera/rgb/image", ImageMsg, queue_size=10)
- self.depth_pub = rospy.Publisher("/gibson_ros/camera/depth/image", ImageMsg, queue_size=10)
- self.lidar_pub = rospy.Publisher("/gibson_ros/lidar/points", PointCloud2, queue_size=10)
+ self.image_pub = rospy.Publisher(
+ "/gibson_ros/camera/rgb/image", ImageMsg, queue_size=10)
+ self.depth_pub = rospy.Publisher(
+ "/gibson_ros/camera/depth/image", ImageMsg, queue_size=10)
+ self.lidar_pub = rospy.Publisher(
+ "/gibson_ros/lidar/points", PointCloud2, queue_size=10)
self.depth_raw_pub = rospy.Publisher("/gibson_ros/camera/depth/image_raw",
ImageMsg,
queue_size=10)
self.odom_pub = rospy.Publisher("/odom", Odometry, queue_size=10)
- self.gt_odom_pub = rospy.Publisher("/ground_truth_odom", Odometry, queue_size=10)
+ self.gt_odom_pub = rospy.Publisher(
+ "/ground_truth_odom", Odometry, queue_size=10)
self.camera_info_pub = rospy.Publisher("/gibson_ros/camera/depth/camera_info",
CameraInfo,
@@ -40,13 +44,14 @@ class SimNode:
self.bridge = CvBridge()
self.br = tf.TransformBroadcaster()
- self.env = NavigationEnv(config_file=config_filename,
- mode='headless',
- action_timestep=1 / 30.0) # assume a 30Hz simulation
+ self.env = iGibsonEnv(config_file=config_filename,
+ mode='headless',
+ action_timestep=1 / 30.0) # assume a 30Hz simulation
print(self.env.config)
obs = self.env.reset()
- rospy.Subscriber("/mobile_base/commands/velocity", Twist, self.cmd_callback)
+ rospy.Subscriber("/mobile_base/commands/velocity",
+ Twist, self.cmd_callback)
rospy.Subscriber("/reset_pose", PoseStamped, self.tp_robot_callback)
self.tp_time = None
@@ -71,8 +76,10 @@ class SimNode:
depth = obs["depth"].astype(np.float32)
image_message = self.bridge.cv2_to_imgmsg(rgb, encoding="rgb8")
depth_raw_image = (obs["depth"] * 1000).astype(np.uint16)
- depth_raw_message = self.bridge.cv2_to_imgmsg(depth_raw_image, encoding="passthrough")
- depth_message = self.bridge.cv2_to_imgmsg(depth, encoding="passthrough")
+ depth_raw_message = self.bridge.cv2_to_imgmsg(
+ depth_raw_image, encoding="passthrough")
+ depth_message = self.bridge.cv2_to_imgmsg(
+ depth, encoding="passthrough")
now = rospy.Time.now()
@@ -103,7 +110,8 @@ class SimNode:
lidar_header = Header()
lidar_header.stamp = now
lidar_header.frame_id = 'scan_link'
- lidar_message = pc2.create_cloud_xyz32(lidar_header, lidar_points.tolist())
+ lidar_message = pc2.create_cloud_xyz32(
+ lidar_header, lidar_points.tolist())
self.lidar_pub.publish(lidar_message)
# odometry
@@ -116,7 +124,8 @@ class SimNode:
]
self.br.sendTransform((odom[0][0], odom[0][1], 0),
- tf.transformations.quaternion_from_euler(0, 0, odom[-1][-1]),
+ tf.transformations.quaternion_from_euler(
+ 0, 0, odom[-1][-1]),
rospy.Time.now(), 'base_footprint', "odom")
odom_msg = Odometry()
odom_msg.header.stamp = rospy.Time.now()
@@ -126,10 +135,12 @@ class SimNode:
odom_msg.pose.pose.position.x = odom[0][0]
odom_msg.pose.pose.position.y = odom[0][1]
odom_msg.pose.pose.orientation.x, odom_msg.pose.pose.orientation.y, odom_msg.pose.pose.orientation.z, \
- odom_msg.pose.pose.orientation.w = tf.transformations.quaternion_from_euler(0, 0, odom[-1][-1])
+ odom_msg.pose.pose.orientation.w = tf.transformations.quaternion_from_euler(
+ 0, 0, odom[-1][-1])
odom_msg.twist.twist.linear.x = (self.cmdx + self.cmdy) * 5
- odom_msg.twist.twist.angular.z = (self.cmdy - self.cmdx) * 5 * 8.695652173913043
+ odom_msg.twist.twist.angular.z = (
+ self.cmdy - self.cmdx) * 5 * 8.695652173913043
self.odom_pub.publish(odom_msg)
# Ground truth pose
@@ -151,16 +162,20 @@ class SimNode:
rpy[2])
gt_odom_msg.twist.twist.linear.x = (self.cmdx + self.cmdy) * 5
- gt_odom_msg.twist.twist.angular.z = (self.cmdy - self.cmdx) * 5 * 8.695652173913043
+ gt_odom_msg.twist.twist.angular.z = (
+ self.cmdy - self.cmdx) * 5 * 8.695652173913043
self.gt_odom_pub.publish(gt_odom_msg)
def cmd_callback(self, data):
- self.cmdx = data.linear.x / 10.0 - data.angular.z / (10 * 8.695652173913043)
- self.cmdy = data.linear.x / 10.0 + data.angular.z / (10 * 8.695652173913043)
+ self.cmdx = data.linear.x / 10.0 - \
+ data.angular.z / (10 * 8.695652173913043)
+ self.cmdy = data.linear.x / 10.0 + \
+ data.angular.z / (10 * 8.695652173913043)
def tp_robot_callback(self, data):
rospy.loginfo('Teleporting robot')
- position = [data.pose.position.x, data.pose.position.y, data.pose.position.z]
+ position = [data.pose.position.x,
+ data.pose.position.y, data.pose.position.z]
orientation = [
data.pose.orientation.x, data.pose.orientation.y, data.pose.orientation.z,
data.pose.orientation.w
diff --git a/examples/ros/gibson2-ros/turtlebot_rgbd.yaml b/examples/ros/gibson2-ros/turtlebot_rgbd.yaml
index 7c93f7d34..2f11bc860 100644
--- a/examples/ros/gibson2-ros/turtlebot_rgbd.yaml
+++ b/examples/ros/gibson2-ros/turtlebot_rgbd.yaml
@@ -1,58 +1,75 @@
# scene
+scene: gibson
+scene_id: Rs
+build_graph: true
+load_texture: true
+pybullet_load_texture: true
+trav_map_type: no_obj
+trav_map_resolution: 0.1
+trav_map_erosion: 2
+should_open_all_doors: true
-scene: building
-scene_id: area1
+# domain randomization
+texture_randomization_freq: null
+object_randomization_freq: null
# robot
-
robot: Turtlebot
-
-# task, observation and action
-task: pointgoal # pointgoal|objectgoal|areagoal
-
-initial_orn: [0.0, 0.0, 0.0]
-initial_pos: [0.0, 0.0, 0.0]
-
-target_orn: [0.0, 0.0, 0.0]
-target_pos: [3.0, 5.0, 0.0]
-
-dist_tol: 0.5
-terminal_reward: 5000
-discount_factor: 1.0
-
-additional_states_dim: 3
-
-fisheye: false
-fov: 1.57
is_discrete: false
+velocity: 1.0
-debug: true
-# display
+# task
+task: point_nav_random
+target_dist_min: 1.0
+target_dist_max: 10.0
+goal_format: polar
+task_obs_dim: 4
-use_filler: true
-display_ui: false
-show_diagnostics: false
-ui_num: 2
-ui_components: [RGB_FILLED, DEPTH]
-random:
- random_initial_pose : false
- random_target_pose : false
- random_init_x_range: [-0.1, 0.1]
- random_init_y_range: [-0.1, 0.1]
- random_init_z_range: [-0.1, 0.1]
- random_init_rot_range: [-0.1, 0.1]
+# reward
+reward_type: geodesic
+success_reward: 10.0
+potential_reward_weight: 1.0
+collision_reward_weight: -0.1
-output: [nonviz_sensor, rgb, depth, scan]
-resolution: 256
+# discount factor
+discount_factor: 0.99
-speed:
- timestep: 0.001
- frameskip: 10
+# termination condition
+dist_tol: 0.36 # body width
+max_step: 500
+max_collisions_allowed: 500
-mode: web_ui #gui|headless
-verbose: false
-fast_lq_render: true
+# misc config
+initial_pos_z_offset: 0.1
+collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
+
+# sensor spec
+output: [task_obs, rgb, depth]
+# image
+# ASUS Xtion PRO LIVE
+# https://www.asus.com/us/3D-Sensor/Xtion_PRO_LIVE
+fisheye: false
+image_width: 160
+image_height: 120
+vertical_fov: 45
+# depth
+depth_low: 0.8
+depth_high: 3.5
+# scan
+# Hokuyo URG-04LX-UG01
+# https://www.hokuyo-aut.jp/search/single.php?serial=166
+# n_horizontal_rays is originally 683, sub-sampled 1/3
+n_horizontal_rays: 228
+n_vertical_beams: 1
+laser_linear_range: 5.6
+laser_angular_range: 240.0
+min_laser_dist: 0.05
+laser_link_name: scan_link
+
+# sensor noise
+depth_noise_rate: 0.0
+scan_noise_rate: 0.0
# visual objects
visual_object_at_initial_target_pos: true
-target_visual_object_visible_to_agent: true
+target_visual_object_visible_to_agent: false
diff --git a/gibson2/__init__.py b/gibson2/__init__.py
index af87f0a08..4afd9d9e1 100644
--- a/gibson2/__init__.py
+++ b/gibson2/__init__.py
@@ -17,10 +17,10 @@ else:
assets_path = os.path.expanduser(assets_path)
if 'GIBSON_DATASET_PATH' in os.environ:
- dataset_path = os.environ['GIBSON_DATASET_PATH']
+ g_dataset_path = os.environ['GIBSON_DATASET_PATH']
else:
- dataset_path = global_config['dataset_path']
-dataset_path = os.path.expanduser(dataset_path)
+ g_dataset_path = global_config['g_dataset_path']
+g_dataset_path = os.path.expanduser(g_dataset_path)
if 'IGIBSON_DATASET_PATH' in os.environ:
ig_dataset_path = os.environ['IGIBSON_DATASET_PATH']
@@ -28,16 +28,34 @@ else:
ig_dataset_path = global_config['ig_dataset_path']
ig_dataset_path = os.path.expanduser(ig_dataset_path)
+if '3DFRONT_DATASET_PATH' in os.environ:
+ threedfront_dataset_path = os.environ['3DFRONT_DATASET_PATH']
+else:
+ threedfront_dataset_path = global_config['threedfront_dataset_path']
+threedfront_dataset_path = os.path.expanduser(threedfront_dataset_path)
+
+if 'CUBICASA_DATASET_PATH' in os.environ:
+ cubicasa_dataset_path = os.environ['CUBICASA_DATASET_PATH']
+else:
+ cubicasa_dataset_path = global_config['cubicasa_dataset_path']
+cubicasa_dataset_path = os.path.expanduser(cubicasa_dataset_path)
+
root_path = os.path.dirname(os.path.realpath(__file__))
if not os.path.isabs(assets_path):
assets_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), assets_path)
-if not os.path.isabs(dataset_path):
- dataset_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), dataset_path)
+if not os.path.isabs(g_dataset_path):
+ g_dataset_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), g_dataset_path)
if not os.path.isabs(ig_dataset_path):
ig_dataset_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), ig_dataset_path)
+if not os.path.isabs(threedfront_dataset_path):
+ threedfront_dataset_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), threedfront_dataset_path)
+if not os.path.isabs(cubicasa_dataset_path):
+ cubicasa_dataset_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), cubicasa_dataset_path)
logging.info('Importing iGibson (gibson2 module)')
logging.info('Assets path: {}'.format(assets_path))
-logging.info('Dataset path: {}'.format(dataset_path))
+logging.info('Gibson Dataset path: {}'.format(g_dataset_path))
logging.info('iG Dataset path: {}'.format(ig_dataset_path))
+logging.info('3D-FRONT Dataset path: {}'.format(threedfront_dataset_path))
+logging.info('CubiCasa5K Dataset path: {}'.format(cubicasa_dataset_path))
diff --git a/gibson2/envs/env_base.py b/gibson2/envs/env_base.py
index 6e5542fef..d1dd0b955 100644
--- a/gibson2/envs/env_base.py
+++ b/gibson2/envs/env_base.py
@@ -13,13 +13,15 @@ from gibson2.scenes.stadium_scene import StadiumScene
from gibson2.scenes.gibson_indoor_scene import StaticIndoorScene
from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
from gibson2.utils.utils import parse_config
-from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRendererSettings
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
import gym
class BaseEnv(gym.Env):
'''
- a basic environment, step, observation and reward not implemented
+ Base Env class, follows OpenAI Gym interface
+ Handles loading scene and robot
+ Functions like reset and step are not implemented
'''
def __init__(self,
@@ -54,9 +56,12 @@ class BaseEnv(gym.Env):
enable_shadow = self.config.get('enable_shadow', False)
enable_pbr = self.config.get('enable_pbr', True)
+ texture_scale = self.config.get('texture_scale', 1.0)
+
settings = MeshRendererSettings(enable_shadow=enable_shadow,
enable_pbr=enable_pbr,
- msaa=False)
+ msaa=False,
+ texture_scale=texture_scale)
self.simulator = Simulator(mode=mode,
physics_timestep=physics_timestep,
@@ -69,14 +74,13 @@ class BaseEnv(gym.Env):
'vertical_fov', 90),
device_idx=device_idx,
render_to_tensor=render_to_tensor,
- rendering_settings=settings,
- auto_sync=True)
-
+ rendering_settings=settings)
self.load()
def reload(self, config_file):
"""
- Reload another config file, this allows one to change the environment on the fly
+ Reload another config file
+ Thhis allows one to change the configuration on the fly
:param config_file: new config file path
"""
@@ -86,7 +90,9 @@ class BaseEnv(gym.Env):
def reload_model(self, scene_id):
"""
- Reload another model, this allows one to change the environment on the fly
+ Reload another scene model
+ This allows one to change the scene on the fly
+
:param scene_id: new scene_id
"""
self.config['scene_id'] = scene_id
@@ -105,6 +111,9 @@ class BaseEnv(gym.Env):
self.load()
def get_next_scene_random_seed(self):
+ """
+ Get the next scene random seed
+ """
if self.object_randomization_freq is None:
return None
return self.scene_random_seeds[self.scene_random_seed_idx]
@@ -146,6 +155,7 @@ class BaseEnv(gym.Env):
trav_map_resolution=self.config.get(
'trav_map_resolution', 0.1),
trav_map_erosion=self.config.get('trav_map_erosion', 2),
+ trav_map_type=self.config.get('trav_map_type', 'with_obj'),
pybullet_load_texture=self.config.get(
'pybullet_load_texture', False),
texture_randomization=self.texture_randomization_freq is not None,
@@ -153,9 +163,16 @@ class BaseEnv(gym.Env):
object_randomization_idx=self.object_randomization_idx,
should_open_all_doors=self.config.get(
'should_open_all_doors', False),
- trav_map_type=self.config.get('trav_map_type', 'with_obj'),
+ load_object_categories=self.config.get(
+ 'load_object_categories', None),
+ load_room_types=self.config.get('load_room_types', None),
+ load_room_instances=self.config.get(
+ 'load_room_instances', None),
)
# TODO: Unify the function import_scene and take out of the if-else clauses
+ first_n = self.config.get('_set_first_n_objects', -1)
+ if first_n != -1:
+ scene._set_first_n_objects(first_n)
self.simulator.import_ig_scene(scene)
if self.config['robot'] == 'Turtlebot':
@@ -192,9 +209,17 @@ class BaseEnv(gym.Env):
if self.simulator is not None:
self.simulator.disconnect()
+ def close(self):
+ """
+ Synonymous function with clean
+ """
+ self.clean()
+
def simulator_step(self):
"""
- Step the simulation, this is different from environment step where one can get observation and reward
+ Step the simulation.
+ This is different from environment step that returns the next
+ observation, reward, done, info.
"""
self.simulator.step()
@@ -211,4 +236,7 @@ class BaseEnv(gym.Env):
return NotImplementedError()
def set_mode(self, mode):
+ """
+ Set simulator mode
+ """
self.simulator.mode = mode
diff --git a/gibson2/envs/igibson_env.py b/gibson2/envs/igibson_env.py
new file mode 100644
index 000000000..0d94bab51
--- /dev/null
+++ b/gibson2/envs/igibson_env.py
@@ -0,0 +1,480 @@
+from gibson2.utils.utils import quatToXYZW
+from gibson2.envs.env_base import BaseEnv
+from gibson2.tasks.room_rearrangement_task import RoomRearrangementTask
+from gibson2.tasks.point_nav_fixed_task import PointNavFixedTask
+from gibson2.tasks.point_nav_random_task import PointNavRandomTask
+from gibson2.tasks.interactive_nav_random_task import InteractiveNavRandomTask
+from gibson2.tasks.dynamic_nav_random_task import DynamicNavRandomTask
+from gibson2.tasks.reaching_random_task import ReachingRandomTask
+from gibson2.sensors.scan_sensor import ScanSensor
+from gibson2.sensors.vision_sensor import VisionSensor
+from gibson2.robots.robot_base import BaseRobot
+from gibson2.external.pybullet_tools.utils import stable_z_on_aabb
+
+from transforms3d.euler import euler2quat
+from collections import OrderedDict
+import argparse
+import gym
+import numpy as np
+import pybullet as p
+import time
+import logging
+
+
+class iGibsonEnv(BaseEnv):
+ """
+ iGibson Environment (OpenAI Gym interface)
+ """
+
+ def __init__(
+ self,
+ config_file,
+ scene_id=None,
+ mode='headless',
+ action_timestep=1 / 10.0,
+ physics_timestep=1 / 240.0,
+ device_idx=0,
+ render_to_tensor=False,
+ automatic_reset=False,
+ ):
+ """
+ :param config_file: config_file path
+ :param scene_id: override scene_id in config file
+ :param mode: headless, gui, iggui
+ :param action_timestep: environment executes action per action_timestep second
+ :param physics_timestep: physics timestep for pybullet
+ :param device_idx: which GPU to run the simulation and rendering on
+ :param render_to_tensor: whether to render directly to pytorch tensors
+ :param automatic_reset: whether to automatic reset after an episode finishes
+ """
+ super(iGibsonEnv, self).__init__(config_file=config_file,
+ scene_id=scene_id,
+ mode=mode,
+ action_timestep=action_timestep,
+ physics_timestep=physics_timestep,
+ device_idx=device_idx,
+ render_to_tensor=render_to_tensor)
+ self.automatic_reset = automatic_reset
+
+ def load_task_setup(self):
+ """
+ Load task setup
+ """
+ self.initial_pos_z_offset = self.config.get(
+ 'initial_pos_z_offset', 0.1)
+ # s = 0.5 * G * (t ** 2)
+ drop_distance = 0.5 * 9.8 * (self.action_timestep ** 2)
+ assert drop_distance < self.initial_pos_z_offset, \
+ 'initial_pos_z_offset is too small for collision checking'
+
+ # ignore the agent's collision with these body ids
+ self.collision_ignore_body_b_ids = set(
+ self.config.get('collision_ignore_body_b_ids', []))
+ # ignore the agent's collision with these link ids of itself
+ self.collision_ignore_link_a_ids = set(
+ self.config.get('collision_ignore_link_a_ids', []))
+
+ # discount factor
+ self.discount_factor = self.config.get('discount_factor', 0.99)
+
+ # domain randomization frequency
+ self.texture_randomization_freq = self.config.get(
+ 'texture_randomization_freq', None)
+ self.object_randomization_freq = self.config.get(
+ 'object_randomization_freq', None)
+
+ # task
+ if self.config['task'] == 'point_nav_fixed':
+ self.task = PointNavFixedTask(self)
+ elif self.config['task'] == 'point_nav_random':
+ self.task = PointNavRandomTask(self)
+ elif self.config['task'] == 'interactive_nav_random':
+ self.task = InteractiveNavRandomTask(self)
+ elif self.config['task'] == 'dynamic_nav_random':
+ self.task = DynamicNavRandomTask(self)
+ elif self.config['task'] == 'reaching_random':
+ self.task = ReachingRandomTask(self)
+ elif self.config['task'] == 'room_rearrangement':
+ self.task = RoomRearrangementTask(self)
+ else:
+ self.task = None
+
+ def build_obs_space(self, shape, low, high):
+ """
+ Helper function that builds individual observation spaces
+ """
+ return gym.spaces.Box(
+ low=low,
+ high=high,
+ shape=shape,
+ dtype=np.float32)
+
+ def load_observation_space(self):
+ """
+ Load observation space
+ """
+ self.output = self.config['output']
+ self.image_width = self.config.get('image_width', 128)
+ self.image_height = self.config.get('image_height', 128)
+ observation_space = OrderedDict()
+ sensors = OrderedDict()
+ vision_modalities = []
+ scan_modalities = []
+
+ if 'task_obs' in self.output:
+ observation_space['task_obs'] = self.build_obs_space(
+ shape=(self.task.task_obs_dim,), low=-np.inf, high=-np.inf)
+ if 'rgb' in self.output:
+ observation_space['rgb'] = self.build_obs_space(
+ shape=(self.image_height, self.image_width, 3),
+ low=0.0, high=1.0)
+ vision_modalities.append('rgb')
+ if 'depth' in self.output:
+ observation_space['depth'] = self.build_obs_space(
+ shape=(self.image_height, self.image_width, 1),
+ low=0.0, high=1.0)
+ vision_modalities.append('depth')
+ if 'pc' in self.output:
+ observation_space['pc'] = self.build_obs_space(
+ shape=(self.image_height, self.image_width, 3),
+ low=-np.inf, high=np.inf)
+ vision_modalities.append('pc')
+ if 'optical_flow' in self.output:
+ observation_space['optical_flow'] = self.build_obs_space(
+ shape=(self.image_height, self.image_width, 2),
+ low=-np.inf, high=np.inf)
+ vision_modalities.append('optical_flow')
+ if 'scene_flow' in self.output:
+ observation_space['scene_flow'] = self.build_obs_space(
+ shape=(self.image_height, self.image_width, 3),
+ low=-np.inf, high=np.inf)
+ vision_modalities.append('scene_flow')
+ if 'normal' in self.output:
+ observation_space['normal'] = self.build_obs_space(
+ shape=(self.image_height, self.image_width, 3),
+ low=-np.inf, high=np.inf)
+ vision_modalities.append('normal')
+ if 'seg' in self.output:
+ observation_space['seg'] = self.build_obs_space(
+ shape=(self.image_height, self.image_width, 1),
+ low=0.0, high=1.0)
+ vision_modalities.append('seg')
+ if 'rgb_filled' in self.output: # use filler
+ observation_space['rgb_filled'] = self.build_obs_space(
+ shape=(self.image_height, self.image_width, 3),
+ low=0.0, high=1.0)
+ vision_modalities.append('rgb_filled')
+ if 'scan' in self.output:
+ self.n_horizontal_rays = self.config.get('n_horizontal_rays', 128)
+ self.n_vertical_beams = self.config.get('n_vertical_beams', 1)
+ assert self.n_vertical_beams == 1, 'scan can only handle one vertical beam for now'
+ observation_space['scan'] = self.build_obs_space(
+ shape=(self.n_horizontal_rays * self.n_vertical_beams, 1),
+ low=0.0, high=1.0)
+ scan_modalities.append('scan')
+ if 'occupancy_grid' in self.output:
+ self.grid_resolution = self.config.get('grid_resolution', 128)
+ self.occupancy_grid_space = gym.spaces.Box(low=0.0,
+ high=1.0,
+ shape=(self.grid_resolution,
+ self.grid_resolution, 1))
+ observation_space['occupancy_grid'] = self.occupancy_grid_space
+ scan_modalities.append('occupancy_grid')
+
+ if len(vision_modalities) > 0:
+ sensors['vision'] = VisionSensor(self, vision_modalities)
+
+ if len(scan_modalities) > 0:
+ sensors['scan_occ'] = ScanSensor(self, scan_modalities)
+
+ self.observation_space = gym.spaces.Dict(observation_space)
+ self.sensors = sensors
+
+ def load_action_space(self):
+ """
+ Load action space
+ """
+ self.action_space = self.robots[0].action_space
+
+ def load_miscellaneous_variables(self):
+ """
+ Load miscellaneous variables for book keeping
+ """
+ self.current_step = 0
+ self.collision_step = 0
+ self.current_episode = 0
+ self.collision_links = []
+
+ def load(self):
+ """
+ Load environment
+ """
+ super(iGibsonEnv, self).load()
+ self.load_task_setup()
+ self.load_observation_space()
+ self.load_action_space()
+ self.load_miscellaneous_variables()
+
+ def get_state(self, collision_links=[]):
+ """
+ Get the current observation
+
+ :param collision_links: collisions from last physics timestep
+ :return: observation as a dictionary
+ """
+ state = OrderedDict()
+ if 'task_obs' in self.output:
+ state['task_obs'] = self.task.get_task_obs(self)
+ if 'vision' in self.sensors:
+ vision_obs = self.sensors['vision'].get_obs(self)
+ for modality in vision_obs:
+ state[modality] = vision_obs[modality]
+ if 'scan_occ' in self.sensors:
+ scan_obs = self.sensors['scan_occ'].get_obs(self)
+ for modality in scan_obs:
+ state[modality] = scan_obs[modality]
+
+ return state
+
+ def run_simulation(self):
+ """
+ Run simulation for one action timestep (same as one render timestep in Simulator class)
+
+ :return: collision_links: collisions from last physics timestep
+ """
+ self.simulator_step()
+ collision_links = list(p.getContactPoints(
+ bodyA=self.robots[0].robot_ids[0]))
+ return self.filter_collision_links(collision_links)
+
+ def filter_collision_links(self, collision_links):
+ """
+ Filter out collisions that should be ignored
+
+ :param collision_links: original collisions, a list of collisions
+ :return: filtered collisions
+ """
+ new_collision_links = []
+ for item in collision_links:
+ # ignore collision with body b
+ if item[2] in self.collision_ignore_body_b_ids:
+ continue
+
+ # ignore collision with robot link a
+ if item[3] in self.collision_ignore_link_a_ids:
+ continue
+
+ # ignore self collision with robot link a (body b is also robot itself)
+ if item[2] == self.robots[0].robot_ids[0] and item[4] in self.collision_ignore_link_a_ids:
+ continue
+ new_collision_links.append(item)
+ return new_collision_links
+
+ def populate_info(self, info):
+ """
+ Populate info dictionary with any useful information
+ """
+ info['episode_length'] = self.current_step
+ info['collision_step'] = self.collision_step
+
+ def step(self, action):
+ """
+ Apply robot's action.
+ Returns the next state, reward, done and info,
+ following OpenAI Gym's convention
+
+ :param action: robot actions
+ :return: state: next observation
+ :return: reward: reward of this time step
+ :return: done: whether the episode is terminated
+ :return: info: info dictionary with any useful information
+ """
+ self.current_step += 1
+ if action is not None:
+ self.robots[0].apply_action(action)
+ collision_links = self.run_simulation()
+ self.collision_links = collision_links
+ self.collision_step += int(len(collision_links) > 0)
+
+ state = self.get_state(collision_links)
+ info = {}
+ reward, info = self.task.get_reward(
+ self, collision_links, action, info)
+ done, info = self.task.get_termination(
+ self, collision_links, action, info)
+ self.task.step(self)
+ self.populate_info(info)
+
+ if done and self.automatic_reset:
+ info['last_observation'] = state
+ state = self.reset()
+
+ return state, reward, done, info
+
+ def check_collision(self, body_id):
+ """
+ Check with the given body_id has any collision after one simulator step
+
+ :param body_id: pybullet body id
+ :return: whether the given body_id has no collision
+ """
+ self.simulator_step()
+ collisions = list(p.getContactPoints(bodyA=body_id))
+
+ if logging.root.level <= logging.DEBUG: # Only going into this if it is for logging --> efficiency
+ for item in collisions:
+ logging.debug('bodyA:{}, bodyB:{}, linkA:{}, linkB:{}'.format(
+ item[1], item[2], item[3], item[4]))
+
+ return len(collisions) == 0
+
+ def set_pos_orn_with_z_offset(self, obj, pos, orn=None, offset=None):
+ """
+ Reset position and orientation for the robot or the object
+
+ :param obj: an instance of robot or object
+ :param pos: position
+ :param orn: orientation
+ :param offset: z offset
+ """
+ if orn is None:
+ orn = np.array([0, 0, np.random.uniform(0, np.pi * 2)])
+
+ if offset is None:
+ offset = self.initial_pos_z_offset
+
+ is_robot = isinstance(obj, BaseRobot)
+ body_id = obj.robot_ids[0] if is_robot else obj.body_id
+ # first set the correct orientation
+ obj.set_position_orientation(pos, quatToXYZW(euler2quat(*orn), 'wxyz'))
+ # compute stable z based on this orientation
+ stable_z = stable_z_on_aabb(body_id, [pos, pos])
+ # change the z-value of position with stable_z + additional offset
+ # in case the surface is not perfect smooth (has bumps)
+ obj.set_position([pos[0], pos[1], stable_z + offset])
+
+ def test_valid_position(self, obj, pos, orn=None):
+ """
+ Test if the robot or the object can be placed with no collision
+
+ :param obj: an instance of robot or object
+ :param pos: position
+ :param orn: orientation
+ :return: validity
+ """
+ is_robot = isinstance(obj, BaseRobot)
+
+ self.set_pos_orn_with_z_offset(obj, pos, orn)
+
+ if is_robot:
+ obj.robot_specific_reset()
+ obj.keep_still()
+
+ body_id = obj.robot_ids[0] if is_robot else obj.body_id
+ has_collision = self.check_collision(body_id)
+ return has_collision
+
+ def land(self, obj, pos, orn):
+ """
+ Land the robot or the object onto the floor, given a valid position and orientation
+
+ :param obj: an instance of robot or object
+ :param pos: position
+ :param orn: orientation
+ """
+ is_robot = isinstance(obj, BaseRobot)
+
+ self.set_pos_orn_with_z_offset(obj, pos, orn)
+
+ if is_robot:
+ obj.robot_specific_reset()
+ obj.keep_still()
+
+ body_id = obj.robot_ids[0] if is_robot else obj.body_id
+
+ land_success = False
+ # land for maximum 1 second, should fall down ~5 meters
+ max_simulator_step = int(1.0 / self.action_timestep)
+ for _ in range(max_simulator_step):
+ self.simulator_step()
+ if len(p.getContactPoints(bodyA=body_id)) > 0:
+ land_success = True
+ break
+
+ if not land_success:
+ print("WARNING: Failed to land")
+
+ if is_robot:
+ obj.robot_specific_reset()
+ obj.keep_still()
+
+ def reset_variables(self):
+ """
+ Reset bookkeeping variables for the next new episode
+ """
+ self.current_episode += 1
+ self.current_step = 0
+ self.collision_step = 0
+ self.collision_links = []
+
+ def randomize_domain(self):
+ """
+ Domain randomization
+ Object randomization loads new object models with the same poses
+ Texture randomization loads new materials and textures for the same object models
+ """
+ if self.object_randomization_freq is not None:
+ if self.current_episode % self.object_randomization_freq == 0:
+ self.reload_model_object_randomization()
+ if self.texture_randomization_freq is not None:
+ if self.current_episode % self.texture_randomization_freq == 0:
+ self.simulator.scene.randomize_texture()
+
+ def reset(self):
+ """
+ Reset episode
+ """
+ self.randomize_domain()
+ # move robot away from the scene
+ self.robots[0].set_position([100.0, 100.0, 100.0])
+ self.task.reset_scene(self)
+ self.task.reset_agent(self)
+ self.simulator.sync()
+ state = self.get_state()
+ self.reset_variables()
+
+ return state
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ '--config',
+ '-c',
+ help='which config file to use [default: use yaml files in examples/configs]')
+ parser.add_argument('--mode',
+ '-m',
+ choices=['headless', 'gui', 'iggui'],
+ default='headless',
+ help='which mode for simulation (default: headless)')
+ args = parser.parse_args()
+
+ env = iGibsonEnv(config_file=args.config,
+ mode=args.mode,
+ action_timestep=1.0 / 10.0,
+ physics_timestep=1.0 / 40.0)
+
+ step_time_list = []
+ for episode in range(100):
+ print('Episode: {}'.format(episode))
+ start = time.time()
+ env.reset()
+ for _ in range(100): # 10 seconds
+ action = env.action_space.sample()
+ state, reward, done, _ = env.step(action)
+ print('reward', reward)
+ if done:
+ break
+ print('Episode finished after {} timesteps, took {} seconds.'.format(
+ env.current_step, time.time() - start))
+ env.close()
diff --git a/gibson2/envs/locomotor_env.py b/gibson2/envs/locomotor_env.py
deleted file mode 100644
index 55fdfa043..000000000
--- a/gibson2/envs/locomotor_env.py
+++ /dev/null
@@ -1,1068 +0,0 @@
-import gibson2
-from gibson2.objects.visual_marker import VisualMarker
-from gibson2.objects.articulated_object import ArticulatedObject
-from gibson2.robots.turtlebot_robot import Turtlebot
-from gibson2.utils.utils import rotate_vector_3d, l2_distance, quatToXYZW, cartesian_to_polar
-from gibson2.envs.env_base import BaseEnv
-from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
-from transforms3d.euler import euler2quat
-from collections import OrderedDict
-import argparse
-from transforms3d.quaternions import quat2mat
-import gym
-import numpy as np
-import os
-import pybullet as p
-import time
-import logging
-
-
-class NavigationEnv(BaseEnv):
- """
- We define navigation environments following Anderson, Peter, et al. 'On evaluation of embodied navigation agents.'
- arXiv preprint arXiv:1807.06757 (2018). (https://arxiv.org/pdf/1807.06757.pdf)
-
- """
-
- def __init__(
- self,
- config_file,
- scene_id=None,
- mode='headless',
- action_timestep=1 / 10.0,
- physics_timestep=1 / 240.0,
- automatic_reset=False,
- device_idx=0,
- render_to_tensor=False
- ):
- """
- :param config_file: config_file path
- :param scene_id: override scene_id in config file
- :param mode: headless or gui mode
- :param action_timestep: environment executes action per action_timestep second
- :param physics_timestep: physics timestep for pybullet
- :param automatic_reset: whether to automatic reset after an episode finishes
- :param device_idx: device_idx: which GPU to run the simulation and rendering on
- """
- super(NavigationEnv, self).__init__(config_file=config_file,
- scene_id=scene_id,
- mode=mode,
- action_timestep=action_timestep,
- physics_timestep=physics_timestep,
- device_idx=device_idx,
- render_to_tensor=render_to_tensor)
- self.automatic_reset = automatic_reset
-
- def load_task_setup(self):
- """
- Load task setup, including initialization, termination conditino, reward, collision checking, discount factor
- """
- # initial and target pose
- self.initial_pos = np.array(self.config.get('initial_pos', [0, 0, 0]))
- self.initial_orn = np.array(self.config.get('initial_orn', [0, 0, 0]))
- self.target_pos = np.array(self.config.get('target_pos', [5, 5, 0]))
- self.target_orn = np.array(self.config.get('target_orn', [0, 0, 0]))
-
- self.initial_pos_z_offset = self.config.get(
- 'initial_pos_z_offset', 0.1)
- check_collision_distance = self.initial_pos_z_offset * 0.5
- # s = 0.5 * G * (t ** 2)
- check_collision_distance_time = np.sqrt(
- check_collision_distance / (0.5 * 9.8))
- self.check_collision_loop = int(
- check_collision_distance_time / self.action_timestep)
-
- self.additional_states_dim = self.config.get(
- 'additional_states_dim', 0)
- self.goal_format = self.config.get('goal_format', 'polar')
-
- # termination condition
- self.dist_tol = self.config.get('dist_tol', 0.5)
- self.max_step = self.config.get('max_step', 500)
- self.max_collisions_allowed = self.config.get(
- 'max_collisions_allowed', 500)
-
- # reward
- self.reward_type = self.config.get('reward_type', 'l2')
- assert self.reward_type in ['geodesic', 'l2', 'sparse']
-
- self.success_reward = self.config.get('success_reward', 10.0)
- self.slack_reward = self.config.get('slack_reward', -0.01)
-
- # reward weight
- self.potential_reward_weight = self.config.get(
- 'potential_reward_weight', 1.0)
- self.collision_reward_weight = self.config.get(
- 'collision_reward_weight', -0.1)
-
- # ignore the agent's collision with these body ids
- self.collision_ignore_body_b_ids = set(
- self.config.get('collision_ignore_body_b_ids', []))
- # ignore the agent's collision with these link ids of itself
- self.collision_ignore_link_a_ids = set(
- self.config.get('collision_ignore_link_a_ids', []))
-
- # discount factor
- self.discount_factor = self.config.get('discount_factor', 0.99)
-
- # domain randomization frequency
- self.texture_randomization_freq = self.config.get(
- 'texture_randomization_freq', None)
- self.object_randomization_freq = self.config.get(
- 'object_randomization_freq', None)
-
- def load_observation_space(self):
- """
- Load observation space
- """
- self.output = self.config['output']
- self.image_width = self.config.get('image_width', 128)
- self.image_height = self.config.get('image_height', 128)
- observation_space = OrderedDict()
- if 'sensor' in self.output:
- self.sensor_dim = self.additional_states_dim
- self.sensor_space = gym.spaces.Box(low=-np.inf,
- high=np.inf,
- shape=(self.sensor_dim,),
- dtype=np.float32)
- observation_space['sensor'] = self.sensor_space
- if 'rgb' in self.output:
- self.rgb_space = gym.spaces.Box(low=0.0,
- high=1.0,
- shape=(self.image_height,
- self.image_width, 3),
- dtype=np.float32)
- observation_space['rgb'] = self.rgb_space
- if 'depth' in self.output:
- self.depth_noise_rate = self.config.get('depth_noise_rate', 0.0)
- self.depth_low = self.config.get('depth_low', 0.5)
- self.depth_high = self.config.get('depth_high', 5.0)
- self.depth_space = gym.spaces.Box(low=0.0,
- high=1.0,
- shape=(self.image_height,
- self.image_width, 1),
- dtype=np.float32)
- observation_space['depth'] = self.depth_space
- if 'rgbd' in self.output:
- self.rgbd_space = gym.spaces.Box(low=0.0,
- high=1.0,
- shape=(self.image_height,
- self.image_width, 4),
- dtype=np.float32)
- observation_space['rgbd'] = self.rgbd_space
- if 'seg' in self.output:
- self.seg_space = gym.spaces.Box(low=0.0,
- high=1.0,
- shape=(self.image_height,
- self.image_width, 1),
- dtype=np.float32)
- observation_space['seg'] = self.seg_space
- if 'scan' in self.output:
- self.scan_noise_rate = self.config.get('scan_noise_rate', 0.0)
- self.n_horizontal_rays = self.config.get('n_horizontal_rays', 128)
- self.n_vertical_beams = self.config.get('n_vertical_beams', 1)
- assert self.n_vertical_beams == 1, 'scan can only handle one vertical beam for now'
- self.laser_linear_range = self.config.get(
- 'laser_linear_range', 10.0)
- self.laser_angular_range = self.config.get(
- 'laser_angular_range', 180.0)
- self.min_laser_dist = self.config.get('min_laser_dist', 0.05)
- self.laser_link_name = self.config.get(
- 'laser_link_name', 'scan_link')
- self.scan_space = gym.spaces.Box(low=0.0,
- high=1.0,
- shape=(self.n_horizontal_rays *
- self.n_vertical_beams, 1),
- dtype=np.float32)
- observation_space['scan'] = self.scan_space
- if 'rgb_filled' in self.output: # use filler
- try:
- import torch.nn as nn
- import torch
- from torchvision import datasets, transforms
- from gibson2.learn.completion import CompletionNet
- except:
- raise Exception(
- 'Trying to use rgb_filled ("the goggle"), but torch is not installed. Try "pip install torch torchvision".')
-
- self.comp = CompletionNet(norm=nn.BatchNorm2d, nf=64)
- self.comp = torch.nn.DataParallel(self.comp).cuda()
- self.comp.load_state_dict(
- torch.load(os.path.join(gibson2.assets_path, 'networks', 'model.pth')))
- self.comp.eval()
-
- self.observation_space = gym.spaces.Dict(observation_space)
-
- def load_action_space(self):
- """
- Load action space
- """
- self.action_space = self.robots[0].action_space
-
- def load_visualization(self):
- """
- Load visualization, such as initial and target position, shortest path, etc
- """
- if self.mode != 'gui':
- return
-
- cyl_length = 0.2
- self.initial_pos_vis_obj = VisualMarker(visual_shape=p.GEOM_CYLINDER,
- rgba_color=[1, 0, 0, 0.3],
- radius=self.dist_tol,
- length=cyl_length,
- initial_offset=[0, 0, cyl_length / 2.0])
- self.target_pos_vis_obj = VisualMarker(visual_shape=p.GEOM_CYLINDER,
- rgba_color=[0, 0, 1, 0.3],
- radius=self.dist_tol,
- length=cyl_length,
- initial_offset=[0, 0, cyl_length / 2.0])
- self.initial_pos_vis_obj.load()
- self.target_pos_vis_obj.load()
-
- if self.scene.build_graph:
- self.num_waypoints_vis = 250
- self.waypoints_vis = [VisualMarker(visual_shape=p.GEOM_CYLINDER,
- rgba_color=[0, 1, 0, 0.3],
- radius=0.1,
- length=cyl_length,
- initial_offset=[0, 0, cyl_length / 2.0])
- for _ in range(self.num_waypoints_vis)]
- for waypoint in self.waypoints_vis:
- waypoint.load()
-
- def load_miscellaneous_variables(self):
- """
- Load miscellaneous variables for book keeping
- """
- self.current_step = 0
- self.collision_step = 0
- self.current_episode = 0
- self.floor_num = 0
-
- def load(self):
- """
- Load navigation environment
- """
- super(NavigationEnv, self).load()
- self.load_task_setup()
- self.load_observation_space()
- self.load_action_space()
- self.load_visualization()
- self.load_miscellaneous_variables()
-
- def global_to_local(self, pos):
- """
- Convert a 3D point in global frame to agent's local frame
- :param pos: a 3D point in global frame
- :return: the same 3D point in agent's local frame
- """
- return rotate_vector_3d(pos - self.robots[0].get_position(), *self.robots[0].get_rpy())
-
- def get_additional_states(self):
- """
- :return: non-perception observation, such as goal location
- """
- additional_states = self.global_to_local(self.target_pos)[:2]
- if self.goal_format == 'polar':
- additional_states = np.array(cartesian_to_polar(
- additional_states[0], additional_states[1]))
-
- # linear velocity along the x-axis
- linear_velocity = rotate_vector_3d(self.robots[0].get_linear_velocity(),
- *self.robots[0].get_rpy())[0]
- # angular velocity along the z-axis
- angular_velocity = rotate_vector_3d(self.robots[0].get_angular_velocity(),
- *self.robots[0].get_rpy())[2]
- additional_states = np.append(
- additional_states, [linear_velocity, angular_velocity])
-
- if self.config['task'] == 'reaching':
- end_effector_pos_local = self.global_to_local(
- self.robots[0].get_end_effector_position())
- additional_states = np.append(
- additional_states, end_effector_pos_local)
-
- assert additional_states.shape[0] == self.additional_states_dim, \
- 'additional states dimension mismatch {} v.s. {}'.format(
- additional_states.shape[0], self.additional_states_dim)
- return additional_states
-
- def add_naive_noise_to_sensor(self, sensor_reading, noise_rate, noise_value=1.0):
- """
- Add naive sensor dropout to perceptual sensor, such as RGBD and LiDAR scan
- :param sensor_reading: raw sensor reading, range must be between [0.0, 1.0]
- :param noise_rate: how much noise to inject, 0.05 means 5% of the data will be replaced with noise_value
- :param noise_value: noise_value to overwrite raw sensor reading
- :return: sensor reading corrupted with noise
- """
- if noise_rate <= 0.0:
- return sensor_reading
-
- assert len(sensor_reading[(sensor_reading < 0.0) | (sensor_reading > 1.0)]) == 0,\
- 'sensor reading has to be between [0.0, 1.0]'
-
- valid_mask = np.random.choice(2, sensor_reading.shape, p=[
- noise_rate, 1.0 - noise_rate])
- sensor_reading[valid_mask == 0] = noise_value
- return sensor_reading
-
- def get_depth(self):
- """
- :return: depth sensor reading, normalized to [0.0, 1.0]
- """
- depth = - \
- self.simulator.renderer.render_robot_cameras(modes=('3d'))[
- 0][:, :, 2:3]
- # 0.0 is a special value for invalid entries
- depth[depth < self.depth_low] = 0.0
- depth[depth > self.depth_high] = 0.0
-
- # re-scale depth to [0.0, 1.0]
- depth /= self.depth_high
- depth = self.add_naive_noise_to_sensor(
- depth, self.depth_noise_rate, noise_value=0.0)
-
- return depth
-
- def get_rgb(self):
- """
- :return: RGB sensor reading, normalized to [0.0, 1.0]
- """
- return self.simulator.renderer.render_robot_cameras(modes=('rgb'))[0][:, :, :3]
-
- def get_pc(self):
- """
- :return: pointcloud sensor reading
- """
- return self.simulator.renderer.render_robot_cameras(modes=('3d'))[0]
-
- def get_normal(self):
- """
- :return: surface normal reading
- """
- return self.simulator.renderer.render_robot_cameras(modes='normal')[0][:, :, :3]
-
- def get_seg(self):
- """
- :return: semantic segmentation mask, normalized to [0.0, 1.0]
- """
- seg = self.simulator.renderer.render_robot_cameras(modes='seg')[
- 0][:, :, 0:1]
- if self.num_object_classes is not None:
- seg = np.clip(seg * 255.0 / self.num_object_classes, 0.0, 1.0)
- return seg
-
- def get_scan(self):
- """
- :return: LiDAR sensor reading, normalized to [0.0, 1.0]
- """
- laser_angular_half_range = self.laser_angular_range / 2.0
- if self.laser_link_name not in self.robots[0].parts:
- raise Exception('Trying to simulate LiDAR sensor, but laser_link_name cannot be found in the robot URDF file. Please add a link named laser_link_name at the intended laser pose. Feel free to check out assets/models/turtlebot/turtlebot.urdf and examples/configs/turtlebot_p2p_nav.yaml for examples.')
- laser_pose = self.robots[0].parts[self.laser_link_name].get_pose()
- angle = np.arange(-laser_angular_half_range / 180 * np.pi,
- laser_angular_half_range / 180 * np.pi,
- self.laser_angular_range / 180.0 * np.pi / self.n_horizontal_rays)
- unit_vector_local = np.array(
- [[np.cos(ang), np.sin(ang), 0.0] for ang in angle])
- transform_matrix = quat2mat(
- [laser_pose[6], laser_pose[3], laser_pose[4], laser_pose[5]]) # [x, y, z, w]
- unit_vector_world = transform_matrix.dot(unit_vector_local.T).T
-
- start_pose = np.tile(laser_pose[:3], (self.n_horizontal_rays, 1))
- start_pose += unit_vector_world * self.min_laser_dist
- end_pose = laser_pose[:3] + unit_vector_world * self.laser_linear_range
- results = p.rayTestBatch(start_pose, end_pose, 6) # numThreads = 6
-
- # hit fraction = [0.0, 1.0] of self.laser_linear_range
- hit_fraction = np.array([item[2] for item in results])
- hit_fraction = self.add_naive_noise_to_sensor(
- hit_fraction, self.scan_noise_rate)
- scan = np.expand_dims(hit_fraction, 1)
- return scan
-
- def get_state(self, collision_links=[]):
- """
- :param collision_links: collisions from last time step
- :return: observation as a dictionary
- """
- state = OrderedDict()
- if 'sensor' in self.output:
- state['sensor'] = self.get_additional_states()
- if 'rgb' in self.output:
- state['rgb'] = self.get_rgb()
- if 'depth' in self.output:
- state['depth'] = self.get_depth()
- if 'pc' in self.output:
- state['pc'] = self.get_pc()
- if 'rgbd' in self.output:
- rgb = self.get_rgb()
- depth = self.get_depth()
- state['rgbd'] = np.concatenate((rgb, depth), axis=2)
- if 'normal' in self.output:
- state['normal'] = self.get_normal()
- if 'seg' in self.output:
- state['seg'] = self.get_seg()
- if 'rgb_filled' in self.output:
- with torch.no_grad():
- tensor = transforms.ToTensor()(
- (state['rgb'] * 255).astype(np.uint8)).cuda()
- rgb_filled = self.comp(tensor[None, :, :, :])[
- 0].permute(1, 2, 0).cpu().numpy()
- state['rgb_filled'] = rgb_filled
- if 'scan' in self.output:
- state['scan'] = self.get_scan()
- return state
-
- def run_simulation(self):
- """
- Run simulation for one action timestep (same as one render timestep in Simulator class)
- :return: collisions from this simulation
- """
- collision_links = []
- self.simulator_step()
- collision_links.append(
- list(p.getContactPoints(bodyA=self.robots[0].robot_ids[0])))
-
- return self.filter_collision_links(collision_links)
-
- def filter_collision_links(self, collision_links):
- """
- Filter out collisions that should be ignored
- :param collision_links: original collisions, a list of lists of collisions
- :return: filtered collisions
- """
- new_collision_links = []
- for collision_per_sim_step in collision_links:
- new_collision_per_sim_step = []
- for item in collision_per_sim_step:
- # ignore collision with body b
- if item[2] in self.collision_ignore_body_b_ids:
- continue
-
- # ignore collision with robot link a
- if item[3] in self.collision_ignore_link_a_ids:
- continue
-
- # ignore self collision with robot link a (body b is also robot itself)
- if item[2] == self.robots[0].robot_ids[0] and item[4] in self.collision_ignore_link_a_ids:
- continue
-
- new_collision_per_sim_step.append(item)
- new_collision_links.append(new_collision_per_sim_step)
- return new_collision_links
-
- def get_position_of_interest(self):
- """
- Get position of interest.
- :return: If pointgoal task, return base position. If reaching task, return end effector position.
- """
- if self.config['task'] == 'pointgoal':
- return self.robots[0].get_position()
- elif self.config['task'] == 'reaching':
- return self.robots[0].get_end_effector_position()
-
- def get_shortest_path(self, from_initial_pos=False, entire_path=False):
- """
- :param from_initial_pos: whether source is initial position rather than current position
- :param entire_path: whether to return the entire shortest path
- :return: shortest path and geodesic distance to the target position
- """
- if from_initial_pos:
- source = self.initial_pos[:2]
- else:
- source = self.robots[0].get_position()[:2]
- target = self.target_pos[:2]
- return self.scene.get_shortest_path(self.floor_num, source, target, entire_path=entire_path)
-
- def get_geodesic_potential(self):
- """
- :return: geodesic distance to the target position
- """
- _, geodesic_dist = self.get_shortest_path()
- return geodesic_dist
-
- def get_l2_potential(self):
- """
- :return: L2 distance to the target position
- """
- return l2_distance(self.target_pos, self.get_position_of_interest())
-
- def is_goal_reached(self):
- return l2_distance(self.get_position_of_interest(), self.target_pos) < self.dist_tol
-
- def get_reward(self, collision_links=[], action=None, info={}):
- """
- :param collision_links: collisions from last time step
- :param action: last action
- :param info: a dictionary to store additional info
- :return: reward, info
- """
- collision_links_flatten = [
- item for sublist in collision_links for item in sublist]
- reward = self.slack_reward # |slack_reward| = 0.01 per step
-
- if self.reward_type in ['l2', 'geodesic']:
- if self.reward_type == 'l2':
- new_potential = self.get_l2_potential()
- elif self.reward_type == 'geodesic':
- new_potential = self.get_geodesic_potential()
- potential_reward = self.potential - new_potential
- # |potential_reward| ~= 0.1 per step
- reward += potential_reward * self.potential_reward_weight
- self.potential = new_potential
-
- collision_reward = float(len(collision_links_flatten) > 0)
- self.collision_step += int(collision_reward)
- # |collision_reward| ~= 1.0 per step if collision
- reward += collision_reward * self.collision_reward_weight
-
- if self.is_goal_reached():
- reward += self.success_reward # |success_reward| = 10.0 per step
- return reward, info
-
- def get_termination(self, collision_links=[], action=None, info={}):
- """
- :param collision_links: collisions from last time step
- :param info: a dictionary to store additional info
- :return: done, info
- """
- done = False
-
- # goal reached
- if self.is_goal_reached():
- done = True
- info['success'] = True
-
- # max collisions reached
- if self.collision_step > self.max_collisions_allowed:
- done = True
- info['success'] = False
-
- # time out
- elif self.current_step >= self.max_step:
- done = True
- info['success'] = False
-
- # fall off the cliff of valid region
- elif isinstance(self.scene, InteractiveIndoorScene) and \
- (self.robots[0].get_position()[2] < self.scene.get_floor_height() - 0.03):
- done = True
- info['success'] = False
-
- if done:
- info['episode_length'] = self.current_step
- info['collision_step'] = self.collision_step
- info['path_length'] = self.path_length
- info['spl'] = float(info['success']) * \
- min(1.0, self.geodesic_dist / self.path_length)
-
- return done, info
-
- def before_simulation(self):
- """
- Cache bookkeeping data before simulation
- :return: cache
- """
- return {'robot_position': self.robots[0].get_position()}
-
- def after_simulation(self, cache, collision_links):
- """
- Accumulate evaluation stats
- :param cache: cache returned from before_simulation
- :param collision_links: collisions from last time step
- """
- old_robot_position = cache['robot_position'][:2]
- new_robot_position = self.robots[0].get_position()[:2]
- self.path_length += l2_distance(old_robot_position, new_robot_position)
-
- def step_visualization(self):
- if self.mode != 'gui':
- return
-
- self.initial_pos_vis_obj.set_position(self.initial_pos)
- self.target_pos_vis_obj.set_position(self.target_pos)
-
- if self.scene.build_graph:
- shortest_path, _ = self.get_shortest_path(entire_path=True)
- floor_height = 0.0 if self.floor_num is None else self.scene.get_floor_height()
- num_nodes = min(self.num_waypoints_vis, shortest_path.shape[0])
- for i in range(num_nodes):
- self.waypoints_vis[i].set_position(pos=np.array([shortest_path[i][0],
- shortest_path[i][1],
- floor_height]))
- for i in range(num_nodes, self.num_waypoints_vis):
- self.waypoints_vis[i].set_position(
- pos=np.array([0.0, 0.0, 100.0]))
-
- def step(self, action):
- """
- apply robot's action and get state, reward, done and info, following OpenAI gym's convention
- :param action: a list of control signals
- :return: state, reward, done, info
- """
- self.current_step += 1
- if action is not None:
- self.robots[0].apply_action(action)
- cache = self.before_simulation()
- collision_links = self.run_simulation()
- self.after_simulation(cache, collision_links)
-
- state = self.get_state(collision_links)
- info = {}
- reward, info = self.get_reward(collision_links, action, info)
- done, info = self.get_termination(collision_links, action, info)
- self.step_visualization()
-
- if done and self.automatic_reset:
- info['last_observation'] = state
- state = self.reset()
- return state, reward, done, info
-
- def reset_agent(self):
- """
- Reset the robot's joint configuration and base pose until no collision
- """
- reset_success = False
- max_trials = 100
-
- # move robot away from the scene
- self.robots[0].set_position([100.0, 100.0, 100.0])
- # cache pybullet state
- state_id = p.saveState()
- for _ in range(max_trials):
- self.reset_initial_and_target_pos()
- if self.test_valid_position('robot', self.robots[0], self.initial_pos, self.initial_orn) and \
- self.test_valid_position('robot', self.robots[0], self.target_pos):
- reset_success = True
- p.restoreState(state_id)
- break
- p.restoreState(state_id)
-
- if not reset_success:
- logging.warning("WARNING: Failed to reset robot without collision")
-
- self.land('robot', self.robots[0], self.initial_pos, self.initial_orn)
- p.removeState(state_id)
-
- def reset_initial_and_target_pos(self):
- """
- Reset initial_pos, initial_orn and target_pos
- """
- return
-
- def check_collision(self, body_id):
- """
- :param body_id: pybullet body id
- :return: whether the given body_id has no collision
- """
- for _ in range(self.check_collision_loop):
- self.simulator_step()
- collisions = list(p.getContactPoints(bodyA=body_id))
-
- if logging.root.level <= logging.DEBUG: # Only going into this if it is for logging --> efficiency
- for item in collisions:
- logging.debug('bodyA:{}, bodyB:{}, linkA:{}, linkB:{}'.format(
- item[1], item[2], item[3], item[4]))
-
- if len(collisions) > 0:
- return False
- return True
-
- def set_pos_orn_with_z_offset(self, obj, pos, orn=None, offset=None):
- """
- Reset position and orientation for the robot or the object
- :param obj: an instance of robot or object
- :param pos: position
- :param orn: orientation
- :param offset: z offset
- """
- if orn is None:
- orn = np.array([0, 0, np.random.uniform(0, np.pi * 2)])
-
- if offset is None:
- offset = self.initial_pos_z_offset
-
- obj.set_position_orientation([pos[0], pos[1], pos[2] + offset],
- quatToXYZW(euler2quat(*orn), 'wxyz'))
-
- def test_valid_position(self, obj_type, obj, pos, orn=None):
- """
- Test if the robot or the object can be placed with no collision
- :param obj_type: string "robot" or "obj"
- :param obj: an instance of robot or object
- :param pos: position
- :param orn: orientation
- :return: validity
- """
- assert obj_type in ['robot', 'obj']
-
- self.set_pos_orn_with_z_offset(obj, pos, orn)
-
- if obj_type == 'robot':
- obj.robot_specific_reset()
- obj.keep_still()
-
- body_id = obj.robot_ids[0] if obj_type == 'robot' else obj.body_id
- has_collision = self.check_collision(body_id)
- return has_collision
-
- def land(self, obj_type, obj, pos, orn):
- """
- Land the robot or the object onto the floor, given a valid position and orientation
- :param obj_type: string "robot" or "obj"
- :param obj: an instance of robot or object
- :param pos: position
- :param orn: orientation
- """
- assert obj_type in ['robot', 'obj']
-
- self.set_pos_orn_with_z_offset(obj, pos, orn)
-
- if obj_type == 'robot':
- obj.robot_specific_reset()
- obj.keep_still()
-
- body_id = obj.robot_ids[0] if obj_type == 'robot' else obj.body_id
-
- land_success = False
- # land for maximum 1 second, should fall down ~5 meters
- max_simulator_step = int(1.0 / self.action_timestep)
- for _ in range(max_simulator_step):
- self.simulator_step()
- if len(p.getContactPoints(bodyA=body_id)) > 0:
- land_success = True
- break
-
- if not land_success:
- print("WARNING: Failed to land")
-
- if obj_type == 'robot':
- obj.robot_specific_reset()
-
- def reset_variables(self):
- """
- Reset bookkeeping variables for the next new episode
- """
- self.current_episode += 1
- self.current_step = 0
- self.collision_step = 0
- self.path_length = 0.0
- self.geodesic_dist = self.get_geodesic_potential()
-
- def randomize_domain(self):
- if self.object_randomization_freq is not None:
- if self.current_episode % self.object_randomization_freq == 0:
- self.reload_model_object_randomization()
- if self.texture_randomization_freq is not None:
- if self.current_episode % self.texture_randomization_freq == 0:
- self.simulator.scene.randomize_texture()
-
- def reset(self):
- """
- Reset episode
- """
- self.randomize_domain()
- self.reset_agent()
- self.simulator.sync()
- state = self.get_state()
- if self.reward_type == 'l2':
- self.potential = self.get_l2_potential()
- elif self.reward_type == 'geodesic':
- self.potential = self.get_geodesic_potential()
- self.reset_variables()
- self.step_visualization()
-
- return state
-
-
-class NavigationRandomEnv(NavigationEnv):
- def __init__(
- self,
- config_file,
- scene_id=None,
- mode='headless',
- action_timestep=1 / 10.0,
- physics_timestep=1 / 240.0,
- automatic_reset=False,
- random_height=False,
- device_idx=0,
- render_to_tensor=False
- ):
- """
- :param config_file: config_file path
- :param scene_id: override scene_id in config file
- :param mode: headless or gui mode
- :param action_timestep: environment executes action per action_timestep second
- :param physics_timestep: physics timestep for pybullet
- :param automatic_reset: whether to automatic reset after an episode finishes
- :param random_height: whether to randomize height for target position (for reaching task)
- :param device_idx: device_idx: which GPU to run the simulation and rendering on
- """
- super(NavigationRandomEnv, self).__init__(config_file,
- scene_id=scene_id,
- mode=mode,
- action_timestep=action_timestep,
- physics_timestep=physics_timestep,
- automatic_reset=automatic_reset,
- device_idx=device_idx,
- render_to_tensor=render_to_tensor)
- self.random_height = random_height
-
- self.target_dist_min = self.config.get('target_dist_min', 1.0)
- self.target_dist_max = self.config.get('target_dist_max', 10.0)
-
- def reset_initial_and_target_pos(self):
- """
- Reset initial_pos, initial_orn and target_pos through randomization
- The geodesic distance (or L2 distance if traversable map graph is not built)
- between initial_pos and target_pos has to be between [self.target_dist_min, self.target_dist_max]
- """
- _, self.initial_pos = self.scene.get_random_point(
- floor=self.floor_num, random_height=self.random_height)
- max_trials = 100
- dist = 0.0
- for _ in range(max_trials):
- _, self.target_pos = self.scene.get_random_point(
- floor=self.floor_num, random_height=self.random_height)
- if self.scene.build_graph:
- _, dist = self.get_shortest_path(from_initial_pos=True)
- else:
- dist = l2_distance(self.initial_pos, self.target_pos)
- if self.target_dist_min < dist < self.target_dist_max:
- break
- if not (self.target_dist_min < dist < self.target_dist_max):
- print("WARNING: Failed to sample initial and target positions")
- self.initial_orn = np.array([0, 0, np.random.uniform(0, np.pi * 2)])
-
- def reset(self):
- """
- Reset episode
- """
- self.floor_num = self.scene.get_random_floor()
-
- if self.scene.is_interactive:
- # move robot away from the scene
- self.robots[0].set_position([100.0, 100.0, 100.0])
- # reset scene objects
- self.scene.reset_scene_objects()
- else:
- # reset "virtual floor" to the correct height
- self.scene.reset_floor(floor=self.floor_num,
- additional_elevation=0.02)
-
- state = super(NavigationRandomEnv, self).reset()
- return state
-
-
-class NavigationRandomEnvSim2Real(NavigationRandomEnv):
- def __init__(self,
- config_file,
- scene_id=None,
- mode='headless',
- action_timestep=1 / 10.0,
- physics_timestep=1 / 240.0,
- device_idx=0,
- render_to_tensor=False,
- automatic_reset=False,
- collision_reward_weight=0.0,
- track='static'
- ):
- super(NavigationRandomEnvSim2Real, self).__init__(config_file,
- scene_id=scene_id,
- mode=mode,
- action_timestep=action_timestep,
- physics_timestep=physics_timestep,
- automatic_reset=automatic_reset,
- random_height=False,
- device_idx=device_idx,
- render_to_tensor=render_to_tensor)
- self.collision_reward_weight = collision_reward_weight
-
- assert track in ['static', 'interactive', 'dynamic'], 'unknown track'
- self.track = track
-
- if self.track == 'interactive':
- self.interactive_objects_num_dups = 2
- self.interactive_objects = self.load_interactive_objects()
- # does not penalize collision with these interactive objects
- self.collision_ignore_body_b_ids |= set(
- [obj.body_id for obj in self.interactive_objects])
- elif self.track == 'dynamic':
- self.num_dynamic_objects = 1
- self.dynamic_objects = []
- self.dynamic_objects_last_actions = []
- for _ in range(self.num_dynamic_objects):
- robot = Turtlebot(self.config)
- self.simulator.import_robot(robot)
- self.dynamic_objects.append(robot)
- self.dynamic_objects_last_actions.append(
- robot.action_space.sample())
-
- # dynamic objects will repeat their actions for 10 action timesteps
- self.dynamic_objects_action_repeat = 10
-
- def load_interactive_objects(self):
- """
- Load interactive objects
- :return: a list of interactive objects
- """
- interactive_objects = []
- interactive_objects_path = [
- 'object_2eZY2JqYPQE.urdf',
- 'object_lGzQi2Pk5uC.urdf',
- 'object_ZU6u5fvE8Z1.urdf',
- 'object_H3ygj6efM8V.urdf',
- 'object_RcqC01G24pR.urdf'
- ]
-
- for _ in range(self.interactive_objects_num_dups):
- for urdf_model in interactive_objects_path:
- obj = ArticulatedObject(os.path.join(
- gibson2.assets_path, 'models/sample_urdfs', urdf_model))
- self.simulator.import_object(obj)
- interactive_objects.append(obj)
- return interactive_objects
-
- def reset_interactive_objects(self):
- """
- Reset the poses of interactive objects to have no collisions with the scene mesh
- """
- max_trials = 100
- for obj in self.interactive_objects:
- reset_success = False
- for _ in range(max_trials):
- _, pos = self.scene.get_random_point(
- floor=self.floor_num, random_height=self.random_height)
- orn = np.array([0, 0, np.random.uniform(0, np.pi * 2)])
- if self.test_valid_position('obj', obj, pos, orn):
- reset_success = True
- break
-
- if not reset_success:
- print("WARNING: Failed to reset interactive obj without collision")
-
- self.land('obj', obj, pos, orn)
-
- def reset_dynamic_objects(self):
- """
- Reset the poses of dynamic objects to have no collisions with the scene mesh
- """
- max_trials = 100
- shortest_path, _ = self.get_shortest_path(entire_path=True)
- floor_height = 0.0 if self.floor_num is None else self.scene.get_floor_height()
- for robot in self.dynamic_objects:
- reset_success = False
- for _ in range(max_trials):
- pos = shortest_path[np.random.choice(shortest_path.shape[0])]
- pos = np.array([pos[0], pos[1], floor_height])
- orn = np.array([0, 0, np.random.uniform(0, np.pi * 2)])
- if self.test_valid_position('robot', robot, pos, orn):
- reset_success = True
- break
-
- if not reset_success:
- print("WARNING: Failed to reset dynamic obj without collision")
-
- self.land('robot', robot, pos, orn)
-
- def step_dynamic_objects(self):
- """
- Apply actions to dynamic objects (default: temporally extended random walk)
- """
- if self.current_step % self.dynamic_objects_action_repeat == 0:
- self.dynamic_objects_last_actions = [
- robot.action_space.sample() for robot in self.dynamic_objects]
- for robot, action in zip(self.dynamic_objects, self.dynamic_objects_last_actions):
- robot.apply_action(action)
-
- def step(self, action):
- """
- Step dynamic objects as well
- """
- if self.track == 'dynamic':
- self.step_dynamic_objects()
-
- return super(NavigationRandomEnvSim2Real, self).step(action)
-
- def reset(self):
- """
- Reset episode
- """
- self.floor_num = self.scene.get_random_floor()
-
- if self.scene.is_interactive:
- # move robot away from the scene
- self.robots[0].set_position([100.0, 100.0, 100.0])
- # reset scene objects
- self.scene.reset_scene_objects()
- else:
- # reset "virtual floor" to the correct height
- self.scene.reset_floor(floor=self.floor_num,
- additional_elevation=0.02)
-
- if self.track == 'interactive':
- self.reset_interactive_objects()
-
- state = NavigationEnv.reset(self)
-
- if self.track == 'dynamic':
- self.reset_dynamic_objects()
- state = self.get_state()
-
- return state
-
-
-if __name__ == '__main__':
- parser = argparse.ArgumentParser()
- parser.add_argument(
- '--config',
- '-c',
- help='which config file to use [default: use yaml files in examples/configs]')
- parser.add_argument('--mode',
- '-m',
- choices=['headless', 'gui', 'iggui'],
- default='headless',
- help='which mode for simulation (default: headless)')
- parser.add_argument('--env_type',
- choices=['deterministic', 'random', 'sim2real'],
- default='deterministic',
- help='which environment type (deterministic | random | sim2real)')
- parser.add_argument('--sim2real_track',
- choices=['static', 'interactive', 'dynamic'],
- default='static',
- help='which sim2real track (static | interactive | dynamic)')
- args = parser.parse_args()
-
- if args.env_type == 'deterministic':
- nav_env = NavigationEnv(config_file=args.config,
- mode=args.mode,
- action_timestep=1.0 / 10.0,
- physics_timestep=1.0 / 40.0)
- elif args.env_type == 'random':
- nav_env = NavigationRandomEnv(config_file=args.config,
- mode=args.mode,
- action_timestep=1.0 / 10.0,
- physics_timestep=1.0 / 40.0)
- elif args.env_type == 'sim2real':
- nav_env = NavigationRandomEnvSim2Real(config_file=args.config,
- mode=args.mode,
- action_timestep=1.0 / 10.0,
- physics_timestep=1.0 / 40.0,
- track=args.sim2real_track)
-
- step_time_list = []
- for episode in range(100):
- print('Episode: {}'.format(episode))
- start = time.time()
- nav_env.reset()
- for _ in range(100): # 10 seconds
- action = nav_env.action_space.sample()
- state, reward, done, _ = nav_env.step(action)
- print('reward', reward)
- if done:
- break
- print('Episode finished after {} timesteps, took {} seconds.'.format(
- nav_env.current_step, time.time() - start))
- nav_env.clean()
diff --git a/gibson2/envs/parallel_env.py b/gibson2/envs/parallel_env.py
index 3e6cbe182..6bcd7e5a8 100644
--- a/gibson2/envs/parallel_env.py
+++ b/gibson2/envs/parallel_env.py
@@ -1,5 +1,5 @@
import gibson2
-from gibson2.envs.locomotor_env import NavigationEnv
+from gibson2.envs.igibson_env import iGibsonEnv
import atexit
import multiprocessing
import sys
@@ -8,31 +8,27 @@ import numpy as np
import os
-class ParallelNavEnv(NavigationEnv):
+class ParallelNavEnv(iGibsonEnv):
"""Batch together environments and simulate them in external processes.
-
- The environments are created in external processes by calling the provided
- callables. This can be an environment class, or a function creating the
- environment and potentially wrapping it. The returned environment should not
- access global variables.
- """
+ The environments are created in external processes by calling the provided
+ callables. This can be an environment class, or a function creating the
+ environment and potentially wrapping it. The returned environment should not
+ access global variables.
+ """
def __init__(self, env_constructors, blocking=False, flatten=False):
"""Batch together environments and simulate them in external processes.
+ The environments can be different but must use the same action and
+ observation specs.
- The environments can be different but must use the same action and
- observation specs.
-
- Args:
- env_constructors: List of callables that create environments.
- blocking: Whether to step environments one after another.
- flatten: Boolean, whether to use flatten action and time_steps during
- communication to reduce overhead.
-
- Raises:
- ValueError: If the action or observation specs don't match.
- """
- self._envs = [ProcessPyEnvironment(ctor, flatten=flatten) for ctor in env_constructors]
+ :param env_constructors: List of callables that create environments.
+ :param blocking: Whether to step environments one after another.
+ :param flatten: Boolean, whether to use flatten action and time_steps during
+ communication to reduce overhead.
+ :raise ValueError: If the action or observation specs don't match.
+ """
+ self._envs = [ProcessPyEnvironment(
+ ctor, flatten=flatten) for ctor in env_constructors]
self._num_envs = len(env_constructors)
self.start()
self.action_space = self._envs[0].action_space
@@ -41,10 +37,11 @@ class ParallelNavEnv(NavigationEnv):
self._flatten = flatten
def start(self):
- #tf.logging.info('Starting all processes.')
+ """
+ Start all children processes
+ """
for env in self._envs:
env.start()
- #tf.logging.info('All processes started.')
@property
def batched(self):
@@ -57,9 +54,8 @@ class ParallelNavEnv(NavigationEnv):
def reset(self):
"""Reset all environments and combine the resulting observation.
- Returns:
- Time step with batch dimension.
- """
+ :return: a list of [next_obs, reward, done, info]
+ """
time_steps = [env.reset(self._blocking) for env in self._envs]
if not self._blocking:
time_steps = [promise() for promise in time_steps]
@@ -68,16 +64,11 @@ class ParallelNavEnv(NavigationEnv):
def step(self, actions):
"""Forward a batch of actions to the wrapped environments.
- Args:
- actions: Batched action, possibly nested, to apply to the environment.
-
- Raises:
- ValueError: Invalid actions.
-
- Returns:
- Batch of observations, rewards, and done flags.
- """
- time_steps = [env.step(action, self._blocking) for env, action in zip(self._envs, actions)]
+ :param actions: batched action, possibly nested, to apply to the environment.
+ :return: a list of [next_obs, reward, done, info]
+ """
+ time_steps = [env.step(action, self._blocking)
+ for env, action in zip(self._envs, actions)]
# When blocking is False we get promises that need to be called.
if not self._blocking:
time_steps = [promise() for promise in time_steps]
@@ -88,50 +79,6 @@ class ParallelNavEnv(NavigationEnv):
for env in self._envs:
env.close()
- def set_subgoal(self, subgoals):
- time_steps = [env.set_subgoal(subgoal, self._blocking) for env, subgoal in zip(self._envs, subgoals)]
- if not self._blocking:
- time_steps = [promise() for promise in time_steps]
- return time_steps
-
- def set_subgoal_type(self,sg_types):
- time_steps = [env.set_subgoal_type(np.array(sg_type), self._blocking) for env, sg_type in zip(self._envs, sg_types)]
- if not self._blocking:
- time_steps = [promise() for promise in time_steps]
- return time_steps
-
- #def _stack_time_steps(self, time_steps):
- # """Given a list of TimeStep, combine to one with a batch dimension."""
- # if self._flatten:
- # return fast_map_structure_flatten(lambda *arrays: np.stack(arrays),
- # self._time_step_spec,
- # *time_steps)
- # else:
- # return fast_map_structure(lambda *arrays: np.stack(arrays), *time_steps)
-
- #def _unstack_actions(self, batched_actions):
- # """Returns a list of actions from potentially nested batch of actions."""
- # flattened_actions = nest.flatten(batched_actions)
- # if self._flatten:
- # unstacked_actions = zip(*flattened_actions)
- # else:
- # unstacked_actions = [nest.pack_sequence_as(batched_actions, actions)
- # for actions in zip(*flattened_actions)]
- # return unstacked_actions
-
-
-## TODO(sguada) Move to utils.
-#def fast_map_structure_flatten(func, structure, *flat_structure):
-# entries = zip(*flat_structure)
-# return nest.pack_sequence_as(structure, [func(*x) for x in entries])
-
-#def fast_map_structure(func, *structure):
-# flat_structure = [nest.flatten(s) for s in structure]
-# entries = zip(*flat_structure)
-
-# return nest.pack_sequence_as(
-# structure[0], [func(*x) for x in entries])
-
class ProcessPyEnvironment(object):
"""Step a single env in a separate process for lock free paralellism."""
@@ -147,26 +94,17 @@ class ProcessPyEnvironment(object):
def __init__(self, env_constructor, flatten=False):
"""Step environment in a separate process for lock free paralellism.
- The environment is created in an external process by calling the provided
- callable. This can be an environment class, or a function creating the
- environment and potentially wrapping it. The returned environment should
- not access global variables.
+ The environment is created in an external process by calling the provided
+ callable. This can be an environment class, or a function creating the
+ environment and potentially wrapping it. The returned environment should
+ not access global variables.
- Args:
- env_constructor: Callable that creates and returns a Python environment.
- flatten: Boolean, whether to assume flattened actions and time_steps
+ :param env_constructor: callable that creates and returns a Python environment.
+ :param flatten: boolean, whether to assume flattened actions and time_steps
during communication to avoid overhead.
-
- Attributes:
- observation_spec: The cached observation spec of the environment.
- action_spec: The cached action spec of the environment.
- time_step_spec: The cached time step spec of the environment.
- """
+ """
self._env_constructor = env_constructor
self._flatten = flatten
- #self._observation_spec = None
- #self._action_spec = None
- #self._time_step_spec = None
def start(self):
"""Start the process."""
@@ -182,47 +120,25 @@ class ProcessPyEnvironment(object):
raise result
assert result is self._READY, result
- #def observation_spec(self):
- # if not self._observation_spec:
- # self._observation_spec = self.call('observation_spec')()
- # return self._observation_spec
-
- #def action_spec(self):
- # if not self._action_spec:
- # self._action_spec = self.call('action_spec')()
- # return self._action_spec
-
- #def time_step_spec(self):
- # if not self._time_step_spec:
- # self._time_step_spec = self.call('time_step_spec')()
- # return self._time_step_spec
-
def __getattr__(self, name):
"""Request an attribute from the environment.
+ Note that this involves communication with the external process, so it can
+ be slow.
- Note that this involves communication with the external process, so it can
- be slow.
-
- Args:
- name: Attribute to access.
-
- Returns:
- Value of the attribute.
- """
+ :param name: attribute to access.
+ :return: value of the attribute.
+ """
self._conn.send((self._ACCESS, name))
return self._receive()
def call(self, name, *args, **kwargs):
"""Asynchronously call a method of the external environment.
- Args:
- name: Name of the method to call.
- *args: Positional arguments to forward to the method.
- **kwargs: Keyword arguments to forward to the method.
-
- Returns:
- Promise object that blocks and provides the return value when called.
- """
+ :param name: name of the method to call.
+ :param args: positional arguments to forward to the method.
+ :param kwargs: keyword arguments to forward to the method.
+ :return: promise object that blocks and provides the return value when called.
+ """
payload = name, args, kwargs
self._conn.send((self._CALL, payload))
return self._receive
@@ -240,13 +156,10 @@ class ProcessPyEnvironment(object):
def step(self, action, blocking=True):
"""Step the environment.
- Args:
- action: The action to apply to the environment.
- blocking: Whether to wait for the result.
-
- Returns:
- time step when blocking, otherwise callable that returns the time step.
- """
+ :param action: the action to apply to the environment.
+ :param blocking: whether to wait for the result.
+ :return: (next_obs, reward, done, info) tuple when blocking, otherwise callable that returns that tuple
+ """
promise = self.call('step', action)
if blocking:
return promise()
@@ -256,45 +169,24 @@ class ProcessPyEnvironment(object):
def reset(self, blocking=True):
"""Reset the environment.
- Args:
- blocking: Whether to wait for the result.
-
- Returns:
- New observation when blocking, otherwise callable that returns the new
- observation.
- """
+ :param blocking: whether to wait for the result.
+ :return: next_obs when blocking, otherwise callable that returns next_obs
+ """
promise = self.call('reset')
if blocking:
return promise()
else:
return promise
- def set_subgoal(self, subgoal, blocking=True):
- promise = self.call('set_subgoal', subgoal)
- if blocking:
- return promise()
- else:
- return promise
-
- def set_subgoal_type(self, subgoal_type, blocking=True):
- promise = self.call('set_subgoal_type', subgoal_type)
- if blocking:
- return promise()
- else:
- return promise
-
def _receive(self):
"""Wait for a message from the worker process and return its payload.
- Raises:
- Exception: An exception was raised inside the worker process.
- KeyError: The reveived message is of an unknown type.
+ :raise Exception: an exception was raised inside the worker process.
+ :raise KeyError: the reveived message is of an unknown type.
- Returns:
- Payload object of the message.
- """
+ :return: payload object of the message.
+ """
message, payload = self._conn.recv()
- #print(message, payload)
# Re-raise exceptions in the main process.
if message == self._EXCEPTION:
stacktrace = payload
@@ -302,27 +194,24 @@ class ProcessPyEnvironment(object):
if message == self._RESULT:
return payload
self.close()
- raise KeyError('Received message of unexpected type {}'.format(message))
+ raise KeyError(
+ 'Received message of unexpected type {}'.format(message))
def _worker(self, conn, env_constructor, flatten=False):
"""The process waits for actions and sends back environment results.
- Args:
- conn: Connection for communication to the main process.
- env_constructor: env_constructor for the OpenAI Gym environment.
- flatten: Boolean, whether to assume flattened actions and time_steps
- during communication to avoid overhead.
+ :param conn: connection for communication to the main process.
+ :param env_constructor: env_constructor for the OpenAI Gym environment.
+ :param flatten: boolean, whether to assume flattened actions and
+ time_steps during communication to avoid overhead.
- Raises:
- KeyError: When receiving a message of unknown type.
- """
+ :raise KeyError: when receiving a message of unknown type.
+ """
try:
np.random.seed()
env = env_constructor()
- #action_spec = env.action_spec()
conn.send(self._READY) # Ready.
while True:
- #print(len(self._conn._cache))
try:
# Only block for short times to have keyboard exceptions be raised.
if not conn.poll(0.1):
@@ -337,36 +226,31 @@ class ProcessPyEnvironment(object):
continue
if message == self._CALL:
name, args, kwargs = payload
- if name == 'step' or name == 'reset' or name == 'set_subgoal' or name == 'set_subgoal_type':
+ if name == 'step' or name == 'reset':
result = getattr(env, name)(*args, **kwargs)
- #result = []
- #if flatten and name == 'step' or name == 'reset':
- # args = [nest.pack_sequence_as(action_spec, args[0])]
- # result = getattr(env, name)(*args, **kwargs)
- #if flatten and name in ['step', 'reset']:
- # result = nest.flatten(result)
conn.send((self._RESULT, result))
continue
if message == self._CLOSE:
assert payload is None
break
- raise KeyError('Received message of unknown type {}'.format(message))
+ raise KeyError(
+ 'Received message of unknown type {}'.format(message))
except Exception: # pylint: disable=broad-except
etype, evalue, tb = sys.exc_info()
stacktrace = ''.join(traceback.format_exception(etype, evalue, tb))
message = 'Error in environment process: {}'.format(stacktrace)
- #tf.logging.error(message)
+ # tf.logging.error(message)
conn.send((self._EXCEPTION, stacktrace))
finally:
conn.close()
if __name__ == "__main__":
-
- config_filename = os.path.join(os.path.dirname(gibson2.__file__), '../test/test.yaml')
+ config_filename = os.path.join(os.path.dirname(
+ gibson2.__file__), '../test/test.yaml')
def load_env():
- return NavigationEnv(config_file=config_filename, mode='headless')
+ return iGibsonEnv(config_file=config_filename, mode='headless')
parallel_env = ParallelNavEnv([load_env] * 2, blocking=False)
diff --git a/gibson2/external/motion/motion_planners/lazy_prm.py b/gibson2/external/motion/motion_planners/lazy_prm.py
index db701fea0..d3f78ab79 100644
--- a/gibson2/external/motion/motion_planners/lazy_prm.py
+++ b/gibson2/external/motion/motion_planners/lazy_prm.py
@@ -1,23 +1,25 @@
from scipy.spatial.kdtree import KDTree
from heapq import heappush, heappop
from collections import namedtuple
-from utils import INF, elapsed_time
-from rrt_connect import direct_path
-from smoothing import smooth_path
+from gibson2.external.motion.motion_planners.utils import INF, elapsed_time
+from gibson2.external.motion.motion_planners.rrt_connect import direct_path
+from gibson2.external.motion.motion_planners.smoothing import smooth_path
import random
import time
import numpy as np
Node = namedtuple('Node', ['g', 'parent'])
-unit_cost_fn = lambda v1, v2: 1.
-zero_heuristic_fn = lambda v: 0
+def unit_cost_fn(v1, v2): return 1.
+def zero_heuristic_fn(v): return 0
+
def retrace_path(visited, vertex):
if vertex is None:
return []
return retrace_path(visited, visited[vertex].parent) + [vertex]
+
def dijkstra(start_v, neighbors_fn, cost_fn=unit_cost_fn):
# Update the heuristic over time
start_g = 0
@@ -34,12 +36,13 @@ def dijkstra(start_v, neighbors_fn, cost_fn=unit_cost_fn):
heappush(queue, (next_g, next_v))
return visited
+
def wastar_search(start_v, end_v, neighbors_fn, cost_fn=unit_cost_fn,
heuristic_fn=zero_heuristic_fn, w=1, max_cost=INF, max_time=INF):
# TODO: lazy wastar to get different paths
#heuristic_fn = lambda v: cost_fn(v, end_v)
- priority_fn = lambda g, h: g + w*h
- goal_test = lambda v: v == end_v
+ def priority_fn(g, h): return g + w*h
+ def goal_test(v): return v == end_v
start_time = time.time()
start_g, start_h = 0, heuristic_fn(start_v)
@@ -60,6 +63,7 @@ def wastar_search(start_v, end_v, neighbors_fn, cost_fn=unit_cost_fn,
heappush(queue, (priority_fn(next_g, next_h), next_g, next_v))
return None
+
def check_path(path, colliding_vertices, colliding_edges, samples, extend_fn, collision_fn):
# TODO: bisect order
vertices = list(path)
@@ -82,7 +86,8 @@ def check_path(path, colliding_vertices, colliding_edges, samples, extend_fn, co
return False
return True
-def lazy_prm(start_conf, end_conf, sample_fn, extend_fn, collision_fn, num_samples=100, max_degree=10,
+
+def lazy_prm(start_conf, end_conf, distance_fn, sample_fn, extend_fn, collision_fn, num_samples=100, max_degree=10,
weights=None, p_norm=2, max_distance=INF, approximate_eps=0.0,
max_cost=INF, max_time=INF, max_paths=INF):
# TODO: multi-query motion planning
@@ -90,9 +95,12 @@ def lazy_prm(start_conf, end_conf, sample_fn, extend_fn, collision_fn, num_sampl
# TODO: can embed pose and/or points on the robot for other distances
if weights is None:
weights = np.ones(len(start_conf))
- embed_fn = lambda q: weights * q
- distance_fn = lambda q1, q2: np.linalg.norm(embed_fn(q2) - embed_fn(q1), ord=p_norm)
- cost_fn = lambda v1, v2: distance_fn(samples[v1], samples[v2])
+
+ def embed_fn(q): return weights * q
+ # def distance_fn(q1, q2): return np.linalg.norm(
+ # embed_fn(q2) - embed_fn(q1), ord=p_norm)
+
+ def cost_fn(v1, v2): return distance_fn(samples[v1], samples[v2])
# TODO: can compute cost between waypoints from extend_fn
samples = []
@@ -100,6 +108,7 @@ def lazy_prm(start_conf, end_conf, sample_fn, extend_fn, collision_fn, num_sampl
conf = sample_fn()
if (distance_fn(start_conf, conf) + distance_fn(conf, end_conf)) < max_cost:
samples.append(conf)
+
start_index, end_index = 0, 1
samples[start_index] = start_conf
samples[end_index] = end_conf
@@ -121,24 +130,25 @@ def lazy_prm(start_conf, end_conf, sample_fn, extend_fn, collision_fn, num_sampl
#print(time.time() - start_time, len(edges), float(len(edges))/len(samples))
colliding_vertices, colliding_edges = {}, {}
+
def neighbors_fn(v1):
for v2 in neighbors_from_index[v1]:
if not (colliding_vertices.get(v2, False) or
- colliding_edges.get((v1, v2), False)):
+ colliding_edges.get((v1, v2), False)):
yield v2
visited = dijkstra(end_index, neighbors_fn, cost_fn)
- heuristic_fn = lambda v: visited[v].g if v in visited else INF
+ def heuristic_fn(v): return visited[v].g if v in visited else INF
while elapsed_time(start_time) < max_time:
# TODO: extra cost to prioritize reusing checked edges
path = wastar_search(start_index, end_index, neighbors_fn=neighbors_fn,
cost_fn=cost_fn, heuristic_fn=heuristic_fn,
max_cost=max_cost, max_time=max_time-elapsed_time(start_time))
if path is None:
- return None, edges, colliding_vertices, colliding_edges
+ return None, samples, edges, colliding_vertices, colliding_edges
cost = sum(cost_fn(v1, v2) for v1, v2 in zip(path, path[1:]))
- print('Length: {} | Cost: {:.3f} | Vertices: {} | Edges: {} | Time: {:.3f}'.format(
- len(path), cost, len(colliding_vertices), len(colliding_edges), elapsed_time(start_time)))
+ # print('Length: {} | Cost: {:.3f} | Vertices: {} | Edges: {} | Time: {:.3f}'.format(
+ # len(path), cost, len(colliding_vertices), len(colliding_edges), elapsed_time(start_time)))
if check_path(path, colliding_vertices, colliding_edges, samples, extend_fn, collision_fn):
break
@@ -147,15 +157,18 @@ def lazy_prm(start_conf, end_conf, sample_fn, extend_fn, collision_fn, num_sampl
solution.extend(extend_fn(samples[q1], samples[q2]))
return solution, samples, edges, colliding_vertices, colliding_edges
-def replan_loop(start_conf, end_conf, sample_fn, extend_fn, collision_fn, params_list, smooth=0, **kwargs):
+
+def lazy_prm_replan_loop(start_conf, end_conf, distance_fn, sample_fn, extend_fn, collision_fn, params_list, smooth=0, **kwargs):
if collision_fn(start_conf) or collision_fn(end_conf):
return None
path = direct_path(start_conf, end_conf, extend_fn, collision_fn)
if path is not None:
return path
for num_samples in params_list:
- path = lazy_prm(start_conf, end_conf, sample_fn, extend_fn, collision_fn,
- num_samples=num_samples, **kwargs)
+ res = lazy_prm(start_conf, end_conf, distance_fn, sample_fn, extend_fn, collision_fn,
+ num_samples=num_samples, **kwargs)
+ # print(res)
+ path, samples, edges, colliding_vertices, colliding_edges = res
if path is not None:
return smooth_path(path, extend_fn, collision_fn, iterations=smooth)
return None
diff --git a/gibson2/external/motion/motion_planners/prm.py b/gibson2/external/motion/motion_planners/prm.py
index e19928a3a..d80afcf81 100644
--- a/gibson2/external/motion/motion_planners/prm.py
+++ b/gibson2/external/motion/motion_planners/prm.py
@@ -240,3 +240,8 @@ class DegreePRM(PRM):
else:
degree += 1
return new_vertices
+
+
+def call_prm(start_conf, end_conf, distance_fn, sample_fn, extend_fn, collision_fn):
+ prm = DistancePRM(distance_fn, extend_fn, collision_fn)
+ return prm.call(start_conf, end_conf)
\ No newline at end of file
diff --git a/gibson2/external/motion/motion_planners/rrt.py b/gibson2/external/motion/motion_planners/rrt.py
index 1710f6848..5366b83ae 100644
--- a/gibson2/external/motion/motion_planners/rrt.py
+++ b/gibson2/external/motion/motion_planners/rrt.py
@@ -1,5 +1,5 @@
from random import random
-
+import numpy as np
from .utils import irange, argmin, RRT_ITERATIONS
@@ -45,6 +45,7 @@ def configs(nodes):
def rrt(start, goal_sample, distance, sample, extend, collision, goal_test=lambda q: False, iterations=RRT_ITERATIONS, goal_probability=.2):
+ #goal_test = lambda q: np.linalg.norm(q - goal_sample) < 0.5
if collision(start):
return None
if not callable(goal_sample):
@@ -61,7 +62,7 @@ def rrt(start, goal_sample, distance, sample, extend, collision, goal_test=lambd
break
last = TreeNode(q, parent=last)
nodes.append(last)
- if goal_test(last.config):
+ if np.linalg.norm(np.array(last.config) - goal_sample()) < 0.5:#goal_test(last.config):
return configs(last.retrace())
else:
if goal:
diff --git a/gibson2/external/motion/motion_planners/rrt_star.py b/gibson2/external/motion/motion_planners/rrt_star.py
index 47479541c..1160aa2e0 100644
--- a/gibson2/external/motion/motion_planners/rrt_star.py
+++ b/gibson2/external/motion/motion_planners/rrt_star.py
@@ -1,6 +1,6 @@
from random import random
from time import time
-
+import numpy as np
from .utils import INF, argmin
@@ -77,7 +77,7 @@ def safe_path(sequence, collision):
return path
-def rrt_star(start, goal, distance, sample, extend, collision, radius, max_time=INF, max_iterations=INF, goal_probability=.2, informed=True):
+def rrt_star(start, goal, distance, sample, extend, collision, radius=0.5, max_time=INF, max_iterations=INF, goal_probability=.2, informed=True):
if collision(start) or collision(goal):
return None
nodes = [OptimalNode(start)]
@@ -91,8 +91,9 @@ def rrt_star(start, goal, distance, sample, extend, collision, radius, max_time=
if informed and goal_n is not None and distance(start, s) + distance(s, goal) >= goal_n.cost:
continue
if it % 100 == 0:
- print it, time() - t0, goal_n is not None, do_goal, (goal_n.cost if goal_n is not None else INF)
+ print(it, time() - t0, goal_n is not None, do_goal, (goal_n.cost if goal_n is not None else INF))
it += 1
+ print(it, len(nodes))
nearest = argmin(lambda n: distance(n.config, s), nodes)
path = safe_path(extend(nearest.config, s), collision)
@@ -104,9 +105,17 @@ def rrt_star(start, goal, distance, sample, extend, collision, radius, max_time=
if do_goal and distance(new.config, goal) < 1e-6:
goal_n = new
goal_n.set_solution(True)
+ break
# TODO - k-nearest neighbor version
- neighbors = filter(lambda n: distance(
- n.config, new.config) < radius, nodes)
+ # neighbors = filter(lambda n: distance(
+ # n.config, new.config) < radius, nodes)
+ # print('num neighbors', len(list(neighbors)))
+ k = 10
+ k = np.min([k, len(nodes)])
+ dists = [distance(n.config, new.config) for n in nodes]
+ neighbors = [nodes[i] for i in np.argsort(dists)[:k]]
+ #print(neighbors)
+
nodes.append(new)
for n in neighbors:
diff --git a/gibson2/external/motion/motion_planners/smoothing.py b/gibson2/external/motion/motion_planners/smoothing.py
index 2dc9196e7..d1fcbde76 100644
--- a/gibson2/external/motion/motion_planners/smoothing.py
+++ b/gibson2/external/motion/motion_planners/smoothing.py
@@ -1,4 +1,5 @@
from random import randint
+import numpy as np
def smooth_path(path, extend, collision, iterations=50):
@@ -14,7 +15,36 @@ def smooth_path(path, extend, collision, iterations=50):
i, j = j, i
shortcut = list(extend(smoothed_path[i], smoothed_path[j]))
if (len(shortcut) < (j - i)) and all(not collision(q) for q in shortcut):
- smoothed_path = smoothed_path[:i + 1] + shortcut + smoothed_path[j + 1:]
+ smoothed_path = smoothed_path[:i + 1] + \
+ shortcut + smoothed_path[j + 1:]
return smoothed_path
-# TODO: sparsify path to just waypoints
\ No newline at end of file
+
+def optimize_path(path, extend, collision, iterations=50):
+ def cost_fn(l):
+ s = 0
+ for i in range(len(l)-1):
+ s += np.sqrt((l[i][0] - l[i+1][0])**2 + (l[i][1] - l[i+1][1])**2)
+ return s
+ # smoothed_paths = []
+ smoothed_path = path
+ for _ in range(iterations):
+ if len(smoothed_path) <= 2:
+ return smoothed_path
+ i = randint(0, len(smoothed_path) - 1)
+ j = randint(0, len(smoothed_path) - 1)
+ if abs(i - j) <= 1:
+ continue
+ if j < i:
+ i, j = j, i
+ shortcut = list(extend(smoothed_path[i], smoothed_path[j]))
+ # print('short cut cost', cost_fn(shortcut),
+ # 'original cost:', cost_fn(smoothed_path[i:j]))
+ if (cost_fn(shortcut) < cost_fn(smoothed_path[i:j])) and all(not collision(q) for q in shortcut):
+ smoothed_path = smoothed_path[:i + 1] + \
+ shortcut + smoothed_path[j + 1:]
+ # smoothed_paths.append(np.copy(smoothed_path))
+ # return smoothed_paths
+ return smoothed_path
+
+# TODO: sparsify path to just waypoints
diff --git a/gibson2/external/pybullet_tools/utils.py b/gibson2/external/pybullet_tools/utils.py
index c2e747b61..145551b59 100644
--- a/gibson2/external/pybullet_tools/utils.py
+++ b/gibson2/external/pybullet_tools/utils.py
@@ -17,9 +17,12 @@ from itertools import product, combinations, count
from .transformations import quaternion_from_matrix, unit_vector
-directory = os.path.dirname(os.path.abspath(__file__))
-sys.path.append(os.path.join(directory, '../motion'))
-from motion_planners.rrt_connect import birrt, direct_path
+from gibson2.external.motion.motion_planners.rrt_connect import birrt, direct_path
+from gibson2.external.motion.motion_planners.rrt_star import rrt_star
+from gibson2.external.motion.motion_planners.lazy_prm import lazy_prm_replan_loop
+from gibson2.external.motion.motion_planners.rrt import rrt
+from gibson2.external.motion.motion_planners.smoothing import optimize_path
+from gibson2.utils.constants import OccupancyGridState
#from ..motion.motion_planners.rrt_connect import birrt, direct_path
import cv2
@@ -34,7 +37,7 @@ INF = np.inf
PI = np.pi
CIRCULAR_LIMITS = -PI, PI
UNBOUNDED_LIMITS = -INF, INF
-DEFAULT_TIME_STEP = 1./240. # seconds
+DEFAULT_TIME_STEP = 1./240. # seconds
#####################################
@@ -43,11 +46,13 @@ DRAKE_PATH = 'models/drake/'
# Models
# Robots
-MODEL_DIRECTORY = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, 'models/'))
+MODEL_DIRECTORY = os.path.abspath(os.path.join(
+ os.path.dirname(__file__), os.pardir, 'models/'))
ROOMBA_URDF = 'models/turtlebot/roomba.urdf'
TURTLEBOT_URDF = 'models/turtlebot/turtlebot_holonomic.urdf'
DRAKE_IIWA_URDF = 'models/drake/iiwa_description/urdf/iiwa14_polytope_collision.urdf'
-WSG_50_URDF = 'models/drake/wsg_50_description/urdf/wsg_50_mesh_visual.urdf' # wsg_50 | wsg_50_mesh_visual | wsg_50_mesh_collision
+# wsg_50 | wsg_50_mesh_visual | wsg_50_mesh_collision
+WSG_50_URDF = 'models/drake/wsg_50_description/urdf/wsg_50_mesh_visual.urdf'
#SCHUNK_URDF = 'models/drake/wsg_50_description/sdf/schunk_wsg_50.sdf'
PANDA_HAND_URDF = "models/franka_description/robots/hand.urdf"
PANDA_ARM_URDF = "models/franka_description/robots/panda_arm_hand.urdf"
@@ -60,9 +65,10 @@ R2D2_URDF = "r2d2.urdf"
MINITAUR_URDF = "quadruped/minitaur.urdf"
HUMANOID_MJCF = "mjcf/humanoid.xml"
HUSKY_URDF = "husky/husky.urdf"
-RACECAR_URDF = 'racecar/racecar.urdf' # racecar_differential.urdf
+RACECAR_URDF = 'racecar/racecar.urdf' # racecar_differential.urdf
PR2_GRIPPER = 'pr2_gripper.urdf'
-WSG_GRIPPER = 'gripper/wsg50_one_motor_gripper.sdf' # wsg50_one_motor_gripper | wsg50_one_motor_gripper_new
+# wsg50_one_motor_gripper | wsg50_one_motor_gripper_new
+WSG_GRIPPER = 'gripper/wsg50_one_motor_gripper.sdf'
# Pybullet Objects
KIVA_SHELF_SDF = "kiva_shelf/model.sdf"
@@ -81,86 +87,106 @@ STOVE_URDF = 'models/stove.urdf'
SEPARATOR = '\n' + 50*'-' + '\n'
-#def inf_generator():
+# def inf_generator():
# return iter(int, 1)
inf_generator = count
+
def print_separator(n=50):
print('\n' + n*'-' + '\n')
+
def is_remote():
return 'SSH_CONNECTION' in os.environ
-def is_darwin(): # TODO: change loading accordingly
- return platform.system() == 'Darwin' # platform.release()
- #return sys.platform == 'darwin'
+
+def is_darwin(): # TODO: change loading accordingly
+ return platform.system() == 'Darwin' # platform.release()
+ # return sys.platform == 'darwin'
+
def read(filename):
with open(filename, 'r') as f:
return f.read()
+
def write(filename, string):
with open(filename, 'w') as f:
f.write(string)
+
def read_pickle(filename):
# Can sometimes read pickle3 from python2 by calling twice
# Can possibly read pickle2 from python3 by using encoding='latin1'
with open(filename, 'rb') as f:
return pickle.load(f)
+
def write_pickle(filename, data): # NOTE - cannot pickle lambda or nested functions
with open(filename, 'wb') as f:
pickle.dump(data, f)
+
def read_json(path):
return json.loads(read(path))
+
def write_json(path, data):
with open(path, 'w') as f:
json.dump(data, f, indent=2, sort_keys=True)
+
def safe_remove(p):
if os.path.exists(p):
os.remove(p)
+
def ensure_dir(f):
d = os.path.dirname(f)
if not os.path.exists(d):
os.makedirs(d)
+
def safe_zip(sequence1, sequence2):
assert len(sequence1) == len(sequence2)
return zip(sequence1, sequence2)
+
def clip(value, min_value=-INF, max_value=+INF):
return min(max(min_value, value), max_value)
-def randomize(iterable): # TODO: bisect
+
+def randomize(iterable): # TODO: bisect
sequence = list(iterable)
random.shuffle(sequence)
return sequence
+
def get_random_seed():
return random.getstate()[1][0]
+
def get_numpy_seed():
return np.random.get_state()[1][0]
+
def set_random_seed(seed):
if seed is not None:
random.seed(seed)
+
def set_numpy_seed(seed):
# These generators are different and independent
if seed is not None:
np.random.seed(seed % (2**32))
#print('Seed:', seed)
+
def get_date():
return datetime.datetime.now().strftime('%y-%m-%d_%H-%M-%S')
+
def implies(p1, p2):
return not p1 or p2
@@ -179,6 +205,7 @@ class HideOutput(object):
os.system('ls -l')
'''
DEFAULT_ENABLE = True
+
def __init__(self, enable=None):
if enable is None:
enable = self.DEFAULT_ENABLE
@@ -205,7 +232,7 @@ class HideOutput(object):
sys.stdout = self._origstdout
sys.stdout.flush()
os.dup2(self._oldstdout_fno, 1)
- os.close(self._oldstdout_fno) # Added
+ os.close(self._oldstdout_fno) # Added
#####################################
@@ -213,15 +240,19 @@ class HideOutput(object):
# TODO: contextlib
+
class Saver(object):
def restore(self):
raise NotImplementedError()
+
def __enter__(self):
# TODO: move the saving to enter?
pass
+
def __exit__(self, type, value, traceback):
self.restore()
+
class ClientSaver(Saver):
def __init__(self, new_client=None):
self.client = CLIENT
@@ -234,6 +265,7 @@ class ClientSaver(Saver):
def __repr__(self):
return '{}({})'.format(self.__class__.__name__, self.client)
+
class VideoSaver(Saver):
def __init__(self, path):
self.path = path
@@ -244,7 +276,8 @@ class VideoSaver(Saver):
assert ext == '.mp4'
# STATE_LOGGING_PROFILE_TIMINGS, STATE_LOGGING_ALL_COMMANDS
# p.submitProfileTiming("pythontest")
- self.log_id = p.startStateLogging(p.STATE_LOGGING_VIDEO_MP4, fileName=path, physicsClientId=CLIENT)
+ self.log_id = p.startStateLogging(
+ p.STATE_LOGGING_VIDEO_MP4, fileName=path, physicsClientId=CLIENT)
def restore(self):
if self.log_id is not None:
@@ -252,6 +285,7 @@ class VideoSaver(Saver):
#####################################
+
class PoseSaver(Saver):
def __init__(self, body):
self.body = body
@@ -268,8 +302,9 @@ class PoseSaver(Saver):
def __repr__(self):
return '{}({})'.format(self.__class__.__name__, self.body)
+
class ConfSaver(Saver):
- def __init__(self, body): #, joints):
+ def __init__(self, body): # , joints):
self.body = body
self.conf = get_configuration(body)
@@ -284,9 +319,10 @@ class ConfSaver(Saver):
#####################################
+
class BodySaver(Saver):
- def __init__(self, body): #, pose=None):
- #if pose is None:
+ def __init__(self, body): # , pose=None):
+ # if pose is None:
# pose = get_pose(body)
self.body = body
self.pose_saver = PoseSaver(body)
@@ -305,6 +341,7 @@ class BodySaver(Saver):
def __repr__(self):
return '{}({})'.format(self.__class__.__name__, self.body)
+
class WorldSaver(Saver):
def __init__(self):
self.body_savers = [BodySaver(body) for body in get_bodies()]
@@ -318,26 +355,32 @@ class WorldSaver(Saver):
# Simulation
+
CLIENTS = {}
CLIENT = 0
+
def get_client(client=None):
if client is None:
return CLIENT
return client
+
def set_client(client):
global CLIENT
CLIENT = client
+
ModelInfo = namedtuple('URDFInfo', ['name', 'path', 'fixed_base', 'scale'])
INFO_FROM_BODY = {}
+
def get_model_info(body):
key = (CLIENT, body)
return INFO_FROM_BODY.get(key, None)
+
def get_urdf_flags(cache=False, cylinder=False):
# by default, Bullet disables self-collision
# URDF_INITIALIZE_SAT_FEATURES
@@ -351,6 +394,7 @@ def get_urdf_flags(cache=False, cylinder=False):
flags |= p.URDF_USE_IMPLICIT_CYLINDER
return flags
+
def load_pybullet(filename, fixed_base=False, scale=1., **kwargs):
# fixed_base=False implies infinite base mass
with LockRenderer():
@@ -372,8 +416,11 @@ def load_pybullet(filename, fixed_base=False, scale=1., **kwargs):
INFO_FROM_BODY[CLIENT, body] = ModelInfo(None, filename, fixed_base, scale)
return body
+
def set_caching(cache):
- p.setPhysicsEngineParameter(enableFileCaching=int(cache), physicsClientId=CLIENT)
+ p.setPhysicsEngineParameter(
+ enableFileCaching=int(cache), physicsClientId=CLIENT)
+
def load_model_info(info):
# TODO: disable file caching to reuse old filenames
@@ -385,20 +432,23 @@ def load_model_info(info):
return create_obj(info.path, mass=mass, scale=info.scale)
raise NotImplementedError(info.path)
+
URDF_FLAGS = [p.URDF_USE_INERTIA_FROM_FILE,
p.URDF_USE_SELF_COLLISION,
p.URDF_USE_SELF_COLLISION_EXCLUDE_PARENT,
p.URDF_USE_SELF_COLLISION_EXCLUDE_ALL_PARENTS]
-def get_model_path(rel_path): # TODO: add to search path
+
+def get_model_path(rel_path): # TODO: add to search path
directory = os.path.dirname(os.path.abspath(__file__))
return os.path.join(directory, '..', rel_path)
+
def load_model(rel_path, pose=None, **kwargs):
# TODO: error with loadURDF when loading MESH visual and CYLINDER collision
abs_path = get_model_path(rel_path)
add_data_path()
- #with LockRenderer():
+ # with LockRenderer():
body = load_pybullet(abs_path, **kwargs)
if pose is not None:
set_pose(body, pose)
@@ -430,14 +480,19 @@ def load_model(rel_path, pose=None, **kwargs):
#####################################
+
def elapsed_time(start_time):
return time.time() - start_time
-MouseEvent = namedtuple('MouseEvent', ['eventType', 'mousePosX', 'mousePosY', 'buttonIndex', 'buttonState'])
+
+MouseEvent = namedtuple('MouseEvent', [
+ 'eventType', 'mousePosX', 'mousePosY', 'buttonIndex', 'buttonState'])
+
def get_mouse_events():
return list(MouseEvent(*event) for event in p.getMouseEvents(physicsClientId=CLIENT))
+
def update_viewer():
# https://docs.python.org/2/library/select.html
# events = p.getKeyboardEvents() # TODO: only works when the viewer is in focus
@@ -449,29 +504,34 @@ def update_viewer():
# time.sleep(1e-3) # Doesn't work
# disable_gravity()
-def wait_for_duration(duration): #, dt=0):
+
+def wait_for_duration(duration): # , dt=0):
t0 = time.time()
while elapsed_time(t0) <= duration:
update_viewer()
+
def simulate_for_duration(duration):
dt = get_time_step()
for i in range(int(duration / dt)):
step_simulation()
+
def get_time_step():
# {'gravityAccelerationX', 'useRealTimeSimulation', 'gravityAccelerationZ', 'numSolverIterations',
# 'gravityAccelerationY', 'numSubSteps', 'fixedTimeStep'}
return p.getPhysicsEngineParameters(physicsClientId=CLIENT)['fixedTimeStep']
+
def enable_separating_axis_test():
p.setPhysicsEngineParameter(enableSAT=1, physicsClientId=CLIENT)
- #p.setCollisionFilterPair()
- #p.setCollisionFilterGroupMask()
- #p.setInternalSimFlags()
+ # p.setCollisionFilterPair()
+ # p.setCollisionFilterGroupMask()
+ # p.setInternalSimFlags()
# enableFileCaching: Set to 0 to disable file caching, such as .obj wavefront file loading
- #p.getAPIVersion() # TODO: check that API is up-to-date
- #p.isNumpyEnabled()
+ # p.getAPIVersion() # TODO: check that API is up-to-date
+ # p.isNumpyEnabled()
+
def simulate_for_sim_duration(sim_duration, real_dt=0, frequency=INF):
t0 = time.time()
@@ -480,26 +540,31 @@ def simulate_for_sim_duration(sim_duration, real_dt=0, frequency=INF):
last_print = 0
while sim_time < sim_duration:
if frequency < (sim_time - last_print):
- print('Sim time: {:.3f} | Real time: {:.3f}'.format(sim_time, elapsed_time(t0)))
+ print('Sim time: {:.3f} | Real time: {:.3f}'.format(
+ sim_time, elapsed_time(t0)))
last_print = sim_time
step_simulation()
sim_time += sim_dt
time.sleep(real_dt)
+
def wait_for_user(message='Press enter to continue'):
if is_darwin():
# OS X doesn't multi-thread the OpenGL visualizer
- #wait_for_interrupt()
+ # wait_for_interrupt()
return threaded_input(message)
return user_input(message)
+
def is_unlocked():
return CLIENTS[CLIENT] is True
+
def wait_if_unlocked(*args, **kwargs):
if is_unlocked():
wait_for_user(*args, **kwargs)
+
def wait_for_interrupt(max_time=np.inf):
"""
Hold Ctrl to move the camera as well as zoom
@@ -512,23 +577,30 @@ def wait_for_interrupt(max_time=np.inf):
finally:
print()
+
def disable_viewer():
p.configureDebugVisualizer(p.COV_ENABLE_GUI, False, physicsClientId=CLIENT)
- p.configureDebugVisualizer(p.COV_ENABLE_SEGMENTATION_MARK_PREVIEW, False, physicsClientId=CLIENT)
- p.configureDebugVisualizer(p.COV_ENABLE_DEPTH_BUFFER_PREVIEW, False, physicsClientId=CLIENT)
- p.configureDebugVisualizer(p.COV_ENABLE_RGB_BUFFER_PREVIEW, False, physicsClientId=CLIENT)
+ p.configureDebugVisualizer(
+ p.COV_ENABLE_SEGMENTATION_MARK_PREVIEW, False, physicsClientId=CLIENT)
+ p.configureDebugVisualizer(
+ p.COV_ENABLE_DEPTH_BUFFER_PREVIEW, False, physicsClientId=CLIENT)
+ p.configureDebugVisualizer(
+ p.COV_ENABLE_RGB_BUFFER_PREVIEW, False, physicsClientId=CLIENT)
#p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, False, physicsClientId=CLIENT)
#p.configureDebugVisualizer(p.COV_ENABLE_SINGLE_STEP_RENDERING, True, physicsClientId=CLIENT)
#p.configureDebugVisualizer(p.COV_ENABLE_SHADOWS, False, physicsClientId=CLIENT)
#p.configureDebugVisualizer(p.COV_ENABLE_WIREFRAME, True, physicsClientId=CLIENT)
#p.COV_ENABLE_MOUSE_PICKING, p.COV_ENABLE_KEYBOARD_SHORTCUTS
+
def set_renderer(enable):
client = CLIENT
if not has_gui(client):
return
CLIENTS[client] = enable
- p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, int(enable), physicsClientId=client)
+ p.configureDebugVisualizer(
+ p.COV_ENABLE_RENDERING, int(enable), physicsClientId=client)
+
class LockRenderer(Saver):
# disabling rendering temporary makes adding objects faster
@@ -544,7 +616,8 @@ class LockRenderer(Saver):
return
assert self.state is not None
if self.state != CLIENTS[self.client]:
- set_renderer(enable=self.state)
+ set_renderer(enable=self.state)
+
def connect(use_gui=True, shadows=True):
# Shared Memory: execute the physics simulation and rendering in a separate process
@@ -566,15 +639,21 @@ def connect(use_gui=True, shadows=True):
if use_gui:
# p.COV_ENABLE_PLANAR_REFLECTION
# p.COV_ENABLE_SINGLE_STEP_RENDERING
- p.configureDebugVisualizer(p.COV_ENABLE_GUI, False, physicsClientId=sim_id)
- p.configureDebugVisualizer(p.COV_ENABLE_TINY_RENDERER, False, physicsClientId=sim_id)
- p.configureDebugVisualizer(p.COV_ENABLE_RGB_BUFFER_PREVIEW, False, physicsClientId=sim_id)
- p.configureDebugVisualizer(p.COV_ENABLE_DEPTH_BUFFER_PREVIEW, False, physicsClientId=sim_id)
- p.configureDebugVisualizer(p.COV_ENABLE_SEGMENTATION_MARK_PREVIEW, False, physicsClientId=sim_id)
- p.configureDebugVisualizer(p.COV_ENABLE_SHADOWS, shadows, physicsClientId=sim_id)
+ p.configureDebugVisualizer(
+ p.COV_ENABLE_GUI, False, physicsClientId=sim_id)
+ p.configureDebugVisualizer(
+ p.COV_ENABLE_TINY_RENDERER, False, physicsClientId=sim_id)
+ p.configureDebugVisualizer(
+ p.COV_ENABLE_RGB_BUFFER_PREVIEW, False, physicsClientId=sim_id)
+ p.configureDebugVisualizer(
+ p.COV_ENABLE_DEPTH_BUFFER_PREVIEW, False, physicsClientId=sim_id)
+ p.configureDebugVisualizer(
+ p.COV_ENABLE_SEGMENTATION_MARK_PREVIEW, False, physicsClientId=sim_id)
+ p.configureDebugVisualizer(
+ p.COV_ENABLE_SHADOWS, shadows, physicsClientId=sim_id)
# you can also use GUI mode, for faster OpenGL rendering (instead of TinyRender CPU)
- #visualizer_options = {
+ # visualizer_options = {
# p.COV_ENABLE_WIREFRAME: 1,
# p.COV_ENABLE_SHADOWS: 0,
# p.COV_ENABLE_RENDERING: 0,
@@ -585,11 +664,12 @@ def connect(use_gui=True, shadows=True):
# p.COV_ENABLE_VR_RENDER_CONTROLLERS: 0,
# p.COV_ENABLE_VR_PICKING: 0,
# p.COV_ENABLE_VR_TELEPORTING: 0,
- #}
- #for pair in visualizer_options.items():
+ # }
+ # for pair in visualizer_options.items():
# p.configureDebugVisualizer(*pair)
return sim_id
+
def threaded_input(*args, **kwargs):
# OS X doesn't multi-thread the OpenGL visualizer
# http://openrave.org/docs/0.8.2/_modules/openravepy/misc/#SetViewerUserThread
@@ -597,20 +677,21 @@ def threaded_input(*args, **kwargs):
# https://github.com/bulletphysics/bullet3/tree/master/examples/ExampleBrowser
#from pybullet_utils import bullet_client
#from pybullet_utils.bullet_client import BulletClient
- #server = bullet_client.BulletClient(connection_mode=p.SHARED_MEMORY_SERVER) # GUI_SERVER
+ # server = bullet_client.BulletClient(connection_mode=p.SHARED_MEMORY_SERVER) # GUI_SERVER
#sim_id = p.connect(p.GUI)
- #print(dir(server))
+ # print(dir(server))
#client = bullet_client.BulletClient(connection_mode=p.SHARED_MEMORY)
#sim_id = p.connect(p.SHARED_MEMORY)
#threading = __import__('threading')
import threading
data = []
- thread = threading.Thread(target=lambda: data.append(user_input(*args, **kwargs)), args=[])
+ thread = threading.Thread(target=lambda: data.append(
+ user_input(*args, **kwargs)), args=[])
thread.start()
- #threading.enumerate()
+ # threading.enumerate()
#thread_id = 0
- #for tid, tobj in threading._active.items():
+ # for tid, tobj in threading._active.items():
# if tobj is thread:
# thread_id = tid
# break
@@ -621,6 +702,7 @@ def threaded_input(*args, **kwargs):
thread.join()
return data[-1]
+
def disconnect():
# TODO: change CLIENT?
if CLIENT in CLIENTS:
@@ -628,89 +710,111 @@ def disconnect():
with HideOutput():
return p.disconnect(physicsClientId=CLIENT)
+
def is_connected():
return p.getConnectionInfo(physicsClientId=CLIENT)['isConnected']
+
def get_connection(client=None):
return p.getConnectionInfo(physicsClientId=get_client(client))['connectionMethod']
+
def has_gui(client=None):
return get_connection(get_client(client)) == p.GUI
+
def get_data_path():
import pybullet_data
return pybullet_data.getDataPath()
+
def add_data_path(data_path=None):
if data_path is None:
data_path = get_data_path()
p.setAdditionalSearchPath(data_path)
return data_path
+
GRAVITY = 9.8
+
def enable_gravity():
p.setGravity(0, 0, -GRAVITY, physicsClientId=CLIENT)
+
def disable_gravity():
p.setGravity(0, 0, 0, physicsClientId=CLIENT)
+
def step_simulation():
p.stepSimulation(physicsClientId=CLIENT)
+
def set_real_time(real_time):
p.setRealTimeSimulation(int(real_time), physicsClientId=CLIENT)
+
def enable_real_time():
set_real_time(True)
+
def disable_real_time():
set_real_time(False)
+
def update_state():
# TODO: this doesn't seem to automatically update still
disable_gravity()
- #step_simulation()
- #for body in get_bodies():
+ # step_simulation()
+ # for body in get_bodies():
# for link in get_links(body):
# # if set to 1 (or True), the Cartesian world position/orientation
# # will be recomputed using forward kinematics.
# get_link_state(body, link)
- #for body in get_bodies():
+ # for body in get_bodies():
# get_pose(body)
# for joint in get_joints(body):
# get_joint_position(body, joint)
- #p.getKeyboardEvents()
- #p.getMouseEvents()
+ # p.getKeyboardEvents()
+ # p.getMouseEvents()
+
def reset_simulation():
p.resetSimulation(physicsClientId=CLIENT)
+
CameraInfo = namedtuple('CameraInfo', ['width', 'height', 'viewMatrix', 'projectionMatrix', 'cameraUp', 'cameraForward',
'horizontal', 'vertical', 'yaw', 'pitch', 'dist', 'target'])
+
def get_camera():
return CameraInfo(*p.getDebugVisualizerCamera(physicsClientId=CLIENT))
+
def set_camera(yaw, pitch, distance, target_position=np.zeros(3)):
- p.resetDebugVisualizerCamera(distance, yaw, pitch, target_position, physicsClientId=CLIENT)
+ p.resetDebugVisualizerCamera(
+ distance, yaw, pitch, target_position, physicsClientId=CLIENT)
+
def get_pitch(point):
dx, dy, dz = point
return np.math.atan2(dz, np.sqrt(dx ** 2 + dy ** 2))
+
def get_yaw(point):
dx, dy, dz = point
return np.math.atan2(dy, dx)
+
def set_camera_pose(camera_point, target_point=np.zeros(3)):
delta_point = np.array(target_point) - np.array(camera_point)
distance = np.linalg.norm(delta_point)
- yaw = get_yaw(delta_point) - np.pi/2 # TODO: hack
+ yaw = get_yaw(delta_point) - np.pi/2 # TODO: hack
pitch = get_pitch(delta_point)
p.resetDebugVisualizerCamera(distance, math.degrees(yaw), math.degrees(pitch),
target_point, physicsClientId=CLIENT)
+
def set_camera_pose2(world_from_camera, distance=2):
target_camera = np.array([0, 0, distance])
target_world = tform_point(world_from_camera, target_camera)
@@ -718,21 +822,25 @@ def set_camera_pose2(world_from_camera, distance=2):
set_camera_pose(camera_world, target_world)
#roll, pitch, yaw = euler_from_quat(quat_from_pose(world_from_camera))
# TODO: assert that roll is about zero?
- #p.resetDebugVisualizerCamera(cameraDistance=distance, cameraYaw=math.degrees(yaw), cameraPitch=math.degrees(-pitch),
+ # p.resetDebugVisualizerCamera(cameraDistance=distance, cameraYaw=math.degrees(yaw), cameraPitch=math.degrees(-pitch),
# cameraTargetPosition=target_world, physicsClientId=CLIENT)
-CameraImage = namedtuple('CameraImage', ['rgbPixels', 'depthPixels', 'segmentationMaskBuffer'])
+
+CameraImage = namedtuple(
+ 'CameraImage', ['rgbPixels', 'depthPixels', 'segmentationMaskBuffer'])
+
def demask_pixel(pixel):
# https://github.com/bulletphysics/bullet3/blob/master/examples/pybullet/examples/segmask_linkindex.py
# Not needed when p.ER_SEGMENTATION_MASK_OBJECT_AND_LINKINDEX is not enabled
- #if 0 <= pixel:
+ # if 0 <= pixel:
# return None
# Returns a large value when undefined
body = pixel & ((1 << 24) - 1)
link = (pixel >> 24) - 1
return body, link
+
def save_image(filename, rgba):
import scipy.misc
if filename.endswith('.jpg'):
@@ -744,6 +852,7 @@ def save_image(filename, rgba):
raise ValueError(filename)
print('Saved image at {}'.format(filename))
+
def get_projection_matrix(width, height, vertical_fov, near, far):
"""
OpenGL projection matrix
@@ -765,7 +874,8 @@ def get_projection_matrix(width, height, vertical_fov, near, far):
nearVal=near, farVal=far, physicsClientId=CLIENT)
# projection_matrix = p.computeProjectionMatrix(0, width, height, 0, near, far, physicsClientId=CLIENT)
return projection_matrix
- #return np.reshape(projection_matrix, [4, 4])
+ # return np.reshape(projection_matrix, [4, 4])
+
RED = (1, 0, 0, 1)
GREEN = (0, 1, 0, 1)
@@ -786,12 +896,15 @@ COLOR_FROM_NAME = {
'black': BLACK,
}
+
def apply_alpha(color, alpha=1.0):
return tuple(color[:3]) + (alpha,)
+
def spaced_colors(n, s=1, v=1):
return [colorsys.hsv_to_rgb(h, s, v) for h in np.linspace(0, 1, n, endpoint=False)]
+
def image_from_segmented(segmented, color_from_body=None):
if color_from_body is None:
bodies = get_bodies()
@@ -803,12 +916,14 @@ def image_from_segmented(segmented, color_from_body=None):
image[r, c, :] = color_from_body.get(body, (0, 0, 0))
return image
+
def get_image(camera_pos, target_pos, width=640, height=480, vertical_fov=60.0, near=0.02, far=5.0,
segment=False, segment_links=False):
# computeViewMatrixFromYawPitchRoll
view_matrix = p.computeViewMatrix(cameraEyePosition=camera_pos, cameraTargetPosition=target_pos,
cameraUpVector=[0, 0, 1], physicsClientId=CLIENT)
- projection_matrix = get_projection_matrix(width, height, vertical_fov, near, far)
+ projection_matrix = get_projection_matrix(
+ width, height, vertical_fov, near, far)
if segment:
if segment_links:
flags = p.ER_SEGMENTATION_MASK_OBJECT_AND_LINKINDEX
@@ -820,7 +935,7 @@ def get_image(camera_pos, target_pos, width=640, height=480, vertical_fov=60.0,
projectionMatrix=projection_matrix,
shadow=False,
flags=flags,
- renderer=p.ER_TINY_RENDERER, # p.ER_BULLET_HARDWARE_OPENGL
+ renderer=p.ER_TINY_RENDERER, # p.ER_BULLET_HARDWARE_OPENGL
physicsClientId=CLIENT)[2:])
depth = far * near / (far - (far - near) * image.depthPixels)
# https://github.com/bulletphysics/bullet3/blob/master/examples/pybullet/examples/pointCloudFromCameraImage.py
@@ -834,18 +949,23 @@ def get_image(camera_pos, target_pos, width=640, height=480, vertical_fov=60.0,
segmented[r, c, :] = demask_pixel(pixel)
return CameraImage(image.rgbPixels, depth, segmented)
+
def set_default_camera():
set_camera(160, -35, 2.5, Point())
+
def save_state():
return p.saveState(physicsClientId=CLIENT)
+
def restore_state(state_id):
p.restoreState(stateId=state_id, physicsClientId=CLIENT)
+
def save_bullet(filename):
p.saveBullet(filename, physicsClientId=CLIENT)
+
def restore_bullet(filename):
p.restoreState(fileName=filename, physicsClientId=CLIENT)
@@ -855,120 +975,152 @@ def restore_bullet(filename):
#Pose = namedtuple('Pose', ['position', 'orientation'])
+
def Point(x=0., y=0., z=0.):
return np.array([x, y, z])
+
def Euler(roll=0., pitch=0., yaw=0.):
return np.array([roll, pitch, yaw])
+
def Pose(point=None, euler=None):
point = Point() if point is None else point
euler = Euler() if euler is None else euler
return (point, quat_from_euler(euler))
-#def Pose2d(x=0., y=0., yaw=0.):
+# def Pose2d(x=0., y=0., yaw=0.):
# return np.array([x, y, yaw])
+
def invert(pose):
(point, quat) = pose
return p.invertTransform(point, quat)
+
def multiply(*poses):
pose = poses[0]
for next_pose in poses[1:]:
pose = p.multiplyTransforms(pose[0], pose[1], *next_pose)
return pose
+
def invert_quat(quat):
pose = (unit_point(), quat)
return quat_from_pose(invert(pose))
+
def multiply_quats(*quats):
return quat_from_pose(multiply(*[(unit_point(), quat) for quat in quats]))
+
def unit_from_theta(theta):
return np.array([np.cos(theta), np.sin(theta)])
+
def quat_from_euler(euler):
return p.getQuaternionFromEuler(euler)
+
def euler_from_quat(quat):
return p.getEulerFromQuaternion(quat)
+
def unit_point():
return (0., 0., 0.)
-def unit_quat():
- return quat_from_euler([0, 0, 0]) # [X,Y,Z,W]
-def quat_from_axis_angle(axis, angle): # axis-angle
- #return get_unit_vector(np.append(vec, [angle]))
+def unit_quat():
+ return quat_from_euler([0, 0, 0]) # [X,Y,Z,W]
+
+
+def quat_from_axis_angle(axis, angle): # axis-angle
+ # return get_unit_vector(np.append(vec, [angle]))
return np.append(math.sin(angle/2) * get_unit_vector(axis), [math.cos(angle / 2)])
+
def unit_pose():
return (unit_point(), unit_quat())
+
def get_length(vec, norm=2):
return np.linalg.norm(vec, ord=norm)
+
def get_difference(p1, p2):
return np.array(p2) - np.array(p1)
+
def get_distance(p1, p2, **kwargs):
return get_length(get_difference(p1, p2), **kwargs)
+
def angle_between(vec1, vec2):
- return np.math.acos(np.dot(vec1, vec2) / (get_length(vec1) * get_length(vec2)))
+ return np.math.acos(np.dot(vec1, vec2) / (get_length(vec1) * get_length(vec2)))
+
def get_angle(q1, q2):
dx, dy = np.array(q2[:2]) - np.array(q1[:2])
return np.math.atan2(dy, dx)
+
def get_unit_vector(vec):
norm = get_length(vec)
if norm == 0:
return vec
return np.array(vec) / norm
+
def z_rotation(theta):
return quat_from_euler([0, 0, theta])
+
def matrix_from_quat(quat):
return np.array(p.getMatrixFromQuaternion(quat, physicsClientId=CLIENT)).reshape(3, 3)
+
def quat_from_matrix(mat):
matrix = np.eye(4)
- matrix[:3,:3] = mat
+ matrix[:3, :3] = mat
return quaternion_from_matrix(matrix)
+
def point_from_tform(tform):
- return np.array(tform)[:3,3]
+ return np.array(tform)[:3, 3]
+
def matrix_from_tform(tform):
- return np.array(tform)[:3,:3]
+ return np.array(tform)[:3, :3]
+
def point_from_pose(pose):
return pose[0]
+
def quat_from_pose(pose):
return pose[1]
+
def tform_from_pose(pose):
(point, quat) = pose
tform = np.eye(4)
- tform[:3,3] = point
- tform[:3,:3] = matrix_from_quat(quat)
+ tform[:3, 3] = point
+ tform[:3, :3] = matrix_from_quat(quat)
return tform
+
def pose_from_tform(tform):
return point_from_tform(tform), quat_from_matrix(matrix_from_tform(tform))
-def wrap_angle(theta, lower=-np.pi): # [-np.pi, np.pi)
+
+def wrap_angle(theta, lower=-np.pi): # [-np.pi, np.pi)
return (theta - lower) % (2 * np.pi) + lower
+
def circular_difference(theta2, theta1):
return wrap_angle(theta2 - theta1)
+
def base_values_from_pose(pose, tolerance=1e-3):
(point, quat) = pose
x, y, _ = point
@@ -976,16 +1128,19 @@ def base_values_from_pose(pose, tolerance=1e-3):
#assert (abs(roll) < tolerance) and (abs(pitch) < tolerance)
return (x, y, yaw)
+
pose2d_from_pose = base_values_from_pose
+
def pose_from_base_values(base_values, default_pose=unit_pose()):
x, y, yaw = base_values
_, _, z = point_from_pose(default_pose)
roll, pitch, _ = euler_from_quat(quat_from_pose(default_pose))
return (x, y, z), quat_from_euler([roll, pitch, yaw])
-def quat_angle_between(quat0, quat1): # quaternion_slerp
- #p.computeViewMatrixFromYawPitchRoll()
+
+def quat_angle_between(quat0, quat1): # quaternion_slerp
+ # p.computeViewMatrixFromYawPitchRoll()
q0 = unit_vector(quat0[:4])
q1 = unit_vector(quat1[:4])
d = clip(np.dot(q0, q1), min_value=-1., max_value=+1.)
@@ -995,37 +1150,45 @@ def quat_angle_between(quat0, quat1): # quaternion_slerp
#angle = math.acos(delta[-1])
return angle
+
def all_between(lower_limits, values, upper_limits):
assert len(lower_limits) == len(values)
assert len(values) == len(upper_limits)
return np.less_equal(lower_limits, values).all() and \
- np.less_equal(values, upper_limits).all()
+ np.less_equal(values, upper_limits).all()
#####################################
# Bodies
+
def get_bodies():
return [p.getBodyUniqueId(i, physicsClientId=CLIENT)
for i in range(p.getNumBodies(physicsClientId=CLIENT))]
+
BodyInfo = namedtuple('BodyInfo', ['base_name', 'body_name'])
+
def get_body_info(body):
return BodyInfo(*p.getBodyInfo(body, physicsClientId=CLIENT))
+
def get_base_name(body):
return get_body_info(body).base_name.decode(encoding='UTF-8')
+
def get_body_name(body):
return get_body_info(body).body_name.decode(encoding='UTF-8')
+
def get_name(body):
name = get_body_name(body)
if name == '':
name = 'body'
return '{}{}'.format(name, int(body))
+
def has_body(name):
try:
body_from_name(name)
@@ -1033,70 +1196,90 @@ def has_body(name):
return False
return True
+
def body_from_name(name):
for body in get_bodies():
if get_body_name(body) == name:
return body
raise ValueError(name)
+
def remove_body(body):
if (CLIENT, body) in INFO_FROM_BODY:
del INFO_FROM_BODY[CLIENT, body]
return p.removeBody(body, physicsClientId=CLIENT)
+
def get_pose(body):
return p.getBasePositionAndOrientation(body, physicsClientId=CLIENT)
- #return np.concatenate([point, quat])
+ # return np.concatenate([point, quat])
+
def get_point(body):
return get_pose(body)[0]
+
def get_quat(body):
- return get_pose(body)[1] # [x,y,z,w]
+ return get_pose(body)[1] # [x,y,z,w]
+
def get_euler(body):
return euler_from_quat(get_quat(body))
+
def get_base_values(body):
return base_values_from_pose(get_pose(body))
+
def set_pose(body, pose):
(point, quat) = pose
- p.resetBasePositionAndOrientation(body, point, quat, physicsClientId=CLIENT)
+ p.resetBasePositionAndOrientation(
+ body, point, quat, physicsClientId=CLIENT)
+
def set_point(body, point):
set_pose(body, (point, get_quat(body)))
+
def set_quat(body, quat):
set_pose(body, (get_point(body), quat))
+
def set_euler(body, euler):
set_quat(body, quat_from_euler(euler))
+
def pose_from_pose2d(pose2d):
x, y, theta = pose2d
return Pose(Point(x=x, y=y), Euler(yaw=theta))
+
def set_base_values(body, values):
_, _, z = get_point(body)
x, y, theta = values
set_point(body, (x, y, z))
set_quat(body, z_rotation(theta))
+
def set_base_values_with_z(body, values, z):
x, y, theta = values
set_point(body, (x, y, z))
set_quat(body, z_rotation(theta))
+
def get_velocity(body):
linear, angular = p.getBaseVelocity(body, physicsClientId=CLIENT)
- return linear, angular # [x,y,z], [wx,wy,wz]
+ return linear, angular # [x,y,z], [wx,wy,wz]
+
def set_velocity(body, linear=None, angular=None):
if linear is not None:
- p.resetBaseVelocity(body, linearVelocity=linear, physicsClientId=CLIENT)
+ p.resetBaseVelocity(body, linearVelocity=linear,
+ physicsClientId=CLIENT)
if angular is not None:
- p.resetBaseVelocity(body, angularVelocity=angular, physicsClientId=CLIENT)
+ p.resetBaseVelocity(body, angularVelocity=angular,
+ physicsClientId=CLIENT)
+
def is_rigid_body(body):
for joint in get_joints(body):
@@ -1104,32 +1287,38 @@ def is_rigid_body(body):
return False
return True
+
def is_fixed_base(body):
return get_mass(body) == STATIC_MASS
+
def dump_body(body):
print('Body id: {} | Name: {} | Rigid: {} | Fixed: {}'.format(
body, get_body_name(body), is_rigid_body(body), is_fixed_base(body)))
for joint in get_joints(body):
if is_movable(body, joint):
print('Joint id: {} | Name: {} | Type: {} | Circular: {} | Limits: {}'.format(
- joint, get_joint_name(body, joint), JOINT_TYPES[get_joint_type(body, joint)],
+ joint, get_joint_name(
+ body, joint), JOINT_TYPES[get_joint_type(body, joint)],
is_circular(body, joint), get_joint_limits(body, joint)))
link = -1
print('Link id: {} | Name: {} | Mass: {} | Collision: {} | Visual: {}'.format(
link, get_base_name(body), get_mass(body),
- len(get_collision_data(body, link)), -1)) # len(get_visual_data(body, link))))
+ len(get_collision_data(body, link)), -1)) # len(get_visual_data(body, link))))
for link in get_links(body):
joint = parent_joint_from_link(link)
- joint_name = JOINT_TYPES[get_joint_type(body, joint)] if is_fixed(body, joint) else get_joint_name(body, joint)
+ joint_name = JOINT_TYPES[get_joint_type(body, joint)] if is_fixed(
+ body, joint) else get_joint_name(body, joint)
print('Link id: {} | Name: {} | Joint: {} | Parent: {} | Mass: {} | Collision: {} | Visual: {}'.format(
link, get_link_name(body, link), joint_name,
- get_link_name(body, get_link_parent(body, link)), get_mass(body, link),
- len(get_collision_data(body, link)), -1)) # len(get_visual_data(body, link))))
+ get_link_name(body, get_link_parent(
+ body, link)), get_mass(body, link),
+ len(get_collision_data(body, link)), -1)) # len(get_visual_data(body, link))))
#print(get_joint_parent_frame(body, link))
#print(map(get_data_geometry, get_visual_data(body, link)))
#print(map(get_data_geometry, get_collision_data(body, link)))
+
def dump_world():
for body in get_bodies():
dump_body(body)
@@ -1139,42 +1328,51 @@ def dump_world():
# Joints
+
JOINT_TYPES = {
- p.JOINT_REVOLUTE: 'revolute', # 0
- p.JOINT_PRISMATIC: 'prismatic', # 1
- p.JOINT_SPHERICAL: 'spherical', # 2
- p.JOINT_PLANAR: 'planar', # 3
- p.JOINT_FIXED: 'fixed', # 4
- p.JOINT_POINT2POINT: 'point2point', # 5
- p.JOINT_GEAR: 'gear', # 6
+ p.JOINT_REVOLUTE: 'revolute', # 0
+ p.JOINT_PRISMATIC: 'prismatic', # 1
+ p.JOINT_SPHERICAL: 'spherical', # 2
+ p.JOINT_PLANAR: 'planar', # 3
+ p.JOINT_FIXED: 'fixed', # 4
+ p.JOINT_POINT2POINT: 'point2point', # 5
+ p.JOINT_GEAR: 'gear', # 6
}
+
def get_num_joints(body):
return p.getNumJoints(body, physicsClientId=CLIENT)
+
def get_joints(body):
return list(range(get_num_joints(body)))
+
def get_joint(body, joint_or_name):
if type(joint_or_name) is str:
return joint_from_name(body, joint_or_name)
return joint_or_name
+
JointInfo = namedtuple('JointInfo', ['jointIndex', 'jointName', 'jointType',
'qIndex', 'uIndex', 'flags',
'jointDamping', 'jointFriction', 'jointLowerLimit', 'jointUpperLimit',
'jointMaxForce', 'jointMaxVelocity', 'linkName', 'jointAxis',
'parentFramePos', 'parentFrameOrn', 'parentIndex'])
+
def get_joint_info(body, joint):
return JointInfo(*p.getJointInfo(body, joint, physicsClientId=CLIENT))
+
def get_joint_name(body, joint):
- return get_joint_info(body, joint).jointName # .decode('UTF-8')
+ return get_joint_info(body, joint).jointName # .decode('UTF-8')
+
def get_joint_names(body, joints):
return [get_joint_name(body, joint) for joint in joints]
+
def joint_from_name(body, name):
for joint in get_joints(body):
joint_name = get_joint_name(body, joint)
@@ -1184,6 +1382,7 @@ def joint_from_name(body, name):
return joint
raise ValueError(body, name)
+
def has_joint(body, name):
try:
joint_from_name(body, name)
@@ -1191,84 +1390,110 @@ def has_joint(body, name):
return False
return True
+
def joints_from_names(body, names):
return tuple(joint_from_name(body, name) for name in names)
+
JointState = namedtuple('JointState', ['jointPosition', 'jointVelocity',
'jointReactionForces', 'appliedJointMotorTorque'])
+
def get_joint_state(body, joint):
return JointState(*p.getJointState(body, joint, physicsClientId=CLIENT))
+
def get_joint_position(body, joint):
return get_joint_state(body, joint).jointPosition
+
def get_joint_velocity(body, joint):
return get_joint_state(body, joint).jointVelocity
+
def get_joint_reaction_force(body, joint):
return get_joint_state(body, joint).jointReactionForces
+
def get_joint_torque(body, joint):
return get_joint_state(body, joint).appliedJointMotorTorque
-def get_joint_positions(body, joints): # joints=None):
+
+def get_joint_positions(body, joints): # joints=None):
return tuple(get_joint_position(body, joint) for joint in joints)
+
def get_joint_velocities(body, joints):
return tuple(get_joint_velocity(body, joint) for joint in joints)
+
def set_joint_position(body, joint, value):
- p.resetJointState(body, joint, value, targetVelocity=0, physicsClientId=CLIENT)
+ p.resetJointState(body, joint, value, targetVelocity=0,
+ physicsClientId=CLIENT)
+
def set_joint_positions(body, joints, values):
assert len(joints) == len(values)
for joint, value in zip(joints, values):
set_joint_position(body, joint, value)
+
def get_configuration(body):
return get_joint_positions(body, get_movable_joints(body))
+
def set_configuration(body, values):
set_joint_positions(body, get_movable_joints(body), values)
+
def get_full_configuration(body):
# Cannot alter fixed joints
return get_joint_positions(body, get_joints(body))
+
def get_labeled_configuration(body):
movable_joints = get_movable_joints(body)
return dict(zip(get_joint_names(body, movable_joints),
get_joint_positions(body, movable_joints)))
+
def get_joint_type(body, joint):
return get_joint_info(body, joint).jointType
+
def is_fixed(body, joint):
return get_joint_type(body, joint) == p.JOINT_FIXED
+
def is_movable(body, joint):
return not is_fixed(body, joint)
+
def prune_fixed_joints(body, joints):
return [joint for joint in joints if is_movable(body, joint)]
-def get_movable_joints(body): # 45 / 87 on pr2
+
+def get_movable_joints(body): # 45 / 87 on pr2
return prune_fixed_joints(body, get_joints(body))
+
def joint_from_movable(body, index):
return get_joints(body)[index]
+
def movable_from_joints(body, joints):
- movable_from_original = {o: m for m, o in enumerate(get_movable_joints(body))}
+ movable_from_original = {o: m for m,
+ o in enumerate(get_movable_joints(body))}
return [movable_from_original[joint] for joint in joints]
+
def is_circular(body, joint):
joint_info = get_joint_info(body, joint)
if joint_info.jointType == p.JOINT_FIXED:
return False
return joint_info.jointUpperLimit < joint_info.jointLowerLimit
+
def get_joint_limits(body, joint):
# TODO: make a version for several joints?
if is_circular(body, joint):
@@ -1277,57 +1502,72 @@ def get_joint_limits(body, joint):
joint_info = get_joint_info(body, joint)
return joint_info.jointLowerLimit, joint_info.jointUpperLimit
+
def get_min_limit(body, joint):
# TODO: rename to min_position
return get_joint_limits(body, joint)[0]
+
def get_min_limits(body, joints):
return [get_min_limit(body, joint) for joint in joints]
+
def get_max_limit(body, joint):
return get_joint_limits(body, joint)[1]
+
def get_max_limits(body, joints):
return [get_max_limit(body, joint) for joint in joints]
+
def get_max_velocity(body, joint):
return get_joint_info(body, joint).jointMaxVelocity
+
def get_max_force(body, joint):
return get_joint_info(body, joint).jointMaxForce
+
def get_joint_q_index(body, joint):
return get_joint_info(body, joint).qIndex
+
def get_joint_v_index(body, joint):
return get_joint_info(body, joint).uIndex
+
def get_joint_axis(body, joint):
return get_joint_info(body, joint).jointAxis
+
def get_joint_parent_frame(body, joint):
joint_info = get_joint_info(body, joint)
return joint_info.parentFramePos, joint_info.parentFrameOrn
+
def violates_limit(body, joint, value):
if is_circular(body, joint):
return False
lower, upper = get_joint_limits(body, joint)
return (value < lower) or (upper < value)
+
def violates_limits(body, joints, values):
return any(violates_limit(body, joint, value) for joint, value in zip(joints, values))
+
def wrap_position(body, joint, position):
if is_circular(body, joint):
return wrap_angle(position)
return position
+
def wrap_positions(body, joints, positions):
assert len(joints) == len(positions)
return [wrap_position(body, joint, position)
for joint, position in zip(joints, positions)]
+
def get_custom_limits(body, joints, custom_limits={}, circular_limits=UNBOUNDED_LIMITS):
joint_limits = []
for joint in joints:
@@ -1343,33 +1583,41 @@ def get_custom_limits(body, joints, custom_limits={}, circular_limits=UNBOUNDED_
# Links
+
BASE_LINK = -1
STATIC_MASS = 0
get_num_links = get_num_joints
-get_links = get_joints # Does not include BASE_LINK
+get_links = get_joints # Does not include BASE_LINK
+
def child_link_from_joint(joint):
- return joint # link
+ return joint # link
+
def parent_joint_from_link(link):
- return link # joint
+ return link # joint
+
def get_all_links(body):
return [BASE_LINK] + list(get_links(body))
+
def get_link_name(body, link):
if link == BASE_LINK:
return get_base_name(body)
return get_joint_info(body, link).linkName.decode('UTF-8')
+
def get_link_parent(body, link):
if link == BASE_LINK:
return None
return get_joint_info(body, link).parentIndex
+
parent_link_from_joint = get_link_parent
+
def link_from_name(body, name):
if name == get_base_name(body):
return BASE_LINK
@@ -1386,31 +1634,38 @@ def has_link(body, name):
return False
return True
+
LinkState = namedtuple('LinkState', ['linkWorldPosition', 'linkWorldOrientation',
'localInertialFramePosition', 'localInertialFrameOrientation',
'worldLinkFramePosition', 'worldLinkFrameOrientation'])
+
def get_link_state(body, link, kinematics=True, velocity=True):
# TODO: the defaults are set to False?
# https://github.com/bulletphysics/bullet3/blob/master/examples/pybullet/pybullet.c
- return LinkState(*p.getLinkState(body, link, #computeLinkVelocity=velocity, computeForwardKinematics=kinematics,
+ return LinkState(*p.getLinkState(body, link, # computeLinkVelocity=velocity, computeForwardKinematics=kinematics,
physicsClientId=CLIENT))
-def get_com_pose(body, link): # COM = center of mass
+
+def get_com_pose(body, link): # COM = center of mass
link_state = get_link_state(body, link)
return link_state.linkWorldPosition, link_state.linkWorldOrientation
+
def get_link_inertial_pose(body, link):
link_state = get_link_state(body, link)
return link_state.localInertialFramePosition, link_state.localInertialFrameOrientation
+
def get_link_pose(body, link):
if link == BASE_LINK:
return get_pose(body)
# if set to 1 (or True), the Cartesian world position/orientation will be recomputed using forward kinematics.
- link_state = get_link_state(body, link) #, kinematics=True, velocity=False)
+ # , kinematics=True, velocity=False)
+ link_state = get_link_state(body, link)
return link_state.worldLinkFramePosition, link_state.worldLinkFrameOrientation
+
def get_relative_pose(body, link1, link2=BASE_LINK):
world_from_link1 = get_link_pose(body, link1)
world_from_link2 = get_link_pose(body, link2)
@@ -1419,9 +1674,11 @@ def get_relative_pose(body, link1, link2=BASE_LINK):
#####################################
+
def get_all_link_parents(body):
return {link: get_link_parent(body, link) for link in get_links(body)}
+
def get_all_link_children(body):
children = {}
for child, parent in get_all_link_parents(body).items():
@@ -1430,10 +1687,12 @@ def get_all_link_children(body):
children[parent].append(child)
return children
+
def get_link_children(body, link):
children = get_all_link_children(body)
return children.get(link, [])
+
def get_link_ancestors(body, link):
# Returns in order of depth
# Does not include link
@@ -1442,19 +1701,24 @@ def get_link_ancestors(body, link):
return []
return get_link_ancestors(body, parent) + [parent]
+
def get_joint_ancestors(body, joint):
link = child_link_from_joint(joint)
return get_link_ancestors(body, link) + [link]
+
def get_movable_joint_ancestors(body, link):
return prune_fixed_joints(body, get_joint_ancestors(body, link))
+
def get_joint_descendants(body, link):
return list(map(parent_joint_from_link, get_link_descendants(body, link)))
+
def get_movable_joint_descendants(body, link):
return prune_fixed_joints(body, get_joint_descendants(body, link))
+
def get_link_descendants(body, link, test=lambda l: True):
descendants = []
for child in get_link_children(body, link):
@@ -1463,13 +1727,16 @@ def get_link_descendants(body, link, test=lambda l: True):
descendants.extend(get_link_descendants(body, child, test=test))
return descendants
+
def get_link_subtree(body, link, **kwargs):
return [link] + get_link_descendants(body, link, **kwargs)
+
def are_links_adjacent(body, link1, link2):
return (get_link_parent(body, link1) == link2) or \
(get_link_parent(body, link2) == link1)
+
def get_adjacent_links(body):
adjacent = set()
for link in get_links(body):
@@ -1478,10 +1745,12 @@ def get_adjacent_links(body):
#adjacent.add((parent, link))
return adjacent
+
def get_adjacent_fixed_links(body):
return list(filter(lambda item: not is_movable(body, item[0]),
get_adjacent_links(body)))
+
def get_fixed_links(body):
edges = defaultdict(list)
for link, parent in get_adjacent_fixed_links(body):
@@ -1506,54 +1775,65 @@ def get_fixed_links(body):
#####################################
+
DynamicsInfo = namedtuple('DynamicsInfo', ['mass', 'lateral_friction',
'local_inertia_diagonal', 'local_inertial_pos', 'local_inertial_orn',
'restitution', 'rolling_friction', 'spinning_friction',
'contact_damping', 'contact_stiffness'])
+
def get_dynamics_info(body, link=BASE_LINK):
return DynamicsInfo(*p.getDynamicsInfo(body, link, physicsClientId=CLIENT))
+
get_link_info = get_dynamics_info
+
def get_mass(body, link=BASE_LINK):
# TOOD: get full mass
return get_dynamics_info(body, link).mass
+
def set_dynamics(body, link=BASE_LINK, **kwargs):
# TODO: iterate over all links
p.changeDynamics(body, link, physicsClientId=CLIENT, **kwargs)
+
def set_mass(body, mass, link=BASE_LINK):
set_dynamics(body, link=link, mass=mass)
+
def set_static(body):
for link in get_all_links(body):
set_mass(body, mass=STATIC_MASS, link=link)
+
def set_all_static():
# TODO: mass saver
disable_gravity()
for body in get_bodies():
set_static(body)
+
def get_joint_inertial_pose(body, joint):
dynamics_info = get_dynamics_info(body, joint)
return dynamics_info.local_inertial_pos, dynamics_info.local_inertial_orn
+
def get_local_link_pose(body, joint):
parent_joint = parent_link_from_joint(body, joint)
#world_child = get_link_pose(body, joint)
#world_parent = get_link_pose(body, parent_joint)
- ##return multiply(invert(world_parent), world_child)
- #return multiply(world_child, invert(world_parent))
+ # return multiply(invert(world_parent), world_child)
+ # return multiply(world_child, invert(world_parent))
# https://github.com/bulletphysics/bullet3/blob/9c9ac6cba8118544808889664326fd6f06d9eeba/examples/pybullet/gym/pybullet_utils/urdfEditor.py#L169
parent_com = get_joint_parent_frame(body, joint)
- tmp_pose = invert(multiply(get_joint_inertial_pose(body, joint), parent_com))
+ tmp_pose = invert(
+ multiply(get_joint_inertial_pose(body, joint), parent_com))
parent_inertia = get_joint_inertial_pose(body, parent_joint)
- #return multiply(parent_inertia, tmp_pose) # TODO: why is this wrong...
+ # return multiply(parent_inertia, tmp_pose) # TODO: why is this wrong...
_, orn = multiply(parent_inertia, tmp_pose)
pos, _ = multiply(parent_inertia, Pose(parent_com[0]))
return (pos, orn)
@@ -1562,11 +1842,12 @@ def get_local_link_pose(body, joint):
# Shapes
+
SHAPE_TYPES = {
- p.GEOM_SPHERE: 'sphere', # 2
- p.GEOM_BOX: 'box', # 3
- p.GEOM_CYLINDER: 'cylinder', # 4
- p.GEOM_MESH: 'mesh', # 5
+ p.GEOM_SPHERE: 'sphere', # 2
+ p.GEOM_BOX: 'box', # 3
+ p.GEOM_CYLINDER: 'cylinder', # 4
+ p.GEOM_MESH: 'mesh', # 5
p.GEOM_PLANE: 'plane', # 6
p.GEOM_CAPSULE: 'capsule', # 7
# p.GEOM_FORCE_CONCAVE_TRIMESH
@@ -1574,12 +1855,14 @@ SHAPE_TYPES = {
# TODO: clean this up to avoid repeated work
+
def get_box_geometry(width, length, height):
return {
'shapeType': p.GEOM_BOX,
'halfExtents': [width/2., length/2., height/2.]
}
+
def get_cylinder_geometry(radius, height):
return {
'shapeType': p.GEOM_CYLINDER,
@@ -1587,12 +1870,14 @@ def get_cylinder_geometry(radius, height):
'length': height,
}
+
def get_sphere_geometry(radius):
return {
'shapeType': p.GEOM_SPHERE,
'radius': radius,
}
+
def get_capsule_geometry(radius, height):
return {
'shapeType': p.GEOM_CAPSULE,
@@ -1600,12 +1885,14 @@ def get_capsule_geometry(radius, height):
'length': height,
}
+
def get_plane_geometry(normal):
return {
'shapeType': p.GEOM_PLANE,
'planeNormal': normal,
}
+
def get_mesh_geometry(path, scale=1.):
return {
'shapeType': p.GEOM_MESH,
@@ -1613,8 +1900,10 @@ def get_mesh_geometry(path, scale=1.):
'meshScale': scale*np.ones(3),
}
+
NULL_ID = -1
+
def create_collision_shape(geometry, pose=unit_pose()):
point, quat = pose
collision_args = {
@@ -1629,8 +1918,9 @@ def create_collision_shape(geometry, pose=unit_pose()):
del collision_args['length']
return p.createCollisionShape(**collision_args)
+
def create_visual_shape(geometry, pose=unit_pose(), color=(1, 0, 0, 1), specular=None):
- if (color is None): # or not has_gui():
+ if (color is None): # or not has_gui():
return NULL_ID
point, quat = pose
visual_args = {
@@ -1644,11 +1934,14 @@ def create_visual_shape(geometry, pose=unit_pose(), color=(1, 0, 0, 1), specular
visual_args['specularColor'] = specular
return p.createVisualShape(**visual_args)
+
def create_shape(geometry, pose=unit_pose(), collision=True, **kwargs):
- collision_id = create_collision_shape(geometry, pose=pose) if collision else NULL_ID
+ collision_id = create_collision_shape(
+ geometry, pose=pose) if collision else NULL_ID
visual_id = create_visual_shape(geometry, pose=pose, **kwargs)
return collision_id, visual_id
+
def plural(word):
exceptions = {'radius': 'radii'}
if word in exceptions:
@@ -1657,6 +1950,7 @@ def plural(word):
return word
return word + 's'
+
def create_shape_array(geoms, poses, colors=None):
# https://github.com/bulletphysics/bullet3/blob/master/examples/pybullet/pybullet.c
# createCollisionShape: height
@@ -1675,8 +1969,9 @@ def create_shape_array(geoms, poses, colors=None):
for (point, quat) in poses:
collision_args['collisionFramePositions'].append(point)
collision_args['collisionFrameOrientations'].append(quat)
- collision_id = p.createCollisionShapeArray(physicsClientId=CLIENT, **collision_args)
- if (colors is None): # or not has_gui():
+ collision_id = p.createCollisionShapeArray(
+ physicsClientId=CLIENT, **collision_args)
+ if (colors is None): # or not has_gui():
return collision_id, NULL_ID
visual_args = mega_geom.copy()
@@ -1690,38 +1985,52 @@ def create_shape_array(geoms, poses, colors=None):
#####################################
+
def create_body(collision_id=-1, visual_id=-1, mass=STATIC_MASS):
return p.createMultiBody(baseMass=mass, baseCollisionShapeIndex=collision_id,
baseVisualShapeIndex=visual_id, physicsClientId=CLIENT)
+
def create_box(w, l, h, mass=STATIC_MASS, color=(1, 0, 0, 1)):
- collision_id, visual_id = create_shape(get_box_geometry(w, l, h), color=color)
+ collision_id, visual_id = create_shape(
+ get_box_geometry(w, l, h), color=color)
return create_body(collision_id, visual_id, mass=mass)
# basePosition | baseOrientation
# linkCollisionShapeIndices | linkVisualShapeIndices
+
def create_cylinder(radius, height, mass=STATIC_MASS, color=(0, 0, 1, 1)):
- collision_id, visual_id = create_shape(get_cylinder_geometry(radius, height), color=color)
+ collision_id, visual_id = create_shape(
+ get_cylinder_geometry(radius, height), color=color)
return create_body(collision_id, visual_id, mass=mass)
+
def create_capsule(radius, height, mass=STATIC_MASS, color=(0, 0, 1, 1)):
- collision_id, visual_id = create_shape(get_capsule_geometry(radius, height), color=color)
+ collision_id, visual_id = create_shape(
+ get_capsule_geometry(radius, height), color=color)
return create_body(collision_id, visual_id, mass=mass)
+
def create_sphere(radius, mass=STATIC_MASS, color=(0, 0, 1, 1)):
- collision_id, visual_id = create_shape(get_sphere_geometry(radius), color=color)
+ collision_id, visual_id = create_shape(
+ get_sphere_geometry(radius), color=color)
return create_body(collision_id, visual_id, mass=mass)
+
def create_plane(normal=[0, 0, 1], mass=STATIC_MASS, color=(0, 0, 0, 1)):
# color seems to be ignored in favor of a texture
- collision_id, visual_id = create_shape(get_plane_geometry(normal), color=color)
+ collision_id, visual_id = create_shape(
+ get_plane_geometry(normal), color=color)
return create_body(collision_id, visual_id, mass=mass)
+
def create_obj(path, scale=1., mass=STATIC_MASS, collision=True, color=(0.5, 0.5, 0.5, 1)):
- collision_id, visual_id = create_shape(get_mesh_geometry(path, scale=scale), collision=collision, color=color)
+ collision_id, visual_id = create_shape(get_mesh_geometry(
+ path, scale=scale), collision=collision, color=color)
body = create_body(collision_id, visual_id, mass=mass)
fixed_base = (mass == STATIC_MASS)
- INFO_FROM_BODY[CLIENT, body] = ModelInfo(None, path, fixed_base, scale) # TODO: store geometry info instead?
+ INFO_FROM_BODY[CLIENT, body] = ModelInfo(
+ None, path, fixed_base, scale) # TODO: store geometry info instead?
return body
@@ -1729,6 +2038,7 @@ Mesh = namedtuple('Mesh', ['vertices', 'faces'])
mesh_count = count()
TEMP_DIR = 'temp/'
+
def create_mesh(mesh, under=True, **kwargs):
# http://people.sc.fsu.edu/~jburkardt/data/obj/obj.html
# TODO: read OFF / WRL / OBJ files
@@ -1737,17 +2047,19 @@ def create_mesh(mesh, under=True, **kwargs):
path = os.path.join(TEMP_DIR, 'mesh{}.obj'.format(next(mesh_count)))
write(path, obj_file_from_mesh(mesh, under=under))
return create_obj(path, **kwargs)
- #safe_remove(path) # TODO: removing might delete mesh?
+ # safe_remove(path) # TODO: removing might delete mesh?
#####################################
+
VisualShapeData = namedtuple('VisualShapeData', ['objectUniqueId', 'linkIndex',
'visualGeometryType', 'dimensions', 'meshAssetFileName',
'localVisualFrame_position', 'localVisualFrame_orientation',
- 'rgbaColor']) # 'textureUniqueId'
+ 'rgbaColor']) # 'textureUniqueId'
UNKNOWN_FILE = 'unknown_file'
+
def visual_shape_from_data(data, client=None):
client = get_client(client)
if (data.visualGeometryType == p.GEOM_MESH) and (data.meshAssetFileName == UNKNOWN_FILE):
@@ -1760,25 +2072,30 @@ def visual_shape_from_data(data, client=None):
return p.createVisualShape(shapeType=data.visualGeometryType,
radius=get_data_radius(data),
halfExtents=np.array(get_data_extents(data))/2,
- length=get_data_height(data), # TODO: pybullet bug
+ # TODO: pybullet bug
+ length=get_data_height(data),
fileName=data.meshAssetFileName,
meshScale=get_data_scale(data),
planeNormal=get_data_normal(data),
rgbaColor=data.rgbaColor,
- #specularColor=,
+ # specularColor=,
visualFramePosition=point,
visualFrameOrientation=quat,
physicsClientId=client)
+
def get_visual_data(body, link=BASE_LINK):
- visual_data = [VisualShapeData(*tup) for tup in p.getVisualShapeData(body, physicsClientId=CLIENT)]
+ visual_data = [VisualShapeData(
+ *tup) for tup in p.getVisualShapeData(body, physicsClientId=CLIENT)]
return list(filter(lambda d: d.linkIndex == link, visual_data))
+
# object_unique_id and linkIndex seem to be noise
CollisionShapeData = namedtuple('CollisionShapeData', ['object_unique_id', 'linkIndex',
'geometry_type', 'dimensions', 'filename',
'local_frame_pos', 'local_frame_orn'])
+
def collision_shape_from_data(data, body, link, client=None):
client = get_client(client)
if (data.geometry_type == p.GEOM_MESH) and (data.filename == UNKNOWN_FILE):
@@ -1789,20 +2106,23 @@ def collision_shape_from_data(data, body, link, client=None):
return p.createCollisionShape(shapeType=data.geometry_type,
radius=get_data_radius(data),
# halfExtents=get_data_extents(data.geometry_type, data.dimensions),
- halfExtents=np.array(get_data_extents(data)) / 2,
+ halfExtents=np.array(
+ get_data_extents(data)) / 2,
height=get_data_height(data),
- fileName=data.filename.decode(encoding='UTF-8'),
+ fileName=data.filename.decode(
+ encoding='UTF-8'),
meshScale=get_data_scale(data),
planeNormal=get_data_normal(data),
flags=p.GEOM_FORCE_CONCAVE_TRIMESH,
collisionFramePosition=point,
collisionFrameOrientation=quat,
physicsClientId=client)
- #return p.createCollisionShapeArray()
+ # return p.createCollisionShapeArray()
+
def clone_visual_shape(body, link, client=None):
client = get_client(client)
- #if not has_gui(client):
+ # if not has_gui(client):
# return -1
visual_data = get_visual_data(body, link)
if not visual_data:
@@ -1810,6 +2130,7 @@ def clone_visual_shape(body, link, client=None):
assert (len(visual_data) == 1)
return visual_shape_from_data(visual_data[0], client)
+
def clone_collision_shape(body, link, client=None):
client = get_client(client)
collision_data = get_collision_data(body, link)
@@ -1819,6 +2140,7 @@ def clone_collision_shape(body, link, client=None):
# TODO: can do CollisionArray
return collision_shape_from_data(collision_data[0], body, link, client)
+
def clone_body(body, links=None, collision=True, visual=True, client=None):
# TODO: names are not retained
# TODO: error with createMultiBody link poses on PR2
@@ -1826,7 +2148,7 @@ def clone_body(body, links=None, collision=True, visual=True, client=None):
# localVisualFrame orientation: orientation of local visual frame relative to link/joint frame
# parentFramePos: joint position in parent frame
# parentFrameOrn: joint orientation in parent frame
- client = get_client(client) # client is the new client for the body
+ client = get_client(client) # client is the new client for the body
if links is None:
links = get_links(body)
#movable_joints = [joint for joint in links if is_movable(body, joint)]
@@ -1837,10 +2159,10 @@ def clone_body(body, links=None, collision=True, visual=True, client=None):
masses = []
collision_shapes = []
visual_shapes = []
- positions = [] # list of local link positions, with respect to parent
- orientations = [] # list of local link orientations, w.r.t. parent
- inertial_positions = [] # list of local inertial frame pos. in link frame
- inertial_orientations = [] # list of local inertial frame orn. in link frame
+ positions = [] # list of local link positions, with respect to parent
+ orientations = [] # list of local link orientations, w.r.t. parent
+ inertial_positions = [] # list of local inertial frame pos. in link frame
+ inertial_orientations = [] # list of local inertial frame orn. in link frame
parent_indices = []
joint_types = []
joint_axes = []
@@ -1849,14 +2171,17 @@ def clone_body(body, links=None, collision=True, visual=True, client=None):
joint_info = get_joint_info(body, link)
dynamics_info = get_dynamics_info(body, link)
masses.append(dynamics_info.mass)
- collision_shapes.append(clone_collision_shape(body, link, client) if collision else -1)
- visual_shapes.append(clone_visual_shape(body, link, client) if visual else -1)
+ collision_shapes.append(clone_collision_shape(
+ body, link, client) if collision else -1)
+ visual_shapes.append(clone_visual_shape(
+ body, link, client) if visual else -1)
point, quat = get_local_link_pose(body, link)
positions.append(point)
orientations.append(quat)
inertial_positions.append(dynamics_info.local_inertial_pos)
inertial_orientations.append(dynamics_info.local_inertial_orn)
- parent_indices.append(new_from_original[joint_info.parentIndex] + 1) # TODO: need the increment to work
+ # TODO: need the increment to work
+ parent_indices.append(new_from_original[joint_info.parentIndex] + 1)
joint_types.append(joint_info.jointType)
joint_axes.append(joint_info.jointAxis)
# https://github.com/bulletphysics/bullet3/blob/9c9ac6cba8118544808889664326fd6f06d9eeba/examples/pybullet/gym/pybullet_utils/urdfEditor.py#L169
@@ -1864,8 +2189,10 @@ def clone_body(body, links=None, collision=True, visual=True, client=None):
base_dynamics_info = get_dynamics_info(body, base_link)
base_point, base_quat = get_link_pose(body, base_link)
new_body = p.createMultiBody(baseMass=base_dynamics_info.mass,
- baseCollisionShapeIndex=clone_collision_shape(body, base_link, client) if collision else -1,
- baseVisualShapeIndex=clone_visual_shape(body, base_link, client) if visual else -1,
+ baseCollisionShapeIndex=clone_collision_shape(
+ body, base_link, client) if collision else -1,
+ baseVisualShapeIndex=clone_visual_shape(
+ body, base_link, client) if visual else -1,
basePosition=base_point,
baseOrientation=base_quat,
baseInertialFramePosition=base_dynamics_info.local_inertial_pos,
@@ -1881,53 +2208,63 @@ def clone_body(body, links=None, collision=True, visual=True, client=None):
linkJointTypes=joint_types,
linkJointAxis=joint_axes,
physicsClientId=client)
- #set_configuration(new_body, get_joint_positions(body, movable_joints)) # Need to use correct client
+ # set_configuration(new_body, get_joint_positions(body, movable_joints)) # Need to use correct client
for joint, value in zip(range(len(links)), get_joint_positions(body, links)):
# TODO: check if movable?
- p.resetJointState(new_body, joint, value, targetVelocity=0, physicsClientId=client)
+ p.resetJointState(new_body, joint, value,
+ targetVelocity=0, physicsClientId=client)
return new_body
+
def clone_world(client=None, exclude=[]):
visual = has_gui(client)
mapping = {}
for body in get_bodies():
if body not in exclude:
- new_body = clone_body(body, collision=True, visual=visual, client=client)
+ new_body = clone_body(body, collision=True,
+ visual=visual, client=client)
mapping[body] = new_body
return mapping
#####################################
+
def get_collision_data(body, link=BASE_LINK):
# TODO: try catch
return [CollisionShapeData(*tup) for tup in p.getCollisionShapeData(body, link, physicsClientId=CLIENT)]
+
def get_data_type(data):
return data.geometry_type if isinstance(data, CollisionShapeData) else data.visualGeometryType
+
def get_data_filename(data):
return (data.filename if isinstance(data, CollisionShapeData)
else data.meshAssetFileName).decode(encoding='UTF-8')
+
def get_data_pose(data):
if isinstance(data, CollisionShapeData):
return (data.local_frame_pos, data.local_frame_orn)
return (data.localVisualFrame_position, data.localVisualFrame_orientation)
+
def get_default_geometry():
return {
'halfExtents': DEFAULT_EXTENTS,
'radius': DEFAULT_RADIUS,
- 'length': DEFAULT_HEIGHT, # 'height'
+ 'length': DEFAULT_HEIGHT, # 'height'
'fileName': DEFAULT_MESH,
'meshScale': DEFAULT_SCALE,
'planeNormal': DEFAULT_NORMAL,
}
+
DEFAULT_MESH = ''
DEFAULT_EXTENTS = [1, 1, 1]
+
def get_data_extents(data):
"""
depends on geometry type:
@@ -1943,8 +2280,10 @@ def get_data_extents(data):
return dimensions
return DEFAULT_EXTENTS
+
DEFAULT_RADIUS = 0.5
+
def get_data_radius(data):
geometry_type = get_data_type(data)
dimensions = data.dimensions
@@ -1954,8 +2293,10 @@ def get_data_radius(data):
return dimensions[1]
return DEFAULT_RADIUS
+
DEFAULT_HEIGHT = 1
+
def get_data_height(data):
geometry_type = get_data_type(data)
dimensions = data.dimensions
@@ -1963,8 +2304,10 @@ def get_data_height(data):
return dimensions[0]
return DEFAULT_HEIGHT
+
DEFAULT_SCALE = [1, 1, 1]
+
def get_data_scale(data):
geometry_type = get_data_type(data)
dimensions = data.dimensions
@@ -1972,8 +2315,10 @@ def get_data_scale(data):
return dimensions
return DEFAULT_SCALE
+
DEFAULT_NORMAL = [0, 0, 1]
+
def get_data_normal(data):
geometry_type = get_data_type(data)
dimensions = data.dimensions
@@ -1981,6 +2326,7 @@ def get_data_normal(data):
return dimensions
return DEFAULT_NORMAL
+
def get_data_geometry(data):
geometry_type = get_data_type(data)
if geometry_type == p.GEOM_SPHERE:
@@ -1997,6 +2343,7 @@ def get_data_geometry(data):
raise ValueError(geometry_type)
return SHAPE_TYPES[geometry_type], parameters
+
def set_color(body, color, link=BASE_LINK, shape_index=-1):
"""
Experimental for internal use, recommended ignore shapeIndex or leave it -1.
@@ -2010,33 +2357,40 @@ def set_color(body, color, link=BASE_LINK, shape_index=-1):
"""
# specularColor
return p.changeVisualShape(body, link, shapeIndex=shape_index, rgbaColor=color,
- #textureUniqueId=None, specularColor=None,
+ # textureUniqueId=None, specularColor=None,
physicsClientId=CLIENT)
#####################################
# Bounding box
+
AABB = namedtuple('AABB', ['lower', 'upper'])
+
def aabb_from_points(points):
return AABB(np.min(points, axis=0), np.max(points, axis=0))
+
def aabb_union(aabbs):
return aabb_from_points(np.vstack([aabb for aabb in aabbs]))
+
def aabb_overlap(aabb1, aabb2):
lower1, upper1 = aabb1
lower2, upper2 = aabb2
return np.less_equal(lower1, upper2).all() and \
- np.less_equal(lower2, upper1).all()
+ np.less_equal(lower2, upper1).all()
+
def get_subtree_aabb(body, root_link=BASE_LINK):
return aabb_union(get_aabb(body, link) for link in get_link_subtree(body, root_link))
+
def get_aabbs(body):
return [get_aabb(body, link=link) for link in get_all_links(body)]
+
def get_aabb(body, link=None):
# Note that the query is conservative and may return additional objects that don't have actual AABB overlap.
# This happens because the acceleration structures have some heuristic that enlarges the AABBs a bit
@@ -2050,44 +2404,54 @@ def get_aabb(body, link=None):
aabb = p.getAABB(body, linkIndex=link, physicsClientId=CLIENT)
return aabb
+
get_lower_upper = get_aabb
+
def get_aabb_center(aabb):
lower, upper = aabb
return (np.array(lower) + np.array(upper)) / 2.
+
def get_aabb_extent(aabb):
lower, upper = aabb
return np.array(upper) - np.array(lower)
+
def get_center_extent(body, **kwargs):
aabb = get_aabb(body, **kwargs)
return get_aabb_center(aabb), get_aabb_extent(aabb)
+
def aabb2d_from_aabb(aabb):
(lower, upper) = aabb
return lower[:2], upper[:2]
+
def aabb_contains_aabb(contained, container):
lower1, upper1 = contained
lower2, upper2 = container
return np.less_equal(lower2, lower1).all() and \
- np.less_equal(upper1, upper2).all()
- #return np.all(lower2 <= lower1) and np.all(upper1 <= upper2)
+ np.less_equal(upper1, upper2).all()
+ # return np.all(lower2 <= lower1) and np.all(upper1 <= upper2)
+
def aabb_contains_point(point, container):
lower, upper = container
return np.less_equal(lower, point).all() and \
- np.less_equal(point, upper).all()
- #return np.all(lower <= point) and np.all(point <= upper)
+ np.less_equal(point, upper).all()
+ # return np.all(lower <= point) and np.all(point <= upper)
+
def get_bodies_in_region(aabb):
(lower, upper) = aabb
return p.getOverlappingObjects(lower, upper, physicsClientId=CLIENT)
+
def get_aabb_volume(aabb):
return np.prod(get_aabb_extent(aabb))
+
def get_aabb_area(aabb):
return np.prod(get_aabb_extent(aabb2d_from_aabb(aabb)))
@@ -2095,9 +2459,10 @@ def get_aabb_area(aabb):
# AABB approximation
+
def vertices_from_data(data):
geometry_type = get_data_type(data)
- #if geometry_type == p.GEOM_SPHERE:
+ # if geometry_type == p.GEOM_SPHERE:
# parameters = [get_data_radius(data)]
if geometry_type == p.GEOM_BOX:
extents = np.array(get_data_extents(data))
@@ -2121,25 +2486,28 @@ def vertices_from_data(data):
mesh = read_obj(filename, decompose=False)
vertices = [scale*np.array(vertex) for vertex in mesh.vertices]
# TODO: could compute AABB here for improved speed at the cost of being conservative
- #elif geometry_type == p.GEOM_PLANE:
+ # elif geometry_type == p.GEOM_PLANE:
# parameters = [get_data_extents(data)]
else:
raise NotImplementedError(geometry_type)
return apply_affine(get_data_pose(data), vertices)
+
def vertices_from_link(body, link):
# In local frame
vertices = []
# TODO: requires the viewer to be active
- #for data in get_visual_data(body, link):
+ # for data in get_visual_data(body, link):
# vertices.extend(vertices_from_data(data))
# Pybullet creates multiple collision elements (with unknown_file) when noncovex
for data in get_collision_data(body, link):
vertices.extend(vertices_from_data(data))
return vertices
+
OBJ_MESH_CACHE = {}
+
def vertices_from_rigid(body, link=BASE_LINK):
assert implies(link == BASE_LINK, get_num_links(body) == 0)
try:
@@ -2150,23 +2518,26 @@ def vertices_from_rigid(body, link=BASE_LINK):
_, ext = os.path.splitext(info.path)
if ext == '.obj':
if info.path not in OBJ_MESH_CACHE:
- OBJ_MESH_CACHE[info.path] = read_obj(info.path, decompose=False)
+ OBJ_MESH_CACHE[info.path] = read_obj(
+ info.path, decompose=False)
mesh = OBJ_MESH_CACHE[info.path]
vertices = mesh.vertices
else:
raise NotImplementedError(ext)
return vertices
+
def approximate_as_prism(body, body_pose=unit_pose(), **kwargs):
# TODO: make it just orientation
vertices = apply_affine(body_pose, vertices_from_rigid(body, **kwargs))
aabb = aabb_from_points(vertices)
return get_aabb_center(aabb), get_aabb_extent(aabb)
- #with PoseSaver(body):
+ # with PoseSaver(body):
# set_pose(body, body_pose)
# set_velocity(body, linear=np.zeros(3), angular=np.zeros(3))
# return get_center_extent(body, **kwargs)
+
def approximate_as_cylinder(body, **kwargs):
center, (width, length, height) = approximate_as_prism(body, **kwargs)
diameter = (width + length) / 2 # TODO: check that these are close
@@ -2176,33 +2547,40 @@ def approximate_as_cylinder(body, **kwargs):
# Collision
+
#MAX_DISTANCE = 1e-3
MAX_DISTANCE = 0.
+
def contact_collision():
step_simulation()
return len(p.getContactPoints(physicsClientId=CLIENT)) != 0
-ContactResult = namedtuple('ContactResult', ['contactFlag', 'bodyUniqueIdA', 'bodyUniqueIdB',
- 'linkIndexA', 'linkIndexB', 'positionOnA', 'positionOnB',
- 'contactNormalOnB', 'contactDistance', 'normalForce'])
-def pairwise_link_collision(body1, link1, body2, link2=BASE_LINK, max_distance=MAX_DISTANCE): # 10000
+ContactResult = namedtuple('ContactResult', ['contactFlag', 'bodyUniqueIdA', 'bodyUniqueIdB',
+ 'linkIndexA', 'linkIndexB', 'positionOnA', 'positionOnB',
+ 'contactNormalOnB', 'contactDistance', 'normalForce'])
+
+
+def pairwise_link_collision(body1, link1, body2, link2=BASE_LINK, max_distance=MAX_DISTANCE): # 10000
return len(p.getClosestPoints(bodyA=body1, bodyB=body2, distance=max_distance,
linkIndexA=link1, linkIndexB=link2,
- physicsClientId=CLIENT)) != 0 # getContactPoints
+ physicsClientId=CLIENT)) != 0 # getContactPoints
+
def flatten_links(body, links=None):
if links is None:
links = get_all_links(body)
return {(body, frozenset([link])) for link in links}
+
def expand_links(body):
body, links = body if isinstance(body, tuple) else (body, None)
if links is None:
links = get_all_links(body)
return body, links
+
def any_link_pair_collision(body1, links1, body2, links2=None, **kwargs):
# TODO: this likely isn't needed anymore
if links1 is None:
@@ -2213,13 +2591,22 @@ def any_link_pair_collision(body1, links1, body2, links2=None, **kwargs):
if (body1 == body2) and (link1 == link2):
continue
if pairwise_link_collision(body1, link1, body2, link2, **kwargs):
+ # print('body {} link {} body {} link {}'.format(body1, link1, body2, link2))
return True
return False
-def body_collision(body1, body2, max_distance=MAX_DISTANCE): # 10000
+
+def body_collision(body1, body2, max_distance=MAX_DISTANCE): # 10000
# TODO: confirm that this doesn't just check the base link
+
+ #for i in range(p.getNumJoints(body1)):
+ # for j in range(p.getNumJoints(body2)):
+ # #if len(p.getContactPoints(body1, body2, i, j)) > 0:
+ # #print('body {} {} collide with body {} {}'.format(body1, i, body2, j))
+
return len(p.getClosestPoints(bodyA=body1, bodyB=body2, distance=max_distance,
- physicsClientId=CLIENT)) != 0 # getContactPoints`
+ physicsClientId=CLIENT)) != 0 # getContactPoints`
+
def pairwise_collision(body1, body2, **kwargs):
if isinstance(body1, tuple) or isinstance(body2, tuple):
@@ -2228,15 +2615,17 @@ def pairwise_collision(body1, body2, **kwargs):
return any_link_pair_collision(body1, links1, body2, links2, **kwargs)
return body_collision(body1, body2, **kwargs)
-#def single_collision(body, max_distance=1e-3):
+# def single_collision(body, max_distance=1e-3):
# return len(p.getClosestPoints(body, max_distance=max_distance)) != 0
+
def single_collision(body1, **kwargs):
for body2 in get_bodies():
if (body1 != body2) and pairwise_collision(body1, body2, **kwargs):
return True
return False
+
def link_pairs_collision(body1, links1, body2, links2=None, **kwargs):
if links2 is None:
links2 = get_all_links(body2)
@@ -2249,55 +2638,63 @@ def link_pairs_collision(body1, links1, body2, links2=None, **kwargs):
#####################################
+
Ray = namedtuple('Ray', ['start', 'end'])
+
def get_ray(ray):
start, end = ray
return np.array(end) - np.array(start)
+
RayResult = namedtuple('RayResult', ['objectUniqueId', 'linkIndex',
'hit_fraction', 'hit_position', 'hit_normal'])
+
def ray_collision(ray):
# TODO: be careful to disable gravity and set static masses for everything
- step_simulation() # Needed for some reason
+ step_simulation() # Needed for some reason
start, end = ray
result, = p.rayTest(start, end, physicsClientId=CLIENT)
# TODO: assign hit_position to be the end?
return RayResult(*result)
+
def batch_ray_collision(rays, threads=1):
assert 1 <= threads <= p.MAX_RAY_INTERSECTION_BATCH_SIZE
if not rays:
return []
- step_simulation() # Needed for some reason
+ step_simulation() # Needed for some reason
ray_starts = [start for start, _ in rays]
ray_ends = [end for _, end in rays]
return [RayResult(*tup) for tup in p.rayTestBatch(
ray_starts, ray_ends,
numThreads=threads,
- #parentObjectUniqueId=
- #parentLinkIndex=
+ # parentObjectUniqueId=
+ # parentLinkIndex=
physicsClientId=CLIENT)]
#####################################
# Joint motion planning
+
def uniform_generator(d):
while True:
yield np.random.uniform(size=d)
+
def halton_generator(d):
import ghalton
seed = random.randint(0, 1000)
#sequencer = ghalton.Halton(d)
sequencer = ghalton.GeneralizedHalton(d, seed)
- #sequencer.reset()
+ # sequencer.reset()
while True:
[weights] = sequencer.get(1)
yield np.array(weights)
+
def unit_generator(d, use_halton=False):
if use_halton:
try:
@@ -2307,24 +2704,30 @@ def unit_generator(d, use_halton=False):
use_halton = False
return halton_generator(d) if use_halton else uniform_generator(d)
+
def interval_generator(lower, upper, **kwargs):
assert len(lower) == len(upper)
- assert np.less(lower, upper).all() # TODO: equality
+ assert np.less(lower, upper).all() # TODO: equality
extents = np.array(upper) - np.array(lower)
for scale in unit_generator(len(lower), **kwargs):
point = np.array(lower) + scale*extents
yield point
+
def get_sample_fn(body, joints, custom_limits={}, **kwargs):
- lower_limits, upper_limits = get_custom_limits(body, joints, custom_limits, circular_limits=CIRCULAR_LIMITS)
+ lower_limits, upper_limits = get_custom_limits(
+ body, joints, custom_limits, circular_limits=CIRCULAR_LIMITS)
generator = interval_generator(lower_limits, upper_limits, **kwargs)
+
def fn():
return tuple(next(generator))
return fn
+
def get_halton_sample_fn(body, joints, **kwargs):
return get_sample_fn(body, joints, use_halton=True, **kwargs)
+
def get_difference_fn(body, joints):
circular_joints = [is_circular(body, joint) for joint in joints]
@@ -2333,29 +2736,35 @@ def get_difference_fn(body, joints):
for circular, value2, value1 in zip(circular_joints, q2, q1))
return fn
-def get_distance_fn(body, joints, weights=None): #, norm=2):
+
+def get_distance_fn(body, joints, weights=None): # , norm=2):
# TODO: use the energy resulting from the mass matrix here?
if weights is None:
- weights = 1*np.ones(len(joints)) # TODO: use velocities here
+ weights = 1*np.ones(len(joints)) # TODO: use velocities here
difference_fn = get_difference_fn(body, joints)
+
def fn(q1, q2):
diff = np.array(difference_fn(q2, q1))
return np.sqrt(np.dot(weights, diff * diff))
- #return np.linalg.norm(np.multiply(weights * diff), ord=norm)
+ # return np.linalg.norm(np.multiply(weights * diff), ord=norm)
return fn
+
def get_refine_fn(body, joints, num_steps=0):
difference_fn = get_difference_fn(body, joints)
num_steps = num_steps + 1
+
def fn(q1, q2):
q = q1
for i in range(num_steps):
- positions = (1. / (num_steps - i)) * np.array(difference_fn(q2, q)) + q
+ positions = (1. / (num_steps - i)) * \
+ np.array(difference_fn(q2, q)) + q
q = tuple(positions)
#q = tuple(wrap_positions(body, joints, positions))
yield q
return fn
+
def refine_path(body, joints, waypoints, num_steps):
refine_fn = get_refine_fn(body, joints, num_steps)
refined_path = []
@@ -2363,20 +2772,25 @@ def refine_path(body, joints, waypoints, num_steps):
refined_path += list(refine_fn(v1, v2))
return refined_path
+
DEFAULT_RESOLUTION = 0.05
+
def get_extend_fn(body, joints, resolutions=None, norm=2):
# norm = 1, 2, INF
if resolutions is None:
resolutions = DEFAULT_RESOLUTION*np.ones(len(joints))
difference_fn = get_difference_fn(body, joints)
+
def fn(q1, q2):
#steps = int(np.max(np.abs(np.divide(difference_fn(q2, q1), resolutions))))
- steps = int(np.linalg.norm(np.divide(difference_fn(q2, q1), resolutions), ord=norm))
+ steps = int(np.linalg.norm(
+ np.divide(difference_fn(q2, q1), resolutions), ord=norm))
refine_fn = get_refine_fn(body, joints, num_steps=steps)
return refine_fn(q1, q2)
return fn
+
def remove_redundant(path, tolerance=1e-3):
assert path
new_path = [path[0]]
@@ -2386,11 +2800,13 @@ def remove_redundant(path, tolerance=1e-3):
new_path.append(conf)
return new_path
+
def waypoints_from_path(path, tolerance=1e-3):
path = remove_redundant(path, tolerance=tolerance)
if len(path) < 2:
return path
- difference_fn = lambda q2, q1: np.array(q2) - np.array(q1)
+
+ def difference_fn(q2, q1): return np.array(q2) - np.array(q1)
#difference_fn = get_difference_fn(body, joints)
waypoints = [path[0]]
@@ -2406,6 +2822,7 @@ def waypoints_from_path(path, tolerance=1e-3):
waypoints.append(last_conf)
return waypoints
+
def adjust_path(robot, joints, path):
start_positions = get_joint_positions(robot, joints)
difference_fn = get_difference_fn(robot, joints)
@@ -2415,6 +2832,7 @@ def adjust_path(robot, joints, path):
adjusted_path.append(adjusted_path[-1] + difference)
return adjusted_path
+
def get_moving_links(body, joints):
moving_links = set()
for joint in joints:
@@ -2423,6 +2841,7 @@ def get_moving_links(body, joints):
moving_links.update(get_link_subtree(body, link))
return list(moving_links)
+
def get_moving_pairs(body, moving_joints):
"""
Check all fixed and moving pairs
@@ -2445,23 +2864,26 @@ def get_self_link_pairs(body, joints, disabled_collisions=set(), only_moving=Tru
check_link_pairs.extend(get_moving_pairs(body, joints))
else:
check_link_pairs.extend(combinations(moving_links, 2))
- check_link_pairs = list(filter(lambda pair: not are_links_adjacent(body, *pair), check_link_pairs))
+ check_link_pairs = list(
+ filter(lambda pair: not are_links_adjacent(body, *pair), check_link_pairs))
check_link_pairs = list(filter(lambda pair: (pair not in disabled_collisions) and
(pair[::-1] not in disabled_collisions), check_link_pairs))
return check_link_pairs
def get_collision_fn(body, joints, obstacles, attachments, self_collisions, disabled_collisions,
- custom_limits={}, **kwargs):
+ custom_limits={}, allow_collision_links=[], **kwargs):
# TODO: convert most of these to keyword arguments
check_link_pairs = get_self_link_pairs(body, joints, disabled_collisions) \
if self_collisions else []
- moving_links = frozenset([item for item in get_moving_links(body, joints) if item != 19])
+ moving_links = frozenset(
+ [item for item in get_moving_links(body, joints) if not item in allow_collision_links])
# TODO: This is a fetch specific change
attached_bodies = [attachment.child for attachment in attachments]
moving_bodies = [(body, moving_links)] + attached_bodies
#moving_bodies = [body] + [attachment.child for attachment in attachments]
- check_body_pairs = list(product(moving_bodies, obstacles)) # + list(combinations(moving_bodies, 2))
+ # + list(combinations(moving_bodies, 2))
+ check_body_pairs = list(product(moving_bodies, obstacles))
lower_limits, upper_limits = get_custom_limits(body, joints, custom_limits)
# TODO: maybe prune the link adjacent to the robot
@@ -2471,23 +2893,25 @@ def get_collision_fn(body, joints, obstacles, attachments, self_collisions, disa
pass
# print(lower_limits, q, upper_limits)
# print('Joint limits violated')
- #return True
+ # return True
set_joint_positions(body, joints, q)
for attachment in attachments:
attachment.assign()
for link1, link2 in check_link_pairs:
# Self-collisions should not have the max_distance parameter
- if pairwise_link_collision(body, link1, body, link2): #, **kwargs):
+ # , **kwargs):
+ if pairwise_link_collision(body, link1, body, link2):
#print(get_body_name(body), get_link_name(body, link1), get_link_name(body, link2))
return True
for body1, body2 in check_body_pairs:
if pairwise_collision(body1, body2, **kwargs):
- #print(body1, body2)
+ # print('body collision', body1, body2)
#print(get_body_name(body1), get_body_name(body2))
return True
return False
return collision_fn
+
def plan_waypoints_joint_motion(body, joints, waypoints, start_conf=None, obstacles=[], attachments=[],
self_collisions=True, disabled_collisions=set(),
resolutions=None, custom_limits={}, max_distance=MAX_DISTANCE):
@@ -2512,35 +2936,50 @@ def plan_waypoints_joint_motion(body, joints, waypoints, start_conf=None, obstac
path.append(q)
return path
+
def plan_direct_joint_motion(body, joints, end_conf, **kwargs):
return plan_waypoints_joint_motion(body, joints, [end_conf], **kwargs)
+
def check_initial_end(start_conf, end_conf, collision_fn):
if collision_fn(start_conf):
- #print("Warning: initial configuration is in collision")
+ # print("Warning: initial configuration is in collision")
return False
if collision_fn(end_conf):
- #print("Warning: end configuration is in collision")
+ # print("Warning: end configuration is in collision")
return False
return True
+
def plan_joint_motion(body, joints, end_conf, obstacles=[], attachments=[],
self_collisions=True, disabled_collisions=set(),
- weights=None, resolutions=None, max_distance=MAX_DISTANCE, custom_limits={}, **kwargs):
+ weights=None, resolutions=None, max_distance=MAX_DISTANCE, custom_limits={}, algorithm='birrt', allow_collision_links=[], **kwargs):
assert len(joints) == len(end_conf)
sample_fn = get_sample_fn(body, joints, custom_limits=custom_limits)
distance_fn = get_distance_fn(body, joints, weights=weights)
extend_fn = get_extend_fn(body, joints, resolutions=resolutions)
collision_fn = get_collision_fn(body, joints, obstacles, attachments, self_collisions, disabled_collisions,
- custom_limits=custom_limits, max_distance=max_distance)
+ custom_limits=custom_limits, max_distance=max_distance, allow_collision_links=allow_collision_links)
start_conf = get_joint_positions(body, joints)
if not check_initial_end(start_conf, end_conf, collision_fn):
return None
- return birrt(start_conf, end_conf, distance_fn, sample_fn, extend_fn, collision_fn, **kwargs)
- #return plan_lazy_prm(start_conf, end_conf, sample_fn, extend_fn, collision_fn)
+ if algorithm == 'direct':
+ return direct_path(start_conf, end_conf, extend_fn, collision_fn)
+ elif algorithm == 'birrt':
+ return birrt(start_conf, end_conf, distance_fn,
+ sample_fn, extend_fn, collision_fn, **kwargs)
+ elif algorithm == 'rrt_star':
+ return rrt_star(start_conf, end_conf, distance_fn, sample_fn, extend_fn, collision_fn, max_iterations=5000, **kwargs)
+ elif algorithm == 'rrt':
+ return rrt(start_conf, end_conf, distance_fn, sample_fn, extend_fn, collision_fn, iterations=500, **kwargs)
+ elif algorithm == 'lazy_prm':
+ return lazy_prm_replan_loop(start_conf, end_conf, distance_fn, sample_fn, extend_fn, collision_fn, [500, 2000, 5000], **kwargs)
+ else:
+ return None
+
def plan_lazy_prm(start_conf, end_conf, sample_fn, extend_fn, collision_fn, **kwargs):
# TODO: cost metric based on total robot movement (encouraging greater distances possibly)
@@ -2551,9 +2990,9 @@ def plan_lazy_prm(start_conf, end_conf, sample_fn, extend_fn, collision_fn, **kw
return path
#lower, upper = get_custom_limits(body, joints, circular_limits=CIRCULAR_LIMITS)
- def draw_fn(q): # TODO: draw edges instead of vertices
+ def draw_fn(q): # TODO: draw edges instead of vertices
return np.append(q[:2], [1e-3])
- #return np.array([1, 1, 0.25])*(q + np.array([0., 0., np.pi]))
+ # return np.array([1, 1, 0.25])*(q + np.array([0., 0., np.pi]))
handles = []
for q1, q2 in zip(path, path[1:]):
handles.append(add_line(draw_fn(q1), draw_fn(q2), color=(0, 1, 0)))
@@ -2563,28 +3002,33 @@ def plan_lazy_prm(start_conf, end_conf, sample_fn, extend_fn, collision_fn, **kw
color = (1, 0, 0)
elif not colliding_vertices.get((i1, i2), True):
color = (0, 0, 0)
- handles.append(add_line(draw_fn(samples[i1]), draw_fn(samples[i2]), color=color))
+ handles.append(
+ add_line(draw_fn(samples[i1]), draw_fn(samples[i2]), color=color))
wait_for_user()
return path
#####################################
+
def get_closest_angle_fn(body, joints, linear_weight=1., angular_weight=1., reversible=True):
assert len(joints) == 3
- linear_extend_fn = get_distance_fn(body, joints[:2], weights=linear_weight*np.ones(2))
- angular_extend_fn = get_distance_fn(body, joints[2:], weights=[angular_weight])
+ linear_extend_fn = get_distance_fn(
+ body, joints[:2], weights=linear_weight*np.ones(2))
+ angular_extend_fn = get_distance_fn(
+ body, joints[2:], weights=[angular_weight])
def closest_fn(q1, q2):
angle_and_distance = []
for direction in [0, PI] if reversible else [PI]:
angle = get_angle(q1[:2], q2[:2]) + direction
distance = angular_extend_fn(q1[2:], [angle]) \
- + linear_extend_fn(q1[:2], q2[:2]) \
- + angular_extend_fn([angle], q2[2:])
+ + linear_extend_fn(q1[:2], q2[:2]) \
+ + angular_extend_fn([angle], q2[2:])
angle_and_distance.append((angle, distance))
return min(angle_and_distance, key=lambda pair: pair[1])
return closest_fn
+
def get_nonholonomic_distance_fn(body, joints, weights=None, **kwargs):
assert weights is None
closest_angle_fn = get_closest_angle_fn(body, joints, **kwargs)
@@ -2594,6 +3038,7 @@ def get_nonholonomic_distance_fn(body, joints, weights=None, **kwargs):
return distance
return distance_fn
+
def get_nonholonomic_extend_fn(body, joints, resolutions=None, **kwargs):
assert resolutions is None
assert len(joints) == 3
@@ -2613,6 +3058,7 @@ def get_nonholonomic_extend_fn(body, joints, resolutions=None, **kwargs):
return path
return extend_fn
+
def plan_nonholonomic_motion(body, joints, end_conf, obstacles=[], attachments=[],
self_collisions=True, disabled_collisions=set(),
weights=None, resolutions=None, reversible=True,
@@ -2620,8 +3066,10 @@ def plan_nonholonomic_motion(body, joints, end_conf, obstacles=[], attachments=[
assert len(joints) == len(end_conf)
sample_fn = get_sample_fn(body, joints, custom_limits=custom_limits)
- distance_fn = get_nonholonomic_distance_fn(body, joints, weights=weights, reversible=reversible)
- extend_fn = get_nonholonomic_extend_fn(body, joints, resolutions=resolutions, reversible=reversible)
+ distance_fn = get_nonholonomic_distance_fn(
+ body, joints, weights=weights, reversible=reversible)
+ extend_fn = get_nonholonomic_extend_fn(
+ body, joints, resolutions=resolutions, reversible=reversible)
collision_fn = get_collision_fn(body, joints, obstacles, attachments,
self_collisions, disabled_collisions,
custom_limits=custom_limits, max_distance=max_distance)
@@ -2635,6 +3083,7 @@ def plan_nonholonomic_motion(body, joints, end_conf, obstacles=[], attachments=[
# SE(2) pose motion planning
+
def get_base_difference_fn():
def fn(q2, q1):
dx, dy = np.array(q2[:2]) - np.array(q1[:2])
@@ -2642,13 +3091,16 @@ def get_base_difference_fn():
return (dx, dy, dtheta)
return fn
+
def get_base_distance_fn(weights=1*np.ones(3)):
difference_fn = get_base_difference_fn()
+
def fn(q1, q2):
difference = np.array(difference_fn(q2, q1))
return np.sqrt(np.dot(weights, difference * difference))
return fn
+
def plan_base_motion(body, end_conf, base_limits, obstacles=[], direct=False,
weights=1*np.ones(3), resolutions=0.05*np.ones(3),
max_distance=MAX_DISTANCE, **kwargs):
@@ -2657,30 +3109,35 @@ def plan_base_motion(body, end_conf, base_limits, obstacles=[], direct=False,
theta = np.random.uniform(*CIRCULAR_LIMITS)
return (x, y, theta)
-
difference_fn = get_base_difference_fn()
distance_fn = get_base_distance_fn(weights=weights)
def extend_fn(q1, q2):
target_theta = np.arctan2(q2[1]-q1[1], q2[0]-q1[0])
- n1 = int(np.abs(circular_difference(target_theta, q1[2]) / resolutions[2])) + 1
- n3 = int(np.abs(circular_difference(q2[2], target_theta) / resolutions[2])) + 1
+ n1 = int(np.abs(circular_difference(
+ target_theta, q1[2]) / resolutions[2])) + 1
+ n3 = int(np.abs(circular_difference(
+ q2[2], target_theta) / resolutions[2])) + 1
steps2 = np.abs(np.divide(difference_fn(q2, q1), resolutions))
n2 = int(np.max(steps2)) + 1
for i in range(n1):
- q = (i / (n1)) * np.array(difference_fn((q1[0], q1[1], target_theta), q1)) + np.array(q1)
+ q = (i / (n1)) * \
+ np.array(difference_fn(
+ (q1[0], q1[1], target_theta), q1)) + np.array(q1)
q = tuple(q)
yield q
for i in range(n2):
- q = (i / (n2)) * np.array(difference_fn((q2[0], q2[1], target_theta), (q1[0], q1[1], target_theta))) + np.array((q1[0], q1[1], target_theta))
+ q = (i / (n2)) * np.array(difference_fn((q2[0], q2[1], target_theta),
+ (q1[0], q1[1], target_theta))) + np.array((q1[0], q1[1], target_theta))
q = tuple(q)
yield q
for i in range(n3):
- q = (i / (n3)) * np.array(difference_fn(q2, (q2[0], q2[1], target_theta))) + np.array((q2[0], q2[1], target_theta))
+ q = (i / (n3)) * np.array(difference_fn(q2,
+ (q2[0], q2[1], target_theta))) + np.array((q2[0], q2[1], target_theta))
q = tuple(q)
yield q
@@ -2703,8 +3160,9 @@ def plan_base_motion(body, end_conf, base_limits, obstacles=[], direct=False,
def plan_base_motion_2d(body, end_conf, base_limits, map_2d, occupancy_range, grid_resolution, robot_footprint_radius_in_map,
- obstacles=[], direct=False, weights=1 * np.ones(3), resolutions=0.05 * np.ones(3),
- max_distance=MAX_DISTANCE, min_goal_dist = 0.02, **kwargs):
+ obstacles=[], weights=1 * np.ones(3), resolutions=0.05 * np.ones(3),
+ max_distance=MAX_DISTANCE, min_goal_dist = 0.02, algorithm='birrt', optimize_iter=0,
+ **kwargs):
def sample_fn():
x, y = np.random.uniform(*base_limits)
theta = np.random.uniform(*CIRCULAR_LIMITS)
@@ -2716,13 +3174,17 @@ def plan_base_motion_2d(body, end_conf, base_limits, map_2d, occupancy_range, gr
def extend_fn(q1, q2):
target_theta = np.arctan2(q2[1] - q1[1], q2[0] - q1[0])
- n1 = int(np.abs(circular_difference(target_theta, q1[2]) / resolutions[2])) + 1
- n3 = int(np.abs(circular_difference(q2[2], target_theta) / resolutions[2])) + 1
+ n1 = int(np.abs(circular_difference(
+ target_theta, q1[2]) / resolutions[2])) + 1
+ n3 = int(np.abs(circular_difference(
+ q2[2], target_theta) / resolutions[2])) + 1
steps2 = np.abs(np.divide(difference_fn(q2, q1), resolutions))
n2 = int(np.max(steps2)) + 1
for i in range(n1):
- q = (i / (n1)) * np.array(difference_fn((q1[0], q1[1], target_theta), q1)) + np.array(q1)
+ q = (i / (n1)) * \
+ np.array(difference_fn(
+ (q1[0], q1[1], target_theta), q1)) + np.array(q1)
q = tuple(q)
yield q
@@ -2741,7 +3203,7 @@ def plan_base_motion_2d(body, end_conf, base_limits, map_2d, occupancy_range, gr
start_conf = get_base_values(body)
- if np.abs(start_conf[0] - end_conf[0]) < min_goal_dist and np.abs(start_conf[1] - end_conf[1]) < min_goal_dist:
+ if np.abs(start_conf[0] - end_conf[0]) < min_goal_dist and np.abs(start_conf[1] - end_conf[1]) < min_goal_dist:
# do not do plans that is smaller than 30mm
return None
@@ -2754,24 +3216,27 @@ def plan_base_motion_2d(body, end_conf, base_limits, map_2d, occupancy_range, gr
x_dir = np.array([np.sin(theta), -np.cos(theta)])
y_dir = np.array([np.cos(theta), np.sin(theta)])
end_in_start_frame = [x_dir.dot(delta), y_dir.dot(delta)]
- pts = np.array(end_in_start_frame) / (occupancy_range / 2) * (grid_resolution / 2) + grid_resolution / 2
+ pts = np.array(end_in_start_frame) / (occupancy_range / 2) * \
+ (grid_resolution / 2) + grid_resolution / 2
pts = pts.astype(np.int32)
- #print(pts)
+ # print(pts)
if pts[0] < robot_footprint_radius_in_map or pts[1] < robot_footprint_radius_in_map \
- or pts[0] > grid_resolution - robot_footprint_radius_in_map - 1 or pts[
- 1] > grid_resolution - robot_footprint_radius_in_map - 1:
+ or pts[0] > grid_resolution - robot_footprint_radius_in_map - 1 or pts[
+ 1] > grid_resolution - robot_footprint_radius_in_map - 1:
return True
# plt.figure()
# plt.imshow(map_2d[pts[0]-1:pts[0]+1, pts[1]-1:pts[1]+1])
# plt.colorbar()
- mask = np.zeros((robot_footprint_radius_in_map * 2 + 1, robot_footprint_radius_in_map * 2 + 1))
+ mask = np.zeros((robot_footprint_radius_in_map * 2 + 1,
+ robot_footprint_radius_in_map * 2 + 1))
cv2.circle(mask, (robot_footprint_radius_in_map, robot_footprint_radius_in_map), robot_footprint_radius_in_map,
1, -1)
mask = mask.astype(np.bool)
- return np.any(map_2d[pts[0] - robot_footprint_radius_in_map:pts[0] + robot_footprint_radius_in_map + 1,
- pts[1] - robot_footprint_radius_in_map:pts[1] + robot_footprint_radius_in_map + 1][mask] == 0)
+ return not np.all(map_2d[pts[0] - robot_footprint_radius_in_map:pts[0] + robot_footprint_radius_in_map + 1,
+ pts[1] - robot_footprint_radius_in_map:pts[1] + robot_footprint_radius_in_map + 1][mask]
+ == OccupancyGridState.FREESPACE)
if collision_fn(start_conf):
# print("Warning: initial configuration is in collision")
@@ -2779,50 +3244,71 @@ def plan_base_motion_2d(body, end_conf, base_limits, map_2d, occupancy_range, gr
if collision_fn(end_conf):
# print("Warning: end configuration is in collision")
return None
- if direct:
- return direct_path(start_conf, end_conf, extend_fn, collision_fn)
- return birrt(start_conf, end_conf, distance_fn,
- sample_fn, extend_fn, collision_fn, **kwargs)
+
+ if algorithm == 'direct':
+ path = direct_path(start_conf, end_conf, extend_fn, collision_fn)
+ elif algorithm == 'birrt':
+ path = birrt(start_conf, end_conf, distance_fn,
+ sample_fn, extend_fn, collision_fn, **kwargs)
+ elif algorithm == 'rrt_star':
+ path = rrt_star(start_conf, end_conf, distance_fn, sample_fn, extend_fn, collision_fn, max_iterations=5000, **kwargs)
+ elif algorithm == 'rrt':
+ path = rrt(start_conf, end_conf, distance_fn, sample_fn, extend_fn, collision_fn, iterations=5000, **kwargs)
+ elif algorithm == 'lazy_prm':
+ path = lazy_prm_replan_loop(start_conf, end_conf, distance_fn, sample_fn, extend_fn, collision_fn, [250, 500, 1000, 2000, 4000, 4000], **kwargs)
+ else:
+ path = None
+ if optimize_iter > 0 and path is not None:
+ path = optimize_path(path, extend_fn, collision_fn, iterations=optimize_iter)
+ return path
#####################################
# Placements
+
def stable_z_on_aabb(body, aabb):
center, extent = get_center_extent(body)
_, upper = aabb
return (upper + extent/2 + (get_point(body) - center))[2]
+
def stable_z(body, surface, surface_link=None):
return stable_z_on_aabb(body, get_aabb(surface, link=surface_link))
+
def is_placed_on_aabb(body, bottom_aabb, above_epsilon=1e-2, below_epsilon=0.0):
assert (0 <= above_epsilon) and (0 <= below_epsilon)
- top_aabb = get_aabb(body) # TODO: approximate_as_prism
+ top_aabb = get_aabb(body) # TODO: approximate_as_prism
top_z_min = top_aabb[0][2]
bottom_z_max = bottom_aabb[1][2]
return ((bottom_z_max - below_epsilon) <= top_z_min <= (bottom_z_max + above_epsilon)) and \
(aabb_contains_aabb(aabb2d_from_aabb(top_aabb), aabb2d_from_aabb(bottom_aabb)))
+
def is_placement(body, surface, **kwargs):
return is_placed_on_aabb(body, get_aabb(surface), **kwargs)
+
def is_center_on_aabb(body, bottom_aabb, above_epsilon=1e-2, below_epsilon=0.0):
# TODO: compute AABB in origin
# TODO: use center of mass?
assert (0 <= above_epsilon) and (0 <= below_epsilon)
- center, extent = get_center_extent(body) # TODO: approximate_as_prism
+ center, extent = get_center_extent(body) # TODO: approximate_as_prism
base_center = center - np.array([0, 0, extent[2]])/2
top_z_min = base_center[2]
bottom_z_max = bottom_aabb[1][2]
return ((bottom_z_max - abs(below_epsilon)) <= top_z_min <= (bottom_z_max + abs(above_epsilon))) and \
- (aabb_contains_point(base_center[:2], aabb2d_from_aabb(bottom_aabb)))
+ (aabb_contains_point(
+ base_center[:2], aabb2d_from_aabb(bottom_aabb)))
+
def is_center_stable(body, surface, **kwargs):
return is_center_on_aabb(body, get_aabb(surface), **kwargs)
+
def sample_placement_on_aabb(top_body, bottom_aabb, top_pose=unit_pose(),
percent=1.0, max_attempts=50, epsilon=1e-3):
# TODO: transform into the coordinate system of the bottom
@@ -2844,6 +3330,7 @@ def sample_placement_on_aabb(top_body, bottom_aabb, top_pose=unit_pose(),
return pose
return None
+
def sample_placement(top_body, bottom_body, bottom_link=None, **kwargs):
bottom_aabb = get_aabb(bottom_body, link=bottom_link)
return sample_placement_on_aabb(top_body, bottom_aabb, **kwargs)
@@ -2852,6 +3339,7 @@ def sample_placement(top_body, bottom_body, bottom_link=None, **kwargs):
# Reachability
+
def sample_reachable_base(robot, point, reachable_range=(0.25, 1.0)):
radius = np.random.uniform(*reachable_range)
x, y = radius*unit_from_theta(np.random.uniform(-np.pi, np.pi)) + point[:2]
@@ -2860,6 +3348,7 @@ def sample_reachable_base(robot, point, reachable_range=(0.25, 1.0)):
#set_base_values(robot, base_values)
return base_values
+
def uniform_pose_generator(robot, gripper_pose, **kwargs):
point = point_from_pose(gripper_pose)
while True:
@@ -2868,12 +3357,13 @@ def uniform_pose_generator(robot, gripper_pose, **kwargs):
break
yield base_values
#set_base_values(robot, base_values)
- #yield get_pose(robot)
+ # yield get_pose(robot)
#####################################
# Constraints - applies forces when not satisfied
+
def get_constraints():
"""
getConstraintUniqueId will take a serial index in range 0..getNumConstraints, and reports the constraint unique id.
@@ -2882,6 +3372,7 @@ def get_constraints():
return [p.getConstraintUniqueId(i, physicsClientId=CLIENT)
for i in range(p.getNumConstraints(physicsClientId=CLIENT))]
+
def add_p2p_constraint(body, body_link, robot, robot_link, max_force=None):
if body_link == -1:
body_pose = get_pose(body)
@@ -2893,7 +3384,7 @@ def add_p2p_constraint(body, body_link, robot, robot_link, max_force=None):
point, quat = grasp_pose
# TODO: can I do this when I'm not adjacent?
# joint axis in local frame (ignored for JOINT_FIXED)
- #return p.createConstraint(robot, robot_link, body, body_link,
+ # return p.createConstraint(robot, robot_link, body, body_link,
# p.JOINT_FIXED, jointAxis=unit_point(),
# parentFramePosition=unit_point(),
# childFramePosition=point,
@@ -2907,21 +3398,26 @@ def add_p2p_constraint(body, body_link, robot, robot_link, max_force=None):
childFrameOrientation=unit_quat(),
physicsClientId=CLIENT)
if max_force is not None:
- p.changeConstraint(constraint, maxForce=max_force, physicsClientId=CLIENT)
+ p.changeConstraint(constraint, maxForce=max_force,
+ physicsClientId=CLIENT)
return constraint
+
def remove_constraint(constraint):
p.removeConstraint(constraint, physicsClientId=CLIENT)
+
ConstraintInfo = namedtuple('ConstraintInfo', ['parentBodyUniqueId', 'parentJointIndex',
'childBodyUniqueId', 'childLinkIndex', 'constraintType',
'jointAxis', 'jointPivotInParent', 'jointPivotInChild',
'jointFrameOrientationParent', 'jointFrameOrientationChild', 'maxAppliedForce'])
-def get_constraint_info(constraint): # getConstraintState
+
+def get_constraint_info(constraint): # getConstraintState
# TODO: four additional arguments
return ConstraintInfo(*p.getConstraintInfo(constraint, physicsClientId=CLIENT)[:11])
+
def get_fixed_constraints():
fixed_constraints = []
for constraint in get_constraints():
@@ -2930,6 +3426,7 @@ def get_fixed_constraints():
fixed_constraints.append(constraint)
return fixed_constraints
+
def add_fixed_constraint(body, robot, robot_link, max_force=None):
body_link = BASE_LINK
body_pose = get_pose(body)
@@ -2940,7 +3437,7 @@ def add_fixed_constraint(body, robot, robot_link, max_force=None):
point, quat = grasp_pose
# TODO: can I do this when I'm not adjacent?
# joint axis in local frame (ignored for JOINT_FIXED)
- #return p.createConstraint(robot, robot_link, body, body_link,
+ # return p.createConstraint(robot, robot_link, body, body_link,
# p.JOINT_FIXED, jointAxis=unit_point(),
# parentFramePosition=unit_point(),
# childFramePosition=point,
@@ -2954,9 +3451,11 @@ def add_fixed_constraint(body, robot, robot_link, max_force=None):
childFrameOrientation=unit_quat(),
physicsClientId=CLIENT)
if max_force is not None:
- p.changeConstraint(constraint, maxForce=max_force, physicsClientId=CLIENT)
+ p.changeConstraint(constraint, maxForce=max_force,
+ physicsClientId=CLIENT)
return constraint
+
def remove_fixed_constraint(body, robot, robot_link):
for constraint in get_fixed_constraints():
constraint_info = get_constraint_info(constraint)
@@ -2970,42 +3469,51 @@ def remove_fixed_constraint(body, robot, robot_link):
# Grasps
+
GraspInfo = namedtuple('GraspInfo', ['get_grasps', 'approach_pose'])
+
class Attachment(object):
def __init__(self, parent, parent_link, grasp_pose, child):
self.parent = parent
self.parent_link = parent_link
self.grasp_pose = grasp_pose
self.child = child
- #self.child_link = child_link # child_link=BASE_LINK
+ # self.child_link = child_link # child_link=BASE_LINK
+
@property
def bodies(self):
return flatten_links(self.child) | flatten_links(self.parent, get_link_subtree(
self.parent, self.parent_link))
+
def assign(self):
parent_link_pose = get_link_pose(self.parent, self.parent_link)
child_pose = body_from_end_effector(parent_link_pose, self.grasp_pose)
set_pose(self.child, child_pose)
return child_pose
+
def apply_mapping(self, mapping):
self.parent = mapping.get(self.parent, self.parent)
self.child = mapping.get(self.child, self.child)
+
def __repr__(self):
return '{}({},{})'.format(self.__class__.__name__, self.parent, self.child)
+
def create_attachment(parent, parent_link, child):
parent_link_pose = get_link_pose(parent, parent_link)
child_pose = get_pose(child)
grasp_pose = multiply(invert(parent_link_pose), child_pose)
return Attachment(parent, parent_link, grasp_pose, child)
+
def body_from_end_effector(end_effector_pose, grasp_pose):
"""
world_from_parent * parent_from_child = world_from_child
"""
return multiply(end_effector_pose, grasp_pose)
+
def end_effector_from_body(body_pose, grasp_pose):
"""
grasp_pose: the body's pose in gripper's frame
@@ -3018,23 +3526,28 @@ def end_effector_from_body(body_pose, grasp_pose):
"""
return multiply(body_pose, invert(grasp_pose))
+
def approach_from_grasp(approach_pose, end_effector_pose):
return multiply(approach_pose, end_effector_pose)
+
def get_grasp_pose(constraint):
"""
Grasps are parent_from_child
"""
constraint_info = get_constraint_info(constraint)
assert(constraint_info.constraintType == p.JOINT_FIXED)
- joint_from_parent = (constraint_info.jointPivotInParent, constraint_info.jointFrameOrientationParent)
- joint_from_child = (constraint_info.jointPivotInChild, constraint_info.jointFrameOrientationChild)
+ joint_from_parent = (constraint_info.jointPivotInParent,
+ constraint_info.jointFrameOrientationParent)
+ joint_from_child = (constraint_info.jointPivotInChild,
+ constraint_info.jointFrameOrientationChild)
return multiply(invert(joint_from_parent), joint_from_child)
#####################################
# Control
+
def control_joint(body, joint, value):
return p.setJointMotorControl2(bodyUniqueId=body,
jointIndex=joint,
@@ -3045,6 +3558,7 @@ def control_joint(body, joint, value):
force=get_max_force(body, joint),
physicsClientId=CLIENT)
+
def control_joints(body, joints, positions):
# TODO: the whole PR2 seems to jitter
#kp = 1.0
@@ -3055,10 +3569,11 @@ def control_joints(body, joints, positions):
return p.setJointMotorControlArray(body, joints, p.POSITION_CONTROL,
targetPositions=positions,
targetVelocities=[0.0] * len(joints),
- physicsClientId=CLIENT, forces=forces) #,
- #positionGains=[kp] * len(joints),
- #velocityGains=[kv] * len(joints),)
- #forces=forces)
+ physicsClientId=CLIENT, forces=forces) # ,
+ #positionGains=[kp] * len(joints),
+ # velocityGains=[kv] * len(joints),)
+ # forces=forces)
+
def joint_controller(body, joints, target, tolerance=1e-3):
assert(len(joints) == len(target))
@@ -3068,6 +3583,7 @@ def joint_controller(body, joints, target, tolerance=1e-3):
yield positions
positions = get_joint_positions(body, joints)
+
def joint_controller_hold(body, joints, target, **kwargs):
"""
Keeps other joints in place
@@ -3078,6 +3594,7 @@ def joint_controller_hold(body, joints, target, **kwargs):
conf[joint] = value
return joint_controller(body, movable_joints, conf, **kwargs)
+
def joint_controller_hold2(body, joints, positions, velocities=None,
tolerance=1e-2 * np.pi, position_gain=0.05, velocity_gain=0.01):
"""
@@ -3101,20 +3618,24 @@ def joint_controller_hold2(body, joints, positions, velocities=None,
# TODO: only enforce velocity constraints at end
p.setJointMotorControlArray(body, movable_joints, p.POSITION_CONTROL,
targetPositions=target_positions,
- #targetVelocities=target_velocities,
- positionGains=[position_gain] * len(movable_joints),
+ # targetVelocities=target_velocities,
+ positionGains=[
+ position_gain] * len(movable_joints),
#velocityGains=[velocity_gain] * len(movable_joints),
- #forces=forces,
+ # forces=forces,
physicsClientId=CLIENT)
yield current_conf
current_conf = get_joint_positions(body, movable_joints)
+
def trajectory_controller(body, joints, path, **kwargs):
for target in path:
for positions in joint_controller(body, joints, target, **kwargs):
yield positions
-def simulate_controller(controller, max_time=np.inf): # Allow option to sleep rather than yield?
+
+# Allow option to sleep rather than yield?
+def simulate_controller(controller, max_time=np.inf):
sim_dt = get_time_step()
sim_time = 0.0
for _ in controller:
@@ -3124,16 +3645,18 @@ def simulate_controller(controller, max_time=np.inf): # Allow option to sleep ra
sim_time += sim_dt
yield sim_time
+
def velocity_control_joints(body, joints, velocities):
#kv = 0.3
return p.setJointMotorControlArray(body, joints, p.VELOCITY_CONTROL,
targetVelocities=velocities,
- physicsClientId=CLIENT) #,
- #velocityGains=[kv] * len(joints),)
- #forces=forces)
+ physicsClientId=CLIENT) # ,
+ # velocityGains=[kv] * len(joints),)
+ # forces=forces)
#####################################
+
def compute_jacobian(robot, link, positions=None):
joints = get_movable_joints(robot)
if positions is None:
@@ -3144,7 +3667,7 @@ def compute_jacobian(robot, link, positions=None):
translate, rotate = p.calculateJacobian(robot, link, unit_point(), positions,
velocities, accelerations, physicsClientId=CLIENT)
#movable_from_joints(robot, joints)
- return list(zip(*translate)), list(zip(*rotate)) # len(joints) x 3
+ return list(zip(*translate)), list(zip(*rotate)) # len(joints) x 3
def compute_joint_weights(robot, num=100):
@@ -3162,14 +3685,16 @@ def compute_joint_weights(robot, num=100):
conf = sample_fn()
for mass, link in zip(masses, links):
translate, rotate = compute_jacobian(robot, link, conf)
- weighted_jacobian += np.array([mass * np.linalg.norm(vec) for vec in translate]) / total_mass
+ weighted_jacobian += np.array([mass * np.linalg.norm(vec)
+ for vec in translate]) / total_mass
weighted_jacobian /= num
- print(list(weighted_jacobian))
- print(time.time() - start_time)
+ # print(list(weighted_jacobian))
+ # print(time.time() - start_time)
return weighted_jacobian
#####################################
+
def inverse_kinematics_helper(robot, link, target_pose, null_space=None):
(target_point, target_quat) = target_pose
assert target_point is not None
@@ -3187,11 +3712,13 @@ def inverse_kinematics_helper(robot, link, target_pose, null_space=None):
# solver=ikSolver, maxNumIterations=-1, residualThreshold=-1,
physicsClientId=CLIENT)
else:
- kinematic_conf = p.calculateInverseKinematics(robot, link, target_point, target_quat, physicsClientId=CLIENT)
+ kinematic_conf = p.calculateInverseKinematics(
+ robot, link, target_point, target_quat, physicsClientId=CLIENT)
if (kinematic_conf is None) or any(map(math.isnan, kinematic_conf)):
return None
return kinematic_conf
+
def is_pose_close(pose, target_pose, pos_tolerance=1e-3, ori_tolerance=1e-3*np.pi):
(point, quat) = pose
(target_point, target_quat) = target_pose
@@ -3202,6 +3729,7 @@ def is_pose_close(pose, target_pose, pos_tolerance=1e-3, ori_tolerance=1e-3*np.p
return False
return True
+
def inverse_kinematics(robot, link, target_pose, max_iterations=200, custom_limits={}, **kwargs):
movable_joints = get_movable_joints(robot)
for iterations in range(max_iterations):
@@ -3215,13 +3743,15 @@ def inverse_kinematics(robot, link, target_pose, max_iterations=200, custom_limi
break
else:
return None
- lower_limits, upper_limits = get_custom_limits(robot, movable_joints, custom_limits)
+ lower_limits, upper_limits = get_custom_limits(
+ robot, movable_joints, custom_limits)
if not all_between(lower_limits, kinematic_conf, upper_limits):
return None
return kinematic_conf
#####################################
+
def get_position_waypoints(start_point, direction, quat, step_size=0.01):
distance = get_length(direction)
unit_direction = get_unit_vector(direction)
@@ -3230,15 +3760,18 @@ def get_position_waypoints(start_point, direction, quat, step_size=0.01):
yield (point, quat)
yield (start_point + direction, quat)
+
def get_quaternion_waypoints(point, start_quat, end_quat, step_size=np.pi/16):
angle = quat_angle_between(start_quat, end_quat)
for t in np.arange(0, angle, step_size):
fraction = t/angle
- quat = p.getQuaternionSlerp(start_quat, end_quat, interpolationFraction=fraction)
+ quat = p.getQuaternionSlerp(
+ start_quat, end_quat, interpolationFraction=fraction)
#quat = quaternion_slerp(start_quat, end_quat, fraction=fraction)
yield (point, quat)
yield (point, end_quat)
+
def interpolate_poses(pose1, pose2, pos_step_size=0.01, ori_step_size=np.pi/16):
pos1, quat1 = pose1
pos2, quat2 = pose2
@@ -3247,7 +3780,8 @@ def interpolate_poses(pose1, pose2, pos_step_size=0.01, ori_step_size=np.pi/16):
for i in range(num_steps):
fraction = float(i) / num_steps
pos = (1-fraction)*np.array(pos1) + fraction*np.array(pos2)
- quat = p.getQuaternionSlerp(quat1, quat2, interpolationFraction=fraction)
+ quat = p.getQuaternionSlerp(
+ quat1, quat2, interpolationFraction=fraction)
#quat = quaternion_slerp(quat1, quat2, fraction=fraction)
yield (pos, quat)
yield pose2
@@ -3267,8 +3801,10 @@ def interpolate_poses(pose1, pose2, pos_step_size=0.01, ori_step_size=np.pi/16):
#####################################
+
NullSpace = namedtuple('Nullspace', ['lower', 'upper', 'range', 'rest'])
+
def get_null_space(robot, joints, custom_limits={}):
rest_positions = get_joint_positions(robot, joints)
lower, upper = get_custom_limits(robot, joints, custom_limits)
@@ -3277,6 +3813,7 @@ def get_null_space(robot, joints, custom_limits={}):
joint_ranges = 10*np.ones(len(joints))
return NullSpace(list(lower), list(upper), list(joint_ranges), list(rest_positions))
+
def plan_cartesian_motion(robot, first_joint, target_link, waypoint_poses,
max_iterations=200, custom_limits={}, **kwargs):
# TODO: fix stationary joints
@@ -3286,12 +3823,15 @@ def plan_cartesian_motion(robot, first_joint, target_link, waypoint_poses,
# https://github.com/bulletphysics/bullet3/blob/master/examples/pybullet/examples/inverse_kinematics_husky_kuka.py
# TODO: plan a path without needing to following intermediate waypoints
- lower_limits, upper_limits = get_custom_limits(robot, get_movable_joints(robot), custom_limits)
- selected_links = get_link_subtree(robot, first_joint) # TODO: child_link_from_joint?
+ lower_limits, upper_limits = get_custom_limits(
+ robot, get_movable_joints(robot), custom_limits)
+ selected_links = get_link_subtree(
+ robot, first_joint) # TODO: child_link_from_joint?
selected_movable_joints = prune_fixed_joints(robot, selected_links)
assert(target_link in selected_links)
selected_target_link = selected_links.index(target_link)
- sub_robot = clone_body(robot, links=selected_links, visual=False, collision=False) # TODO: joint limits
+ sub_robot = clone_body(robot, links=selected_links,
+ visual=False, collision=False) # TODO: joint limits
sub_movable_joints = get_movable_joints(sub_robot)
#null_space = get_null_space(robot, selected_movable_joints, custom_limits=custom_limits)
null_space = None
@@ -3299,20 +3839,23 @@ def plan_cartesian_motion(robot, first_joint, target_link, waypoint_poses,
solutions = []
for target_pose in waypoint_poses:
for iteration in range(max_iterations):
- sub_kinematic_conf = inverse_kinematics_helper(sub_robot, selected_target_link, target_pose, null_space=null_space)
+ sub_kinematic_conf = inverse_kinematics_helper(
+ sub_robot, selected_target_link, target_pose, null_space=null_space)
if sub_kinematic_conf is None:
remove_body(sub_robot)
return None
- set_joint_positions(sub_robot, sub_movable_joints, sub_kinematic_conf)
+ set_joint_positions(
+ sub_robot, sub_movable_joints, sub_kinematic_conf)
if is_pose_close(get_link_pose(sub_robot, selected_target_link), target_pose, **kwargs):
- set_joint_positions(robot, selected_movable_joints, sub_kinematic_conf)
+ set_joint_positions(
+ robot, selected_movable_joints, sub_kinematic_conf)
kinematic_conf = get_configuration(robot)
if not all_between(lower_limits, kinematic_conf, upper_limits):
#movable_joints = get_movable_joints(robot)
- #print([(get_joint_name(robot, j), l, v, u) for j, l, v, u in
+ # print([(get_joint_name(robot, j), l, v, u) for j, l, v, u in
# zip(movable_joints, lower_limits, kinematic_conf, upper_limits) if not (l <= v <= u)])
#print("Limits violated")
- #wait_for_user()
+ # wait_for_user()
remove_body(sub_robot)
return None
#print("IK iterations:", iteration)
@@ -3324,19 +3867,23 @@ def plan_cartesian_motion(robot, first_joint, target_link, waypoint_poses,
remove_body(sub_robot)
return solutions
+
def sub_inverse_kinematics(robot, first_joint, target_link, target_pose, **kwargs):
- solutions = plan_cartesian_motion(robot, first_joint, target_link, [target_pose], **kwargs)
+ solutions = plan_cartesian_motion(
+ robot, first_joint, target_link, [target_pose], **kwargs)
if solutions:
return solutions[0]
return None
#####################################
+
def get_lifetime(lifetime):
if lifetime is None:
return 0
return lifetime
+
def add_debug_parameter():
# TODO: make a slider that controls the step in the trajectory
# TODO: could store a list of savers
@@ -3344,28 +3891,35 @@ def add_debug_parameter():
#maxForce = p.readUserDebugParameter(maxForceSlider)
raise NotImplementedError()
+
def add_text(text, position=(0, 0, 0), color=(0, 0, 0), lifetime=None, parent=-1, parent_link=BASE_LINK):
- return p.addUserDebugText(str(text), textPosition=position, textColorRGB=color[:3], # textSize=1,
+ return p.addUserDebugText(str(text), textPosition=position, textColorRGB=color[:3], # textSize=1,
lifeTime=get_lifetime(lifetime), parentObjectUniqueId=parent, parentLinkIndex=parent_link,
physicsClientId=CLIENT)
+
def add_line(start, end, color=(0, 0, 0), width=1, lifetime=None, parent=-1, parent_link=BASE_LINK):
return p.addUserDebugLine(start, end, lineColorRGB=color[:3], lineWidth=width,
lifeTime=get_lifetime(lifetime), parentObjectUniqueId=parent, parentLinkIndex=parent_link,
physicsClientId=CLIENT)
+
def remove_debug(debug):
p.removeUserDebugItem(debug, physicsClientId=CLIENT)
+
remove_handle = remove_debug
+
def remove_handles(handles):
for handle in handles:
remove_debug(handle)
+
def remove_all_debug():
p.removeAllUserDebugItems(physicsClientId=CLIENT)
+
def add_body_name(body, name=None, **kwargs):
if name is None:
name = get_name(body)
@@ -3374,7 +3928,9 @@ def add_body_name(body, name=None, **kwargs):
lower, upper = get_aabb(body)
#position = (0, 0, upper[2])
position = upper
- return add_text(name, position=position, parent=body, **kwargs) # removeUserDebugItem
+ # removeUserDebugItem
+ return add_text(name, position=position, parent=body, **kwargs)
+
def add_segments(points, closed=False, **kwargs):
lines = []
@@ -3384,10 +3940,12 @@ def add_segments(points, closed=False, **kwargs):
lines.append(add_line(points[-1], points[0], **kwargs))
return lines
+
def draw_link_name(body, link=BASE_LINK):
return add_text(get_link_name(body, link), position=(0, 0.2, 0),
parent=body, parent_link=link)
+
def draw_pose(pose, length=0.1, **kwargs):
origin_world = tform_point(pose, np.zeros(3))
handles = []
@@ -3395,28 +3953,33 @@ def draw_pose(pose, length=0.1, **kwargs):
axis = np.zeros(3)
axis[k] = 1
axis_world = tform_point(pose, length*axis)
- handles.append(add_line(origin_world, axis_world, color=axis, **kwargs))
+ handles.append(
+ add_line(origin_world, axis_world, color=axis, **kwargs))
return handles
+
def draw_base_limits(limits, z=1e-2, **kwargs):
lower, upper = limits
vertices = [(lower[0], lower[1], z), (lower[0], upper[1], z),
(upper[0], upper[1], z), (upper[0], lower[1], z)]
return add_segments(vertices, closed=True, **kwargs)
+
def draw_circle(center, radius, n=24, **kwargs):
- vertices = []
- for i in range(n):
- theta = i*2*math.pi/n
- unit = np.append(unit_from_theta(theta), [0])
- vertices.append(center+radius*unit)
- return add_segments(vertices, closed=True, **kwargs)
+ vertices = []
+ for i in range(n):
+ theta = i*2*math.pi/n
+ unit = np.append(unit_from_theta(theta), [0])
+ vertices.append(center+radius*unit)
+ return add_segments(vertices, closed=True, **kwargs)
+
def get_aabb_vertices(aabb):
d = len(aabb[0])
return [tuple(aabb[i[k]][k] for k in range(d))
for i in product(range(len(aabb)), repeat=d)]
+
def draw_aabb(aabb, **kwargs):
d = len(aabb[0])
vertices = list(product(range(len(aabb)), repeat=d))
@@ -3428,6 +3991,7 @@ def draw_aabb(aabb, **kwargs):
lines.append(add_line(p1, p2, **kwargs))
return lines
+
def draw_point(point, size=0.01, **kwargs):
lines = []
for i in range(len(point)):
@@ -3439,12 +4003,14 @@ def draw_point(point, size=0.01, **kwargs):
return lines
#extent = size * np.ones(len(point)) / 2
#aabb = np.array(point) - extent, np.array(point) + extent
- #return draw_aabb(aabb, **kwargs)
+ # return draw_aabb(aabb, **kwargs)
+
def get_face_edges(face):
- #return list(combinations(face, 2))
+ # return list(combinations(face, 2))
return list(zip(face, face[1:] + face[:1]))
+
def draw_mesh(mesh, **kwargs):
verts, faces = mesh
lines = []
@@ -3453,6 +4019,7 @@ def draw_mesh(mesh, **kwargs):
lines.append(add_line(verts[i1], verts[i2], **kwargs))
return lines
+
def draw_ray(ray, ray_result=None, visible_color=GREEN, occluded_color=RED, **kwargs):
if ray_result is None:
return [add_line(ray.start, ray.end, color=visible_color, **kwargs)]
@@ -3469,12 +4036,14 @@ def draw_ray(ray, ray_result=None, visible_color=GREEN, occluded_color=RED, **kw
# Polygonal surfaces
+
def create_rectangular_surface(width, length):
# TODO: unify with rectangular_mesh
extents = np.array([width, length, 0]) / 2.
unit_corners = [(-1, -1), (+1, -1), (+1, +1), (-1, +1)]
return [np.append(c, 0) * extents for c in unit_corners]
+
def is_point_in_polygon(point, polygon):
sign = None
for i in range(len(polygon)):
@@ -3488,13 +4057,14 @@ def is_point_in_polygon(point, polygon):
return False
return True
-def distance_from_segment(x1, y1, x2, y2, x3, y3): # x3,y3 is the point
+
+def distance_from_segment(x1, y1, x2, y2, x3, y3): # x3,y3 is the point
# https://stackoverflow.com/questions/10983872/distance-from-a-point-to-a-polygon
# https://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment
px = x2 - x1
py = y2 - y1
norm = px*px + py*py
- u = ((x3 - x1) * px + (y3 - y1) * py) / float(norm)
+ u = ((x3 - x1) * px + (y3 - y1) * py) / float(norm)
if u > 1:
u = 1
elif u < 0:
@@ -3505,23 +4075,28 @@ def distance_from_segment(x1, y1, x2, y2, x3, y3): # x3,y3 is the point
dy = y - y3
return math.sqrt(dx*dx + dy*dy)
+
def tform_point(affine, point):
return point_from_pose(multiply(affine, Pose(point=point)))
+
def apply_affine(affine, points):
return [tform_point(affine, p) for p in points]
+
def is_mesh_on_surface(polygon, world_from_surface, mesh, world_from_mesh, epsilon=1e-2):
surface_from_mesh = multiply(invert(world_from_surface), world_from_mesh)
points_surface = apply_affine(surface_from_mesh, mesh.vertices)
min_z = np.min(points_surface[:, 2])
return (abs(min_z) < epsilon) and \
- all(is_point_in_polygon(p, polygon) for p in points_surface)
+ all(is_point_in_polygon(p, polygon) for p in points_surface)
+
def is_point_on_surface(polygon, world_from_surface, point_world):
[point_surface] = apply_affine(invert(world_from_surface), [point_world])
return is_point_in_polygon(point_surface, polygon[::-1])
+
def sample_polygon_tform(polygon, points):
min_z = np.min(points[:, 2])
aabb_min = np.min(polygon, axis=0)
@@ -3537,6 +4112,7 @@ def sample_polygon_tform(polygon, points):
# if all(is_point_in_polygon(p, polygon) for p in apply_affine(surface_from_origin, points)):
# yield surface_from_origin
+
def sample_surface_pose(polygon, world_from_surface, mesh):
for surface_from_origin in sample_polygon_tform(polygon, mesh.vertices):
world_from_mesh = multiply(world_from_surface, surface_from_origin)
@@ -3547,15 +4123,19 @@ def sample_surface_pose(polygon, world_from_surface, mesh):
# Sampling edges
+
def sample_categorical(categories):
from bisect import bisect
names = categories.keys()
- cutoffs = np.cumsum([categories[name] for name in names])/sum(categories.values())
+ cutoffs = np.cumsum([categories[name]
+ for name in names])/sum(categories.values())
return names[bisect(cutoffs, np.random.random())]
+
def sample_edge_point(polygon, radius):
edges = zip(polygon, polygon[-1:] + polygon[:-1])
- edge_weights = {i: max(get_length(v2 - v1) - 2 * radius, 0) for i, (v1, v2) in enumerate(edges)}
+ edge_weights = {i: max(get_length(v2 - v1) - 2 * radius, 0)
+ for i, (v1, v2) in enumerate(edges)}
# TODO: fail if no options
while True:
index = sample_categorical(edge_weights)
@@ -3563,6 +4143,7 @@ def sample_edge_point(polygon, radius):
t = np.random.uniform(radius, get_length(v2 - v1) - 2 * radius)
yield t * get_unit_vector(v2 - v1) + v1
+
def get_closest_edge_point(polygon, point):
# TODO: always pick perpendicular to the edge
edges = zip(polygon, polygon[-1:] + polygon[:-1])
@@ -3579,6 +4160,7 @@ def get_closest_edge_point(polygon, point):
best = closest
return best
+
def sample_edge_pose(polygon, world_from_surface, mesh):
radius = max(get_length(v[:2]) for v in mesh.vertices)
origin_from_base = Pose(Point(z=p.min(mesh.vertices[:, 2])))
@@ -3591,6 +4173,7 @@ def sample_edge_pose(polygon, world_from_surface, mesh):
# Convex Hulls
+
def convex_hull(points):
from scipy.spatial import ConvexHull
# TODO: cKDTree is faster, but KDTree can do all pairs closest
@@ -3600,6 +4183,7 @@ def convex_hull(points):
faces = np.vectorize(lambda i: new_indices[i])(hull.simplices)
return Mesh(vertices.tolist(), faces.tolist())
+
def convex_signed_area(vertices):
if len(vertices) < 3:
return 0.
@@ -3607,15 +4191,18 @@ def convex_signed_area(vertices):
segments = safe_zip(vertices, vertices[1:] + vertices[:1])
return sum(np.cross(v1, v2) for v1, v2 in segments) / 2.
+
def convex_area(vertices):
return abs(convex_signed_area(vertices))
+
def convex_centroid(vertices):
# TODO: also applies to non-overlapping polygons
vertices = [np.array(v[:2]) for v in vertices]
segments = list(safe_zip(vertices, vertices[1:] + vertices[:1]))
return sum((v1 + v2)*np.cross(v1, v2) for v1, v2 in segments) \
- / (6.*convex_signed_area(vertices))
+ / (6.*convex_signed_area(vertices))
+
def mesh_from_points(points):
vertices, indices = convex_hull(points)
@@ -3630,6 +4217,7 @@ def mesh_from_points(points):
new_indices.append(tuple(triplet))
return Mesh(vertices.tolist(), new_indices)
+
def rectangular_mesh(width, length):
# TODO: 2.5d polygon
extents = np.array([width, length, 0])/2.
@@ -3638,9 +4226,11 @@ def rectangular_mesh(width, length):
faces = [(0, 1, 2), (2, 3, 0)]
return Mesh(vertices, faces)
+
def tform_mesh(affine, mesh):
return Mesh(apply_affine(affine, mesh.vertices), mesh.faces)
+
def grow_polygon(vertices, radius, n=8):
vertices2d = [vertex[:2] for vertex in vertices]
if not vertices2d:
@@ -3657,6 +4247,7 @@ def grow_polygon(vertices, radius, n=8):
# Mesh & Pointcloud Files
+
def obj_file_from_mesh(mesh, under=True):
"""
Creates a *.obj mesh string
@@ -3664,18 +4255,19 @@ def obj_file_from_mesh(mesh, under=True):
:return: *.obj mesh string
"""
vertices, faces = mesh
- s = 'g Mesh\n' # TODO: string writer
+ s = 'g Mesh\n' # TODO: string writer
for v in vertices:
assert(len(v) == 3)
s += '\nv {}'.format(' '.join(map(str, v)))
for f in faces:
- #assert(len(f) == 3) # Not necessarily true
- f = [i+1 for i in f] # Assumes mesh is indexed from zero
+ # assert(len(f) == 3) # Not necessarily true
+ f = [i+1 for i in f] # Assumes mesh is indexed from zero
s += '\nf {}'.format(' '.join(map(str, f)))
if under:
s += '\nf {}'.format(' '.join(map(str, reversed(f))))
return s
+
def get_connected_components(vertices, edges):
undirected_edges = defaultdict(set)
for v1, v2 in edges:
@@ -3695,10 +4287,11 @@ def get_connected_components(vertices, edges):
processed.add(v2)
cluster.add(v2)
queue.append(v2)
- if cluster: # preserves order
+ if cluster: # preserves order
clusters.append(frozenset(cluster))
return clusters
+
def read_obj(path, decompose=True):
mesh = Mesh([], [])
meshes = {}
@@ -3723,7 +4316,7 @@ def read_obj(path, decompose=True):
mesh.faces.append(face)
if not decompose:
return Mesh(vertices, faces)
- #if not meshes:
+ # if not meshes:
# # TODO: ensure this still works if no objects
# meshes[None] = mesh
#new_meshes = {}
@@ -3732,9 +4325,10 @@ def read_obj(path, decompose=True):
indices = sorted({i for face in mesh.faces for i in face})
mesh.vertices[:] = [vertices[i] for i in indices]
new_index_from_old = {i2: i1 for i1, i2 in enumerate(indices)}
- mesh.faces[:] = [tuple(new_index_from_old[i1] for i1 in face) for face in mesh.faces]
+ mesh.faces[:] = [tuple(new_index_from_old[i1]
+ for i1 in face) for face in mesh.faces]
#edges = {edge for face in mesh.faces for edge in get_face_edges(face)}
- #for k, cluster in enumerate(get_connected_components(indices, edges)):
+ # for k, cluster in enumerate(get_connected_components(indices, edges)):
# new_name = '{}#{}'.format(name, k)
# new_indices = sorted(cluster)
# new_vertices = [vertices[i] for i in new_indices]
@@ -3767,7 +4361,8 @@ def read_mesh_off(path, scale=1.0):
with open(path) as f:
assert (f.readline().split()[0] == 'OFF'), 'Not OFF file'
nv, nf, ne = [int(x) for x in f.readline().split()]
- verts = [tuple(scale * float(v) for v in f.readline().split()) for _ in range(nv)]
+ verts = [tuple(scale * float(v) for v in f.readline().split())
+ for _ in range(nv)]
faces = [tuple(map(int, f.readline().split()[1:])) for _ in range(nf)]
return Mesh(verts, faces)
@@ -3788,12 +4383,45 @@ def read_pcd_file(path):
continue
return [tuple(map(float, f.readline().split())) for _ in range(num_points)]
+
+def is_collision_free(body_a, link_a_list,
+ body_b=None, link_b_list=None):
+ """
+ :param body_a: body id of body A
+ :param link_a_list: link ids of body A that that of interest
+ :param body_b: body id of body B (optional)
+ :param link_b_list: link ids of body B that are of interest (optional)
+ :return: whether the bodies and links of interest are collision-free
+ """
+ if body_b is None:
+ for link_a in link_a_list:
+ contact_pts = p.getContactPoints(
+ bodyA=body_a, linkIndexA=link_a)
+ if len(contact_pts) > 0:
+ return False
+ elif link_b_list is None:
+ for link_a in link_a_list:
+ contact_pts = p.getContactPoints(
+ bodyA=body_a, bodyB=body_b, linkIndexA=link_a)
+ if len(contact_pts) > 0:
+ return False
+ else:
+ for link_a in link_a_list:
+ for link_b in link_b_list:
+ contact_pts = p.getContactPoints(
+ bodyA=body_a, bodyB=body_b,
+ linkIndexA=link_a, linkIndexB=link_b)
+ if len(contact_pts) > 0:
+ return False
+ return True
+
# TODO: factor out things that don't depend on pybullet
#####################################
# https://github.com/kohterai/OBJ-Parser
+
"""
def readWrl(filename, name='wrlObj', scale=1.0, color='black'):
def readOneObj():
diff --git a/gibson2/global_config.yaml b/gibson2/global_config.yaml
index 2d604900c..b68a0b450 100644
--- a/gibson2/global_config.yaml
+++ b/gibson2/global_config.yaml
@@ -1,3 +1,5 @@
-assets_path: assets # put either absolute path or relative to current directory
-dataset_path: dataset
-ig_dataset_path: ig_dataset
+assets_path: data/assets # put either absolute path or relative to current directory
+g_dataset_path: data/g_dataset
+ig_dataset_path: data/ig_dataset
+threedfront_dataset_path: data/threedfront_dataset
+cubicasa_dataset_path: data/cubicasa_dataset
diff --git a/gibson2/learn/completion.py b/gibson2/learn/completion.py
index 5bdb42650..d4719240c 100644
--- a/gibson2/learn/completion.py
+++ b/gibson2/learn/completion.py
@@ -26,6 +26,10 @@ class AdaptiveNorm2d(nn.Module):
class CompletionNet(nn.Module):
+ """
+ The "Goggle" neural network from Gibson v1
+ """
+
def __init__(self, norm=AdaptiveNorm2d, nf=64, skip_first_bn=False):
super(CompletionNet, self).__init__()
@@ -51,19 +55,24 @@ class CompletionNet(nn.Module):
nn.Conv2d(nf * 4, nf * 4, kernel_size=3, stride=1, padding=1),
norm(nf * 4, momentum=alpha),
nn.LeakyReLU(0.1),
- nn.Conv2d(nf * 4, nf * 4, kernel_size=3, stride=1, dilation=2, padding=2),
+ nn.Conv2d(nf * 4, nf * 4, kernel_size=3,
+ stride=1, dilation=2, padding=2),
norm(nf * 4, momentum=alpha),
nn.LeakyReLU(0.1),
- nn.Conv2d(nf * 4, nf * 4, kernel_size=3, stride=1, dilation=4, padding=4),
+ nn.Conv2d(nf * 4, nf * 4, kernel_size=3,
+ stride=1, dilation=4, padding=4),
norm(nf * 4, momentum=alpha),
nn.LeakyReLU(0.1),
- nn.Conv2d(nf * 4, nf * 4, kernel_size=3, stride=1, dilation=8, padding=8),
+ nn.Conv2d(nf * 4, nf * 4, kernel_size=3,
+ stride=1, dilation=8, padding=8),
norm(nf * 4, momentum=alpha),
nn.LeakyReLU(0.1),
- nn.Conv2d(nf * 4, nf * 4, kernel_size=3, stride=1, dilation=16, padding=16),
+ nn.Conv2d(nf * 4, nf * 4, kernel_size=3,
+ stride=1, dilation=16, padding=16),
norm(nf * 4, momentum=alpha),
nn.LeakyReLU(0.1),
- nn.Conv2d(nf * 4, nf * 4, kernel_size=3, stride=1, dilation=32, padding=32),
+ nn.Conv2d(nf * 4, nf * 4, kernel_size=3,
+ stride=1, dilation=32, padding=32),
norm(nf * 4, momentum=alpha),
nn.LeakyReLU(0.1),
nn.Conv2d(nf * 4, nf * 4, kernel_size=3, stride=1, padding=1),
@@ -78,7 +87,8 @@ class CompletionNet(nn.Module):
nn.Conv2d(nf, nf, kernel_size=3, stride=1, padding=1),
norm(nf, momentum=alpha),
nn.LeakyReLU(0.1),
- nn.ConvTranspose2d(nf, nf // 4, kernel_size=4, stride=2, padding=1),
+ nn.ConvTranspose2d(nf, nf // 4, kernel_size=4,
+ stride=2, padding=1),
norm(nf // 4, momentum=alpha),
nn.LeakyReLU(0.1),
nn.Conv2d(nf // 4, nf // 4, kernel_size=3, stride=1, padding=1),
diff --git a/gibson2/learn/train_fillers.py b/gibson2/learn/train_fillers.py
index ddccf0f61..641496999 100644
--- a/gibson2/learn/train_fillers.py
+++ b/gibson2/learn/train_fillers.py
@@ -33,28 +33,38 @@ def main():
parser.add_argument('--imgsize', type=int, default=256, help='image size')
parser.add_argument('--nf', type=int, default=64, help='number of filters')
parser.add_argument('--batchsize', type=int, default=20, help='batchsize')
- parser.add_argument('--workers', type=int, default=9, help='number of workers')
- parser.add_argument('--nepoch', type=int, default=50, help='number of epochs')
- parser.add_argument('--lr', type=float, default=2e-5, help='learning rate, default=0.002')
- parser.add_argument('--beta1', type=float, default=0.5, help='beta1 for adam. default=0.5')
- parser.add_argument('--outf', type=str, default="filler_pano_pc_full", help='output folder')
+ parser.add_argument('--workers', type=int, default=9,
+ help='number of workers')
+ parser.add_argument('--nepoch', type=int, default=50,
+ help='number of epochs')
+ parser.add_argument('--lr', type=float, default=2e-5,
+ help='learning rate, default=0.002')
+ parser.add_argument('--beta1', type=float, default=0.5,
+ help='beta1 for adam. default=0.5')
+ parser.add_argument('--outf', type=str,
+ default="filler_pano_pc_full", help='output folder')
parser.add_argument('--model', type=str, default="", help='model path')
parser.add_argument('--cepoch', type=int, default=0, help='current epoch')
- parser.add_argument('--loss', type=str, default="perceptual", help='l1 only')
+ parser.add_argument('--loss', type=str,
+ default="perceptual", help='l1 only')
parser.add_argument('--init', type=str, default="iden", help='init method')
parser.add_argument('--l1', type=float, default=0, help='add l1 loss')
- parser.add_argument('--color_coeff', type=float, default=0, help='add color match loss')
+ parser.add_argument('--color_coeff', type=float,
+ default=0, help='add color match loss')
parser.add_argument('--unfiller', action='store_true', help='debug mode')
parser.add_argument('--joint', action='store_true', help='debug mode')
- parser.add_argument('--use_depth', action='store_true', default=False, help='debug mode')
+ parser.add_argument('--use_depth', action='store_true',
+ default=False, help='debug mode')
parser.add_argument('--zoom', type=int, default=1, help='debug mode')
- parser.add_argument('--patchsize', type=int, default=256, help='debug mode')
+ parser.add_argument('--patchsize', type=int,
+ default=256, help='debug mode')
mean = torch.from_numpy(np.array([0.57441127, 0.54226291,
0.50356019]).astype(np.float32)).clone()
opt = parser.parse_args()
print(opt)
- writer = SummaryWriter(opt.outf + '/runs/' + datetime.now().strftime('%B%d %H:%M:%S'))
+ writer = SummaryWriter(opt.outf + '/runs/' +
+ datetime.now().strftime('%B%d %H:%M:%S'))
try:
os.makedirs(opt.outf)
except OSError:
@@ -72,7 +82,8 @@ def main():
])
d = PairDataset(root=opt.dataroot, transform=tf, mist_transform=mist_tf)
- d_test = PairDataset(root=opt.dataroot, transform=tf, mist_transform=mist_tf, train=False)
+ d_test = PairDataset(root=opt.dataroot, transform=tf,
+ mist_transform=mist_tf, train=False)
cudnn.benchmark = True
@@ -115,7 +126,8 @@ def main():
comp2 = torch.nn.DataParallel(comp2).cuda()
if opt.model != '':
comp2.load_state_dict(torch.load(opt.model.replace('G', 'G2')))
- optimizerG2 = torch.optim.Adam(comp2.parameters(), lr=opt.lr, betas=(opt.beta1, 0.999))
+ optimizerG2 = torch.optim.Adam(
+ comp2.parameters(), lr=opt.lr, betas=(opt.beta1, 0.999))
l2 = nn.MSELoss()
# if opt.loss == 'train_init':
@@ -125,7 +137,8 @@ def main():
# optimizerG = torch.optim.Adam(params_sel, lr = opt.lr, betas = (opt.beta1, 0.999))
#
# else:
- optimizerG = torch.optim.Adam(comp.parameters(), lr=opt.lr, betas=(opt.beta1, 0.999))
+ optimizerG = torch.optim.Adam(
+ comp.parameters(), lr=opt.lr, betas=(opt.beta1, 0.999))
curriculum = (200000, 300000
) # step to start D training and G training, slightly different from the paper
@@ -142,8 +155,10 @@ def main():
for param in p.parameters():
param.requires_grad = False
- imgnet_mean = torch.from_numpy(np.array([0.485, 0.456, 0.406]).astype(np.float32)).clone()
- imgnet_std = torch.from_numpy(np.array([0.229, 0.224, 0.225]).astype(np.float32)).clone()
+ imgnet_mean = torch.from_numpy(
+ np.array([0.485, 0.456, 0.406]).astype(np.float32)).clone()
+ imgnet_std = torch.from_numpy(
+ np.array([0.229, 0.224, 0.225]).astype(np.float32)).clone()
imgnet_mean_img = Variable(
imgnet_mean.view(1, 3, 1, 1).repeat(opt.batchsize * 4, 1, patchsize, patchsize)).cuda()
@@ -171,7 +186,8 @@ def main():
img.data.copy_(source)
maskv.data.copy_(source_depth)
img_original.data.copy_(target)
- imgc, maskvc, img_originalc = crop(img, maskv, img_original, zoom, patchsize)
+ imgc, maskvc, img_originalc = crop(
+ img, maskv, img_original, zoom, patchsize)
# from IPython import embed; embed()
recon = comp(imgc, maskvc)
@@ -180,16 +196,19 @@ def main():
elif opt.loss == 'l1':
loss = l2(recon, img_originalc)
elif opt.loss == 'perceptual':
- loss = l2(p(recon), p(img_originalc).detach()) + opt.l1 * l2(recon, img_originalc)
+ loss = l2(p(recon), p(img_originalc).detach()) + \
+ opt.l1 * l2(recon, img_originalc)
elif opt.loss == 'color_stable':
loss = l2(
- p(recon.view(recon.size(0) * 3, 1, patchsize, patchsize).repeat(1, 3, 1, 1)),
+ p(recon.view(recon.size(0) * 3, 1,
+ patchsize, patchsize).repeat(1, 3, 1, 1)),
p(
img_originalc.view(img_originalc.size(0) * 3, 1, patchsize,
patchsize).repeat(1, 3, 1, 1)).detach())
elif opt.loss == 'color_correction':
recon_percept = p((recon - imgnet_mean_img) / imgnet_std_img)
- org_percept = p((img_originalc - imgnet_mean_img) / (imgnet_std_img)).detach()
+ org_percept = p(
+ (img_originalc - imgnet_mean_img) / (imgnet_std_img)).detach()
loss = l2(recon_percept, org_percept)
for scale in [32]:
img_originalc_patch = img_originalc.view(
@@ -230,13 +249,17 @@ def main():
recon2 = comp2(img_originalc, maskvc)
if not opt.joint:
- recon2_percept = p((recon2 - imgnet_mean_img) / imgnet_std_img)
- recon_percept = p((recon - imgnet_mean_img) / imgnet_std_img)
+ recon2_percept = p(
+ (recon2 - imgnet_mean_img) / imgnet_std_img)
+ recon_percept = p(
+ (recon - imgnet_mean_img) / imgnet_std_img)
loss2 = l2(recon2_percept, recon_percept.detach())
else:
- recon_percept = p((recon - imgnet_mean_img) / imgnet_std_img)
+ recon_percept = p(
+ (recon - imgnet_mean_img) / imgnet_std_img)
z = Variable(torch.zeros(recon_percept.size()).cuda())
- recon2_percept = p((recon2 - imgnet_mean_img) / imgnet_std_img)
+ recon2_percept = p(
+ (recon2 - imgnet_mean_img) / imgnet_std_img)
loss2 = l2(recon2_percept - recon_percept, z)
@@ -267,13 +290,17 @@ def main():
img_originalc_patch[:, j:j + 1].repeat(1, 3, 1, 1, 1)).mean(dim=-1))
recon2_patch_cov_cat = torch.cat(recon2_patch_cov, 1)
- img_originalc_patch_cov_cat = torch.cat(img_originalc_patch_cov, 1)
+ img_originalc_patch_cov_cat = torch.cat(
+ img_originalc_patch_cov, 1)
- z = Variable(torch.zeros(img_originalc_patch_mean.size()).cuda())
+ z = Variable(torch.zeros(
+ img_originalc_patch_mean.size()).cuda())
if opt.joint:
- color_loss = l2(recon2_patch_mean - img_originalc_patch_mean, z)
+ color_loss = l2(recon2_patch_mean -
+ img_originalc_patch_mean, z)
else:
- color_loss = l2(recon2_patch_mean, img_originalc_patch_mean)
+ color_loss = l2(recon2_patch_mean,
+ img_originalc_patch_mean)
loss2 += opt.color_coeff * color_loss
@@ -311,7 +338,8 @@ def main():
source_depth = test_data[1]
target = test_data[2]
- mask = (torch.sum(source[:, :3, :, :], 1) > 0).float().unsqueeze(1)
+ mask = (torch.sum(source[:, :3, :, :], 1)
+ > 0).float().unsqueeze(1)
source[:, :3, :, :] += (1 - mask.repeat(1, 3, 1, 1)) * mean.view(1, 3, 1, 1).repeat(
opt.batchsize, 1, 1024, 2048)
@@ -320,7 +348,8 @@ def main():
img.data.copy_(source)
maskv.data.copy_(source_depth)
img_original.data.copy_(target)
- imgc, maskvc, img_originalc = crop(img, maskv, img_original, zoom, patchsize)
+ imgc, maskvc, img_originalc = crop(
+ img, maskv, img_original, zoom, patchsize)
comp.eval()
recon = comp(imgc, maskvc)
comp.train()
@@ -333,11 +362,13 @@ def main():
visual = torch.cat(
[imgc.data[:, :3, :, :], recon.data, recon2.data, img_originalc.data], 3)
else:
- visual = torch.cat([imgc.data[:, :3, :, :], recon.data, img_originalc.data], 3)
+ visual = torch.cat(
+ [imgc.data[:, :3, :, :], recon.data, img_originalc.data], 3)
visual = vutils.make_grid(visual, normalize=True)
writer.add_image('image', visual, step)
- vutils.save_image(visual, '%s/compare%d_%d.png' % (opt.outf, epoch, i), nrow=1)
+ vutils.save_image(visual, '%s/compare%d_%d.png' %
+ (opt.outf, epoch, i), nrow=1)
if i % 10 == 0:
writer.add_scalar('MSEloss', loss.data[0], step)
@@ -345,7 +376,8 @@ def main():
writer.add_scalar('D_loss', errD_data, step)
if i % 2000 == 0:
- torch.save(comp.state_dict(), '%s/compG_epoch%d_%d.pth' % (opt.outf, epoch, i))
+ torch.save(comp.state_dict(), '%s/compG_epoch%d_%d.pth' %
+ (opt.outf, epoch, i))
if opt.unfiller:
torch.save(comp2.state_dict(),
diff --git a/gibson2/objects/articulated_object.py b/gibson2/objects/articulated_object.py
index eba6f910c..dfa5adcd8 100644
--- a/gibson2/objects/articulated_object.py
+++ b/gibson2/objects/articulated_object.py
@@ -12,14 +12,13 @@ import trimesh
from gibson2.utils.urdf_utils import save_urdfs_without_floating_joints, round_up
from gibson2.utils.utils import quatXYZWFromRotMat, rotate_vector_3d
-from gibson2.render.mesh_renderer.mesh_renderer_cpu import RandomizedMaterial
-
-from IPython import embed
+from gibson2.render.mesh_renderer.materials import RandomizedMaterial
class ArticulatedObject(Object):
"""
- Articulated objects are defined in URDF files. They are passive (no motors)
+ Articulated objects are defined in URDF files.
+ They are passive (no motors).
"""
def __init__(self, filename, scale=1):
@@ -28,6 +27,9 @@ class ArticulatedObject(Object):
self.scale = scale
def _load(self):
+ """
+ Load the object into pybullet
+ """
body_id = p.loadURDF(self.filename, globalScaling=self.scale,
flags=p.URDF_USE_MATERIAL_COLORS_FROM_MTL)
self.mass = p.getDynamicsInfo(body_id, -1)[0]
@@ -36,6 +38,11 @@ class ArticulatedObject(Object):
class RBOObject(ArticulatedObject):
+ """
+ RBO object from assets/models/rbo
+ Reference: https://tu-rbo.github.io/articulated-objects/
+ """
+
def __init__(self, name, scale=1):
filename = os.path.join(gibson2.assets_path, 'models', 'rbo', name, 'configuration',
'{}.urdf'.format(name))
@@ -44,8 +51,9 @@ class RBOObject(ArticulatedObject):
class URDFObject(Object):
"""
- URDFObjects are instantiated from a URDF file. They can be composed of one or more links and joints. They should
- be passive. We use this class to parse our modified link tag for URDFs that embed objects into scenes
+ URDFObjects are instantiated from a URDF file. They can be composed of one
+ or more links and joints. They should be passive. We use this class to
+ parse our modified link tag for URDFs that embed objects into scenes
"""
def __init__(self,
@@ -61,14 +69,17 @@ class URDFObject(Object):
in_rooms=None,
):
"""
-
- :param name:
- :param category:
- :param model:
-
- :param filename:
- :param bounding_box:
- :param scale:
+ :param name: object name, unique for each object instance, e.g. door_3
+ :param category: object category, e.g. door
+ :param model: object model in the object dataset
+ :param model_path: folder path of that object model
+ :param filename: urdf file path of that object model
+ :param bounding_box: bounding box of this object
+ :param scale: scaling factor of this object
+ :param avg_obj_dims: average object dimension of this object
+ :param joint_friction: joint friction for joints in this object
+ :param in_rooms: which room(s) this object is in. It can be in more
+ than one rooms if it sits at room boundary (e.g. doors)
"""
super(URDFObject, self).__init__()
@@ -77,9 +88,6 @@ class URDFObject(Object):
self.model = model
self.in_rooms = in_rooms
- # If we merge the fixed joints into single link to improve performance
- self.merge_fj = False
-
# Friction for all prismatic and revolute joints
if joint_friction is not None:
self.joint_friction = joint_friction
@@ -103,8 +111,8 @@ class URDFObject(Object):
self.is_fixed = []
# mapping between visual objects and possible textures
# multiple visual objects can share the same material
- # if some sub URDF does not have visual object or it is building,
- # it will have an empty dict
+ # if some sub URDF does not have visual object or this URDF is part of
+ # the building structure, it will have an empty dict
# [
# { # 1st sub URDF
# 'visual_1.obj': randomized_material_1
@@ -158,8 +166,8 @@ class URDFObject(Object):
bbox_size = bbox_max - bbox_min
base_link_offset = (bbox_min + bbox_max) / 2.0
else:
- assert category in ['building', 'walls', 'floors',
- 'ceilings'], 'missing object model size and base link offset data'
+ assert category in ['walls', 'floors', 'ceilings'], \
+ 'missing object model size and base link offset data'
bbox_size = None
base_link_offset = np.zeros(3)
@@ -190,6 +198,10 @@ class URDFObject(Object):
self.rename_urdf()
def rename_urdf(self):
+ """
+ Helper function that renames the file paths in the object urdf
+ from relative paths to absolute paths
+ """
# Change the links of the added object to adapt the to the given name
for link_emb in self.object_tree.iter('link'):
if link_emb.attrib['name'] == "base_link":
@@ -223,6 +235,9 @@ class URDFObject(Object):
"_" + parent_emb.attrib['link']
def scale_object(self):
+ """
+ Scale the object according to the given bounding box
+ """
# We need to scale 1) the meshes, 2) the position of meshes, 3) the position of joints, 4) the orientation
# axis of joints. The problem is that those quantities are given wrt. its parent link frame, and this can be
# rotated wrt. the frame the scale was given in Solution: parse the kin tree joint by joint, extract the
@@ -301,7 +316,7 @@ class URDFObject(Object):
all_links = self.object_tree.findall('link')
# compute dynamics properties
- if self.category not in ["building", "walls", "floors", "ceilings"]:
+ if self.category not in ["walls", "floors", "ceilings"]:
all_links_trimesh = []
total_volume = 0.0
for link in all_links:
@@ -348,7 +363,7 @@ class URDFObject(Object):
# Now iterate over all links and scale the meshes and positions
for i, link in enumerate(all_links):
- if self.category not in ["building", "walls", "floors", "ceilings"]:
+ if self.category not in ["walls", "floors", "ceilings"]:
link_trimesh = all_links_trimesh[i]
# assign dynamics properties
inertials = link.findall('inertial')
@@ -438,12 +453,14 @@ class URDFObject(Object):
origin.attrib['xyz'] = ' '.join(map(str, new_origin_xyz))
def remove_floating_joints(self, folder=""):
+ """
+ Split a single urdf to multiple urdfs if there exist floating joints
+ """
# Deal with floating joints inside the embedded urdf
folder_name = os.path.join(folder, self.name)
urdfs_no_floating = \
save_urdfs_without_floating_joints(self.object_tree,
- folder_name,
- self.merge_fj)
+ folder_name)
# append a new tuple of file name of the instantiated embedded urdf
# and the transformation (!= identity if its connection was floating)
@@ -455,11 +472,17 @@ class URDFObject(Object):
self.is_fixed.append(urdfs_no_floating[urdf][2])
def randomize_texture(self):
+ """
+ Randomize texture and material for each link / visual shape
+ """
for material in self.materials:
material.randomize()
self.update_friction()
def update_friction(self):
+ """
+ Update the surface lateral friction for each link based on its material
+ """
if self.material_to_friction is None:
return
for i in range(len(self.urdf_paths)):
@@ -495,13 +518,12 @@ class URDFObject(Object):
p.changeDynamics(body_id, j, lateralFriction=link_friction)
def prepare_texture(self):
+ """
+ Set up mapping from visual meshes to randomizable materials
+ """
for _ in range(len(self.urdf_paths)):
self.visual_mesh_to_material.append({})
- # deprecated - should remove soon
- if self.category in ["building"]:
- return
-
if self.category in ["walls", "floors", "ceilings"]:
material_groups_file = os.path.join(
self.model_path, 'misc/{}_material_groups.json'.format(self.category))
@@ -546,6 +568,9 @@ class URDFObject(Object):
self.material_to_friction = json.load(f)
def _load(self):
+ """
+ Load the object into pybullet and set it to the correct pose
+ """
for idx in range(len(self.urdf_paths)):
logging.info("Loading " + self.urdf_paths[idx])
body_id = p.loadURDF(self.urdf_paths[idx])
@@ -574,7 +599,19 @@ class URDFObject(Object):
self.body_ids.append(body_id)
return self.body_ids
+ def force_wakeup(self):
+ """
+ Force wakeup sleeping objects
+ """
+ for body_id in self.body_ids:
+ for joint_id in range(p.getNumJoints(body_id)):
+ p.changeDynamics(body_id, joint_id,
+ activationState=p.ACTIVATION_STATE_WAKE_UP)
+
def reset(self):
+ """
+ Reset the object to its original pose and joint configuration
+ """
for idx in range(len(self.body_ids)):
body_id = self.body_ids[idx]
transformation = self.poses[idx]
diff --git a/gibson2/objects/cube.py b/gibson2/objects/cube.py
index b59ffd6bc..1707334c7 100644
--- a/gibson2/objects/cube.py
+++ b/gibson2/objects/cube.py
@@ -5,6 +5,10 @@ import pybullet as p
class Cube(Object):
+ """
+ Cube shape primitive
+ """
+
def __init__(self, pos=[1, 2, 3], dim=[1, 2, 3], visual_only=False, mass=1000, color=[1, 1, 1, 1]):
super(Cube, self).__init__()
self.basePos = pos
@@ -14,6 +18,9 @@ class Cube(Object):
self.color = color
def _load(self):
+ """
+ Load the object into pybullet
+ """
baseOrientation = [0, 0, 0, 1]
colBoxId = p.createCollisionShape(
p.GEOM_BOX, halfExtents=self.dimension)
@@ -31,8 +38,3 @@ class Cube(Object):
body_id, self.basePos, baseOrientation)
return body_id
-
-
-def round_up(n, decimals=0):
- multiplier = 10 ** decimals
- return math.ceil(n * multiplier) / multiplier
\ No newline at end of file
diff --git a/gibson2/objects/object_base.py b/gibson2/objects/object_base.py
index eb36d7524..994d23fe8 100644
--- a/gibson2/objects/object_base.py
+++ b/gibson2/objects/object_base.py
@@ -4,11 +4,19 @@ import gibson2
class Object(object):
+ """
+ Base Object class
+ """
+
def __init__(self):
self.body_id = None
self.loaded = False
def load(self):
+ """
+ Load the object into pybullet.
+ _load() will be implemented in the subclasses
+ """
if self.loaded:
return self.body_id
self.body_id = self._load()
@@ -16,27 +24,46 @@ class Object(object):
return self.body_id
def get_position(self):
+ """
+ Get object position
+
+ :return: position in xyz
+ """
pos, _ = p.getBasePositionAndOrientation(self.body_id)
return pos
def get_orientation(self):
- """Return object orientation
+ """
+ Get object orientation
+
:return: quaternion in xyzw
"""
_, orn = p.getBasePositionAndOrientation(self.body_id)
return orn
def set_position(self, pos):
+ """
+ Set object position
+
+ :param pos: position in xyz
+ """
_, old_orn = p.getBasePositionAndOrientation(self.body_id)
p.resetBasePositionAndOrientation(self.body_id, pos, old_orn)
def set_orientation(self, orn):
+ """
+ Set object orientation
+
+ :param orn: quaternion in xyzw
+ """
old_pos, _ = p.getBasePositionAndOrientation(self.body_id)
p.resetBasePositionAndOrientation(self.body_id, old_pos, orn)
def set_position_orientation(self, pos, orn):
- p.resetBasePositionAndOrientation(self.body_id, pos, orn)
+ """
+ Set object position and orientation
+<<<<<<< HEAD
def rotate_by(self, x=0, y=0, z=0):
"""
Rotates an object by given euler angles
@@ -44,3 +71,9 @@ class Object(object):
e_x, e_y, e_z = p.getEulerFromQuaternion(self.get_orientation())
self.set_orientation(p.getQuaternionFromEuler([e_x + x, e_y + y, e_z + z]))
+=======
+ :param pos: position in xyz
+ :param orn: quaternion in xyzw
+ """
+ p.resetBasePositionAndOrientation(self.body_id, pos, orn)
+>>>>>>> pbr
diff --git a/gibson2/objects/pedestrian.py b/gibson2/objects/pedestrian.py
index 28473bb61..a18c921be 100644
--- a/gibson2/objects/pedestrian.py
+++ b/gibson2/objects/pedestrian.py
@@ -5,17 +5,25 @@ import pybullet as p
class Pedestrian(Object):
+ """
+ Pedestiran object
+ """
+
def __init__(self, style='standing', pos=[0, 0, 0]):
super(Pedestrian, self).__init__()
self.collision_filename = os.path.join(
gibson2.assets_path, 'models', 'person_meshes',
'person_{}'.format(style), 'meshes', 'person_vhacd.obj')
- self.visual_filename = os.path.join(gibson2.assets_path, 'models', 'person_meshes',
- 'person_{}'.format(style), 'meshes', 'person.obj')
+ self.visual_filename = os.path.join(
+ gibson2.assets_path, 'models', 'person_meshes',
+ 'person_{}'.format(style), 'meshes', 'person.obj')
self.cid = None
self.pos = pos
def _load(self):
+ """
+ Load the object into pybullet
+ """
collision_id = p.createCollisionShape(
p.GEOM_MESH, fileName=self.collision_filename)
visual_id = p.createVisualShape(
@@ -26,15 +34,19 @@ class Pedestrian(Object):
baseVisualShapeIndex=visual_id)
p.resetBasePositionAndOrientation(
body_id, self.pos, [-0.5, -0.5, -0.5, 0.5])
- self.cid = p.createConstraint(body_id,
- -1,
- -1,
- -1,
- p.JOINT_FIXED, [0, 0, 0], [0, 0, 0],
- self.pos,
- parentFrameOrientation=[-0.5, -0.5, -0.5, 0.5]) # facing x axis
+ self.cid = p.createConstraint(
+ body_id,
+ -1,
+ -1,
+ -1,
+ p.JOINT_FIXED, [0, 0, 0], [0, 0, 0],
+ self.pos,
+ parentFrameOrientation=[-0.5, -0.5, -0.5, 0.5]) # facing x axis
return body_id
def reset_position_orientation(self, pos, orn):
+ """
+ Reset pedestrian position and orientation by changing constraint
+ """
p.changeConstraint(self.cid, pos, orn)
diff --git a/gibson2/objects/shapenet_object.py b/gibson2/objects/shapenet_object.py
index 6ae0b6811..d6168ca05 100644
--- a/gibson2/objects/shapenet_object.py
+++ b/gibson2/objects/shapenet_object.py
@@ -4,6 +4,11 @@ import numpy as np
class ShapeNetObject(Object):
+ """
+ ShapeNet object
+ Reference: https://www.shapenet.org/
+ """
+
def __init__(self, path, scale=1., position=[0, 0, 0], orientation=[0, 0, 0]):
super(ShapeNetObject, self).__init__()
self.filename = path
@@ -27,6 +32,9 @@ class ShapeNetObject(Object):
}
def _load(self):
+ """
+ Load the object into pybullet
+ """
collision_id = p.createCollisionShape(p.GEOM_MESH,
fileName=self.filename,
meshScale=self.scale)
diff --git a/gibson2/objects/soft_object.py b/gibson2/objects/soft_object.py
index 66f4b1744..e660323e5 100644
--- a/gibson2/objects/soft_object.py
+++ b/gibson2/objects/soft_object.py
@@ -3,6 +3,10 @@ import pybullet as p
class SoftObject(Object):
+ """
+ Soft object (WIP)
+ """
+
def __init__(self, filename, basePosition=[0, 0, 0], baseOrientation=[0, 0, 0, 1], scale=-1, mass=-1,
collisionMargin=-1, useMassSpring=0, useBendingSprings=0, useNeoHookean=0, springElasticStiffness=1,
springDampingStiffness=0.1, springBendingStiffness=0.1, NeoHookeanMu=1, NeoHookeanLambda=1,
@@ -28,6 +32,9 @@ class SoftObject(Object):
self.useSelfCollision = useSelfCollision
def _load(self):
+ """
+ Load the object into pybullet
+ """
body_id = p.loadSoftBody(self.filename, scale=self.scale, basePosition=self.basePosition,
baseOrientation=self.baseOrientation, mass=self.mass,
collisionMargin=self.collisionMargin, useMassSpring=self.useMassSpring,
@@ -44,6 +51,10 @@ class SoftObject(Object):
return body_id
- def addAnchor(self, nodeIndex=-1, bodyUniqueId=-1, linkIndex=-1, bodyFramePosition=[0, 0, 0], physicsClientId=0):
+ def add_anchor(self, nodeIndex=-1, bodyUniqueId=-1, linkIndex=-1,
+ bodyFramePosition=[0, 0, 0], physicsClientId=0):
+ """
+ Create soft body anchor
+ """
p.createSoftBodyAnchor(self.body_id, nodeIndex, bodyUniqueId,
- linkIndex, bodyFramePosition, physicsClientId)
\ No newline at end of file
+ linkIndex, bodyFramePosition, physicsClientId)
diff --git a/gibson2/objects/visual_marker.py b/gibson2/objects/visual_marker.py
index 11bef2510..2bf94de1b 100644
--- a/gibson2/objects/visual_marker.py
+++ b/gibson2/objects/visual_marker.py
@@ -3,6 +3,10 @@ import pybullet as p
class VisualMarker(Object):
+ """
+ Visual shape created with shape primitives
+ """
+
def __init__(self,
visual_shape=p.GEOM_SPHERE,
rgba_color=[1, 0, 0, 0.5],
@@ -29,6 +33,9 @@ class VisualMarker(Object):
self.initial_offset = initial_offset
def _load(self):
+ """
+ Load the object into pybullet
+ """
if self.visual_shape == p.GEOM_BOX:
shape = p.createVisualShape(self.visual_shape,
rgbaColor=self.rgba_color,
@@ -51,4 +58,12 @@ class VisualMarker(Object):
return body_id
def set_color(self, color):
+<<<<<<< HEAD
+=======
+ """
+ Set the color of the marker
+
+ :param color: normalized rgba color
+ """
+>>>>>>> pbr
p.changeVisualShape(self.body_id, -1, rgbaColor=color)
diff --git a/gibson2/objects/visual_shape.py b/gibson2/objects/visual_shape.py
new file mode 100644
index 000000000..8c218e5d8
--- /dev/null
+++ b/gibson2/objects/visual_shape.py
@@ -0,0 +1,31 @@
+from gibson2.objects.object_base import Object
+import pybullet as p
+
+
+class VisualShape(Object):
+ """
+ Visual shape created with mesh file
+ """
+
+ def __init__(self,
+ filename,
+ scale=1.0):
+ """
+ Create a visual shape to show in pybullet and MeshRenderer
+
+ :param filename: obj filename
+ """
+ super(VisualShape, self).__init__()
+ self.filename = filename
+ self.scale = scale
+
+ def _load(self):
+ """
+ Load the object into pybullet
+ """
+ visual_id = p.createVisualShape(p.GEOM_MESH,
+ fileName=self.filename,
+ meshScale=[self.scale] * 3)
+ body_id = p.createMultiBody(baseCollisionShapeIndex=-1,
+ baseVisualShapeIndex=visual_id)
+ return body_id
diff --git a/gibson2/objects/ycb_object.py b/gibson2/objects/ycb_object.py
index 82ed4144a..9797febaa 100644
--- a/gibson2/objects/ycb_object.py
+++ b/gibson2/objects/ycb_object.py
@@ -5,6 +5,11 @@ import pybullet as p
class YCBObject(Object):
+ """
+ YCB Object from assets/models/ycb
+ Reference: https://www.ycbbenchmarks.com/
+ """
+
def __init__(self, name, scale=1):
super(YCBObject, self).__init__()
self.visual_filename = os.path.join(gibson2.assets_path, 'models', 'ycb', name,
diff --git a/gibson2/physics/motor.py b/gibson2/physics/motor.py
index b811d3a8a..e91d64021 100644
--- a/gibson2/physics/motor.py
+++ b/gibson2/physics/motor.py
@@ -7,21 +7,23 @@ MOTOR_VOLTAGE = 16.0
MOTOR_RESISTANCE = 0.186
MOTOR_TORQUE_CONSTANT = 0.0954
MOTOR_VISCOUS_DAMPING = 0
-MOTOR_SPEED_LIMIT = MOTOR_VOLTAGE / (MOTOR_VISCOUS_DAMPING + MOTOR_TORQUE_CONSTANT)
+MOTOR_SPEED_LIMIT = MOTOR_VOLTAGE / \
+ (MOTOR_VISCOUS_DAMPING + MOTOR_TORQUE_CONSTANT)
class MotorModel(object):
- """The accurate motor model, which is based on the physics of DC motors.
+ """
+ The accurate motor model, which is based on the physics of DC motors.
- The motor model support two types of control: position control and torque
- control. In position control mode, a desired motor angle is specified, and a
- torque is computed based on the internal motor model. When the torque control
- is specified, a pwm signal in the range of [-1.0, 1.0] is converted to the
- torque.
+ The motor model support two types of control: position control and torque
+ control. In position control mode, a desired motor angle is specified, and a
+ torque is computed based on the internal motor model. When the torque control
+ is specified, a pwm signal in the range of [-1.0, 1.0] is converted to the
+ torque.
- The internal motor model takes the following factors into consideration:
- pd gains, viscous friction, back-EMF voltage and current-torque profile.
- """
+ The internal motor model takes the following factors into consideration:
+ pd gains, viscous friction, back-EMF voltage and current-torque profile.
+ """
def __init__(self, torque_control_enabled=False, kp=1.2, kd=0):
self._torque_control_enabled = torque_control_enabled
@@ -33,7 +35,6 @@ class MotorModel(object):
self._viscous_damping = MOTOR_VISCOUS_DAMPING
self._current_table = [0, 10, 20, 30, 40, 50, 60]
self._torque_table = [0, 1, 1.9, 2.45, 3.0, 3.25, 3.5]
- #self._torque_table = [0, 2, 3.8, 4.9, 6.0, 6.5, 7.0]
def set_voltage(self, voltage):
self._voltage = voltage
@@ -47,18 +48,17 @@ class MotorModel(object):
def get_viscous_dampling(self):
return self._viscous_damping
- def convert_to_torque(self, motor_commands, current_motor_angle, current_motor_velocity):
+ def convert_to_torque(self, motor_commands,
+ current_motor_angle, current_motor_velocity):
"""Convert the commands (position control or torque control) to torque.
- Args:
- motor_commands: The desired motor angle if the motor is in position
- control mode. The pwm signal if the motor is in torque control mode.
- current_motor_angle: The motor angle at the current time step.
- current_motor_velocity: The motor velocity at the current time step.
- Returns:
- actual_torque: The torque that needs to be applied to the motor.
- observed_torque: The torque observed by the sensor.
- """
+ :param motor_commands: The desired motor angle if the motor is in position
+ control mode. The pwm signal if the motor is in torque control mode.
+ :param current_motor_angle: The motor angle at the current time step.
+ :param current_motor_velocity: The motor velocity at the current time step.
+ :return actual_torque: The torque that needs to be applied to the motor.
+ :return observed_torque: The torque observed by the sensor.
+ """
if self._torque_control_enabled:
pwm = motor_commands
else:
@@ -69,28 +69,29 @@ class MotorModel(object):
def _convert_to_torque_from_pwm(self, pwm, current_motor_velocity):
"""Convert the pwm signal to torque.
-
- Args:
- pwm: The pulse width modulation.
- current_motor_velocity: The motor velocity at the current time step.
- Returns:
- actual_torque: The torque that needs to be applied to the motor.
- observed_torque: The torque observed by the sensor.
- """
- observed_torque = np.clip(self._torque_constant * (pwm * self._voltage / self._resistance),
- -OBSERVED_TORQUE_LIMIT, OBSERVED_TORQUE_LIMIT)
+ :param pwm: The pulse width modulation.
+ :param current_motor_velocity: The motor velocity at the current time step.
+ :return actual_torque: The torque that needs to be applied to the motor.
+ :return observed_torque: The torque observed by the sensor.
+ """
+ observed_torque = np.clip(self._torque_constant *
+ (pwm * self._voltage / self._resistance),
+ -OBSERVED_TORQUE_LIMIT,
+ OBSERVED_TORQUE_LIMIT)
# Net voltage is clipped at 50V by diodes on the motor controller.
voltage_net = np.clip(
pwm * self._voltage -
- (self._torque_constant + self._viscous_damping) * current_motor_velocity,
+ (self._torque_constant + self._viscous_damping) *
+ current_motor_velocity,
-VOLTAGE_CLIPPING, VOLTAGE_CLIPPING)
current = voltage_net / self._resistance
current_sign = np.sign(current)
current_magnitude = np.absolute(current)
# Saturate torque based on empirical current relation.
- actual_torque = np.interp(current_magnitude, self._current_table, self._torque_table)
+ actual_torque = np.interp(
+ current_magnitude, self._current_table, self._torque_table)
actual_torque = np.multiply(current_sign, actual_torque)
- #print("Actual torque", actual_torque)
+ # print("Actual torque", actual_torque)
return actual_torque, observed_torque
diff --git a/gibson2/render/cpp/egl_mesh_renderer.cpp b/gibson2/render/cpp/egl_mesh_renderer.cpp
index a1e2a3528..d3ba9e36a 100644
--- a/gibson2/render/cpp/egl_mesh_renderer.cpp
+++ b/gibson2/render/cpp/egl_mesh_renderer.cpp
@@ -255,12 +255,6 @@ PYBIND11_MODULE(EGLRendererContext, m) {
"read pixel buffer");
pymodule.def("allocateTexture", &EGLRendererContext::allocateTexture, "load texture function");
- // class MeshRendererG2G
- pymodule.def("render_tensor_pre", &EGLRendererContext::render_tensor_pre,
- "pre-executed functions in MeshRendererG2G.render");
- pymodule.def("render_tensor_post", &EGLRendererContext::render_tensor_post,
- "post-executed functions in MeshRendererG2G.render");
-
// class Instance
pymodule.def("render_softbody_instance", &EGLRendererContext::render_softbody_instance,
"render softbody in instance.render");
diff --git a/gibson2/render/cpp/glfw_mesh_renderer.cpp b/gibson2/render/cpp/glfw_mesh_renderer.cpp
index 1566b5272..ad56cd6c2 100644
--- a/gibson2/render/cpp/glfw_mesh_renderer.cpp
+++ b/gibson2/render/cpp/glfw_mesh_renderer.cpp
@@ -55,7 +55,6 @@ int GLFWRendererContext::init() {
glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
}
-
if (m_fullscreen) {
this->window = glfwCreateWindow(m_windowWidth, m_windowHeight, "Gibson Renderer Output", glfwGetPrimaryMonitor(), NULL);
}
diff --git a/gibson2/render/cpp/mesh_renderer.cpp b/gibson2/render/cpp/mesh_renderer.cpp
index 19a3539e7..0f73fa7d0 100644
--- a/gibson2/render/cpp/mesh_renderer.cpp
+++ b/gibson2/render/cpp/mesh_renderer.cpp
@@ -48,7 +48,7 @@ class Image {
public:
static std::shared_ptr fromFile(const std::string &filename, int channels) {
std::printf("Loading image: %s\n", filename.c_str());
-
+ stbi_set_flip_vertically_on_load(false);
std::shared_ptr image{new Image};
if (stbi_is_hdr(filename.c_str())) {
@@ -214,7 +214,7 @@ void MeshRendererContext::blit_buffer(int width, int height, GLuint fb1, GLuint
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fb2);
glBlitFramebuffer(0, 0, width, height, 0, 0, width, height, GL_DEPTH_BUFFER_BIT, GL_NEAREST);
- for (int i = 0; i < 4; i++) {
+ for (int i = 0; i < 6; i++) {
glReadBuffer(GL_COLOR_ATTACHMENT0 + i);
glDrawBuffer(GL_COLOR_ATTACHMENT0 + i);
glBlitFramebuffer(0, 0, width, height, 0, 0, width, height, GL_COLOR_BUFFER_BIT, GL_NEAREST);
@@ -231,7 +231,13 @@ py::array_t MeshRendererContext::readbuffer_meshrenderer(char *mode, int
glReadBuffer(GL_COLOR_ATTACHMENT2);
} else if (!strcmp(mode, "3d")) {
glReadBuffer(GL_COLOR_ATTACHMENT3);
- } else {
+ } else if (!strcmp(mode, "scene_flow")) {
+ glReadBuffer(GL_COLOR_ATTACHMENT4);
+ }
+ else if (!strcmp(mode, "optical_flow")) {
+ glReadBuffer(GL_COLOR_ATTACHMENT5);
+ }
+ else {
fprintf(stderr, "ERROR: Unknown buffer mode.\n");
exit(EXIT_FAILURE);
}
@@ -268,15 +274,18 @@ void MeshRendererContext::clean_meshrenderer(std::vector texture1, std::
py::list MeshRendererContext::setup_framebuffer_meshrenderer(int width, int height) {
GLuint *fbo_ptr = (GLuint *) malloc(sizeof(GLuint));
- GLuint *texture_ptr = (GLuint *) malloc(5 * sizeof(GLuint));
+ GLuint *texture_ptr = (GLuint *) malloc(7 * sizeof(GLuint));
glGenFramebuffers(1, fbo_ptr);
- glGenTextures(5, texture_ptr);
+ glGenTextures(7, texture_ptr);
int fbo = fbo_ptr[0];
int color_tex_rgb = texture_ptr[0];
int color_tex_normal = texture_ptr[1];
int color_tex_semantics = texture_ptr[2];
int color_tex_3d = texture_ptr[3];
- int depth_tex = texture_ptr[4];
+ int color_tex_scene_flow = texture_ptr[4];
+ int color_tex_optical_flow = texture_ptr[5];
+ int depth_tex = texture_ptr[6];
+
glBindTexture(GL_TEXTURE_2D, color_tex_rgb);
// Note: VR textures need these settings, otherwise they won't display on the HMD
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
@@ -288,6 +297,10 @@ py::list MeshRendererContext::setup_framebuffer_meshrenderer(int width, int heig
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glBindTexture(GL_TEXTURE_2D, color_tex_3d);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+ glBindTexture(GL_TEXTURE_2D, color_tex_scene_flow);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+ glBindTexture(GL_TEXTURE_2D, color_tex_optical_flow);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glBindTexture(GL_TEXTURE_2D, depth_tex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, width, height, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, NULL);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
@@ -295,14 +308,18 @@ py::list MeshRendererContext::setup_framebuffer_meshrenderer(int width, int heig
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, color_tex_normal, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_2D, color_tex_semantics, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT3, GL_TEXTURE_2D, color_tex_3d, 0);
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT4, GL_TEXTURE_2D, color_tex_scene_flow, 0);
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT5, GL_TEXTURE_2D, color_tex_optical_flow, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, depth_tex, 0);
glViewport(0, 0, width, height);
- GLenum *bufs = (GLenum *) malloc(4 * sizeof(GLenum));
+ GLenum *bufs = (GLenum *) malloc(6 * sizeof(GLenum));
bufs[0] = GL_COLOR_ATTACHMENT0;
bufs[1] = GL_COLOR_ATTACHMENT1;
bufs[2] = GL_COLOR_ATTACHMENT2;
bufs[3] = GL_COLOR_ATTACHMENT3;
- glDrawBuffers(4, bufs);
+ bufs[4] = GL_COLOR_ATTACHMENT4;
+ bufs[5] = GL_COLOR_ATTACHMENT5;
+ glDrawBuffers(6, bufs);
assert(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);
py::list result;
result.append(fbo);
@@ -310,21 +327,25 @@ py::list MeshRendererContext::setup_framebuffer_meshrenderer(int width, int heig
result.append(color_tex_normal);
result.append(color_tex_semantics);
result.append(color_tex_3d);
+ result.append(color_tex_scene_flow);
+ result.append(color_tex_optical_flow);
result.append(depth_tex);
return result;
}
py::list MeshRendererContext::setup_framebuffer_meshrenderer_ms(int width, int height) {
GLuint *fbo_ptr = (GLuint *) malloc(sizeof(GLuint));
- GLuint *texture_ptr = (GLuint *) malloc(5 * sizeof(GLuint));
+ GLuint *texture_ptr = (GLuint *) malloc(7 * sizeof(GLuint));
glGenFramebuffers(1, fbo_ptr);
- glGenTextures(5, texture_ptr);
+ glGenTextures(7, texture_ptr);
int fbo = fbo_ptr[0];
int color_tex_rgb = texture_ptr[0];
int color_tex_normal = texture_ptr[1];
int color_tex_semantics = texture_ptr[2];
int color_tex_3d = texture_ptr[3];
- int depth_tex = texture_ptr[4];
+ int color_tex_scene_flow = texture_ptr[4];
+ int color_tex_optical_flow = texture_ptr[5];
+ int depth_tex = texture_ptr[6];
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, color_tex_rgb);
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 4, GL_RGBA, width, height, GL_TRUE);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, color_tex_normal);
@@ -333,6 +354,10 @@ py::list MeshRendererContext::setup_framebuffer_meshrenderer_ms(int width, int h
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 4, GL_RGBA, width, height, GL_TRUE);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, color_tex_3d);
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 4, GL_RGBA32F, width, height, GL_TRUE);
+ glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, color_tex_scene_flow);
+ glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 4, GL_RGBA32F, width, height, GL_TRUE);
+ glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, color_tex_optical_flow);
+ glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 4, GL_RGBA32F, width, height, GL_TRUE);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, depth_tex);
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 4, GL_DEPTH24_STENCIL8, width, height, GL_TRUE);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
@@ -340,14 +365,18 @@ py::list MeshRendererContext::setup_framebuffer_meshrenderer_ms(int width, int h
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D_MULTISAMPLE, color_tex_normal, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_2D_MULTISAMPLE, color_tex_semantics, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT3, GL_TEXTURE_2D_MULTISAMPLE, color_tex_3d, 0);
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT4, GL_TEXTURE_2D_MULTISAMPLE, color_tex_scene_flow, 0);
+ glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT5, GL_TEXTURE_2D_MULTISAMPLE, color_tex_optical_flow, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D_MULTISAMPLE, depth_tex, 0);
glViewport(0, 0, width, height);
- GLenum *bufs = (GLenum *) malloc(4 * sizeof(GLenum));
+ GLenum *bufs = (GLenum *) malloc(6 * sizeof(GLenum));
bufs[0] = GL_COLOR_ATTACHMENT0;
bufs[1] = GL_COLOR_ATTACHMENT1;
bufs[2] = GL_COLOR_ATTACHMENT2;
bufs[3] = GL_COLOR_ATTACHMENT3;
- glDrawBuffers(4, bufs);
+ bufs[4] = GL_COLOR_ATTACHMENT4;
+ bufs[5] = GL_COLOR_ATTACHMENT5;
+ glDrawBuffers(6, bufs);
assert(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);
py::list result;
result.append(fbo);
@@ -355,6 +384,8 @@ py::list MeshRendererContext::setup_framebuffer_meshrenderer_ms(int width, int h
result.append(color_tex_normal);
result.append(color_tex_semantics);
result.append(color_tex_3d);
+ result.append(color_tex_scene_flow);
+ result.append(color_tex_optical_flow);
result.append(depth_tex);
return result;
}
@@ -547,12 +578,13 @@ void MeshRendererContext::draw_elements_instance(bool flag, int texture_id, int
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
-void MeshRendererContext::initvar(int shaderProgram, py::array_t V, py::array_t lightV,
- int shadow_pass, py::array_t P, py::array_t lightP,
- py::array_t eye_pos,
- py::array_t lightpos, py::array_t lightcolor) {
+void MeshRendererContext::initvar(int shaderProgram, py::array_t V, py::array_t last_V, py::array_t
+ lightV, int shadow_pass, py::array_t P, py::array_t lightP,
+ py::array_t eye_pos, py::array_t lightpos,
+ py::array_t lightcolor) {
glUseProgram(shaderProgram);
float *Vptr = (float *) V.request().ptr;
+ float *last_Vptr = (float *) last_V.request().ptr;
float *lightVptr = (float *) lightV.request().ptr;
float *Pptr = (float *) P.request().ptr;
float *lightPptr = (float *) lightP.request().ptr;
@@ -560,6 +592,7 @@ void MeshRendererContext::initvar(int shaderProgram, py::array_t V, py::a
float *lightcolorptr = (float *) lightcolor.request().ptr;
float *eye_pos_ptr = (float *) eye_pos.request().ptr;
glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "V"), 1, GL_TRUE, Vptr);
+ glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "last_V"), 1, GL_TRUE, last_Vptr);
glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "lightV"), 1, GL_TRUE, lightVptr);
glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "P"), 1, GL_FALSE, Pptr);
glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "lightP"), 1, GL_FALSE, lightPptr);
@@ -571,33 +604,19 @@ void MeshRendererContext::initvar(int shaderProgram, py::array_t V, py::a
}
void MeshRendererContext::init_pos_instance(int shaderProgram, py::array_t pose_trans,
- py::array_t pose_rot) {
+ py::array_t pose_rot, py::array_t last_trans,
+ py::array_t last_rot) {
float *transptr = (float *) pose_trans.request().ptr;
float *rotptr = (float *) pose_rot.request().ptr;
+ float *lasttransptr = (float *) last_trans.request().ptr;
+ float *lastrotptr = (float *) last_rot.request().ptr;
glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "pose_trans"), 1, GL_FALSE, transptr);
glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "pose_rot"), 1, GL_TRUE, rotptr);
+ glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "last_trans"), 1, GL_FALSE, lasttransptr);
+ glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "last_rot"), 1, GL_TRUE, lastrotptr);
}
-void MeshRendererContext::render_tensor_pre(bool msaa, GLuint fb1, GLuint fb2) {
-
- glBindFramebuffer(GL_FRAMEBUFFER, fb2);
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-
- if (msaa) {
- glBindFramebuffer(GL_FRAMEBUFFER, fb1);
- glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- }
- glEnable(GL_DEPTH_TEST);
-}
-
-
-void MeshRendererContext::render_tensor_post() {
- glDisable(GL_DEPTH_TEST);
-}
-
void MeshRendererContext::cglBindVertexArray(int vao) {
glBindVertexArray(vao);
}
@@ -606,7 +625,7 @@ void MeshRendererContext::cglUseProgram(int shaderProgram) {
glUseProgram(shaderProgram);
}
-int MeshRendererContext::loadTexture(std::string filename) {
+int MeshRendererContext::loadTexture(std::string filename, float texture_scale) {
//width, height = img.size
// glTexImage2D expects the first element of the image data to be the
// bottom-left corner of the image. Subsequent elements go left to right,
@@ -623,10 +642,17 @@ int MeshRendererContext::loadTexture(std::string filename) {
int comp;
stbi_set_flip_vertically_on_load(true);
unsigned char *image = stbi_load(filename.c_str(), &w, &h, &comp, STBI_rgb);
-
if (image == nullptr)
throw (std::string("ERROR: Failed to load texture"));
+ int new_w = (int)(w * texture_scale);
+ int new_h = (int)(h * texture_scale);
+
+ unsigned char *resized_image = (unsigned char *)malloc(w*h*comp);
+ stbir_resize_uint8(image, w, h, 0, resized_image, new_w, new_h, 0, comp);
+// STBIRDEF int stbir_resize_uint8( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes,
+// unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes,
+// int num_channels);
GLuint texture;
glGenTextures(1, &texture);
@@ -636,10 +662,11 @@ int MeshRendererContext::loadTexture(std::string filename) {
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB,
- GL_UNSIGNED_BYTE, image);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, new_w, new_h, 0, GL_RGB,
+ GL_UNSIGNED_BYTE, resized_image);
glGenerateMipmap(GL_TEXTURE_2D);
stbi_image_free(image);
+ stbi_image_free(resized_image);
return texture;
}
@@ -1306,6 +1333,21 @@ py::list MeshRendererContext::generateArrayTextures(std::vector fil
glUniformBlockBinding(shaderProgram, transformDataRotIdx, 3);
glBindBufferBase(GL_UNIFORM_BUFFER, 3, uboTransformDataRot);
+ glGenBuffers(1, &uboTransformDataLastTrans);
+ glBindBuffer(GL_UNIFORM_BUFFER, uboTransformDataLastTrans);
+ transformDataSize = 64 * MAX_ARRAY_SIZE;
+ glBufferData(GL_UNIFORM_BUFFER, transformDataSize, NULL, GL_DYNAMIC_DRAW);
+ GLuint transformDataLastTransIdx = glGetUniformBlockIndex(shaderProgram, "TransformDataLastTrans");
+ glUniformBlockBinding(shaderProgram, transformDataLastTransIdx, 6);
+ glBindBufferBase(GL_UNIFORM_BUFFER, 6, uboTransformDataLastTrans);
+
+ glGenBuffers(1, &uboTransformDataLastRot);
+ glBindBuffer(GL_UNIFORM_BUFFER, uboTransformDataLastRot);
+ glBufferData(GL_UNIFORM_BUFFER, transformDataSize, NULL, GL_DYNAMIC_DRAW);
+ GLuint transformDataLastRotIdx = glGetUniformBlockIndex(shaderProgram, "TransformDataLastRot");
+ glUniformBlockBinding(shaderProgram, transformDataLastRotIdx, 7);
+ glBindBufferBase(GL_UNIFORM_BUFFER, 7, uboTransformDataLastRot);
+
float *hiddenData = (float*)mergedHiddenData.request().ptr;
int hiddenDataSize = mergedHiddenData.size();
@@ -1431,7 +1473,10 @@ py::list MeshRendererContext::generateArrayTextures(std::vector fil
// Updates positions and rotations in vertex shader
void MeshRendererContext::updateDynamicData(int shaderProgram, py::array_t pose_trans_array,
- py::array_t pose_rot_array, py::array_t V, py::array_t P, py::array_t lightV, py::array_t lightP, int shadow_pass,
+ py::array_t pose_rot_array, py::array_t last_trans_array,
+ py::array_t last_rot_array, py::array_t V, py::array_t last_V, py::array_t P,
+ py::array_t lightV,
+ py::array_t lightP, int shadow_pass,
py::array_t eye_pos) {
glUseProgram(shaderProgram);
@@ -1449,15 +1494,32 @@ py::list MeshRendererContext::generateArrayTextures(std::vector fil
glBindBuffer(GL_UNIFORM_BUFFER, uboTransformDataRot);
glBufferSubData(GL_UNIFORM_BUFFER, 0, rotDataSize * sizeof(float), rotPtr);
+
+ float* lastTransPtr = (float*)last_trans_array.request().ptr;
+ float* lastRotPtr = (float*)last_rot_array.request().ptr;
+ transDataSize = last_trans_array.size();
+ rotDataSize = last_rot_array.size();
+
+ if (transDataSize > MAX_ARRAY_SIZE * 16) transDataSize = MAX_ARRAY_SIZE * 16;
+ if (rotDataSize > MAX_ARRAY_SIZE * 16) rotDataSize = MAX_ARRAY_SIZE * 16;
+
+ glBindBuffer(GL_UNIFORM_BUFFER, uboTransformDataLastTrans);
+ glBufferSubData(GL_UNIFORM_BUFFER, 0, transDataSize * sizeof(float), lastTransPtr);
+
+ glBindBuffer(GL_UNIFORM_BUFFER, uboTransformDataLastRot);
+ glBufferSubData(GL_UNIFORM_BUFFER, 0, rotDataSize * sizeof(float), lastRotPtr);
+
glBindBuffer(GL_UNIFORM_BUFFER, 0);
float* Vptr = (float*)V.request().ptr;
+ float *last_Vptr = (float *) last_V.request().ptr;
float* Pptr = (float*)P.request().ptr;
float* lightVptr = (float*)lightV.request().ptr;
float* lightPptr = (float*)lightP.request().ptr;
float *eye_pos_ptr = (float *) eye_pos.request().ptr;
glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "V"), 1, GL_TRUE, Vptr);
+ glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "last_V"), 1, GL_TRUE, last_Vptr);
glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "P"), 1, GL_FALSE, Pptr);
glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "lightV"), 1, GL_TRUE, lightVptr);
glUniformMatrix4fv(glGetUniformLocation(shaderProgram, "lightP"), 1, GL_FALSE, lightPptr);
diff --git a/gibson2/render/cpp/mesh_renderer.h b/gibson2/render/cpp/mesh_renderer.h
index 77d94f348..3392f537a 100644
--- a/gibson2/render/cpp/mesh_renderer.h
+++ b/gibson2/render/cpp/mesh_renderer.h
@@ -69,6 +69,8 @@ public:
GLuint uboPbrData;
GLuint uboTransformDataRot;
GLuint uboTransformDataTrans;
+ GLuint uboTransformDataLastRot;
+ GLuint uboTransformDataLastTrans;
GLuint uboHidden;
GLuint uboUV;
@@ -130,22 +132,18 @@ public:
int normal_texture_id, int depth_texture_id, int vao, int face_size,
py::array_t faces, GLuint fb);
- void initvar(int shaderProgram, py::array_t V, py::array_t lightV, int shadow_pass,
- py::array_t P, py::array_t lightP, py::array_t eye_pos,
- py::array_t lightpos,
- py::array_t lightcolor);
+ void initvar(int shaderProgram, py::array_t V, py::array_t last_V, py::array_t lightV, int
+ shadow_pass, py::array_t P, py::array_t lightP, py::array_t
+ eye_pos, py::array_t lightpos, py::array_t lightcolor);
- void init_pos_instance(int shaderProgram, py::array_t pose_trans, py::array_t pose_rot);
-
- void render_tensor_pre(bool msaa, GLuint fb1, GLuint fb2);
-
- void render_tensor_post();
+ void init_pos_instance(int shaderProgram, py::array_t pose_trans, py::array_t pose_rot,
+ py::array_t last_trans, py::array_t last_rot);
void cglBindVertexArray(int vao);
void cglUseProgram(int shaderProgram);
- int loadTexture(std::string filename);
+ int loadTexture(std::string filename, float texture_scale);
void setup_pbr(std::string shader_path,
std::string env_texture_filename,
@@ -207,8 +205,12 @@ public:
void updateUVData(int shaderProgram, py::array_t uv_data);
- void updateDynamicData(int shaderProgram, py::array_t pose_trans_array, py::array_t pose_rot_array,
- py::array_t V, py::array_t P, py::array_t lightV, py::array_t lightP, int shadow_pass, py::array_t eye_pos);
+ void updateDynamicData(int shaderProgram, py::array_t pose_trans_array,
+ py::array_t pose_rot_array, py::array_t last_trans_array,
+ py::array_t last_rot_array, py::array_t V, py::array_t last_V, py::array_t P,
+ py::array_t lightV,
+ py::array_t lightP, int shadow_pass,
+ py::array_t eye_pos);
void renderOptimized(GLuint VAO);
diff --git a/gibson2/render/mesh_renderer/get_available_devices.py b/gibson2/render/mesh_renderer/get_available_devices.py
index e881323df..b8096dea1 100644
--- a/gibson2/render/mesh_renderer/get_available_devices.py
+++ b/gibson2/render/mesh_renderer/get_available_devices.py
@@ -2,18 +2,20 @@ import subprocess
import os
import logging
+
def get_available_devices():
"""
- Find available devices to run EGL on, it will return the minor numbers,
+ Find available devices to run EGL on. It will return the minor numbers,
The minor number for the device is such that the Nvidia device node
file for each GPU will have the form /dev/nvidia[minor number]. Avail-
able only on Linux platform.
- :return: Minor number
+ :return: Minor number
"""
executable_path = os.path.join(os.path.dirname(__file__), 'build')
try:
- num_devices = int(subprocess.check_output(["{}/query_devices".format(executable_path)]))
+ num_devices = int(subprocess.check_output(
+ ["{}/query_devices".format(executable_path)]))
except subprocess.CalledProcessError as e:
return [0]
@@ -34,9 +36,9 @@ def get_available_devices():
return available_devices
+
def get_cuda_device(minor_idx):
"""
-
Get the device index to use in pytorch
The minor number for the device is such that the Nvidia device node
@@ -49,7 +51,8 @@ def get_cuda_device(minor_idx):
executable_path = os.path.join(os.path.dirname(__file__), 'build')
try:
- num_devices = int(subprocess.check_output(["{}/query_devices".format(executable_path)]))
+ num_devices = int(subprocess.check_output(
+ ["{}/query_devices".format(executable_path)]))
except subprocess.CalledProcessError as e:
return 0
@@ -62,7 +65,9 @@ def get_cuda_device(minor_idx):
return i
return 0
+
if __name__ == '__main__':
graphics_devices = get_available_devices()
logging.info('Graphics Devices: {}'.format(graphics_devices))
- logging.info('Graphics Device Ids: {}'.format([get_cuda_device(item) for item in graphics_devices]))
\ No newline at end of file
+ logging.info('Graphics Device Ids: {}'.format(
+ [get_cuda_device(item) for item in graphics_devices]))
diff --git a/gibson2/render/mesh_renderer/instances.py b/gibson2/render/mesh_renderer/instances.py
new file mode 100644
index 000000000..9dcd08cc6
--- /dev/null
+++ b/gibson2/render/mesh_renderer/instances.py
@@ -0,0 +1,443 @@
+import pybullet as p
+from gibson2.utils.mesh_util import perspective, lookat, xyz2mat, quat2rotmat, mat2xyz, \
+ safemat2quat, xyzw2wxyz, ortho, transform_vertex
+import numpy as np
+
+
+class InstanceGroup(object):
+ """
+ InstanceGroup is a set of visual objects.
+ It is grouped together because they are kinematically connected.
+ Robots and articulated objects are represented as instance groups.
+ """
+
+ def __init__(self,
+ objects,
+ id,
+ link_ids,
+ pybullet_uuid,
+ class_id,
+ poses_trans,
+ poses_rot,
+ dynamic,
+ robot=None,
+ use_pbr=True,
+ use_pbr_mapping=True,
+ shadow_caster=True
+ ):
+ """
+ :param objects: visual objects
+ :param id: id of this instance_group
+ :param link_ids: link_ids in pybullet
+ :param pybullet_uuid: body id in pybullet
+ :param class_id: class_id to render semantics
+ :param poses_trans: initial translations for each visual object
+ :param poses_rot: initial rotation matrix for each visual object
+ :param dynamic: whether the instance group is dynamic
+ :param robot: The robot associated with this InstanceGroup
+ :param use_pbr: whether to use PBR
+ :param use_pbr_mapping: whether to use PBR mapping
+ :param shadow_caster: whether to cast shadow
+ """
+ self.objects = objects
+ self.poses_trans = poses_trans
+ self.poses_rot = poses_rot
+ self.id = id
+ self.link_ids = link_ids
+ self.class_id = class_id
+ self.robot = robot
+ if len(objects) > 0:
+ self.renderer = objects[0].renderer
+ else:
+ self.renderer = None
+
+ self.pybullet_uuid = pybullet_uuid
+ self.dynamic = dynamic
+ self.tf_tree = None
+ self.use_pbr = use_pbr
+ self.use_pbr_mapping = use_pbr_mapping
+ self.shadow_caster = shadow_caster
+ self.roughness = 1
+ self.metalness = 0
+ # Determines whether object will be rendered
+ self.hidden = False
+ # Indices into optimized buffers such as color information and transformation buffer
+ # These values are used to set buffer information during simulation
+ self.or_buffer_indices = None
+ self.last_trans = [np.copy(item) for item in poses_trans]
+ self.last_rot = [np.copy(item) for item in poses_rot]
+
+ def render(self, shadow_pass=0):
+ """
+ Render this instance group
+ shadow_pass = 0: normal rendering mode, disable shadow
+ shadow_pass = 1: enable_shadow, rendering depth map from light space
+ shadow_pass = 2: use rendered depth map to calculate shadow
+
+ :param shadow_pass: shadow pass mode """
+ if self.renderer is None:
+ return
+
+ self.renderer.r.initvar(self.renderer.shaderProgram,
+ self.renderer.V,
+ self.renderer.last_V,
+ self.renderer.lightV,
+ shadow_pass,
+ self.renderer.P,
+ self.renderer.lightP,
+ self.renderer.camera,
+ self.renderer.lightpos,
+ self.renderer.lightcolor)
+
+ for i, visual_object in enumerate(self.objects):
+ for object_idx in visual_object.VAO_ids:
+ self.renderer.r.init_pos_instance(self.renderer.shaderProgram,
+ self.poses_trans[i],
+ self.poses_rot[i],
+ self.last_trans[i],
+ self.last_rot[i])
+ current_material = self.renderer.materials_mapping[
+ self.renderer.mesh_materials[object_idx]]
+ self.renderer.r.init_material_instance(self.renderer.shaderProgram,
+ float(
+ self.class_id) / 255.0,
+ current_material.kd,
+ float(
+ current_material.is_texture()),
+ float(self.use_pbr),
+ float(
+ self.use_pbr_mapping),
+ float(self.metalness),
+ float(self.roughness),
+ current_material.transform_param
+ )
+
+ try:
+ texture_id = current_material.texture_id
+ metallic_texture_id = current_material.metallic_texture_id
+ roughness_texture_id = current_material.roughness_texture_id
+ normal_texture_id = current_material.normal_texture_id
+
+ if texture_id is None:
+ texture_id = -1
+ if metallic_texture_id is None:
+ metallic_texture_id = -1
+ if roughness_texture_id is None:
+ roughness_texture_id = -1
+ if normal_texture_id is None:
+ normal_texture_id = -1
+
+ if self.renderer.msaa:
+ buffer = self.renderer.fbo_ms
+ else:
+ buffer = self.renderer.fbo
+ self.renderer.r.draw_elements_instance(
+ self.renderer.materials_mapping[self.renderer.mesh_materials[object_idx]].is_texture(
+ ),
+ texture_id,
+ metallic_texture_id,
+ roughness_texture_id,
+ normal_texture_id,
+ self.renderer.depth_tex_shadow,
+ self.renderer.VAOs[object_idx],
+ self.renderer.faces[object_idx].size,
+ self.renderer.faces[object_idx],
+ buffer)
+ finally:
+ self.renderer.r.cglBindVertexArray(0)
+ self.renderer.r.cglUseProgram(0)
+
+ def get_pose_in_camera(self):
+ """
+ Get instance group pose in camera reference frame
+ """
+ mat = self.renderer.V.dot(self.pose_trans.T).dot(self.pose_rot).T
+ pose = np.concatenate([mat2xyz(mat), safemat2quat(mat[:3, :3].T)])
+ return pose
+
+ def set_position(self, pos):
+ """
+ Set positions for each part of this InstanceGroup
+
+ :param pos: positions
+ """
+
+ self.last_trans = [np.copy(item) for item in self.poses_trans]
+ self.poses_trans = pos
+
+ def set_rotation(self, rot):
+ """
+ Set rotations for each part of this InstanceGroup
+
+ :param rot: rotation matrix
+ """
+
+ self.last_rot = [np.copy(item) for item in self.poses_rot]
+ self.poses_rot = rot
+
+ def set_position_for_part(self, pos, j):
+ """
+ Set positions for one part of this InstanceGroup
+
+ :param pos: position
+ :param j: part index
+ """
+
+ self.last_trans[j] = np.copy(self.poses_trans[j])
+ self.poses_trans[j] = pos
+
+ def set_rotation_for_part(self, rot, j):
+ """
+ Set rotations for one part of this InstanceGroup
+
+ :param rot: rotation matrix
+ :param j: part index
+ """
+
+ self.last_rot[j] = np.copy(self.poses_rot[j])
+ self.poses_rot[j] = rot
+
+ def dump(self):
+ """
+ Dump vertex and face information
+ """
+ vertices_info = []
+ faces_info = []
+ for i, visual_obj in enumerate(self.objects):
+ for vertex_data_index, face_data_index in zip(visual_obj.vertex_data_indices, visual_obj.face_indices):
+ vertices_info.append(transform_vertex(self.renderer.vertex_data[vertex_data_index],
+ pose_trans=self.poses_trans[i],
+ pose_rot=self.poses_rot[i]))
+ faces_info.append(self.renderer.faces[face_data_index])
+ return vertices_info, faces_info
+
+ def __str__(self):
+ return "InstanceGroup({}) -> Objects({})".format(
+ self.id, ",".join([str(object.id) for object in self.objects]))
+
+ def __repr__(self):
+ return self.__str__()
+
+
+class Robot(InstanceGroup):
+ """
+ A specfial type of InstanceGroup used for Robots
+ """
+
+ def __init__(self, *args, **kwargs):
+ super(Robot, self).__init__(*args, **kwargs)
+
+ def __str__(self):
+ return "Robot({}) -> Objects({})".format(
+ self.id, ",".join([str(object.id) for object in self.objects]))
+
+
+class Instance(object):
+ """
+ Instance is one instance of a visual object.
+ One visual object can have multiple instances to save memory.
+ """
+
+ def __init__(self,
+ object,
+ id,
+ pybullet_uuid,
+ class_id,
+ pose_trans,
+ pose_rot,
+ dynamic,
+ softbody,
+ use_pbr=True,
+ use_pbr_mapping=True,
+ shadow_caster=True
+ ):
+ """
+ :param object: visual object
+ :param id: id of this instance_group
+ :param pybullet_uuid: body id in pybullet
+ :param class_id: class_id to render semantics
+ :param pose_trans: initial translations for the visual object
+ :param pose_rot: initial rotation matrix for the visual object
+ :param dynamic: whether the instance is dynamic
+ :param softbody: whether the instance is soft body
+ :param use_pbr: whether to use PBR
+ :param use_pbr_mapping: whether to use PBR mapping
+ :param shadow_caster: whether to cast shadow
+ """
+ self.object = object
+ self.pose_trans = pose_trans
+ self.pose_rot = pose_rot
+ self.id = id
+ self.class_id = class_id
+ self.renderer = object.renderer
+ self.pybullet_uuid = pybullet_uuid
+ self.dynamic = dynamic
+ self.softbody = softbody
+ self.use_pbr = use_pbr
+ self.use_pbr_mapping = use_pbr_mapping
+ self.shadow_caster = shadow_caster
+ self.roughness = 1
+ self.metalness = 0
+ # Determines whether object will be rendered
+ self.hidden = False
+ # Indices into optimized buffers such as color information and transformation buffer
+ # These values are used to set buffer information during simulation
+ self.or_buffer_indices = None
+ self.last_trans = np.copy(pose_trans)
+ self.last_rot = np.copy(pose_rot)
+
+ def render(self, shadow_pass=0):
+ """
+ Render this instance
+ shadow_pass = 0: normal rendering mode, disable shadow
+ shadow_pass = 1: enable_shadow, rendering depth map from light space
+ shadow_pass = 2: use rendered depth map to calculate shadow
+
+ :param shadow_pass: shadow pass mode
+ """
+ if self.renderer is None:
+ return
+
+ # softbody: reload vertex position
+ if self.softbody:
+ # construct new vertex position into shape format
+ object_idx = self.object.VAO_ids[0]
+ vertices = p.getMeshData(self.pybullet_uuid)[1]
+ vertices_flattened = [
+ item for sublist in vertices for item in sublist]
+ vertex_position = np.array(vertices_flattened).reshape(
+ (len(vertices_flattened) // 3, 3))
+ shape = self.renderer.shapes[object_idx]
+ n_indices = len(shape.mesh.indices)
+ np_indices = shape.mesh.numpy_indices().reshape((n_indices, 3))
+ shape_vertex_index = np_indices[:, 0]
+ shape_vertex = vertex_position[shape_vertex_index]
+
+ # update new vertex position in buffer data
+ new_data = self.renderer.vertex_data[object_idx]
+ new_data[:, 0:shape_vertex.shape[1]] = shape_vertex
+ new_data = new_data.astype(np.float32)
+
+ # transform and rotation already included in mesh data
+ self.pose_trans = np.eye(4)
+ self.pose_rot = np.eye(4)
+ self.last_trans = np.eye(4)
+ self.last_rot = np.eye(4)
+
+ # update buffer data into VBO
+ self.renderer.r.render_softbody_instance(
+ self.renderer.VAOs[object_idx], self.renderer.VBOs[object_idx], new_data)
+
+ self.renderer.r.initvar(self.renderer.shaderProgram,
+ self.renderer.V,
+ self.renderer.last_V,
+ self.renderer.lightV,
+ shadow_pass,
+ self.renderer.P,
+ self.renderer.lightP,
+ self.renderer.camera,
+ self.renderer.lightpos,
+ self.renderer.lightcolor)
+
+ self.renderer.r.init_pos_instance(self.renderer.shaderProgram,
+ self.pose_trans,
+ self.pose_rot,
+ self.last_trans,
+ self.last_rot)
+
+ for object_idx in self.object.VAO_ids:
+ current_material = self.renderer.materials_mapping[
+ self.renderer.mesh_materials[object_idx]]
+ self.renderer.r.init_material_instance(self.renderer.shaderProgram,
+ float(
+ self.class_id) / 255.0,
+ current_material.kd,
+ float(
+ current_material.is_texture()),
+ float(self.use_pbr),
+ float(self.use_pbr_mapping),
+ float(self.metalness),
+ float(self.roughness),
+ current_material.transform_param)
+ try:
+
+ texture_id = current_material.texture_id
+ metallic_texture_id = current_material.metallic_texture_id
+ roughness_texture_id = current_material.roughness_texture_id
+ normal_texture_id = current_material.normal_texture_id
+
+ if texture_id is None:
+ texture_id = -1
+ if metallic_texture_id is None:
+ metallic_texture_id = -1
+ if roughness_texture_id is None:
+ roughness_texture_id = -1
+ if normal_texture_id is None:
+ normal_texture_id = -1
+
+ if self.renderer.msaa:
+ buffer = self.renderer.fbo_ms
+ else:
+ buffer = self.renderer.fbo
+
+ self.renderer.r.draw_elements_instance(
+ self.renderer.materials_mapping[self.renderer.mesh_materials[object_idx]].is_texture(
+ ),
+ texture_id,
+ metallic_texture_id,
+ roughness_texture_id,
+ normal_texture_id,
+ self.renderer.depth_tex_shadow,
+ self.renderer.VAOs[object_idx],
+ self.renderer.faces[object_idx].size,
+ self.renderer.faces[object_idx],
+ buffer)
+ finally:
+ self.renderer.r.cglBindVertexArray(0)
+
+ self.renderer.r.cglUseProgram(0)
+
+ def get_pose_in_camera(self):
+ """
+ Get instance pose in camera reference frame
+ """
+ mat = self.renderer.V.dot(self.pose_trans.T).dot(self.pose_rot).T
+ pose = np.concatenate([mat2xyz(mat), safemat2quat(mat[:3, :3].T)])
+ return pose
+
+ def set_position(self, pos):
+ """
+ Set position
+
+ :param pos: position
+ """
+ self.last_trans = np.copy(self.pose_trans)
+ self.pose_trans = np.ascontiguousarray(xyz2mat(pos))
+
+ def set_rotation(self, rot):
+ """
+ Set orientation
+
+ :param rot: rotation matrix
+ """
+ self.last_rot = np.copy(self.pose_rot)
+ self.pose_rot = rot
+
+ def dump(self):
+ """
+ Dump vertex and face information
+ """
+ vertices_info = []
+ faces_info = []
+ for vertex_data_index, face_index in zip(self.object.vertex_data_indices, self.object.face_indices):
+ vertices_info.append(transform_vertex(self.renderer.vertex_data[vertex_data_index],
+ pose_rot=self.pose_rot,
+ pose_trans=self.pose_trans))
+ faces_info.append(self.renderer.faces[face_index])
+ return vertices_info, faces_info
+
+ def __str__(self):
+ return "Instance({}) -> Object({})".format(self.id, self.object.id)
+
+ def __repr__(self):
+ return self.__str__()
diff --git a/gibson2/render/mesh_renderer/materials.py b/gibson2/render/mesh_renderer/materials.py
new file mode 100644
index 000000000..c651f2c7f
--- /dev/null
+++ b/gibson2/render/mesh_renderer/materials.py
@@ -0,0 +1,231 @@
+import gibson2
+import numpy as np
+import os
+import json
+import random
+import math
+
+
+class Material(object):
+ """
+ Material class used for iG renderer
+ """
+
+ def __init__(self,
+ material_type='color',
+ kd=[0.5, 0.5, 0.5],
+ texture_id=None,
+ metallic_texture_id=None,
+ roughness_texture_id=None,
+ normal_texture_id=None,
+ transform_param=[1, 1, 0]):
+ """
+ :param material_type: color or texture
+ :param kd: color parameters
+ :param texture_id: albedo texture id
+ :param metallic_texture_id: metallic texture id
+ :param roughness_texture_id: roughness texture id
+ :param normal_texture_id: normal texture id
+ :param transform_param: x scale, y scale, rotation
+ """
+ self.material_type = material_type
+ self.kd = kd
+ self.texture_id = texture_id
+ self.metallic_texture_id = metallic_texture_id
+ self.roughness_texture_id = roughness_texture_id
+ self.normal_texture_id = normal_texture_id
+ self.transform_param = transform_param
+
+ def is_texture(self):
+ """
+ Returns whether this material has texture (as opposed to single color)
+ """
+ return self.material_type == 'texture'
+
+ def is_pbr_texture(self):
+ """
+ Returns whether this material can be used for PBR
+ """
+ return self.material_type == 'texture' and \
+ self.metallic_texture_id is not None and \
+ self.roughness_texture_id is not None and \
+ self.normal_texture_id is not None
+
+ def __str__(self):
+ return "Material(material_type: {}, texture_id: {}, metallic_texture_id:{}, roughness_texture_id:{}, " \
+ "normal_texture_id:{}, color: {})".format(
+ self.material_type,
+ self.texture_id, self.metallic_texture_id,
+ self.roughness_texture_id, self.normal_texture_id,
+ self.kd)
+
+ def __repr__(self):
+ return self.__str__()
+
+
+class RandomizedMaterial(Material):
+ """
+ Randomized Material class for material randomization
+ """
+
+ def __init__(self,
+ material_classes,
+ material_type='texture',
+ kd=[0.5, 0.5, 0.5],
+ texture_id=None,
+ metallic_texture_id=None,
+ roughness_texture_id=None,
+ normal_texture_id=None):
+ """
+ :param material_classes: a list of material classes
+ :param material_type: color or texture
+ :param kd: color parameters
+ :param texture_id: albedo texture id
+ :param metallic_texture_id: metallic texture id
+ :param roughness_texture_id: roughness texture id
+ :param normal_texture_id: normal texture id
+ :param transform_param: x scale, y scale, rotation
+ """
+ super(RandomizedMaterial, self).__init__(
+ material_type=material_type,
+ kd=kd,
+ texture_id=texture_id,
+ metallic_texture_id=metallic_texture_id,
+ roughness_texture_id=roughness_texture_id,
+ normal_texture_id=normal_texture_id,
+ )
+ # a list of material classes, str
+ self.material_classes = \
+ self.postprocess_material_classes(material_classes)
+ # a dict that maps from material class to a list of material files
+ # {
+ # 'wood': [
+ # {
+ # 'diffuse': diffuse_path,
+ # 'metallic': metallic_path,
+ # 'roughness': None
+ # 'normal': normal_path
+ # },
+ # {
+ # ...
+ # }
+ # ],
+ # 'metal': [
+ # ...
+ # ]
+ # }
+ self.material_files = self.get_material_files()
+ # a dict that maps from material class to a list of texture ids
+ # {
+ # 'wood': [
+ # {
+ # 'diffuse': 25,
+ # 'metallic': 26,
+ # 'roughness': None
+ # 'normal': 27
+ # },
+ # {
+ # ...
+ # }
+ # ],
+ # 'metal': [
+ # ...
+ # ]
+ # }
+
+ # WILL be populated when the texture is actually loaded
+ self.material_ids = None
+
+ self.random_class = None
+ self.random_instance = None
+
+ def postprocess_material_classes(self, material_classes):
+ """
+ Postprocess material classes.
+ We currently do not have all the annotated materials, so we will need
+ to convert the materials that we don't have to their closest neighbors
+ that we do have.
+
+ :param material_classes: original material classes
+ :return material_classes: postprocessed material classes
+ """
+ for i in range(len(material_classes)):
+ material_class = material_classes[i]
+ if material_class in ['rock']:
+ material_class = 'rocks'
+ elif material_class in ['fence', '']:
+ material_class = 'wood'
+ elif material_class in ['flower', 'leaf']:
+ material_class = 'moss'
+ elif material_class in ['cork']:
+ material_class = 'chipboard'
+ elif material_class in ['mirror', 'glass', 'screen']:
+ material_class = 'metal'
+ elif material_class in ['painting', 'picture']:
+ material_class = 'paper'
+ material_classes[i] = material_class
+ return material_classes
+
+ def get_material_files(self):
+ """
+ Retrieve the material files from the material dataset,
+ given the material classes
+
+ :return material_files: a dict that maps material_class to material files
+ """
+ material_dir = os.path.join(gibson2.ig_dataset_path, 'materials')
+ material_json_file = os.path.join(material_dir, 'materials.json')
+ assert os.path.isfile(material_json_file), \
+ 'cannot find material files: {}'.format(material_json_file)
+ with open(material_json_file) as f:
+ all_materials = json.load(f)
+
+ material_files = {}
+ for material_class in self.material_classes:
+ material_files[material_class] = []
+ assert material_class in all_materials, \
+ 'unknown material class: {}'.format(material_class)
+
+ # append gibson2.ig_dataset_path/materials to the beginning
+ for material_instance in all_materials[material_class]:
+ for key in all_materials[material_class][material_instance]:
+ value = all_materials[material_class][material_instance][key]
+ if value is not None:
+ value = os.path.join(material_dir, value)
+ all_materials[material_class][material_instance][key] = value
+ material_files[material_class] = list(
+ all_materials[material_class].values())
+ return material_files
+
+ def randomize(self):
+ """
+ Randomize the material by randomly sampling a material id that belongs
+ to one of the material classes. All potential materials have already
+ been loaded to memory.
+ """
+ if self.material_ids is None:
+ return
+ self.random_class = random.choice(list(self.material_ids.keys()))
+ self.random_instance = random.choice(
+ self.material_ids[self.random_class])
+ self.texture_id = self.random_instance['diffuse']
+ self.metallic_texture_id = self.random_instance['metallic']
+ self.roughness_texture_id = self.random_instance['roughness']
+ self.normal_texture_id = self.random_instance['normal']
+
+ # scaling by 4 is typically good
+ scale = np.random.normal(loc=4, scale=1)
+ # scaling should be at least 2.
+ scale = max(scale, 2)
+ rotation = random.randint(0, 3) * math.pi / 2.
+ self.transform_param = [scale, scale, rotation]
+
+ def __str__(self):
+ return (
+ "RandomizedMaterial(material_type: {}, texture_id: {}, "
+ "metallic_texture_id: {}, roughness_texture_id: {}, "
+ "normal_texture_id: {}, color: {}, material_classes: {})".format(
+ self.material_type, self.texture_id, self.metallic_texture_id,
+ self.roughness_texture_id, self.normal_texture_id, self.kd,
+ self.material_classes)
+ )
diff --git a/gibson2/render/mesh_renderer/mesh_renderer_cpu.py b/gibson2/render/mesh_renderer/mesh_renderer_cpu.py
index 65aad0ac3..e6bc3243d 100644
--- a/gibson2/render/mesh_renderer/mesh_renderer_cpu.py
+++ b/gibson2/render/mesh_renderer/mesh_renderer_cpu.py
@@ -2,609 +2,26 @@ import logging
import platform
from gibson2.render.mesh_renderer import tinyobjloader
import gibson2
-import pybullet as p
import gibson2.render.mesh_renderer as mesh_renderer
from gibson2.render.mesh_renderer.get_available_devices import get_available_devices
from gibson2.utils.mesh_util import perspective, lookat, xyz2mat, quat2rotmat, mat2xyz, \
safemat2quat, xyzw2wxyz, ortho, transform_vertex
+from gibson2.utils.constants import AVAILABLE_MODALITIES, ShadowPass
import numpy as np
import os
import sys
-import json
-from IPython import embed
-import random
-import math
-
+from gibson2.render.mesh_renderer.materials import Material, RandomizedMaterial
+from gibson2.render.mesh_renderer.instances import Instance, InstanceGroup, Robot
+from gibson2.render.mesh_renderer.visual_object import VisualObject
from PIL import Image
-
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
Image.MAX_IMAGE_PIXELS = None
-class VisualObject(object):
- """
- A visual object manages a set of VAOs and textures, one wavefront obj file loads into openGL, and managed
- by a VisualObject
- """
-
- def __init__(self, filename, VAO_ids, vertex_data_indices, face_indices, id, renderer):
- """
- :param filename: filename of the obj file
- :param VAO_ids: VAO_ids in OpenGL
- :param id: renderer maintains a list of visual objects, id is the handle of a visual object
- :param renderer: pointer to the renderer
- """
- self.VAO_ids = VAO_ids
- self.filename = filename
- self.texture_ids = []
- self.id = id
- self.renderer = renderer
- self.vertex_data_indices = vertex_data_indices
- self.face_indices = face_indices
-
- def __str__(self):
- return "Object({})->VAO({})".format(self.id, self.VAO_ids)
-
- def __repr__(self):
- return self.__str__()
-
-
-class InstanceGroup(object):
- """
- InstanceGroup is a set of visual objects, it is grouped together because they are kinematically connected.
- Robots and articulated objects are represented as instance groups.
- """
-
- def __init__(self,
- objects,
- id,
- link_ids,
- pybullet_uuid,
- class_id,
- poses_trans,
- poses_rot,
- dynamic,
- robot=None,
- use_pbr=True,
- use_pbr_mapping=True,
- shadow_caster=True
- ):
- """
- :param objects: visual objects
- :param id: id this instance_group
- :param link_ids: link_ids in pybullet
- :param pybullet_uuid: body id in pybullet
- :param class_id: class_id to render semantics
- :param poses_trans: initial translations for each visual object
- :param poses_rot: initial rotation matrix for each visual object
- :param dynamic: is the instance group dynamic or not
- :param robot: The robot associated with this InstanceGroup
- """
- # assert(len(objects) > 0) # no empty instance group
- self.objects = objects
- self.poses_trans = poses_trans
- self.poses_rot = poses_rot
- self.id = id
- self.link_ids = link_ids
- self.class_id = class_id
- self.robot = robot
- if len(objects) > 0:
- self.renderer = objects[0].renderer
- else:
- self.renderer = None
-
- self.pybullet_uuid = pybullet_uuid
- self.dynamic = dynamic
- self.tf_tree = None
- self.use_pbr = use_pbr
- self.use_pbr_mapping = use_pbr_mapping
- self.shadow_caster = shadow_caster
- self.roughness = 1
- self.metalness = 0
- # Determines whether object will be rendered
- self.hidden = False
- # Indices into optimized buffers such as color information and transformation buffer
- # These values are used to set buffer information during simulation
- self.or_buffer_indices = None
-
- def render(self, shadow_pass=0):
- """
- Render this instance group
- """
- if self.renderer is None:
- return
-
- self.renderer.r.initvar(self.renderer.shaderProgram,
- self.renderer.V,
- self.renderer.lightV,
- shadow_pass,
- self.renderer.P,
- self.renderer.lightP,
- self.renderer.camera,
- self.renderer.lightpos,
- self.renderer.lightcolor)
-
- for i, visual_object in enumerate(self.objects):
- for object_idx in visual_object.VAO_ids:
- self.renderer.r.init_pos_instance(self.renderer.shaderProgram,
- self.poses_trans[i],
- self.poses_rot[i])
- current_material = self.renderer.materials_mapping[self.renderer.mesh_materials[object_idx]]
- self.renderer.r.init_material_instance(self.renderer.shaderProgram,
- float(
- self.class_id) / 255.0,
- current_material.kd,
- float(current_material.is_texture()),
- float(self.use_pbr),
- float(self.use_pbr_mapping),
- float(self.metalness),
- float(self.roughness),
- current_material.transform_param
- )
-
- try:
- texture_id = current_material.texture_id
- metallic_texture_id = current_material.metallic_texture_id
- roughness_texture_id = current_material.roughness_texture_id
- normal_texture_id = current_material.normal_texture_id
-
- if texture_id is None:
- texture_id = -1
- if metallic_texture_id is None:
- metallic_texture_id = -1
- if roughness_texture_id is None:
- roughness_texture_id = -1
- if normal_texture_id is None:
- normal_texture_id = -1
-
- if self.renderer.msaa:
- buffer = self.renderer.fbo_ms
- else:
- buffer = self.renderer.fbo
- self.renderer.r.draw_elements_instance(
- self.renderer.materials_mapping[self.renderer.mesh_materials[object_idx]].is_texture(),
- texture_id,
- metallic_texture_id,
- roughness_texture_id,
- normal_texture_id,
- self.renderer.depth_tex_shadow,
- self.renderer.VAOs[object_idx],
- self.renderer.faces[object_idx].size,
- self.renderer.faces[object_idx],
- buffer)
- finally:
- self.renderer.r.cglBindVertexArray(0)
- self.renderer.r.cglUseProgram(0)
-
- def get_pose_in_camera(self):
- mat = self.renderer.V.dot(self.pose_trans.T).dot(self.pose_rot).T
- pose = np.concatenate([mat2xyz(mat), safemat2quat(mat[:3, :3].T)])
- return pose
-
- def set_position(self, pos):
- """
- Set positions for each part of this InstanceGroup
-
- :param pos: New translations
- """
-
- self.pose_trans = np.ascontiguousarray(xyz2mat(pos))
-
- def set_rotation(self, quat):
- """
- Set rotations for each part of this InstanceGroup
-
- :param quat: New quaternion in w,x,y,z
- """
-
- self.pose_rot = np.ascontiguousarray(quat2rotmat(quat))
-
- def dump(self):
- vertices_info = []
- faces_info = []
- for i, visual_obj in enumerate(self.objects):
- for vertex_data_index, face_data_index in zip(visual_obj.vertex_data_indices, visual_obj.face_indices):
- vertices_info.append(transform_vertex(self.renderer.vertex_data[vertex_data_index],
- pose_trans=self.poses_trans[i],
- pose_rot=self.poses_rot[i]))
- faces_info.append(self.renderer.faces[face_data_index])
- return vertices_info, faces_info
-
- def __str__(self):
- return "InstanceGroup({}) -> Objects({})".format(
- self.id, ",".join([str(object.id) for object in self.objects]))
-
- def __repr__(self):
- return self.__str__()
-
-
-class Robot(InstanceGroup):
- def __init__(self, *args, **kwargs):
- super(Robot, self).__init__(*args, **kwargs)
-
- def __str__(self):
- return "Robot({}) -> Objects({})".format(
- self.id, ",".join([str(object.id) for object in self.objects]))
-
-
-class Instance(object):
- """
- Instance is one instance of a visual object. One visual object can have multiple instances to save memory.
- """
-
- def __init__(self, object, id, class_id, pybullet_uuid, pose_trans, pose_rot, dynamic, softbody,
- use_pbr=True,
- use_pbr_mapping=True,
- shadow_caster=True
- ):
- self.object = object
- self.pose_trans = pose_trans
- self.pose_rot = pose_rot
- self.id = id
- self.class_id = class_id
- self.renderer = object.renderer
- self.pybullet_uuid = pybullet_uuid
- self.dynamic = dynamic
- self.softbody = softbody
- self.use_pbr = use_pbr
- self.use_pbr_mapping = use_pbr_mapping
- self.shadow_caster = shadow_caster
- self.roughness = 1
- self.metalness = 0
- # Determines whether object will be rendered
- self.hidden = False
- # Indices into optimized buffers such as color information and transformation buffer
- # These values are used to set buffer information during simulation
- self.or_buffer_indices = None
-
- def render(self, shadow_pass=0):
- """
- Render this instance
- shadow_pass = 0: normal rendering mode, disable shadow
- shadow_pass = 1: enable_shadow, rendering depth map from light space
- shadow_pass = 2: use rendered depth map to calculate shadow
- """
- if self.renderer is None:
- return
-
- # softbody: reload vertex position
- if self.softbody:
- # construct new vertex position into shape format
- object_idx = self.object.VAO_ids[0]
- vertices = p.getMeshData(self.pybullet_uuid)[1]
- vertices_flattened = [
- item for sublist in vertices for item in sublist]
- vertex_position = np.array(vertices_flattened).reshape(
- (len(vertices_flattened) // 3, 3))
- shape = self.renderer.shapes[object_idx]
- n_indices = len(shape.mesh.indices)
- np_indices = shape.mesh.numpy_indices().reshape((n_indices, 3))
- shape_vertex_index = np_indices[:, 0]
- shape_vertex = vertex_position[shape_vertex_index]
-
- # update new vertex position in buffer data
- new_data = self.renderer.vertex_data[object_idx]
- new_data[:, 0:shape_vertex.shape[1]] = shape_vertex
- new_data = new_data.astype(np.float32)
-
- # transform and rotation already included in mesh data
- self.pose_trans = np.eye(4)
- self.pose_rot = np.eye(4)
-
- # update buffer data into VBO
- self.renderer.r.render_softbody_instance(
- self.renderer.VAOs[object_idx], self.renderer.VBOs[object_idx], new_data)
-
- self.renderer.r.initvar(self.renderer.shaderProgram,
- self.renderer.V,
- self.renderer.lightV,
- shadow_pass,
- self.renderer.P,
- self.renderer.lightP,
- self.renderer.camera,
- self.renderer.lightpos,
- self.renderer.lightcolor)
-
- self.renderer.r.init_pos_instance(self.renderer.shaderProgram,
- self.pose_trans,
- self.pose_rot)
-
- for object_idx in self.object.VAO_ids:
- current_material = self.renderer.materials_mapping[
- self.renderer.mesh_materials[object_idx]]
- self.renderer.r.init_material_instance(self.renderer.shaderProgram,
- float(self.class_id) / 255.0,
- current_material.kd,
- float(current_material.is_texture()),
- float(self.use_pbr),
- float(self.use_pbr_mapping),
- float(self.metalness),
- float(self.roughness),
- current_material.transform_param)
- try:
-
- texture_id = current_material.texture_id
- metallic_texture_id = current_material.metallic_texture_id
- roughness_texture_id = current_material.roughness_texture_id
- normal_texture_id = current_material.normal_texture_id
-
- if texture_id is None:
- texture_id = -1
- if metallic_texture_id is None:
- metallic_texture_id = -1
- if roughness_texture_id is None:
- roughness_texture_id = -1
- if normal_texture_id is None:
- normal_texture_id = -1
-
- if self.renderer.msaa:
- buffer = self.renderer.fbo_ms
- else:
- buffer = self.renderer.fbo
-
- self.renderer.r.draw_elements_instance(
- self.renderer.materials_mapping[self.renderer.mesh_materials[object_idx]].is_texture(),
- texture_id,
- metallic_texture_id,
- roughness_texture_id,
- normal_texture_id,
- self.renderer.depth_tex_shadow,
- self.renderer.VAOs[object_idx],
- self.renderer.faces[object_idx].size,
- self.renderer.faces[object_idx],
- buffer)
- finally:
- self.renderer.r.cglBindVertexArray(0)
-
- self.renderer.r.cglUseProgram(0)
-
- def get_pose_in_camera(self):
- mat = self.renderer.V.dot(self.pose_trans.T).dot(self.pose_rot).T
- pose = np.concatenate([mat2xyz(mat), safemat2quat(mat[:3, :3].T)])
- return pose
-
- def set_position(self, pos):
- self.pose_trans = np.ascontiguousarray(xyz2mat(pos))
-
- def set_rotation(self, quat):
- """
- :param quat: New quaternion in w,x,y,z
- """
- self.pose_rot = np.ascontiguousarray(quat2rotmat(quat))
-
- def dump(self):
- vertices_info = []
- faces_info = []
- for vertex_data_index, face_index in zip(self.object.vertex_data_indices, self.object.face_indices):
- vertices_info.append(transform_vertex(self.renderer.vertex_data[vertex_data_index],
- pose_rot=self.pose_rot,
- pose_trans=self.pose_trans))
- faces_info.append(self.renderer.faces[face_index])
- return vertices_info, faces_info
-
- def __str__(self):
- return "Instance({}) -> Object({})".format(self.id, self.object.id)
-
- def __repr__(self):
- return self.__str__()
-
-
-class Material(object):
- def __init__(self, material_type='color', kd=[0.5, 0.5, 0.5],
- texture_id=None, metallic_texture_id=None,
- roughness_texture_id=None, normal_texture_id=None,
- transform_param=[1, 1, 0]):
- self.material_type = material_type
- self.kd = kd
- self.texture_id = texture_id
- self.metallic_texture_id = metallic_texture_id
- self.roughness_texture_id = roughness_texture_id
- self.normal_texture_id = normal_texture_id
- self.transform_param = transform_param # x scale, y scale, rotation
-
- def is_texture(self):
- return self.material_type == 'texture'
-
- def is_pbr_texture(self):
- return self.material_type == 'texture' and self.metallic_texture_id is not None \
- and self.roughness_texture_id is not None and self.normal_texture_id is not None
-
- def __str__(self):
- return "Material(material_type: {}, texture_id: {}, metallic_texture_id:{}, roughness_texture_id:{}, " \
- "normal_texture_id:{}, color: {})".format(self.material_type, self.texture_id, self.metallic_texture_id,
- self.roughness_texture_id, self.normal_texture_id,
- self.kd)
-
- def __repr__(self):
- return self.__str__()
-
-
-class RandomizedMaterial(Material):
- def __init__(self,
- material_classes,
- material_type='texture',
- kd=[0.5, 0.5, 0.5],
- texture_id=None,
- metallic_texture_id=None,
- roughness_texture_id=None,
- normal_texture_id=None):
- super(RandomizedMaterial, self).__init__(
- material_type=material_type,
- kd=kd,
- texture_id=texture_id,
- metallic_texture_id=metallic_texture_id,
- roughness_texture_id=roughness_texture_id,
- normal_texture_id=normal_texture_id,
- )
- # a list of material classes, str
- self.material_classes = \
- self.postprocess_material_classes(material_classes)
- # a dict that maps from material class to a list of material files
- # {
- # 'wood': [
- # {
- # 'diffuse': diffuse_path,
- # 'metallic': metallic_path,
- # 'roughness': None
- # 'normal': normal_path
- # },
- # {
- # ...
- # }
- # ],
- # 'metal': [
- # ...
- # ]
- # }
- self.material_files = self.get_material_files()
- # a dict that maps from material class to a list of texture ids
- # {
- # 'wood': [
- # {
- # 'diffuse': 25,
- # 'metallic': 26,
- # 'roughness': None
- # 'normal': 27
- # },
- # {
- # ...
- # }
- # ],
- # 'metal': [
- # ...
- # ]
- # }
- # WILL be populated when the texture is actually loaded
- self.material_ids = None
-
- self.random_class = None
- self.random_instance = None
-
- # We currently do not have all the annotated materials, so we will need
- # to convert the materials that we don't have to their closest neighbors
- # that we do have.
- def postprocess_material_classes(self, material_classes):
- for i in range(len(material_classes)):
- material_class = material_classes[i]
- if material_class in ['rock']:
- material_class = 'rocks'
- elif material_class in ['fence', '']:
- material_class = 'wood'
- elif material_class in ['flower', 'leaf']:
- material_class = 'moss'
- elif material_class in ['cork']:
- material_class = 'chipboard'
- elif material_class in ['mirror', 'glass', 'screen']:
- material_class = 'metal'
- elif material_class in ['painting', 'picture']:
- material_class = 'paper'
- material_classes[i] = material_class
- return material_classes
-
- def get_material_files(self):
- material_dir = os.path.join(gibson2.ig_dataset_path, 'materials')
- material_json_file = os.path.join(material_dir, 'materials.json')
- assert os.path.isfile(material_json_file), \
- 'cannot find material files: {}'.format(material_json_file)
- with open(material_json_file) as f:
- all_materials = json.load(f)
-
- material_files = {}
- for material_class in self.material_classes:
- material_files[material_class] = []
- assert material_class in all_materials, \
- 'unknown material class: {}'.format(material_class)
-
- # append gibson2.ig_dataset_path/materials to the beginning
- for material_instance in all_materials[material_class]:
- for key in all_materials[material_class][material_instance]:
- value = all_materials[material_class][material_instance][key]
- if value is not None:
- value = os.path.join(material_dir, value)
- all_materials[material_class][material_instance][key] = value
- material_files[material_class] = list(
- all_materials[material_class].values())
- return material_files
-
- def randomize(self):
- if self.material_ids is None:
- return
- self.random_class = random.choice(list(self.material_ids.keys()))
- self.random_instance = random.choice(
- self.material_ids[self.random_class])
- self.texture_id = self.random_instance['diffuse']
- self.metallic_texture_id = self.random_instance['metallic']
- self.roughness_texture_id = self.random_instance['roughness']
- self.normal_texture_id = self.random_instance['normal']
- # self.transform_param = transform_param # x scale, y scale, rotation
- scale = np.random.normal(loc=4, scale=1) # scaling by 4 is typically good
- scale = max(scale, 2) # scaling should be at least 2.
- rotation = random.randint(0, 3) * math.pi / 2.
- self.transform_param = [scale, scale, rotation]
-
- def __str__(self):
- return (
- "RandomizedMaterial(material_type: {}, texture_id: {}, "
- "metallic_texture_id: {}, roughness_texture_id: {}, "
- "normal_texture_id: {}, color: {}, material_classes: {})".format(
- self.material_type, self.texture_id, self.metallic_texture_id,
- self.roughness_texture_id, self.normal_texture_id, self.kd,
- self.material_classes)
- )
-
-
-class MeshRendererSettings(object):
- def __init__(self,
- use_fisheye=False,
- msaa=False,
- enable_shadow=False,
- enable_pbr=True,
- env_texture_filename=os.path.join(gibson2.ig_dataset_path, 'scenes', 'background',
- 'photo_studio_01_2k.hdr'),
- env_texture_filename2=os.path.join(gibson2.ig_dataset_path, 'scenes', 'background',
- 'photo_studio_01_2k.hdr'),
- env_texture_filename3=os.path.join(gibson2.ig_dataset_path, 'scenes', 'background',
- 'photo_studio_01_2k.hdr'),
- light_modulation_map_filename='',
- optimized=False,
- skybox_size=20.,
- light_dimming_factor=1.0,
- fullscreen=False,
- glfw_gl_version=None,
- ):
- self.use_fisheye = use_fisheye
- self.msaa = msaa
- self.enable_shadow = enable_shadow
- self.env_texture_filename = env_texture_filename
- self.env_texture_filename2 = env_texture_filename2
- self.env_texture_filename3 = env_texture_filename3
- self.optimized = optimized
- self.skybox_size = skybox_size
- self.light_modulation_map_filename = light_modulation_map_filename
- self.light_dimming_factor = light_dimming_factor
- self.enable_pbr = enable_pbr
- self.fullscreen = fullscreen
- if glfw_gl_version is not None:
- self.glfw_gl_version = glfw_gl_version
- else:
- if platform.system() == 'Darwin':
- self.glfw_gl_version = [4, 1]
- else:
- self.glfw_gl_version = [4, 5]
-
- def get_fastest(self):
- self.msaa = False
- self.enable_shadow = False
- return self
-
- def get_best(self):
- self.msaa = True
- self.enable_shadow = True
- return self
-
-
class MeshRenderer(object):
"""
- MeshRenderer is a lightweight OpenGL renderer. It manages a set of visual objects, and instances of those objects.
+ MeshRenderer is a lightweight OpenGL renderer.
+ It manages a set of visual objects, and instances of those objects.
It also manage a device to create OpenGL context on, and create buffers to store rendering results.
"""
@@ -621,6 +38,7 @@ class MeshRenderer(object):
self.windowShaderProgram = None
self.fbo = None
self.color_tex_rgb, self.color_tex_normal, self.color_tex_semantics, self.color_tex_3d = None, None, None, None
+ self.color_tex_scene_flow, self.color_tex_optical_flow = None, None
self.depth_tex = None
self.VAOs = []
self.VBOs = []
@@ -637,8 +55,12 @@ class MeshRenderer(object):
self.optimized = rendering_settings.optimized
self.texture_files = {}
self.enable_shadow = rendering_settings.enable_shadow
-
self.platform = platform.system()
+ self.optimization_process_executed = False
+ self.pose_trans_array = None
+ self.pose_rot_array = None
+ self.last_trans_array = None
+ self.last_rot_array = None
device = None
"""
@@ -646,7 +68,7 @@ class MeshRenderer(object):
device is the minor id
you can get it from nvidia-smi -a
- The minor number for the device is such that the Nvidia device node file for each GPU will have the form
+ The minor number for the device is such that the Nvidia device node file for each GPU will have the form
/dev/nvidia[minor number]. Available only on Linux platform.
TODO: add device management for windows platform.
@@ -661,10 +83,15 @@ class MeshRenderer(object):
available_devices = get_available_devices()
if device_idx < len(available_devices):
device = available_devices[device_idx]
- logging.info("Using device {} for rendering".format(device))
+ logging.info(
+ "Using device {} for rendering".format(device))
else:
logging.info(
"Device index is larger than number of devices, falling back to use 0")
+ logging.info(
+ "If you have trouble using EGL, please visit our trouble shooting guide",
+ "at http://svl.stanford.edu/igibson/docs/issues.html")
+
device = 0
self.device_idx = device_idx
@@ -675,20 +102,22 @@ class MeshRenderer(object):
exit()
if self.platform == 'Darwin':
from gibson2.render.mesh_renderer import GLFWRendererContext
- self.r = GLFWRendererContext.GLFWRendererContext(width, height,
- int(self.rendering_settings.glfw_gl_version[0]),
- int(self.rendering_settings.glfw_gl_version[1]),
- False,
- rendering_settings.fullscreen
- )
+ self.r = GLFWRendererContext.GLFWRendererContext(
+ width, height,
+ int(self.rendering_settings.glfw_gl_version[0]),
+ int(self.rendering_settings.glfw_gl_version[1]),
+ False,
+ rendering_settings.fullscreen
+ )
elif self.platform == 'Windows':
from gibson2.render.mesh_renderer import VRRendererContext
- self.r = VRRendererContext.VRRendererContext(width, height,
- int(self.rendering_settings.glfw_gl_version[0]),
- int(self.rendering_settings.glfw_gl_version[1]),
- True,
- rendering_settings.fullscreen
- )
+ self.r = VRRendererContext.VRRendererContext(
+ width, height,
+ int(self.rendering_settings.glfw_gl_version[0]),
+ int(self.rendering_settings.glfw_gl_version[1]),
+ True,
+ rendering_settings.fullscreen
+ )
else:
from gibson2.render.mesh_renderer import EGLRendererContext
self.r = EGLRendererContext.EGLRendererContext(
@@ -710,7 +139,6 @@ class MeshRenderer(object):
logging.error('Fisheye is currently not supported.')
exit(1)
else:
-
if self.platform == 'Darwin':
self.shaderProgram = self.r.compile_shader_meshrenderer(
"".join(open(
@@ -763,6 +191,9 @@ class MeshRenderer(object):
V = lookat(self.camera, self.target, up=self.up)
self.V = np.ascontiguousarray(V, np.float32)
+ self.last_V = np.copy(self.V)
+ self.cache = np.copy(self.V)
+
self.P = np.ascontiguousarray(P, np.float32)
self.materials_mapping = {}
self.mesh_materials = []
@@ -776,7 +207,12 @@ class MeshRenderer(object):
if not self.platform == 'Darwin' and rendering_settings.enable_pbr:
self.setup_pbr()
+ self.setup_lidar_param()
+
def setup_pbr(self):
+ """
+ Set up physics-based rendering
+ """
if os.path.exists(self.rendering_settings.env_texture_filename) or \
os.path.exists(self.rendering_settings.env_texture_filename2) or \
os.path.exists(self.rendering_settings.env_texture_filename3):
@@ -794,25 +230,38 @@ class MeshRenderer(object):
self.r.loadSkyBox(self.skyboxShaderProgram, self.skybox_size)
def set_light_position_direction(self, position, target):
+ """
+ Set light position and orientation
+
+ :param position: light position
+ :param target: light target
+ """
self.lightpos = position
self.lightV = lookat(self.lightpos, target, [0, 1, 0])
self.lightP = ortho(-5, 5, -5, 5, -10, 20.0)
def setup_framebuffer(self):
"""
- Set up RGB, surface normal, depth and segmentation framebuffers for the renderer
+ Set up framebuffers for the renderer
"""
[self.fbo, self.color_tex_rgb, self.color_tex_normal, self.color_tex_semantics, self.color_tex_3d,
+ self.color_tex_scene_flow, self.color_tex_optical_flow,
self.depth_tex] = self.r.setup_framebuffer_meshrenderer(self.width, self.height)
if self.msaa:
[self.fbo_ms, self.color_tex_rgb_ms, self.color_tex_normal_ms, self.color_tex_semantics_ms,
- self.color_tex_3d_ms,
+ self.color_tex_3d_ms, self.color_tex_scene_flow_ms, self.color_tex_optical_flow_ms,
self.depth_tex_ms] = self.r.setup_framebuffer_meshrenderer_ms(self.width, self.height)
self.depth_tex_shadow = self.r.allocateTexture(self.width, self.height)
def load_texture_file(self, tex_filename):
+ """
+ Load the texture file into the renderer
+
+ :param tex_filename: texture file filename
+ :return texture_id: texture id of this texture in the renderer
+ """
# if texture is None or does not exist, return None
if tex_filename is None or (not os.path.isfile(tex_filename)):
return None
@@ -825,14 +274,20 @@ class MeshRenderer(object):
# assume optimized renderer will have texture id starting from 0
texture_id = len(self.texture_files)
else:
- texture_id = self.r.loadTexture(tex_filename)
+ texture_id = self.r.loadTexture(
+ tex_filename, self.rendering_settings.texture_scale)
self.textures.append(texture_id)
self.texture_files[tex_filename] = texture_id
return texture_id
- # populate material_ids with the texture id assigned by the renderer
def load_randomized_material(self, material):
+ """
+ Load all the texture files in the RandomizedMaterial.
+ Populate material_ids with the texture id assigned by the renderer.
+
+ :param material: an instance of RandomizedMaterial
+ """
# if the material has already been initialized
if material.material_ids is not None:
return
@@ -868,8 +323,14 @@ class MeshRenderer(object):
:param input_kd: if loading material fails, use this default material. input_kd should be a list of length 3
:param texture_scale: texture scale for the object, downsample to save memory.
:param load_texture: load texture or not
+ :param overwrite_material: whether to overwrite the default Material (usually with a RandomizedMaterial for material randomization)
:return: VAO_ids
"""
+ if self.optimization_process_executed and self.optimized:
+ logging.error("Using optimized renderer and optimization process is already excuted, cannot add new "
+ "objects")
+ return
+
reader = tinyobjloader.ObjReader()
logging.info("Loading {}".format(obj_path))
ret = reader.ParseFromFile(obj_path)
@@ -985,10 +446,10 @@ class MeshRenderer(object):
else:
shape_texcoord = vertex_texcoord[shape_texcoord_index]
- if not transform_orn is None:
+ if transform_orn is not None:
orn = quat2rotmat(xyzw2wxyz(transform_orn))
shape_vertex = shape_vertex.dot(orn[:3, :3].T)
- if not transform_pos is None:
+ if transform_pos is not None:
# shape_vertex is using the scale of original obj file
# before scaling in the URDF.
# However, transform_pos is already scaled by "scale"
@@ -1030,14 +491,10 @@ class MeshRenderer(object):
vertex_data_indices.append(len(self.vertex_data))
self.vertex_data.append(vertexData)
self.shapes.append(shape)
- if material_id == -1: # if material loading fails, use the default material
- mapping_idx = len(materials) + material_count
- mat = self.materials_mapping[mapping_idx]
+ # if material loading fails, use the default material
+ if material_id == -1:
self.mesh_materials.append(len(materials) + material_count)
else:
- mapping_idx = material_id + material_count
- mat = self.materials_mapping[mapping_idx]
- tex_id = mat.texture_id
self.mesh_materials.append(material_id + material_count)
logging.debug('mesh_materials: {}'.format(self.mesh_materials))
@@ -1049,30 +506,12 @@ class MeshRenderer(object):
self.visual_objects.append(new_obj)
return VAO_ids
- def update_dynamic_positions(self):
- """
- A function to update all dynamic positions.
- """
- trans_data = []
- rot_data = []
-
- for instance in self.instances:
- if isinstance(instance, Instance):
- trans_data.append(instance.pose_trans)
- rot_data.append(instance.pose_rot)
- elif isinstance(instance, InstanceGroup) or isinstance(instance, Robot):
- trans_data.extend(instance.poses_trans)
- rot_data.extend(instance.poses_rot)
-
- self.pose_trans_array = np.ascontiguousarray(np.concatenate(trans_data, axis=0))
- self.pose_rot_array = np.ascontiguousarray(np.concatenate(rot_data, axis=0))
-
def add_instance(self,
object_id,
pybullet_uuid=None,
class_id=0,
- pose_rot=np.eye(4),
pose_trans=np.eye(4),
+ pose_rot=np.eye(4),
dynamic=False,
softbody=False,
use_pbr=True,
@@ -1080,7 +519,23 @@ class MeshRenderer(object):
shadow_caster=True):
"""
Create instance for a visual object and link it to pybullet
+
+ :param object_id: id of visual object
+ :param pybullet_uuid: body id in pybullet
+ :param class_id: class_id to render semantics
+ :param pose_trans: initial translations for the visual object
+ :param pose_rot: initial rotation matrix for the visual object
+ :param dynamic: whether the instance is dynamic
+ :param softbody: whether the instance is soft body
+ :param use_pbr: whether to use PBR
+ :param use_pbr_mapping: whether to use PBR mapping
+ :param shadow_caster: whether to cast shadow
"""
+ if self.optimization_process_executed and self.optimized:
+ logging.error("Using optimized renderer and optimization process is already excuted, cannot add new "
+ "objects")
+ return
+
use_pbr = use_pbr and self.rendering_settings.enable_pbr
use_pbr_mapping = use_pbr_mapping and self.rendering_settings.enable_pbr
@@ -1100,10 +555,10 @@ class MeshRenderer(object):
def add_instance_group(self,
object_ids,
link_ids,
- poses_rot,
poses_trans,
- class_id=0,
+ poses_rot,
pybullet_uuid=None,
+ class_id=0,
dynamic=False,
robot=None,
use_pbr=True,
@@ -1111,8 +566,25 @@ class MeshRenderer(object):
shadow_caster=True):
"""
Create an instance group for a list of visual objects and link it to pybullet
+
+ :param object_ids: object ids of the visual objects
+ :param link_ids: link_ids in pybullet
+ :param poses_trans: initial translations for each visual object
+ :param poses_rot: initial rotation matrix for each visual object
+ :param pybullet_uuid: body id in pybullet
+ :param class_id: class_id to render semantics
+ :param dynamic: whether the instance group is dynamic
+ :param robot: The robot associated with this InstanceGroup
+ :param use_pbr: whether to use PBR
+ :param use_pbr_mapping: whether to use PBR mapping
+ :param shadow_caster: whether to cast shadow
"""
+ if self.optimization_process_executed and self.optimized:
+ logging.error("Using optimized renderer and optimization process is already excuted, cannot add new "
+ "objects")
+ return
+
use_pbr = use_pbr and self.rendering_settings.enable_pbr
use_pbr_mapping = use_pbr_mapping and self.rendering_settings.enable_pbr
@@ -1133,15 +605,30 @@ class MeshRenderer(object):
def add_robot(self,
object_ids,
link_ids,
- class_id,
- poses_rot,
poses_trans,
+ poses_rot,
pybullet_uuid=None,
+ class_id=0,
dynamic=False,
robot=None):
"""
- Create an instance group (a robot) for a list of visual objects and link it to pybullet
+ Create an instance group (a robot) for a list of visual objects and link it to pybullet
+
+ :param object_ids: object ids of the visual objects
+ :param link_ids: link_ids in pybullet
+ :param poses_trans: initial translations for each visual object
+ :param poses_rot: initial rotation matrix for each visual object
+ :param pybullet_uuid: body id in pybullet
+ :param class_id: class_id to render semantics
+ :param dynamic: whether the instance group is dynamic
+ :param robot: The robot associated with this InstanceGroup
"""
+
+ if self.optimization_process_executed and self.optimized:
+ logging.error("Using optimized renderer and optimization process is already excuted, cannot add new "
+ "objects")
+ return
+
robot = Robot([self.visual_objects[object_id] for object_id in object_ids],
id=len(self.instances),
link_ids=link_ids,
@@ -1150,24 +637,51 @@ class MeshRenderer(object):
poses_trans=poses_trans,
poses_rot=poses_rot,
dynamic=dynamic,
- robot=robot)
+ robot=robot,
+ use_pbr=False,
+ use_pbr_mapping=False)
self.instances.append(robot)
- def set_camera(self, camera, target, up):
+ def set_camera(self, camera, target, up, cache=False):
+ """
+ Set camera pose
+
+ :param camera: camera position
+ :param target: camera target
+ :param up: up direction
+ :param cache: whether to cache pose
+ """
self.camera = camera
self.target = target
self.up = up
+ if cache:
+ self.last_V = np.copy(self.cache)
+
V = lookat(self.camera, self.target, up=self.up)
self.V = np.ascontiguousarray(V, np.float32)
# change shadow mapping camera to be above the real camera
self.set_light_position_direction([self.camera[0], self.camera[1], 10],
[self.camera[0], self.camera[1], 0])
+ if cache:
+ self.cache = self.V
def set_z_near_z_far(self, znear, zfar):
+ """
+ Set z limit for camera
+
+ :param znear: lower limit for z
+ :param zfar: upper limit for z
+ """
self.znear = znear
self.zfar = zfar
def set_fov(self, fov):
+ """
+ Set the field of view. Given the vertical fov, set it.
+ Also, compute the horizontal fov based on the aspect ratio, and set it.
+
+ :param fov: vertical fov
+ """
self.vertical_fov = fov
self.horizontal_fov = 2 * np.arctan(np.tan(self.vertical_fov / 180.0 * np.pi / 2.0) * self.width /
self.height) / np.pi * 180.0
@@ -1176,12 +690,22 @@ class MeshRenderer(object):
self.P = np.ascontiguousarray(P, np.float32)
def set_light_color(self, color):
+ """
+ Set light color
+
+ :param color: light color
+ """
self.lightcolor = color
def get_intrinsics(self):
+ """
+ Get camera intrinsics
+
+ :return: camera instrincs
+ """
P = self.P
w, h = self.width, self.height
- znear, zfar = self.znear, self.zfar
+ znear = self.znear
a = (2.0 * znear) / P[0, 0]
b = P[2, 0] * a
right = (a + b) / 2.0
@@ -1198,6 +722,9 @@ class MeshRenderer(object):
return np.array([[fu, 0, u0], [0, fv, v0], [0, 0, 1]])
def set_projection_matrix(self, fu, fv, u0, v0, znear, zfar):
+ """
+ Set projection matrix, given camera intrincs parameters
+ """
w = self.width
h = self.height
self.znear = znear
@@ -1216,11 +743,11 @@ class MeshRenderer(object):
P[3, 2] = (2 * zfar * znear) / (znear - zfar)
self.P = P
- def readbuffer(self, modes=('rgb', 'normal', 'seg', '3d')):
+ def readbuffer(self, modes=AVAILABLE_MODALITIES):
"""
Read framebuffer of rendering.
- :param modes: it should be a tuple consisting of a subset of ('rgb', 'normal', 'seg', '3d').
+ :param modes: it should be a tuple consisting of a subset of ('rgb', 'normal', 'seg', '3d', 'scene_flow', 'optical_flow').
:return: a list of numpy arrays corresponding to `modes`
"""
results = []
@@ -1230,7 +757,7 @@ class MeshRenderer(object):
modes = [modes]
for mode in modes:
- if mode not in ['rgb', 'normal', 'seg', '3d']:
+ if mode not in AVAILABLE_MODALITIES:
raise Exception('unknown rendering mode: {}'.format(mode))
frame = self.r.readbuffer_meshrenderer(
mode, self.width, self.height, self.fbo)
@@ -1238,26 +765,28 @@ class MeshRenderer(object):
results.append(frame)
return results
- def render(self, modes=('rgb', 'normal', 'seg', '3d'), hidden=(), return_buffer=True, render_shadow_pass=True):
+ def render(self, modes=AVAILABLE_MODALITIES, hidden=(), return_buffer=True, render_shadow_pass=True):
"""
A function to render all the instances in the renderer and read the output from framebuffer.
- :param modes: it should be a tuple consisting of a subset of ('rgb', 'normal', 'seg', '3d').
- :param hidden: Hidden instances to skip. When rendering from a robot's perspective, it's own body can be
- hidden
- :param display_companion_window: bool indicating whether we should render the companion window. If set to true,
- render the window and don't return the frame buffers as numpy arrays (to increase speed)
+ :param modes: a tuple consisting of a subset of ('rgb', 'normal', 'seg', '3d', 'scene_flow', 'optical_flow').
+ :param hidden: hidden instances to skip. When rendering from a robot's perspective, it's own body can be hidden
+ :param return_buffer: whether to return the frame buffers as numpy arrays
+ :param render_shadow_pass: whether to render shadow
:return: a list of float32 numpy arrays of shape (H, W, 4) corresponding to `modes`, where last channel is alpha
"""
- import time
+
+ # run optimization process the first time render is called
+ if self.optimized and not self.optimization_process_executed:
+ self.optimize_vertex_and_texture()
+
+ render_shadow_pass = render_shadow_pass and 'rgb' in modes
+ need_flow_info = 'optical_flow' in modes or 'scene_flow' in modes
+ self.update_dynamic_positions(need_flow_info=need_flow_info)
if self.enable_shadow and render_shadow_pass:
# shadow pass
- # V = np.copy(self.V)
- # P = np.copy(self.P)
- # self.V = np.copy(self.lightV)
- # self.P = np.copy(self.lightP)
if self.msaa:
self.r.render_meshrenderer_pre(1, self.fbo_ms, self.fbo)
else:
@@ -1267,22 +796,24 @@ class MeshRenderer(object):
# If objects are not shadow casters, we do not render them during the shadow pass. This can be achieved
# by setting their state to hidden for rendering the depth map
# Store which instances we hide, so we don't accidentally unhide instances that should remain hidden
- shadow_hidden_instances = [i for i in self.instances if not i.shadow_caster and not i.hidden]
+ shadow_hidden_instances = [
+ i for i in self.instances if not i.shadow_caster and not i.hidden]
for instance in shadow_hidden_instances:
instance.hidden = True
self.update_hidden_state(shadow_hidden_instances)
- self.update_dynamic_positions()
self.r.updateDynamicData(
- self.shaderProgram, self.pose_trans_array, self.pose_rot_array, self.V, self.P, self.lightV,
- self.lightP, 1, self.camera)
+ self.shaderProgram, self.pose_trans_array, self.pose_rot_array, self.last_trans_array,
+ self.last_rot_array, self.V, self.last_V, self.P,
+ self.lightV, self.lightP, ShadowPass.HAS_SHADOW_RENDER_SHADOW, self.camera)
self.r.renderOptimized(self.optimized_VAO)
for instance in shadow_hidden_instances:
instance.hidden = False
self.update_hidden_state(shadow_hidden_instances)
else:
for instance in self.instances:
- if (not instance in hidden) and instance.shadow_caster:
- instance.render(shadow_pass=1)
+ if (instance not in hidden) and instance.shadow_caster:
+ instance.render(
+ shadow_pass=ShadowPass.HAS_SHADOW_RENDER_SHADOW)
self.r.render_meshrenderer_post()
@@ -1292,10 +823,8 @@ class MeshRenderer(object):
self.r.readbuffer_meshrenderer_shadow_depth(
self.width, self.height, self.fbo, self.depth_tex_shadow)
- # self.V = np.copy(V)
- # self.P = np.copy(P)
- # main pass
+ # main pass
if self.msaa:
self.r.render_meshrenderer_pre(1, self.fbo_ms, self.fbo)
else:
@@ -1305,22 +834,26 @@ class MeshRenderer(object):
self.r.renderSkyBox(self.skyboxShaderProgram, self.V, self.P)
if self.optimized:
- self.update_dynamic_positions()
if self.enable_shadow:
- self.r.updateDynamicData(self.shaderProgram, self.pose_trans_array, self.pose_rot_array, self.V, self.P,
- self.lightV, self.lightP, 2, self.camera)
+ self.r.updateDynamicData(
+ self.shaderProgram, self.pose_trans_array, self.pose_rot_array, self.last_trans_array,
+ self.last_rot_array, self.V, self.last_V, self.P,
+ self.lightV, self.lightP, ShadowPass.HAS_SHADOW_RENDER_SCENE, self.camera)
else:
- self.r.updateDynamicData(self.shaderProgram, self.pose_trans_array, self.pose_rot_array, self.V, self.P,
- self.lightV, self.lightP, 0, self.camera)
-
+ self.r.updateDynamicData(
+ self.shaderProgram, self.pose_trans_array, self.pose_rot_array, self.last_trans_array,
+ self.last_rot_array, self.V, self.last_V, self.P,
+ self.lightV, self.lightP, ShadowPass.NO_SHADOW, self.camera)
self.r.renderOptimized(self.optimized_VAO)
else:
for instance in self.instances:
- if not instance in hidden:
+ if instance not in hidden:
if self.enable_shadow:
- instance.render(shadow_pass=2)
+ instance.render(
+ shadow_pass=ShadowPass.HAS_SHADOW_RENDER_SCENE)
else:
- instance.render(shadow_pass=0)
+ instance.render(
+ shadow_pass=ShadowPass.NO_SHADOW)
self.r.render_meshrenderer_post()
@@ -1330,17 +863,30 @@ class MeshRenderer(object):
if return_buffer:
return self.readbuffer(modes)
- # The viewer is responsible for calling this function to update the window, if cv2 is not being used for window display
def render_companion_window(self):
+ """
+ Render companion window.
+ The viewer is responsible for calling this to update the window,
+ if cv2 is not being used for window display
+ """
self.r.render_companion_window_from_buffer(self.fbo)
def get_visual_objects(self):
+ """
+ Return visual objects
+ """
return self.visual_objects
def get_instances(self):
+ """
+ Return instances
+ """
return self.instances
def dump(self):
+ """
+ Dump instance vertex and face information
+ """
instances_vertices = []
instances_faces = []
len_v = 0
@@ -1356,12 +902,29 @@ class MeshRenderer(object):
return instances_vertices, instances_faces
def set_light_pos(self, light):
+ """
+ Set light position
+
+ :param light: light position
+ """
self.lightpos = light
def get_num_objects(self):
+ """
+ Return the number of objects
+ """
return len(self.objects)
def set_pose(self, pose, idx):
+ """
+ Set pose for a specific instance
+
+ :param pose: instance pose
+ :param idx: instance id
+ """
+ self.instances[idx].last_rot = np.copy(self.instances[idx].pose_rot)
+ self.instances[idx].last_trans = np.copy(
+ self.instances[idx].pose_trans)
self.instances[idx].pose_rot = np.ascontiguousarray(
quat2rotmat(pose[3:]))
self.instances[idx].pose_trans = np.ascontiguousarray(
@@ -1381,13 +944,13 @@ class MeshRenderer(object):
"""
clean_list = [
self.color_tex_rgb, self.color_tex_normal, self.color_tex_semantics, self.color_tex_3d,
- self.depth_tex
+ self.depth_tex, self.color_tex_scene_flow, self.color_tex_optical_flow
]
fbo_list = [self.fbo]
if self.msaa:
clean_list += [
self.color_tex_rgb_ms, self.color_tex_normal_ms, self.color_tex_semantics_ms, self.color_tex_3d_ms,
- self.depth_tex_ms
+ self.depth_tex_ms, self.color_tex_scene_flow_ms, self.color_tex_optical_flow_ms
]
fbo_list += [self.fbo_ms]
@@ -1401,6 +964,8 @@ class MeshRenderer(object):
self.color_tex_normal = None
self.color_tex_semantics = None
self.color_tex_3d = None
+ self.color_tex_scene_flow = None
+ self.color_tex_optical_flow = None
self.depth_tex = None
self.fbo = None
self.VAOs = []
@@ -1435,12 +1000,23 @@ class MeshRenderer(object):
return None
def transform_pose(self, pose):
+ """
+ Transform pose from world frame to camera frame
+
+ :param pose: pose in world frame
+ :return: pose in camera frame
+ """
pose_rot = quat2rotmat(pose[3:])
pose_trans = xyz2mat(pose[:3])
pose_cam = self.V.dot(pose_trans.T).dot(pose_rot).T
return np.concatenate([mat2xyz(pose_cam), safemat2quat(pose_cam[:3, :3].T)])
def render_robot_cameras(self, modes=('rgb')):
+ """
+ Render robot camera images
+
+ :return: a list of frames (number of modalities x number of robots)
+ """
frames = []
for instance in self.instances:
if isinstance(instance, Robot):
@@ -1449,12 +1025,18 @@ class MeshRenderer(object):
mat = quat2rotmat(xyzw2wxyz(orn))[:3, :3]
view_direction = mat.dot(np.array([1, 0, 0]))
self.set_camera(camera_pos, camera_pos +
- view_direction, [0, 0, 1])
- for item in self.render(modes=modes, hidden=[instance]):
+ view_direction, [0, 0, 1], cache=True)
+ hidden_instances = []
+ if self.rendering_settings.hide_robot:
+ hidden_instances.append(instance)
+ for item in self.render(modes=modes, hidden=hidden_instances):
frames.append(item)
return frames
def optimize_vertex_and_texture(self):
+ """
+ Optimize vertex and texture for optimized renderer
+ """
for tex_file in self.texture_files:
print("Texture: ", tex_file)
# Set cutoff about 4096, otherwise we end up filling VRAM very quickly
@@ -1464,10 +1046,11 @@ class MeshRenderer(object):
texture_files = sorted(self.texture_files.items(), key=lambda x: x[1])
texture_files = [item[0] for item in texture_files]
- self.tex_id_1, self.tex_id_2, self.tex_id_layer_mapping = self.r.generateArrayTextures(texture_files,
- cutoff,
- shouldShrinkSmallTextures,
- smallTexSize)
+ self.tex_id_1, self.tex_id_2, self.tex_id_layer_mapping = \
+ self.r.generateArrayTextures(texture_files,
+ cutoff,
+ shouldShrinkSmallTextures,
+ smallTexSize)
print(self.tex_id_layer_mapping)
print(len(self.texture_files), self.texture_files)
self.textures.append(self.tex_id_1)
@@ -1500,11 +1083,14 @@ class MeshRenderer(object):
duplicate_vao_ids.extend(ids)
or_buffer_idx_end = len(duplicate_vao_ids)
# Store indices in the duplicate vao ids array, and hence the optimized rendering buffers, that this Instance will use
- instance.or_buffer_indices = list(np.arange(or_buffer_idx_start, or_buffer_idx_end)).copy()
+ instance.or_buffer_indices = list(
+ np.arange(or_buffer_idx_start, or_buffer_idx_end)).copy()
class_id_array.extend(
[float(instance.class_id) / 255.0] * len(ids))
- pbr_data_array.extend([[float(instance.use_pbr), 1.0, 1.0, 1.0]] * len(ids))
- hidden_array.extend([[float(instance.hidden), 1.0, 1.0, 1.0]] * len(ids))
+ pbr_data_array.extend(
+ [[float(instance.use_pbr), 1.0, 1.0, 1.0]] * len(ids))
+ hidden_array.extend(
+ [[float(instance.hidden), 1.0, 1.0, 1.0]] * len(ids))
elif isinstance(instance, InstanceGroup) or isinstance(instance, Robot):
id_sum = 0
# Collect OR buffer indices over all visual objects in this group
@@ -1515,13 +1101,16 @@ class MeshRenderer(object):
duplicate_vao_ids.extend(ids)
or_buffer_idx_end = len(duplicate_vao_ids)
# Store indices in the duplicate vao ids array, and hence the optimized rendering buffers, that this InstanceGroup will use
- temp_or_buffer_indices.extend(list(np.arange(or_buffer_idx_start, or_buffer_idx_end)))
+ temp_or_buffer_indices.extend(
+ list(np.arange(or_buffer_idx_start, or_buffer_idx_end)))
id_sum += len(ids)
instance.or_buffer_indices = temp_or_buffer_indices.copy()
class_id_array.extend(
[float(instance.class_id) / 255.0] * id_sum)
- pbr_data_array.extend([[float(instance.use_pbr), 1.0, 1.0, 1.0]] * id_sum)
- hidden_array.extend([[float(instance.hidden), 1.0, 1.0, 1.0]] * id_sum)
+ pbr_data_array.extend(
+ [[float(instance.use_pbr), 1.0, 1.0, 1.0]] * id_sum)
+ hidden_array.extend(
+ [[float(instance.hidden), 1.0, 1.0, 1.0]] * id_sum)
# Number of shapes in the OR buffer is equal to the number of duplicate vao_ids
self.or_buffer_shape_num = len(duplicate_vao_ids)
@@ -1593,7 +1182,8 @@ class MeshRenderer(object):
# List of 3 floats
transform_param = id_material.transform_param
- transform_param_array.append([transform_param[0], transform_param[1], transform_param[2], 1.0])
+ transform_param_array.append(
+ [transform_param[0], transform_param[1], transform_param[2], 1.0])
kd = np.asarray(id_material.kd, dtype=np.float32)
# Add padding so can store diffuse color as vec4
@@ -1667,24 +1257,26 @@ class MeshRenderer(object):
else:
buffer = self.fbo
- self.optimized_VAO, self.optimized_VBO, self.optimized_EBO = self.r.renderSetup(self.shaderProgram, self.V,
- self.P, self.lightpos,
- self.lightcolor,
- merged_vertex_data,
- index_ptr_offsets, index_counts,
- indices,
- merged_frag_shader_data,
- merged_frag_shader_roughness_metallic_data,
- merged_frag_shader_normal_data,
- merged_diffuse_color_array,
- merged_pbr_data,
- self.merged_hidden_data,
- self.merged_uv_data,
- self.tex_id_1, self.tex_id_2,
- buffer,
- float(
- self.rendering_settings.enable_pbr),
- self.depth_tex_shadow)
+ self.optimized_VAO, self.optimized_VBO, self.optimized_EBO = \
+ self.r.renderSetup(self.shaderProgram, self.V,
+ self.P, self.lightpos,
+ self.lightcolor,
+ merged_vertex_data,
+ index_ptr_offsets, index_counts,
+ indices,
+ merged_frag_shader_data,
+ merged_frag_shader_roughness_metallic_data,
+ merged_frag_shader_normal_data,
+ merged_diffuse_color_array,
+ merged_pbr_data,
+ self.merged_hidden_data,
+ self.merged_uv_data,
+ self.tex_id_1, self.tex_id_2,
+ buffer,
+ float(
+ self.rendering_settings.enable_pbr),
+ self.depth_tex_shadow)
+ self.optimization_process_executed = True
def update_hidden_state(self, instances):
"""
@@ -1694,15 +1286,19 @@ class MeshRenderer(object):
for instance in instances:
buf_idxs = instance.or_buffer_indices
if not buf_idxs:
- print('ERROR: trying to set hidden state of an instance that has no visual objects!')
+ print(
+ 'ERROR: trying to set hidden state of an instance that has no visual objects!')
# Need to multiply buf_idxs by four so we index into the first element of the vec4 corresponding to each buffer index
vec4_buf_idxs = [idx * 4 for idx in buf_idxs]
self.merged_hidden_data[vec4_buf_idxs] = float(instance.hidden)
- self.r.updateHiddenData(self.shaderProgram, np.ascontiguousarray(self.merged_hidden_data, dtype=np.float32))
+ self.r.updateHiddenData(self.shaderProgram, np.ascontiguousarray(
+ self.merged_hidden_data, dtype=np.float32))
- def update_dynamic_positions(self):
+ def update_dynamic_positions(self, need_flow_info=False):
"""
- A function to update all dynamic positions.
+ Update all dynamic positions
+
+ :param need_flow_info: whether flow information is required
"""
for instance in self.instances:
# if instance.dynamic:
@@ -1721,10 +1317,113 @@ class MeshRenderer(object):
self.trans_data[buf_idxs] = np.array(instance.poses_trans)
self.rot_data[buf_idxs] = np.array(instance.poses_rot)
+ if need_flow_info:
+ # this part could be expensive
+ if self.pose_trans_array is not None:
+ self.last_trans_array = np.copy(self.pose_trans_array)
+ else:
+ self.last_trans_array = np.ascontiguousarray(
+ np.concatenate(self.trans_data, axis=0))
+ if self.pose_rot_array is not None:
+ self.last_rot_array = np.copy(self.pose_rot_array)
+ else:
+ self.last_rot_array = np.ascontiguousarray(
+ np.concatenate(self.rot_data, axis=0))
+ else:
+ # dummy pose for zero flow
+ self.last_rot_array = self.pose_rot_array
+ self.last_trans_array = self.pose_trans_array
+
self.pose_trans_array = np.ascontiguousarray(self.trans_data)
self.pose_rot_array = np.ascontiguousarray(self.rot_data)
def use_pbr(self, use_pbr, use_pbr_mapping):
+ """
+ Apply PBR setting to every instance
+
+ :param use_pbr: whether to use pbr
+ :param use_pbr_mapping: whether to use pbr mapping
+ """
for instance in self.instances:
instance.use_pbr = use_pbr
- instance.use_pbr_mapping = use_pbr_mapping
\ No newline at end of file
+ instance.use_pbr_mapping = use_pbr_mapping
+
+ def setup_lidar_param(self):
+ """
+ Set up LiDAR params
+ """
+ lidar_vertical_low = -15 / 180. * np.pi
+ lidar_vertical_high = 15 / 180. * np.pi
+ lidar_vertical_n_beams = 16
+ lidar_vertical_beams = np.arange(lidar_vertical_low, lidar_vertical_high +
+ (lidar_vertical_high - lidar_vertical_low) /
+ (lidar_vertical_n_beams-1),
+ (lidar_vertical_high - lidar_vertical_low) / (lidar_vertical_n_beams-1))
+
+ lidar_horizontal_low = -45 / 180. * np.pi
+ lidar_horizontal_high = 45 / 180. * np.pi
+ lidar_horizontal_n_beams = 468
+ lidar_horizontal_beams = np.arange(lidar_horizontal_low, lidar_horizontal_high,
+ (lidar_horizontal_high - lidar_horizontal_low) / (lidar_horizontal_n_beams))
+
+ xx, yy = np.meshgrid(lidar_vertical_beams, lidar_horizontal_beams)
+ xx = xx.flatten()
+ yy = yy.flatten()
+
+ x_samples = (np.tan(xx) / np.cos(yy) * self.height //
+ 2 + self.height//2).astype(np.int)
+ y_samples = (np.tan(yy) * self.height//2 +
+ self.height//2).astype(np.int)
+
+ self.x_samples = x_samples.flatten()
+ self.y_samples = y_samples.flatten()
+
+ def get_lidar_from_depth(self):
+ """
+ Get partial LiDAR readings from depth sensors with limited FOV
+
+ :return: partial LiDAR readings with limited FOV
+ """
+ lidar_readings = self.render(modes=('3d'))[0]
+ lidar_readings = lidar_readings[self.x_samples, self.y_samples, :3]
+ dist = np.linalg.norm(lidar_readings, axis=1)
+ lidar_readings = lidar_readings[dist > 0]
+ return lidar_readings
+
+ def get_lidar_all(self, offset_with_camera=np.array([0, 0, 0])):
+ """
+ Get complete LiDAR readings by patching together partial ones
+
+ :return: complete 360 degree LiDAR readings
+ """
+ for instance in self.instances:
+ if isinstance(instance, Robot):
+ camera_pos = instance.robot.eyes.get_position()
+ orn = instance.robot.eyes.get_orientation()
+ mat = quat2rotmat(xyzw2wxyz(orn))[:3, :3]
+ view_direction = mat.dot(np.array([1, 0, 0]))
+ self.set_camera(camera_pos, camera_pos +
+ view_direction, [0, 0, 1])
+
+ original_fov = self.vertical_fov
+ self.set_fov(90)
+ lidar_readings = []
+ view_direction = np.array([1, 0, 0])
+ r2 = np.array(
+ [[np.cos(-np.pi / 2), -np.sin(-np.pi / 2), 0], [np.sin(-np.pi / 2), np.cos(-np.pi / 2), 0], [0, 0, 1]])
+ r3 = np.array(
+ [[np.cos(-np.pi / 2), 0, -np.sin(-np.pi / 2)], [0, 1, 0], [np.sin(-np.pi / 2), 0, np.cos(-np.pi / 2)]])
+ transformatiom_matrix = np.eye(3)
+
+ for i in range(4):
+ self.set_camera(np.array(self.camera) + offset_with_camera,
+ np.array(self.camera) + offset_with_camera + view_direction, [0, 0, 1])
+ lidar_one_view = self.get_lidar_from_depth()
+ lidar_readings.append(lidar_one_view.dot(transformatiom_matrix))
+ view_direction = r2.dot(view_direction)
+ transformatiom_matrix = r3.dot(transformatiom_matrix)
+
+ lidar_readings = np.concatenate(lidar_readings, axis=0)
+
+ self.set_fov(original_fov)
+ return lidar_readings
diff --git a/gibson2/render/mesh_renderer/mesh_renderer_settings.py b/gibson2/render/mesh_renderer/mesh_renderer_settings.py
new file mode 100644
index 000000000..08f9a01c1
--- /dev/null
+++ b/gibson2/render/mesh_renderer/mesh_renderer_settings.py
@@ -0,0 +1,76 @@
+import os
+import gibson2
+import platform
+
+
+class MeshRendererSettings(object):
+ def __init__(
+ self,
+ use_fisheye=False,
+ msaa=False,
+ enable_shadow=False,
+ enable_pbr=True,
+ env_texture_filename=os.path.join(gibson2.ig_dataset_path, 'scenes', 'background',
+ 'photo_studio_01_2k.hdr'),
+ env_texture_filename2=os.path.join(gibson2.ig_dataset_path, 'scenes', 'background',
+ 'photo_studio_01_2k.hdr'),
+ env_texture_filename3=os.path.join(gibson2.ig_dataset_path, 'scenes', 'background',
+ 'photo_studio_01_2k.hdr'),
+ light_modulation_map_filename='',
+ optimized=False,
+ skybox_size=20.,
+ light_dimming_factor=1.0,
+ fullscreen=False,
+ glfw_gl_version=None,
+ texture_scale=1.0,
+ hide_robot=True,
+ ):
+ """
+ :param use_fisheye: whether to use fisheye camera
+ :param msaa: whether to msaa
+ :param enable_shadow: whether to enable shadow
+ :param enable_pbr: whether to enable pbr
+ :param env_texture_filename: the first light probe
+ :param env_texture_filename2: the second light probe
+ :param env_texture_filename3: the third light probe
+ :param light_modulation_map_filename: light modulation map filename
+ :param optimized: whether to use optimized renderer (quality can be slightly compromised)
+ :param skybox_size: size of the outdoor skybox
+ :param light_dimming_factor: light dimming factor
+ :param fullscreen: whether to use full screen
+ :param glfw_gl_version: glfw gl version
+ :param texture_scale: texture scale
+ :param hide_robot: whether to hide robot when rendering
+ """
+ self.use_fisheye = use_fisheye
+ self.msaa = msaa
+ self.enable_shadow = enable_shadow
+ self.env_texture_filename = env_texture_filename
+ self.env_texture_filename2 = env_texture_filename2
+ self.env_texture_filename3 = env_texture_filename3
+ self.optimized = optimized
+ self.skybox_size = skybox_size
+ self.light_modulation_map_filename = light_modulation_map_filename
+ self.light_dimming_factor = light_dimming_factor
+ self.enable_pbr = enable_pbr
+ self.fullscreen = fullscreen
+ self.texture_scale = texture_scale
+ self.hide_robot = hide_robot
+
+ if glfw_gl_version is not None:
+ self.glfw_gl_version = glfw_gl_version
+ else:
+ if platform.system() == 'Darwin':
+ self.glfw_gl_version = [4, 1]
+ else:
+ self.glfw_gl_version = [4, 5]
+
+ def get_fastest(self):
+ self.msaa = False
+ self.enable_shadow = False
+ return self
+
+ def get_best(self):
+ self.msaa = True
+ self.enable_shadow = True
+ return self
diff --git a/gibson2/render/mesh_renderer/mesh_renderer_tensor.py b/gibson2/render/mesh_renderer/mesh_renderer_tensor.py
index 3153932e9..42cf31d42 100644
--- a/gibson2/render/mesh_renderer/mesh_renderer_tensor.py
+++ b/gibson2/render/mesh_renderer/mesh_renderer_tensor.py
@@ -1,29 +1,48 @@
import numpy as np
from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRenderer, MeshRendererSettings
from gibson2.render.mesh_renderer.get_available_devices import get_cuda_device
+from gibson2.utils.constants import AVAILABLE_MODALITIES
import logging
try:
import torch
+
class MeshRendererG2G(MeshRenderer):
"""
- Similar to MeshRenderer, but allows rendering to pytorch tensor, note that
- pytorch installation is required.
+ Similar to MeshRenderer, but allows for rendering to pytorch tensor.
+ Note that pytorch installation is required.
"""
- def __init__(self, width=512, height=512, vertical_fov=90, device_idx=0,
+ def __init__(self,
+ width=512,
+ height=512,
+ vertical_fov=90,
+ device_idx=0,
rendering_settings=MeshRendererSettings()):
- super(MeshRendererG2G, self).__init__(width, height, vertical_fov, device_idx, rendering_settings)
+ super(MeshRendererG2G, self).__init__(width,
+ height,
+ vertical_fov,
+ device_idx,
+ rendering_settings)
self.cuda_idx = get_cuda_device(self.device_minor)
- logging.info("Using cuda device {} for pytorch".format(self.cuda_idx))
+ logging.info(
+ "Using cuda device {} for pytorch".format(self.cuda_idx))
with torch.cuda.device(self.cuda_idx):
- self.image_tensor = torch.cuda.ByteTensor(height, width, 4).cuda()
- self.normal_tensor = torch.cuda.ByteTensor(height, width, 4).cuda()
- self.seg_tensor = torch.cuda.ByteTensor(height, width, 4).cuda()
- self.pc_tensor = torch.cuda.FloatTensor(height, width, 4).cuda()
+ self.image_tensor = torch.cuda.ByteTensor(
+ height, width, 4).cuda()
+ self.normal_tensor = torch.cuda.ByteTensor(
+ height, width, 4).cuda()
+ self.seg_tensor = torch.cuda.ByteTensor(
+ height, width, 4).cuda()
+ self.pc_tensor = torch.cuda.FloatTensor(
+ height, width, 4).cuda()
+ self.optical_flow_tensor = torch.cuda.FloatTensor(
+ height, width, 4).cuda()
+ self.scene_flow_tensor = torch.cuda.FloatTensor(
+ height, width, 4).cuda()
- def readbuffer_to_tensor(self, modes=('rgb', 'normal', 'seg', '3d')):
+ def readbuffer_to_tensor(self, modes=AVAILABLE_MODALITIES):
results = []
# single mode
@@ -32,64 +51,57 @@ try:
with torch.cuda.device(self.cuda_idx):
for mode in modes:
- if mode not in ['rgb', 'normal', 'seg', '3d']:
- raise Exception('unknown rendering mode: {}'.format(mode))
+ if mode not in AVAILABLE_MODALITIES:
+ raise Exception(
+ 'unknown rendering mode: {}'.format(mode))
if mode == 'rgb':
- self.r.map_tensor(int(self.color_tex_rgb), int(self.width), int(self.height),
+ self.r.map_tensor(int(self.color_tex_rgb),
+ int(self.width),
+ int(self.height),
self.image_tensor.data_ptr())
results.append(self.image_tensor.clone())
elif mode == 'normal':
- self.r.map_tensor(int(self.color_tex_normal), int(self.width), int(self.height),
+ self.r.map_tensor(int(self.color_tex_normal),
+ int(self.width),
+ int(self.height),
self.normal_tensor.data_ptr())
results.append(self.normal_tensor.clone())
elif mode == 'seg':
- self.r.map_tensor(int(self.color_tex_semantics), int(self.width), int(self.height),
+ self.r.map_tensor(int(self.color_tex_semantics),
+ int(self.width),
+ int(self.height),
self.seg_tensor.data_ptr())
results.append(self.seg_tensor.clone())
elif mode == '3d':
- self.r.map_tensor_float(int(self.color_tex_3d), int(self.width), int(self.height),
+ self.r.map_tensor_float(int(self.color_tex_3d),
+ int(self.width),
+ int(self.height),
self.pc_tensor.data_ptr())
results.append(self.pc_tensor.clone())
+ elif mode == 'optical_flow':
+ self.r.map_tensor_float(int(self.color_tex_optical_flow), int(self.width), int(self.height),
+ self.optical_flow_tensor.data_ptr())
+ results.append(self.optical_flow_tensor.clone())
+ elif mode == 'scene_flow':
+ self.r.map_tensor_float(int(self.color_tex_scene_flow), int(self.width), int(self.height),
+ self.scene_flow_tensor.data_ptr())
+ results.append(self.scene_flow_tensor.clone())
+
return results
- def render(self, modes=('rgb', 'normal', 'seg', '3d'), hidden=()):
+ def render(self, modes=AVAILABLE_MODALITIES, hidden=(),
+ return_buffer=True, render_shadow_pass=True):
"""
A function to render all the instances in the renderer and read the output from framebuffer into pytorch tensor.
- :param modes: it should be a tuple consisting of a subset of ('rgb', 'normal', 'seg', '3d').
- :param hidden: Hidden instances to skip. When rendering from a robot's perspective, it's own body can be
- hidden
-
+ :param modes: it should be a tuple consisting of a subset of ('rgb', 'normal', 'seg', '3d', 'optical_flow', 'scene_flow')
+ :param hidden: Hidden instances to skip. When rendering from a robot's perspective, it's own body can be hidden
"""
- if self.enable_shadow:
- # shadow pass
- V = np.copy(self.V)
- self.V = np.copy(self.lightV)
- self.r.render_tensor_pre(0, 0, self.fbo)
-
- for instance in self.instances:
- if not instance in hidden:
- instance.render()
-
- self.r.render_tensor_post()
- self.r.readbuffer_meshrenderer_shadow_depth(self.width, self.height, self.fbo, self.depth_tex_shadow)
- self.V = np.copy(V)
-
- if self.msaa:
- self.r.render_tensor_pre(1, self.fbo_ms, self.fbo)
- else:
- self.r.render_tensor_pre(0, 0, self.fbo)
-
- for instance in self.instances:
- if not instance in hidden:
- instance.render()
-
- self.r.render_tensor_post()
- if self.msaa:
- self.r.blit_buffer(self.width, self.height, self.fbo_ms, self.fbo)
-
+ super(MeshRendererG2G, self).render(modes=modes, hidden=hidden, return_buffer=False,
+ render_shadow_pass=render_shadow_pass)
return self.readbuffer_to_tensor(modes)
-except:
+
+except ImportError:
print("torch is not available, falling back to rendering to memory(instead of tensor)")
MeshRendererG2G = MeshRenderer
diff --git a/gibson2/render/mesh_renderer/shaders/410/frag.shader b/gibson2/render/mesh_renderer/shaders/410/frag.shader
index 0576508f5..4a61f95d9 100644
--- a/gibson2/render/mesh_renderer/shaders/410/frag.shader
+++ b/gibson2/render/mesh_renderer/shaders/410/frag.shader
@@ -25,8 +25,10 @@ in vec3 Normal_cam;
in vec3 FragPos;
in vec3 Instance_color;
in vec3 Pos_cam;
+in vec3 Pos_cam_prev;
in vec3 Pos_cam_projected;
in vec3 Diffuse_color;
+in vec2 Optical_flow;
in mat3 TBN;
in vec4 FragPosLightSpace;
@@ -37,6 +39,8 @@ layout (location = 0) out vec4 outputColour;
layout (location = 1) out vec4 NormalColour;
layout (location = 2) out vec4 InstanceColour;
layout (location = 3) out vec4 PCColour;
+layout (location = 4) out vec4 SceneFlowColour;
+layout (location = 5) out vec4 OpticalFlowColour;
uniform vec3 light_position; // in world coordinate
uniform vec3 light_color; // light color
@@ -96,5 +100,6 @@ void main() {
PCColour = vec4(Pos_cam, 1);
}
outputColour = outputColour * (1 - shadow * 0.5);
-
+ SceneFlowColour = vec4(Pos_cam - Pos_cam_prev,1);
+ OpticalFlowColour = vec4(Optical_flow,0,1);
}
diff --git a/gibson2/render/mesh_renderer/shaders/410/vert.shader b/gibson2/render/mesh_renderer/shaders/410/vert.shader
index 4b7e96eaa..525999254 100644
--- a/gibson2/render/mesh_renderer/shaders/410/vert.shader
+++ b/gibson2/render/mesh_renderer/shaders/410/vert.shader
@@ -1,10 +1,13 @@
#version 410
uniform mat4 V;
+uniform mat4 last_V;
uniform mat4 lightV;
uniform mat4 P;
uniform mat4 lightP;
uniform mat4 pose_rot;
uniform mat4 pose_trans;
+uniform mat4 last_rot;
+uniform mat4 last_trans;
uniform vec3 instance_color;
uniform vec3 diffuse_color;
uniform vec3 uv_transform_param;
@@ -21,13 +24,18 @@ out vec3 FragPos;
out vec3 Normal_cam;
out vec3 Instance_color;
out vec3 Pos_cam;
+out vec3 Pos_cam_prev;
out vec3 Pos_cam_projected;
out vec3 Diffuse_color;
out mat3 TBN;
out vec4 FragPosLightSpace;
+out vec2 Optical_flow;
+
void main() {
gl_Position = P * V * pose_trans * pose_rot * vec4(position, 1);
+ vec4 Position_prev = P * last_V * last_trans * last_rot * vec4(position, 1);
+ Optical_flow = gl_Position.xy/gl_Position.w - Position_prev.xy/Position_prev.w;
vec4 world_position4 = pose_trans * pose_rot * vec4(position, 1);
FragPos = vec3(world_position4.xyz / world_position4.w); // in world coordinate
Normal_world = normalize(mat3(pose_rot) * normal); // in world coordinate
@@ -35,7 +43,11 @@ void main() {
vec4 pos_cam4_projected = P * V * pose_trans * pose_rot * vec4(position, 1);
Pos_cam_projected = pos_cam4_projected.xyz / pos_cam4_projected.w;
vec4 pos_cam4 = V * pose_trans * pose_rot * vec4(position, 1);
+ vec4 pos_cam_prev4 = last_V * last_trans * last_rot * vec4(position, 1);
+
Pos_cam = pos_cam4.xyz / pos_cam4.w;
+ Pos_cam_prev = pos_cam_prev4.xyz / pos_cam_prev4.w;
+
theCoords.x = (cos(uv_transform_param[2]) * texCoords.x * uv_transform_param[0])
- (sin(uv_transform_param[2]) * texCoords.y * uv_transform_param[1]);
theCoords.y = (sin(uv_transform_param[2]) * texCoords.x * uv_transform_param[0])
diff --git a/gibson2/render/mesh_renderer/shaders/450/frag.shader b/gibson2/render/mesh_renderer/shaders/450/frag.shader
index 81d5da26b..8c1cede74 100644
--- a/gibson2/render/mesh_renderer/shaders/450/frag.shader
+++ b/gibson2/render/mesh_renderer/shaders/450/frag.shader
@@ -32,10 +32,12 @@ in vec3 Normal_cam;
in vec3 FragPos;
in vec3 Instance_color;
in vec3 Pos_cam;
+in vec3 Pos_cam_prev;
in vec3 Pos_cam_projected;
in vec3 Diffuse_color;
in mat3 TBN;
in vec4 FragPosLightSpace;
+in vec2 Optical_flow;
const float PI = 3.141592;
const float Epsilon = 0.00001;
@@ -44,6 +46,8 @@ layout (location = 0) out vec4 outputColour;
layout (location = 1) out vec4 NormalColour;
layout (location = 2) out vec4 InstanceColour;
layout (location = 3) out vec4 PCColour;
+layout (location = 4) out vec4 SceneFlowColour;
+layout (location = 5) out vec4 OpticalFlowColour;
uniform vec3 light_position; // in world coordinate
uniform vec3 light_color; // light color
@@ -185,7 +189,7 @@ void main() {
if (use_two_light_probe == 1) {
vec4 room = texture(lightModulationMap, vec2((FragPos.x + 15.0)/30.0,
- (-FragPos.y + 15.0)/30.0));
+ (FragPos.y + 15.0)/30.0));
modulate_factor = room.r;
} else {
modulate_factor = 1.0;
@@ -219,5 +223,7 @@ void main() {
PCColour = vec4(Pos_cam, 1);
}
outputColour = outputColour * (1 - shadow * 0.5);
+ SceneFlowColour = vec4(Pos_cam - Pos_cam_prev,1);
+ OpticalFlowColour = vec4(Optical_flow,0,1);
-}
\ No newline at end of file
+}
diff --git a/gibson2/render/mesh_renderer/shaders/450/optimized_frag.shader b/gibson2/render/mesh_renderer/shaders/450/optimized_frag.shader
index bf6989118..241c41fd3 100644
--- a/gibson2/render/mesh_renderer/shaders/450/optimized_frag.shader
+++ b/gibson2/render/mesh_renderer/shaders/450/optimized_frag.shader
@@ -43,11 +43,13 @@ in vec3 Normal_cam;
in vec3 FragPos;
in vec3 Instance_color;
in vec3 Pos_cam;
+in vec3 Pos_cam_prev;
in vec3 Pos_cam_projected;
in vec3 Diffuse_color;
in mat3 TBN;
in vec4 FragPosLightSpace;
flat in int Draw_id;
+in vec2 Optical_flow;
const float PI = 3.141592;
const float Epsilon = 0.00001;
@@ -56,6 +58,8 @@ layout (location = 0) out vec4 outputColour;
layout (location = 1) out vec4 NormalColour;
layout (location = 2) out vec4 InstanceColour;
layout (location = 3) out vec4 PCColour;
+layout (location = 4) out vec4 SceneFlowColour;
+layout (location = 5) out vec4 OpticalFlowColour;
uniform vec3 light_position; // in world coordinate
uniform vec3 light_color; // light color
@@ -214,4 +218,6 @@ void main() {
PCColour = vec4(Pos_cam, 1);
}
outputColour = outputColour * (1 - shadow * 0.5);
+ SceneFlowColour = vec4(Pos_cam - Pos_cam_prev,1);
+ OpticalFlowColour = vec4(Optical_flow,0,1);
}
\ No newline at end of file
diff --git a/gibson2/render/mesh_renderer/shaders/450/optimized_vert.shader b/gibson2/render/mesh_renderer/shaders/450/optimized_vert.shader
index ac36a7cf8..1a794ea99 100644
--- a/gibson2/render/mesh_renderer/shaders/450/optimized_vert.shader
+++ b/gibson2/render/mesh_renderer/shaders/450/optimized_vert.shader
@@ -10,6 +10,14 @@ layout (std140) uniform TransformDataRot {
mat4 pose_rot_array[MAX_ARRAY_SIZE];
};
+layout (std140) uniform TransformDataLastTrans {
+ mat4 pose_last_trans_array[MAX_ARRAY_SIZE];
+};
+
+layout (std140) uniform TransformDataLastRot {
+ mat4 pose_last_rot_array[MAX_ARRAY_SIZE];
+};
+
layout (std140) uniform Hidden {
vec4 hidden_array[MAX_ARRAY_SIZE];
};
@@ -22,6 +30,7 @@ layout (std140) uniform UVData {
in int gl_DrawID;
uniform mat4 V;
+uniform mat4 last_V;
uniform mat4 lightV;
uniform mat4 P;
uniform mat4 lightP;
@@ -42,20 +51,26 @@ out vec3 FragPos;
out vec3 Normal_cam;
out vec3 Instance_color;
out vec3 Pos_cam;
+out vec3 Pos_cam_prev;
out vec3 Pos_cam_projected;
out vec3 Diffuse_color;
out mat3 TBN;
flat out int Draw_id;
out vec4 FragPosLightSpace;
+out vec2 Optical_flow;
void main() {
mat4 pose_trans = pose_trans_array[gl_DrawID];
mat4 pose_rot = transpose(pose_rot_array[gl_DrawID]);
+ mat4 last_trans = pose_last_trans_array[gl_DrawID];
+ mat4 last_rot = transpose(pose_last_rot_array[gl_DrawID]);
// Hidden is stored in the x element of the vector - y, z and w are currently unused and set to 1.0
float hidden = hidden_array[gl_DrawID].x;
vec4 world_position4;
vec4 pos_cam4_projected;
vec4 pos_cam4;
+ vec4 Position_prev;
+ vec4 pos_cam_prev4;
if (shadow_pass == 1) {
gl_Position = lightP * lightV * pose_trans * pose_rot * vec4(position, 1) * (1 - hidden);
@@ -65,15 +80,23 @@ void main() {
Normal_cam = normalize(mat3(lightV) * mat3(pose_rot) * normal);// in camera coordinate
pos_cam4_projected = lightP * lightV * pose_trans * pose_rot * vec4(position, 1);
pos_cam4 = lightV * pose_trans * pose_rot * vec4(position, 1);
+
+ Optical_flow = vec2(0,0);
+ Position_prev = vec4(0,0,0,0);
+ pos_cam_prev4 = vec4(0,0,0,0);
+ Pos_cam_prev = vec3(0,0,0);
} else {
gl_Position = P * V * pose_trans * pose_rot * vec4(position, 1) * (1 - hidden);
+ Position_prev = P * last_V * last_trans * last_rot * vec4(position, 1);
+ Optical_flow = gl_Position.xy/gl_Position.w - Position_prev.xy/Position_prev.w;
world_position4 = pose_trans * pose_rot * vec4(position, 1);
FragPos = vec3(world_position4.xyz / world_position4.w);// in world coordinate
Normal_world = normalize(mat3(pose_rot) * normal);// in world coordinate
Normal_cam = normalize(mat3(V) * mat3(pose_rot) * normal);// in camera coordinate
pos_cam4_projected = P * V * pose_trans * pose_rot * vec4(position, 1);
pos_cam4 = V * pose_trans * pose_rot * vec4(position, 1);
-
+ pos_cam_prev4 = last_V * last_trans * last_rot * vec4(position, 1);
+ Pos_cam_prev = pos_cam_prev4.xyz / pos_cam_prev4.w;
}
Pos_cam = pos_cam4.xyz / pos_cam4.w;
diff --git a/gibson2/render/mesh_renderer/shaders/450/vert.shader b/gibson2/render/mesh_renderer/shaders/450/vert.shader
index 62ebcb9ab..fc783fc90 100644
--- a/gibson2/render/mesh_renderer/shaders/450/vert.shader
+++ b/gibson2/render/mesh_renderer/shaders/450/vert.shader
@@ -1,10 +1,13 @@
#version 450
uniform mat4 V;
+uniform mat4 last_V;
uniform mat4 lightV;
uniform mat4 P;
uniform mat4 lightP;
uniform mat4 pose_rot;
uniform mat4 pose_trans;
+uniform mat4 last_rot;
+uniform mat4 last_trans;
uniform vec3 instance_color;
uniform vec3 diffuse_color;
uniform vec3 uv_transform_param;
@@ -26,6 +29,8 @@ out vec3 Pos_cam_projected;
out vec3 Diffuse_color;
out mat3 TBN;
out vec4 FragPosLightSpace;
+out vec3 Pos_cam_prev;
+out vec2 Optical_flow;
void main() {
@@ -34,6 +39,8 @@ void main() {
Normal_world = normalize(mat3(pose_rot) * normal);// in world coordinate
vec4 pos_cam4_projected;
vec4 pos_cam4;
+ vec4 Position_prev;
+ vec4 pos_cam_prev4;
if (shadow_pass == 1)
{
@@ -41,11 +48,20 @@ void main() {
Normal_cam = normalize(mat3(lightV) * mat3(pose_rot) * normal);// in camera coordinate
pos_cam4_projected = lightP * lightV * pose_trans * pose_rot * vec4(position, 1);
pos_cam4 = lightV * pose_trans * pose_rot * vec4(position, 1);
+ // dummy values for shadow pass
+ Optical_flow = vec2(0,0);
+ Position_prev = vec4(0,0,0,0);
+ pos_cam_prev4 = vec4(0,0,0,0);
+ Pos_cam_prev = vec3(0,0,0);
} else {
gl_Position = P * V * pose_trans * pose_rot * vec4(position, 1);
Normal_cam = normalize(mat3(V) * mat3(pose_rot) * normal);// in camera coordinate
pos_cam4_projected = P * V * pose_trans * pose_rot * vec4(position, 1);
pos_cam4 = V * pose_trans * pose_rot * vec4(position, 1);
+ Position_prev = P * last_V * last_trans * last_rot * vec4(position, 1);
+ pos_cam_prev4 = last_V * last_trans * last_rot * vec4(position, 1);
+ Pos_cam_prev = pos_cam_prev4.xyz / pos_cam_prev4.w;
+ Optical_flow = gl_Position.xy/gl_Position.w - Position_prev.xy/Position_prev.w;
}
Pos_cam = pos_cam4.xyz / pos_cam4.w;
diff --git a/gibson2/render/mesh_renderer/visual_object.py b/gibson2/render/mesh_renderer/visual_object.py
new file mode 100644
index 000000000..b60b22497
--- /dev/null
+++ b/gibson2/render/mesh_renderer/visual_object.py
@@ -0,0 +1,28 @@
+class VisualObject(object):
+ """
+ A visual object manages a set of VAOs and textures
+ A wavefront obj file is loaded into openGL and managed by a VisualObject
+ """
+
+ def __init__(self, filename, VAO_ids, vertex_data_indices, face_indices, id, renderer):
+ """
+ :param filename: filename of the obj file
+ :param VAO_ids: VAO_ids in OpenGL
+ :param vertex_data_indices: vertex data indices
+ :param face_indices: face data indices
+ :param id: renderer maintains a list of visual objects, id is the handle of a visual object
+ :param renderer: pointer to the renderer
+ """
+ self.VAO_ids = VAO_ids
+ self.filename = filename
+ self.texture_ids = []
+ self.id = id
+ self.renderer = renderer
+ self.vertex_data_indices = vertex_data_indices
+ self.face_indices = face_indices
+
+ def __str__(self):
+ return "Object({})->VAO({})".format(self.id, self.VAO_ids)
+
+ def __repr__(self):
+ return self.__str__()
diff --git a/gibson2/render/profiler.py b/gibson2/render/profiler.py
index 93af2437c..2c07ddeff 100644
--- a/gibson2/render/profiler.py
+++ b/gibson2/render/profiler.py
@@ -1,9 +1,12 @@
-''' A simple profiler for logging '''
import logging
import time
class Profiler(object):
+ """
+ A simple profiler for logging and debugging
+ """
+
def __init__(self, name, logger=None, level=logging.INFO, enable=True):
self.name = name
self.logger = logger
@@ -11,8 +14,9 @@ class Profiler(object):
self.enable = enable
def step(self, name):
- """ Returns the duration and stepname since last step/start """
- duration = self.summarize_step(start=self.step_start, step_name=name, level=self.level)
+ """ Returns the duration since last step/start """
+ duration = self.summarize_step(
+ start=self.step_start, step_name=name, level=self.level)
now = time.time()
self.step_start = now
return duration
@@ -27,6 +31,9 @@ class Profiler(object):
self.summarize_step(self.start)
def summarize_step(self, start, level=None):
+ """
+ Summarize the step duration and fps
+ """
duration = time.time() - start
if self.logger:
level = level or self.level
diff --git a/gibson2/render/viewer.py b/gibson2/render/viewer.py
index 88560f529..289759537 100644
--- a/gibson2/render/viewer.py
+++ b/gibson2/render/viewer.py
@@ -54,6 +54,16 @@ class Viewer:
renderer=None,
min_cam_z=-1e6,
):
+ """
+ iGibson GUI (Viewer) for navigation, manipulation and motion planning / execution
+
+ :param initial_pos: position of the camera
+ :param initial_view_direction: viewing direction of the camera
+ :param initial_up: up direction
+ :param simulator: iGibson simulator
+ :param renderer: iGibson renderer
+ :param min_cam_z: minimum camera z
+ """
self.px = initial_pos[0]
self.py = initial_pos[1]
self.pz = initial_pos[2]
@@ -75,8 +85,9 @@ class Viewer:
self.cid = []
self.dist = 0
- # Flag to control if the mouse interface is in navigation or manipulation mode
- self.manipulation_mode = False
+ # Flag to control if the mouse interface is in navigation, manipulation
+ # or motion planning/execution mode
+ self.manipulation_mode = 0
# Video recording
self.recording = False # Boolean if we are recording frames from the viewer
@@ -86,10 +97,23 @@ class Viewer:
cv2.namedWindow('ExternalView')
cv2.moveWindow("ExternalView", 0, 0)
cv2.namedWindow('RobotView')
- cv2.setMouseCallback('ExternalView', self.change_dir)
+ cv2.setMouseCallback('ExternalView', self.mouse_callback)
self.create_visual_object()
+ self.planner = None
+ self.block_command = False
+
+ def setup_motion_planner(self, planner=None):
+ """
+ Store the motion planner that is passed in
+
+ :param planner: motion planner
+ """
+ self.planner = planner
def create_visual_object(self):
+ """
+ Create visual objects to visualize interaction
+ """
self.constraint_marker = VisualMarker(
radius=0.04, rgba_color=[0, 0, 1, 1])
self.constraint_marker2 = VisualMarker(visual_shape=p.GEOM_CAPSULE, radius=0.01, length=3,
@@ -103,13 +127,18 @@ class Viewer:
self.constraint_marker2.set_position([0, 0, -1])
def apply_push_force(self, x, y, force):
+ """
+ Apply pushing force to a 3D point. Given a pixel location (x, y),
+ compute the 3D location of that point, and then apply a virtual force
+ of a given magnitude towards the negative surface normal at that point
+
+ :param x: image pixel x coordinate
+ :param y: image pixel y coordinate
+ :param force: force magnitude
+ """
camera_pose = np.array([self.px, self.py, self.pz])
self.renderer.set_camera(
camera_pose, camera_pose + self.view_direction, self.up)
- #pos = self.renderer.get_3d_point(x,y)
- #frames = self.renderer.render(modes=('3d'))
- #position_cam = frames[0][y, x]
- # print(position_cam)
position_cam = np.array([(x - self.renderer.width / 2) / float(self.renderer.width / 2) * np.tan(
self.renderer.horizontal_fov / 2.0 / 180.0 * np.pi),
-(y - self.renderer.height / 2) / float(self.renderer.height / 2) * np.tan(
@@ -121,8 +150,6 @@ class Viewer:
position_world = np.linalg.inv(self.renderer.V).dot(position_cam)
position_eye = camera_pose
res = p.rayTest(position_eye, position_world[:3])
- # debug_line_id = p.addUserDebugLine(position_eye, position_world[:3], lineWidth=3)
- # and res[0][0] != self.marker.body_id:
if len(res) > 0 and res[0][0] != -1:
# there is hit
object_id, link_id, _, hit_pos, hit_normal = res[0]
@@ -132,12 +159,18 @@ class Viewer:
object_id, link_id, -np.array(hit_normal) * force, hit_pos, p.WORLD_FRAME)
def create_constraint(self, x, y, fixed=False):
+ """
+ Create a constraint between the constraint marker and the object
+ at pixel location (x, y). This is used for human users' mouse
+ interaction with the objects in the scenes.
+
+ :param x: image pixel x coordinate
+ :param y: image pixel y coordinate
+ :param fixed: whether to create a fixed joint. Otherwise, it's a point2point joint.
+ """
camera_pose = np.array([self.px, self.py, self.pz])
self.renderer.set_camera(
camera_pose, camera_pose + self.view_direction, self.up)
- # #pos = self.renderer.get_3d_point(x,y)
- # frames = self.renderer.render(modes=('3d'))
- # position_cam_org = frames[0][y, x]
position_cam = np.array([(x - self.renderer.width / 2) / float(self.renderer.width / 2) * np.tan(
self.renderer.horizontal_fov / 2.0 / 180.0 * np.pi),
@@ -147,7 +180,6 @@ class Viewer:
1])
position_cam[:3] *= 5
- print(position_cam)
position_world = np.linalg.inv(self.renderer.V).dot(position_cam)
position_eye = camera_pose
res = p.rayTest(position_eye, position_world[:3])
@@ -162,9 +194,10 @@ class Viewer:
link_state = p.getLinkState(object_id, link_id)
link_pos, link_orn = link_state[:2]
- child_frame_pos, child_frame_orn = p.multiplyTransforms(*p.invertTransform(link_pos, link_orn), hit_pos,
- [0, 0, 0, 1])
- print(child_frame_pos)
+ child_frame_pos, child_frame_orn = \
+ p.multiplyTransforms(*p.invertTransform(link_pos, link_orn),
+ hit_pos,
+ [0, 0, 0, 1])
self.constraint_marker.set_position(hit_pos)
self.constraint_marker2.set_position(hit_pos)
self.dist = np.linalg.norm(np.array(hit_pos) - camera_pose)
@@ -183,7 +216,38 @@ class Viewer:
self.cid.append(cid)
self.interaction_x, self.interaction_y = x, y
+ def get_hit(self, x, y):
+ """
+ Shoot a ray through pixel location (x, y) and returns the position and
+ normal that this ray hits
+
+ :param x: image pixel x coordinate
+ :param y: image pixel y coordinate
+ """
+ camera_pose = np.array([self.px, self.py, self.pz])
+ self.renderer.set_camera(
+ camera_pose, camera_pose + self.view_direction, self.up)
+ position_cam = np.array([(x - self.renderer.width / 2) / float(self.renderer.width / 2) * np.tan(
+ self.renderer.horizontal_fov / 2.0 / 180.0 * np.pi),
+ -(y - self.renderer.height / 2) / float(self.renderer.height / 2) * np.tan(
+ self.renderer.vertical_fov / 2.0 / 180.0 * np.pi),
+ -1,
+ 1])
+ position_cam[:3] *= 5
+
+ position_world = np.linalg.inv(self.renderer.V).dot(position_cam)
+ position_eye = camera_pose
+ res = p.rayTest(position_eye, position_world[:3])
+ hit_pos = None
+ hit_normal = None
+ if len(res) > 0 and res[0][0] != -1:
+ object_id, link_id, _, hit_pos, hit_normal = res[0]
+ return hit_pos, hit_normal
+
def remove_constraint(self):
+ """
+ Remove constraints created by create_constraint
+ """
for cid in self.cid:
p.removeConstraint(cid)
self.cid = []
@@ -191,20 +255,21 @@ class Viewer:
self.constraint_marker2.set_position([0, 0, 100])
def move_constraint(self, x, y):
- # no constraint created but move_constraint called
- if len(self.cid) == 0:
- return
+ """
+ Move the constraint marker (when the mouse is moved during interaction)
+
+ :param x: image pixel x coordinate
+ :param y: image pixel y coordinate
+ """
camera_pose = np.array([self.px, self.py, self.pz])
self.renderer.set_camera(
camera_pose, camera_pose + self.view_direction, self.up)
- # #pos = self.renderer.get_3d_point(x,y)
- # frames = self.renderer.render(modes=('3d'))
- # position_cam_org = frames[0][y, x]
- position_cam = np.array([(x - self.renderer.width / 2) / float(self.renderer.width / 2) * np.tan(
- self.renderer.horizontal_fov / 2.0 / 180.0 * np.pi),
- -(y - self.renderer.height / 2) / float(self.renderer.height / 2) * np.tan(
- self.renderer.vertical_fov / 2.0 / 180.0 * np.pi),
+ position_cam = np.array([
+ (x - self.renderer.width / 2) / float(self.renderer.width / 2) *
+ np.tan(self.renderer.horizontal_fov / 2.0 / 180.0 * np.pi),
+ -(y - self.renderer.height / 2) / float(self.renderer.height / 2) *
+ np.tan(self.renderer.vertical_fov / 2.0 / 180.0 * np.pi),
-1,
1])
position_cam[:3] = position_cam[:3] / \
@@ -216,16 +281,17 @@ class Viewer:
self.interaction_x, self.interaction_y = x, y
def move_constraint_z(self, dy):
- # no constraint created but move_constraint called
- if len(self.cid) == 0:
- return
+ """
+ Move the constraint marker closer or further away from the camera
+ (when the mouse is moved during interaction)
+
+ :param dy: delta y coordinate in the pixel space
+ """
x, y = self.interaction_x, self.interaction_y
camera_pose = np.array([self.px, self.py, self.pz])
self.renderer.set_camera(
camera_pose, camera_pose + self.view_direction, self.up)
- # #pos = self.renderer.get_3d_point(x,y)
- # frames = self.renderer.render(modes=('3d'))
- # position_cam_org = frames[0][y, x]
+
self.dist *= (1 - dy)
if self.dist < 0.1:
self.dist = 0.1
@@ -242,34 +308,53 @@ class Viewer:
self.constraint_marker.set_position(position_world[:3])
self.constraint_marker2.set_position(position_world[:3])
- def change_dir(self, event, x, y, flags, param):
- if not self.manipulation_mode:
+ def mouse_callback(self, event, x, y, flags, params):
+ """
+ Mouse callback that handles all the mouse events
+
+ :param event: OpenCV mouse event
+ :param x: image pixel x coordinate
+ :param y: image pixel y coordinate
+ :param flags: any relevant flags passed by OpenCV.
+ :param params: any extra parameters supplied by OpenCV
+ """
+
+ # Navigation mode
+ if self.manipulation_mode == 0:
+ # Only once, when pressing left mouse while ctrl key is pressed
if flags == cv2.EVENT_FLAG_LBUTTON + cv2.EVENT_FLAG_CTRLKEY and not self.right_down:
- # Only once, when pressing left mouse while cntrl key is pressed
self._mouse_ix, self._mouse_iy = x, y
self.right_down = True
+
+ # Middle mouse button press or only once, when pressing left
+ # mouse while shift key is pressed (Mac compatibility)
elif (event == cv2.EVENT_MBUTTONDOWN) or (flags == cv2.EVENT_FLAG_LBUTTON + cv2.EVENT_FLAG_SHIFTKEY and not self.middle_down):
- # Middle mouse button press or only once, when pressing left mouse while shift key is pressed (Mac
- # compatibility)
self._mouse_ix, self._mouse_iy = x, y
self.middle_down = True
- elif event == cv2.EVENT_LBUTTONDOWN: # left mouse button press
+
+ # left mouse button press
+ elif event == cv2.EVENT_LBUTTONDOWN:
self._mouse_ix, self._mouse_iy = x, y
self.left_down = True
- elif event == cv2.EVENT_LBUTTONUP: # left mouse button released
+
+ # left mouse button released
+ elif event == cv2.EVENT_LBUTTONUP:
self.left_down = False
self.right_down = False
self.middle_down = False
- elif event == cv2.EVENT_MBUTTONUP: # middle mouse button released
+
+ # middle mouse button released
+ elif event == cv2.EVENT_MBUTTONUP:
self.middle_down = False
- if event == cv2.EVENT_MOUSEMOVE: # moving mouse location on the window
- if self.left_down: # if left button was pressed we change orientation of camera
+ # moving mouse location on the window
+ if event == cv2.EVENT_MOUSEMOVE:
+ # if left button was pressed we change orientation of camera
+ if self.left_down:
dx = (x - self._mouse_ix) / 100.0
dy = (y - self._mouse_iy) / 100.0
self._mouse_ix = x
self._mouse_iy = y
-
if not ((flags & cv2.EVENT_FLAG_CTRLKEY and flags & cv2.EVENT_FLAG_SHIFTKEY) or
(flags & cv2.EVENT_FLAG_CTRLKEY and flags & cv2.EVENT_FLAG_ALTKEY)):
self.phi += dy
@@ -279,7 +364,8 @@ class Viewer:
self.view_direction = np.array([np.cos(self.theta) * np.cos(self.phi), np.sin(self.theta) * np.cos(
self.phi), np.sin(self.phi)])
- elif self.middle_down: # if middle button was pressed we get closer/further away in the viewing direction
+ # if middle button was pressed we get closer/further away in the viewing direction
+ elif self.middle_down:
d_vd = (y - self._mouse_iy) / 100.0
self._mouse_iy = y
@@ -288,8 +374,9 @@ class Viewer:
self.py += motion_along_vd[1]
self.pz += motion_along_vd[2]
self.pz = max(self.min_cam_z, self.pz)
- elif self.right_down: # if right button was pressed we change translation of camera
+ # if right button was pressed we change translation of camera
+ elif self.right_down:
zz = self.view_direction / \
np.linalg.norm(self.view_direction)
xx = np.cross(zz, np.array([0, 0, 1]))
@@ -304,10 +391,12 @@ class Viewer:
self.py += (motion_along_vx[1] + motion_along_vy[1])
self.pz += (motion_along_vx[2] + motion_along_vy[2])
self.pz = max(self.min_cam_z, self.pz)
- else:
+
+ # Manipulation mode
+ elif self.manipulation_mode == 1:
+ # Middle mouse button press or only once, when pressing left mouse
+ # while shift key is pressed (Mac compatibility)
if (event == cv2.EVENT_MBUTTONDOWN) or (flags == cv2.EVENT_FLAG_LBUTTON + cv2.EVENT_FLAG_SHIFTKEY and not self.middle_down):
- # Middle mouse button press or only once, when pressing left mouse while shift key is pressed (Mac
- # compatibility)
self._mouse_ix, self._mouse_iy = x, y
self.middle_down = True
self.create_constraint(x, y, fixed=True)
@@ -334,30 +423,144 @@ class Viewer:
dy = (y - self._mouse_iy) / 500.0
self.move_constraint_z(dy)
- def reset(self):
- self.px = 0
- self.py = 0
- self.pz = 1.2
- self.theta = 0
- self.phi = 0
- self.view_direction = np.array([np.cos(self.theta) * np.cos(self.phi), np.sin(self.theta) * np.cos(
- self.phi), np.sin(self.phi)])
- self.left_down = False
- self.right_down = False
- self.middle_down = False
- self.remove_constraint()
- self.renderer.reset_camera()
+ # Motion planning / execution mode
+ elif self.manipulation_mode == 2 and not self.block_command:
+ # left mouse button press
+ if event == cv2.EVENT_LBUTTONDOWN:
+ self._mouse_ix, self._mouse_iy = x, y
+ self.left_down = True
+ self.hit_pos, _ = self.get_hit(x, y)
+ # Base motion
+ if event == cv2.EVENT_LBUTTONUP:
+ hit_pos, _ = self.get_hit(x, y)
+ target_yaw = np.arctan2(
+ hit_pos[1] - self.hit_pos[1], hit_pos[0] - self.hit_pos[0])
+ self.planner.set_marker_position_yaw(self.hit_pos, target_yaw)
+ self.left_down = False
+ if hit_pos is not None:
+ self.block_command = True
+ plan = self.planner.plan_base_motion(
+ [self.hit_pos[0], self.hit_pos[1], target_yaw])
+ if plan is not None and len(plan) > 0:
+ self.planner.dry_run_base_plan(plan)
+ self.block_command = False
+
+ # Visualize base subgoal orientation
+ if event == cv2.EVENT_MOUSEMOVE:
+ if self.left_down:
+ hit_pos, _ = self.get_hit(x, y)
+ target_yaw = np.arctan2(
+ hit_pos[1] - self.hit_pos[1], hit_pos[0] - self.hit_pos[0])
+ self.planner.set_marker_position_yaw(
+ self.hit_pos, target_yaw)
+
+ # Arm motion
+ if event == cv2.EVENT_MBUTTONDOWN:
+ hit_pos, hit_normal = self.get_hit(x, y)
+ if hit_pos is not None:
+ self.block_command = True
+ plan = self.planner.plan_arm_push(
+ hit_pos, -np.array(hit_normal))
+ self.planner.execute_arm_push(
+ plan, hit_pos, -np.array(hit_normal))
+ self.block_command = False
+
+ def show_help_text(self, frame):
+ """
+ Show help text
+ """
+ if self.show_help < 0:
+ return
+
+ if self.show_help >= 150:
+ first_color = (255, 0, 0)
+ help_text = "Keyboard cheatsheet:"
+ cv2.putText(frame, help_text, (10, 80),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
+ help_text = "'w','a','s','d': up, left, down, right (any mode)"
+ cv2.putText(frame, help_text, (10, 100),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
+ help_text = "'q','e': turn left, turn right (any mode)"
+ cv2.putText(frame, help_text, (10, 120),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
+ help_text = "'m': switch control mode across navigation, manipulation, and planning"
+ cv2.putText(frame, help_text, (10, 140),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
+ help_text = "'r': Start/stop recording frames (results in \\tmp folder)"
+ cv2.putText(frame, help_text, (10, 160),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
+ help_text = "'p': Pause/resume recording"
+ cv2.putText(frame, help_text, (10, 180),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
+ help_text = "'h': Show this help on screen"
+ cv2.putText(frame, help_text, (10, 200),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
+ help_text = "'ESC': Quit"
+ cv2.putText(frame, help_text, (10, 220),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
+ else:
+ second_color = (255, 0, 255)
+ help_text = "Mouse control in navigation mode:"
+ cv2.putText(frame, help_text, (10, 80),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
+ help_text = "Left click and drag: rotate camera"
+ cv2.putText(frame, help_text, (10, 100),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
+ help_text = "CTRL + left click and drag: translate camera"
+ cv2.putText(frame, help_text, (10, 120),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
+ help_text = "Middle click and drag (linux) or left SHIFT + left click and drag:"
+ cv2.putText(frame, help_text, (10, 140),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
+ help_text = "translate camera closer/further away in the viewing direction"
+ cv2.putText(frame, help_text, (10, 160),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
+ help_text = "Mouse control in manipulation mode:"
+ cv2.putText(frame, help_text, (10, 180),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
+ help_text = "Left click and drag: create ball-joint connection to clicked object and move it"
+ cv2.putText(frame, help_text, (10, 200),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
+ help_text = "Middle click and drag (linux) or left SHIFT + left click and drag: create rigid connection"
+ cv2.putText(frame, help_text, (10, 220),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
+ help_text = " to object and move it"
+ cv2.putText(frame, help_text, (10, 240),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
+ help_text = "CTRL + click and drag: up/down of the mouse moves object further/closer"
+ cv2.putText(frame, help_text, (10, 260),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
+ help_text = "Mouse control in planning mode:"
+ cv2.putText(frame, help_text, (10, 280),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
+ help_text = "Left click: create (click), visualize (drag) and plan / execute (release) a base motion subgoal"
+ cv2.putText(frame, help_text, (10, 300),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
+ help_text = "for the robot base to reach the physical point that corresponds to the clicked pixel"
+ cv2.putText(frame, help_text, (10, 320),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
+ help_text = "Middle click: create, and plan / execute an arm motion subgoal"
+ cv2.putText(frame, help_text, (10, 340),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
+ help_text = "for the robot end-effector to reach the physical point that corresponds to the clicked pixel"
+ cv2.putText(frame, help_text, (10, 360),
+ cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
+ self.show_help -= 1
def update(self):
+ """
+ Update images of Viewer
+ """
camera_pose = np.array([self.px, self.py, self.pz])
- if not self.renderer is None:
+ if self.renderer is not None:
self.renderer.set_camera(
camera_pose, camera_pose + self.view_direction, self.up)
- if not self.renderer is None:
- frame = cv2.cvtColor(np.concatenate(self.renderer.render(modes=('rgb')), axis=1),
- cv2.COLOR_RGB2BGR)
+ if self.renderer is not None:
+ frame = cv2.cvtColor(
+ np.concatenate(self.renderer.render(modes=('rgb')), axis=1),
+ cv2.COLOR_RGB2BGR)
else:
frame = np.zeros((300, 300, 3)).astype(np.uint8)
@@ -367,69 +570,10 @@ class Viewer:
cv2.FONT_HERSHEY_SIMPLEX, 0.5, text_color, 1, cv2.LINE_AA)
cv2.putText(frame, "[{:1.1f} {:1.1f} {:1.1f}]".format(*self.view_direction), (10, 40),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, text_color, 1, cv2.LINE_AA)
- cv2.putText(frame, ["nav mode", "manip mode"][self.manipulation_mode], (10, 60),
+ cv2.putText(frame, ["nav mode", "manip mode", "planning mode"][self.manipulation_mode], (10, 60),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, text_color, 1, cv2.LINE_AA)
- if self.show_help >= 0:
- if self.show_help >= 150:
- first_color = (255, 0, 0)
- help_text = "Keyboard cheatsheet:"
- cv2.putText(frame, help_text, (10, 80),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
- help_text = "'w','a','s','d': up, left, down, right (any mode)"
- cv2.putText(frame, help_text, (10, 100),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
- help_text = "'q','e': turn left, turn right (any mode)"
- cv2.putText(frame, help_text, (10, 120),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
- help_text = "'m': Toggle mouse mode between navigation and manipulation"
- cv2.putText(frame, help_text, (10, 140),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
- help_text = "'r': Start/stop recording frames (results in \\tmp folder)"
- cv2.putText(frame, help_text, (10, 160),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
- help_text = "'p': Pause/resume recording"
- cv2.putText(frame, help_text, (10, 180),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
- help_text = "'h': Show this help on screen"
- cv2.putText(frame, help_text, (10, 200),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
- help_text = "'ESC': Quit"
- cv2.putText(frame, help_text, (10, 220),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, first_color, 1, cv2.LINE_AA)
- self.show_help -= 1
- else:
- second_color = (255, 0, 255)
- help_text = "Mouse controls in navigation mode:"
- cv2.putText(frame, help_text, (10, 80),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
- help_text = "Left click and drag: rotate camera"
- cv2.putText(frame, help_text, (10, 100),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
- help_text = "CNTRL + left click and drag: translate camera left/right"
- cv2.putText(frame, help_text, (10, 120),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
- help_text = "Middle click and drag (linux) or left SHIFT + left click and drag: up/down of mouse"
- cv2.putText(frame, help_text, (10, 140),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
- help_text = " translates camera forward/backwards"
- cv2.putText(frame, help_text, (10, 160),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
- help_text = "Mouse controls in manipulation mode:"
- cv2.putText(frame, help_text, (10, 180),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
- help_text = "Left click and drag: create ball-joint connection to clicked object and move it"
- cv2.putText(frame, help_text, (10, 200),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
- help_text = "Middle click and drag (linux) or left SHIFT + left click and drag: create rigid connection"
- cv2.putText(frame, help_text, (10, 220),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
- help_text = " to object and move it"
- cv2.putText(frame, help_text, (10, 240),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
- help_text = "CNTRL + click and drag: up/down of the mouse moves object further/closer"
- cv2.putText(frame, help_text, (10, 260),
- cv2.FONT_HERSHEY_SIMPLEX, 0.5, second_color, 1, cv2.LINE_AA)
- self.show_help -= 1
+ self.show_help_text(frame)
+
cv2.imshow('ExternalView', frame)
# We keep some double functinality for "backcompatibility"
@@ -437,8 +581,12 @@ class Viewer:
move_vec = self.view_direction[:2]
# step size is 0.05m
move_vec = move_vec / np.linalg.norm(move_vec) * 0.05
+
+ # show help text
if q == ord('h'):
self.show_help = 300
+
+ # move
elif q in [ord('w'), ord('s'), ord('a'), ord('d')]:
if q == ord('w'):
yaw = 0.0
@@ -451,22 +599,28 @@ class Viewer:
move_vec = rotate_vector_2d(move_vec, yaw)
self.px += move_vec[0]
self.py += move_vec[1]
- if self.manipulation_mode:
+ if self.manipulation_mode == 1:
self.move_constraint(self._mouse_ix, self._mouse_iy)
+
+ # turn left
elif q == ord('q'):
- self.theta += np.pi/32
+ self.theta += np.pi / 36
self.view_direction = np.array([np.cos(self.theta) * np.cos(self.phi), np.sin(self.theta) * np.cos(
self.phi), np.sin(self.phi)])
- if self.manipulation_mode:
+ if self.manipulation_mode == 1:
self.move_constraint(self._mouse_ix, self._mouse_iy)
+
+ # turn right
elif q == ord('e'):
- self.theta -= np.pi/64
+ self.theta -= np.pi / 36
self.view_direction = np.array([np.cos(self.theta) * np.cos(self.phi), np.sin(self.theta) * np.cos(
self.phi), np.sin(self.phi)])
- if self.manipulation_mode:
+ if self.manipulation_mode == 1:
self.move_constraint(self._mouse_ix, self._mouse_iy)
+
+ # quit (Esc)
elif q == 27:
- if self.video_folder is not "":
+ if self.video_folder != "":
logging.info("You recorded a video. To compile the frames into a mp4 go to the corresponding subfolder" +
" in /tmp and execute: ")
logging.info(
@@ -474,7 +628,9 @@ class Viewer:
logging.info(
"The last folder you collected images for a video was: " + self.video_folder)
exit()
- elif q == ord('r'): # Start/Stop recording. Stopping saves frames to files
+
+ # Start/Stop recording. Stopping saves frames to files
+ elif q == ord('r'):
if self.recording:
self.recording = False
self.pause_recording = False
@@ -483,16 +639,20 @@ class Viewer:
# Current time string to use to save the temporal urdfs
timestr = time.strftime("%Y%m%d-%H%M%S")
# Create the subfolder
- self.video_folder = os.path.join("/tmp",
- '{}_{}_{}'.format(timestr, random.getrandbits(64), os.getpid()))
+ self.video_folder = os.path.join(
+ "/tmp", '{}_{}_{}'.format(
+ timestr, random.getrandbits(64), os.getpid()))
os.makedirs(self.video_folder, exist_ok=True)
self.recording = True
self.frame_idx = 0
- elif q == ord('p'): # Pause/Resume recording
+
+ # Pause/Resume recording
+ elif q == ord('p'):
if self.pause_recording:
self.pause_recording = False
else:
self.pause_recording = True
+<<<<<<< HEAD
elif q == ord('m'): # Switch between Manipulation and Navigation modes
if self.manipulation_mode:
self.left_down = False
@@ -507,12 +667,22 @@ class Viewer:
elif q == ord('l'):
# reset
self.reset()
+=======
+
+ # Switch amoung navigation, manipulation, motion planning / execution modes
+ elif q == ord('m'):
+ self.left_down = False
+ self.middle_down = False
+ self.right_down = False
+ self.manipulation_mode = (self.manipulation_mode + 1) % 3
+
+>>>>>>> pbr
if self.recording and not self.pause_recording:
cv2.imwrite(os.path.join(self.video_folder, '{:05d}.png'.format(self.frame_idx)),
(frame * 255).astype(np.uint8))
self.frame_idx += 1
- if not self.renderer is None:
+ if self.renderer is not None:
frames = self.renderer.render_robot_cameras(modes=('rgb'))
if len(frames) > 0:
frame = cv2.cvtColor(np.concatenate(
diff --git a/gibson2/utils/data_utils/__init__.py b/gibson2/reward_functions/__init__.py
similarity index 100%
rename from gibson2/utils/data_utils/__init__.py
rename to gibson2/reward_functions/__init__.py
diff --git a/gibson2/reward_functions/collision_reward.py b/gibson2/reward_functions/collision_reward.py
new file mode 100644
index 000000000..ec00d4724
--- /dev/null
+++ b/gibson2/reward_functions/collision_reward.py
@@ -0,0 +1,26 @@
+from gibson2.reward_functions.reward_function_base import BaseRewardFunction
+
+
+class CollisionReward(BaseRewardFunction):
+ """
+ Collision reward
+ Penalize robot collision. Typically collision_reward_weight is negative.
+ """
+
+ def __init__(self, config):
+ super(CollisionReward, self).__init__(config)
+ self.collision_reward_weight = self.config.get(
+ 'collision_reward_weight', -0.1
+ )
+
+ def get_reward(self, task, env):
+ """
+ Reward is self.collision_reward_weight if there is collision
+ in the last timestep
+
+ :param task: task instance
+ :param env: environment instance
+ :return: reward
+ """
+ has_collision = float(len(env.collision_links) > 0)
+ return has_collision * self.collision_reward_weight
diff --git a/gibson2/reward_functions/point_goal_reward.py b/gibson2/reward_functions/point_goal_reward.py
new file mode 100644
index 000000000..d1977088b
--- /dev/null
+++ b/gibson2/reward_functions/point_goal_reward.py
@@ -0,0 +1,31 @@
+from gibson2.reward_functions.reward_function_base import BaseRewardFunction
+from gibson2.utils.utils import l2_distance
+
+
+class PointGoalReward(BaseRewardFunction):
+ """
+ Point goal reward
+ Success reward for reaching the goal with the robot's base
+ """
+
+ def __init__(self, config):
+ super(PointGoalReward, self).__init__(config)
+ self.success_reward = self.config.get(
+ 'success_reward', 10.0
+ )
+ self.dist_tol = self.config.get('dist_tol', 0.5)
+
+ def get_reward(self, task, env):
+ """
+ Check if the distance between the robot's base and the goal
+ is below the distance threshold
+
+ :param task: task instance
+ :param env: environment instance
+ :return: reward
+ """
+ success = l2_distance(
+ env.robots[0].get_position()[:2],
+ task.target_pos[:2]) < self.dist_tol
+ reward = self.success_reward if success else 0.0
+ return reward
diff --git a/gibson2/reward_functions/potential_reward.py b/gibson2/reward_functions/potential_reward.py
new file mode 100644
index 000000000..2835c171c
--- /dev/null
+++ b/gibson2/reward_functions/potential_reward.py
@@ -0,0 +1,39 @@
+from gibson2.reward_functions.reward_function_base import BaseRewardFunction
+
+
+class PotentialReward(BaseRewardFunction):
+ """
+ Potential reward
+ Assume task has get_potential implemented; Low potential is preferred
+ (e.g. a common potential for goal-directed task is the distance to goal)
+ """
+
+ def __init__(self, config):
+ super(PotentialReward, self).__init__(config)
+ self.potential_reward_weight = self.config.get(
+ 'potential_reward_weight', 1.0
+ )
+
+ def reset(self, task, env):
+ """
+ Compute the initial potential after episode reset
+
+ :param task: task instance
+ :param env: environment instance
+ """
+ self.potential = task.get_potential(env)
+
+ def get_reward(self, task, env):
+ """
+ Reward is proportional to the potential difference between
+ the current and previous timestep
+
+ :param task: task instance
+ :param env: environment instance
+ :return: reward
+ """
+ new_potential = task.get_potential(env)
+ reward = self.potential - new_potential
+ reward *= self.potential_reward_weight
+ self.potential = new_potential
+ return reward
diff --git a/gibson2/reward_functions/reaching_goal_reward.py b/gibson2/reward_functions/reaching_goal_reward.py
new file mode 100644
index 000000000..07876cb13
--- /dev/null
+++ b/gibson2/reward_functions/reaching_goal_reward.py
@@ -0,0 +1,31 @@
+from gibson2.reward_functions.reward_function_base import BaseRewardFunction
+from gibson2.utils.utils import l2_distance
+
+
+class ReachingGoalReward(BaseRewardFunction):
+ """
+ Reaching goal reward
+ Success reward for reaching the goal with the robot's end-effector
+ """
+
+ def __init__(self, config):
+ super(ReachingGoalReward, self).__init__(config)
+ self.success_reward = self.config.get(
+ 'success_reward', 10.0
+ )
+ self.dist_tol = self.config.get('dist_tol', 0.1)
+
+ def get_reward(self, task, env):
+ """
+ Check if the distance between the robot's end-effector and the goal
+ is below the distance threshold
+
+ :param task: task instance
+ :param env: environment instance
+ :return: reward
+ """
+ success = l2_distance(
+ env.robots[0].get_end_effector_position(),
+ task.target_pos) < self.dist_tol
+ reward = self.success_reward if success else 0.0
+ return reward
diff --git a/gibson2/reward_functions/reward_function_base.py b/gibson2/reward_functions/reward_function_base.py
new file mode 100644
index 000000000..aa1576a29
--- /dev/null
+++ b/gibson2/reward_functions/reward_function_base.py
@@ -0,0 +1,32 @@
+from abc import abstractmethod, ABC
+
+
+class BaseRewardFunction(ABC):
+ """
+ Base RewardFunction class
+ Reward-specific reset and get_reward methods are implemented in subclasses
+ """
+
+ def __init__(self, config):
+ self.config = config
+
+ def reset(self, task, env):
+ """
+ Perform reward function-specific reset after episode reset.
+ Overwritten by subclasses.
+
+ :param task: task instance
+ :param env: environment instance
+ """
+ return
+
+ @abstractmethod
+ def get_reward(self, task, env):
+ """
+ Compute the reward at the current timestep. Overwritten by subclasses.
+
+ :param task: task instance
+ :param env: environment instance
+ :return: reward, info
+ """
+ raise NotImplementedError()
diff --git a/gibson2/robots/ant_robot.py b/gibson2/robots/ant_robot.py
index 6a53b9193..9e378b1d3 100644
--- a/gibson2/robots/ant_robot.py
+++ b/gibson2/robots/ant_robot.py
@@ -5,6 +5,11 @@ from gibson2.robots.robot_locomotor import LocomotorRobot
class Ant(LocomotorRobot):
+ """
+ OpenAI Ant Robot
+ Uses joint torque control
+ """
+
def __init__(self, config):
self.config = config
self.torque = config.get("torque", 1.0)
@@ -19,6 +24,9 @@ class Ant(LocomotorRobot):
)
def set_up_continuous_action_space(self):
+ """
+ Set up continuous action space
+ """
self.action_space = gym.spaces.Box(shape=(self.action_dim,),
low=-1.0,
high=1.0,
@@ -27,4 +35,7 @@ class Ant(LocomotorRobot):
self.action_low = -self.action_high
def set_up_discrete_action_space(self):
- assert False, "Ant does not support discrete actions"
\ No newline at end of file
+ """
+ Set up discrete action space
+ """
+ assert False, "Ant does not support discrete actions"
diff --git a/gibson2/robots/fetch_robot.py b/gibson2/robots/fetch_robot.py
index fc98d8049..08f4cb452 100644
--- a/gibson2/robots/fetch_robot.py
+++ b/gibson2/robots/fetch_robot.py
@@ -7,6 +7,12 @@ from gibson2.robots.robot_locomotor import LocomotorRobot
class Fetch(LocomotorRobot):
+ """
+ Fetch Robot
+ Reference: https://fetchrobotics.com/robotics-platforms/fetch-mobile-manipulator/
+ Uses joint velocity control
+ """
+
def __init__(self, config):
self.config = config
self.wheel_velocity = config.get('wheel_velocity', 1.0)
@@ -24,6 +30,9 @@ class Fetch(LocomotorRobot):
self_collision=True)
def set_up_continuous_action_space(self):
+ """
+ Set up continuous action space
+ """
self.action_high = np.array([self.wheel_velocity] * self.wheel_dim +
[self.torso_lift_velocity] * self.torso_lift_dim +
[self.arm_velocity] * self.arm_dim)
@@ -34,9 +43,16 @@ class Fetch(LocomotorRobot):
dtype=np.float32)
def set_up_discrete_action_space(self):
+ """
+ Set up discrete action space
+ """
assert False, "Fetch does not support discrete actions"
def robot_specific_reset(self):
+ """
+ Fetch robot specific reset.
+ Reset the torso lift joint and tuck the arm towards the body
+ """
super(Fetch, self).robot_specific_reset()
# roll the arm to its body
@@ -53,7 +69,8 @@ class Fetch(LocomotorRobot):
'wrist_roll_joint'
])
- rest_position = (0.02, np.pi / 2.0 - 0.4, np.pi / 2.0 - 0.1, -0.4, np.pi / 2.0 + 0.1, 0.0, np.pi / 2.0, 0.0)
+ rest_position = (0.02, np.pi / 2.0 - 0.4, np.pi / 2.0 -
+ 0.1, -0.4, np.pi / 2.0 + 0.1, 0.0, np.pi / 2.0, 0.0)
# might be a better pose to initiate manipulation
# rest_position = (0.30322468280792236, -1.414019864768982,
# 1.5178184935241699, 0.8189625336474915,
@@ -63,25 +80,36 @@ class Fetch(LocomotorRobot):
set_joint_positions(robot_id, arm_joints, rest_position)
def get_end_effector_position(self):
+ """
+ Get end-effector position
+ """
return self.parts['gripper_link'].get_position()
+ def end_effector_part_index(self):
+ """
+ Get end-effector link id
+ """
+ return self.parts['gripper_link'].body_part_index
+
def load(self):
+ """
+ Load the robot into pybullet. Filter out unnecessary self collision
+ due to modeling imperfection in the URDF
+ """
ids = super(Fetch, self).load()
robot_id = self.robot_ids[0]
- # disable collision between torso_lift_joint and shoulder_lift_joint
- # between torso_lift_joint and torso_fixed_joint
- # between caster_wheel_joint and estop_joint
- # between caster_wheel_joint and laser_joint
- # between caster_wheel_joint and torso_fixed_joint
- # between caster_wheel_joint and l_wheel_joint
- # between caster_wheel_joint and r_wheel_joint
- p.setCollisionFilterPair(robot_id, robot_id, 3, 13, 0)
- p.setCollisionFilterPair(robot_id, robot_id, 3, 22, 0)
- p.setCollisionFilterPair(robot_id, robot_id, 0, 20, 0)
- p.setCollisionFilterPair(robot_id, robot_id, 0, 21, 0)
- p.setCollisionFilterPair(robot_id, robot_id, 0, 22, 0)
- p.setCollisionFilterPair(robot_id, robot_id, 0, 1, 0)
- p.setCollisionFilterPair(robot_id, robot_id, 0, 2, 0)
+ disable_collision_names = [
+ ['torso_lift_joint', 'shoulder_lift_joint'],
+ ['torso_lift_joint', 'torso_fixed_joint'],
+ ['caster_wheel_joint', 'estop_joint'],
+ ['caster_wheel_joint', 'laser_joint'],
+ ['caster_wheel_joint', 'torso_fixed_joint'],
+ ['caster_wheel_joint', 'l_wheel_joint'],
+ ['caster_wheel_joint', 'r_wheel_joint'],
+ ]
+ for names in disable_collision_names:
+ link_a, link_b = joints_from_names(robot_id, names)
+ p.setCollisionFilterPair(robot_id, robot_id, link_a, link_b, 0)
- return ids
\ No newline at end of file
+ return ids
diff --git a/gibson2/robots/freight_robot.py b/gibson2/robots/freight_robot.py
index 66daff6e5..e388f08f5 100644
--- a/gibson2/robots/freight_robot.py
+++ b/gibson2/robots/freight_robot.py
@@ -5,6 +5,12 @@ from gibson2.robots.robot_locomotor import LocomotorRobot
class Freight(LocomotorRobot):
+ """
+ Freight Robot
+ Reference: https://fetchrobotics.com/robotics-platforms/freight-base/
+ Uses joint velocity control
+ """
+
def __init__(self, config):
self.config = config
self.velocity = config.get("velocity", 1.0)
@@ -16,6 +22,9 @@ class Freight(LocomotorRobot):
control="velocity")
def set_up_continuous_action_space(self):
+ """
+ Set up continuous action space
+ """
self.action_space = gym.spaces.Box(shape=(self.action_dim,),
low=-1.0,
high=1.0,
@@ -24,6 +33,9 @@ class Freight(LocomotorRobot):
self.action_low = -self.action_high
def set_up_discrete_action_space(self):
+ """
+ Set up discrete action space
+ """
self.action_list = [[self.velocity, self.velocity], [-self.velocity, -self.velocity],
[self.velocity * 0.5, -self.velocity * 0.5],
[-self.velocity * 0.5, self.velocity * 0.5], [0, 0]]
@@ -37,4 +49,4 @@ class Freight(LocomotorRobot):
(ord('d'),): 2, # turn right
(ord('a'),): 3, # turn left
(): 4 # stay still
- }
\ No newline at end of file
+ }
diff --git a/gibson2/robots/humanoid_robot.py b/gibson2/robots/humanoid_robot.py
index 845905ad7..9e726ae55 100644
--- a/gibson2/robots/humanoid_robot.py
+++ b/gibson2/robots/humanoid_robot.py
@@ -8,6 +8,11 @@ from gibson2.robots.robot_locomotor import LocomotorRobot
class Humanoid(LocomotorRobot):
+ """
+ OpenAI Humanoid robot
+ Uses joint torque control
+ """
+
def __init__(self, config):
self.config = config
self.torque = config.get("torque", 0.1)
@@ -25,6 +30,9 @@ class Humanoid(LocomotorRobot):
)
def set_up_continuous_action_space(self):
+ """
+ Set up continuous action space
+ """
self.action_space = gym.spaces.Box(shape=(self.action_dim,),
low=-1.0,
high=1.0,
@@ -33,11 +41,19 @@ class Humanoid(LocomotorRobot):
self.action_low = -self.action_high
def set_up_discrete_action_space(self):
- self.action_list = [[self.torque] * self.action_dim, [0.0] * self.action_dim]
+ """
+ Set up discrete action space
+ """
+ self.action_list = [[self.torque] *
+ self.action_dim, [0.0] * self.action_dim]
self.action_space = gym.spaces.Discrete(len(self.action_list))
self.setup_keys_to_action()
def robot_specific_reset(self):
+ """
+ Humanoid robot specific reset
+ Add spherical radiance/glass shield to protect the robot's camera
+ """
humanoidId = -1
numBodies = p.getNumBodies()
for i in range(numBodies):
@@ -45,22 +61,25 @@ class Humanoid(LocomotorRobot):
if bodyInfo[1].decode("ascii") == 'humanoid':
humanoidId = i
- ## Spherical radiance/glass shield to protect the robot's camera
+ # Spherical radiance/glass shield to protect the robot's camera
super(Humanoid, self).robot_specific_reset()
if self.glass_id is None:
- glass_path = os.path.join(self.physics_model_dir, "humanoid/glass.xml")
+ glass_path = os.path.join(
+ self.physics_model_dir, "humanoid/glass.xml")
glass_id = p.loadMJCF(glass_path)[0]
self.glass_id = glass_id
p.changeVisualShape(self.glass_id, -1, rgbaColor=[0, 0, 0, 0])
- p.createMultiBody(baseVisualShapeIndex=glass_id, baseCollisionShapeIndex=-1)
+ p.createMultiBody(baseVisualShapeIndex=glass_id,
+ baseCollisionShapeIndex=-1)
cid = p.createConstraint(humanoidId,
-1,
self.glass_id,
-1,
p.JOINT_FIXED,
jointAxis=[0, 0, 0],
- parentFramePosition=[0, 0, self.glass_offset],
+ parentFramePosition=[
+ 0, 0, self.glass_offset],
childFramePosition=[0, 0, 0])
robot_pos = list(self.get_position())
@@ -70,23 +89,30 @@ class Humanoid(LocomotorRobot):
self.motor_names = ["abdomen_z", "abdomen_y", "abdomen_x"]
self.motor_power = [100, 100, 100]
- self.motor_names += ["right_hip_x", "right_hip_z", "right_hip_y", "right_knee"]
+ self.motor_names += ["right_hip_x",
+ "right_hip_z", "right_hip_y", "right_knee"]
self.motor_power += [100, 100, 300, 200]
- self.motor_names += ["left_hip_x", "left_hip_z", "left_hip_y", "left_knee"]
+ self.motor_names += ["left_hip_x",
+ "left_hip_z", "left_hip_y", "left_knee"]
self.motor_power += [100, 100, 300, 200]
- self.motor_names += ["right_shoulder1", "right_shoulder2", "right_elbow"]
+ self.motor_names += ["right_shoulder1",
+ "right_shoulder2", "right_elbow"]
self.motor_power += [75, 75, 75]
self.motor_names += ["left_shoulder1", "left_shoulder2", "left_elbow"]
self.motor_power += [75, 75, 75]
self.motors = [self.jdict[n] for n in self.motor_names]
def apply_action(self, action):
+ """
+ Apply policy action
+ """
real_action = self.policy_action_to_robot_action(action)
if self.is_discrete:
self.apply_robot_action(real_action)
else:
for i, m, joint_torque_coef in zip(range(17), self.motors, self.motor_power):
- m.set_motor_torque(float(joint_torque_coef * self.torque_coef * real_action[i]))
+ m.set_motor_torque(
+ float(joint_torque_coef * self.torque_coef * real_action[i]))
def setup_keys_to_action(self):
- self.keys_to_action = {(ord('w'),): 0, (): 1}
\ No newline at end of file
+ self.keys_to_action = {(ord('w'),): 0, (): 1}
diff --git a/gibson2/robots/husky_robot.py b/gibson2/robots/husky_robot.py
index 806c4f508..a91bc2a27 100644
--- a/gibson2/robots/husky_robot.py
+++ b/gibson2/robots/husky_robot.py
@@ -5,6 +5,12 @@ from gibson2.robots.robot_locomotor import LocomotorRobot
class Husky(LocomotorRobot):
+ """
+ Husky robot
+ Reference: https://clearpathrobotics.com/, http://wiki.ros.org/Robots/Husky
+ Uses joint torque control
+ """
+
def __init__(self, config):
self.config = config
self.torque = config.get("torque", 0.03)
@@ -17,6 +23,9 @@ class Husky(LocomotorRobot):
control="torque")
def set_up_continuous_action_space(self):
+ """
+ Set up continuous action space
+ """
self.action_space = gym.spaces.Box(shape=(self.action_dim,),
low=-1.0,
high=1.0,
@@ -25,14 +34,21 @@ class Husky(LocomotorRobot):
self.action_low = -self.action_high
def set_up_discrete_action_space(self):
+ """
+ Set up discrete action space
+ """
self.action_list = [[self.torque, self.torque, self.torque, self.torque],
- [-self.torque, -self.torque, -self.torque, -self.torque],
+ [-self.torque, -self.torque, -
+ self.torque, -self.torque],
[self.torque, -self.torque, self.torque, -self.torque],
[-self.torque, self.torque, -self.torque, self.torque], [0, 0, 0, 0]]
self.action_space = gym.spaces.Discrete(len(self.action_list))
self.setup_keys_to_action()
def steering_cost(self, action):
+ """
+ Deprecated code for reward computation
+ """
if not self.is_discrete:
return 0
if action == 2 or action == 3:
@@ -41,16 +57,20 @@ class Husky(LocomotorRobot):
return 0
def alive_bonus(self, z, pitch):
+ """
+ Deprecated code for reward computation
+ """
top_xyz = self.parts["top_bumper_link"].get_position()
bottom_xyz = self.parts["base_link"].get_position()
alive = top_xyz[2] > bottom_xyz[2]
- return +1 if alive else -100 # 0.25 is central sphere rad, die if it scrapes the ground
+ # 0.25 is central sphere rad, die if it scrapes the ground
+ return +1 if alive else -100
def setup_keys_to_action(self):
self.keys_to_action = {
- (ord('w'),): 0, ## forward
- (ord('s'),): 1, ## backward
- (ord('d'),): 2, ## turn right
- (ord('a'),): 3, ## turn left
+ (ord('w'),): 0, # forward
+ (ord('s'),): 1, # backward
+ (ord('d'),): 2, # turn right
+ (ord('a'),): 3, # turn left
(): 4
- }
\ No newline at end of file
+ }
diff --git a/gibson2/robots/jr2_kinova_robot.py b/gibson2/robots/jr2_kinova_robot.py
index c1d126993..eb465c590 100644
--- a/gibson2/robots/jr2_kinova_robot.py
+++ b/gibson2/robots/jr2_kinova_robot.py
@@ -3,9 +3,16 @@ import numpy as np
import pybullet as p
from gibson2.robots.robot_locomotor import LocomotorRobot
+from gibson2.external.pybullet_tools.utils import joints_from_names, set_joint_positions
class JR2_Kinova(LocomotorRobot):
+ """
+ JR2 Kinova robot
+ Reference: https://cvgl.stanford.edu/projects/jackrabbot/
+ Uses joint velocity control
+ """
+
def __init__(self, config):
self.config = config
self.wheel_velocity = config.get('wheel_velocity', 0.3)
@@ -22,7 +29,11 @@ class JR2_Kinova(LocomotorRobot):
self_collision=True)
def set_up_continuous_action_space(self):
- self.action_high = np.array([self.wheel_velocity] * self.wheel_dim + [self.arm_velocity] * self.arm_dim)
+ """
+ Set up continuous action space
+ """
+ self.action_high = np.array(
+ [self.wheel_velocity] * self.wheel_dim + [self.arm_velocity] * self.arm_dim)
self.action_low = -self.action_high
self.action_space = gym.spaces.Box(shape=(self.wheel_dim + self.arm_dim,),
low=-1.0,
@@ -30,13 +41,22 @@ class JR2_Kinova(LocomotorRobot):
dtype=np.float32)
def set_up_discrete_action_space(self):
+ """
+ Set up discrete action space
+ """
assert False, "JR2_Kinova does not support discrete actions"
def get_end_effector_position(self):
+ """
+ Get end-effector position
+ """
return self.parts['m1n6s200_end_effector'].get_position()
- # initialize JR's arm to almost the same height as the door handle to ease exploration
def robot_specific_reset(self):
+ """
+ JR2 Kinova robot specific reset.
+ Initialize JR's arm to about the same height at its neck, facing forward
+ """
super(JR2_Kinova, self).robot_specific_reset()
self.ordered_joints[2].reset_joint_state(-np.pi / 2.0, 0.0)
self.ordered_joints[3].reset_joint_state(np.pi / 2.0, 0.0)
@@ -45,20 +65,23 @@ class JR2_Kinova(LocomotorRobot):
self.ordered_joints[6].reset_joint_state(0.0, 0.0)
def load(self):
+ """
+ Load the robot into pybullet. Filter out unnecessary self collision
+ due to modeling imperfection in the URDF
+ """
ids = super(JR2_Kinova, self).load()
robot_id = self.robot_ids[0]
- # disable collision between base_chassis_joint and pan_joint
- # between base_chassis_joint and tilt_joint
- # between base_chassis_joint and camera_joint
- # between jr2_fixed_body_joint and pan_joint
- # between jr2_fixed_body_joint and tilt_joint
- # between jr2_fixed_body_joint and camera_joint
- p.setCollisionFilterPair(robot_id, robot_id, 0, 17, 0)
- p.setCollisionFilterPair(robot_id, robot_id, 0, 18, 0)
- p.setCollisionFilterPair(robot_id, robot_id, 0, 19, 0)
- p.setCollisionFilterPair(robot_id, robot_id, 1, 17, 0)
- p.setCollisionFilterPair(robot_id, robot_id, 1, 18, 0)
- p.setCollisionFilterPair(robot_id, robot_id, 1, 19, 0)
+ disable_collision_names = [
+ ['base_chassis_joint', 'pan_joint'],
+ ['base_chassis_joint', 'tilt_joint'],
+ ['base_chassis_joint', 'camera_joint'],
+ ['jr2_fixed_body_joint', 'pan_joint'],
+ ['jr2_fixed_body_joint', 'tilt_joint'],
+ ['jr2_fixed_body_joint', 'camera_joint'],
+ ]
+ for names in disable_collision_names:
+ link_a, link_b = joints_from_names(robot_id, names)
+ p.setCollisionFilterPair(robot_id, robot_id, link_a, link_b, 0)
- return ids
\ No newline at end of file
+ return ids
diff --git a/gibson2/robots/jr2_robot.py b/gibson2/robots/jr2_robot.py
index 61d84892e..3f4d7488a 100644
--- a/gibson2/robots/jr2_robot.py
+++ b/gibson2/robots/jr2_robot.py
@@ -5,6 +5,12 @@ from gibson2.robots.robot_locomotor import LocomotorRobot
class JR2(LocomotorRobot):
+ """
+ JR2 robot (no arm)
+ Reference: https://cvgl.stanford.edu/projects/jackrabbot/
+ Uses joint velocity control
+ """
+
def __init__(self, config):
self.config = config
self.velocity = config.get('velocity', 1.0)
@@ -16,6 +22,9 @@ class JR2(LocomotorRobot):
control='velocity')
def set_up_continuous_action_space(self):
+ """
+ Set up continuous action space
+ """
self.action_space = gym.spaces.Box(shape=(self.action_dim,),
low=-1.0,
high=1.0,
@@ -24,6 +33,9 @@ class JR2(LocomotorRobot):
self.action_low = -self.action_high
def set_up_discrete_action_space(self):
+ """
+ Set up discrete action space
+ """
self.action_list = [[self.velocity, self.velocity, 0, self.velocity],
[-self.velocity, -self.velocity, 0, -self.velocity],
[self.velocity, -self.velocity, -self.velocity, 0],
@@ -33,9 +45,9 @@ class JR2(LocomotorRobot):
def setup_keys_to_action(self):
self.keys_to_action = {
- (ord('w'),): 0, ## forward
- (ord('s'),): 1, ## backward
- (ord('d'),): 2, ## turn right
- (ord('a'),): 3, ## turn left
+ (ord('w'),): 0, # forward
+ (ord('s'),): 1, # backward
+ (ord('d'),): 2, # turn right
+ (ord('a'),): 3, # turn left
(): 4
- }
\ No newline at end of file
+ }
diff --git a/gibson2/robots/locobot_robot.py b/gibson2/robots/locobot_robot.py
index b32cea770..469acf4e1 100644
--- a/gibson2/robots/locobot_robot.py
+++ b/gibson2/robots/locobot_robot.py
@@ -5,6 +5,12 @@ from gibson2.robots.robot_locomotor import LocomotorRobot
class Locobot(LocomotorRobot):
+ """
+ Locobot robot
+ Reference: https://www.trossenrobotics.com/locobot-pyrobot-ros-rover.aspx
+ Uses differentiable_drive / twist command control
+ """
+
def __init__(self, config):
self.config = config
# https://www.trossenrobotics.com/locobot-pyrobot-ros-rover.aspx
@@ -24,6 +30,9 @@ class Locobot(LocomotorRobot):
control="differential_drive")
def set_up_continuous_action_space(self):
+ """
+ Set up continuous action space
+ """
self.action_high = np.zeros(self.wheel_dim)
self.action_high[0] = self.linear_velocity
self.action_high[1] = self.angular_velocity
@@ -34,7 +43,13 @@ class Locobot(LocomotorRobot):
dtype=np.float32)
def set_up_discrete_action_space(self):
+ """
+ Set up discrete action space
+ """
assert False, "Locobot does not support discrete actions"
def get_end_effector_position(self):
- return self.parts['gripper_link'].get_position()
\ No newline at end of file
+ """
+ Get end-effector position
+ """
+ return self.parts['gripper_link'].get_position()
diff --git a/gibson2/robots/minitaur_robot.py b/gibson2/robots/minitaur_robot.py
index b7c59f8c3..0b55391fb 100644
--- a/gibson2/robots/minitaur_robot.py
+++ b/gibson2/robots/minitaur_robot.py
@@ -13,6 +13,11 @@ tracking_camera = {'yaw': 20, 'z_offset': 0.3, 'distance': 2, 'pitch': -20}
class MinitaurBase(LocomotorRobot):
+ """
+ Minitaur robot
+ Reference: https://www.ghostrobotics.io/
+ Uses joint position control
+ """
model_type = "URDF"
default_scale = 1
@@ -35,7 +40,7 @@ class MinitaurBase(LocomotorRobot):
self_collision_enabled = True
motor_velocity_limit = np.inf
- #accurate_motor_model_enabled=False ## (hzyjerry): affect speed?
+ # accurate_motor_model_enabled=False ## (hzyjerry): affect speed?
motor_kp = 1.00
motor_kd = 0.2
torque_control_enabled = False
@@ -79,10 +84,11 @@ class MinitaurBase(LocomotorRobot):
self.model_type = "URDF"
#self.robot_name = "quadruped"
self.robot_name = "base_chassis_link"
- scale = config["robot_scale"] if "robot_scale" in config.keys() else self.default_scale
+ scale = config["robot_scale"] if "robot_scale" in config.keys(
+ ) else self.default_scale
LocomotorRobot.__init__(self,
- "quadruped/minitaur.urdf",
+ "quadruped/minitaur.urdf",
self.robot_name,
action_dim=8,
sensor_dim=self.OBSERVATION_DIM,
@@ -96,7 +102,7 @@ class MinitaurBase(LocomotorRobot):
self.r_f = 0.1
self.time_step = config["speed"]["timestep"]
self.pd_control_enabled = pd_control_enabled
- self.minitaur = None ## TODO: fix this
+ self.minitaur = None # TODO: fix this
self.accurate_motor_model_enabled = accurate_motor_model_enabled
if self.accurate_motor_model_enabled:
self._kp = self.motor_kp
@@ -138,27 +144,30 @@ class MinitaurBase(LocomotorRobot):
self.fmax = [0] * 8
def _RecordMassInfoFromURDF(self):
- self._base_mass_urdf = p.getDynamicsInfo(self.minitaur, self.BASE_LINK_ID)[0]
+ self._base_mass_urdf = p.getDynamicsInfo(
+ self.minitaur, self.BASE_LINK_ID)[0]
self._leg_masses_urdf = []
- self._leg_masses_urdf.append(p.getDynamicsInfo(self.minitaur, self.LEG_LINK_ID[0])[0])
- self._leg_masses_urdf.append(p.getDynamicsInfo(self.minitaur, self.MOTOR_LINK_ID[0])[0])
+ self._leg_masses_urdf.append(p.getDynamicsInfo(
+ self.minitaur, self.LEG_LINK_ID[0])[0])
+ self._leg_masses_urdf.append(p.getDynamicsInfo(
+ self.minitaur, self.MOTOR_LINK_ID[0])[0])
def _BuildJointNameToIdDict(self):
num_joints = p.getNumJoints(self.minitaur)
self.joint_name_to_id = {}
for i in range(num_joints):
joint_info = p.getJointInfo(self.minitaur, i)
- self.joint_name_to_id[joint_info[1].decode("UTF-8")] = joint_info[0]
+ self.joint_name_to_id[joint_info[1].decode(
+ "UTF-8")] = joint_info[0]
def _BuildMotorIdList(self):
- self._motor_id_list = [self.joint_name_to_id[motor_name] for motor_name in self.MOTOR_NAMES]
+ self._motor_id_list = [self.joint_name_to_id[motor_name]
+ for motor_name in self.MOTOR_NAMES]
def robot_specific_reset(self, reload_urdf=True):
"""Reset the minitaur to its initial states.
- Args:
- reload_urdf: Whether to reload the urdf file. If not, Reset() just place
- the minitaur back to its starting position.
+ :param reload_urdf: whether to reload the urdf file. If not, reset() just place the minitaur back to its starting position.
"""
if self.minitaur is None:
self.minitaur = self.robot_ids[0]
@@ -191,17 +200,18 @@ class MinitaurBase(LocomotorRobot):
force=self.max_force)
def _SetDesiredMotorAngleByName(self, motor_name, desired_angle):
- self._SetDesiredMotorAngleById(self.joint_name_to_id[motor_name], desired_angle)
+ self._SetDesiredMotorAngleById(
+ self.joint_name_to_id[motor_name], desired_angle)
def calc_potential(self):
return 0
def setup_keys_to_action(self):
self.keys_to_action = {
- (ord('s'), ): 0, ## backward
- (ord('w'), ): 1, ## forward
- (ord('d'), ): 2, ## turn right
- (ord('a'), ): 3, ## turn left
+ (ord('s'), ): 0, # backward
+ (ord('w'), ): 1, # forward
+ (ord('d'), ): 2, # turn right
+ (ord('a'), ): 3, # turn left
(): 4
}
@@ -228,27 +238,34 @@ class MinitaurBase(LocomotorRobot):
leg_position = self.LEG_POSITION[leg_id]
p.resetJointState(self.minitaur,
- self.joint_name_to_id["motor_" + leg_position + "L_joint"],
+ self.joint_name_to_id["motor_" +
+ leg_position + "L_joint"],
self.motor_direction[2 * leg_id] * half_pi,
targetVelocity=0)
p.resetJointState(self.minitaur,
- self.joint_name_to_id["knee_" + leg_position + "L_link"],
+ self.joint_name_to_id["knee_" +
+ leg_position + "L_link"],
self.motor_direction[2 * leg_id] * knee_angle,
targetVelocity=0)
p.resetJointState(self.minitaur,
- self.joint_name_to_id["motor_" + leg_position + "R_joint"],
+ self.joint_name_to_id["motor_" +
+ leg_position + "R_joint"],
self.motor_direction[2 * leg_id + 1] * half_pi,
targetVelocity=0)
p.resetJointState(self.minitaur,
- self.joint_name_to_id["knee_" + leg_position + "R_link"],
+ self.joint_name_to_id["knee_" +
+ leg_position + "R_link"],
self.motor_direction[2 * leg_id + 1] * knee_angle,
targetVelocity=0)
if add_constraint:
p.createConstraint(self.minitaur,
- self.joint_name_to_id["knee_" + leg_position + "R_link"],
+ self.joint_name_to_id["knee_" +
+ leg_position + "R_link"],
self.minitaur,
- self.joint_name_to_id["knee_" + leg_position + "L_link"],
- p.JOINT_POINT2POINT, [0, 0, 0], self.KNEE_CONSTRAINT_POINT_RIGHT,
+ self.joint_name_to_id["knee_" +
+ leg_position + "L_link"],
+ p.JOINT_POINT2POINT, [
+ 0, 0, 0], self.KNEE_CONSTRAINT_POINT_RIGHT,
self.KNEE_CONSTRAINT_POINT_LEFT)
if self.accurate_motor_model_enabled or self.pd_control_enabled:
@@ -324,7 +341,8 @@ class MinitaurBase(LocomotorRobot):
) # Joint velocity.
upper_bound[2 * self.num_motors:3 * self.num_motors] = (motor.OBSERVED_TORQUE_LIMIT
) # Joint torque.
- upper_bound[3 * self.num_motors:] = 1.0 # Quaternion of base orientation.
+ # Quaternion of base orientation.
+ upper_bound[3 * self.num_motors:] = 1.0
return upper_bound
def GetObservationLowerBound(self):
@@ -376,8 +394,10 @@ class MinitaurBase(LocomotorRobot):
#print("motor commands 1", motor_commands)
if self.motor_velocity_limit < np.inf:
current_motor_angle = self.GetMotorAngles()
- motor_commands_max = (current_motor_angle + self.time_step * self.motor_velocity_limit)
- motor_commands_min = (current_motor_angle - self.time_step * self.motor_velocity_limit)
+ motor_commands_max = (current_motor_angle +
+ self.time_step * self.motor_velocity_limit)
+ motor_commands_min = (current_motor_angle -
+ self.time_step * self.motor_velocity_limit)
#motor_commands = np.clip(motor_commands, motor_commands_min, motor_commands_max)
#print("motor commands 2", motor_commands)
if self.accurate_motor_model_enabled or self.pd_control_enabled:
@@ -390,7 +410,7 @@ class MinitaurBase(LocomotorRobot):
#print("motor commands", motor_commands)
#print("actual torque", actual_torque, "observed torque", observed_torque)
self.debug_count += 1
- #if self.debug_count == 30:
+ # if self.debug_count == 30:
# sys.exit()
for i in range(len(self.qmax)):
if q[i] > self.qmax[i]:
@@ -409,10 +429,11 @@ class MinitaurBase(LocomotorRobot):
# The torque is already in the observation space because we use
# GetMotorAngles and GetMotorVelocities.
self.observed_motor_torques = observed_torque
- #actual_torque.fill(0.0)
+ # actual_torque.fill(0.0)
# Transform into the motor space when applying the torque.
- self.applied_motor_torques = np.multiply(actual_torque, self.motor_direction)
+ self.applied_motor_torques = np.multiply(
+ actual_torque, self.motor_direction)
for motor_id, motor_torque, motor_enabled in zip(self._motor_id_list,
self.applied_motor_torques,
self._motor_enabled_list):
@@ -427,7 +448,8 @@ class MinitaurBase(LocomotorRobot):
#print("F max", self.fmax)
else:
- torque_commands = -self._kp * (q - motor_commands) - self._kd * qdot
+ torque_commands = -self._kp * \
+ (q - motor_commands) - self._kd * qdot
# The torque is already in the observation space because we use
# GetMotorAngles and GetMotorVelocities.
@@ -441,11 +463,13 @@ class MinitaurBase(LocomotorRobot):
self._SetMotorTorqueById(motor_id, motor_torque)
print("Apply motor", self.applied_motor_torques)
else:
- motor_commands_with_direction = np.multiply(motor_commands, self.motor_direction)
+ motor_commands_with_direction = np.multiply(
+ motor_commands, self.motor_direction)
for motor_id, motor_command_with_direction in zip(self._motor_id_list,
motor_commands_with_direction):
print("command", motor_command_with_direction)
- self._SetDesiredMotorAngleById(motor_id, motor_command_with_direction)
+ self._SetDesiredMotorAngleById(
+ motor_id, motor_command_with_direction)
def GetMotorAngles(self):
"""Get the eight motor angles at the current moment.
@@ -507,7 +531,8 @@ class MinitaurBase(LocomotorRobot):
extension_component = (-1)**i * quater_pi * actions[action_idx]
if i >= half_num_motors:
extension_component = -extension_component
- motor_angle[i] = (math.pi + forward_backward_component + extension_component)
+ motor_angle[i] = (
+ math.pi + forward_backward_component + extension_component)
return motor_angle
def GetBaseMassFromURDF(self):
@@ -545,7 +570,8 @@ class MinitaurBase(LocomotorRobot):
shared by all four feet.
"""
for link_id in self.FOOT_LINK_ID:
- p.changeDynamics(self.minitaur, link_id, lateralFriction=foot_friction)
+ p.changeDynamics(self.minitaur, link_id,
+ lateralFriction=foot_friction)
def SetBatteryVoltage(self, voltage):
if self.accurate_motor_model_enabled:
@@ -558,7 +584,7 @@ class MinitaurBase(LocomotorRobot):
class Minitaur(MinitaurBase):
'''Wrapper class for gibson interface
-
+
Attribtues:
self.eyes
self.resolution
@@ -575,7 +601,8 @@ class Minitaur(MinitaurBase):
'''
def __init__(self, config, env, pd_control_enabled=True, accurate_motor_model_enabled=True):
- MinitaurBase.__init__(self, config, env, pd_control_enabled, accurate_motor_model_enabled)
+ MinitaurBase.__init__(
+ self, config, env, pd_control_enabled, accurate_motor_model_enabled)
def calc_state(self):
MinitaurBase.GetObservation(self)
diff --git a/gibson2/robots/quadrotor_robot.py b/gibson2/robots/quadrotor_robot.py
index f0ff42fde..e7e3a0bb4 100644
--- a/gibson2/robots/quadrotor_robot.py
+++ b/gibson2/robots/quadrotor_robot.py
@@ -6,6 +6,12 @@ from gibson2.robots.robot_locomotor import LocomotorRobot
class Quadrotor(LocomotorRobot):
+ """
+ Quadrotor robot
+ Reference: https://repository.upenn.edu/cgi/viewcontent.cgi?referer=https://www.google.com/&httpsredir=1&article=1705&context=edissertations
+ Uses joint torque control
+ """
+
def __init__(self, config):
self.config = config
self.torque = config.get("torque", 0.02)
@@ -18,6 +24,9 @@ class Quadrotor(LocomotorRobot):
control="torque")
def set_up_continuous_action_space(self):
+ """
+ Set up continuous action space
+ """
self.action_space = gym.spaces.Box(shape=(self.action_dim,),
low=-1.0,
high=1.0,
@@ -26,25 +35,34 @@ class Quadrotor(LocomotorRobot):
self.action_low = -self.action_high
def set_up_discrete_action_space(self):
+ """
+ Set up discrete action space
+ """
self.action_list = [[self.torque, 0, 0, 0, 0, 0], [-self.torque, 0, 0, 0, 0, 0],
- [0, self.torque, 0, 0, 0, 0], [0, -self.torque, 0, 0, 0, 0],
- [0, 0, self.torque, 0, 0, 0], [0, 0, -self.torque, 0, 0, 0],
+ [0, self.torque, 0, 0, 0, 0], [
+ 0, -self.torque, 0, 0, 0, 0],
+ [0, 0, self.torque, 0, 0, 0], [
+ 0, 0, -self.torque, 0, 0, 0],
[0, 0, 0, 0, 0, 0]]
self.action_space = gym.spaces.Discrete(len(self.action_list))
self.setup_keys_to_action()
def apply_action(self, action):
+ """
+ Apply policy action. Zero gravity.
+ """
real_action = self.policy_action_to_robot_action(action)
p.setGravity(0, 0, 0)
- p.resetBaseVelocity(self.robot_ids[0], real_action[:3], real_action[3:])
+ p.resetBaseVelocity(
+ self.robot_ids[0], real_action[:3], real_action[3:])
def setup_keys_to_action(self):
self.keys_to_action = {
- (ord('w'),): 0, ## +x
- (ord('s'),): 1, ## -x
- (ord('d'),): 2, ## +y
- (ord('a'),): 3, ## -y
- (ord('z'),): 4, ## +z
- (ord('x'),): 5, ## -z
+ (ord('w'),): 0, # +x
+ (ord('s'),): 1, # -x
+ (ord('d'),): 2, # +y
+ (ord('a'),): 3, # -y
+ (ord('z'),): 4, # +z
+ (ord('x'),): 5, # -z
(): 6
- }
\ No newline at end of file
+ }
diff --git a/gibson2/robots/robot_base.py b/gibson2/robots/robot_base.py
index 2398ac1d4..b983147f3 100644
--- a/gibson2/robots/robot_base.py
+++ b/gibson2/robots/robot_base.py
@@ -1,7 +1,10 @@
import pybullet as p
-import gym, gym.spaces, gym.utils
+import gym
+import gym.spaces
+import gym.utils
import numpy as np
-import os, inspect
+import os
+import inspect
import pybullet_data
from transforms3d.euler import euler2quat
from transforms3d import quaternions
@@ -9,10 +12,6 @@ from gibson2.utils.utils import quatFromXYZW, quatToXYZW
import gibson2
import logging
-currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
-parentdir = os.path.dirname(currentdir)
-os.sys.path.insert(0, parentdir)
-
class BaseRobot(object):
"""
@@ -25,7 +24,7 @@ class BaseRobot(object):
:param model_file: model filename
:param base_name: name of the base link
:param scale: scale, default to 1
- :param self_collision: use self collision or not
+ :param self_collision: whether to enable self collision
"""
self.parts = None
self.jdict = None
@@ -52,6 +51,7 @@ class BaseRobot(object):
def load(self):
"""
Load the robot model into pybullet
+
:return: body id in pybullet
"""
flags = p.URDF_USE_MATERIAL_COLORS_FROM_MTL
@@ -59,11 +59,14 @@ class BaseRobot(object):
flags = flags | p.URDF_USE_SELF_COLLISION | p.URDF_USE_SELF_COLLISION_EXCLUDE_PARENT
if self.model_type == "MJCF":
- self.robot_ids = p.loadMJCF(os.path.join(self.physics_model_dir, self.model_file), flags=flags)
+ self.robot_ids = p.loadMJCF(os.path.join(
+ self.physics_model_dir, self.model_file), flags=flags)
if self.model_type == "URDF":
- self.robot_ids = (p.loadURDF(os.path.join(self.physics_model_dir, self.model_file), globalScaling=self.scale, flags=flags),)
+ self.robot_ids = (p.loadURDF(os.path.join(
+ self.physics_model_dir, self.model_file), globalScaling=self.scale, flags=flags),)
- self.parts, self.jdict, self.ordered_joints, self.robot_body, self.robot_mass = self.parse_robot(self.robot_ids)
+ self.parts, self.jdict, self.ordered_joints, self.robot_body, self.robot_mass = self.parse_robot(
+ self.robot_ids)
assert "eyes" in self.parts, 'Please add a link named "eyes" in your robot URDF file with the same pose as the onboard camera. Feel free to check out assets/models/turtlebot/turtlebot.urdf for an example.'
self.eyes = self.parts["eyes"]
@@ -73,6 +76,7 @@ class BaseRobot(object):
def parse_robot(self, bodies):
"""
Parse the robot to get properties including joint information and mass
+
:param bodies: body ids in pybullet
:return: parts, joints, ordered_joints, robot_body, robot_mass
"""
@@ -118,8 +122,8 @@ class BaseRobot(object):
force=0)
_, joint_name, joint_type, _, _, _, _, _, _, _, _, _, part_name, _, _, _, _ = \
p.getJointInfo(bodies[0], j)
- print("Joint name and index: ", joint_name, j)
- logging.debug('Robot joint: {}'.format(p.getJointInfo(bodies[0], j)))
+ logging.debug('Robot joint: {}'.format(
+ p.getJointInfo(bodies[0], j)))
joint_name = joint_name.decode("utf8")
part_name = part_name.decode("utf8")
@@ -152,13 +156,24 @@ class BaseRobot(object):
return parts, joints, ordered_joints, self.robot_body, robot_mass
def robot_specific_reset(self):
+ """
+ Reset function for each specific robot. Overwritten by subclasses
+ """
raise NotImplementedError
def calc_state(self):
+ """
+ Calculate proprioceptive states for each specific robot.
+ Overwritten by subclasses
+ """
raise NotImplementedError
class BodyPart:
+ """
+ Body part (link) of Robots
+ """
+
def __init__(self, body_name, bodies, body_index, body_part_index):
self.bodies = bodies
self.body_name = body_name
@@ -169,6 +184,7 @@ class BodyPart:
self.movement_cid = -1
def get_name(self):
+ """Get name of body part"""
return self.body_name
def _state_fields_of_pose_of(self, body_id, link_id=-1):
@@ -176,14 +192,17 @@ class BodyPart:
if link_id == -1:
(x, y, z), (a, b, c, d) = p.getBasePositionAndOrientation(body_id)
else:
- _, _, _, _, (x, y, z), (a, b, c, d) = p.getLinkState(body_id, link_id)
+ _, _, _, _, (x, y, z), (a, b, c, d) = p.getLinkState(
+ body_id, link_id)
return np.array([x, y, z, a, b, c, d])
def _set_fields_of_pose_of(self, pos, orn):
"""Set pose of body part"""
- p.resetBasePositionAndOrientation(self.bodies[self.body_index], pos, orn)
+ p.resetBasePositionAndOrientation(
+ self.bodies[self.body_index], pos, orn)
def get_pose(self):
+ """Get pose of body part"""
return self._state_fields_of_pose_of(self.bodies[self.body_index], self.body_part_index)
def get_position(self):
@@ -210,24 +229,33 @@ class BodyPart:
self._set_fields_of_pose_of(self.current_position(), orientation)
def set_pose(self, position, orientation):
+ """Set pose of body part"""
self._set_fields_of_pose_of(position, orientation)
- def current_position(self): # Synonym method
+ def current_position(self):
+ """Synonym method for get_position"""
return self.get_position()
- def current_orientation(self): # Synonym method
+ def current_orientation(self):
+ """Synonym method for get_orientation"""
return self.get_orientation()
def reset_position(self, position): # Backward compatibility
+ """Synonym method for set_position"""
self.set_position(position)
def reset_orientation(self, orientation): # Backward compatibility
+ """Synonym method for set_orientation"""
self.set_orientation(orientation)
def reset_pose(self, position, orientation): # Backward compatibility
+ """Synonym method for set_pose"""
self.set_pose(position, orientation)
def get_linear_velocity(self):
+ """
+ Get linear velocity of the body part
+ """
if self.body_part_index == -1:
(vx, vy, vz), _ = p.getBaseVelocity(self.bodies[self.body_index])
else:
@@ -236,6 +264,9 @@ class BodyPart:
return np.array([vx, vy, vz])
def get_angular_velocity(self):
+ """
+ Get angular velocity of the body part
+ """
if self.body_part_index == -1:
_, (vr, vp, vyaw) = p.getBaseVelocity(self.bodies[self.body_index])
else:
@@ -244,9 +275,16 @@ class BodyPart:
return np.array([vr, vp, vyaw])
def contact_list(self):
+ """
+ Get contact points of the body part
+ """
return p.getContactPoints(self.bodies[self.body_index], -1, self.body_part_index, -1)
class Joint:
+ """
+ Joint of Robots
+ """
+
def __init__(self, joint_name, bodies, body_index, joint_index):
self.bodies = bodies
self.body_index = body_index
@@ -278,10 +316,12 @@ class Joint:
def get_state(self):
"""Get state of joint"""
- x, vx, _, trq = p.getJointState(self.bodies[self.body_index], self.joint_index)
+ x, vx, _, trq = p.getJointState(
+ self.bodies[self.body_index], self.joint_index)
return x, vx, trq
def get_relative_state(self):
+ """Get normalized state of joint"""
pos, vel, trq = self.get_state()
# normalize position to [-1, 1]
@@ -316,6 +356,7 @@ class Joint:
targetVelocity=velocity)
def set_torque(self, torque):
+ """Set torque of joint"""
torque = np.clip(torque, -self.max_torque, self.max_torque)
p.setJointMotorControl2(bodyIndex=self.bodies[self.body_index],
jointIndex=self.joint_index,
@@ -326,10 +367,14 @@ class Joint:
"""
Reset pos and vel of joint
"""
- p.resetJointState(self.bodies[self.body_index], self.joint_index, targetValue=pos, targetVelocity=vel)
+ p.resetJointState(
+ self.bodies[self.body_index], self.joint_index, targetValue=pos, targetVelocity=vel)
self.disable_motor()
def disable_motor(self):
+ """
+ disable the motor of joint
+ """
p.setJointMotorControl2(self.bodies[self.body_index],
self.joint_index,
controlMode=p.POSITION_CONTROL,
@@ -340,29 +385,37 @@ class Joint:
force=0)
def get_joint_relative_state(self): # Synonym method
+ """Synonym method for get_relative_state"""
return self.get_relative_state()
def set_motor_position(self, pos): # Synonym method
+ """Synonym method for set_position"""
return self.set_position(pos)
def set_motor_torque(self, torque): # Synonym method
+ """Synonym method for set_torque"""
return self.set_torque(torque)
def set_motor_velocity(self, vel): # Synonym method
+ """Synonym method for set_velocity"""
return self.set_velocity(vel)
def reset_joint_state(self, position, velocity): # Synonym method
+ """Synonym method for reset_state"""
return self.reset_state(position, velocity)
def current_position(self): # Backward compatibility
+ """Synonym method for get_state"""
return self.get_state()
def current_relative_position(self): # Backward compatibility
+ """Synonym method for get_relative_state"""
return self.get_relative_state()
def reset_current_position(self, position, velocity): # Backward compatibility
+ """Synonym method for reset_state"""
self.reset_state(position, velocity)
def reset_position(self, position, velocity): # Backward compatibility
+ """Synonym method for reset_state"""
self.reset_state(position, velocity)
-
diff --git a/gibson2/robots/robot_locomotor.py b/gibson2/robots/robot_locomotor.py
index 34089bb7e..ee6e8e67d 100644
--- a/gibson2/robots/robot_locomotor.py
+++ b/gibson2/robots/robot_locomotor.py
@@ -6,7 +6,9 @@ from transforms3d.quaternions import quat2mat, qmult
class LocomotorRobot(BaseRobot):
- """ Built on top of BaseRobot
+ """
+ Built on top of BaseRobot.
+ Provides common interface for a wide variety of robots.
"""
def __init__(
@@ -25,7 +27,8 @@ class LocomotorRobot(BaseRobot):
self.control = control
self.is_discrete = is_discrete
- assert type(action_dim) == int, "Action dimension must be int, got {}".format(type(action_dim))
+ assert type(action_dim) == int, "Action dimension must be int, got {}".format(
+ type(action_dim))
self.action_dim = action_dim
if self.is_discrete:
@@ -50,110 +53,200 @@ class LocomotorRobot(BaseRobot):
raise NotImplementedError
def robot_specific_reset(self):
+ """
+ Robot specific reset. Apply zero velocity for all joints.
+ """
for j in self.ordered_joints:
j.reset_joint_state(0.0, 0.0)
def get_position(self):
- '''Get current robot position
- '''
+ """
+ Get current robot position
+ """
return self.robot_body.get_position()
def get_orientation(self):
- '''Return robot orientation
+ """
+ Return robot orientation
+
:return: quaternion in xyzw
- '''
+ """
return self.robot_body.get_orientation()
def get_rpy(self):
+ """
+ Return robot orientation in roll, pitch, yaw
+
+ :return: roll, pitch, yaw
+ """
return self.robot_body.get_rpy()
def set_position(self, pos):
+ """
+ Set robot position
+
+ :param pos: robot position
+ """
self.robot_body.set_position(pos)
def set_orientation(self, orn):
+ """
+ Set robot orientation
+
+ :param orn: robot orientation
+ """
self.robot_body.set_orientation(orn)
def set_position_orientation(self, pos, orn):
+ """
+ Set robot position and orientation
+
+ :param pos: robot position
+ :param orn: robot orientation
+ """
self.robot_body.set_pose(pos, orn)
def get_linear_velocity(self):
+ """
+ Set robot base linear velocity
+
+ :return: base linear velocity
+ """
return self.robot_body.get_linear_velocity()
def get_angular_velocity(self):
+ """
+ Set robot base angular velocity
+
+ :return: base angular velocity
+ """
return self.robot_body.get_angular_velocity()
def move_by(self, delta):
+ """
+ Move robot base without physics simulation
+
+ :param delta: delta base position
+ """
new_pos = np.array(delta) + self.get_position()
self.robot_body.reset_position(new_pos)
def move_forward(self, forward=0.05):
+ """
+ Move robot base forward without physics simulation
+
+ :param forward: delta base position forward
+ """
x, y, z, w = self.robot_body.get_orientation()
self.move_by(quat2mat([w, x, y, z]).dot(np.array([forward, 0, 0])))
def move_backward(self, backward=0.05):
+ """
+ Move robot base backward without physics simulation
+
+ :param backward: delta base position backward
+ """
x, y, z, w = self.robot_body.get_orientation()
self.move_by(quat2mat([w, x, y, z]).dot(np.array([-backward, 0, 0])))
def turn_left(self, delta=0.03):
+ """
+ Rotate robot base left without physics simulation
+
+ :param delta: delta angle to rotate the base left
+ """
orn = self.robot_body.get_orientation()
new_orn = qmult((euler2quat(-delta, 0, 0)), orn)
self.robot_body.set_orientation(new_orn)
def turn_right(self, delta=0.03):
+ """
+ Rotate robot base right without physics simulation
+
+ :param delta: delta angle to rotate the base right
+ """
orn = self.robot_body.get_orientation()
new_orn = qmult((euler2quat(delta, 0, 0)), orn)
self.robot_body.set_orientation(new_orn)
def keep_still(self):
+ """
+ Keep the robot still. Apply zero velocity to all joints.
+ """
for n, j in enumerate(self.ordered_joints):
j.set_motor_velocity(0.0)
def apply_robot_action(self, action):
+ """
+ Apply robot action.
+ Support joint torque, velocity, position control and
+ differentiable drive / twist command control
+
+ :param action: robot action
+ """
if self.control == 'torque':
for n, j in enumerate(self.ordered_joints):
- j.set_motor_torque(self.torque_coef * j.max_torque * float(np.clip(action[n], -1, +1)))
+ j.set_motor_torque(
+ self.torque_coef * j.max_torque * float(np.clip(action[n], -1, +1)))
elif self.control == 'velocity':
for n, j in enumerate(self.ordered_joints):
- j.set_motor_velocity(self.velocity_coef * j.max_velocity * float(np.clip(action[n], -1, +1)))
+ j.set_motor_velocity(
+ self.velocity_coef * j.max_velocity * float(np.clip(action[n], -1, +1)))
elif self.control == 'position':
for n, j in enumerate(self.ordered_joints):
j.set_motor_position(action[n])
elif self.control == 'differential_drive':
# assume self.ordered_joints = [left_wheel, right_wheel]
- assert action.shape[0] == 2 and len(self.ordered_joints) == 2, 'differential drive requires the first two joints to be two wheels'
+ assert action.shape[0] == 2 and len(
+ self.ordered_joints) == 2, 'differential drive requires the first two joints to be two wheels'
lin_vel, ang_vel = action
if not hasattr(self, 'wheel_axle_half') or not hasattr(self, 'wheel_radius'):
- raise Exception('Trying to use differential drive, but wheel_axle_half and wheel_radius are not specified.')
- left_wheel_ang_vel = (lin_vel - ang_vel * self.wheel_axle_half) / self.wheel_radius
- right_wheel_ang_vel = (lin_vel + ang_vel * self.wheel_axle_half) / self.wheel_radius
+ raise Exception(
+ 'Trying to use differential drive, but wheel_axle_half and wheel_radius are not specified.')
+ left_wheel_ang_vel = (lin_vel - ang_vel *
+ self.wheel_axle_half) / self.wheel_radius
+ right_wheel_ang_vel = (lin_vel + ang_vel *
+ self.wheel_axle_half) / self.wheel_radius
self.ordered_joints[0].set_motor_velocity(left_wheel_ang_vel)
self.ordered_joints[1].set_motor_velocity(right_wheel_ang_vel)
elif type(self.control) is list or type(self.control) is tuple:
# if control is a tuple, set different control type for each joint
-
if 'differential_drive' in self.control:
+ # Assume the first two joints are wheels using differntiable drive control, and the rest use joint control
# assume self.ordered_joints = [left_wheel, right_wheel, joint_1, joint_2, ...]
- assert action.shape[0] >= 2 and len(self.ordered_joints) >= 2, 'differential drive requires the first two joints to be two wheels'
+ assert action.shape[0] >= 2 and len(
+ self.ordered_joints) >= 2, 'differential drive requires the first two joints to be two wheels'
assert self.control[0] == self.control[1] == 'differential_drive', 'differential drive requires the first two joints to be two wheels'
lin_vel, ang_vel = action[:2]
if not hasattr(self, 'wheel_axle_half') or not hasattr(self, 'wheel_radius'):
- raise Exception('Trying to use differential drive, but wheel_axle_half and wheel_radius are not specified.')
- left_wheel_ang_vel = (lin_vel - ang_vel * self.wheel_axle_half) / self.wheel_radius
- right_wheel_ang_vel = (lin_vel + ang_vel * self.wheel_axle_half) / self.wheel_radius
+ raise Exception(
+ 'Trying to use differential drive, but wheel_axle_half and wheel_radius are not specified.')
+ left_wheel_ang_vel = (
+ lin_vel - ang_vel * self.wheel_axle_half) / self.wheel_radius
+ right_wheel_ang_vel = (
+ lin_vel + ang_vel * self.wheel_axle_half) / self.wheel_radius
self.ordered_joints[0].set_motor_velocity(left_wheel_ang_vel)
self.ordered_joints[1].set_motor_velocity(right_wheel_ang_vel)
for n, j in enumerate(self.ordered_joints):
if self.control[n] == 'torque':
- j.set_motor_torque(self.torque_coef * j.max_torque * float(np.clip(action[n], -1, +1)))
+ j.set_motor_torque(
+ self.torque_coef * j.max_torque * float(np.clip(action[n], -1, +1)))
elif self.control[n] == 'velocity':
- j.set_motor_velocity(self.velocity_coef * j.max_velocity * float(np.clip(action[n], -1, +1)))
+ j.set_motor_velocity(
+ self.velocity_coef * j.max_velocity * float(np.clip(action[n], -1, +1)))
elif self.control[n] == 'position':
j.set_motor_position(action[n])
else:
raise Exception('unknown control type: {}'.format(self.control))
def policy_action_to_robot_action(self, action):
+ """
+ Scale the policy action (always in [-1, 1]) to robot action based on action range
+
+ :param action: policy action
+ :return: robot action
+ """
if self.is_discrete:
if isinstance(action, (list, np.ndarray)):
assert len(action) == 1 and isinstance(action[0], (np.int64, int)), \
@@ -162,7 +255,8 @@ class LocomotorRobot(BaseRobot):
real_action = self.action_list[action]
else:
# self.action_space should always be [-1, 1] for policy training
- action = np.clip(action, self.action_space.low, self.action_space.high)
+ action = np.clip(action, self.action_space.low,
+ self.action_space.high)
# de-normalize action to the appropriate, robot-specific scale
real_action = (self.action_high - self.action_low) / 2.0 * action + \
@@ -170,15 +264,25 @@ class LocomotorRobot(BaseRobot):
return real_action
def apply_action(self, action):
+ """
+ Apply policy action
+ """
real_action = self.policy_action_to_robot_action(action)
self.apply_robot_action(real_action)
def calc_state(self):
- j = np.array([j.get_joint_relative_state() for j in self.ordered_joints]).astype(np.float32).flatten()
+ """
+ Calculate commonly used proprioceptive states for the robot
+
+ :return: proprioceptive states
+ """
+ j = np.array([j.get_joint_relative_state()
+ for j in self.ordered_joints]).astype(np.float32).flatten()
self.joint_position = j[0::3]
self.joint_velocity = j[1::3]
self.joint_torque = j[2::3]
- self.joint_at_limit = np.count_nonzero(np.abs(self.joint_position) > 0.99)
+ self.joint_at_limit = np.count_nonzero(
+ np.abs(self.joint_position) > 0.99)
pos = self.get_position()
rpy = self.get_rpy()
diff --git a/gibson2/robots/turtlebot_robot.py b/gibson2/robots/turtlebot_robot.py
index 3b16b56f8..ff75b8d2a 100644
--- a/gibson2/robots/turtlebot_robot.py
+++ b/gibson2/robots/turtlebot_robot.py
@@ -5,6 +5,12 @@ from gibson2.robots.robot_locomotor import LocomotorRobot
class Turtlebot(LocomotorRobot):
+ """
+ Turtlebot robot
+ Reference: http://wiki.ros.org/Robots/TurtleBot
+ Uses joint velocity control
+ """
+
def __init__(self, config):
self.config = config
self.velocity = config.get("velocity", 1.0)
@@ -16,14 +22,21 @@ class Turtlebot(LocomotorRobot):
control="velocity")
def set_up_continuous_action_space(self):
+ """
+ Set up continuous action space
+ """
self.action_space = gym.spaces.Box(shape=(self.action_dim,),
low=-1.0,
high=1.0,
dtype=np.float32)
- self.action_high = np.full(shape=self.action_dim, fill_value=self.velocity)
+ self.action_high = np.full(
+ shape=self.action_dim, fill_value=self.velocity)
self.action_low = -self.action_high
def set_up_discrete_action_space(self):
+ """
+ Set up discrete action space
+ """
self.action_list = [[self.velocity, self.velocity], [-self.velocity, -self.velocity],
[self.velocity * 0.5, -self.velocity * 0.5],
[-self.velocity * 0.5, self.velocity * 0.5], [0, 0]]
@@ -37,4 +50,4 @@ class Turtlebot(LocomotorRobot):
(ord('d'),): 2, # turn right
(ord('a'),): 3, # turn left
(): 4 # stay still
- }
\ No newline at end of file
+ }
diff --git a/gibson2/scenes/empty_scene.py b/gibson2/scenes/empty_scene.py
index 9040d666a..e037d914d 100644
--- a/gibson2/scenes/empty_scene.py
+++ b/gibson2/scenes/empty_scene.py
@@ -16,15 +16,33 @@ class EmptyScene(Scene):
super().__init__()
def load(self):
- plane_file = os.path.join(pybullet_data.getDataPath(), "mjcf/ground_plane.xml")
+ """
+ Load the scene into pybullet
+ """
+ plane_file = os.path.join(
+ pybullet_data.getDataPath(), "mjcf/ground_plane.xml")
self.floor_body_ids += [p.loadMJCF(plane_file)[0]]
p.changeDynamics(self.floor_body_ids[0], -1, lateralFriction=1)
# white floor plane for visualization purpose if needed
p.changeVisualShape(self.floor_body_ids[0], -1, rgbaColor=[1, 1, 1, 1])
return self.floor_body_ids
+ def get_random_point(self, floor=None):
+ """
+ Get a random point in the region of [-5, 5] x [-5, 5]
+ """
+ return floor, np.array([
+ np.random.uniform(-5, 5),
+ np.random.uniform(-5, 5),
+ 0.0,
+ ])
+
def get_shortest_path(self, floor, source_world, target_world, entire_path=False):
- logging.warning('WARNING: trying to compute the shortest path in EmptyScene (assuming empty space)')
+ """
+ Get a trivial shortest path because the scene is empty
+ """
+ logging.warning(
+ 'WARNING: trying to compute the shortest path in EmptyScene (assuming empty space)')
shortest_path = np.stack((source_world, target_world))
geodesic_distance = l2_distance(source_world, target_world)
return shortest_path, geodesic_distance
diff --git a/gibson2/scenes/gibson_indoor_scene.py b/gibson2/scenes/gibson_indoor_scene.py
index 6c2bc4564..007f5be20 100644
--- a/gibson2/scenes/gibson_indoor_scene.py
+++ b/gibson2/scenes/gibson_indoor_scene.py
@@ -39,8 +39,7 @@ class StaticIndoorScene(IndoorScene):
:param build_graph: build connectivity graph
:param num_waypoints: number of way points returned
:param waypoint_resolution: resolution of adjacent way points
- :param pybullet_load_texture: whether to load texture into pybullet. This is for debugging purpose only and
- does not affect robot's observations
+ :param pybullet_load_texture: whether to load texture into pybullet. This is for debugging purpose only and does not affect robot's observations
"""
super().__init__(
scene_id,
@@ -58,9 +57,11 @@ class StaticIndoorScene(IndoorScene):
"""
Load floor metadata
"""
- floor_height_path = os.path.join(get_scene_path(self.scene_id), 'floors.txt')
+ floor_height_path = os.path.join(
+ get_scene_path(self.scene_id), 'floors.txt')
if not os.path.isfile(floor_height_path):
- raise Exception('floor_heights.txt cannot be found in model: {}'.format(self.scene_id))
+ raise Exception(
+ 'floor_heights.txt cannot be found in model: {}'.format(self.scene_id))
with open(floor_height_path, 'r') as f:
self.floor_heights = sorted(list(map(float, f.readlines())))
logging.debug('Floors {}'.format(self.floor_heights))
@@ -69,73 +70,89 @@ class StaticIndoorScene(IndoorScene):
"""
Load scene mesh
"""
- filename = os.path.join(get_scene_path(self.scene_id), "mesh_z_up_downsampled.obj")
+ filename = os.path.join(get_scene_path(
+ self.scene_id), "mesh_z_up_downsampled.obj")
if not os.path.isfile(filename):
- filename = os.path.join(get_scene_path(self.scene_id), "mesh_z_up.obj")
+ filename = os.path.join(get_scene_path(
+ self.scene_id), "mesh_z_up.obj")
- collision_id = p.createCollisionShape(p.GEOM_MESH,
- fileName=filename,
- flags=p.GEOM_FORCE_CONCAVE_TRIMESH)
+ collision_id = p.createCollisionShape(
+ p.GEOM_MESH,
+ fileName=filename,
+ flags=p.GEOM_FORCE_CONCAVE_TRIMESH)
if self.pybullet_load_texture:
- visual_id = p.createVisualShape(p.GEOM_MESH,
- fileName=filename)
- texture_filename = get_texture_file(filename)
- if texture_filename is not None:
- texture_id = p.loadTexture(texture_filename)
- else:
- texture_id = -1
+ visual_id = p.createVisualShape(
+ p.GEOM_MESH,
+ fileName=filename)
else:
visual_id = -1
- texture_id = -1
- self.mesh_body_id = p.createMultiBody(baseCollisionShapeIndex=collision_id,
- baseVisualShapeIndex=visual_id)
+ self.mesh_body_id = p.createMultiBody(
+ baseCollisionShapeIndex=collision_id,
+ baseVisualShapeIndex=visual_id)
p.changeDynamics(self.mesh_body_id, -1, lateralFriction=1)
if self.pybullet_load_texture:
- if texture_id != -1:
- p.changeVisualShape(self.mesh_body_id,
- -1,
- textureUniqueId=texture_id)
+ texture_filename = get_texture_file(filename)
+ if texture_filename is not None:
+ texture_id = p.loadTexture(texture_filename)
+ p.changeVisualShape(
+ self.mesh_body_id,
+ -1,
+ textureUniqueId=texture_id)
def load_floor_planes(self):
+ """
+ Load additional floor planes (because the scene mesh can have bumpy floor surfaces)
+ """
# load the default floor plane (only once) and later reset it to different floor heiights
- plane_name = os.path.join(pybullet_data.getDataPath(), "mjcf/ground_plane.xml")
+ plane_name = os.path.join(
+ pybullet_data.getDataPath(), "mjcf/ground_plane.xml")
floor_body_id = p.loadMJCF(plane_name)[0]
p.resetBasePositionAndOrientation(floor_body_id,
posObj=[0, 0, 0],
ornObj=[0, 0, 0, 1])
- p.setCollisionFilterPair(self.mesh_body_id, floor_body_id, -1, -1, enableCollision=0)
+ p.setCollisionFilterPair(
+ self.mesh_body_id, floor_body_id, -1, -1, enableCollision=0)
self.floor_body_ids.append(floor_body_id)
- def load_scene_urdf(self):
- self.mesh_body_id = p.loadURDF(os.path.join(
- get_scene_path(self.scene_id), 'scene.urdf'))
-
- def has_scene_urdf(self):
- return os.path.exists(os.path.join(get_scene_path(self.scene_id), 'scene.urdf'))
-
def load(self):
+ """
+ Load the scene (including scene mesh and floor plane) into pybullet
+ """
self.load_floor_metadata()
- if self.has_scene_urdf():
- self.load_scene_urdf()
- else:
- self.load_scene_mesh()
- self.load_floor_planes()
+ self.load_scene_mesh()
+ self.load_floor_planes()
self.load_trav_map(get_scene_path(self.scene_id))
return [self.mesh_body_id] + self.floor_body_ids
def get_random_floor(self):
+ """
+ Get a random floor
+
+ :return: random floor number
+ """
return np.random.randint(0, high=len(self.floor_heights))
def reset_floor(self, floor=0, additional_elevation=0.02, height=None):
+ """
+ Resets the floor plane to a new floor
- height = height if height is not None else self.floor_heights[floor] + \
- additional_elevation
+ :param floor: Integer identifying the floor to move the floor plane to
+ :param additional_elevation: Additional elevation with respect to the height of the floor
+ :param height: Alternative parameter to control directly the height of the ground plane
+ """
+ height = height if height is not None \
+ else self.floor_heights[floor] + additional_elevation
p.resetBasePositionAndOrientation(self.floor_body_ids[0],
posObj=[0, 0, height],
ornObj=[0, 0, 0, 1])
def get_floor_height(self, floor=0):
+ """
+ Return the current floor height (in meter)
+
+ :return: current floor height
+ """
return self.floor_heights[floor]
diff --git a/gibson2/scenes/igibson_indoor_scene.py b/gibson2/scenes/igibson_indoor_scene.py
index eb3852807..0b99d57b0 100644
--- a/gibson2/scenes/igibson_indoor_scene.py
+++ b/gibson2/scenes/igibson_indoor_scene.py
@@ -3,24 +3,25 @@ import gibson2
import logging
import numpy as np
from gibson2.objects.articulated_object import URDFObject
-from gibson2.utils.utils import get_transform_from_xyz_rpy, quatXYZWFromRotMat, rotate_vector_2d
+from gibson2.utils.utils import get_transform_from_xyz_rpy, rotate_vector_2d
import pybullet as p
import os
import xml.etree.ElementTree as ET
from gibson2.scenes.gibson_indoor_scene import StaticIndoorScene
import random
import json
-from gibson2.utils.assets_utils import get_ig_scene_path, get_ig_model_path, get_ig_category_path
-from IPython import embed
+from gibson2.utils.assets_utils import get_ig_scene_path, get_ig_model_path, get_ig_category_path, get_ig_category_ids, get_cubicasa_scene_path, get_3dfront_scene_path
from PIL import Image
+SCENE_SOURCE = ['IG', 'CUBICASA', 'THREEDFRONT']
+
# class InteractiveIndoorScene(StaticIndoorScene):
class InteractiveIndoorScene(StaticIndoorScene):
"""
Create an interactive scene defined with iGibson Scene Description Format (iGSDF).
- iGSDF is an extension of URDF that we use to define an interactive scene. It has support for URDF scaling,
- URDF nesting and randomization.
+ iGSDF is an extension of URDF that we use to define an interactive scene.
+ It has support for URDF scaling, URDF nesting and randomization.
InteractiveIndoorScene inherits from StaticIndoorScene the functionalities to compute shortest path and other
navigation functionalities.
"""
@@ -43,7 +44,28 @@ class InteractiveIndoorScene(StaticIndoorScene):
load_room_types=None,
load_room_instances=None,
seg_map_resolution=0.1,
+ scene_source="IG",
):
+ """
+ :param scene_id: Scene id
+ :param trav_map_resolution: traversability map resolution
+ :param trav_map_erosion: erosion radius of traversability areas, should be robot footprint radius
+ :param trav_map_type: type of traversability map, with_obj | no_obj
+ :param build_graph: build connectivity graph
+ :param num_waypoints: number of way points returned
+ :param waypoint_resolution: resolution of adjacent way points
+ :param pybullet_load_texture: whether to load texture into pybullet. This is for debugging purpose only and does not affect robot's observations
+ :param texture_randomization: whether to randomize material/texture
+ :param link_collision_tolerance: tolerance of the percentage of links that cannot be fully extended after object randomization
+ :param object_randomization: whether to randomize object
+ :param object_randomization_idx: index of a pre-computed object randomization model that guarantees good scene quality
+ :param should_open_all_doors: whether to open all doors after episode reset (usually required for navigation tasks)
+ :param load_object_categories: only load these object categories into the scene (a list of str)
+ :param load_room_types: only load objects in these room types into the scene (a list of str)
+ :param load_room_instances: only load objects in these room instances into the scene (a list of str)
+ :param seg_map_resolution: room segmentation map resolution
+ :param scene_source: source of scene data; among IG, CUBICASA, THREEDFRONT
+ """
super().__init__(
scene_id,
@@ -66,15 +88,26 @@ class InteractiveIndoorScene(StaticIndoorScene):
object_randomization_idx)
else:
fname = '{}_best'.format(scene_id)
- self.is_interactive = True
+ if scene_source not in SCENE_SOURCE:
+ raise ValueError(
+ 'Unsupported scene source: {}'.format(scene_source))
+ if scene_source == "IG":
+ scene_dir = get_ig_scene_path(scene_id)
+ elif scene_source == "CUBICASA":
+ scene_dir = get_cubicasa_scene_path(scene_id)
+ else:
+ scene_dir = get_3dfront_scene_path(scene_id)
+ self.scene_source = scene_source
+ self.scene_dir = scene_dir
self.scene_file = os.path.join(
- get_ig_scene_path(scene_id), "urdf", "{}.urdf".format(fname))
+ scene_dir, "urdf", "{}.urdf".format(fname))
self.scene_tree = ET.parse(self.scene_file)
self.first_n_objects = np.inf
self.random_groups = {}
self.objects_by_category = {}
self.objects_by_name = {}
self.objects_by_id = {}
+ self.category_ids = get_ig_category_ids()
# Current time string to use to save the temporal urdfs
timestr = time.strftime("%Y%m%d-%H%M%S")
@@ -115,7 +148,7 @@ class InteractiveIndoorScene(StaticIndoorScene):
# Find the urdf file that defines this object
if category in ["walls", "floors", "ceilings"]:
- model_path = get_ig_scene_path(model)
+ model_path = self.scene_dir
filename = os.path.join(
model_path, "urdf", model + "_" + category + ".urdf")
@@ -222,6 +255,13 @@ class InteractiveIndoorScene(StaticIndoorScene):
load_object_categories,
load_room_types,
load_room_instances):
+ """
+ Handle partial scene loading based on object categories, room types or room instances
+
+ :param load_object_categories: only load these object categories into the scene (a list of str)
+ :param load_room_types: only load objects in these room types into the scene (a list of str)
+ :param load_room_instances: only load objects in these room instances into the scene (a list of str)
+ """
if isinstance(load_object_categories, str):
load_object_categories = [load_object_categories]
@@ -254,7 +294,12 @@ class InteractiveIndoorScene(StaticIndoorScene):
self.load_room_instances = None
def load_room_sem_ins_seg_map(self, seg_map_resolution):
- layout_dir = os.path.join(get_ig_scene_path(self.scene_id), "layout")
+ """
+ Load room segmentation map
+
+ :param seg_map_resolution: room segmentation map resolution
+ """
+ layout_dir = os.path.join(self.scene_dir, "layout")
room_seg_imgs = os.path.join(layout_dir, 'floor_insseg_0.png')
img_ins = Image.open(room_seg_imgs)
room_seg_imgs = os.path.join(layout_dir, 'floor_semseg_0.png')
@@ -314,6 +359,9 @@ class InteractiveIndoorScene(StaticIndoorScene):
self.room_sem_map = img_sem
def load_avg_obj_dims(self):
+ """
+ Load average object dimensions for scene objects
+ """
avg_obj_dim_file = os.path.join(
gibson2.ig_dataset_path, 'objects/avg_category_specs.json')
if os.path.isfile(avg_obj_dim_file):
@@ -323,8 +371,12 @@ class InteractiveIndoorScene(StaticIndoorScene):
return {}
def load_overlapped_bboxes(self):
+ """
+ Load overlapped bounding boxes in scene definition.
+ E.g. a dining table usually has overlaps with the surrounding dining chairs
+ """
bbox_overlap_file = os.path.join(
- get_ig_scene_path(self.scene_id), 'misc', 'bbox_overlap.json')
+ self.scene_dir, 'misc', 'bbox_overlap.json')
if os.path.isfile(bbox_overlap_file):
with open(bbox_overlap_file) as f:
return json.load(f)
@@ -333,7 +385,7 @@ class InteractiveIndoorScene(StaticIndoorScene):
def add_object(self,
category,
- model="random",
+ model=None,
model_path=None,
filename=None,
bounding_box=None,
@@ -347,19 +399,21 @@ class InteractiveIndoorScene(StaticIndoorScene):
in_rooms=None,
):
"""
- "Adds an object to the scene
- :param category:
- :param model:
- :param filename:
- :param bounding_box:
- :param scale:
- :param object_name:
- :param joint_name:
- :param joint_type:
- :param joint_parent:
- :param position:
- :param orientation_rpy:
- :return: None
+ Adds an object to the scene
+
+ :param category: object category, e.g. door
+ :param model: object model in the object dataset
+ :param model_path: folder path of that object model
+ :param filename: urdf file path of that object model
+ :param bounding_box: bounding box of this object
+ :param scale: scaling factor of this object
+ :param object_name: object name, unique for each object instance, e.g. door_3
+ :param joint_name: name of the joint that connects the object to the scene
+ :param joint_type: type of the joint that connects the object to the scene
+ :param joint_parent: parent of the joint that connects the object to the scene (i.e. world)
+ :param position: position of the joint that connects the object to the scene
+ :param orientation_rpy: orientation of the joint that connects the object to the scene
+ :param in_rooms: which room(s) this object is in. It can be in more than one rooms if it sits at room boundary (e.g. doors)
"""
if object_name in self.objects_by_name.keys():
@@ -419,6 +473,9 @@ class InteractiveIndoorScene(StaticIndoorScene):
added_object.prepare_texture()
def randomize_texture(self):
+ """
+ Randomize texture/material for all objects in the scene
+ """
if not self.texture_randomization:
logging.warning(
'calling randomize_texture while texture_randomization is False during initialization.')
@@ -428,6 +485,9 @@ class InteractiveIndoorScene(StaticIndoorScene):
obj.randomize_texture()
def check_collision(self, body_a, body_b=None, link_a=None, fixed_body_ids=None):
+ """
+ Helper function to check for collision for scene quality
+ """
if body_b is None:
assert link_a is not None
pts = p.getContactPoints(bodyA=body_a, linkIndexA=link_a)
@@ -445,6 +505,15 @@ class InteractiveIndoorScene(StaticIndoorScene):
return len(pts) > 0
def check_scene_quality(self, body_ids, fixed_body_ids):
+ """
+ Helper function to check for scene quality.
+ 1) Objects should have no collision with each other.
+ 2) Fixed, articulated objects that cannot fully extend their joints should be less than self.link_collision_tolerance
+
+ :param body_ids: body ids of all scene objects
+ :param fixed_body_ids: body ids of all fixed scene objects
+ :return: whether scene passes quality check
+ """
quality_check = True
body_body_collision = []
@@ -558,35 +627,50 @@ class InteractiveIndoorScene(StaticIndoorScene):
))
self.link_collision_set.add(body_id_to_name[body_id])
+ return self.quality_check
+
def _set_first_n_objects(self, first_n_objects):
- # hidden API for debugging purposes
+ """
+ Only load the first N objects. Hidden API for debugging purposes.
+
+ :param first_n_objects: only load the first N objects (integer)
+ """
self.first_n_objects = first_n_objects
- def open_all_doors(self):
- if 'door' not in self.objects_by_category:
- return
- for obj in self.objects_by_category['door']:
- # assume door only has one sub URDF
- body_id = obj.body_ids[0]
- for joint_id in range(p.getNumJoints(body_id)):
- state_id = p.saveState()
- j_low, j_high = p.getJointInfo(body_id, joint_id)[8:10]
- j_type = p.getJointInfo(body_id, joint_id)[2]
- parent_idx = p.getJointInfo(body_id, joint_id)[-1]
- if j_type not in [p.JOINT_REVOLUTE, p.JOINT_PRISMATIC]:
- p.removeState(state_id)
- continue
- # this is the continuous joint
- if j_low >= j_high:
- p.removeState(state_id)
- continue
- # this is the door knob joint
- if parent_idx != 0:
- p.removeState(state_id)
- continue
- # try to set the door to from 90 to 0 degrees until no collision
- for j_pos in np.arange(0.0, j_high + np.pi / 36.0, step=np.pi / 36.0):
- p.resetJointState(body_id, joint_id, j_high - j_pos)
+ def open_one_obj(self, body_id, mode='random'):
+ """
+ Attempt to open one object without collision
+
+ :param body_id: body id of the object
+ :param mode: opening mode (zero, max, or random)
+ """
+ body_joint_pairs = []
+ for joint_id in range(p.getNumJoints(body_id)):
+ # cache current physics state
+ state_id = p.saveState()
+
+ j_low, j_high = p.getJointInfo(body_id, joint_id)[8:10]
+ j_type = p.getJointInfo(body_id, joint_id)[2]
+ parent_idx = p.getJointInfo(body_id, joint_id)[-1]
+ if j_type not in [p.JOINT_REVOLUTE, p.JOINT_PRISMATIC]:
+ p.removeState(state_id)
+ continue
+ # this is the continuous joint
+ if j_low >= j_high:
+ p.removeState(state_id)
+ continue
+ # this is the 2nd degree joint, ignore for now
+ if parent_idx != 0:
+ p.removeState(state_id)
+ continue
+
+ if mode == 'max':
+ # try to set the joint to the maxr value until no collision
+ # step_size is 5cm for prismatic joint and 5 degrees for revolute joint
+ step_size = np.pi / 36.0 if j_type == p.JOINT_REVOLUTE else 0.05
+ for j_pos in np.arange(0.0, j_high + step_size, step=step_size):
+ p.resetJointState(
+ body_id, joint_id, j_high - j_pos)
p.stepSimulation()
has_collision = self.check_collision(
body_a=body_id, link_a=joint_id)
@@ -594,30 +678,81 @@ class InteractiveIndoorScene(StaticIndoorScene):
if not has_collision:
p.resetJointState(body_id, joint_id, j_high - j_pos)
break
- p.removeState(state_id)
- def close_all_doors(self):
- if 'door' not in self.objects_by_category:
- return
- for obj in self.objects_by_category['door']:
- # assume door only has one sub URDF
- body_id = obj.body_ids[0]
- for joint_id in range(p.getNumJoints(body_id)):
- j_low, j_high = p.getJointInfo(body_id, joint_id)[8:10]
- j_type = p.getJointInfo(body_id, joint_id)[2]
- parent_idx = p.getJointInfo(body_id, joint_id)[-1]
- if j_type not in [p.JOINT_REVOLUTE, p.JOINT_PRISMATIC]:
- continue
- # this is the continuous joint
- if j_low >= j_high:
- continue
- # this is the door knob joint
- if parent_idx != 0:
- continue
- # set door position to 0.0
+ elif mode == 'random':
+ # try to set the joint to a random value until no collision
+ reset_success = False
+ # make 10 attemps
+ for _ in range(10):
+ j_pos = np.random.uniform(j_low, j_high)
+ p.resetJointState(
+ body_id, joint_id, j_pos)
+ p.stepSimulation()
+ has_collision = self.check_collision(
+ body_a=body_id, link_a=joint_id)
+ p.restoreState(state_id)
+ if not has_collision:
+ p.resetJointState(body_id, joint_id, j_pos)
+ reset_success = True
+ break
+
+ # if none of the random values work, set it to 0.0 by default
+ if not reset_success:
+ p.resetJointState(body_id, joint_id, 0.0)
+ elif mode == 'zero':
p.resetJointState(body_id, joint_id, 0.0)
+ else:
+ assert False
+
+ body_joint_pairs.append((body_id, joint_id))
+ # Remove cached state to avoid memory leak.
+ p.removeState(state_id)
+
+ return body_joint_pairs
+
+ def open_all_objs_by_category(self, category, mode='random', prob=1.0):
+ """
+ Attempt to open all objects of a certain category without collision
+
+ :param category: object category (str)
+ :param mode: opening mode (zero, max, or random)
+ :param prob: opening probability
+ """
+ body_joint_pairs = []
+ if category not in self.objects_by_category:
+ return body_joint_pairs
+ for obj in self.objects_by_category[category]:
+ # open probability
+ if np.random.random() > prob:
+ continue
+ for body_id in obj.body_ids:
+ body_joint_pairs += self.open_one_obj(body_id, mode=mode)
+ return body_joint_pairs
+
+ def open_all_objs_by_categories(self, categories, mode='random', prob=1.0):
+ """
+ Attempt to open all objects of a number of categories without collision
+
+ :param categories: object categories (a list of str)
+ :param mode: opening mode (zero, max, or random)
+ :param prob: opening probability
+ """
+ body_joint_pairs = []
+ for category in categories:
+ body_joint_pairs += self.open_all_objs_by_category(
+ category, mode=mode, prob=prob)
+ return body_joint_pairs
+
+ def open_all_doors(self):
+ """
+ Attempt to open all doors to maximum values without collision
+ """
+ return self.open_all_objs_by_category('door', mode='max')
def load(self):
+ """
+ Load all scene objects into pybullet
+ """
# Load all the objects
body_ids = []
fixed_body_ids = []
@@ -648,24 +783,51 @@ class InteractiveIndoorScene(StaticIndoorScene):
0, 0, enableCollision=0)
# Load the traversability map
- maps_path = os.path.join(get_ig_scene_path(self.scene_id), "layout")
- self.load_trav_map(maps_path)
+ maps_path = os.path.join(self.scene_dir, "layout")
+ if self.build_graph:
+ self.load_trav_map(maps_path)
self.visual_mesh_to_material = visual_mesh_to_material
self.check_scene_quality(body_ids, fixed_body_ids)
+ # force wake up each body once
+ self.force_wakeup_scene_objects()
return body_ids
+ def force_wakeup_scene_objects(self):
+ """
+ Force wakeup sleeping objects
+ """
+ for obj_name in self.objects_by_name:
+ self.objects_by_name[obj_name].force_wakeup()
+
def reset_scene_objects(self):
+ """
+ Reset the pose and joint configuration of all scene objects.
+ Also open all doors if self.should_open_all_doors is True
+ """
for obj_name in self.objects_by_name:
self.objects_by_name[obj_name].reset()
+
if self.should_open_all_doors:
+ self.force_wakeup_scene_objects()
self.open_all_doors()
def get_num_objects(self):
+ """
+ Get the number of objects
+
+ :return: number of objects
+ """
return len(self.objects_by_name)
def get_random_point_by_room_type(self, room_type):
+ """
+ Sample a random point by room type
+
+ :param room_type: room type (e.g. bathroom)
+ :return: floor (always 0), a randomly sampled point in [x, y, z]
+ """
if room_type not in self.room_sem_name_to_sem_id:
logging.warning('room_type [{}] does not exist.'.format(room_type))
return None, None
@@ -681,6 +843,12 @@ class InteractiveIndoorScene(StaticIndoorScene):
return floor, np.array([x, y, z])
def get_random_point_by_room_instance(self, room_instance):
+ """
+ Sample a random point by room instance
+
+ :param room_instance: room instance (e.g. bathroom_1)
+ :return: floor (always 0), a randomly sampled point in [x, y, z]
+ """
if room_instance not in self.room_ins_name_to_ins_id:
logging.warning(
'room_instance [{}] does not exist.'.format(room_instance))
@@ -699,6 +867,7 @@ class InteractiveIndoorScene(StaticIndoorScene):
def seg_map_to_world(self, xy):
"""
Transforms a 2D point in map reference frame into world (simulator) reference frame
+
:param xy: 2D location in seg map reference frame (image)
:return: 2D location in world reference frame (metric)
"""
@@ -708,12 +877,19 @@ class InteractiveIndoorScene(StaticIndoorScene):
def world_to_seg_map(self, xy):
"""
Transforms a 2D point in world (simulator) reference frame into map reference frame
+
:param xy: 2D location in world reference frame (metric)
:return: 2D location in seg map reference frame (image)
"""
return np.flip((xy / self.seg_map_resolution + self.seg_map_size / 2.0)).astype(np.int)
def get_room_type_by_point(self, xy):
+ """
+ Return the room type given a point
+
+ :param xy: 2D location in world reference frame (metric)
+ :return: room type that this point is in or None, if this point is not on the room segmentation map
+ """
x, y = self.world_to_seg_map(xy)
sem_id = self.room_sem_map[x, y]
# room boundary
@@ -723,6 +899,13 @@ class InteractiveIndoorScene(StaticIndoorScene):
return self.room_sem_id_to_sem_name[sem_id]
def get_room_instance_by_point(self, xy):
+ """
+ Return the room instance given a point
+
+ :param xy: 2D location in world reference frame (metric)
+ :return: room instance that this point is in or None, if this point is not on the room segmentation map
+ """
+
x, y = self.world_to_seg_map(xy)
ins_id = self.room_ins_map[x, y]
# room boundary
@@ -730,3 +913,15 @@ class InteractiveIndoorScene(StaticIndoorScene):
return None
else:
return self.room_ins_id_to_ins_name[ins_id]
+
+ def get_body_ids(self):
+ """
+ Return the body ids of all scene objects
+
+ :return: body ids
+ """
+ ids = []
+ for obj_name in self.objects_by_name:
+ if self.objects_by_name[obj_name].body_id is not None:
+ ids.extend(self.objects_by_name[obj_name].body_id)
+ return ids
diff --git a/gibson2/scenes/indoor_scene.py b/gibson2/scenes/indoor_scene.py
index 4b49c14ac..5d185b9ea 100644
--- a/gibson2/scenes/indoor_scene.py
+++ b/gibson2/scenes/indoor_scene.py
@@ -39,8 +39,7 @@ class IndoorScene(Scene):
:param build_graph: build connectivity graph
:param num_waypoints: number of way points returned
:param waypoint_resolution: resolution of adjacent way points
- :param pybullet_load_texture: whether to load texture into pybullet. This is for debugging purpose only and
- does not affect robot's observations
+ :param pybullet_load_texture: whether to load texture into pybullet. This is for debugging purpose only and does not affect robot's observations
"""
super().__init__()
logging.info("IndoorScene model: {}".format(scene_id))
@@ -61,8 +60,8 @@ class IndoorScene(Scene):
def load_trav_map(self, maps_path):
"""
Loads the traversability maps for all floors
+
:param maps_path: String with the path to the folder containing the traversability maps
- :return: None
"""
if not os.path.exists(maps_path):
logging.warning('trav map does not exist: {}'.format(maps_path))
@@ -70,24 +69,22 @@ class IndoorScene(Scene):
self.floor_map = []
self.floor_graph = []
- for f in range(len(self.floor_heights)):
+ for floor in range(len(self.floor_heights)):
if self.trav_map_type == 'with_obj':
trav_map = np.array(Image.open(
- os.path.join(maps_path,
- 'floor_trav_{}.png'.format(f))
+ os.path.join(maps_path, 'floor_trav_{}.png'.format(floor))
))
obstacle_map = np.array(Image.open(
- os.path.join(maps_path,
- 'floor_{}.png'.format(f))
+ os.path.join(maps_path, 'floor_{}.png'.format(floor))
))
else:
trav_map = np.array(Image.open(
- os.path.join(maps_path,
- 'floor_trav_no_obj_{}.png'.format(f))
+ os.path.join(
+ maps_path, 'floor_trav_no_obj_{}.png'.format(floor))
))
obstacle_map = np.array(Image.open(
- os.path.join(maps_path,
- 'floor_no_obj_{}.png'.format(f))
+ os.path.join(
+ maps_path, 'floor_no_obj_{}.png'.format(floor))
))
if self.trav_map_original_size is None:
height, width = trav_map.shape
@@ -104,42 +101,63 @@ class IndoorScene(Scene):
trav_map[trav_map < 255] = 0
if self.build_graph:
- graph_file = os.path.join(
- maps_path, 'floor_trav_{}.p'.format(f))
- if os.path.isfile(graph_file):
- logging.info("Loading traversable graph")
- with open(graph_file, 'rb') as pfile:
- g = pickle.load(pfile)
- else:
- logging.info("Building traversable graph")
- g = nx.Graph()
- for i in range(self.trav_map_size):
- for j in range(self.trav_map_size):
- if trav_map[i, j] > 0:
- g.add_node((i, j))
- # 8-connected graph
- neighbors = [
- (i - 1, j - 1), (i, j - 1), (i + 1, j - 1), (i - 1, j)]
- for n in neighbors:
- if 0 <= n[0] < self.trav_map_size and 0 <= n[1] < self.trav_map_size and trav_map[n[0], n[1]] > 0:
- g.add_edge(
- n, (i, j), weight=l2_distance(n, (i, j)))
-
- # only take the largest connected component
- largest_cc = max(nx.connected_components(g), key=len)
- g = g.subgraph(largest_cc).copy()
- with open(graph_file, 'wb') as pfile:
- pickle.dump(g, pfile, protocol=pickle.HIGHEST_PROTOCOL)
-
- self.floor_graph.append(g)
- # update trav_map accordingly
- trav_map[:, :] = 0
- for node in g.nodes:
- trav_map[node[0], node[1]] = 255
-
+ self.build_trav_graph(maps_path, floor, trav_map)
self.floor_map.append(trav_map)
- def get_random_point(self, floor=None, random_height=False):
+ # TODO: refactor into C++ for speedup
+ def build_trav_graph(self, maps_path, floor, trav_map):
+ """
+ Build traversibility graph and only take the largest connected component
+
+ :param maps_path: String with the path to the folder containing the traversability maps
+ :param floor: floor number
+ :param trav_map: traversability map
+ """
+ graph_file = os.path.join(maps_path, 'floor_trav_{}.p'.format(floor))
+ if os.path.isfile(graph_file):
+ logging.info("Loading traversable graph")
+ with open(graph_file, 'rb') as pfile:
+ g = pickle.load(pfile)
+ else:
+ logging.info("Building traversable graph")
+ g = nx.Graph()
+ for i in range(self.trav_map_size):
+ for j in range(self.trav_map_size):
+ if trav_map[i, j] == 0:
+ continue
+ g.add_node((i, j))
+ # 8-connected graph
+ neighbors = [
+ (i - 1, j - 1), (i, j - 1),
+ (i + 1, j - 1), (i - 1, j)]
+ for n in neighbors:
+ if 0 <= n[0] < self.trav_map_size and \
+ 0 <= n[1] < self.trav_map_size and \
+ trav_map[n[0], n[1]] > 0:
+ g.add_edge(
+ n, (i, j), weight=l2_distance(n, (i, j)))
+
+ # only take the largest connected component
+ largest_cc = max(nx.connected_components(g), key=len)
+ g = g.subgraph(largest_cc).copy()
+ with open(graph_file, 'wb') as pfile:
+ pickle.dump(g, pfile, protocol=pickle.HIGHEST_PROTOCOL)
+
+ self.floor_graph.append(g)
+
+ # update trav_map accordingly
+ trav_map[:, :] = 0
+ for node in g.nodes:
+ trav_map[node[0], node[1]] = 255
+
+ def get_random_point(self, floor=None):
+ """
+ Sample a random point on the given floor number. If not given, sample a random floor number.
+
+ :param floor: floor number
+ :return floor: floor number
+ :return point: randomly sampled point in [x, y, z]
+ """
if floor is None:
floor = self.get_random_floor()
trav = self.floor_map[floor]
@@ -148,13 +166,12 @@ class IndoorScene(Scene):
xy_map = np.array([trav_space[0][idx], trav_space[1][idx]])
x, y = self.map_to_world(xy_map)
z = self.floor_heights[floor]
- if random_height:
- z += np.random.uniform(0.4, 0.8)
return floor, np.array([x, y, z])
def map_to_world(self, xy):
"""
Transforms a 2D point in map reference frame into world (simulator) reference frame
+
:param xy: 2D location in map reference frame (image)
:return: 2D location in world reference frame (metric)
"""
@@ -164,17 +181,34 @@ class IndoorScene(Scene):
def world_to_map(self, xy):
"""
Transforms a 2D point in world (simulator) reference frame into map reference frame
+
:param xy: 2D location in world reference frame (metric)
:return: 2D location in map reference frame (image)
"""
return np.flip((xy / self.trav_map_resolution + self.trav_map_size / 2.0)).astype(np.int)
def has_node(self, floor, world_xy):
+ """
+ Return whether the traversability graph contains a point
+
+ :param floor: floor number
+ :param world_xy: 2D location in world reference frame (metric)
+ """
map_xy = tuple(self.world_to_map(world_xy))
g = self.floor_graph[floor]
return g.has_node(map_xy)
def get_shortest_path(self, floor, source_world, target_world, entire_path=False):
+ """
+ Get the shortest path from one point to another point.
+ If any of the given point is not in the graph, add it to the graph and
+ create an edge between it to its closest node.
+
+ :param floor: floor number
+ :param source_world: 2D source location in world reference frame (metric)
+ :param target_world: 2D target location in world reference frame (metric)
+ :param entire_path: whether to return the entire path
+ """
assert self.build_graph, 'cannot get shortest path without building the graph'
source_map = tuple(self.world_to_map(source_world))
target_map = tuple(self.world_to_map(target_world))
diff --git a/gibson2/scenes/scene_base.py b/gibson2/scenes/scene_base.py
index 3739e97f7..844691020 100644
--- a/gibson2/scenes/scene_base.py
+++ b/gibson2/scenes/scene_base.py
@@ -1,11 +1,3 @@
-import os
-import inspect
-
-currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
-parentdir = os.path.dirname(currentdir)
-os.sys.path.insert(0, parentdir)
-
-
class Scene:
"""
Base class for all Scene objects
@@ -13,15 +5,15 @@ class Scene:
"""
def __init__(self):
- self.is_interactive = False # TODO: remove, it is deprecated
self.build_graph = False # Indicates if a graph for shortest path has been built
self.floor_body_ids = [] # List of ids of the floor_heights
def load(self):
"""
- Function to load all elements into physics engine and renderer
- The elements to load may include: floor, building, objects
- :return: A list of elements composing the scene, including the ground, the building and objects
+ Load the scene into pybullet
+ The elements to load may include: floor, building, objects, etc
+
+ :return: A list of pybullet ids of elements composing the scene, including floors, buildings and objects
"""
raise NotImplementedError()
@@ -30,15 +22,16 @@ class Scene:
Sample a random floor among all existing floor_heights in the scene
While Gibson v1 scenes can have several floor_heights, the EmptyScene, StadiumScene and scenes from iGibson
have only a single floor
+
:return: An integer between 0 and NumberOfFloors-1
"""
return 0
- def get_random_point(self, floor=None, random_height=False):
+ def get_random_point(self, floor=None):
"""
Sample a random valid location in the given floor
+
:param floor: integer indicating the floor, or None if randomly sampled
- :param random_height: if the height should be randomly sampled or not
:return: A tuple of random floor and random valid point (3D) in that floor
"""
raise NotImplementedError()
@@ -46,6 +39,7 @@ class Scene:
def get_shortest_path(self, floor, source_world, target_world, entire_path=False):
"""
Query the shortest path between two points in the given floor
+
:param floor: Floor to compute shortest path in
:param source_world: Initial location in world reference frame
:param target_world: Target location in world reference frame
@@ -57,18 +51,9 @@ class Scene:
def get_floor_height(self, floor=0):
"""
Get the height of the given floor
+
:param floor: Integer identifying the floor
:return: Height of the given floor
"""
del floor
return 0.0
-
- def reset_floor(self, floor=0, additional_elevation=0.02, height=None):
- """
- Resets the ground plane to a new floor
- :param floor: Integer identifying the floor to move the ground plane to
- :param additional_elevation: Additional elevation with respect to the height of the floor
- :param height: Alternative parameter to control directly the height of the ground plane
- :return: None
- """
- return
\ No newline at end of file
diff --git a/gibson2/scenes/stadium_scene.py b/gibson2/scenes/stadium_scene.py
index c44b9d405..8cd2d2db6 100644
--- a/gibson2/scenes/stadium_scene.py
+++ b/gibson2/scenes/stadium_scene.py
@@ -16,24 +16,38 @@ class StadiumScene(Scene):
super().__init__()
def load(self):
- filename = os.path.join(pybullet_data.getDataPath(), "stadium_no_collision.sdf")
+ """
+ Load the scene into pybullet
+ """
+ filename = os.path.join(
+ pybullet_data.getDataPath(), "stadium_no_collision.sdf")
self.stadium = p.loadSDF(filename)
- plane_file = os.path.join(pybullet_data.getDataPath(), "mjcf/ground_plane.xml")
+ plane_file = os.path.join(
+ pybullet_data.getDataPath(), "mjcf/ground_plane.xml")
self.floor_body_ids += [p.loadMJCF(plane_file)[0]]
pos, orn = p.getBasePositionAndOrientation(self.floor_body_ids[0])
- p.resetBasePositionAndOrientation(self.floor_body_ids[0], [pos[0], pos[1], pos[2] - 0.005], orn)
- p.changeVisualShape(self.floor_body_ids[0], -1, rgbaColor=[1, 1, 1, 0.5])
+ p.resetBasePositionAndOrientation(
+ self.floor_body_ids[0], [pos[0], pos[1], pos[2] - 0.005], orn)
+ p.changeVisualShape(
+ self.floor_body_ids[0], -1, rgbaColor=[1, 1, 1, 0.5])
return list(self.stadium) + self.floor_body_ids
- def get_random_point(self, floor=None, random_height=False):
+ def get_random_point(self, floor=None):
+ """
+ Get a random point in the region of [-5, 5] x [-5, 5]
+ """
return floor, np.array([
np.random.uniform(-5, 5),
np.random.uniform(-5, 5),
- np.random.uniform(0.4, 0.8) if random_height else 0.0
- ])
+ 0.0,
+ ])
def get_shortest_path(self, floor, source_world, target_world, entire_path=False):
- logging.warning('WARNING: trying to compute the shortest path in StadiumScene (assuming empty space)')
+ """
+ Get a trivial shortest path because the scene is empty
+ """
+ logging.warning(
+ 'WARNING: trying to compute the shortest path in StadiumScene (assuming empty space)')
shortest_path = np.stack((source_world, target_world))
geodesic_distance = l2_distance(source_world, target_world)
return shortest_path, geodesic_distance
diff --git a/gibson2/scripts/challenge.py b/gibson2/scripts/challenge.py
deleted file mode 100644
index 65afd7519..000000000
--- a/gibson2/scripts/challenge.py
+++ /dev/null
@@ -1,69 +0,0 @@
-from gibson2.envs.locomotor_env import NavigationRandomEnvSim2Real
-import os
-import json
-import numpy as np
-
-
-class Challenge:
- def __init__(self):
- self.config_file = os.environ['CONFIG_FILE']
- self.sim2real_track = os.environ['SIM2REAL_TRACK']
- self.nav_env = NavigationRandomEnvSim2Real(config_file=self.config_file,
- mode='headless',
- action_timestep=1.0 / 10.0,
- physics_timestep=1.0 / 40.0,
- track=self.sim2real_track)
-
- def submit(self, agent):
- total_reward = 0.0
- total_success = 0.0
- total_spl = 0.0
- num_eval_episodes = 10
- for i in range(num_eval_episodes):
- print('Episode: {}/{}'.format(i + 1, num_eval_episodes))
- state = self.nav_env.reset()
- while True:
- action = agent.act(state)
- state, reward, done, info = self.nav_env.step(action)
- total_reward += reward
- if done:
- break
- total_success += info['success']
- total_spl += info['spl']
-
- avg_reward = total_reward / num_eval_episodes
- avg_success = total_success / num_eval_episodes
- avg_spl = total_spl / num_eval_episodes
- results = {}
- results["track"] = self.sim2real_track
- results["avg_spl"] = avg_spl
- results["avg_success"] = avg_success
-
- if os.path.exists('/results'):
- with open('/results/eval_result_{}.json'.format(self.sim2real_track), 'w') as f:
- json.dump(results, f)
-
- print('eval done, avg reward {}, avg success {}, avg spl {}'.format(avg_reward, avg_success, avg_spl))
- return total_reward
-
- def gen_episode(self):
- episodes = []
- for i in range(10):
- self.nav_env.reset()
-
- episode_info = {}
- episode_info['episode_id'] = str(i)
- episode_info['scene_id'] = self.nav_env.config['scene_id']
- episode_info['start_pos'] = list(self.nav_env.initial_pos.astype(np.float32))
- episode_info['end_pos'] = list(self.nav_env.target_pos.astype(np.float32))
- episode_info['start_rotation'] = list(self.nav_env.initial_orn.astype(np.float32))
- episode_info['end_rotation'] = list(self.nav_env.target_orn.astype(np.float32))
- episodes.append(episode_info)
-
- #with open('eval_episodes.json', 'w') as f:
- # json.dump(str(episodes), f)
-
-
-if __name__ == "__main__":
- challenge = Challenge()
- challenge.gen_episode()
diff --git a/gibson2/scripts/demo_static.py b/gibson2/scripts/demo_static.py
index 6742cc941..a299d6ee4 100644
--- a/gibson2/scripts/demo_static.py
+++ b/gibson2/scripts/demo_static.py
@@ -13,10 +13,12 @@ class DemoStatic(object):
download_demo_data()
def run_demo(self):
- config = parse_config(os.path.join(gibson2.assets_path, 'example_configs/turtlebot_demo.yaml'))
+ config = parse_config(os.path.join(
+ os.path.dirname(gibson2.__file__),
+ '../examples/configs/turtlebot_demo.yaml'))
s = Simulator(mode='gui', image_width=700, image_height=700)
- scene = StaticIndoorScene('Rs')
+ scene = StaticIndoorScene('Rs', pybullet_load_texture=True)
s.import_scene(scene)
turtlebot = Turtlebot(config)
s.import_robot(turtlebot)
diff --git a/gibson2/sensors/__init__.py b/gibson2/sensors/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/gibson2/sensors/dropout_sensor_noise.py b/gibson2/sensors/dropout_sensor_noise.py
new file mode 100644
index 000000000..7b66b6378
--- /dev/null
+++ b/gibson2/sensors/dropout_sensor_noise.py
@@ -0,0 +1,50 @@
+from gibson2.sensors.sensor_noise_base import BaseSensorNoise
+
+import numpy as np
+
+
+class DropoutSensorNoise(BaseSensorNoise):
+ """
+ Naive dropout sensor noise model
+ """
+
+ def __init__(self, env):
+ super(DropoutSensorNoise, self).__init__(env)
+ self.noise_rate = 0.0
+ self.noise_value = 1.0
+
+ def set_noise_rate(self, noise_rate):
+ """
+ Set noise rate
+
+ :param noise_rate: noise rate
+ """
+ self.noise_rate = noise_rate
+
+ def set_noise_value(self, noise_value):
+ """
+ Set noise value
+
+ :param noise_value: noise value
+ """
+ self.noise_value = noise_value
+
+ def add_noise(self, obs):
+ """
+ Add naive sensor dropout to perceptual sensor, such as RGBD and LiDAR scan
+
+ :param sensor_reading: raw sensor reading, range must be between [0.0, 1.0]
+ :param noise_rate: how much noise to inject, 0.05 means 5% of the data will be replaced with noise_value
+ :param noise_value: noise_value to overwrite raw sensor reading
+ :return: sensor reading corrupted with noise
+ """
+ if self.noise_rate <= 0.0:
+ return obs
+
+ assert len(obs[(obs < 0.0) | (obs > 1.0)]) == 0,\
+ 'sensor reading has to be between [0.0, 1.0]'
+
+ valid_mask = np.random.choice(2, obs.shape, p=[
+ self.noise_rate, 1.0 - self.noise_rate])
+ obs[valid_mask == 0] = self.noise_value
+ return obs
diff --git a/gibson2/sensors/scan_sensor.py b/gibson2/sensors/scan_sensor.py
new file mode 100644
index 000000000..8eb5c5a0d
--- /dev/null
+++ b/gibson2/sensors/scan_sensor.py
@@ -0,0 +1,147 @@
+from gibson2.sensors.sensor_base import BaseSensor
+from gibson2.sensors.dropout_sensor_noise import DropoutSensorNoise
+from gibson2.utils.constants import OccupancyGridState
+import numpy as np
+from transforms3d.quaternions import quat2mat
+import pybullet as p
+import cv2
+
+
+class ScanSensor(BaseSensor):
+ """
+ 1D LiDAR scanner sensor and occupancy grid sensor
+ """
+
+ def __init__(self, env, modalities):
+ super(ScanSensor, self).__init__(env)
+ self.modalities = modalities
+ self.scan_noise_rate = self.config.get('scan_noise_rate', 0.0)
+ self.n_horizontal_rays = self.config.get('n_horizontal_rays', 128)
+ self.n_vertical_beams = self.config.get('n_vertical_beams', 1)
+ assert self.n_vertical_beams == 1, 'scan can only handle one vertical beam for now'
+ self.laser_linear_range = self.config.get(
+ 'laser_linear_range', 10.0)
+ self.laser_angular_range = self.config.get(
+ 'laser_angular_range', 180.0)
+ self.min_laser_dist = self.config.get('min_laser_dist', 0.05)
+ self.laser_link_name = self.config.get(
+ 'laser_link_name', 'scan_link')
+ self.noise_model = DropoutSensorNoise(env)
+ self.noise_model.set_noise_rate(self.scan_noise_rate)
+ self.noise_model.set_noise_value(1.0)
+
+ self.laser_pose = env.robots[0].parts[self.laser_link_name].get_pose()
+ self.base_pose = env.robots[0].parts['base_link'].get_pose()
+
+ if 'occupancy_grid' in self.modalities:
+ self.grid_resolution = self.config.get('grid_resolution', 128)
+ self.occupancy_range = self.config.get('occupancy_range', 5) # m
+ self.robot_footprint_radius = self.config.get(
+ 'robot_footprint_radius', 0.32)
+ self.robot_footprint_radius_in_map = int(
+ self.robot_footprint_radius / self.occupancy_range *
+ self.grid_resolution)
+
+ def get_local_occupancy_grid(self, scan):
+ """
+ Get local occupancy grid based on current 1D scan
+
+ :param: 1D LiDAR scan
+ :return: local occupancy grid
+ """
+ laser_linear_range = self.laser_linear_range
+ laser_angular_range = self.laser_angular_range
+ min_laser_dist = self.min_laser_dist
+
+ laser_angular_half_range = laser_angular_range / 2.0
+
+ angle = np.arange(
+ -np.radians(laser_angular_half_range),
+ np.radians(laser_angular_half_range),
+ np.radians(laser_angular_range) / self.n_horizontal_rays
+ )
+ unit_vector_laser = np.array(
+ [[np.cos(ang), np.sin(ang), 0.0] for ang in angle])
+
+ scan_laser = unit_vector_laser * \
+ (scan * (laser_linear_range - min_laser_dist) + min_laser_dist)
+
+ laser_translation = self.laser_pose[:3]
+ laser_rotation = quat2mat(
+ [self.laser_pose[6], self.laser_pose[3], self.laser_pose[4], self.laser_pose[5]])
+ scan_world = laser_rotation.dot(scan_laser.T).T + laser_translation
+
+ base_translation = self.base_pose[:3]
+ base_rotation = quat2mat(
+ [self.base_pose[6], self.base_pose[3], self.base_pose[4], self.base_pose[5]])
+ scan_local = base_rotation.T.dot((scan_world - base_translation).T).T
+ scan_local = scan_local[:, :2]
+ scan_local = np.concatenate(
+ [np.array([[0, 0]]), scan_local, np.array([[0, 0]])], axis=0)
+
+ # flip y axis
+ scan_local[:, 1] *= -1
+
+ occupancy_grid = np.zeros(
+ (self.grid_resolution, self.grid_resolution)).astype(np.uint8)
+
+ occupancy_grid.fill(int(OccupancyGridState.UNKNOWN * 2.0))
+ scan_local_in_map = scan_local / self.occupancy_range * \
+ self.grid_resolution + (self.grid_resolution / 2)
+ scan_local_in_map = scan_local_in_map.reshape(
+ (1, -1, 1, 2)).astype(np.int32)
+ for i in range(scan_local_in_map.shape[1]):
+ cv2.circle(img=occupancy_grid,
+ center=(scan_local_in_map[0, i, 0, 0],
+ scan_local_in_map[0, i, 0, 1]),
+ radius=2,
+ color=int(OccupancyGridState.OBSTACLES * 2.0),
+ thickness=-1)
+ cv2.fillPoly(img=occupancy_grid,
+ pts=scan_local_in_map,
+ color=int(OccupancyGridState.FREESPACE * 2.0),
+ lineType=1)
+ cv2.circle(img=occupancy_grid,
+ center=(self.grid_resolution // 2,
+ self.grid_resolution // 2),
+ radius=int(self.robot_footprint_radius_in_map),
+ color=int(OccupancyGridState.FREESPACE * 2.0),
+ thickness=-1)
+
+ return occupancy_grid[:, :, None].astype(np.float32) / 2.0
+
+ def get_obs(self, env):
+ """
+ Get current LiDAR sensor reading and occupancy grid (optional)
+
+ :return: LiDAR sensor reading and local occupancy grid, normalized to [0.0, 1.0]
+ """
+ laser_angular_half_range = self.laser_angular_range / 2.0
+ if self.laser_link_name not in env.robots[0].parts:
+ raise Exception('Trying to simulate LiDAR sensor, but laser_link_name cannot be found in the robot URDF file. Please add a link named laser_link_name at the intended laser pose. Feel free to check out assets/models/turtlebot/turtlebot.urdf and examples/configs/turtlebot_p2p_nav.yaml for examples.')
+ laser_pose = env.robots[0].parts[self.laser_link_name].get_pose()
+ angle = np.arange(
+ -laser_angular_half_range / 180 * np.pi,
+ laser_angular_half_range / 180 * np.pi,
+ self.laser_angular_range / 180.0 * np.pi / self.n_horizontal_rays)
+ unit_vector_local = np.array(
+ [[np.cos(ang), np.sin(ang), 0.0] for ang in angle])
+ transform_matrix = quat2mat(
+ [laser_pose[6], laser_pose[3], laser_pose[4], laser_pose[5]]) # [x, y, z, w]
+ unit_vector_world = transform_matrix.dot(unit_vector_local.T).T
+
+ start_pose = np.tile(laser_pose[:3], (self.n_horizontal_rays, 1))
+ start_pose += unit_vector_world * self.min_laser_dist
+ end_pose = laser_pose[:3] + unit_vector_world * self.laser_linear_range
+ results = p.rayTestBatch(start_pose, end_pose, 6) # numThreads = 6
+
+ # hit fraction = [0.0, 1.0] of self.laser_linear_range
+ hit_fraction = np.array([item[2] for item in results])
+ hit_fraction = self.noise_model.add_noise(hit_fraction)
+ scan = np.expand_dims(hit_fraction, 1)
+
+ state = {}
+ state['scan'] = scan
+ if 'occupancy_grid' in self.modalities:
+ state['occupancy_grid'] = self.get_local_occupancy_grid(scan)
+ return state
diff --git a/gibson2/sensors/sensor_base.py b/gibson2/sensors/sensor_base.py
new file mode 100644
index 000000000..4a8192151
--- /dev/null
+++ b/gibson2/sensors/sensor_base.py
@@ -0,0 +1,21 @@
+from abc import abstractmethod, ABC
+
+
+class BaseSensor(ABC):
+ """
+ Base Sensor class.
+ Sensor-specific get_obs method is implemented in subclasses
+ """
+
+ def __init__(self, env):
+ self.config = env.config
+
+ @abstractmethod
+ def get_obs(self, env):
+ """
+ Get sensor reading
+
+ :param: environment instance
+ :return: observation (numpy array or a dict that maps str to numpy array)
+ """
+ raise NotImplementedError()
diff --git a/gibson2/sensors/sensor_noise_base.py b/gibson2/sensors/sensor_noise_base.py
new file mode 100644
index 000000000..9dcfe8664
--- /dev/null
+++ b/gibson2/sensors/sensor_noise_base.py
@@ -0,0 +1,21 @@
+from abc import abstractmethod, ABC
+
+
+class BaseSensorNoise(ABC):
+ """
+ Base SensorNoise class.
+ Sensor noise-specific add_noise method is implemented in subclasses
+ """
+
+ def __init__(self, env):
+ self.config = env.config
+
+ @abstractmethod
+ def add_noise(self, obs):
+ """
+ Add sensor noise to sensor reading
+
+ :param obs: raw observation
+ :return: observation with noise
+ """
+ raise NotImplementedError()
diff --git a/gibson2/sensors/velodyne_sensor.py b/gibson2/sensors/velodyne_sensor.py
new file mode 100644
index 000000000..94be895e1
--- /dev/null
+++ b/gibson2/sensors/velodyne_sensor.py
@@ -0,0 +1,24 @@
+from gibson2.sensors.sensor_base import BaseSensor
+from gibson2.sensors.dropout_sensor_noise import DropoutSensorNoise
+
+import numpy as np
+import os
+import gibson2
+from collections import OrderedDict
+
+
+class VelodyneSensor(BaseSensor):
+ """
+ 16-beam Velodyne LiDAR sensor
+ """
+
+ def __init__(self, env):
+ super(VelodyneSensor, self).__init__(env)
+
+ def get_obs(self, env):
+ """
+ Get velodyne LiDAR sensor reading
+
+ :return: velodyne sensor reading
+ """
+ return env.simulator.renderer.get_lidar_all()
diff --git a/gibson2/sensors/vision_sensor.py b/gibson2/sensors/vision_sensor.py
new file mode 100644
index 000000000..c9cb0537c
--- /dev/null
+++ b/gibson2/sensors/vision_sensor.py
@@ -0,0 +1,160 @@
+from gibson2.sensors.sensor_base import BaseSensor
+from gibson2.sensors.dropout_sensor_noise import DropoutSensorNoise
+
+import numpy as np
+import os
+import gibson2
+from collections import OrderedDict
+
+
+class VisionSensor(BaseSensor):
+ """
+ Vision sensor (including rgb, rgb_filled, depth, 3d, seg, normal, optical flow, scene flow)
+ """
+
+ def __init__(self, env, modalities):
+ super(VisionSensor, self).__init__(env)
+ self.modalities = modalities
+ self.raw_modalities = self.get_raw_modalities(modalities)
+ self.image_width = self.config.get('image_width', 128)
+ self.image_height = self.config.get('image_height', 128)
+
+ self.depth_noise_rate = self.config.get('depth_noise_rate', 0.0)
+ self.depth_low = self.config.get('depth_low', 0.5)
+ self.depth_high = self.config.get('depth_high', 5.0)
+
+ self.noise_model = DropoutSensorNoise(env)
+ self.noise_model.set_noise_rate(self.depth_noise_rate)
+ self.noise_model.set_noise_value(0.0)
+
+ if 'rgb_filled' in modalities:
+ try:
+ import torch.nn as nn
+ import torch
+ from torchvision import transforms
+ from gibson2.learn.completion import CompletionNet
+ except ImportError:
+ raise Exception(
+ 'Trying to use rgb_filled ("the goggle"), but torch is not installed. Try "pip install torch torchvision".')
+
+ self.comp = CompletionNet(norm=nn.BatchNorm2d, nf=64)
+ self.comp = torch.nn.DataParallel(self.comp).cuda()
+ self.comp.load_state_dict(torch.load(
+ os.path.join(gibson2.assets_path, 'networks', 'model.pth')))
+ self.comp.eval()
+
+ def get_raw_modalities(self, modalities):
+ """
+ Helper function that gathers raw modalities (e.g. depth is based on 3d)
+
+ :return: raw modalities to query the renderer
+ """
+ raw_modalities = []
+ if 'rgb' in modalities or 'rgb_filled' in modalities:
+ raw_modalities.append('rgb')
+ if 'depth' in modalities or '3d' in modalities:
+ raw_modalities.append('3d')
+ if 'seg' in modalities:
+ raw_modalities.append('seg')
+ if 'normal' in modalities:
+ raw_modalities.append('normal')
+ if 'optical_flow' in modalities:
+ raw_modalities.append('optical_flow')
+ if 'scene_flow' in modalities:
+ raw_modalities.append('scene_flow')
+ return raw_modalities
+
+ def get_rgb(self, raw_vision_obs):
+ """
+ :return: RGB sensor reading, normalized to [0.0, 1.0]
+ """
+ return raw_vision_obs['rgb'][:, :, :3]
+
+ def get_rgb_filled(self, raw_vision_obs):
+ """
+ :return: RGB-filled sensor reading by passing through the "Goggle" neural network
+ """
+ rgb = self.get_rgb(raw_vision_obs)
+ with torch.no_grad():
+ tensor = transforms.ToTensor()((rgb * 255).astype(np.uint8)).cuda()
+ rgb_filled = self.comp(tensor[None, :, :, :])[0]
+ return rgb_filled.permute(1, 2, 0).cpu().numpy()
+
+ def get_depth(self, raw_vision_obs):
+ """
+ :return: depth sensor reading, normalized to [0.0, 1.0]
+ """
+ depth = -raw_vision_obs['3d'][:, :, 2:3]
+ # 0.0 is a special value for invalid entries
+ depth[depth < self.depth_low] = 0.0
+ depth[depth > self.depth_high] = 0.0
+
+ # re-scale depth to [0.0, 1.0]
+ depth /= self.depth_high
+ depth = self.noise_model.add_noise(depth)
+
+ return depth
+
+ def get_pc(self, raw_vision_obs):
+ """
+ :return: pointcloud sensor reading
+ """
+ return raw_vision_obs['3d'][:, :, :3]
+
+ def get_optical_flow(self, raw_vision_obs):
+ """
+ :return: optical flow sensor reading
+ """
+ return raw_vision_obs['optical_flow'][:, :, :3]
+
+ def get_scene_flow(self, raw_vision_obs):
+ """
+ :return: scene flow sensor reading
+ """
+ return raw_vision_obs['scene_flow'][:, :, :3]
+
+ def get_normal(self, raw_vision_obs):
+ """
+ :return: surface normal reading
+ """
+ return raw_vision_obs['normal'][:, :, :3]
+
+ def get_seg(self, raw_vision_obs):
+ """
+ :return: semantic segmentation mask, normalized to [0.0, 1.0]
+ """
+ seg = raw_vision_obs['seg'][:, :, 0:1]
+ return seg
+
+ def get_obs(self, env):
+ """
+ Get vision sensor reading
+
+ :return: vision sensor reading
+ """
+ raw_vision_obs = env.simulator.renderer.render_robot_cameras(
+ modes=self.raw_modalities)
+
+ raw_vision_obs = {
+ mode: value
+ for mode, value in zip(self.raw_modalities, raw_vision_obs)
+ }
+
+ vision_obs = OrderedDict()
+ if 'rgb' in self.modalities:
+ vision_obs['rgb'] = self.get_rgb(raw_vision_obs)
+ if 'rgb_filled' in self.modalities:
+ vision_obs['rgb_filled'] = self.get_rgb_filled(raw_vision_obs)
+ if 'depth' in self.modalities:
+ vision_obs['depth'] = self.get_depth(raw_vision_obs)
+ if 'pc' in self.modalities:
+ vision_obs['pc'] = self.get_pc(raw_vision_obs)
+ if 'optical_flow' in self.modalities:
+ vision_obs['optical_flow'] = self.get_optical_flow(raw_vision_obs)
+ if 'scene_flow' in self.modalities:
+ vision_obs['scene_flow'] = self.get_scene_flow(raw_vision_obs)
+ if 'normal' in self.modalities:
+ vision_obs['normal'] = self.get_normal(raw_vision_obs)
+ if 'seg' in self.modalities:
+ vision_obs['seg'] = self.get_seg(raw_vision_obs)
+ return vision_obs
diff --git a/gibson2/simulator.py b/gibson2/simulator.py
index 5a5f57c2d..2e3f64108 100644
--- a/gibson2/simulator.py
+++ b/gibson2/simulator.py
@@ -1,6 +1,10 @@
from gibson2.utils.mesh_util import quat2rotmat, xyzw2wxyz, xyz2mat
+from gibson2.utils.semantics_utils import get_class_name_to_class_id
+from gibson2.utils.constants import SemanticClass, PyBulletSleepState
+from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRenderer
from gibson2.render.mesh_renderer.mesh_renderer_vr import MeshRendererVR, VrSettings
-from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRenderer, InstanceGroup, Instance, MeshRendererSettings
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
+from gibson2.render.mesh_renderer.instances import InstanceGroup, Instance, Robot
from gibson2.render.mesh_renderer.mesh_renderer_tensor import MeshRendererG2G
from gibson2.render.viewer import Viewer, ViewerVR, ViewerSimple
from gibson2.objects.articulated_object import ArticulatedObject, URDFObject
@@ -10,10 +14,14 @@ import os
import numpy as np
import platform
import logging
-from IPython import embed
import time
class Simulator:
+ """
+ Simulator class is a wrapper of physics simulator (pybullet) and MeshRenderer, it loads objects into
+ both pybullet and also MeshRenderer and syncs the pose of objects and robot parts.
+ """
+
def __init__(self,
gravity=9.8,
physics_timestep=1 / 120.0,
@@ -24,14 +32,10 @@ class Simulator:
vertical_fov=90,
device_idx=0,
render_to_tensor=False,
- auto_sync=True,
rendering_settings=MeshRendererSettings(),
vr_settings=VrSettings()):
"""
- Simulator class is a wrapper of physics simulator (pybullet) and MeshRenderer, it loads objects into
- both pybullet and also MeshRenderer and syncs the pose of objects and robot parts.
-
:param gravity: gravity on z direction.
:param physics_timestep: timestep of physical simulation, p.stepSimulation()
:param render_timestep: timestep of rendering, and Simulator.step() function
@@ -52,7 +56,7 @@ class Simulator:
self.render_timestep = render_timestep
self.mode = mode
- #Todo: eliminate this
+ # TODO: remove this, currently used for testing only
self.objects = []
plt = platform.system()
@@ -86,8 +90,9 @@ class Simulator:
self.vertical_fov = vertical_fov
self.device_idx = device_idx
self.render_to_tensor = render_to_tensor
- self.auto_sync = auto_sync
+ self.optimized_renderer = rendering_settings.optimized
self.rendering_settings = rendering_settings
+ self.viewer = None
self.vr_settings = vr_settings
# We must be using the Simulator's vr mode and have use_vr set to true in the settings to access the VR context
self.can_access_vr_context = self.use_vr_renderer and self.vr_settings.use_vr
@@ -104,9 +109,15 @@ class Simulator:
self.load()
+ self.class_name_to_class_id = get_class_name_to_class_id()
+ self.body_links_awake = 0
+
def set_timestep(self, physics_timestep, render_timestep):
"""
- :param timestep: set timestep after the initialization of Simulator
+ Set physics timestep and render (action) timestep
+
+ :param physics_timestep: physics timestep for pybullet
+ :param render_timestep: rendering timestep for renderer
"""
self.physics_timestep = physics_timestep
self.render_timestep = render_timestep
@@ -120,8 +131,8 @@ class Simulator:
def add_viewer(self):
"""
- Attach a debugging viewer to the renderer. This will make the step much slower so should be avoided when
- training agents
+ Attach a debugging viewer to the renderer.
+ This will make the step much slower so should be avoided when training agents
"""
if self.use_vr_renderer:
self.viewer = ViewerVR()
@@ -152,11 +163,10 @@ class Simulator:
self.renderer = MeshRendererVR(rendering_settings=self.rendering_settings, vr_settings=self.vr_settings)
else:
self.renderer = MeshRenderer(width=self.image_width,
- height=self.image_height,
- vertical_fov=self.vertical_fov,
- device_idx=self.device_idx,
- rendering_settings=self.rendering_settings)
-
+ height=self.image_height,
+ vertical_fov=self.vertical_fov,
+ device_idx=self.device_idx,
+ rendering_settings=self.rendering_settings)
# print("******************PyBullet Logging Information:")
if self.use_pb_renderer:
@@ -176,11 +186,13 @@ class Simulator:
if (self.use_ig_renderer or self.use_vr_renderer or self.use_simple_viewer) and not self.render_to_tensor:
self.add_viewer()
-
def optimize_vertex_and_texture(self):
self.renderer.optimize_vertex_and_texture()
def load_without_pybullet_vis(load_func):
+ """
+ Load without pybullet visualizer
+ """
def wrapped_load_func(*args, **kwargs):
p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, False)
res = load_func(*args, **kwargs)
@@ -194,7 +206,7 @@ class Simulator:
texture_scale=1.0,
load_texture=True,
render_floor_plane=False,
- class_id=None,
+ class_id=SemanticClass.SCENE_OBJS,
):
"""
Import a scene into the simulator. A scene could be a synthetic one or a realistic Gibson Environment.
@@ -202,7 +214,9 @@ class Simulator:
:param scene: Scene object
:param texture_scale: Option to scale down the texture for rendering
:param load_texture: If you don't need rgb output, texture loading could be skipped to make rendering faster
+ :param render_floor_plane: Whether to render the additionally added floor plane
:param class_id: Class id for rendering semantic segmentation
+ :return: pybullet body ids from scene.load function
"""
# Load the scene. Returns a list of pybullet ids of the objects loaded that we can use to
@@ -213,7 +227,8 @@ class Simulator:
# Load the objects in the renderer
for new_object_pb_id in new_object_pb_ids:
self.load_object_in_renderer(new_object_pb_id, class_id=class_id, texture_scale=texture_scale,
- load_texture=load_texture, render_floor_plane=render_floor_plane)
+ load_texture=load_texture, render_floor_plane=render_floor_plane,
+ use_pbr=False, use_pbr_mapping=False)
self.scene = scene
return new_object_pb_ids
@@ -222,23 +237,24 @@ class Simulator:
def import_ig_scene(self, scene):
"""
Import scene from iGSDF class
+
:param scene: iGSDFScene instance
- :return: ids from scene.load function
+ :return: pybullet body ids from scene.load function
"""
new_object_ids = scene.load()
self.objects += new_object_ids
if scene.texture_randomization:
# use randomized texture
-
-
for body_id, visual_mesh_to_material in \
zip(new_object_ids, scene.visual_mesh_to_material):
shadow_caster = True
if scene.objects_by_id[body_id].category == 'ceilings':
shadow_caster = False
-
+ class_id = self.class_name_to_class_id.get(
+ scene.objects_by_id[body_id].category, SemanticClass.SCENE_OBJS)
self.load_articulated_object_in_renderer(
- body_id, class_id=body_id,
+ body_id,
+ class_id=class_id,
visual_mesh_to_material=visual_mesh_to_material,
shadow_caster=shadow_caster)
else:
@@ -247,27 +263,39 @@ class Simulator:
use_pbr = True
use_pbr_mapping = True
shadow_caster = True
-
- if scene.objects_by_id[body_id].category in ['walls', 'floors', 'ceilings']:
- use_pbr = False
- use_pbr_mapping = False
+ if scene.scene_source == 'IG':
+ if scene.objects_by_id[body_id].category in ['walls', 'floors', 'ceilings']:
+ use_pbr = False
+ use_pbr_mapping = False
if scene.objects_by_id[body_id].category == 'ceilings':
shadow_caster = False
- self.load_articulated_object_in_renderer(body_id, class_id=body_id,
- use_pbr=use_pbr,
- use_pbr_mapping=use_pbr_mapping,
- shadow_caster=shadow_caster)
+ class_id = self.class_name_to_class_id.get(
+ scene.objects_by_id[body_id].category, SemanticClass.SCENE_OBJS)
+ self.load_articulated_object_in_renderer(
+ body_id,
+ class_id=body_id,
+ use_pbr=use_pbr,
+ use_pbr_mapping=use_pbr_mapping,
+ shadow_caster=shadow_caster)
self.scene = scene
return new_object_ids
@load_without_pybullet_vis
- def import_object(self, obj, class_id=None, use_pbr=True, use_pbr_mapping=True, shadow_caster=True):
+ def import_object(self,
+ obj,
+ class_id=SemanticClass.USER_ADDED_OBJS,
+ use_pbr=True,
+ use_pbr_mapping=True,
+ shadow_caster=True):
"""
- Import a non-articulated object into the simulator
+ Import an object into the simulator
:param obj: Object to load
:param class_id: Class id for rendering semantic segmentation
+ :param use_pbr: Whether to use pbr
+ :param use_pbr_mapping: Whether to use pbr mapping
+ :param shadow_caster: Whether to cast shadow
"""
# Load the object in pybullet. Returns a pybullet id that we can use to load it in the renderer
@@ -303,10 +331,19 @@ class Simulator:
use_pbr_mapping=True,
shadow_caster=True
):
- if class_id is None:
- class_id = self.next_class_id
- self.next_class_id += 1
+ """
+ Load the object into renderer
+ :param object_pb_id: pybullet body id
+ :param class_id: Class id for rendering semantic segmentation
+ :param softbody: Whether the object is soft body
+ :param texture_scale: Texture scale
+ :param load_texture: If you don't need rgb output, texture loading could be skipped to make rendering faster
+ :param render_floor_plane: Whether to render the additionally added floor plane
+ :param use_pbr: Whether to use pbr
+ :param use_pbr_mapping: Whether to use pbr mapping
+ :param shadow_caster: Whether to cast shadow
+ """
for shape in p.getVisualShapeData(object_pb_id):
id, link_id, type, dimensions, filename, rel_pos, rel_orn, color = shape[:8]
visual_object = None
@@ -385,10 +422,16 @@ class Simulator:
use_pbr=True,
use_pbr_mapping=True,
shadow_caster=True):
+ """
+ Load the articulated object into renderer
- if class_id is None:
- class_id = self.next_class_id
- self.next_class_id += 1
+ :param object_pb_id: pybullet body id
+ :param class_id: Class id for rendering semantic segmentation
+ :param visual_mesh_to_material: mapping from visual mesh to randomizable materials
+ :param use_pbr: Whether to use pbr
+ :param use_pbr_mapping: Whether to use pbr mapping
+ :param shadow_caster: Whether to cast shadow
+ """
visual_objects = []
link_ids = []
@@ -411,7 +454,7 @@ class Simulator:
scale=np.array(dimensions),
overwrite_material=overwrite_material)
self.visual_objects[(filename, (*dimensions))
- ] = len(self.renderer.visual_objects) - 1
+ ] = len(self.renderer.visual_objects) - 1
visual_objects.append(
self.visual_objects[(filename, (*dimensions))])
link_ids.append(link_id)
@@ -459,8 +502,8 @@ class Simulator:
link_ids=link_ids,
pybullet_uuid=object_pb_id,
class_id=class_id,
- poses_rot=poses_rot,
poses_trans=poses_trans,
+ poses_rot=poses_rot,
dynamic=True,
robot=None,
use_pbr=use_pbr,
@@ -468,7 +511,9 @@ class Simulator:
shadow_caster=shadow_caster)
@load_without_pybullet_vis
- def import_robot(self, robot, class_id=None):
+ def import_robot(self,
+ robot,
+ class_id=SemanticClass.ROBOTS):
"""
Import a robot into the simulator
@@ -476,11 +521,6 @@ class Simulator:
:param class_id: Class id for rendering semantic segmentation
:return: pybullet id
"""
-
- if class_id is None:
- class_id = self.next_class_id
- self.next_class_id += 1
-
ids = robot.load()
visual_objects = []
link_ids = []
@@ -578,8 +618,7 @@ class Simulator:
physics_dur = time.time() - physics_start_time
render_start_time = time.time()
- if self.auto_sync:
- self.sync()
+ self.sync()
render_dur = time.time() - render_start_time
# Update render timestep using low-pass filter function
if use_render_timestep_lpf:
@@ -606,10 +645,11 @@ class Simulator:
"""
Update positions in renderer without stepping the simulation. Usually used in the reset() function
"""
- for instance in self.renderer.get_instances():
+ self.body_links_awake = 0
+ for instance in self.renderer.instances:
if instance.dynamic:
- self.update_position(instance)
- if (self.use_ig_renderer or self.use_vr_renderer or self.use_simple_viewer) and not self.viewer is None:
+ self.body_links_awake += self.update_position(instance)
+ if self.use_ig_renderer and self.viewer is not None:
self.viewer.update()
# Sets the VR position on the first step iteration where the hmd tracking is valid. Not to be confused
@@ -796,11 +836,12 @@ class Simulator:
:param instance: Instance in the renderer
"""
+ body_links_awake = 0
if isinstance(instance, Instance):
_, _, _, inertial_pos, inertial_orn, _, _, _, _, _, _, _, activation_state = \
p.getDynamicsInfo(instance.pybullet_uuid, -1)
-
- #if activation_state == 1:
+ if activation_state != PyBulletSleepState.AWAKE:
+ return body_links_awake
# pos and orn of the inertial frame of the base link,
# instead of the base link frame
pos, orn = p.getBasePositionAndOrientation(
@@ -818,13 +859,16 @@ class Simulator:
pos, orn, inv_inertial_pos, inv_inertial_orn)
instance.set_position(pos)
- instance.set_rotation(xyzw2wxyz(orn))
+ instance.set_rotation(quat2rotmat(xyzw2wxyz(orn)))
+ body_links_awake += 1
elif isinstance(instance, InstanceGroup):
for j, link_id in enumerate(instance.link_ids):
if link_id == -1:
_, _, _, inertial_pos, inertial_orn, _, _, _, _, _, _, _, activation_state = \
p.getDynamicsInfo(instance.pybullet_uuid, -1)
+ if activation_state != PyBulletSleepState.AWAKE:
+ continue
# same conversion is needed as above
pos, orn = p.getBasePositionAndOrientation(
instance.pybullet_uuid)
@@ -834,14 +878,18 @@ class Simulator:
pos, orn = p.multiplyTransforms(
pos, orn, inv_inertial_pos, inv_inertial_orn)
else:
- activation_state = p.getDynamicsInfo(instance.pybullet_uuid, link_id)[-1]
+ activation_state = p.getDynamicsInfo(
+ instance.pybullet_uuid, link_id)[-1]
+ if activation_state != PyBulletSleepState.AWAKE:
+ continue
_, _, _, _, pos, orn = p.getLinkState(
instance.pybullet_uuid, link_id)
- #print(instance.pybullet_uuid, link_id, activation_state)
- instance.poses_rot[j] = quat2rotmat(xyzw2wxyz(orn))
- instance.poses_trans[j] = xyz2mat(pos)
-
+ instance.set_position_for_part(xyz2mat(pos), j)
+ instance.set_rotation_for_part(
+ quat2rotmat(xyzw2wxyz(orn)), j)
+ body_links_awake += 1
+ return body_links_awake
def isconnected(self):
"""
@@ -851,7 +899,7 @@ class Simulator:
def disconnect(self):
"""
- clean up the simulator
+ Clean up the simulator
"""
if self.isconnected():
# print("******************PyBullet Logging Information:")
diff --git a/gibson2/tasks/__init__.py b/gibson2/tasks/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/gibson2/tasks/dynamic_nav_random_task.py b/gibson2/tasks/dynamic_nav_random_task.py
new file mode 100644
index 000000000..746ede89d
--- /dev/null
+++ b/gibson2/tasks/dynamic_nav_random_task.py
@@ -0,0 +1,82 @@
+from gibson2.tasks.point_nav_random_task import PointNavRandomTask
+import pybullet as p
+from gibson2.robots.turtlebot_robot import Turtlebot
+import numpy as np
+
+
+class DynamicNavRandomTask(PointNavRandomTask):
+ """
+ Dynamic Navigation Random Task
+ The goal is to navigate to a random goal position, in the presence of dynamic objects
+ """
+
+ def __init__(self, env):
+ super(DynamicNavRandomTask, self).__init__(env)
+ self.num_dynamic_objects = self.config.get('num_dynamic_objects', 1)
+ # dynamic objects will repeat their actions for 10 action timesteps
+ self.dynamic_objects_action_repeat = self.config.get(
+ 'dynamic_objects_action_repeat', 10)
+
+ self.dynamic_objects = self.load_dynamic_objects(env)
+ self.dynamic_objects_last_actions = [
+ robot.action_space.sample() for robot in self.dynamic_objects]
+
+ def load_dynamic_objects(self, env):
+ """
+ Load dynamic objects (Turtlebots)
+
+ :param env: environment instance
+ :return: a list of interactive objects
+ """
+ dynamic_objects = []
+ for _ in range(self.num_dynamic_objects):
+ robot = Turtlebot(self.config)
+ env.simulator.import_robot(robot)
+ dynamic_objects.append(robot)
+ return dynamic_objects
+
+ def reset_dynamic_objects(self, env):
+ """
+ Reset the poses of dynamic objects to have no collisions with the scene or the robot
+
+ :param env: environment instance
+ """
+ max_trials = 100
+ for robot in self.dynamic_objects:
+ # TODO: p.saveState takes a few seconds, need to speed up
+ state_id = p.saveState()
+ for _ in range(max_trials):
+ _, pos = env.scene.get_random_point(floor=self.floor_num)
+ orn = np.array([0, 0, np.random.uniform(0, np.pi * 2)])
+ reset_success = env.test_valid_position(robot, pos, orn)
+ p.restoreState(state_id)
+ if reset_success:
+ break
+
+ if not reset_success:
+ print("WARNING: Failed to reset dynamic obj without collision")
+
+ env.land(robot, pos, orn)
+
+ def reset_scene(self, env):
+ """
+ Task-specific scene reset: reset the dynamic objects after scene and agent reset
+
+ :param env: environment instance
+ """
+ super(DynamicNavRandomTask, self).reset_scene(env)
+ self.reset_dynamic_objects(env)
+
+ def step(self, env):
+ """
+ Perform task-specific step: move the dynamic objects with action repeat
+
+ :param env: environment instance
+ """
+ super(DynamicNavRandomTask, self).step(env)
+ if env.current_step % self.dynamic_objects_action_repeat == 0:
+ self.dynamic_objects_last_actions = [
+ robot.action_space.sample() for robot in self.dynamic_objects]
+ for robot, action in \
+ zip(self.dynamic_objects, self.dynamic_objects_last_actions):
+ robot.apply_action(action)
diff --git a/gibson2/tasks/interactive_nav_random_task.py b/gibson2/tasks/interactive_nav_random_task.py
new file mode 100644
index 000000000..a3a2a402d
--- /dev/null
+++ b/gibson2/tasks/interactive_nav_random_task.py
@@ -0,0 +1,72 @@
+from gibson2.tasks.point_nav_random_task import PointNavRandomTask
+import pybullet as p
+from gibson2.objects.ycb_object import YCBObject
+import numpy as np
+
+
+class InteractiveNavRandomTask(PointNavRandomTask):
+ """
+ Interactive Navigation Random Task
+ The goal is to navigate to a random goal position, in the presence of interactive objects that are small and light
+ """
+
+ def __init__(self, env):
+ super(InteractiveNavRandomTask, self).__init__(env)
+ self.interactive_objects = self.load_interactive_objects(env)
+ env.collision_ignore_body_b_ids |= set(
+ [obj.body_id for obj in self.interactive_objects])
+
+ def load_interactive_objects(self, env):
+ """
+ Load interactive objects (YCB objects)
+
+ :param env: environment instance
+ :return: a list of interactive objects
+ """
+ interactive_objects = []
+ object_paths = [
+ '002_master_chef_can',
+ '003_cracker_box',
+ '004_sugar_box',
+ '005_tomato_soup_can',
+ '006_mustard_bottle',
+ ]
+
+ for object_path in object_paths:
+ obj = YCBObject(object_path)
+ env.simulator.import_object(obj)
+ interactive_objects.append(obj)
+ return interactive_objects
+
+ def reset_interactive_objects(self, env):
+ """
+ Reset the poses of interactive objects to have no collisions with the scene or the robot
+
+ :param env: environment instance
+ """
+ max_trials = 100
+
+ for obj in self.interactive_objects:
+ # TODO: p.saveState takes a few seconds, need to speed up
+ state_id = p.saveState()
+ for _ in range(max_trials):
+ _, pos = env.scene.get_random_point(floor=self.floor_num)
+ orn = np.array([0, 0, np.random.uniform(0, np.pi * 2)])
+ reset_success = env.test_valid_position(obj, pos, orn)
+ p.restoreState(state_id)
+ if reset_success:
+ break
+
+ if not reset_success:
+ print("WARNING: Failed to reset interactive obj without collision")
+
+ env.land(obj, pos, orn)
+
+ def reset_scene(self, env):
+ """
+ Task-specific scene reset: reset the interactive objects after scene and agent reset
+
+ :param env: environment instance
+ """
+ super(InteractiveNavRandomTask, self).reset_scene(env)
+ self.reset_interactive_objects(env)
diff --git a/gibson2/tasks/point_nav_fixed_task.py b/gibson2/tasks/point_nav_fixed_task.py
new file mode 100644
index 000000000..6e66c2604
--- /dev/null
+++ b/gibson2/tasks/point_nav_fixed_task.py
@@ -0,0 +1,259 @@
+from gibson2.tasks.task_base import BaseTask
+import pybullet as p
+from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
+from gibson2.scenes.gibson_indoor_scene import StaticIndoorScene
+from gibson2.termination_conditions.max_collision import MaxCollision
+from gibson2.termination_conditions.timeout import Timeout
+from gibson2.termination_conditions.out_of_bound import OutOfBound
+from gibson2.termination_conditions.point_goal import PointGoal
+from gibson2.reward_functions.potential_reward import PotentialReward
+from gibson2.reward_functions.collision_reward import CollisionReward
+from gibson2.reward_functions.point_goal_reward import PointGoalReward
+
+from gibson2.utils.utils import l2_distance, rotate_vector_3d, cartesian_to_polar
+from gibson2.objects.visual_marker import VisualMarker
+
+import numpy as np
+
+
+class PointNavFixedTask(BaseTask):
+ """
+ Point Nav Fixed Task
+ The goal is to navigate to a fixed goal position
+ """
+
+ def __init__(self, env):
+ super(PointNavFixedTask, self).__init__(env)
+ self.reward_type = self.config.get('reward_type', 'l2')
+ self.termination_conditions = [
+ MaxCollision(self.config),
+ Timeout(self.config),
+ OutOfBound(self.config),
+ PointGoal(self.config),
+ ]
+ self.reward_functions = [
+ PotentialReward(self.config),
+ CollisionReward(self.config),
+ PointGoalReward(self.config),
+ ]
+
+ self.initial_pos = np.array(self.config.get('initial_pos', [0, 0, 0]))
+ self.initial_orn = np.array(self.config.get('initial_orn', [0, 0, 0]))
+ self.target_pos = np.array(self.config.get('target_pos', [5, 5, 0]))
+ self.goal_format = self.config.get('goal_format', 'polar')
+ self.dist_tol = self.termination_conditions[-1].dist_tol
+
+ self.visual_object_at_initial_target_pos = self.config.get(
+ 'visual_object_at_initial_target_pos', True
+ )
+ self.target_visual_object_visible_to_agent = self.config.get(
+ 'target_visual_object_visible_to_agent', False
+ )
+ self.floor_num = 0
+
+ self.load_visualization(env)
+
+ def load_visualization(self, env):
+ """
+ Load visualization, such as initial and target position, shortest path, etc
+
+ :param env: environment instance
+ """
+ if env.mode != 'gui':
+ return
+
+ cyl_length = 0.2
+ self.initial_pos_vis_obj = VisualMarker(
+ visual_shape=p.GEOM_CYLINDER,
+ rgba_color=[1, 0, 0, 0.3],
+ radius=self.dist_tol,
+ length=cyl_length,
+ initial_offset=[0, 0, cyl_length / 2.0])
+ self.target_pos_vis_obj = VisualMarker(
+ visual_shape=p.GEOM_CYLINDER,
+ rgba_color=[0, 0, 1, 0.3],
+ radius=self.dist_tol,
+ length=cyl_length,
+ initial_offset=[0, 0, cyl_length / 2.0])
+
+ if self.target_visual_object_visible_to_agent:
+ env.simulator.import_object(self.initial_pos_vis_obj)
+ env.simulator.import_object(self.target_pos_vis_obj)
+ else:
+ self.initial_pos_vis_obj.load()
+ self.target_pos_vis_obj.load()
+
+ if env.scene.build_graph:
+ self.num_waypoints_vis = 250
+ self.waypoints_vis = [VisualMarker(
+ visual_shape=p.GEOM_CYLINDER,
+ rgba_color=[0, 1, 0, 0.3],
+ radius=0.1,
+ length=cyl_length,
+ initial_offset=[0, 0, cyl_length / 2.0])
+ for _ in range(self.num_waypoints_vis)]
+ for waypoint in self.waypoints_vis:
+ waypoint.load()
+
+ def get_geodesic_potential(self, env):
+ """
+ Get potential based on geodesic distance
+
+ :param env: environment instance
+ :return: geodesic distance to the target position
+ """
+ _, geodesic_dist = self.get_shortest_path(env)
+ return geodesic_dist
+
+ def get_l2_potential(self, env):
+ """
+ Get potential based on L2 distance
+
+ :param env: environment instance
+ :return: L2 distance to the target position
+ """
+ return l2_distance(env.robots[0].get_position()[:2],
+ self.target_pos[:2])
+
+ def get_potential(self, env):
+ """
+ Compute task-specific potential: distance to the goal
+
+ :param env: environment instance
+ :return: task potential
+ """
+ if self.reward_type == 'l2':
+ return self.get_l2_potential(env)
+ elif self.reward_type == 'geodesic':
+ return self.get_geodesic_potential(env)
+
+ def reset_scene(self, env):
+ """
+ Task-specific scene reset: reset scene objects or floor plane
+
+ :param env: environment instance
+ """
+ if isinstance(env.scene, InteractiveIndoorScene):
+ env.scene.reset_scene_objects()
+ elif isinstance(env.scene, StaticIndoorScene):
+ env.scene.reset_floor(floor=self.floor_num)
+
+ def reset_agent(self, env):
+ """
+ Task-specific agent reset: land the robot to initial pose, compute initial potential
+
+ :param env: environment instance
+ """
+ env.land(env.robots[0], self.initial_pos, self.initial_orn)
+ self.path_length = 0.0
+ self.robot_pos = self.initial_pos[:2]
+ self.geodesic_dist = self.get_geodesic_potential(env)
+ for reward_function in self.reward_functions:
+ reward_function.reset(self, env)
+
+ def get_termination(self, env, collision_links=[], action=None, info={}):
+ """
+ Aggreate termination conditions and fill info
+ """
+ done, info = super(PointNavFixedTask, self).get_termination(
+ env, collision_links, action, info)
+
+ info['path_length'] = self.path_length
+ if done:
+ info['spl'] = float(info['success']) * \
+ min(1.0, self.geodesic_dist / self.path_length)
+ else:
+ info['spl'] = 0.0
+
+ return done, info
+
+ def global_to_local(self, env, pos):
+ """
+ Convert a 3D point in global frame to agent's local frame
+
+ :param env: environment instance
+ :param pos: a 3D point in global frame
+ :return: the same 3D point in agent's local frame
+ """
+ return rotate_vector_3d(pos - env.robots[0].get_position(),
+ *env.robots[0].get_rpy())
+
+ def get_task_obs(self, env):
+ """
+ Get task-specific observation, including goal position, current velocities, etc.
+
+ :param env: environment instance
+ :return: task-specific observation
+ """
+ task_obs = self.global_to_local(env, self.target_pos)[:2]
+ if self.goal_format == 'polar':
+ task_obs = np.array(cartesian_to_polar(task_obs[0], task_obs[1]))
+
+ # linear velocity along the x-axis
+ linear_velocity = rotate_vector_3d(
+ env.robots[0].get_linear_velocity(),
+ *env.robots[0].get_rpy())[0]
+ # angular velocity along the z-axis
+ angular_velocity = rotate_vector_3d(
+ env.robots[0].get_angular_velocity(),
+ *env.robots[0].get_rpy())[2]
+ task_obs = np.append(
+ task_obs, [linear_velocity, angular_velocity])
+
+ return task_obs
+
+ def get_shortest_path(self,
+ env,
+ from_initial_pos=False,
+ entire_path=False):
+ """
+ Get the shortest path and geodesic distance from the robot or the initial position to the target position
+
+ :param env: environment instance
+ :param from_initial_pos: whether source is initial position rather than current position
+ :param entire_path: whether to return the entire shortest path
+ :return: shortest path and geodesic distance to the target position
+ """
+ if from_initial_pos:
+ source = self.initial_pos[:2]
+ else:
+ source = env.robots[0].get_position()[:2]
+ target = self.target_pos[:2]
+ return env.scene.get_shortest_path(
+ self.floor_num, source, target, entire_path=entire_path)
+
+ def step_visualization(self, env):
+ """
+ Step visualization
+
+ :param env: environment instance
+ """
+ if env.mode != 'gui':
+ return
+
+ self.initial_pos_vis_obj.set_position(self.initial_pos)
+ self.target_pos_vis_obj.set_position(self.target_pos)
+
+ if env.scene.build_graph:
+ shortest_path, _ = self.get_shortest_path(env, entire_path=True)
+ floor_height = env.scene.get_floor_height(self.floor_num)
+ num_nodes = min(self.num_waypoints_vis, shortest_path.shape[0])
+ for i in range(num_nodes):
+ self.waypoints_vis[i].set_position(
+ pos=np.array([shortest_path[i][0],
+ shortest_path[i][1],
+ floor_height]))
+ for i in range(num_nodes, self.num_waypoints_vis):
+ self.waypoints_vis[i].set_position(
+ pos=np.array([0.0, 0.0, 100.0]))
+
+ def step(self, env):
+ """
+ Perform task-specific step: step visualization and aggregate path length
+
+ :param env: environment instance
+ """
+ self.step_visualization(env)
+ new_robot_pos = env.robots[0].get_position()[:2]
+ self.path_length += l2_distance(self.robot_pos, new_robot_pos)
+ self.robot_pos = new_robot_pos
diff --git a/gibson2/tasks/point_nav_random_task.py b/gibson2/tasks/point_nav_random_task.py
new file mode 100644
index 000000000..a0ffa30e4
--- /dev/null
+++ b/gibson2/tasks/point_nav_random_task.py
@@ -0,0 +1,86 @@
+from gibson2.tasks.point_nav_fixed_task import PointNavFixedTask
+from gibson2.utils.utils import l2_distance
+import pybullet as p
+import logging
+import numpy as np
+
+
+class PointNavRandomTask(PointNavFixedTask):
+ """
+ Point Nav Random Task
+ The goal is to navigate to a random goal position
+ """
+
+ def __init__(self, env):
+ super(PointNavRandomTask, self).__init__(env)
+ self.target_dist_min = self.config.get('target_dist_min', 1.0)
+ self.target_dist_max = self.config.get('target_dist_max', 10.0)
+
+ def sample_initial_pose_and_target_pos(self, env):
+ """
+ Sample robot initial pose and target position
+
+ :param env: environment instance
+ :return: initial pose and target position
+ """
+ _, initial_pos = env.scene.get_random_point(floor=self.floor_num)
+ max_trials = 100
+ dist = 0.0
+ for _ in range(max_trials):
+ _, target_pos = env.scene.get_random_point(floor=self.floor_num)
+ if env.scene.build_graph:
+ _, dist = env.scene.get_shortest_path(
+ self.floor_num,
+ initial_pos[:2],
+ target_pos[:2], entire_path=False)
+ else:
+ dist = l2_distance(initial_pos, target_pos)
+ if self.target_dist_min < dist < self.target_dist_max:
+ break
+ if not (self.target_dist_min < dist < self.target_dist_max):
+ print("WARNING: Failed to sample initial and target positions")
+ initial_orn = np.array([0, 0, np.random.uniform(0, np.pi * 2)])
+ return initial_pos, initial_orn, target_pos
+
+ def reset_scene(self, env):
+ """
+ Task-specific scene reset: get a random floor number first
+
+ :param env: environment instance
+ """
+ self.floor_num = env.scene.get_random_floor()
+ super(PointNavRandomTask, self).reset_scene(env)
+
+ def reset_agent(self, env):
+ """
+ Reset robot initial pose.
+ Sample initial pose and target position, check validity, and land it.
+
+ :param env: environment instance
+ """
+ reset_success = False
+ max_trials = 100
+
+ # cache pybullet state
+ # TODO: p.saveState takes a few seconds, need to speed up
+ state_id = p.saveState()
+ for i in range(max_trials):
+ initial_pos, initial_orn, target_pos = \
+ self.sample_initial_pose_and_target_pos(env)
+ reset_success = env.test_valid_position(
+ env.robots[0], initial_pos, initial_orn) and \
+ env.test_valid_position(
+ env.robots[0], target_pos)
+ p.restoreState(state_id)
+ if reset_success:
+ break
+
+ if not reset_success:
+ logging.warning("WARNING: Failed to reset robot without collision")
+
+ p.removeState(state_id)
+
+ self.target_pos = target_pos
+ self.initial_pos = initial_pos
+
+ super(PointNavRandomTask, self).reset_agent(env)
diff --git a/gibson2/tasks/reaching_random_task.py b/gibson2/tasks/reaching_random_task.py
new file mode 100644
index 000000000..0edb58155
--- /dev/null
+++ b/gibson2/tasks/reaching_random_task.py
@@ -0,0 +1,75 @@
+from gibson2.tasks.point_nav_random_task import PointNavRandomTask
+from gibson2.termination_conditions.point_goal import PointGoal
+from gibson2.termination_conditions.reaching_goal import ReachingGoal
+from gibson2.reward_functions.point_goal_reward import PointGoalReward
+from gibson2.reward_functions.reaching_goal_reward import ReachingGoalReward
+from gibson2.utils.utils import l2_distance
+
+import numpy as np
+
+
+class ReachingRandomTask(PointNavRandomTask):
+ """
+ Reaching Random Task
+ The goal is to reach a random goal position with the robot's end effector
+ """
+
+ def __init__(self, env):
+ super(ReachingRandomTask, self).__init__(env)
+ self.target_height_range = self.config.get(
+ 'target_height_range', [0.0, 1.0]
+ )
+ assert isinstance(self.termination_conditions[-1], PointGoal)
+ self.termination_conditions[-1] = ReachingGoal(self.config)
+ assert isinstance(self.reward_functions[-1], PointGoalReward)
+ self.reward_functions[-1] = ReachingGoalReward(self.config)
+
+ def get_l2_potential(self, env):
+ """
+ L2 distance to the goal
+
+ :param env: environment instance
+ :return: potential based on L2 distance to goal
+ """
+ return l2_distance(env.robots[0].get_end_effector_position(),
+ self.target_pos)
+
+ def get_potential(self, env):
+ """
+ Compute task-specific potential: distance to the goal
+
+ :param env: environment instance
+ :return: task potential
+ """
+ return self.get_l2_potential(env)
+
+ def sample_initial_pose_and_target_pos(self, env):
+ """
+ Sample robot initial pose and target position
+
+ :param env: environment instance
+ :return: initial pose and target position
+ """
+ initial_pos, initial_orn, target_pos = \
+ super(ReachingRandomTask, self).sample_initial_pose_and_target_pos(env)
+ target_pos += np.random.uniform(self.target_height_range[0],
+ self.target_height_range[1])
+ return initial_pos, initial_orn, target_pos
+
+ def get_task_obs(self, env):
+ """
+ Get task-specific observation, including goal position, end effector position, etc.
+
+ :param env: environment instance
+ :return: task-specific observation
+ """
+ task_obs = super(ReachingRandomTask, self).get_task_obs(env)
+ goal_z_local = self.global_to_local(env, self.target_pos)[2]
+ end_effector_pos_local = self.global_to_local(
+ env,
+ env.robots[0].get_end_effector_position())
+
+ task_obs = np.append(task_obs, goal_z_local)
+ task_obs = np.append(task_obs, end_effector_pos_local)
+
+ return task_obs
diff --git a/gibson2/tasks/room_rearrangement_task.py b/gibson2/tasks/room_rearrangement_task.py
new file mode 100644
index 000000000..7665f0d51
--- /dev/null
+++ b/gibson2/tasks/room_rearrangement_task.py
@@ -0,0 +1,119 @@
+from gibson2.tasks.task_base import BaseTask
+import pybullet as p
+from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
+from gibson2.termination_conditions.max_collision import MaxCollision
+from gibson2.termination_conditions.timeout import Timeout
+from gibson2.termination_conditions.out_of_bound import OutOfBound
+from gibson2.reward_functions.potential_reward import PotentialReward
+
+import logging
+import numpy as np
+
+
+class RoomRearrangementTask(BaseTask):
+ """
+ Room Rearrangement Task
+ The goal is to close as many furniture (e.g. cabinets and fridges) as possible
+ """
+
+ def __init__(self, env):
+ super(RoomRearrangementTask, self).__init__(env)
+ assert isinstance(env.scene, InteractiveIndoorScene), \
+ 'room rearrangement can only be done in InteractiveIndoorScene'
+ self.prismatic_joint_reward_scale = self.config.get(
+ 'prismatic_joint_reward_scale', 1.0)
+ self.revolute_joint_reward_scale = self.config.get(
+ 'revolute_joint_reward_scale', 1.0)
+ self.termination_conditions = [
+ MaxCollision(self.config),
+ Timeout(self.config),
+ OutOfBound(self.config),
+ ]
+ self.reward_functions = [
+ PotentialReward(self.config),
+ ]
+ self.floor_num = 0
+
+ def get_potential(self, env):
+ """
+ Compute task-specific potential: furniture joint positions
+
+ :param env: environment instance
+ :param: task potential
+ """
+ task_potential = 0.0
+ for (body_id, joint_id) in self.body_joint_pairs:
+ j_type = p.getJointInfo(body_id, joint_id)[2]
+ j_pos = p.getJointState(body_id, joint_id)[0]
+ scale = self.prismatic_joint_reward_scale \
+ if j_type == p.JOINT_PRISMATIC \
+ else self.revolute_joint_reward_scale
+ task_potential += scale * j_pos
+ return task_potential
+
+ def reset_scene(self, env):
+ """
+ Reset all scene objects and then open certain object categories of interest.
+
+ :param env: environment instance
+ """
+ env.scene.reset_scene_objects()
+ env.scene.force_wakeup_scene_objects()
+ self.body_joint_pairs = env.scene.open_all_objs_by_categories(
+ ['bottom_cabinet',
+ 'bottom_cabinet_no_top',
+ 'top_cabinet',
+ 'dishwasher',
+ 'fridge',
+ 'microwave',
+ 'oven',
+ 'washer'
+ 'dryer',
+ ], mode='random', prob=0.5)
+
+ def sample_initial_pose(self, env):
+ """
+ Sample robot initial pose
+
+ :param env: environment instance
+ :return: initial pose
+ """
+ _, initial_pos = env.scene.get_random_point(floor=self.floor_num)
+ initial_orn = np.array([0, 0, np.random.uniform(0, np.pi * 2)])
+ return initial_pos, initial_orn
+
+ def reset_agent(self, env):
+ """
+ Reset robot initial pose.
+ Sample initial pose, check validity, and land it.
+
+ :param env: environment instance
+ """
+ reset_success = False
+ max_trials = 100
+
+ # cache pybullet state
+ # TODO: p.saveState takes a few seconds, need to speed up
+ state_id = p.saveState()
+ for _ in range(max_trials):
+ initial_pos, initial_orn = self.sample_initial_pose(env)
+ reset_success = env.test_valid_position(
+ env.robots[0], initial_pos, initial_orn)
+ p.restoreState(state_id)
+ if reset_success:
+ break
+
+ if not reset_success:
+ logging.warning("WARNING: Failed to reset robot without collision")
+
+ env.land(env.robots[0], initial_pos, initial_orn)
+ p.removeState(state_id)
+
+ for reward_function in self.reward_functions:
+ reward_function.reset(self, env)
+
+ def get_task_obs(self, env):
+ """
+ No task-specific observation
+ """
+ return
diff --git a/gibson2/tasks/task_base.py b/gibson2/tasks/task_base.py
new file mode 100644
index 000000000..f10556ebc
--- /dev/null
+++ b/gibson2/tasks/task_base.py
@@ -0,0 +1,89 @@
+from abc import abstractmethod, ABC
+
+
+class BaseTask(ABC):
+ """
+ Base Task class.
+ Task-specific reset_scene, reset_agent, get_task_obs, step methods are implemented in subclasses
+ Subclasses are expected to populate self.reward_functions and self.termination_conditions
+ """
+
+ def __init__(self, env):
+ self.config = env.config
+ self.reward_functions = []
+ self.termination_conditions = []
+ self.task_obs_dim = self.config.get('task_obs_dim', 0)
+
+ @abstractmethod
+ def reset_scene(self, env):
+ """
+ Task-specific scene reset
+
+ :param env: environment instance
+ """
+ raise NotImplementedError()
+
+ @abstractmethod
+ def reset_agent(self, env):
+ """
+ Task-specific agent reset
+
+ :param env: environment instance
+ """
+ raise NotImplementedError()
+
+ def get_reward(self, env, collision_links=[], action=None, info={}):
+ """
+ Aggreate reward functions
+
+ :param env: environment instance
+ :param collision_links: collision links after executing action
+ :param action: the executed action
+ :param info: additional info
+ :return reward: total reward of the current timestep
+ :return info: additional info
+ """
+ reward = 0.0
+ for reward_function in self.reward_functions:
+ reward += reward_function.get_reward(self, env)
+
+ return reward, info
+
+ def get_termination(self, env, collision_links=[], action=None, info={}):
+ """
+ Aggreate termination conditions
+
+ :param env: environment instance
+ :param collision_links: collision links after executing action
+ :param action: the executed action
+ :param info: additional info
+ :return done: whether the episode has terminated
+ :return info: additional info
+ """
+ done = False
+ success = False
+ for condition in self.termination_conditions:
+ d, s = condition.get_termination(self, env)
+ done = done or d
+ success = success or s
+ info['done'] = done
+ info['success'] = success
+ return done, info
+
+ @abstractmethod
+ def get_task_obs(self, env):
+ """
+ Get task-specific observation
+
+ :param env: environment instance
+ :return: task-specific observation (numpy array)
+ """
+ raise NotImplementedError()
+
+ def step(self, env):
+ """
+ Perform task-specific step for every timestep
+
+ :param env: environment instance
+ """
+ return
diff --git a/gibson2/termination_conditions/__init__.py b/gibson2/termination_conditions/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/gibson2/termination_conditions/max_collision.py b/gibson2/termination_conditions/max_collision.py
new file mode 100644
index 000000000..439bcddaf
--- /dev/null
+++ b/gibson2/termination_conditions/max_collision.py
@@ -0,0 +1,28 @@
+from abc import abstractmethod, ABC
+from gibson2.termination_conditions.termination_condition_base import BaseTerminationCondition
+
+
+class MaxCollision(BaseTerminationCondition):
+ """
+ MaxCollision used for navigation tasks
+ Episode terminates if the robot has collided more than
+ max_collisions_allowed times
+ """
+
+ def __init__(self, config):
+ super(MaxCollision, self).__init__(config)
+ self.max_collisions_allowed = self.config.get(
+ 'max_collisions_allowed', 500)
+
+ def get_termination(self, task, env):
+ """
+ Return whether the episode should terminate.
+ Terminate if the robot has collided more than self.max_collisions_allowed times
+
+ :param task: task instance
+ :param env: environment instance
+ :return: done, info
+ """
+ done = env.collision_step > self.max_collisions_allowed
+ success = False
+ return done, success
diff --git a/gibson2/termination_conditions/out_of_bound.py b/gibson2/termination_conditions/out_of_bound.py
new file mode 100644
index 000000000..221b2bcd9
--- /dev/null
+++ b/gibson2/termination_conditions/out_of_bound.py
@@ -0,0 +1,33 @@
+from gibson2.termination_conditions.termination_condition_base import BaseTerminationCondition
+from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
+
+
+class OutOfBound(BaseTerminationCondition):
+ """
+ OutOfBound used for navigation tasks in InteractiveIndoorScene
+ Episode terminates if the robot goes outside the valid region
+ """
+
+ def __init__(self, config):
+ super(OutOfBound, self).__init__(config)
+ self.fall_off_thresh = self.config.get(
+ 'fall_off_thresh', 0.03)
+
+ def get_termination(self, task, env):
+ """
+ Return whether the episode should terminate.
+ Terminate if the robot goes outside the valid region
+
+ :param task: task instance
+ :param env: environment instance
+ :return: done, info
+ """
+
+ done = False
+ # fall off the cliff of valid region
+ if isinstance(env.scene, InteractiveIndoorScene):
+ robot_z = env.robots[0].get_position()[2]
+ if robot_z < (env.scene.get_floor_height() - self.fall_off_thresh):
+ done = True
+ success = False
+ return done, success
diff --git a/gibson2/termination_conditions/point_goal.py b/gibson2/termination_conditions/point_goal.py
new file mode 100644
index 000000000..79ae24c3e
--- /dev/null
+++ b/gibson2/termination_conditions/point_goal.py
@@ -0,0 +1,28 @@
+from gibson2.termination_conditions.termination_condition_base import BaseTerminationCondition
+from gibson2.utils.utils import l2_distance
+
+
+class PointGoal(BaseTerminationCondition):
+ """
+ PointGoal used for PointNavFixed/RandomTask
+ Episode terminates if point goal is reached
+ """
+
+ def __init__(self, config):
+ super(PointGoal, self).__init__(config)
+ self.dist_tol = self.config.get('dist_tol', 0.5)
+
+ def get_termination(self, task, env):
+ """
+ Return whether the episode should terminate.
+ Terminate if point goal is reached (distance below threshold)
+
+ :param task: task instance
+ :param env: environment instance
+ :return: done, info
+ """
+ done = l2_distance(
+ env.robots[0].get_position()[:2],
+ task.target_pos[:2]) < self.dist_tol
+ success = done
+ return done, success
diff --git a/gibson2/termination_conditions/reaching_goal.py b/gibson2/termination_conditions/reaching_goal.py
new file mode 100644
index 000000000..1b31b9628
--- /dev/null
+++ b/gibson2/termination_conditions/reaching_goal.py
@@ -0,0 +1,28 @@
+from gibson2.termination_conditions.termination_condition_base import BaseTerminationCondition
+from gibson2.utils.utils import l2_distance
+
+
+class ReachingGoal(BaseTerminationCondition):
+ """
+ ReachingGoal used for ReachingRandomTask
+ Episode terminates if reaching goal is reached
+ """
+
+ def __init__(self, config):
+ super(ReachingGoal, self).__init__(config)
+ self.dist_tol = self.config.get('dist_tol', 0.5)
+
+ def get_termination(self, task, env):
+ """
+ Return whether the episode should terminate.
+ Terminate if reaching goal is reached (distance below threshold)
+
+ :param task: task instance
+ :param env: environment instance
+ :return: done, info
+ """
+ done = l2_distance(
+ env.robots[0].get_end_effector_position(),
+ task.target_pos) < self.dist_tol
+ success = done
+ return done, success
diff --git a/gibson2/termination_conditions/termination_condition_base.py b/gibson2/termination_conditions/termination_condition_base.py
new file mode 100644
index 000000000..d71ef5894
--- /dev/null
+++ b/gibson2/termination_conditions/termination_condition_base.py
@@ -0,0 +1,22 @@
+from abc import abstractmethod, ABC
+
+
+class BaseTerminationCondition(ABC):
+ """
+ Base TerminationCondition class
+ Condition-specific get_termination method is implemented in subclasses
+ """
+
+ def __init__(self, config):
+ self.config = config
+
+ @abstractmethod
+ def get_termination(self, task, env):
+ """
+ Return whether the episode should terminate. Overwritten by subclasses.
+
+ :param task: task instance
+ :param env: environment instance
+ :return: done, info
+ """
+ raise NotImplementedError()
diff --git a/gibson2/termination_conditions/timeout.py b/gibson2/termination_conditions/timeout.py
new file mode 100644
index 000000000..8d02cade0
--- /dev/null
+++ b/gibson2/termination_conditions/timeout.py
@@ -0,0 +1,25 @@
+from gibson2.termination_conditions.termination_condition_base import BaseTerminationCondition
+
+
+class Timeout(BaseTerminationCondition):
+ """
+ Timeout
+ Episode terminates if max_step steps have passed
+ """
+
+ def __init__(self, config):
+ super(Timeout, self).__init__(config)
+ self.max_step = self.config.get('max_step', 500)
+
+ def get_termination(self, task, env):
+ """
+ Return whether the episode should terminate.
+ Terminate if max_step steps have passed
+
+ :param task: task instance
+ :param env: environment instance
+ :return: done, info
+ """
+ done = env.current_step >= self.max_step
+ success = False
+ return done, success
diff --git a/gibson2/utils/__init__.py b/gibson2/utils/__init__.py
index 01faa4d24..e69de29bb 100644
--- a/gibson2/utils/__init__.py
+++ b/gibson2/utils/__init__.py
@@ -1,2 +0,0 @@
-#from realenv.client.vnc_client import VNCClient
-#from realenv.client.client_actions import client_actions, client_newloc
\ No newline at end of file
diff --git a/gibson2/utils/assets_utils.py b/gibson2/utils/assets_utils.py
index 8cb4ca161..040b4703c 100644
--- a/gibson2/utils/assets_utils.py
+++ b/gibson2/utils/assets_utils.py
@@ -4,9 +4,33 @@ import argparse
import random
import subprocess
import json
+from collections import defaultdict
+import yaml
+
+
+def get_ig_category_ids():
+ """
+ Get iGibson object categories
+
+ :return: file path to the scene name
+ """
+ ig_dataset_path = gibson2.ig_dataset_path
+ ig_categories_files = os.path.join(
+ ig_dataset_path, 'metadata', 'categories.txt')
+ name_to_id = {}
+ with open(ig_categories_files, 'r') as fp:
+ for i, l in enumerate(fp.readlines()):
+ name_to_id[l.rstrip()] = i
+ return defaultdict(lambda: 255, name_to_id)
def get_ig_scene_path(scene_name):
+ """
+ Get iGibson scene path
+
+ :param scene_name: scene name
+ :return: file path to the scene name
+ """
ig_dataset_path = gibson2.ig_dataset_path
ig_scenes_path = ig_dataset_path + "/scenes"
print('SCENE NAME:', scene_name)
@@ -15,7 +39,41 @@ def get_ig_scene_path(scene_name):
return os.path.join(ig_scenes_path, scene_name)
+def get_3dfront_scene_path(scene_name):
+ """
+ Get 3D-FRONT scene path
+
+ :param scene_name: scene name
+ :return: file path to the scene name
+ """
+ threedfront_dataset_path = gibson2.threedfront_dataset_path
+ threedfront_dataset_path = os.path.join( threedfront_dataset_path, "scenes")
+ assert scene_name in os.listdir(
+ threedfront_dataset_path), "Scene {} does not exist".format(scene_name)
+ return os.path.join(threedfront_dataset_path, scene_name)
+
+
+def get_cubicasa_scene_path(scene_name):
+ """
+ Get cubicasa scene path
+
+ :param scene_name: scene name
+ :return: file path to the scene name
+ """
+ cubicasa_dataset_path = gibson2.cubicasa_dataset_path
+ cubicasa_dataset_path= os.path.join( cubicasa_dataset_path, "scenes")
+ assert scene_name in os.listdir(
+ cubicasa_dataset_path), "Scene {} does not exist".format(scene_name)
+ return os.path.join(cubicasa_dataset_path, scene_name)
+
+
def get_ig_category_path(category_name):
+ """
+ Get iGibson object category path
+
+ :param category_name: object category
+ :return: file path to the object category
+ """
ig_dataset_path = gibson2.ig_dataset_path
ig_categories_path = ig_dataset_path + "/objects"
assert category_name in os.listdir(
@@ -24,6 +82,13 @@ def get_ig_category_path(category_name):
def get_ig_model_path(category_name, model_name):
+ """
+ Get iGibson object model path
+
+ :param category_name: object category
+ :param model_name: object model
+ :return: file path to the object model
+ """
ig_category_path = get_ig_category_path(category_name)
assert model_name in os.listdir(
ig_category_path), "Model {} from category {} does not exist".format(model_name, category_name)
@@ -31,6 +96,11 @@ def get_ig_model_path(category_name, model_name):
def get_all_object_models():
+ """
+ Get iGibson all object models
+
+ :return: a list of all object model paths
+ """
ig_dataset_path = gibson2.ig_dataset_path
ig_categories_path = ig_dataset_path + "/objects"
@@ -41,15 +111,21 @@ def get_all_object_models():
for category in categories:
category_models = os.listdir(
os.path.join(ig_categories_path, category))
- category_models = [item for item in category_models if os.path.isdir(os.path.join(ig_categories_path,
- category,
- item))]
+ category_models = [item for item in category_models
+ if os.path.isdir(os.path.join(ig_categories_path,
+ category,
+ item))]
models.extend([os.path.join(ig_categories_path, category, item)
for item in category_models])
return models
def get_ig_assets_version():
+ """
+ Get iGibson asset version
+
+ :return: iGibson asset version
+ """
process = subprocess.Popen(['git', '-C', gibson2.ig_dataset_path, 'rev-parse', 'HEAD'],
shell=False, stdout=subprocess.PIPE)
git_head_hash = str(process.communicate()[0].strip())
@@ -57,13 +133,25 @@ def get_ig_assets_version():
def get_scene_path(scene_id):
- data_path = gibson2.dataset_path
+ """
+ Gibson scene path
+
+ :param scene_id: scene id
+ :return: scene path for this scene_id
+ """
+ data_path = gibson2.g_dataset_path
assert scene_id in os.listdir(
data_path) or scene_id == 'stadium', "Scene {} does not exist".format(scene_id)
return os.path.join(data_path, scene_id)
def get_texture_file(mesh_file):
+ """
+ Get texture file
+
+ :param mesh_file: mesh obj file
+ :return: texture file path
+ """
model_dir = os.path.dirname(mesh_file)
with open(mesh_file, 'r') as f:
lines = [line.strip() for line in f.readlines() if 'mtllib' in line]
@@ -83,47 +171,117 @@ def get_texture_file(mesh_file):
def download_assets():
+ """
+ Download iGibson assets
+ """
+ if not os.path.exists(os.path.dirname(gibson2.assets_path)):
+ os.makedirs(os.path.dirname(gibson2.assets_path))
+
if not os.path.exists(gibson2.assets_path):
os.system(
- 'wget https://storage.googleapis.com/gibson_scenes/assets_igibson.tar.gz -O /tmp/assets_igibson.tar.gz')
+ 'wget -c --retry-connrefused --tries=5 --timeout=5 '
+ 'https://storage.googleapis.com/gibson_scenes/assets_igibson.tar.gz -O /tmp/assets_igibson.tar.gz')
os.system('tar -zxf /tmp/assets_igibson.tar.gz --directory {}'.format(
os.path.dirname(gibson2.assets_path)))
def download_demo_data():
- if not os.path.exists(gibson2.dataset_path):
- os.makedirs(gibson2.dataset_path)
+ """
+ Download iGibson demo dataset
+ """
+ if not os.path.exists(gibson2.g_dataset_path):
+ os.makedirs(gibson2.g_dataset_path)
- if not os.path.exists(os.path.join(gibson2.dataset_path, 'Rs')):
+ if not os.path.exists(os.path.join(gibson2.g_dataset_path, 'Rs')):
os.system(
- 'wget https://storage.googleapis.com/gibson_scenes/Rs.tar.gz -O /tmp/Rs.tar.gz')
+ 'wget -c --retry-connrefused --tries=5 --timeout=5 '
+ 'https://storage.googleapis.com/gibson_scenes/Rs.tar.gz -O /tmp/Rs.tar.gz')
os.system(
- 'tar -zxf /tmp/Rs.tar.gz --directory {}'.format(gibson2.dataset_path))
-
- # if not os.path.exists(os.path.join(gibson2.dataset_path, 'Rs_interactive')):
- # os.system('wget https://storage.googleapis.com/gibson_scenes/Rs_interactive.tar.gz -O /tmp/Rs_interactive.tar.gz')
- # os.system('tar -zxf /tmp/Rs_interactive.tar.gz --directory {}'.format(gibson2.dataset_path))
+ 'tar -zxf /tmp/Rs.tar.gz --directory {}'.format(gibson2.g_dataset_path))
def download_dataset(url):
- if not os.path.exists(gibson2.dataset_path):
- os.makedirs(gibson2.dataset_path)
+ """
+ Download Gibson dataset
+ """
+ if not os.path.exists(gibson2.g_dataset_path):
+ os.makedirs(gibson2.g_dataset_path)
file_name = url.split('/')[-1]
- os.system('wget {} -O /tmp/{}'.format(url, file_name))
os.system(
- 'tar -zxf /tmp/{} --strip-components=1 --directory {}'.format(file_name, gibson2.dataset_path))
- # these datasets comes as folders, in these folder there are scenes, so --strip-components are needed.
+ 'wget -c --retry-connrefused --tries=5 --timeout=5 {} -O /tmp/{}'.format(url, file_name))
+ os.system(
+ 'tar -zxf /tmp/{} --strip-components=1 --directory {}'.format(file_name, gibson2.g_dataset_path))
+ # These datasets come as folders; in these folder there are scenes, so --strip-components are needed.
+def download_ext_scene_assets():
+ os.makedirs(gibson2.threedfront_dataset_path, exist_ok=True)
+ os.makedirs(gibson2.cubicasa_dataset_path, exist_ok=True)
+ url = "https://storage.googleapis.com/gibson_scenes/default_materials.tar.gz"
+ file_name = url.split('/')[-1]
+ os.system(
+ 'wget -c --retry-connrefused --tries=5 --timeout=5 {} -O /tmp/{}'.format(url, file_name))
+ os.system( 'tar -zxf /tmp/{} --directory {}'.format(
+ file_name, gibson2.cubicasa_dataset_path))
+ os.system( 'tar -zxf /tmp/{} --directory {}'.format(
+ file_name, gibson2.threedfront_dataset_path))
+
+ url = "https://storage.googleapis.com/gibson_scenes/threedfront_urdfs.tar.gz"
+ file_name = url.split('/')[-1]
+ os.system(
+ 'wget -c --retry-connrefused --tries=5 --timeout=5 {} -O /tmp/{}'.format(url, file_name))
+ os.system( 'tar -zxf /tmp/{} --directory {}'.format(
+ file_name, gibson2.threedfront_dataset_path))
+
+def download_ig_dataset():
+ """
+ Download iGibson dataset
+ """
+ while input("Do you agree to the terms for using iGibson dataset (http://svl.stanford.edu/gibson2/assets/GDS_agreement.pdf)? [y/n]") != "y":
+ print("You need to agree to the terms for using iGibson dataset.")
+
+ if not os.path.exists(gibson2.ig_dataset_path):
+ os.makedirs(gibson2.ig_dataset_path)
+ url = "https://storage.googleapis.com/gibson_scenes/ig_dataset.tar.gz"
+ file_name = url.split('/')[-1]
+ os.system(
+ 'wget -c --retry-connrefused --tries=5 --timeout=5 {} -O /tmp/{}'.format(url, file_name))
+ os.system(
+ 'tar -zxf /tmp/{} --strip-components=1 --directory {}'.format(file_name, gibson2.ig_dataset_path))
+ # These datasets come as folders; in these folder there are scenes, so --strip-components are needed.
+
+def change_data_path():
+ with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'global_config.yaml')) as f:
+ global_config = yaml.load(f, Loader=yaml.FullLoader)
+ print("Current dataset path:")
+ for k, v in global_config.items():
+ print("{}: {}".format(k,v))
+ for k,v in global_config.items():
+ new_path = input("Change {} from {} to: ".format(k, v))
+ global_config[k] = new_path
+
+ print("New dataset path:")
+ for k, v in global_config.items():
+ print("{}: {}".format(k,v))
+ response = input("Save? [y/n]")
+ if response == "y":
+ with open(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'global_config.yaml'), 'w') as f:
+ yaml.dump(global_config, f)
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--download_assets',
action='store_true', help='download assets file')
parser.add_argument('--download_demo_data', action='store_true',
- help='download demo data Rs and Rs_interactive')
+ help='download demo data Rs')
parser.add_argument('--download_dataset', type=str,
help='download dataset file given an URL')
+ parser.add_argument('--download_ig_dataset', action='store_true',
+ help='download iG Dataset')
+ parser.add_argument('--download_ext_scene_assets', action='store_true',
+ help='download external scene dataset assets')
+ parser.add_argument('--change_data_path', action='store_true',
+ help='change the path to store assets and datasert')
args = parser.parse_args()
@@ -133,3 +291,9 @@ if __name__ == "__main__":
download_demo_data()
elif args.download_dataset is not None:
download_dataset(args.download_dataset)
+ elif args.download_ig_dataset:
+ download_ig_dataset()
+ elif args.change_data_path:
+ change_data_path()
+ elif args.download_ext_scene_assets:
+ download_ext_scene_assets()
diff --git a/gibson2/utils/constants.py b/gibson2/utils/constants.py
index b78c8d322..b7442fa77 100644
--- a/gibson2/utils/constants.py
+++ b/gibson2/utils/constants.py
@@ -1,3 +1,77 @@
+"""
+Constant Definitions
+"""
+
+from enum import IntEnum
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
+import gibson2
+import os
+
+
+class SemanticClass(IntEnum):
+ BACKGROUND = 0
+ ROBOTS = 1
+ USER_ADDED_OBJS = 2
+ SCENE_OBJS = 3
+
+
+class ShadowPass(IntEnum):
+ NO_SHADOW = 0
+ HAS_SHADOW_RENDER_SHADOW = 1
+ HAS_SHADOW_RENDER_SCENE = 2
+
+
+class OccupancyGridState(object):
+ OBSTACLES = 0.0
+ UNKNOWN = 0.5
+ FREESPACE = 1.0
+
+
+class PyBulletSleepState(IntEnum):
+ AWAKE = 1
+
+
+hdr_texture = os.path.join(
+ gibson2.ig_dataset_path, 'scenes', 'background', 'probe_02.hdr')
+hdr_texture2 = os.path.join(
+ gibson2.ig_dataset_path, 'scenes', 'background', 'probe_03.hdr')
+light_modulation_map_filename = os.path.join(
+ gibson2.ig_dataset_path, 'scenes', 'Rs_int', 'layout', 'floor_lighttype_0.png')
+background_texture = os.path.join(
+ gibson2.ig_dataset_path, 'scenes', 'background', 'urban_street_01.jpg')
+
+NamedRenderingPresets = {
+ 'NO_PBR': MeshRendererSettings(enable_pbr=False, enable_shadow=False),
+ 'PBR_NOSHADOW': MeshRendererSettings(enable_pbr=True, enable_shadow=True),
+ 'PBR_SHADOW_MSAA': MeshRendererSettings(enable_pbr=True, enable_shadow=True,
+ msaa=True),
+
+ 'NO_PBR_OPT': MeshRendererSettings(enable_pbr=False, enable_shadow=False, optimized=True),
+ 'PBR_NOSHADOW_OPT': MeshRendererSettings(enable_pbr=True, enable_shadow=True, optimized=True),
+ 'PBR_SHADOW_MSAA_OPT': MeshRendererSettings(enable_pbr=True, enable_shadow=True,
+ msaa=True, optimized=True),
+
+ 'HQ_WITH_BG_OPT':
+ MeshRendererSettings(env_texture_filename=hdr_texture,
+ env_texture_filename2=hdr_texture2,
+ env_texture_filename3=background_texture,
+ light_modulation_map_filename=light_modulation_map_filename,
+ enable_shadow=True, msaa=True,
+ light_dimming_factor=1.0,
+ optimized=True),
+
+ 'VISUAL_RL': MeshRendererSettings(enable_pbr=True, enable_shadow=False, msaa=False, optimized=True),
+ 'PERCEPTION': MeshRendererSettings(env_texture_filename=hdr_texture,
+ env_texture_filename2=hdr_texture2,
+ env_texture_filename3=background_texture,
+ light_modulation_map_filename=light_modulation_map_filename,
+ enable_shadow=True, msaa=True,
+ light_dimming_factor=1.0,
+ optimized=True)
+}
+
+AVAILABLE_MODALITIES = ('rgb', 'normal', '3d', 'seg',
+ 'optical_flow', 'scene_flow')
# Encodings
RAW_ENCODING = 0
COPY_RECTANGLE_ENCODING = 1
@@ -8,7 +82,7 @@ ZLIB_ENCODING = 6
TIGHT_ENCODING = 7
ZLIBHEX_ENCODING = 8
ZRLE_ENCODING = 16
-#0xffffff00 to 0xffffffff tight options
+# 0xffffff00 to 0xffffffff tight options
PSEUDO_CURSOR_ENCODING = -239
# Keycodes
diff --git a/gibson2/utils/data_utils/.gitignore b/gibson2/utils/data_utils/.gitignore
deleted file mode 100644
index 92d40ee6d..000000000
--- a/gibson2/utils/data_utils/.gitignore
+++ /dev/null
@@ -1,7 +0,0 @@
-node_modules/
-__pycache__/
-dataset/
-
-# Data
-*.log
-scripts/
diff --git a/gibson2/utils/data_utils/README.md b/gibson2/utils/data_utils/README.md
index 9b70ab1ea..091aa6916 100644
--- a/gibson2/utils/data_utils/README.md
+++ b/gibson2/utils/data_utils/README.md
@@ -1,147 +1,172 @@
-# Full Gibson Environment Dataset
+# iG Dataset Content Description
-Full Gibson Environment Dataset consists of 572 models and 1440 floors. We cover a diverse set of models including households, offices, hotels, venues, museums, hospitals, construction sites, etc. A diverse set of visualization of all spaces in Gibson can be seen [here](http://gibsonenv.stanford.edu/database/).
-
-
+The iG Dataset v1.0 includes:
-Table of contents
-=================
+**15 large scenes (100+ rooms):**
- * [Download](#download)
- * [Dataset Metadata](#dataset-metadata)
- * [Dataset Modalities](#dataset-modalities)
- * [Dataset Splits](#dataset-splits)
- * [Navigation Benchmark Scenarios](#navigation-benchmark-scenarios)
- * [Dataset Metrics](#dataset-metrics)
- * [Navigation Waypoints](#navigation-waypoints)
+
-# Download Gibson Database of Spaces
-The link will first take you to the license agreement and then to the data.
+- Scenes are the result of converting 3D reconstructions of real homes into fully interactive simulatable environments.
+- Each scene corresponds to one floor of a real world home.
+- The scenes are annotated with bounding box location and size of different objects, mostly furniture, e.g. cabinets, doors, stoves, tables, chairs, beds, showers, toilets, sinks...
+- Scenes include layout information (occupancy, semantics)
+- Each scene's lighting effect is designed manually, and the texture of the building elements (walls, floors, ceilings) is baked offline with high-performant ray-tracing
+- Scenes are defined in iGSDF (iGibson Scene Definition Format), an extension of URDF, and shapes are OBJ files with associated materials
-### [[ Download the full Gibson Database of Spaces ]](https://goo.gl/forms/OxAQHbl1v97BJ3Sg1) [[ checksums ]](https://github.com/StanfordVL/GibsonEnv/wiki/Checksum-Values-for-Data.md)
+**More than 500 object models:**
+- The models have been collected from open source datasets (shapenet, partnet-mobility dataset...).
+- The models have been cleaned up (normals, small errors) and annotated with physics-based material information (diffuse, roughness, metallic, normal) and dynamics properties (weight, friction)
+- Objects with articulation can move, thanks to the partnet-mobility dataset annotation
+- Object models are defined as URDFs and shapes are OBJ files with associated materials
-License Note: The dataset license is included in the above link. The license in this repository covers only the provided software.
+We acknowledge [shapenet](https://www.shapenet.org/) and [partnet-mobility dataset](https://sapien.ucsd.edu/browse) for their contributions. If you use the iG Dataset in your research, please consider also citing them.
-**Stanford 2D-3D-Semantics Dataset:** the download link of 2D-3D-Semantics as Gibson asset files is included in the [same link ](https://goo.gl/forms/OxAQHbl1v97BJ3Sg1) as above.
+Below, we describe:
+1. **data format** for both [scene](#igibson-scene-data-format) and [object](#igibson-object-data-format).
+2. how to **customize your own scene** by adding more iGibson objects to an existing iGibson scene.
-**Matterport3D Dataset:** Please fill and sign the corresponding [Terms of Use agreement](http://dovahkiin.stanford.edu/matterport/public/MP_TOS.pdf) form and send it to [matterport3d@googlegroups.com](matterport3d@googlegroups.com). Please put "use with GIBSON simulator" in your email. You'll then recieve a python script via email in response. Use the invocation `python download_mp.py --task_data gibson -o .` with the received script to download the data (39.09GB). Matterport3D webpage: [link](https://niessner.github.io/Matterport/).
+We also include instruction to **import data from external sources** :
+1. [instructions](ext_object) on how to import your own objects to iGibson.
+2. [instructions](ext_scene) on how to import scenes from existing datasets ([CubiCasa5k](https://github.com/CubiCasa/CubiCasa5k) and [3D-FRONT](https://tianchi.aliyun.com/specials/promotion/alibaba-3d-scene-dataset)) to iGibson.
+
+## iGibson scene data format
-### Citation
-If you use Gibson's database or software please cite:
```
-@inproceedings{xiazamirhe2018gibsonenv,
- title={Gibson {Env}: real-world perception for embodied agents},
- author={Xia, Fei and R. Zamir, Amir and He, Zhiyang and Sax, Alexander and Malik, Jitendra and Savarese, Silvio},
- booktitle={Computer Vision and Pattern Recognition (CVPR), 2018 IEEE Conference on},
- year={2018},
- organization={IEEE}
-}
+scene_name
+│
+└───urdf
+│ │ # The structure of links (in iGSDF pseudo-URDF format) and joints
+│ │ scene_name.urdf
+│ │ # Single link object with all the walls (collision and visual)
+│ │ scene_name_walls.urdf
+│ │ # Single link object with all the floors (collision and visual)
+│ │ scene_name_floors.urdf
+│ │ # Single link object with all the ceilings (collision and visual)
+│ │ scene_name_ceilings.urdf
+│ │ # multi-link object with each building structure as a link, used to generate scene_name{_best|_random_N}.urdf
+│ │ scene_name_orig.urdf
+│ │ # Similar to scene_name.urdf, but has object instances already selected, with the highest quality geometry and material, and guaranteed scene consistency.
+│ │ scene_name_best.urdf
+│ │ # Similar to scene_name.urdf, but has object instances already selected, with the highest quality geometry and material, and guaranteed scene consistency. Used for object randomization.
+│ │ scene_name_random_N.urdf
+│
+└───shape
+│ └───visual
+│ │ │ # Directory containing all the obj files for walls and floors.
+│ │ │ # Each obj uses a different baked texture map, linked by the corresponding mtl file.
+│ │ │ wall_vm.obj, wall.mtl
+│ │ │ ceiling_vm.obj, ceiling.mtl
+│ │ │ floor_0_vm.obj, floor_0.mtl
+│ │ │ floor_1_vm.obj, floor_1.mtl
+│ │ │ ...
+│ │
+│ └───collision
+│ │ │ # Directory containing all the collision obj files for walls and floors.
+│ │ │ wall_cm.obj
+│ │ │ ceiling_cm.obj
+│ │ │ floor_0_cm.obj
+│ │ │ Floor_1_cm.obj
+│ │ │ ...
+│ │
+└───material
+│ │ # Each directory contains the corresponding structure element’s baked texture map.
+│ │ # There are two channels: COMBINED.png (RGB map with baked shading) and NORMAL.png (tangent normal map).
+│ └───ceiling
+│ │ │ COMBINED.png
+│ │ │ NORMAL.png
+│ │
+│ └───wall
+│ │ │ COMBINED.png
+│ │ │ NORMAL.png
+│ │
+│ └───floor_0
+│ │ │ COMBINED.png
+│ │ │ NORMAL.png
+│ │
+│ └───floor_1
+│ │ ...
+│
+└───layout
+│ │ # All maps have the same center and orientation. Each pixel represents a centimeter in 3D space.
+│ │ #
+│ │ # obstacle map for localization and planning, contains only structure elements
+│ │ floor_no_obj_0.png
+│ │ # obstacle map for localization and planning, contains all furnitures
+│ │ floor_0.png
+│ │ # occupancy map for localization and planning, contains only structure elements
+│ │ floor_trav_no_obj_0.png
+│ │ # occupancy map for localization and planning, contains all furnitures
+│ │ floor_trav_0.png
+│ │ # scene semantic segmentation map for initialization (objects, agents) and other perceptual tasks
+│ │ floor_semseg_0.png
+│ │ # scene instance segmentation map for initialization (objects, agents) and other perceptual tasks
+│ │ floor_insseg_0.png
+│ │ # lighting type map used for iGibson rendering
+│ │ floor_lighttype_0.png
+│
+└───misc
+│ │ # Stores all the objects in the scene, used to generate scene_name.urdf, scene_name_best.urdf and scene_name_random_N.urdf
+│ │ all_objs.json
+│ │ # A list of object pairs that have overlapping bounding boxes, used for scene quality check
+│ │ bbox_overlap.json
+│ │ # Material group that the ceilings are assigned to, used for online texture randomization
+│ │ ceilings_material_groups.json
+│ │ # Similar to above
+│ │ floors_material_groups.json
+│ │ # Similar to above
+│ │ walls_material_groups.json
+│ │ # Annotated camera trajectory that tour through each scene
+│ │ tour_cam_trajectory.txt
```
-## Dataset Metadata
-Each space in the database has some metadata with the following attributes associated with it. The metadata is available in this [JSON file](https://raw.githubusercontent.com/StanfordVL/GibsonEnv/master/gibson/data/data.json).
+## iGibson object data format
+
```
-id # the name of the space, e.g. ""Albertville""
-area # total metric area of the building, e.g. "266.125" sq. meters
-floor # number of floors in the space, e.g. "4"
-navigation_complexity # navigation complexity metric, e.g. "3.737" (see the paper for definition)
-room # number of rooms, e.g. "16"
-ssa # Specific Surface Area (A measure of clutter), e.g. "1.297" (see the paper for definition)
-split_full # if the space is in train/val/test/none split of Full partition
-split_full+ # if the space is in train/val/test/none split of Full+ partition
-split_medium # if the space is in train/val/test/none split of Medium partition
-split_tiny # if the space is in train/val/test/none split of Tiny partition
+OBJECT_NAME
+│ # Unified Robot Description Format (URDF)
+│ # http://wiki.ros.org/urdf
+│ # It defines the object model (parts, articulation, dynamics properties etc.).
+│ OBJECT_NAME.urdf
+│
+└───shape
+│ └───visual
+│ │ │ # Directory containing visual meshes (vm) of the object. Used for iGibson's rendering
+│ │ │ # All objs are UV mapped onto the same texture, linked by default.mtl. All faces are triangles.
+│ │ │ # Each obj represents a unique (link, material) combination.
+│ │ │ # For example, link_1_m1_vm.obj represents the part of link_1 that uses material m1.
+│ │ │ # The material annotation can be found in OBJECT_NAME/misc/material_groups.json.
+│ │ │ link_1_m1_vm.obj
+│ │ │ link_1_m2_vm.obj
+│ │ │ link_2_m1_vm.obj
+│ │ │ …
+│ │ │ default.mtl (links the geometry to the texture files)
+│ │
+│ └───collision
+│ │ │ # Directory containing collision meshes (cm) of the objects. Used for iGibson's physics simulation.
+│ │ │ # Each obj represents a unique link of the object.
+│ │ │ # For example, link_1_cm.obj represents the collision mesh of link_1.
+│ │ │ link_1_cm.obj
+│ │ │ link_2_cm.obj
+│ │ │ …
+│
+└───material
+│ │ # There are 4 channels:
+│ │ # DIFFUSE.png (RGB albedo map)
+│ │ # METALLIC.png (metallic map)
+│ │ # NORMAL.png (tangent normal map)
+│ │ # ROUGHNESS.png (roughness map)
+│ │ DIFFUSE.png
+│ │ METALLIC.png
+│ │ NORMAL.png
+│ │ ROUGHNESS.png
+│
+└───misc
+│ │ # contains bounding box information of the object
+│ │ metadata.json
+│ │ # contains the object’s material annotation of what kinds of material each link can have.
+│ │ material_groups.json
+│
+└───visualizations
+│ │ # GIF of the visual mesh of the object rotating, rendered with iG renderer
+│ │ OBJECT_NAME.gif
```
-
-## Dataset Modalities
-Each space in the database has its own folder. All the modalities and metadata for each space are contained in that folder.
-```
-/pano
- /points # camera metadata
- /rgb # rgb images
- /mist # depth images
-mesh.obj # 3d mesh
-mesh_z_up.obj # 3d mesh for physics engine
-camera_poses.csv # camera locations
-semantic.obj (optional) # 3d mesh with semantic annotation
-```
-
-## Dataset Splits
-Due to the sheer size of the database, We provide four different standard partitions which are subsets of the full Gibson database of 572 models. We recommend starting with tiny partition and progressively adding more models if you wish. Each partition is divided into `training/validation/testing` splits. [You can download the standard split files here](https://storage.googleapis.com/gibsonassets/splits.tar.gz).
-
-| Split Name | Train | Val | Test | Hole Filled | Total Size |
-|----------|:-------------:|-------------:|------:| ------:| -------------:|
-| Tiny | 25 | 5 | 5 | 100% | 8 GiB |
-| Medium | 100 | 20 | 20 | 100% | 21 GiB |
-| Full | 360 | 70 | 70 | 100% | 65 GiB |
-| Full+ | 412 | 80 | 80 | 90.9% | 89 GiB |
-
-**Hole Filling**: We applied combination of automatic and manual hole-filling techniques on `tiny`, `medium` and `full` sets, to ensure that the models do not have severe reconstruction artifacts. `full+` contains the rest of the models that we are incapable of hole-filling, based on current techniques.
-**Split Criteria**: In every split, we sort all 572 models by the linear combination of `loor number`, `area`, `ssa` and `navigation complexity`. We select a `tiny` as the set of models with the highest combination scores. We also set `medium` to be inclusive of `tiny`, and `full` to be inclusive of `mediuim`.
-
-# Navigation Benchmark Scenarios
-
-We provide standard point-to-point navigation episodes in [Gibson Standard Navigation Benchmark](https://storage.googleapis.com/gibsonassets/navigation_scenarios.tar.gz). See the figure below for visualization of a sample episode. Each space includes 100 episodes along with their ground truth near-optimal path and waypoints. You can see random standard episodes visualized for each space in the [database webpage](http://gibsonenv.stanford.edu/database/). See [this paper](https://arxiv.org/abs/1807.06757) for a discussion on the navigation episodes and their application. The following column values are provided for each episode:
-
-- `split`: `train`, `val`, or `test` indicating split for the episode.
-- `task`: string id for task type, currently restricted to `p` for `point_goal`.
-- `sceneId`: id of model within which episode takes place.
-- `level`: integer id of level (typically floor) within scene, starting from `0`.
-- `startX`, `startY`, `startZ`: coordinates of agent starting position in scene space.
-- `startAngle`, : azimuth angle (counter-clockwise from scene space +X axis) of agent starting state.
-- `goalRoomId`, `goalRoomType`: currently not available.
-- `goalObjectId`, `goalObjectType`: currently not available.
-- `goalX`, `goalY`, `goalZ`: coordinates of goal point in scene space. Required for all task types. Position of goal for `point_goal`.
-- `dist`, `pathDist`: Euclidean and geodesic (along shortest path) distance from agent start position to goal position
-- `pathNumDoors`, `pathDoorIds`: currently not available.
-- `pathNumRooms`, `pathRoomIndices`: currently not available.
-
-
-## Dataset Metrics
-
-**Floor Number** Total number of floors in each model.
-
-We calculate floor numbers using distinctive camera locations. We use `sklearn.cluster.DBSCAN` to cluster these locations by height and set minimum cluster size to `5`. This means areas with at least `5` sweeps are treated as one single floor. This helps us capture small building spaces such as backyard, attics, basements.
-
-**Area** Total floor area of each model.
-
-We calculate total floor area by summing up area of each floor. This is done by sampling point cloud locations based on floor height, and fitting a `scipy.spatial.ConvexHull` on sample locations.
-
-**SSA** Specific surface area.
-
-The ratio of inner mesh surface and volume of convex hull of the mesh. This is a measure of clutter in the models: if the inner space is placed with large number of furnitures, objects, etc, the model will have high SSA.
-
-**Navigation Complexity** The highest complexity of navigating between arbitrary points within the model.
-
-We sample arbitrary point pairs inside the model, and calculate `A∗` navigation distance between them. `Navigation Complexity` is equal to `A*` distance divide by `straight line distance` between the two points. We compute the highest navigation complexity for every model. Note that all point pairs are sample within the *same floor*.
-
-**Subjective Attributes**
-
-We examine each model manually, and note the subjective attributes of them. This includes their furnishing style, house shapes, whether they have long stairs, etc.
-
-
-## Navigation Waypoints
-
-For every navigation scenario, we provide navigation waypoints as an optional choice to assist users with training navigation agents. The waypoints of each model is stored as a json file named with the id of that model.
-
-### Visualization
-
-We provide code for visualizing waypoints. In order to use it, you need to install the latest [Blender](https://www.blender.org/).
-
-```bash
-## Make sure that you can start blender in terminal
-blender
-
-## Configure your blender python path
-echo `python -c "import sys; print(':'.join(x for x in sys.path if x))"` > path.txt
-
-### Running visualization
-blender -b --python visualize_path.py --filepath path_to_scenario_json_dir \
- --datapath path_to_dataset_root_dir \
- --renderpath . \
- --model Allensville \
- --idx 1 \
-```
-
-Should give you:
-
diff --git a/gibson2/utils/data_utils/blender_utils/README.md b/gibson2/utils/data_utils/blender_utils/README.md
new file mode 100644
index 000000000..166537134
--- /dev/null
+++ b/gibson2/utils/data_utils/blender_utils/README.md
@@ -0,0 +1,13 @@
+## Installing Blender
+
+We use Blender 2.82 for mesh processing. You can run:
+```
+./install_blender.sh
+```
+to install Blender version 2.82.
+
+Check if installation is correct by calling:
+```
+blender
+```
+in a command line window. If the command fails, it's likely that ```$PATH``` was set incorrectly in ```~/.bashrc```.
\ No newline at end of file
diff --git a/gibson2/utils/data_utils/blender_utils/install_blender.sh b/gibson2/utils/data_utils/blender_utils/install_blender.sh
new file mode 100755
index 000000000..839c944c6
--- /dev/null
+++ b/gibson2/utils/data_utils/blender_utils/install_blender.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+
+curl -O https://download.blender.org/release/Blender2.82/blender-2.82-linux64.tar.xz
+tar -xvf blender-2.82-linux64.tar.xz
+echo "export PATH=\$PATH:$(pwd)/blender-2.82-linux64" >> ~/.bashrc
diff --git a/gibson2/utils/data_utils/blender_utils/material_util.py b/gibson2/utils/data_utils/blender_utils/material_util.py
new file mode 100644
index 000000000..d843f21bf
--- /dev/null
+++ b/gibson2/utils/data_utils/blender_utils/material_util.py
@@ -0,0 +1,340 @@
+import bpy
+import glob
+import os
+from typing import Tuple
+import sys
+import math
+
+################################################################################
+# glob Utility
+################################################################################
+
+def insensitive_glob(pattern):
+ def either(c):
+ return '[%s%s]' % (c.lower(), c.upper()) if c.isalpha() else c
+ return glob.glob(''.join(map(either, pattern)))
+
+################################################################################
+# Node Utility
+################################################################################
+
+def create_texture_node(node_tree: bpy.types.NodeTree,
+ name: str, path: str,
+ is_color_data: bool) -> bpy.types.Node:
+ # Instantiate a new texture image node
+ texture_node = node_tree.nodes.new(type='ShaderNodeTexImage')
+ texture_node.name = name
+ # print(path)
+ # Open an image and set it to the node
+ texture_node.image = bpy.data.images.load(path)
+
+ # Set other parameters
+ if bpy.app.version >= (2, 80, 0):
+ texture_node.image.colorspace_settings.is_data = False if is_color_data else True
+ else:
+ texture_node.color_space = 'COLOR' if is_color_data else 'NONE'
+
+ # Return the node
+ return texture_node
+
+def create_empty_image(node_tree: bpy.types.NodeTree,
+ name: str, is_color_data: bool,
+ dim: Tuple[int, int] = (2048, 2048)) -> bpy.types.Node:
+ # Instantiate a new texture image node
+ texture_node = node_tree.nodes.new(type='ShaderNodeTexImage')
+ # Open an image and set it to the node
+ width,height = dim
+ if name in bpy.data.images:
+ texture_node.image = bpy.data.images[name]
+ else:
+ texture_node.image = bpy.data.images.new(name=name,
+ width=width, height=height)
+ # Set other parameters
+ if bpy.app.version >= (2, 80, 0):
+ texture_node.image.colorspace_settings.is_data = False if is_color_data else True
+ else:
+ texture_node.color_space = 'COLOR' if is_color_data else 'NONE'
+
+ # Return the node
+ return texture_node
+
+def clean_nodes(nodes: bpy.types.Nodes) -> None:
+ for node in nodes:
+ nodes.remove(node)
+
+################################################################################
+# PBR Utility
+################################################################################
+
+def build_pbr_textured_nodes(node_tree: bpy.types.NodeTree,
+ color_texture_path: str = "",
+ metallic_texture_path: str = "",
+ roughness_texture_path: str = "",
+ normal_texture_path: str = "",
+ displacement_texture_path: str = "",
+ ambient_occlusion_texture_path: str = "",
+ scale: Tuple[float, float, float] = (1.0, 1.0, 1.0),
+ is_cc0: bool = True) -> None:
+ output_node = node_tree.nodes.new(type='ShaderNodeOutputMaterial')
+ principled_node = node_tree.nodes.new(type='ShaderNodeBsdfPrincipled')
+ # principled_node.name = 'BSDF'
+ node_tree.links.new(principled_node.outputs['BSDF'], output_node.inputs['Surface'])
+
+ coord_node = node_tree.nodes.new(type='ShaderNodeTexCoord')
+ mapping_node = node_tree.nodes.new(type='ShaderNodeMapping')
+ mapping_node.vector_type = 'POINT'
+ if bpy.app.version >= (2, 81, 0):
+ mapping_node.inputs["Scale"].default_value = scale
+ else:
+ mapping_node.scale = scale
+ node_tree.links.new(coord_node.outputs['UV'], mapping_node.inputs['Vector'])
+
+ if color_texture_path != "":
+ texture_node = create_texture_node(node_tree, 'diffuse', color_texture_path, True)
+ node_tree.links.new(mapping_node.outputs['Vector'], texture_node.inputs['Vector'])
+ if ambient_occlusion_texture_path != "":
+ ao_texture_node = create_texture_node(node_tree, 'ambient_occlusion', ambient_occlusion_texture_path, False)
+ node_tree.links.new(mapping_node.outputs['Vector'], ao_texture_node.inputs['Vector'])
+ mix_node = node_tree.nodes.new(type='ShaderNodeMixRGB')
+ mix_node.blend_type = 'MULTIPLY'
+ node_tree.links.new(texture_node.outputs['Color'], mix_node.inputs['Color1'])
+ node_tree.links.new(ao_texture_node.outputs['Color'], mix_node.inputs['Color2'])
+ node_tree.links.new(mix_node.outputs['Color'], principled_node.inputs['Base Color'])
+ else:
+ node_tree.links.new(texture_node.outputs['Color'], principled_node.inputs['Base Color'])
+
+ if metallic_texture_path != "":
+ texture_node = create_texture_node(node_tree, 'metallic', metallic_texture_path, False)
+ node_tree.links.new(mapping_node.outputs['Vector'], texture_node.inputs['Vector'])
+ node_tree.links.new(texture_node.outputs['Color'], principled_node.inputs['Metallic'])
+
+ if roughness_texture_path != "":
+ texture_node = create_texture_node(node_tree, 'roughness', roughness_texture_path, False)
+ node_tree.links.new(mapping_node.outputs['Vector'], texture_node.inputs['Vector'])
+ node_tree.links.new(texture_node.outputs['Color'], principled_node.inputs['Roughness'])
+
+ if normal_texture_path != "":
+ texture_node = create_texture_node(node_tree, 'normal', normal_texture_path, False)
+ node_tree.links.new(mapping_node.outputs['Vector'], texture_node.inputs['Vector'])
+ normal_map_node = node_tree.nodes.new(type='ShaderNodeNormalMap')
+ if is_cc0:
+ separate_map_node = node_tree.nodes.new(type='ShaderNodeSeparateRGB')
+ combine_map_node = node_tree.nodes.new(type='ShaderNodeCombineRGB')
+ invert_map_node = node_tree.nodes.new(type='ShaderNodeInvert')
+ node_tree.links.new(texture_node.outputs['Color'], separate_map_node.inputs['Image'])
+ node_tree.links.new(separate_map_node.outputs['R'], combine_map_node.inputs['R'])
+ node_tree.links.new(separate_map_node.outputs['B'], combine_map_node.inputs['B'])
+ node_tree.links.new(separate_map_node.outputs['G'], invert_map_node.inputs['Color'])
+ node_tree.links.new(invert_map_node.outputs['Color'], combine_map_node.inputs['G'])
+ node_tree.links.new(combine_map_node.outputs['Image'], normal_map_node.inputs['Color'])
+ else:
+ node_tree.links.new(texture_node.outputs['Color'], normal_map_node.inputs['Color'])
+ node_tree.links.new(normal_map_node.outputs['Normal'], principled_node.inputs['Normal'])
+
+ if displacement_texture_path != "":
+ texture_node = create_texture_node(node_tree, 'displacement', displacement_texture_path, False)
+ node_tree.links.new(mapping_node.outputs['Vector'], texture_node.inputs['Vector'])
+ node_tree.links.new(texture_node.outputs['Color'], output_node.inputs['Displacement'])
+
+ arrange_nodes(node_tree, use_current_layout_as_initial_guess=False)
+
+
+
+def build_pbr_textured_nodes_from_name(material_name: str,
+ texture_path: dict,
+ scale: Tuple[float, float, float] = (1.0, 1.0, 1.0),
+ is_cc0: bool = True,
+ ) -> bpy.types.Material:
+ new_material = bpy.data.materials.new(material_name)
+ new_material.use_nodes = True
+ clean_nodes(new_material.node_tree.nodes)
+
+ build_pbr_textured_nodes(new_material.node_tree,
+ color_texture_path=texture_path["color"],
+ metallic_texture_path=texture_path["metallic"],
+ roughness_texture_path=texture_path["roughness"],
+ normal_texture_path=texture_path["normal"],
+ displacement_texture_path=texture_path["displacement"],
+ ambient_occlusion_texture_path=texture_path["ambient_occlusion"],
+ scale=scale,
+ is_cc0=is_cc0)
+
+ return new_material
+
+
+################################################################################
+# Node Arrange
+################################################################################
+
+def arrange_nodes(node_tree: bpy.types.NodeTree,
+ use_current_layout_as_initial_guess: bool = False,
+ fix_horizontal_location: bool = True,
+ fix_vertical_location: bool = True,
+ fix_overlaps: bool = True,
+ verbose: bool = False) -> None:
+ max_num_iters = 2000
+ epsilon = 1e-05
+ target_space = 50.0
+
+ second_stage = False
+
+ if not use_current_layout_as_initial_guess:
+ for node in node_tree.nodes:
+ node.location = (0.0, 0.0)
+
+ if verbose:
+ print("-----------------")
+ print("Target nodes:")
+ for node in node_tree.nodes:
+ print("- " + node.name)
+
+ # In the first stage, expand nodes overly
+ target_space *= 2.0
+
+ # Gauss-Seidel-style iterations
+ previous_squared_deltas_sum = sys.float_info.max
+ for i in range(max_num_iters):
+ squared_deltas_sum = 0.0
+
+ if fix_horizontal_location:
+ for link in node_tree.links:
+ k = 0.9 if not second_stage else 0.5
+ threshold_factor = 2.0
+
+ x_from = link.from_node.location[0]
+ x_to = link.to_node.location[0]
+ w_from = link.from_node.width
+ signed_space = x_to - x_from - w_from
+ C = signed_space - target_space
+ grad_C_x_from = -1.0
+ grad_C_x_to = 1.0
+
+ # Skip if the distance is sufficiently large
+ if C >= target_space * threshold_factor:
+ continue
+
+ lagrange = C / (grad_C_x_from * grad_C_x_from + grad_C_x_to * grad_C_x_to)
+ delta_x_from = -lagrange * grad_C_x_from
+ delta_x_to = -lagrange * grad_C_x_to
+
+ link.from_node.location[0] += k * delta_x_from
+ link.to_node.location[0] += k * delta_x_to
+
+ squared_deltas_sum += k * k * (delta_x_from * delta_x_from + delta_x_to * delta_x_to)
+
+ if fix_vertical_location:
+ k = 0.5 if not second_stage else 0.05
+ socket_offset = 20.0
+
+ def get_from_socket_index(node, node_socket):
+ for i in range(len(node.outputs)):
+ if node.outputs[i] == node_socket:
+ return i
+ assert False
+
+ def get_to_socket_index(node, node_socket):
+ for i in range(len(node.inputs)):
+ if node.inputs[i] == node_socket:
+ return i
+ assert False
+
+ for link in node_tree.links:
+ from_socket_index = get_from_socket_index(link.from_node, link.from_socket)
+ to_socket_index = get_to_socket_index(link.to_node, link.to_socket)
+ y_from = link.from_node.location[1] - socket_offset * from_socket_index
+ y_to = link.to_node.location[1] - socket_offset * to_socket_index
+ C = y_from - y_to
+ grad_C_y_from = 1.0
+ grad_C_y_to = -1.0
+ lagrange = C / (grad_C_y_from * grad_C_y_from + grad_C_y_to * grad_C_y_to)
+ delta_y_from = -lagrange * grad_C_y_from
+ delta_y_to = -lagrange * grad_C_y_to
+
+ link.from_node.location[1] += k * delta_y_from
+ link.to_node.location[1] += k * delta_y_to
+
+ squared_deltas_sum += k * k * (delta_y_from * delta_y_from + delta_y_to * delta_y_to)
+
+ if fix_overlaps and second_stage:
+ k = 0.9
+ margin = 0.5 * target_space
+
+ # Examine all node pairs
+ for node_1 in node_tree.nodes:
+ for node_2 in node_tree.nodes:
+ if node_1 == node_2:
+ continue
+
+ x_1 = node_1.location[0]
+ x_2 = node_2.location[0]
+ w_1 = node_1.width
+ w_2 = node_2.width
+ cx_1 = x_1 + 0.5 * w_1
+ cx_2 = x_2 + 0.5 * w_2
+ rx_1 = 0.5 * w_1 + margin
+ rx_2 = 0.5 * w_2 + margin
+
+ # Note: "dimensions" and "height" may not be correct depending on the situation
+ def get_height(node):
+ if node.dimensions.y > epsilon:
+ # Note: node.dimensions.y seems to store twice the value of node.height
+ return node.dimensions.y / 2.0
+ elif math.fabs(node.height - 100.0) > epsilon:
+ return node.height
+ else:
+ return 200.0
+
+ y_1 = node_1.location[1]
+ y_2 = node_2.location[1]
+ h_1 = get_height(node_1)
+ h_2 = get_height(node_2)
+ cy_1 = y_1 - 0.5 * h_1
+ cy_2 = y_2 - 0.5 * h_2
+ ry_1 = 0.5 * h_1 + margin
+ ry_2 = 0.5 * h_2 + margin
+
+ C_x = math.fabs(cx_1 - cx_2) - (rx_1 + rx_2)
+ C_y = math.fabs(cy_1 - cy_2) - (ry_1 + ry_2)
+
+ # If no collision, just skip
+ if C_x >= 0.0 or C_y >= 0.0:
+ continue
+
+ # Solve collision for the "easier" direction
+ if C_x > C_y:
+ grad_C_x_1 = 1.0 if cx_1 - cx_2 >= 0.0 else -1.0
+ grad_C_x_2 = -1.0 if cx_1 - cx_2 >= 0.0 else 1.0
+ lagrange = C_x / (grad_C_x_1 * grad_C_x_1 + grad_C_x_2 * grad_C_x_2)
+ delta_x_1 = -lagrange * grad_C_x_1
+ delta_x_2 = -lagrange * grad_C_x_2
+
+ node_1.location[0] += k * delta_x_1
+ node_2.location[0] += k * delta_x_2
+
+ squared_deltas_sum += k * k * (delta_x_1 * delta_x_1 + delta_x_2 * delta_x_2)
+ else:
+ grad_C_y_1 = 1.0 if cy_1 - cy_2 >= 0.0 else -1.0
+ grad_C_y_2 = -1.0 if cy_1 - cy_2 >= 0.0 else 1.0
+ lagrange = C_y / (grad_C_y_1 * grad_C_y_1 + grad_C_y_2 * grad_C_y_2)
+ delta_y_1 = -lagrange * grad_C_y_1
+ delta_y_2 = -lagrange * grad_C_y_2
+
+ node_1.location[1] += k * delta_y_1
+ node_2.location[1] += k * delta_y_2
+
+ squared_deltas_sum += k * k * (delta_y_1 * delta_y_1 + delta_y_2 * delta_y_2)
+
+ if verbose:
+ print("Iteration #" + str(i) + ": " + str(previous_squared_deltas_sum - squared_deltas_sum))
+
+ # Check the termination conditiion
+ if math.fabs(previous_squared_deltas_sum - squared_deltas_sum) < epsilon:
+ if second_stage:
+ break
+ else:
+ target_space = 0.5 * target_space
+ second_stage = True
+
+ previous_squared_deltas_sum = squared_deltas_sum
+
+
diff --git a/gibson2/utils/data_utils/blender_utils/utils.py b/gibson2/utils/data_utils/blender_utils/utils.py
new file mode 100644
index 000000000..1bf15f529
--- /dev/null
+++ b/gibson2/utils/data_utils/blender_utils/utils.py
@@ -0,0 +1,585 @@
+import bpy
+import os
+import sys
+import glob
+import xml.etree.ElementTree as ET
+sys.path.append(os.path.dirname(os.path.abspath(__file__)))
+from material_util import clean_nodes,build_pbr_textured_nodes_from_name,create_empty_image
+from math import *
+from mathutils import *
+from collections import defaultdict
+import json
+from os import close, dup, O_WRONLY
+
+
+# https://blender.stackexchange.com/questions/5210/pointing-the-camera-in-a-particular-direction-programmatically
+def look_at(obj_camera, point):
+ if not isinstance(point, Vector):
+ point = Vector(point)
+ loc_camera = obj_camera.location
+ direction = point - loc_camera
+ # point the cameras '-Z' and use its 'Y' as up
+ rot_quat = direction.to_track_quat('-Z', 'Y')
+ # assume we're using euler rotation
+ obj_camera.rotation_euler = rot_quat.to_euler()
+
+class redirect_output():
+ def __init__(self):
+ logfile = '/tmp/blender_command.log'
+ with open(logfile, 'a') as f:
+ f.close()
+ self.old = os.dup(1)
+ sys.stdout.flush()
+ os.close(1)
+ os.open(logfile, os.O_WRONLY)
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_value, exc_traceback):
+ os.close(1)
+ os.dup(self.old)
+ os.close(self.old)
+
+def setup_cycles(samples=2048):
+ bpy.context.scene.render.engine = 'CYCLES'
+ bpy.context.scene.cycles.device = 'GPU'
+ bpy.context.scene.cycles.ao_bounces = 0
+ bpy.context.scene.cycles.ao_bounces_render = 0
+ bpy.context.scene.cycles.diffuse_bounces = 3
+ bpy.context.scene.cycles.glossy_bounces = 4
+ bpy.context.scene.cycles.max_bounces = 6
+ bpy.context.scene.cycles.min_light_bounces = 0
+ bpy.context.scene.cycles.min_transparent_bounces = 0
+ bpy.context.scene.cycles.transmission_bounces = 4
+ bpy.context.scene.cycles.transparent_max_bounces = 3
+ bpy.context.scene.cycles.volume_bounces = 0
+ bpy.context.scene.render.tile_x = 200
+ bpy.context.scene.render.tile_y = 200
+ bpy.context.scene.cycles.samples = samples
+
+def setup_resolution(x=1920,y=1080):
+ bpy.context.scene.render.resolution_x = x
+ bpy.context.scene.render.resolution_y = y
+
+def bake_model(mat_dir, channels,
+ objects=None, overwrite=False,
+ set_default_samples=True):
+
+ if objects is None:
+ for on in bpy.context.scene.objects.keys():
+ obj = bpy.context.scene.objects[on]
+ obj.select_set(True)
+ bpy.ops.object.select_all(action='SELECT')
+ else:
+ for obj in objects:
+ obj.select_set(True)
+
+ bpy.context.scene.render.engine = 'CYCLES'
+ bpy.context.scene.cycles.device = 'GPU'
+ if set_default_samples:
+ setup_cycles()
+
+ c = 'COMBINED'
+ if c in channels:
+ print('baking combined...')
+ if overwrite or not os.path.isfile('{}/{}.png'.format(mat_dir, c)):
+ # if not os.path.isfile('{}/{}.png'.format(mat_dir, c)):
+ if c in bpy.data.images:
+ bpy.data.images.remove(bpy.data.images[c])
+ res,margin = channels[c]
+ for mat in bpy.data.materials:
+ node = create_empty_image(mat.node_tree, c, False, dim=(res,res))
+ node.select = True
+ mat.node_tree.nodes.active = node
+ with redirect_output():
+ bpy.ops.object.bake(type=c,
+ pass_filter={'AO', 'EMIT', 'DIRECT',
+ 'INDIRECT', 'COLOR', 'DIFFUSE',
+ 'GLOSSY', 'TRANSMISSION'},
+ margin=margin)
+ bpy.data.images[c].filepath_raw = '{}/{}.png'.format(mat_dir, c)
+ bpy.data.images[c].file_format = 'PNG'
+ bpy.data.images[c].save()
+
+ c = 'ROUGHNESS'
+ if c in channels:
+ print('baking roughness...')
+ if overwrite or not os.path.isfile('{}/{}.png'.format(mat_dir, c)):
+ # if not os.path.isfile('{}/{}.png'.format(mat_dir, c)):
+ if c in bpy.data.images:
+ bpy.data.images.remove(bpy.data.images[c])
+ res,margin = channels[c]
+ for mat in bpy.data.materials:
+ node = create_empty_image(mat.node_tree, c, False, dim=(res,res))
+ node.select = True
+ mat.node_tree.nodes.active = node
+ with redirect_output():
+ bpy.ops.object.bake(type=c, margin=margin)
+ bpy.data.images[c].filepath_raw = '{}/{}.png'.format(mat_dir, c)
+ bpy.data.images[c].file_format = 'PNG'
+ bpy.data.images[c].save()
+
+ #######################################
+ # Re-wire metallic for baking
+ #######################################
+ c = 'METALLIC'
+ if c in channels:
+ print('baking metallic...')
+ if overwrite or not os.path.isfile('{}/{}.png'.format(mat_dir, c)):
+ if c in bpy.data.images:
+ bpy.data.images.remove(bpy.data.images[c])
+ res,margin = channels[c]
+ for mat in bpy.data.materials:
+ principle_bsdf = mat.node_tree.nodes['Principled BSDF']
+ metallic_port = principle_bsdf.inputs['Metallic']
+ if len(metallic_port.links) == 0:
+ metallic_node = None
+ metallic_val = metallic_port.default_value
+ else:
+ metallic_node= metallic_port.links[0].from_node
+ output = metallic_node.outputs['Color']
+ for l in output.links :
+ mat.node_tree.links.remove(l)
+ roughness_port = principle_bsdf.inputs['Roughness']
+ if len(roughness_port.links) == 0:
+ roughness_node = None
+ roughness_val = roughness_port.default_value
+ else:
+ roughness_node = roughness_port.links[0].from_node
+ output = roughness_node.outputs['Color']
+ for l in output.links :
+ mat.node_tree.links.remove(l)
+ if metallic_node is None:
+ roughness_port.default_value = metallic_val
+ else:
+ mat.node_tree.links.new(metallic_node.outputs['Color'], roughness_port)
+
+ for mat in bpy.data.materials:
+ node = create_empty_image(mat.node_tree, c, False, dim=(res,res))
+ node.select = True
+ mat.node_tree.nodes.active = node
+ with redirect_output():
+ bpy.ops.object.bake(type='ROUGHNESS', margin=margin)
+ bpy.data.images[c].filepath_raw = '{}/{}.png'.format(mat_dir, c)
+ bpy.data.images[c].file_format = 'PNG'
+ bpy.data.images[c].save()
+
+ #######################################
+ # Dis-connect Metallic for baking
+ #######################################
+ if 'DIFFUSE' in channels or 'NORMAL' in channels:
+ for mat in bpy.data.materials:
+ if 'Principled BSDF' not in mat.node_tree.nodes:
+ continue
+ principle_bsdf = mat.node_tree.nodes['Principled BSDF']
+ metallic_port = principle_bsdf.inputs['Metallic']
+ if len(metallic_port.links) != 0:
+ metallic_node= metallic_port.links[0].from_node
+ output = metallic_node.outputs['Color']
+ for l in output.links :
+ mat.node_tree.links.remove(l)
+ metallic_port.default_value = 0
+
+ roughness_port = principle_bsdf.inputs['Roughness']
+ if len(roughness_port.links) != 0:
+ roughness_node = roughness_port.links[0].from_node
+ output = roughness_node.outputs['Color']
+ for l in output.links :
+ mat.node_tree.links.remove(l)
+ roughness_port.default_value = 0.5
+
+
+ c = 'DIFFUSE'
+ if c in channels:
+ print('baking diffuse...')
+ if overwrite or not os.path.isfile('{}/{}.png'.format(mat_dir, c)):
+ if c in bpy.data.images:
+ bpy.data.images.remove(bpy.data.images[c])
+ res,margin = channels[c]
+ for mat in bpy.data.materials:
+ node = create_empty_image(mat.node_tree, c, True, dim=(res,res))
+ node.select = True
+ mat.node_tree.nodes.active = node
+ with redirect_output():
+ bpy.ops.object.bake(type=c, pass_filter={'COLOR'},
+ margin=margin)
+ bpy.data.images[c].filepath_raw = '{}/{}.png'.format(mat_dir, c)
+ bpy.data.images[c].file_format = 'PNG'
+ bpy.data.images[c].save()
+
+ #######################################
+ # Re-wire normal for baking
+ #######################################
+ c = 'NORMAL'
+ if c in channels:
+ print('baking normal...')
+ if overwrite or not os.path.isfile('{}/{}.png'.format(mat_dir, c)):
+ if c in bpy.data.images:
+ bpy.data.images.remove(bpy.data.images[c])
+ res,margin = channels[c]
+ for mat in bpy.data.materials:
+ if 'Principled BSDF' not in mat.node_tree.nodes:
+ continue
+ principle_bsdf = mat.node_tree.nodes['Principled BSDF']
+ diffuse_port = principle_bsdf.inputs['Base Color']
+ for l in diffuse_port.links :
+ mat.node_tree.links.remove(l)
+ normal_port = principle_bsdf.inputs['Normal']
+ if len(normal_port.links) == 0:
+ normal_node= None
+ normal_val = (0.212, 0.212, 1., 1.)
+ else:
+ normal_node = normal_port.links[0].from_node.inputs['Color'].links[0].from_node
+ normal_node.image.colorspace_settings.name = 'sRGB'
+ output = normal_node.outputs['Color']
+ for l in output.links :
+ mat.node_tree.links.remove(l)
+ if normal_node is None:
+ diffuse_port.default_value = normal_val
+ else:
+ mat.node_tree.links.new(normal_node.outputs['Color'], diffuse_port)
+ for mat in bpy.data.materials:
+ node = create_empty_image(mat.node_tree, c, True,
+ dim=(res,res))
+ node.select = True
+ mat.node_tree.nodes.active = node
+ with redirect_output():
+ bpy.ops.object.bake(type='DIFFUSE', pass_filter={'COLOR'},
+ margin=margin)
+ bpy.data.images[c].filepath_raw = '{}/{}.png'.format(mat_dir, c)
+ bpy.data.images[c].file_format = 'PNG'
+ bpy.data.images[c].save()
+
+
+def import_ig_scene_structure(scene_dir, import_mat=False):
+ obj_dir = os.path.join(scene_dir,
+ 'shape', 'visual')
+ for f in os.listdir(obj_dir):
+ if not f.endswith('.obj'):
+ continue
+ element_name = '_'.join(os.path.splitext(f)[0].split('_')[:-1])
+ bpy.ops.object.select_all(action='DESELECT')
+ bpy.ops.import_scene.obj(
+ filepath = os.path.join(obj_dir, f),
+ axis_up='Z', axis_forward='X',
+ use_edges = True,
+ use_smooth_groups = True,
+ use_split_objects = False,
+ use_split_groups = False,
+ use_groups_as_vgroups = False,
+ use_image_search = False,
+ split_mode = 'OFF')
+ imported = bpy.context.selected_objects[:]
+ for obj in imported:
+ if obj.hide_get():
+ obj.hide_set(False)
+ ms = obj.data.materials
+ for _ in range(len(ms)):
+ ms.pop()
+ if import_mat:
+ mat = build_pbr_textured_nodes_from_name(element_name,
+ get_ig_scene_texture_paths(scene_dir, element_name),
+ is_cc0=False)
+ for obj in imported:
+ obj.data.materials.append(mat)
+ clean_unused()
+
+
+def import_obj_folder(object_name, obj_dir,up='Z',forward='X'):
+ scene_collection = bpy.context.view_layer.layer_collection
+ bpy.context.view_layer.active_layer_collection = scene_collection
+ bpy.ops.object.select_all(action='DESELECT')
+ collection = bpy.data.collections.new(object_name)
+ bpy.context.scene.collection.children.link(collection)
+ with redirect_output():
+ for o in os.listdir(obj_dir):
+ if os.path.splitext(o)[-1] != '.obj':
+ continue
+ bpy.ops.import_scene.obj(
+ filepath = os.path.join(obj_dir, o),
+ axis_up = up,
+ axis_forward = forward,
+ use_edges = True,
+ use_smooth_groups = True,
+ use_split_objects = False,
+ use_split_groups = False,
+ use_groups_as_vgroups = False,
+ use_image_search = False,
+ split_mode = 'OFF')
+ imported = bpy.context.selected_objects[:]
+ for obj in imported:
+ collection.objects.link(obj)
+ bpy.context.scene.collection.objects.unlink(obj)
+ return collection
+
+def import_ig_object(object_root,
+ import_mat=False,
+ scale=(1.,1.,1.),
+ loc=(0.,0.,0.), orn=(0.,0.,0.)):
+ scene_collection = bpy.context.view_layer.layer_collection
+ bpy.context.view_layer.active_layer_collection = scene_collection
+ object_root = os.path.normpath(object_root)
+ object_name = '_'.join(object_root.split('_')[-2:])
+ obj_dir = os.path.join(object_root, 'shape', 'visual')
+ collection = import_obj_folder(object_name, obj_dir)
+ for obj in collection.objects:
+ obj.scale = scale
+ obj.rotation_euler = orn
+ obj.location = loc
+ if obj.hide_get():
+ obj.hide_set(False)
+ ms = obj.data.materials
+ for _ in range(len(ms)):
+ ms.pop()
+ # obj.data.materials.append(mat)
+ clean_unused()
+ if not import_mat:
+ return
+ mat = build_pbr_textured_nodes_from_name('obj_mat',
+ get_ig_texture_paths(object_root),
+ is_cc0=False)
+ # for obj in bpy.context.selected_objects[:]:
+ for obj in collection.objects:
+ # obj = bpy.context.scene.objects[on]
+ obj.data.materials.append(mat)
+ bpy.ops.object.select_all(action='DESELECT')
+
+def export_obj_folder(save_dir, skip_empty=True, save_material=False,
+ up='Z', forward='X'):
+ with redirect_output():
+ for on in bpy.context.scene.objects.keys():
+ obj = bpy.context.scene.objects[on]
+ if obj.type != 'MESH':
+ continue
+ if obj.hide_get():
+ obj.hide_set(False)
+ if skip_empty:
+ me = obj.data
+ v,e,f = len(me.vertices),len(me.edges),len(me.polygons)
+ if v == 0 or e == 0 or f ==0:
+ continue
+ bpy.context.view_layer.objects.active = obj
+ obj.select_set(True)
+ save_path = os.path.join(save_dir, "{}.obj".format(on))
+ bpy.ops.export_scene.obj(filepath=save_path,
+ use_selection=True,
+ axis_up=up, axis_forward=forward,
+ use_materials=save_material,
+ use_triangles=True,
+ path_mode="COPY")
+ obj.select_set(False)
+
+def export_ig_object(model_root,
+ save_dir='shape/visual',
+ skip_empty=False,
+ save_material=False):
+ obj_dir= os.path.join(model_root, save_dir)
+ os.makedirs(obj_dir, exist_ok=True)
+ export_obj_folder(obj_dir, skip_empty=skip_empty,
+ save_material=save_material)
+
+def get_ig_scene_texture_paths(scene_root, element_name):
+ def get_file_path(type):
+ files = glob.glob(glob.escape(scene_root) +
+ "/material/{}/*_{}.*".format(element_name, type))
+ return files[0] if files else ""
+
+ texture_paths = {}
+ texture_paths["color"] = get_file_path("col")
+ texture_paths["metallic"] = get_file_path("met")
+ texture_paths["roughness"] = get_file_path("rgh")
+ texture_paths["normal"] = get_file_path("nrm")
+ texture_paths["displacement"] = get_file_path("disp")
+ texture_paths["ambient_occlusion"] = get_file_path("AO")
+ return texture_paths
+
+def get_ig_texture_paths(object_root):
+ def get_file_path(type):
+ return os.path.join(object_root, 'material', '{}.png'.format(type))
+ texture_paths = {}
+ texture_paths["color"] = get_file_path("DIFFUSE")
+ texture_paths["metallic"] = get_file_path("METALLIC")
+ texture_paths["roughness"] = get_file_path("ROUGHNESS")
+ texture_paths["normal"] = get_file_path("NORMAL")
+ texture_paths["displacement"] = ""
+ texture_paths["ambient_occlusion"] = ""
+ return texture_paths
+
+
+def clean_unused():
+ for block in bpy.data.meshes:
+ if block.users == 0:
+ bpy.data.meshes.remove(block)
+
+ for block in bpy.data.materials:
+ if block.users == 0:
+ bpy.data.materials.remove(block)
+
+ for block in bpy.data.textures:
+ if block.users == 0:
+ bpy.data.textures.remove(block)
+
+ for block in bpy.data.images:
+ if block.users == 0:
+ bpy.data.images.remove(block)
+
+
+def generate_light(location, energy, name):
+ bpy.ops.mesh.primitive_torus_add()
+ shape = bpy.context.active_object
+ shape.location = location
+ shape.scale = (0.1,0.1,0.03)
+ new_material = bpy.data.materials.new("rim_light")
+ new_material.use_nodes = True
+ clean_nodes(new_material.node_tree.nodes)
+ node_tree = new_material.node_tree
+ output_node = node_tree.nodes.new(type='ShaderNodeOutputMaterial')
+ principled_node = node_tree.nodes.new(type='ShaderNodeBsdfTranslucent')
+ principled_node.name = 'BSDF'
+ node_tree.links.new(principled_node.outputs['BSDF'], output_node.inputs['Surface'])
+ principled_node.inputs['Color'].default_value = (1.0,1.0,1.0,1.0)
+ ms = shape.data.materials
+ for _ in range(len(ms)):
+ ms.pop()
+ shape.data.materials.append(new_material)
+
+ # light_data = bpy.data.lights.new(name="Sample", type='AREA')
+ type = 'POINT'
+ light_data = bpy.data.lights.new(name="Sample", type=type)
+ light_data.energy = energy
+ if type == 'POINT':
+ light_data.shadow_soft_size = 0.15
+ elif type == 'AREA':
+ light_data.size = 0.2
+ light_data.shape = 'DISK'
+
+ light_object = bpy.data.objects.new(name=name, object_data=light_data)
+ bpy.context.collection.objects.link(light_object)
+ bpy.context.view_layer.objects.active = light_object
+ light_object.location = location
+
+ dg = bpy.context.evaluated_depsgraph_get()
+ dg.update()
+
+def set_up_pano_cam():
+ setup_cycles(samples=512)
+
+ # create the camera object
+ cam = bpy.data.cameras.new("Pano Cam")
+ cam_obj = bpy.data.objects.new("Pano Cam", cam)
+ cam_obj.data.type = 'PANO'
+ cam_obj.data.cycles.panorama_type = 'EQUIRECTANGULAR'
+ cam_z = 1.5
+ cam_obj.location = (0.,0.,cam_z)
+ cam_rot = (pi / 2.,0.,0.)
+ cam_obj.rotation_euler = cam_rot
+
+ bpy.context.scene.collection.objects.link(cam_obj)
+ bpy.context.scene.camera = cam_obj
+
+ bpy.context.scene.render.resolution_x = 2048
+ bpy.context.scene.render.resolution_y = 1024
+ bpy.context.scene.render.resolution_percentage = 100
+ bpy.context.scene.render.image_settings.file_format = 'HDR'
+ return cam_obj
+
+def render_light_probe(cam, xy_loc, save_to):
+ # pngpath = "{}.png".format(os.path.splitext(blend_path)[0])
+ x,y = xy_loc
+ z = cam.location[-1]
+ cam.location = (x,y,z)
+ bpy.data.scenes['Scene'].render.filepath = save_to
+ with redirect_output():
+ bpy.ops.render.render( write_still=True)
+
+def set_up_birds_eye_ortho_cam(scene_length):
+ bpy.context.scene.render.engine = 'BLENDER_WORKBENCH'
+ bpy.data.scenes['Scene'].display.shading.light = 'FLAT'
+ bpy.data.scenes['Scene'].display.render_aa="OFF"
+
+ # create the camera object
+ cam1 = bpy.data.cameras.new("Bird-Eye Cam")
+ cam1.lens = 16
+ cam_obj1 = bpy.data.objects.new("Bird-Eye Cam", cam1)
+ cam_obj1.data.type = 'ORTHO'
+ cam_z = 10.
+ cam_obj1.location = (0.,0.,cam_z)
+ cam_rot = (0.,0.,0.)
+ cam_obj1.rotation_euler = cam_rot
+
+ bpy.context.scene.collection.objects.link(cam_obj1)
+ bpy.context.scene.camera = cam_obj1
+
+ cam_obj1.data.ortho_scale = scene_length
+ bpy.context.scene.render.resolution_x = 100 * scene_length
+ bpy.context.scene.render.resolution_y = 100 * scene_length
+ bpy.context.scene.render.resolution_percentage = 100
+ bpy.context.scene.render.dither_intensity = 0.
+ return cam_obj1
+
+def update_range(cam, floor_range):
+ cam_z = cam.location[-1]
+ cam.data.clip_start = cam_z - floor_range[1]
+ cam.data.clip_end = cam_z - floor_range[0]
+
+def import_gibson_v1_rooms(room_dir):
+ objs = [l for l in os.listdir(room_dir)
+ if os.path.splitext(l)[-1] == '.obj']
+ for o in objs:
+ bpy.ops.import_scene.obj(
+ filepath = os.path.join(room_dir, o),
+ use_edges = True,
+ use_smooth_groups = True,
+ use_split_objects = False,
+ use_split_groups = False,
+ use_groups_as_vgroups = False,
+ use_image_search = False,
+ split_mode = 'OFF')
+
+
+def import_ig_scene_wall(scene_dir):
+ wall_obj_path = os.path.join(scene_dir,
+ 'shape', 'visual', 'wall_vm.obj')
+ bpy.ops.import_scene.obj(
+ filepath = wall_obj_path,
+ axis_up='Z', axis_forward='Y',
+ use_edges = True,
+ use_smooth_groups = True,
+ use_split_objects = False,
+ use_split_groups = False,
+ use_groups_as_vgroups = False,
+ use_image_search = False,
+ split_mode = 'OFF')
+
+def set_up_render_with_background_color(color=(1.0,1.0,1.0)):
+ bpy.context.scene.render.film_transparent = True
+
+ # switch on nodes and get reference
+ bpy.context.scene.use_nodes = True
+ tree = bpy.context.scene.node_tree
+
+ # clear default nodes
+ for node in tree.nodes:
+ tree.nodes.remove(node)
+
+ # create input image node
+ in_node = tree.nodes.new(type='CompositorNodeRLayers')
+ in_node.location = -400,0
+
+ #create mix node
+ mix_node = tree.nodes.new(type='CompositorNodeMixRGB')
+ mix_node.location = 400,0
+ mix_node.inputs[1].default_value = (*color, 1.)
+
+ # create output node
+ out_node = tree.nodes.new('CompositorNodeComposite')
+ out_node.location = 800,0
+
+ # link nodes
+ tree.links.new(in_node.outputs[0], mix_node.inputs[2])
+ tree.links.new(mix_node.outputs[0], out_node.inputs[0])
+ tree.links.new(in_node.outputs[1], mix_node.inputs[0])
+
+ # with redirect_output():
+ # bpy.ops.render.render( write_still=True)
diff --git a/gibson2/utils/data_utils/blender_utils/vhacd b/gibson2/utils/data_utils/blender_utils/vhacd
new file mode 100755
index 000000000..83510e83e
Binary files /dev/null and b/gibson2/utils/data_utils/blender_utils/vhacd differ
diff --git a/gibson2/utils/data_utils/data.json b/gibson2/utils/data_utils/data.json
deleted file mode 100644
index cd88c18fc..000000000
--- a/gibson2/utils/data_utils/data.json
+++ /dev/null
@@ -1,8582 +0,0 @@
-[
- {
- "id": "Adrian",
- "name": "model-546",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 393.795,
- "floor": 4,
- "navigation_complexity": 3.285,
- "room": 12,
- "ssa": 1.66
- }
- },
- {
- "id": "Airport",
- "name": "model-190",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 581.725,
- "floor": 4,
- "navigation_complexity": 4.294,
- "room": 17,
- "ssa": 1.091
- }
- },
- {
- "id": "Akiak",
- "name": "model-294",
- "split_full": "none",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 123.683,
- "floor": 1,
- "navigation_complexity": 1.213,
- "room": 3,
- "ssa": 1.227
- }
- },
- {
- "id": "Albertville",
- "name": "model-117",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 266.125,
- "floor": 4,
- "navigation_complexity": 3.737,
- "room": 16,
- "ssa": 1.297
- }
- },
- {
- "id": "Aldine",
- "name": "model-417",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 287.108,
- "floor": 3,
- "navigation_complexity": 5.723,
- "room": 14,
- "ssa": 1.346
- }
- },
- {
- "id": "Aldrich",
- "name": "model-76",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 915.082,
- "floor": 4,
- "navigation_complexity": 4.016,
- "room": 15,
- "ssa": 1.203
- }
- },
- {
- "id": "Alfred",
- "name": "model-566",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 850.512,
- "floor": 3,
- "navigation_complexity": 2.691,
- "room": 13,
- "ssa": 1.946
- }
- },
- {
- "id": "Allensville",
- "name": "model-489",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 80.306,
- "floor": 1,
- "navigation_complexity": 5.35,
- "room": 7,
- "ssa": 0.885
- }
- },
- {
- "id": "Almena",
- "name": "model-519",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 170.554,
- "floor": 1,
- "navigation_complexity": 3.88,
- "room": 9,
- "ssa": 1.536
- }
- },
- {
- "id": "Almota",
- "name": "model-313",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 414.056,
- "floor": 4,
- "navigation_complexity": 1.066,
- "room": 17,
- "ssa": 0.785
- }
- },
- {
- "id": "Aloha",
- "name": "model-8",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 111.735,
- "floor": 2,
- "navigation_complexity": 3.723,
- "room": 8,
- "ssa": 1.741
- }
- },
- {
- "id": "Alstown",
- "name": "model-97",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 426.819,
- "floor": 4,
- "navigation_complexity": 1.43,
- "room": 18,
- "ssa": 1.372
- }
- },
- {
- "id": "American",
- "name": "model-293",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 583.318,
- "floor": 3,
- "navigation_complexity": 1.93,
- "room": 20,
- "ssa": 1.227
- }
- },
- {
- "id": "Anaheim",
- "name": "model-479",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 299.527,
- "floor": 4,
- "navigation_complexity": 2.755,
- "room": 18,
- "ssa": 1.128
- }
- },
- {
- "id": "Ancor",
- "name": "model-216",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 159.084,
- "floor": 4,
- "navigation_complexity": 1.858,
- "room": 15,
- "ssa": 1.992
- }
- },
- {
- "id": "Andover",
- "name": "model-130",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 674.595,
- "floor": 4,
- "navigation_complexity": 3.514,
- "room": 19,
- "ssa": 1.208
- }
- },
- {
- "id": "Angiola",
- "name": "model-443",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 18.153,
- "floor": 1,
- "navigation_complexity": 1.264,
- "room": 3,
- "ssa": 1.457
- }
- },
- {
- "id": "Annawan",
- "name": "model-402",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 75.039,
- "floor": 1,
- "navigation_complexity": 3.68,
- "room": 7,
- "ssa": 0.872
- }
- },
- {
- "id": "Annona",
- "name": "model-243",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 359.046,
- "floor": 3,
- "navigation_complexity": 2.193,
- "room": 16,
- "ssa": 1.105
- }
- },
- {
- "id": "Anthoston",
- "name": "model-146",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 477.51,
- "floor": 1,
- "navigation_complexity": 4.809,
- "room": 16,
- "ssa": 1.561
- }
- },
- {
- "id": "Ackermanville",
- "name": "model-123",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 499.522,
- "floor": 1,
- "navigation_complexity": 2.943,
- "room": 1,
- "ssa": 1.187
- }
- },
- {
- "id": "Adairsville",
- "name": "model-17",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 232.438,
- "floor": 5,
- "navigation_complexity": 2.201,
- "room": 17,
- "ssa": 1.84
- }
- },
- {
- "id": "Apache",
- "name": "model-543",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1024.699,
- "floor": 4,
- "navigation_complexity": 6.585,
- "room": 34,
- "ssa": 2.011
- }
- },
- {
- "id": "Applewold",
- "name": "model-142",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 187.518,
- "floor": 4,
- "navigation_complexity": 1.054,
- "room": 12,
- "ssa": 1.87
- }
- },
- {
- "id": "Arbutus",
- "name": "model-4",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 53.595,
- "floor": 1,
- "navigation_complexity": 2.887,
- "room": 4,
- "ssa": 1.888
- }
- },
- {
- "id": "Archer",
- "name": "model-433",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 281.014,
- "floor": 4,
- "navigation_complexity": 7.749,
- "room": 26,
- "ssa": 1.704
- }
- },
- {
- "id": "Arkansaw",
- "name": "model-555",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 385.425,
- "floor": 4,
- "navigation_complexity": 2.781,
- "room": 17,
- "ssa": 1.515
- }
- },
- {
- "id": "Arona",
- "name": "model-16",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 62.098,
- "floor": 1,
- "navigation_complexity": 2.352,
- "room": 6,
- "ssa": 1.505
- }
- },
- {
- "id": "Artois",
- "name": "model-334",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 100.399,
- "floor": 1,
- "navigation_complexity": 3.039,
- "room": 5,
- "ssa": 1.432
- }
- },
- {
- "id": "Ashport",
- "name": "model-202",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 573.641,
- "floor": 3,
- "navigation_complexity": 2.345,
- "room": 17,
- "ssa": 1.275
- }
- },
- {
- "id": "Assinippi",
- "name": "model-211",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 365.543,
- "floor": 4,
- "navigation_complexity": 4.242,
- "room": 18,
- "ssa": 1.104
- }
- },
- {
- "id": "Athens",
- "name": "model-258",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 440.851,
- "floor": 4,
- "navigation_complexity": 1.335,
- "room": 17,
- "ssa": 1.574
- }
- },
- {
- "id": "Auburn",
- "name": "model-121",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 430.311,
- "floor": 1,
- "navigation_complexity": 7.277,
- "room": 25,
- "ssa": 1.62
- }
- },
- {
- "id": "Aulander",
- "name": "model-406",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 95.115,
- "floor": 2,
- "navigation_complexity": 2.058,
- "room": 8,
- "ssa": 1.209
- }
- },
- {
- "id": "Avonia",
- "name": "model-464",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 59.6,
- "floor": 1,
- "navigation_complexity": 2.311,
- "room": 2,
- "ssa": 1.337
- }
- },
- {
- "id": "Azusa",
- "name": "model-343",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 507.047,
- "floor": 3,
- "navigation_complexity": 4.327,
- "room": 14,
- "ssa": 1.647
- }
- },
- {
- "id": "Badger",
- "name": "model-422",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 144.427,
- "floor": 1,
- "navigation_complexity": 4.57,
- "room": 9,
- "ssa": 1.583
- }
- },
- {
- "id": "Ballantine",
- "name": "model-65",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1153.639,
- "floor": 3,
- "navigation_complexity": 2.892,
- "room": 23,
- "ssa": 1.7
- }
- },
- {
- "id": "Ballou",
- "name": "model-11",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 533.456,
- "floor": 3,
- "navigation_complexity": 5.531,
- "room": 19,
- "ssa": 1.91
- }
- },
- {
- "id": "Baneberry",
- "name": "model-63",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 660.51,
- "floor": 3,
- "navigation_complexity": 4.34,
- "room": 20,
- "ssa": 1.88
- }
- },
- {
- "id": "Barahona",
- "name": "model-233",
- "split_full": "none",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 57.115,
- "floor": 1,
- "navigation_complexity": 2.482,
- "room": 3,
- "ssa": 1.398
- }
- },
- {
- "id": "Barboursville",
- "name": "model-380",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 61.422,
- "floor": 1,
- "navigation_complexity": 1.931,
- "room": 4,
- "ssa": 1.375
- }
- },
- {
- "id": "Barranquitas",
- "name": "model-388",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 476.868,
- "floor": 3,
- "navigation_complexity": 1.946,
- "room": 22,
- "ssa": 1.274
- }
- },
- {
- "id": "Bautista",
- "name": "model-391",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 305.479,
- "floor": 4,
- "navigation_complexity": 1.265,
- "room": 17,
- "ssa": 0.9
- }
- },
- {
- "id": "Beach",
- "name": "model-356",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 38.23,
- "floor": 1,
- "navigation_complexity": 2.122,
- "room": 4,
- "ssa": 1.834
- }
- },
- {
- "id": "Beechwood",
- "name": "model-101",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 464.624,
- "floor": 3,
- "navigation_complexity": 8.813,
- "room": 16,
- "ssa": 1.352
- }
- },
- {
- "id": "Bellemeade",
- "name": "model-303",
- "split_full": "none",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 70.337,
- "floor": 1,
- "navigation_complexity": 1.0,
- "room": 1,
- "ssa": 1.008
- }
- },
- {
- "id": "Bellwood",
- "name": "model-403",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 657.554,
- "floor": 3,
- "navigation_complexity": 2.251,
- "room": 25,
- "ssa": 1.346
- }
- },
- {
- "id": "Belpre",
- "name": "model-474",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 584.831,
- "floor": 3,
- "navigation_complexity": 4.114,
- "room": 21,
- "ssa": 1.353
- }
- },
- {
- "id": "Benevolence",
- "name": "model-424",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 176.734,
- "floor": 4,
- "navigation_complexity": 3.2,
- "room": 11,
- "ssa": 1.353
- }
- },
- {
- "id": "Benicia",
- "name": "model-91",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 83.084,
- "floor": 1,
- "navigation_complexity": 2.169,
- "room": 6,
- "ssa": 1.03
- }
- },
- {
- "id": "Bertram",
- "name": "model-550",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 172.167,
- "floor": 1,
- "navigation_complexity": 3.29,
- "room": 10,
- "ssa": 0.698
- }
- },
- {
- "id": "Bethlehem",
- "name": "model-204",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 603.61,
- "floor": 4,
- "navigation_complexity": 1.622,
- "room": 24,
- "ssa": 1.821
- }
- },
- {
- "id": "Bettendorf",
- "name": "model-289",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 4371.903,
- "floor": 6,
- "navigation_complexity": 3.36,
- "room": 21,
- "ssa": 0.493
- }
- },
- {
- "id": "Biltmore",
- "name": "model-220",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 733.268,
- "floor": 1,
- "navigation_complexity": 2.707,
- "room": 38,
- "ssa": 1.156
- }
- },
- {
- "id": "Blackstone",
- "name": "model-331",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 228.077,
- "floor": 1,
- "navigation_complexity": 1.845,
- "room": 11,
- "ssa": 1.443
- }
- },
- {
- "id": "Blenheim",
- "name": "model-322",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 192.317,
- "floor": 2,
- "navigation_complexity": 3.54,
- "room": 7,
- "ssa": 1.68
- }
- },
- {
- "id": "Bohemia",
- "name": "model-170",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 394.14,
- "floor": 3,
- "navigation_complexity": 1.583,
- "room": 14,
- "ssa": 1.665
- }
- },
- {
- "id": "Bolton",
- "name": "model-253",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 61.868,
- "floor": 1,
- "navigation_complexity": 2.596,
- "room": 4,
- "ssa": 1.568
- }
- },
- {
- "id": "Bonesteel",
- "name": "model-193",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 272.066,
- "floor": 3,
- "navigation_complexity": 2.257,
- "room": 16,
- "ssa": 1.413
- }
- },
- {
- "id": "Bonfield",
- "name": "model-58",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 86.161,
- "floor": 1,
- "navigation_complexity": 4.318,
- "room": 6,
- "ssa": 1.229
- }
- },
- {
- "id": "Bonnie",
- "name": "model-98",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 799.666,
- "floor": 4,
- "navigation_complexity": 4.395,
- "room": 18,
- "ssa": 1.372
- }
- },
- {
- "id": "Booth",
- "name": "model-383",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 209.756,
- "floor": 4,
- "navigation_complexity": 1.149,
- "room": 17,
- "ssa": 1.212
- }
- },
- {
- "id": "Bountiful",
- "name": "model-78",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 158.824,
- "floor": 3,
- "navigation_complexity": 3.094,
- "room": 12,
- "ssa": 1.732
- }
- },
- {
- "id": "Bowlus",
- "name": "model-542",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 657.858,
- "floor": 4,
- "navigation_complexity": 2.104,
- "room": 26,
- "ssa": 1.28
- }
- },
- {
- "id": "Bowmore",
- "name": "model-523",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1067.245,
- "floor": 5,
- "navigation_complexity": 1.38,
- "room": 31,
- "ssa": 1.687
- }
- },
- {
- "id": "Branford",
- "name": "model-551",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 13.291,
- "floor": 1,
- "navigation_complexity": 1.136,
- "room": 4,
- "ssa": 1.391
- }
- },
- {
- "id": "Braxton",
- "name": "model-52",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 741.691,
- "floor": 4,
- "navigation_complexity": 3.866,
- "room": 20,
- "ssa": 1.791
- }
- },
- {
- "id": "Bremerton",
- "name": "model-57",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 122.66,
- "floor": 1,
- "navigation_complexity": 2.852,
- "room": 5,
- "ssa": 1.229
- }
- },
- {
- "id": "Brentsville",
- "name": "model-405",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 151.865,
- "floor": 1,
- "navigation_complexity": 3.072,
- "room": 10,
- "ssa": 1.209
- }
- },
- {
- "id": "Brevort",
- "name": "model-526",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 43.882,
- "floor": 1,
- "navigation_complexity": 2.915,
- "room": 5,
- "ssa": 2.061
- }
- },
- {
- "id": "Brewton",
- "name": "model-562",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 496.904,
- "floor": 3,
- "navigation_complexity": 4.949,
- "room": 14,
- "ssa": 1.02
- }
- },
- {
- "id": "Brinnon",
- "name": "model-3",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "none",
- "stats": {
- "area": 1171.902,
- "floor": 5,
- "navigation_complexity": 5.601,
- "room": 30,
- "ssa": 1.888
- }
- },
- {
- "id": "Broadwell",
- "name": "model-569",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 457.211,
- "floor": 3,
- "navigation_complexity": 3.391,
- "room": 11,
- "ssa": 1.182
- }
- },
- {
- "id": "Broseley",
- "name": "model-285",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 782.684,
- "floor": 4,
- "navigation_complexity": 4.05,
- "room": 31,
- "ssa": 1.067
- }
- },
- {
- "id": "Brown",
- "name": "model-316",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 809.315,
- "floor": 5,
- "navigation_complexity": 2.608,
- "room": 36,
- "ssa": 1.241
- }
- },
- {
- "id": "Browntown",
- "name": "model-518",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 837.527,
- "floor": 4,
- "navigation_complexity": 4.673,
- "room": 17,
- "ssa": 1.33
- }
- },
- {
- "id": "Burien",
- "name": "model-396",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 485.288,
- "floor": 4,
- "navigation_complexity": 1.747,
- "room": 24,
- "ssa": 1.491
- }
- },
- {
- "id": "Bushong",
- "name": "model-373",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 3130.477,
- "floor": 2,
- "navigation_complexity": 6.76,
- "room": 57,
- "ssa": 2.062
- }
- },
- {
- "id": "Byers",
- "name": "model-324",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 217.218,
- "floor": 4,
- "navigation_complexity": 1.693,
- "room": 17,
- "ssa": 1.203
- }
- },
- {
- "id": "Cabin",
- "name": "model-100",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 155.706,
- "floor": 1,
- "navigation_complexity": 1.0,
- "room": 9,
- "ssa": 1.027
- }
- },
- {
- "id": "Calavo",
- "name": "model-295",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 239.244,
- "floor": 1,
- "navigation_complexity": 5.611,
- "room": 15,
- "ssa": 1.593
- }
- },
- {
- "id": "Callicoon",
- "name": "model-446",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 581.598,
- "floor": 3,
- "navigation_complexity": 3.054,
- "room": 21,
- "ssa": 1.375
- }
- },
- {
- "id": "Calmar",
- "name": "model-498",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 337.188,
- "floor": 3,
- "navigation_complexity": 1.718,
- "room": 10,
- "ssa": 1.524
- }
- },
- {
- "id": "Cantwell",
- "name": "model-317",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 107.582,
- "floor": 1,
- "navigation_complexity": 1.016,
- "room": 8,
- "ssa": 1.309
- }
- },
- {
- "id": "Capistrano",
- "name": "model-226",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 261.927,
- "floor": 3,
- "navigation_complexity": 1.145,
- "room": 12,
- "ssa": 1.526
- }
- },
- {
- "id": "Carneiro",
- "name": "model-397",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 130.541,
- "floor": 3,
- "navigation_complexity": 5.664,
- "room": 2,
- "ssa": 1.764
- }
- },
- {
- "id": "Carpendale",
- "name": "model-451",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 225.156,
- "floor": 1,
- "navigation_complexity": 3.424,
- "room": 13,
- "ssa": 1.415
- }
- },
- {
- "id": "Carpio",
- "name": "model-82",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 70.216,
- "floor": 1,
- "navigation_complexity": 1.436,
- "room": 9,
- "ssa": 1.617
- }
- },
- {
- "id": "Caruthers",
- "name": "model-33",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 129.048,
- "floor": 1,
- "navigation_complexity": 2.878,
- "room": 9,
- "ssa": 1.533
- }
- },
- {
- "id": "Cashel",
- "name": "model-366",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 223.371,
- "floor": 3,
- "navigation_complexity": 1.015,
- "room": 13,
- "ssa": 0.988
- }
- },
- {
- "id": "Cason",
- "name": "model-302",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 59.6,
- "floor": 1,
- "navigation_complexity": 2.709,
- "room": 3,
- "ssa": 1.153
- }
- },
- {
- "id": "Castor",
- "name": "model-9",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 151.967,
- "floor": 3,
- "navigation_complexity": 2.109,
- "room": 9,
- "ssa": 1.577
- }
- },
- {
- "id": "Castroville",
- "name": "model-231",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 410.224,
- "floor": 3,
- "navigation_complexity": 1.747,
- "room": 13,
- "ssa": 1.043
- }
- },
- {
- "id": "Cauthron",
- "name": "model-435",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "none",
- "stats": {
- "area": 628.857,
- "floor": 3,
- "navigation_complexity": 5.43,
- "room": 16,
- "ssa": 1.309
- }
- },
- {
- "id": "Cayuse",
- "name": "model-133",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 465.267,
- "floor": 4,
- "navigation_complexity": 1.001,
- "room": 30,
- "ssa": 1.956
- }
- },
- {
- "id": "Cebolla",
- "name": "model-116",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 636.509,
- "floor": 4,
- "navigation_complexity": 3.503,
- "room": 19,
- "ssa": 1.613
- }
- },
- {
- "id": "Channel",
- "name": "model-206",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1234.302,
- "floor": 5,
- "navigation_complexity": 2.001,
- "room": 45,
- "ssa": 1.483
- }
- },
- {
- "id": "Checotah",
- "name": "model-199",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 64.944,
- "floor": 2,
- "navigation_complexity": 1.697,
- "room": 6,
- "ssa": 1.546
- }
- },
- {
- "id": "Chesaning",
- "name": "model-246",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 3351.796,
- "floor": 3,
- "navigation_complexity": 5.092,
- "room": 20,
- "ssa": 0.498
- }
- },
- {
- "id": "Chesterbrook",
- "name": "model-171",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 551.319,
- "floor": 3,
- "navigation_complexity": 1.236,
- "room": 21,
- "ssa": 0.498
- }
- },
- {
- "id": "Chilhowie",
- "name": "model-40",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 398.26,
- "floor": 3,
- "navigation_complexity": 5.436,
- "room": 11,
- "ssa": 1.655
- }
- },
- {
- "id": "Chiloquin",
- "name": "model-143",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 621.968,
- "floor": 3,
- "navigation_complexity": 3.402,
- "room": 22,
- "ssa": 1.134
- }
- },
- {
- "id": "Chireno",
- "name": "model-56",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 152.69,
- "floor": 1,
- "navigation_complexity": 4.067,
- "room": 9,
- "ssa": 1.931
- }
- },
- {
- "id": "Chrisney",
- "name": "model-47",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 123.959,
- "floor": 3,
- "navigation_complexity": 1.313,
- "room": 7,
- "ssa": 1.241
- }
- },
- {
- "id": "Churchton",
- "name": "model-124",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 275.265,
- "floor": 4,
- "navigation_complexity": 1.346,
- "room": 17,
- "ssa": 1.187
- }
- },
- {
- "id": "Circleville",
- "name": "model-156",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 109.787,
- "floor": 2,
- "navigation_complexity": 1.597,
- "room": 8,
- "ssa": 1.661
- }
- },
- {
- "id": "Cisne",
- "name": "model-351",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 230.839,
- "floor": 3,
- "navigation_complexity": 1.552,
- "room": 17,
- "ssa": 2.031
- }
- },
- {
- "id": "Clairton",
- "name": "model-434",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 111.607,
- "floor": 2,
- "navigation_complexity": 2.647,
- "room": 7,
- "ssa": 1.704
- }
- },
- {
- "id": "Clarkridge",
- "name": "model-165",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 920.049,
- "floor": 4,
- "navigation_complexity": 1.165,
- "room": 17,
- "ssa": 1.277
- }
- },
- {
- "id": "Clive",
- "name": "model-50",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 594.258,
- "floor": 5,
- "navigation_complexity": 2.108,
- "room": 21,
- "ssa": 1.151
- }
- },
- {
- "id": "Cobalt",
- "name": "model-328",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 324.923,
- "floor": 3,
- "navigation_complexity": 5.297,
- "room": 9,
- "ssa": 1.886
- }
- },
- {
- "id": "Cochranton",
- "name": "model-442",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "none",
- "stats": {
- "area": 278.634,
- "floor": 4,
- "navigation_complexity": 2.363,
- "room": 16,
- "ssa": 2.049
- }
- },
- {
- "id": "Codell",
- "name": "model-46",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 526.822,
- "floor": 3,
- "navigation_complexity": 7.747,
- "room": 21,
- "ssa": 1.847
- }
- },
- {
- "id": "Coeburn",
- "name": "model-570",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 104.971,
- "floor": 2,
- "navigation_complexity": 1.516,
- "room": 7,
- "ssa": 1.182
- }
- },
- {
- "id": "Coffeen",
- "name": "model-148",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 286.735,
- "floor": 5,
- "navigation_complexity": 2.238,
- "room": 17,
- "ssa": 1.837
- }
- },
- {
- "id": "Cohoes",
- "name": "model-276",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 521.686,
- "floor": 3,
- "navigation_complexity": 1.257,
- "room": 21,
- "ssa": 0.939
- }
- },
- {
- "id": "Cokeville",
- "name": "model-139",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 103.567,
- "floor": 2,
- "navigation_complexity": 3.452,
- "room": 8,
- "ssa": 1.152
- }
- },
- {
- "id": "Colebrook",
- "name": "model-515",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 87.088,
- "floor": 1,
- "navigation_complexity": 4.266,
- "room": 7,
- "ssa": 1.635
- }
- },
- {
- "id": "Collierville",
- "name": "model-323",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "val",
- "stats": {
- "area": 171.335,
- "floor": 4,
- "navigation_complexity": 3.944,
- "room": 12,
- "ssa": 1.203
- }
- },
- {
- "id": "Connellsville",
- "name": "model-502",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 64.072,
- "floor": 1,
- "navigation_complexity": 2.101,
- "room": 6,
- "ssa": 1.422
- }
- },
- {
- "id": "Connoquenessing",
- "name": "model-64",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 568.497,
- "floor": 4,
- "navigation_complexity": 3.705,
- "room": 14,
- "ssa": 1.88
- }
- },
- {
- "id": "Convoy",
- "name": "model-36",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 19.183,
- "floor": 1,
- "navigation_complexity": 1.0,
- "room": 2,
- "ssa": 1.46
- }
- },
- {
- "id": "Cooperstown",
- "name": "model-247",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 40.268,
- "floor": 1,
- "navigation_complexity": 1.341,
- "room": 3,
- "ssa": 1.725
- }
- },
- {
- "id": "Copemish",
- "name": "model-125",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 411.203,
- "floor": 3,
- "navigation_complexity": 3.653,
- "room": 14,
- "ssa": 1.182
- }
- },
- {
- "id": "Corder",
- "name": "model-159",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 99.565,
- "floor": 1,
- "navigation_complexity": 1.354,
- "room": 2,
- "ssa": 1.113
- }
- },
- {
- "id": "Cornville",
- "name": "model-168",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 360.365,
- "floor": 3,
- "navigation_complexity": 3.89,
- "room": 14,
- "ssa": 1.179
- }
- },
- {
- "id": "Coronado",
- "name": "model-259",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 321.079,
- "floor": 1,
- "navigation_complexity": 4.153,
- "room": 22,
- "ssa": 1.251
- }
- },
- {
- "id": "Corozal",
- "name": "model-296",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "val",
- "stats": {
- "area": 577.136,
- "floor": 3,
- "navigation_complexity": 10.038,
- "room": 16,
- "ssa": 1.593
- }
- },
- {
- "id": "Cosmos",
- "name": "model-368",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 371.618,
- "floor": 3,
- "navigation_complexity": 8.758,
- "room": 17,
- "ssa": 1.332
- }
- },
- {
- "id": "Cottonport",
- "name": "model-25",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 776.583,
- "floor": 3,
- "navigation_complexity": 6.634,
- "room": 25,
- "ssa": 1.924
- }
- },
- {
- "id": "Couderay",
- "name": "model-341",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "none",
- "stats": {
- "area": 214.625,
- "floor": 4,
- "navigation_complexity": 1.752,
- "room": 15,
- "ssa": 1.144
- }
- },
- {
- "id": "Country",
- "name": "model-463",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 730.187,
- "floor": 3,
- "navigation_complexity": 8.213,
- "room": 26,
- "ssa": 1.337
- }
- },
- {
- "id": "Cousins",
- "name": "model-75",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "none",
- "stats": {
- "area": 660.449,
- "floor": 4,
- "navigation_complexity": 3.821,
- "room": 19,
- "ssa": 1.203
- }
- },
- {
- "id": "Crandon",
- "name": "model-112",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 298.35,
- "floor": 3,
- "navigation_complexity": 3.632,
- "room": 13,
- "ssa": 1.609
- }
- },
- {
- "id": "Creede",
- "name": "model-14",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 81.331,
- "floor": 1,
- "navigation_complexity": 2.931,
- "room": 6,
- "ssa": 1.207
- }
- },
- {
- "id": "Crookston",
- "name": "model-517",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1135.121,
- "floor": 3,
- "navigation_complexity": 5.306,
- "room": 17,
- "ssa": 1.33
- }
- },
- {
- "id": "Crugers",
- "name": "model-453",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 2019.115,
- "floor": 4,
- "navigation_complexity": 2.385,
- "room": 36,
- "ssa": 1.297
- }
- },
- {
- "id": "Culbertson",
- "name": "model-408",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 6.34,
- "floor": 1,
- "navigation_complexity": 1.0,
- "room": 1,
- "ssa": 1.342
- }
- },
- {
- "id": "Cullison",
- "name": "model-320",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 590.424,
- "floor": 4,
- "navigation_complexity": 1.003,
- "room": 26,
- "ssa": 1.593
- }
- },
- {
- "id": "Cutlerville",
- "name": "model-104",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 776.972,
- "floor": 3,
- "navigation_complexity": 2.934,
- "room": 21,
- "ssa": 1.179
- }
- },
- {
- "id": "Dalcour",
- "name": "model-560",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 177.415,
- "floor": 1,
- "navigation_complexity": 3.542,
- "room": 11,
- "ssa": 0.678
- }
- },
- {
- "id": "Dansville",
- "name": "model-241",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 457.536,
- "floor": 4,
- "navigation_complexity": 2.762,
- "room": 21,
- "ssa": 1.094
- }
- },
- {
- "id": "Darden",
- "name": "model-556",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "val",
- "stats": {
- "area": 444.113,
- "floor": 4,
- "navigation_complexity": 7.162,
- "room": 27,
- "ssa": 1.515
- }
- },
- {
- "id": "Darnestown",
- "name": "model-169",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 444.709,
- "floor": 1,
- "navigation_complexity": 5.051,
- "room": 3,
- "ssa": 1.665
- }
- },
- {
- "id": "Darrtown",
- "name": "model-41",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "none",
- "stats": {
- "area": 335.329,
- "floor": 4,
- "navigation_complexity": 1.84,
- "room": 12,
- "ssa": 1.975
- }
- },
- {
- "id": "Dauberville",
- "name": "model-119",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 265.929,
- "floor": 3,
- "navigation_complexity": 2.347,
- "room": 9,
- "ssa": 1.431
- }
- },
- {
- "id": "Deatsville",
- "name": "model-311",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 932.826,
- "floor": 4,
- "navigation_complexity": 5.574,
- "room": 12,
- "ssa": 1.625
- }
- },
- {
- "id": "Dedham",
- "name": "model-155",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 593.908,
- "floor": 3,
- "navigation_complexity": 4.32,
- "room": 27,
- "ssa": 1.661
- }
- },
- {
- "id": "Deemston",
- "name": "model-376",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 366.947,
- "floor": 3,
- "navigation_complexity": 1.879,
- "room": 15,
- "ssa": 1.8
- }
- },
- {
- "id": "Delton",
- "name": "model-352",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 86.226,
- "floor": 1,
- "navigation_complexity": 4.598,
- "room": 1,
- "ssa": 2.031
- }
- },
- {
- "id": "Denmark",
- "name": "model-369",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 40.796,
- "floor": 1,
- "navigation_complexity": 1.81,
- "room": 2,
- "ssa": 1.637
- }
- },
- {
- "id": "Destin",
- "name": "model-160",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 95.079,
- "floor": 1,
- "navigation_complexity": 3.581,
- "room": 4,
- "ssa": 1.113
- }
- },
- {
- "id": "Divide",
- "name": "model-132",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 70.734,
- "floor": 1,
- "navigation_complexity": 4.798,
- "room": 4,
- "ssa": 1.174
- }
- },
- {
- "id": "Donaldson",
- "name": "model-207",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "none",
- "stats": {
- "area": 1178.619,
- "floor": 4,
- "navigation_complexity": 5.979,
- "room": 26,
- "ssa": 1.069
- }
- },
- {
- "id": "Dryville",
- "name": "model-481",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 87.753,
- "floor": 1,
- "navigation_complexity": 2.528,
- "room": 8,
- "ssa": 1.256
- }
- },
- {
- "id": "Duarte",
- "name": "model-469",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 557.685,
- "floor": 4,
- "navigation_complexity": 7.211,
- "room": 22,
- "ssa": 1.238
- }
- },
- {
- "id": "Duluth",
- "name": "model-244",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1254.255,
- "floor": 4,
- "navigation_complexity": 2.656,
- "room": 39,
- "ssa": 1.105
- }
- },
- {
- "id": "Dunmor",
- "name": "model-554",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 90.056,
- "floor": 1,
- "navigation_complexity": 4.075,
- "room": 7,
- "ssa": 1.074
- }
- },
- {
- "id": "Eagan",
- "name": "model-15",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 326.346,
- "floor": 4,
- "navigation_complexity": 1.224,
- "room": 17,
- "ssa": 1.505
- }
- },
- {
- "id": "Eagerville",
- "name": "model-565",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 48.031,
- "floor": 1,
- "navigation_complexity": 1.006,
- "room": 4,
- "ssa": 1.946
- }
- },
- {
- "id": "Eastville",
- "name": "model-538",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 121.44,
- "floor": 1,
- "navigation_complexity": 3.518,
- "room": 6,
- "ssa": 1.347
- }
- },
- {
- "id": "Edgemere",
- "name": "model-177",
- "split_full": "none",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 23.62,
- "floor": 2,
- "navigation_complexity": 1.262,
- "room": 3,
- "ssa": 0.916
- }
- },
- {
- "id": "Edson",
- "name": "model-214",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "none",
- "stats": {
- "area": 484.365,
- "floor": 3,
- "navigation_complexity": 2.561,
- "room": 12,
- "ssa": 1.433
- }
- },
- {
- "id": "Ellaville",
- "name": "model-38",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 396.693,
- "floor": 3,
- "navigation_complexity": 1.347,
- "room": 16,
- "ssa": 0.936
- }
- },
- {
- "id": "Elmira",
- "name": "model-345",
- "split_full": "none",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 42.795,
- "floor": 1,
- "navigation_complexity": 1.431,
- "room": 3,
- "ssa": 2.177
- }
- },
- {
- "id": "Elton",
- "name": "model-256",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 303.378,
- "floor": 1,
- "navigation_complexity": 3.898,
- "room": 2,
- "ssa": 2.173
- }
- },
- {
- "id": "Emmaus",
- "name": "model-425",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 871.08,
- "floor": 3,
- "navigation_complexity": 6.55,
- "room": 25,
- "ssa": 1.189
- }
- },
- {
- "id": "Espanola",
- "name": "model-6",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 62.127,
- "floor": 1,
- "navigation_complexity": 2.144,
- "room": 3,
- "ssa": 0.843
- }
- },
- {
- "id": "Eudora",
- "name": "model-128",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 37.079,
- "floor": 1,
- "navigation_complexity": 2.897,
- "room": 3,
- "ssa": 1.161
- }
- },
- {
- "id": "Euharlee",
- "name": "model-31",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 67.995,
- "floor": 1,
- "navigation_complexity": 4.028,
- "room": 1,
- "ssa": 2.07
- }
- },
- {
- "id": "Everton",
- "name": "model-126",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 266.079,
- "floor": 3,
- "navigation_complexity": 2.129,
- "room": 12,
- "ssa": 1.182
- }
- },
- {
- "id": "Ewansville",
- "name": "model-232",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 335.837,
- "floor": 3,
- "navigation_complexity": 2.012,
- "room": 19,
- "ssa": 1.043
- }
- },
- {
- "id": "Ewell",
- "name": "model-472",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 767.007,
- "floor": 4,
- "navigation_complexity": 2.169,
- "room": 29,
- "ssa": 1.149
- }
- },
- {
- "id": "Experiment",
- "name": "model-420",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 258.674,
- "floor": 3,
- "navigation_complexity": 1.024,
- "room": 11,
- "ssa": 1.208
- }
- },
- {
- "id": "Fedora",
- "name": "model-267",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 909.584,
- "floor": 5,
- "navigation_complexity": 2.735,
- "room": 23,
- "ssa": 1.44
- }
- },
- {
- "id": "Fishersville",
- "name": "model-568",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 477.047,
- "floor": 3,
- "navigation_complexity": 2.513,
- "room": 16,
- "ssa": 1.851
- }
- },
- {
- "id": "Fitchburg",
- "name": "model-527",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 319.542,
- "floor": 3,
- "navigation_complexity": 1.017,
- "room": 14,
- "ssa": 1.601
- }
- },
- {
- "id": "Fleming",
- "name": "model-191",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 258.626,
- "floor": 4,
- "navigation_complexity": 1.041,
- "room": 15,
- "ssa": 1.195
- }
- },
- {
- "id": "Fonda",
- "name": "model-215",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 560.051,
- "floor": 4,
- "navigation_complexity": 2.058,
- "room": 18,
- "ssa": 1.992
- }
- },
- {
- "id": "Forkland",
- "name": "model-499",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 300.418,
- "floor": 4,
- "navigation_complexity": 3.539,
- "room": 27,
- "ssa": 1.256
- }
- },
- {
- "id": "Foyil",
- "name": "model-13",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 90.196,
- "floor": 2,
- "navigation_complexity": 2.181,
- "room": 7,
- "ssa": 1.207
- }
- },
- {
- "id": "Frankfort",
- "name": "model-107",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 345.828,
- "floor": 3,
- "navigation_complexity": 5.354,
- "room": 10,
- "ssa": 1.647
- }
- },
- {
- "id": "Frankton",
- "name": "model-333",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1018.387,
- "floor": 1,
- "navigation_complexity": 2.086,
- "room": 30,
- "ssa": 1.432
- }
- },
- {
- "id": "Fredericksburg",
- "name": "model-401",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 149.214,
- "floor": 1,
- "navigation_complexity": 1.511,
- "room": 2,
- "ssa": 0.872
- }
- },
- {
- "id": "Freedom",
- "name": "model-539",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 642.418,
- "floor": 3,
- "navigation_complexity": 2.148,
- "room": 19,
- "ssa": 1.641
- }
- },
- {
- "id": "Frierson",
- "name": "model-387",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 288.293,
- "floor": 3,
- "navigation_complexity": 1.398,
- "room": 16,
- "ssa": 1.274
- }
- },
- {
- "id": "Frontenac",
- "name": "model-461",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 506.124,
- "floor": 4,
- "navigation_complexity": 5.005,
- "room": 21,
- "ssa": 1.405
- }
- },
- {
- "id": "Funkstown",
- "name": "model-186",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 629.038,
- "floor": 3,
- "navigation_complexity": 2.827,
- "room": 15,
- "ssa": 1.442
- }
- },
- {
- "id": "Galatia",
- "name": "model-359",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 76.024,
- "floor": 1,
- "navigation_complexity": 2.863,
- "room": 5,
- "ssa": 1.212
- }
- },
- {
- "id": "Gasburg",
- "name": "model-252",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 62.01,
- "floor": 1,
- "navigation_complexity": 1.708,
- "room": 3,
- "ssa": 1.494
- }
- },
- {
- "id": "Gastonia",
- "name": "model-385",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 330.179,
- "floor": 3,
- "navigation_complexity": 2.527,
- "room": 15,
- "ssa": 1.787
- }
- },
- {
- "id": "Gaylord",
- "name": "model-150",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 59.25,
- "floor": 1,
- "navigation_complexity": 3.38,
- "room": 5,
- "ssa": 1.339
- }
- },
- {
- "id": "German",
- "name": "model-466",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "none",
- "stats": {
- "area": 1050.351,
- "floor": 3,
- "navigation_complexity": 9.619,
- "room": 7,
- "ssa": 2.115
- }
- },
- {
- "id": "Germfask",
- "name": "model-520",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 43.875,
- "floor": 1,
- "navigation_complexity": 3.079,
- "room": 5,
- "ssa": 1.536
- }
- },
- {
- "id": "Gilbert",
- "name": "model-110",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 221.741,
- "floor": 3,
- "navigation_complexity": 1.567,
- "room": 2,
- "ssa": 1.238
- }
- },
- {
- "id": "Gladstone",
- "name": "model-167",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 337.942,
- "floor": 4,
- "navigation_complexity": 1.371,
- "room": 18,
- "ssa": 1.179
- }
- },
- {
- "id": "Glassboro",
- "name": "model-438",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1089.73,
- "floor": 2,
- "navigation_complexity": 2.243,
- "room": 21,
- "ssa": 1.46
- }
- },
- {
- "id": "Glenmoor",
- "name": "model-213",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 448.802,
- "floor": 3,
- "navigation_complexity": 6.722,
- "room": 17,
- "ssa": 1.433
- }
- },
- {
- "id": "Globe",
- "name": "model-381",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 359.482,
- "floor": 4,
- "navigation_complexity": 5.787,
- "room": 20,
- "ssa": 1.267
- }
- },
- {
- "id": "Gloria",
- "name": "model-182",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 348.101,
- "floor": 3,
- "navigation_complexity": 5.28,
- "room": 7,
- "ssa": 1.56
- }
- },
- {
- "id": "Gluck",
- "name": "model-497",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 74.119,
- "floor": 1,
- "navigation_complexity": 1.204,
- "room": 7,
- "ssa": 1.524
- }
- },
- {
- "id": "Gluek",
- "name": "model-290",
- "split_full": "none",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 740.584,
- "floor": 7,
- "navigation_complexity": 3.62,
- "room": 12,
- "ssa": 0.493
- }
- },
- {
- "id": "Goffs",
- "name": "model-374",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 482.09,
- "floor": 3,
- "navigation_complexity": 5.257,
- "room": 17,
- "ssa": 2.062
- }
- },
- {
- "id": "Goodfield",
- "name": "model-5",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 348.422,
- "floor": 4,
- "navigation_complexity": 3.365,
- "room": 16,
- "ssa": 0.843
- }
- },
- {
- "id": "Goodview",
- "name": "model-284",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 104.041,
- "floor": 1,
- "navigation_complexity": 2.423,
- "room": 7,
- "ssa": 1.403
- }
- },
- {
- "id": "Goodwine",
- "name": "model-309",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 285.005,
- "floor": 3,
- "navigation_complexity": 3.3,
- "room": 16,
- "ssa": 1.083
- }
- },
- {
- "id": "Goodyear",
- "name": "model-114",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 367.827,
- "floor": 4,
- "navigation_complexity": 1.041,
- "room": 16,
- "ssa": 1.969
- }
- },
- {
- "id": "Gough",
- "name": "model-99",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 918.933,
- "floor": 5,
- "navigation_complexity": 3.98,
- "room": 23,
- "ssa": 1.027
- }
- },
- {
- "id": "Grace",
- "name": "model-59",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1303.692,
- "floor": 3,
- "navigation_complexity": 4.095,
- "room": 21,
- "ssa": 1.165
- }
- },
- {
- "id": "Graceville",
- "name": "model-521",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 359.458,
- "floor": 3,
- "navigation_complexity": 1.676,
- "room": 15,
- "ssa": 1.96
- }
- },
- {
- "id": "Gracey",
- "name": "model-375",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1958.748,
- "floor": 1,
- "navigation_complexity": 8.073,
- "room": 52,
- "ssa": 1.8
- }
- },
- {
- "id": "Grainola",
- "name": "model-149",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 2363.378,
- "floor": 3,
- "navigation_complexity": 23.015,
- "room": 39,
- "ssa": 1.339
- }
- },
- {
- "id": "Grangeville",
- "name": "model-510",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 376.558,
- "floor": 4,
- "navigation_complexity": 1.31,
- "room": 20,
- "ssa": 1.223
- }
- },
- {
- "id": "Grantsville",
- "name": "model-468",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 547.068,
- "floor": 4,
- "navigation_complexity": 1.001,
- "room": 20,
- "ssa": 1.282
- }
- },
- {
- "id": "Grassy",
- "name": "model-89",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1626.834,
- "floor": 3,
- "navigation_complexity": 2.643,
- "room": 29,
- "ssa": 0.731
- }
- },
- {
- "id": "Gratz",
- "name": "model-512",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 861.946,
- "floor": 1,
- "navigation_complexity": 1.047,
- "room": 2,
- "ssa": 0.873
- }
- },
- {
- "id": "Gravelly",
- "name": "model-219",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "none",
- "stats": {
- "area": 530.688,
- "floor": 3,
- "navigation_complexity": 5.877,
- "room": 27,
- "ssa": 1.156
- }
- },
- {
- "id": "Greigsville",
- "name": "model-308",
- "split_full": "none",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 43.603,
- "floor": 1,
- "navigation_complexity": 1.847,
- "room": 2,
- "ssa": 1.406
- }
- },
- {
- "id": "Grigston",
- "name": "model-360",
- "split_full": "none",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 67.84,
- "floor": 1,
- "navigation_complexity": 1.169,
- "room": 2,
- "ssa": 1.212
- }
- },
- {
- "id": "Haaswood",
- "name": "model-30",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 537.735,
- "floor": 5,
- "navigation_complexity": 2.232,
- "room": 19,
- "ssa": 1.673
- }
- },
- {
- "id": "Hacienda",
- "name": "model-35",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 437.136,
- "floor": 3,
- "navigation_complexity": 3.863,
- "room": 16,
- "ssa": 1.46
- }
- },
- {
- "id": "Hainesburg",
- "name": "model-511",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 275.235,
- "floor": 3,
- "navigation_complexity": 3.244,
- "room": 15,
- "ssa": 0.873
- }
- },
- {
- "id": "Halfway",
- "name": "model-61",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 185.459,
- "floor": 3,
- "navigation_complexity": 1.118,
- "room": 10,
- "ssa": 1.643
- }
- },
- {
- "id": "Hallettsville",
- "name": "model-399",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 670.759,
- "floor": 3,
- "navigation_complexity": 1.531,
- "room": 18,
- "ssa": 1.341
- }
- },
- {
- "id": "Hambleton",
- "name": "model-272",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 67.901,
- "floor": 1,
- "navigation_complexity": 1.0,
- "room": 5,
- "ssa": 1.363
- }
- },
- {
- "id": "Hammon",
- "name": "model-81",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 608.869,
- "floor": 3,
- "navigation_complexity": 4.273,
- "room": 19,
- "ssa": 1.617
- }
- },
- {
- "id": "Hanson",
- "name": "model-1",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 343.461,
- "floor": 4,
- "navigation_complexity": 9.4,
- "room": 21,
- "ssa": 1.552
- }
- },
- {
- "id": "Harkeyville",
- "name": "model-564",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1374.661,
- "floor": 3,
- "navigation_complexity": 3.107,
- "room": 2,
- "ssa": 1.607
- }
- },
- {
- "id": "Harrellsville",
- "name": "model-164",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 61.215,
- "floor": 1,
- "navigation_complexity": 3.886,
- "room": 5,
- "ssa": 1.553
- }
- },
- {
- "id": "Hartline",
- "name": "model-201",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 727.746,
- "floor": 3,
- "navigation_complexity": 3.41,
- "room": 21,
- "ssa": 1.275
- }
- },
- {
- "id": "Hatfield",
- "name": "model-153",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 73.469,
- "floor": 1,
- "navigation_complexity": 3.17,
- "room": 5,
- "ssa": 1.008
- }
- },
- {
- "id": "Haxtun",
- "name": "model-23",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 57.408,
- "floor": 1,
- "navigation_complexity": 2.184,
- "room": 5,
- "ssa": 2.077
- }
- },
- {
- "id": "Haymarket",
- "name": "model-516",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 456.154,
- "floor": 3,
- "navigation_complexity": 5.456,
- "room": 21,
- "ssa": 1.635
- }
- },
- {
- "id": "Helix",
- "name": "model-140",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 61.886,
- "floor": 1,
- "navigation_complexity": 2.504,
- "room": 4,
- "ssa": 1.152
- }
- },
- {
- "id": "Helton",
- "name": "model-349",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "none",
- "stats": {
- "area": 310.883,
- "floor": 3,
- "navigation_complexity": 5.192,
- "room": 11,
- "ssa": 0.81
- }
- },
- {
- "id": "Hendrix",
- "name": "model-66",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 659.372,
- "floor": 3,
- "navigation_complexity": 4.787,
- "room": 17,
- "ssa": 1.7
- }
- },
- {
- "id": "Hennepin",
- "name": "model-275",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1955.06,
- "floor": 3,
- "navigation_complexity": 2.058,
- "room": 3,
- "ssa": 0.939
- }
- },
- {
- "id": "Hercules",
- "name": "model-537",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 119.162,
- "floor": 1,
- "navigation_complexity": 3.477,
- "room": 8,
- "ssa": 1.347
- }
- },
- {
- "id": "Herricks",
- "name": "model-141",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 273.683,
- "floor": 1,
- "navigation_complexity": 1.117,
- "room": 17,
- "ssa": 1.87
- }
- },
- {
- "id": "Highspire",
- "name": "model-428",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 214.799,
- "floor": 4,
- "navigation_complexity": 1.715,
- "room": 13,
- "ssa": 1.645
- }
- },
- {
- "id": "Hildebran",
- "name": "model-326",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 96.343,
- "floor": 1,
- "navigation_complexity": 4.173,
- "room": 6,
- "ssa": 1.9
- }
- },
- {
- "id": "Hillsdale",
- "name": "model-178",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 146.903,
- "floor": 3,
- "navigation_complexity": 3.099,
- "room": 2,
- "ssa": 0.916
- }
- },
- {
- "id": "Hindsboro",
- "name": "model-281",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1581.764,
- "floor": 4,
- "navigation_complexity": 6.659,
- "room": 3,
- "ssa": 1.21
- }
- },
- {
- "id": "Hitchland",
- "name": "model-106",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 636.256,
- "floor": 4,
- "navigation_complexity": 5.794,
- "room": 24,
- "ssa": 2.064
- }
- },
- {
- "id": "Hiteman",
- "name": "model-358",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 282.095,
- "floor": 4,
- "navigation_complexity": 6.118,
- "room": 19,
- "ssa": 1.678
- }
- },
- {
- "id": "Hobson",
- "name": "model-208",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 125.348,
- "floor": 1,
- "navigation_complexity": 3.187,
- "room": 9,
- "ssa": 1.069
- }
- },
- {
- "id": "Holcut",
- "name": "model-488",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1064.191,
- "floor": 2,
- "navigation_complexity": 3.567,
- "room": 8,
- "ssa": 0.823
- }
- },
- {
- "id": "Hometown",
- "name": "model-530",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 61.282,
- "floor": 1,
- "navigation_complexity": 2.189,
- "room": 4,
- "ssa": 0.938
- }
- },
- {
- "id": "Hominy",
- "name": "model-105",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 143.953,
- "floor": 3,
- "navigation_complexity": 1.518,
- "room": 10,
- "ssa": 2.064
- }
- },
- {
- "id": "Hordville",
- "name": "model-273",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "none",
- "stats": {
- "area": 205.509,
- "floor": 4,
- "navigation_complexity": 1.003,
- "room": 16,
- "ssa": 1.247
- }
- },
- {
- "id": "Hornsby",
- "name": "model-279",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 307.377,
- "floor": 3,
- "navigation_complexity": 3.045,
- "room": 18,
- "ssa": 1.946
- }
- },
- {
- "id": "Hortense",
- "name": "model-67",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "none",
- "stats": {
- "area": 172.84,
- "floor": 4,
- "navigation_complexity": 1.0,
- "room": 15,
- "ssa": 2.049
- }
- },
- {
- "id": "Howie",
- "name": "model-109",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 570.3,
- "floor": 3,
- "navigation_complexity": 3.227,
- "room": 22,
- "ssa": 1.238
- }
- },
- {
- "id": "Hurley",
- "name": "model-450",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 844.897,
- "floor": 4,
- "navigation_complexity": 3.365,
- "room": 23,
- "ssa": 1.353
- }
- },
- {
- "id": "Idanha",
- "name": "model-71",
- "split_full": "none",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 40.383,
- "floor": 1,
- "navigation_complexity": 1.407,
- "room": 1,
- "ssa": 2.525
- }
- },
- {
- "id": "Ihlen",
- "name": "model-32",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "test",
- "stats": {
- "area": 359.128,
- "floor": 3,
- "navigation_complexity": 2.194,
- "room": 17,
- "ssa": 2.07
- }
- },
- {
- "id": "Imbery",
- "name": "model-113",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 425.898,
- "floor": 3,
- "navigation_complexity": 1.899,
- "room": 12,
- "ssa": 1.969
- }
- },
- {
- "id": "Inkom",
- "name": "model-261",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 69.349,
- "floor": 1,
- "navigation_complexity": 1.835,
- "room": 6,
- "ssa": 1.438
- }
- },
- {
- "id": "Irvine",
- "name": "model-291",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 544.508,
- "floor": 4,
- "navigation_complexity": 1.473,
- "room": 15,
- "ssa": 1.271
- }
- },
- {
- "id": "Islandton",
- "name": "model-572",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 280.636,
- "floor": 1,
- "navigation_complexity": 5.436,
- "room": 9,
- "ssa": 1.402
- }
- },
- {
- "id": "Jacobus",
- "name": "model-327",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 550.278,
- "floor": 6,
- "navigation_complexity": 3.357,
- "room": 8,
- "ssa": 1.886
- }
- },
- {
- "id": "Jenners",
- "name": "model-437",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 590.746,
- "floor": 3,
- "navigation_complexity": 4.269,
- "room": 20,
- "ssa": 1.46
- }
- },
- {
- "id": "Jennie",
- "name": "model-287",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 426.996,
- "floor": 4,
- "navigation_complexity": 1.0,
- "room": 29,
- "ssa": 1.781
- }
- },
- {
- "id": "Judith",
- "name": "model-344",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1397.48,
- "floor": 3,
- "navigation_complexity": 2.011,
- "room": 25,
- "ssa": 1.647
- }
- },
- {
- "id": "Kangley",
- "name": "model-223",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 557.674,
- "floor": 3,
- "navigation_complexity": 1.695,
- "room": 16,
- "ssa": 1.356
- }
- },
- {
- "id": "Kankakee",
- "name": "model-432",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 434.315,
- "floor": 4,
- "navigation_complexity": 2.273,
- "room": 22,
- "ssa": 1.743
- }
- },
- {
- "id": "Kathryn",
- "name": "model-147",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 649.14,
- "floor": 3,
- "navigation_complexity": 3.569,
- "room": 15,
- "ssa": 1.837
- }
- },
- {
- "id": "Keiser",
- "name": "model-346",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 396.175,
- "floor": 4,
- "navigation_complexity": 1.745,
- "room": 22,
- "ssa": 2.177
- }
- },
- {
- "id": "Kemblesville",
- "name": "model-176",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 67.226,
- "floor": 1,
- "navigation_complexity": 4.037,
- "room": 6,
- "ssa": 1.091
- }
- },
- {
- "id": "Kendall",
- "name": "model-254",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 303.213,
- "floor": 1,
- "navigation_complexity": 2.31,
- "room": 12,
- "ssa": 1.568
- }
- },
- {
- "id": "Kerrtown",
- "name": "model-217",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 124.735,
- "floor": 1,
- "navigation_complexity": 2.876,
- "room": 7,
- "ssa": 1.303
- }
- },
- {
- "id": "Kettle",
- "name": "model-382",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 90.146,
- "floor": 3,
- "navigation_complexity": 1.005,
- "room": 10,
- "ssa": 1.267
- }
- },
- {
- "id": "Kevin",
- "name": "model-234",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 505.398,
- "floor": 3,
- "navigation_complexity": 1.71,
- "room": 21,
- "ssa": 1.398
- }
- },
- {
- "id": "Keweenaw",
- "name": "model-507",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 314.952,
- "floor": 1,
- "navigation_complexity": 1.352,
- "room": 24,
- "ssa": 1.126
- }
- },
- {
- "id": "Kihei",
- "name": "model-278",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 323.7,
- "floor": 3,
- "navigation_complexity": 1.519,
- "room": 10,
- "ssa": 1.664
- }
- },
- {
- "id": "Kildare",
- "name": "model-325",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 143.509,
- "floor": 3,
- "navigation_complexity": 1.062,
- "room": 11,
- "ssa": 1.9
- }
- },
- {
- "id": "Kinde",
- "name": "model-158",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 402.563,
- "floor": 3,
- "navigation_complexity": 2.058,
- "room": 19,
- "ssa": 1.38
- }
- },
- {
- "id": "Kingdom",
- "name": "model-493",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 424.793,
- "floor": 1,
- "navigation_complexity": 4.381,
- "room": 15,
- "ssa": 1.941
- }
- },
- {
- "id": "Kingfisher",
- "name": "model-86",
- "split_full": "none",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 730.717,
- "floor": 1,
- "navigation_complexity": 2.737,
- "room": 2,
- "ssa": 1.287
- }
- },
- {
- "id": "Kinney",
- "name": "model-94",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 132.303,
- "floor": 1,
- "navigation_complexity": 1.9,
- "room": 7,
- "ssa": 1.602
- }
- },
- {
- "id": "Kirksville",
- "name": "model-329",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 926.364,
- "floor": 6,
- "navigation_complexity": 3.98,
- "room": 21,
- "ssa": 1.156
- }
- },
- {
- "id": "Kirwin",
- "name": "model-209",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 851.942,
- "floor": 3,
- "navigation_complexity": 5.134,
- "room": 22,
- "ssa": 1.868
- }
- },
- {
- "id": "Klickitat",
- "name": "model-19",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 1618.439,
- "floor": 6,
- "navigation_complexity": 11.77,
- "room": 20,
- "ssa": 1.425
- }
- },
- {
- "id": "Kobuk",
- "name": "model-179",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "none",
- "stats": {
- "area": 349.003,
- "floor": 3,
- "navigation_complexity": 2.498,
- "room": 15,
- "ssa": 1.437
- }
- },
- {
- "id": "Kopperl",
- "name": "model-495",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 315.216,
- "floor": 4,
- "navigation_complexity": 2.315,
- "room": 17,
- "ssa": 1.522
- }
- },
- {
- "id": "Kremlin",
- "name": "model-318",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 53.553,
- "floor": 1,
- "navigation_complexity": 2.029,
- "room": 4,
- "ssa": 1.309
- }
- },
- {
- "id": "Kronborg",
- "name": "model-189",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 385.662,
- "floor": 1,
- "navigation_complexity": 3.23,
- "room": 4,
- "ssa": 1.091
- }
- },
- {
- "id": "Lacon",
- "name": "model-138",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 3121.66,
- "floor": 2,
- "navigation_complexity": 6.679,
- "room": 42,
- "ssa": 1.827
- }
- },
- {
- "id": "Ladue",
- "name": "model-549",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 200.588,
- "floor": 3,
- "navigation_complexity": 2.303,
- "room": 9,
- "ssa": 0.698
- }
- },
- {
- "id": "Lajas",
- "name": "model-412",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 184.768,
- "floor": 3,
- "navigation_complexity": 1.118,
- "room": 10,
- "ssa": 0.916
- }
- },
- {
- "id": "Lakeville",
- "name": "model-354",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 876.26,
- "floor": 3,
- "navigation_complexity": 13.218,
- "room": 19,
- "ssa": 2.052
- }
- },
- {
- "id": "Landing",
- "name": "model-122",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 865.108,
- "floor": 4,
- "navigation_complexity": 3.033,
- "room": 16,
- "ssa": 1.62
- }
- },
- {
- "id": "Lathrup",
- "name": "model-496",
- "split_full": "none",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 44.215,
- "floor": 1,
- "navigation_complexity": 1.648,
- "room": 3,
- "ssa": 1.522
- }
- },
- {
- "id": "Laupahoehoe",
- "name": "model-465",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 926.358,
- "floor": 5,
- "navigation_complexity": 2.169,
- "room": 28,
- "ssa": 2.115
- }
- },
- {
- "id": "Laytonsville",
- "name": "model-53",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 58.748,
- "floor": 1,
- "navigation_complexity": 1.024,
- "room": 3,
- "ssa": 1.416
- }
- },
- {
- "id": "Leavittsburg",
- "name": "model-134",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 394.078,
- "floor": 3,
- "navigation_complexity": 2.964,
- "room": 18,
- "ssa": 1.956
- }
- },
- {
- "id": "Leilani",
- "name": "model-84",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 977.135,
- "floor": 1,
- "navigation_complexity": 3.157,
- "room": 42,
- "ssa": 1.256
- }
- },
- {
- "id": "Lenoir",
- "name": "model-312",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 193.152,
- "floor": 2,
- "navigation_complexity": 2.873,
- "room": 8,
- "ssa": 1.625
- }
- },
- {
- "id": "Leonardo",
- "name": "model-229",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 610.147,
- "floor": 4,
- "navigation_complexity": 8.586,
- "room": 20,
- "ssa": 1.637
- }
- },
- {
- "id": "Lessley",
- "name": "model-197",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 734.48,
- "floor": 4,
- "navigation_complexity": 4.327,
- "room": 22,
- "ssa": 1.455
- }
- },
- {
- "id": "Liddieville",
- "name": "model-378",
- "split_full": "none",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 336.058,
- "floor": 1,
- "navigation_complexity": 1.89,
- "room": 14,
- "ssa": 1.175
- }
- },
- {
- "id": "Lincolnwood",
- "name": "model-509",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 6298.848,
- "floor": 4,
- "navigation_complexity": 17.889,
- "room": 110,
- "ssa": 1.223
- }
- },
- {
- "id": "Lindberg",
- "name": "model-362",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 463.687,
- "floor": 3,
- "navigation_complexity": 2.159,
- "room": 17,
- "ssa": 1.065
- }
- },
- {
- "id": "Lindenwood",
- "name": "model-476",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 1305.287,
- "floor": 3,
- "navigation_complexity": 11.816,
- "room": 37,
- "ssa": 1.297
- }
- },
- {
- "id": "Lindsborg",
- "name": "model-379",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 333.7,
- "floor": 3,
- "navigation_complexity": 5.038,
- "room": 19,
- "ssa": 1.375
- }
- },
- {
- "id": "Lineville",
- "name": "model-501",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 359.806,
- "floor": 3,
- "navigation_complexity": 2.438,
- "room": 15,
- "ssa": 1.422
- }
- },
- {
- "id": "Lluveras",
- "name": "model-418",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 339.575,
- "floor": 3,
- "navigation_complexity": 1.944,
- "room": 15,
- "ssa": 1.346
- }
- },
- {
- "id": "Losantville",
- "name": "model-504",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "none",
- "stats": {
- "area": 1111.809,
- "floor": 4,
- "navigation_complexity": 3.684,
- "room": 22,
- "ssa": 1.616
- }
- },
- {
- "id": "Lovilia",
- "name": "model-282",
- "split_full": "none",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 122.258,
- "floor": 3,
- "navigation_complexity": 1.313,
- "room": 7,
- "ssa": 1.21
- }
- },
- {
- "id": "Lucan",
- "name": "model-277",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 701.684,
- "floor": 4,
- "navigation_complexity": 2.533,
- "room": 28,
- "ssa": 1.664
- }
- },
- {
- "id": "Ludlowville",
- "name": "model-240",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 587.497,
- "floor": 3,
- "navigation_complexity": 1.494,
- "room": 17,
- "ssa": 1.575
- }
- },
- {
- "id": "Lynchburg",
- "name": "model-60",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 284.04,
- "floor": 3,
- "navigation_complexity": 5.952,
- "room": 10,
- "ssa": 1.165
- }
- },
- {
- "id": "Lynxville",
- "name": "model-506",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 79.531,
- "floor": 1,
- "navigation_complexity": 1.671,
- "room": 3,
- "ssa": 2.016
- }
- },
- {
- "id": "Maben",
- "name": "model-173",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 37.044,
- "floor": 1,
- "navigation_complexity": 1.539,
- "room": 4,
- "ssa": 1.342
- }
- },
- {
- "id": "MacArthur",
- "name": "model-429",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 641.795,
- "floor": 4,
- "navigation_complexity": 2.202,
- "room": 21,
- "ssa": 1.228
- }
- },
- {
- "id": "Macedon",
- "name": "model-561",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 571.195,
- "floor": 3,
- "navigation_complexity": 1.384,
- "room": 31,
- "ssa": 1.02
- }
- },
- {
- "id": "Macksville",
- "name": "model-480",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 339.319,
- "floor": 3,
- "navigation_complexity": 2.154,
- "room": 15,
- "ssa": 1.128
- }
- },
- {
- "id": "Macland",
- "name": "model-338",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 247.187,
- "floor": 3,
- "navigation_complexity": 5.915,
- "room": 10,
- "ssa": 0.742
- }
- },
- {
- "id": "Maguayo",
- "name": "model-79",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 550.098,
- "floor": 1,
- "navigation_complexity": 18.434,
- "room": 31,
- "ssa": 1.356
- }
- },
- {
- "id": "Mahtomedi",
- "name": "model-361",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 49.658,
- "floor": 1,
- "navigation_complexity": 1.742,
- "room": 2,
- "ssa": 1.065
- }
- },
- {
- "id": "Maida",
- "name": "model-242",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 30.097,
- "floor": 1,
- "navigation_complexity": 2.481,
- "room": 3,
- "ssa": 1.094
- }
- },
- {
- "id": "Maiden",
- "name": "model-129",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 194.383,
- "floor": 4,
- "navigation_complexity": 1.977,
- "room": 13,
- "ssa": 1.208
- }
- },
- {
- "id": "Maitland",
- "name": "model-386",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 168.856,
- "floor": 1,
- "navigation_complexity": 3.109,
- "room": 8,
- "ssa": 1.787
- }
- },
- {
- "id": "Mammoth",
- "name": "model-96",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 469.434,
- "floor": 4,
- "navigation_complexity": 3.574,
- "room": 21,
- "ssa": 1.778
- }
- },
- {
- "id": "Manassas",
- "name": "model-49",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 510.112,
- "floor": 3,
- "navigation_complexity": 2.571,
- "room": 22,
- "ssa": 1.151
- }
- },
- {
- "id": "Maricopa",
- "name": "model-73",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 243.042,
- "floor": 3,
- "navigation_complexity": 1.05,
- "room": 11,
- "ssa": 1.863
- }
- },
- {
- "id": "Markleeville",
- "name": "model-534",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "val",
- "stats": {
- "area": 354.146,
- "floor": 4,
- "navigation_complexity": 5.198,
- "room": 14,
- "ssa": 0.955
- }
- },
- {
- "id": "Marksville",
- "name": "model-157",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 585.206,
- "floor": 1,
- "navigation_complexity": 3.922,
- "room": 16,
- "ssa": 1.38
- }
- },
- {
- "id": "Marland",
- "name": "model-357",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 547.906,
- "floor": 5,
- "navigation_complexity": 1.295,
- "room": 16,
- "ssa": 1.678
- }
- },
- {
- "id": "Marstons",
- "name": "model-257",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 1481.287,
- "floor": 7,
- "navigation_complexity": 4.051,
- "room": 43,
- "ssa": 1.574
- }
- },
- {
- "id": "Martinville",
- "name": "model-28",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 258.383,
- "floor": 3,
- "navigation_complexity": 1.602,
- "room": 15,
- "ssa": 1.957
- }
- },
- {
- "id": "Maryhill",
- "name": "model-307",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 531.583,
- "floor": 4,
- "navigation_complexity": 2.939,
- "room": 12,
- "ssa": 1.406
- }
- },
- {
- "id": "Mashulaville",
- "name": "model-180",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 455.396,
- "floor": 4,
- "navigation_complexity": 1.597,
- "room": 31,
- "ssa": 1.437
- }
- },
- {
- "id": "Matoaca",
- "name": "model-22",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 57.048,
- "floor": 1,
- "navigation_complexity": 1.881,
- "room": 5,
- "ssa": 1.263
- }
- },
- {
- "id": "Maugansville",
- "name": "model-513",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 502.758,
- "floor": 3,
- "navigation_complexity": 3.097,
- "room": 21,
- "ssa": 1.136
- }
- },
- {
- "id": "Maunawili",
- "name": "model-301",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 107.755,
- "floor": 2,
- "navigation_complexity": 2.763,
- "room": 4,
- "ssa": 1.153
- }
- },
- {
- "id": "Mayesville",
- "name": "model-363",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 85.262,
- "floor": 1,
- "navigation_complexity": 1.0,
- "room": 2,
- "ssa": 1.281
- }
- },
- {
- "id": "Mazomanie",
- "name": "model-536",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 599.358,
- "floor": 3,
- "navigation_complexity": 2.916,
- "room": 25,
- "ssa": 0.794
- }
- },
- {
- "id": "McCloud",
- "name": "model-72",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 645.828,
- "floor": 3,
- "navigation_complexity": 5.655,
- "room": 26,
- "ssa": 2.525
- }
- },
- {
- "id": "McClure",
- "name": "model-218",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 463.599,
- "floor": 3,
- "navigation_complexity": 1.021,
- "room": 15,
- "ssa": 1.303
- }
- },
- {
- "id": "McDade",
- "name": "model-347",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "test",
- "stats": {
- "area": 928.005,
- "floor": 5,
- "navigation_complexity": 3.704,
- "room": 26,
- "ssa": 1.522
- }
- },
- {
- "id": "McEwen",
- "name": "model-203",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 284.58,
- "floor": 1,
- "navigation_complexity": 6.629,
- "room": 9,
- "ssa": 1.821
- }
- },
- {
- "id": "McKeesport",
- "name": "model-533",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 592.516,
- "floor": 3,
- "navigation_complexity": 1.314,
- "room": 29,
- "ssa": 0.955
- }
- },
- {
- "id": "McNary",
- "name": "model-184",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 248.132,
- "floor": 3,
- "navigation_complexity": 5.342,
- "room": 12,
- "ssa": 1.012
- }
- },
- {
- "id": "Melstone",
- "name": "model-95",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1049.473,
- "floor": 3,
- "navigation_complexity": 6.013,
- "room": 29,
- "ssa": 1.778
- }
- },
- {
- "id": "Mentasta",
- "name": "model-548",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 586.539,
- "floor": 3,
- "navigation_complexity": 3.235,
- "room": 12,
- "ssa": 1.297
- }
- },
- {
- "id": "Mentmore",
- "name": "model-260",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 458.149,
- "floor": 3,
- "navigation_complexity": 1.681,
- "room": 22,
- "ssa": 1.251
- }
- },
- {
- "id": "Merchantville",
- "name": "model-441",
- "split_full": "none",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 243.923,
- "floor": 1,
- "navigation_complexity": 2.31,
- "room": 2,
- "ssa": 2.049
- }
- },
- {
- "id": "Merlin",
- "name": "model-62",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 569.168,
- "floor": 3,
- "navigation_complexity": 2.186,
- "room": 16,
- "ssa": 1.643
- }
- },
- {
- "id": "Merom",
- "name": "model-2",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 269.431,
- "floor": 3,
- "navigation_complexity": 7.878,
- "room": 13,
- "ssa": 1.552
- }
- },
- {
- "id": "Mesic",
- "name": "model-194",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 375.196,
- "floor": 4,
- "navigation_complexity": 3.506,
- "room": 19,
- "ssa": 1.413
- }
- },
- {
- "id": "Micanopy",
- "name": "model-172",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 374.441,
- "floor": 4,
- "navigation_complexity": 2.006,
- "room": 29,
- "ssa": 0.498
- }
- },
- {
- "id": "Michiana",
- "name": "model-462",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 53.665,
- "floor": 1,
- "navigation_complexity": 1.049,
- "room": 5,
- "ssa": 1.405
- }
- },
- {
- "id": "Mifflinburg",
- "name": "model-500",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 230.642,
- "floor": 4,
- "navigation_complexity": 1.765,
- "room": 15,
- "ssa": 1.256
- }
- },
- {
- "id": "Mifflintown",
- "name": "model-531",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 165.089,
- "floor": 2,
- "navigation_complexity": 2.151,
- "room": 28,
- "ssa": 1.34
- }
- },
- {
- "id": "Milaca",
- "name": "model-249",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 375.791,
- "floor": 4,
- "navigation_complexity": 8.021,
- "room": 21,
- "ssa": 1.241
- }
- },
- {
- "id": "Milford",
- "name": "model-467",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 972.814,
- "floor": 4,
- "navigation_complexity": 3.448,
- "room": 28,
- "ssa": 1.282
- }
- },
- {
- "id": "Millbury",
- "name": "model-238",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 383.756,
- "floor": 3,
- "navigation_complexity": 3.233,
- "room": 15,
- "ssa": 1.609
- }
- },
- {
- "id": "Moark",
- "name": "model-280",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 2287.132,
- "floor": 5,
- "navigation_complexity": 8.482,
- "room": 31,
- "ssa": 1.946
- }
- },
- {
- "id": "Moberly",
- "name": "model-103",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 442.52,
- "floor": 3,
- "navigation_complexity": 1.0,
- "room": 16,
- "ssa": 1.179
- }
- },
- {
- "id": "Mobridge",
- "name": "model-395",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 106.396,
- "floor": 1,
- "navigation_complexity": 2.111,
- "room": 6,
- "ssa": 1.491
- }
- },
- {
- "id": "Model",
- "name": "model-266",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 366.231,
- "floor": 3,
- "navigation_complexity": 2.112,
- "room": 14,
- "ssa": 1.337
- }
- },
- {
- "id": "Mogadore",
- "name": "model-407",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 2363.158,
- "floor": 10,
- "navigation_complexity": 4.48,
- "room": 30,
- "ssa": 1.342
- }
- },
- {
- "id": "Mogote",
- "name": "model-336",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 375.962,
- "floor": 3,
- "navigation_complexity": 2.227,
- "room": 14,
- "ssa": 1.496
- }
- },
- {
- "id": "Monson",
- "name": "model-135",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 188.722,
- "floor": 3,
- "navigation_complexity": 3.146,
- "room": 8,
- "ssa": 0.909
- }
- },
- {
- "id": "Monticello",
- "name": "model-90",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 185.89,
- "floor": 3,
- "navigation_complexity": 1.9,
- "room": 17,
- "ssa": 0.731
- }
- },
- {
- "id": "Montreal",
- "name": "model-547",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 63.793,
- "floor": 1,
- "navigation_complexity": 3.082,
- "room": 5,
- "ssa": 1.297
- }
- },
- {
- "id": "Moonachie",
- "name": "model-196",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 2697.304,
- "floor": 3,
- "navigation_complexity": 2.112,
- "room": 29,
- "ssa": 1.16
- }
- },
- {
- "id": "Morris",
- "name": "model-305",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 154.83,
- "floor": 3,
- "navigation_complexity": 4.126,
- "room": 6,
- "ssa": 1.988
- }
- },
- {
- "id": "Mosinee",
- "name": "model-508",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 55.911,
- "floor": 1,
- "navigation_complexity": 2.33,
- "room": 4,
- "ssa": 1.126
- }
- },
- {
- "id": "Mosquito",
- "name": "model-315",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 419.697,
- "floor": 3,
- "navigation_complexity": 4.363,
- "room": 17,
- "ssa": 1.241
- }
- },
- {
- "id": "Muleshoe",
- "name": "model-80",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "test",
- "stats": {
- "area": 1204.837,
- "floor": 5,
- "navigation_complexity": 3.61,
- "room": 20,
- "ssa": 1.356
- }
- },
- {
- "id": "Mullica",
- "name": "model-54",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 282.689,
- "floor": 3,
- "navigation_complexity": 2.201,
- "room": 13,
- "ssa": 1.416
- }
- },
- {
- "id": "Munsons",
- "name": "model-10",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 234.973,
- "floor": 3,
- "navigation_complexity": 2.481,
- "room": 11,
- "ssa": 1.577
- }
- },
- {
- "id": "Murchison",
- "name": "model-409",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 485.544,
- "floor": 4,
- "navigation_complexity": 1.03,
- "room": 22,
- "ssa": 0.821
- }
- },
- {
- "id": "Musicks",
- "name": "model-484",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 209.679,
- "floor": 3,
- "navigation_complexity": 1.141,
- "room": 10,
- "ssa": 2.332
- }
- },
- {
- "id": "Natural",
- "name": "model-400",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "none",
- "stats": {
- "area": 574.681,
- "floor": 4,
- "navigation_complexity": 2.113,
- "room": 24,
- "ssa": 1.341
- }
- },
- {
- "id": "Neibert",
- "name": "model-439",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 578.138,
- "floor": 3,
- "navigation_complexity": 7.6,
- "room": 15,
- "ssa": 1.576
- }
- },
- {
- "id": "Nemacolin",
- "name": "model-449",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 544.518,
- "floor": 4,
- "navigation_complexity": 3.78,
- "room": 26,
- "ssa": 1.353
- }
- },
- {
- "id": "Neshkoro",
- "name": "model-274",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 789.459,
- "floor": 3,
- "navigation_complexity": 4.976,
- "room": 26,
- "ssa": 1.247
- }
- },
- {
- "id": "Newcomb",
- "name": "model-283",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 83.141,
- "floor": 2,
- "navigation_complexity": 3.346,
- "room": 6,
- "ssa": 1.403
- }
- },
- {
- "id": "Newfields",
- "name": "model-288",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 514.149,
- "floor": 5,
- "navigation_complexity": 6.736,
- "room": 19,
- "ssa": 1.781
- }
- },
- {
- "id": "Nicut",
- "name": "model-367",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 90.831,
- "floor": 1,
- "navigation_complexity": 3.008,
- "room": 7,
- "ssa": 1.332
- }
- },
- {
- "id": "Nimmons",
- "name": "model-68",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 792.206,
- "floor": 3,
- "navigation_complexity": 6.09,
- "room": 19,
- "ssa": 2.049
- }
- },
- {
- "id": "Noonday",
- "name": "model-224",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 218.453,
- "floor": 4,
- "navigation_complexity": 1.0,
- "room": 16,
- "ssa": 1.356
- }
- },
- {
- "id": "Northgate",
- "name": "model-558",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 98.769,
- "floor": 1,
- "navigation_complexity": 1.0,
- "room": 1,
- "ssa": 1.508
- }
- },
- {
- "id": "Norvelt",
- "name": "model-563",
- "split_full": "none",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 19.028,
- "floor": 1,
- "navigation_complexity": 1.392,
- "room": 3,
- "ssa": 1.607
- }
- },
- {
- "id": "Noxapater",
- "name": "model-264",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "test",
- "stats": {
- "area": 308.385,
- "floor": 4,
- "navigation_complexity": 4.151,
- "room": 12,
- "ssa": 1.82
- }
- },
- {
- "id": "Nuevo",
- "name": "model-505",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 254.781,
- "floor": 3,
- "navigation_complexity": 1.294,
- "room": 16,
- "ssa": 2.016
- }
- },
- {
- "id": "Ogilvie",
- "name": "model-39",
- "split_full": "none",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 47.725,
- "floor": 1,
- "navigation_complexity": 2.0,
- "room": 1,
- "ssa": 1.655
- }
- },
- {
- "id": "Ohoopee",
- "name": "model-248",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 322.951,
- "floor": 4,
- "navigation_complexity": 1.585,
- "room": 19,
- "ssa": 1.725
- }
- },
- {
- "id": "Okabena",
- "name": "model-436",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 804.364,
- "floor": 3,
- "navigation_complexity": 1.624,
- "room": 24,
- "ssa": 1.309
- }
- },
- {
- "id": "Onaga",
- "name": "model-74",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 182.294,
- "floor": 3,
- "navigation_complexity": 5.571,
- "room": 12,
- "ssa": 1.863
- }
- },
- {
- "id": "Ooltewah",
- "name": "model-265",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 664.17,
- "floor": 1,
- "navigation_complexity": 4.907,
- "room": 33,
- "ssa": 1.337
- }
- },
- {
- "id": "Ophir",
- "name": "model-532",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 64.853,
- "floor": 1,
- "navigation_complexity": 1.947,
- "room": 1,
- "ssa": 1.34
- }
- },
- {
- "id": "Orangeburg",
- "name": "model-342",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 891.403,
- "floor": 4,
- "navigation_complexity": 2.414,
- "room": 22,
- "ssa": 1.144
- }
- },
- {
- "id": "Orason",
- "name": "model-205",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 188.151,
- "floor": 1,
- "navigation_complexity": 3.851,
- "room": 2,
- "ssa": 1.483
- }
- },
- {
- "id": "Oriole",
- "name": "model-339",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 360.957,
- "floor": 3,
- "navigation_complexity": 3.436,
- "room": 16,
- "ssa": 1.919
- }
- },
- {
- "id": "Ossipee",
- "name": "model-21",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 92.354,
- "floor": 1,
- "navigation_complexity": 1.224,
- "room": 4,
- "ssa": 1.263
- }
- },
- {
- "id": "Ovalo",
- "name": "model-83",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 269.365,
- "floor": 4,
- "navigation_complexity": 1.0,
- "room": 16,
- "ssa": 1.256
- }
- },
- {
- "id": "Oyens",
- "name": "model-335",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 100.709,
- "floor": 1,
- "navigation_complexity": 5.614,
- "room": 1,
- "ssa": 1.496
- }
- },
- {
- "id": "Pablo",
- "name": "model-486",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "none",
- "stats": {
- "area": 37.789,
- "floor": 1,
- "navigation_complexity": 1.0,
- "room": 4,
- "ssa": 1.883
- }
- },
- {
- "id": "Paige",
- "name": "model-87",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 612.688,
- "floor": 3,
- "navigation_complexity": 2.073,
- "room": 26,
- "ssa": 1.046
- }
- },
- {
- "id": "Pamelia",
- "name": "model-348",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 237.84,
- "floor": 3,
- "navigation_complexity": 5.084,
- "room": 17,
- "ssa": 1.522
- }
- },
- {
- "id": "Parole",
- "name": "model-447",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 55.245,
- "floor": 1,
- "navigation_complexity": 2.658,
- "room": 6,
- "ssa": 1.545
- }
- },
- {
- "id": "Pasatiempo",
- "name": "model-355",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 159.202,
- "floor": 1,
- "navigation_complexity": 1.245,
- "room": 8,
- "ssa": 1.834
- }
- },
- {
- "id": "Peacock",
- "name": "model-34",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 81.688,
- "floor": 1,
- "navigation_complexity": 1.0,
- "room": 9,
- "ssa": 1.533
- }
- },
- {
- "id": "Pearce",
- "name": "model-384",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "none",
- "stats": {
- "area": 513.604,
- "floor": 3,
- "navigation_complexity": 5.5,
- "room": 24,
- "ssa": 1.212
- }
- },
- {
- "id": "Peconic",
- "name": "model-166",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 494.275,
- "floor": 4,
- "navigation_complexity": 1.611,
- "room": 11,
- "ssa": 1.277
- }
- },
- {
- "id": "Peden",
- "name": "model-340",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 68.342,
- "floor": 1,
- "navigation_complexity": 2.26,
- "room": 6,
- "ssa": 1.919
- }
- },
- {
- "id": "Pettigrew",
- "name": "model-525",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 161.586,
- "floor": 1,
- "navigation_complexity": 2.456,
- "room": 11,
- "ssa": 2.061
- }
- },
- {
- "id": "Pinesdale",
- "name": "model-299",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 1071.716,
- "floor": 6,
- "navigation_complexity": 5.686,
- "room": 19,
- "ssa": 1.764
- }
- },
- {
- "id": "Pittsburg",
- "name": "model-492",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "none",
- "stats": {
- "area": 152.529,
- "floor": 4,
- "navigation_complexity": 1.012,
- "room": 11,
- "ssa": 1.024
- }
- },
- {
- "id": "Placida",
- "name": "model-398",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 83.857,
- "floor": 1,
- "navigation_complexity": 1.407,
- "room": 8,
- "ssa": 1.764
- }
- },
- {
- "id": "Pleasant",
- "name": "model-163",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 162.014,
- "floor": 1,
- "navigation_complexity": 2.404,
- "room": 11,
- "ssa": 1.553
- }
- },
- {
- "id": "Plessis",
- "name": "model-228",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 103.245,
- "floor": 2,
- "navigation_complexity": 2.157,
- "room": 9,
- "ssa": 1.821
- }
- },
- {
- "id": "Plumerville",
- "name": "model-485",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 553.505,
- "floor": 3,
- "navigation_complexity": 2.785,
- "room": 15,
- "ssa": 1.883
- }
- },
- {
- "id": "Pocasset",
- "name": "model-393",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 343.544,
- "floor": 4,
- "navigation_complexity": 1.083,
- "room": 24,
- "ssa": 1.049
- }
- },
- {
- "id": "Pocopson",
- "name": "model-118",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 296.255,
- "floor": 1,
- "navigation_complexity": 3.014,
- "room": 12,
- "ssa": 1.297
- }
- },
- {
- "id": "Poipu",
- "name": "model-271",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "none",
- "stats": {
- "area": 522.602,
- "floor": 5,
- "navigation_complexity": 2.825,
- "room": 15,
- "ssa": 1.363
- }
- },
- {
- "id": "Pomaria",
- "name": "model-430",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 612.16,
- "floor": 5,
- "navigation_complexity": 5.661,
- "room": 23,
- "ssa": 1.228
- }
- },
- {
- "id": "Portal",
- "name": "model-92",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 857.078,
- "floor": 4,
- "navigation_complexity": 1.745,
- "room": 19,
- "ssa": 1.03
- }
- },
- {
- "id": "Portola",
- "name": "model-314",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 718.033,
- "floor": 4,
- "navigation_complexity": 6.196,
- "room": 19,
- "ssa": 0.785
- }
- },
- {
- "id": "Potosi",
- "name": "model-350",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 513.183,
- "floor": 4,
- "navigation_complexity": 1.701,
- "room": 23,
- "ssa": 0.81
- }
- },
- {
- "id": "Potterville",
- "name": "model-457",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 427.967,
- "floor": 4,
- "navigation_complexity": 3.929,
- "room": 12,
- "ssa": 1.224
- }
- },
- {
- "id": "Poyen",
- "name": "model-230",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 680.296,
- "floor": 3,
- "navigation_complexity": 1.885,
- "room": 18,
- "ssa": 1.637
- }
- },
- {
- "id": "Purple",
- "name": "model-210",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 737.666,
- "floor": 4,
- "navigation_complexity": 2.051,
- "room": 30,
- "ssa": 1.868
- }
- },
- {
- "id": "Quantico",
- "name": "model-108",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 85.135,
- "floor": 1,
- "navigation_complexity": 2.576,
- "room": 6,
- "ssa": 1.647
- }
- },
- {
- "id": "Rabbit",
- "name": "model-540",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 60.857,
- "floor": 1,
- "navigation_complexity": 3.3,
- "room": 2,
- "ssa": 1.641
- }
- },
- {
- "id": "Ranchester",
- "name": "model-552",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 741.032,
- "floor": 4,
- "navigation_complexity": 6.666,
- "room": 18,
- "ssa": 1.391
- }
- },
- {
- "id": "Rancocas",
- "name": "model-20",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 116.738,
- "floor": 1,
- "navigation_complexity": 3.694,
- "room": 7,
- "ssa": 1.425
- }
- },
- {
- "id": "Random",
- "name": "model-440",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 295.808,
- "floor": 3,
- "navigation_complexity": 1.005,
- "room": 16,
- "ssa": 1.576
- }
- },
- {
- "id": "Readsboro",
- "name": "model-524",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 439.666,
- "floor": 4,
- "navigation_complexity": 6.789,
- "room": 17,
- "ssa": 1.687
- }
- },
- {
- "id": "Redbank",
- "name": "model-365",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 673.551,
- "floor": 5,
- "navigation_complexity": 3.915,
- "room": 19,
- "ssa": 0.988
- }
- },
- {
- "id": "Reserve",
- "name": "model-7",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 660.009,
- "floor": 4,
- "navigation_complexity": 2.8,
- "room": 20,
- "ssa": 1.741
- }
- },
- {
- "id": "Retsof",
- "name": "model-404",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 499.225,
- "floor": 4,
- "navigation_complexity": 1.304,
- "room": 23,
- "ssa": 1.346
- }
- },
- {
- "id": "Reyno",
- "name": "model-306",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 736.104,
- "floor": 3,
- "navigation_complexity": 4.31,
- "room": 26,
- "ssa": 1.988
- }
- },
- {
- "id": "Ribera",
- "name": "model-487",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 50.645,
- "floor": 1,
- "navigation_complexity": 1.666,
- "room": 3,
- "ssa": 0.823
- }
- },
- {
- "id": "Roane",
- "name": "model-37",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 65.459,
- "floor": 1,
- "navigation_complexity": 1.87,
- "room": 3,
- "ssa": 0.936
- }
- },
- {
- "id": "Rockport",
- "name": "model-415",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "none",
- "stats": {
- "area": 208.37,
- "floor": 3,
- "navigation_complexity": 1.395,
- "room": 12,
- "ssa": 0.879
- }
- },
- {
- "id": "Roeville",
- "name": "model-304",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 484.984,
- "floor": 4,
- "navigation_complexity": 1.03,
- "room": 21,
- "ssa": 1.008
- }
- },
- {
- "id": "Rogue",
- "name": "model-200",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 440.36,
- "floor": 4,
- "navigation_complexity": 3.967,
- "room": 21,
- "ssa": 1.546
- }
- },
- {
- "id": "Rosenberg",
- "name": "model-545",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 86.103,
- "floor": 1,
- "navigation_complexity": 2.37,
- "room": 5,
- "ssa": 1.66
- }
- },
- {
- "id": "Rosser",
- "name": "model-470",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 29.918,
- "floor": 1,
- "navigation_complexity": 1.373,
- "room": 4,
- "ssa": 1.238
- }
- },
- {
- "id": "Rough",
- "name": "model-557",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 518.468,
- "floor": 3,
- "navigation_complexity": 5.971,
- "room": 6,
- "ssa": 1.508
- }
- },
- {
- "id": "Roxboro",
- "name": "model-477",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 62.206,
- "floor": 1,
- "navigation_complexity": 2.79,
- "room": 1,
- "ssa": 1.21
- }
- },
- {
- "id": "Ruckersville",
- "name": "model-268",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 913.224,
- "floor": 1,
- "navigation_complexity": 7.826,
- "room": 39,
- "ssa": 1.44
- }
- },
- {
- "id": "Rutherford",
- "name": "model-51",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 560.797,
- "floor": 2,
- "navigation_complexity": 4.638,
- "room": 16,
- "ssa": 1.791
- }
- },
- {
- "id": "Sagerton",
- "name": "model-222",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 391.372,
- "floor": 3,
- "navigation_complexity": 2.814,
- "room": 23,
- "ssa": 1.398
- }
- },
- {
- "id": "Samuels",
- "name": "model-522",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 117.083,
- "floor": 1,
- "navigation_complexity": 1.734,
- "room": 10,
- "ssa": 1.96
- }
- },
- {
- "id": "Sanctuary",
- "name": "model-310",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 289.285,
- "floor": 1,
- "navigation_complexity": 3.823,
- "room": 19,
- "ssa": 1.083
- }
- },
- {
- "id": "Sands",
- "name": "model-102",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "none",
- "stats": {
- "area": 153.132,
- "floor": 3,
- "navigation_complexity": 2.109,
- "room": 10,
- "ssa": 1.352
- }
- },
- {
- "id": "Sarcoxie",
- "name": "model-332",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 286.12,
- "floor": 3,
- "navigation_complexity": 1.089,
- "room": 12,
- "ssa": 1.443
- }
- },
- {
- "id": "Sargents",
- "name": "model-490",
- "split_full": "none",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 5930.231,
- "floor": 3,
- "navigation_complexity": 18.039,
- "room": 76,
- "ssa": 0.885
- }
- },
- {
- "id": "Sasakwa",
- "name": "model-144",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 45.35,
- "floor": 1,
- "navigation_complexity": 2.543,
- "room": 5,
- "ssa": 1.134
- }
- },
- {
- "id": "Sawpit",
- "name": "model-459",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 77.847,
- "floor": 1,
- "navigation_complexity": 2.074,
- "room": 6,
- "ssa": 1.274
- }
- },
- {
- "id": "Scandinavia",
- "name": "model-535",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 531.017,
- "floor": 3,
- "navigation_complexity": 2.885,
- "room": 22,
- "ssa": 0.794
- }
- },
- {
- "id": "Schiller",
- "name": "model-416",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 599.407,
- "floor": 4,
- "navigation_complexity": 3.049,
- "room": 22,
- "ssa": 0.879
- }
- },
- {
- "id": "Schoolcraft",
- "name": "model-145",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 882.38,
- "floor": 1,
- "navigation_complexity": 1.67,
- "room": 3,
- "ssa": 1.561
- }
- },
- {
- "id": "Scioto",
- "name": "model-372",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "none",
- "stats": {
- "area": 512.963,
- "floor": 5,
- "navigation_complexity": 1.072,
- "room": 23,
- "ssa": 1.116
- }
- },
- {
- "id": "Scottsmoor",
- "name": "model-567",
- "split_full": "none",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 61.099,
- "floor": 1,
- "navigation_complexity": 1.0,
- "room": 1,
- "ssa": 1.851
- }
- },
- {
- "id": "Seatonville",
- "name": "model-475",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 2832.57,
- "floor": 6,
- "navigation_complexity": 7.291,
- "room": 3,
- "ssa": 1.297
- }
- },
- {
- "id": "Seeley",
- "name": "model-237",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 554.521,
- "floor": 3,
- "navigation_complexity": 2.365,
- "room": 22,
- "ssa": 1.609
- }
- },
- {
- "id": "Seiling",
- "name": "model-390",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1020.102,
- "floor": 1,
- "navigation_complexity": 2.771,
- "room": 5,
- "ssa": 0.82
- }
- },
- {
- "id": "Seward",
- "name": "model-421",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 59.1,
- "floor": 1,
- "navigation_complexity": 1.016,
- "room": 5,
- "ssa": 1.583
- }
- },
- {
- "id": "Sharon",
- "name": "model-212",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1398.591,
- "floor": 6,
- "navigation_complexity": 6.9,
- "room": 19,
- "ssa": 1.104
- }
- },
- {
- "id": "Shauck",
- "name": "model-445",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 520.761,
- "floor": 4,
- "navigation_complexity": 2.128,
- "room": 23,
- "ssa": 1.375
- }
- },
- {
- "id": "Shelbiana",
- "name": "model-528",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 97.743,
- "floor": 1,
- "navigation_complexity": 3.972,
- "room": 10,
- "ssa": 1.601
- }
- },
- {
- "id": "Shelbyville",
- "name": "model-455",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 544.749,
- "floor": 4,
- "navigation_complexity": 5.265,
- "room": 29,
- "ssa": 1.302
- }
- },
- {
- "id": "Shellsburg",
- "name": "model-44",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1155.826,
- "floor": 4,
- "navigation_complexity": 1.116,
- "room": 24,
- "ssa": 1.896
- }
- },
- {
- "id": "Sherrill",
- "name": "model-553",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 3081.432,
- "floor": 4,
- "navigation_complexity": 15.187,
- "room": 46,
- "ssa": 1.074
- }
- },
- {
- "id": "Shingler",
- "name": "model-187",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 105.358,
- "floor": 1,
- "navigation_complexity": 1.0,
- "room": 8,
- "ssa": 1.662
- }
- },
- {
- "id": "Shumway",
- "name": "model-419",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 521.75,
- "floor": 4,
- "navigation_complexity": 1.995,
- "room": 21,
- "ssa": 1.208
- }
- },
- {
- "id": "Silas",
- "name": "model-48",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 345.962,
- "floor": 3,
- "navigation_complexity": 1.05,
- "room": 18,
- "ssa": 1.241
- }
- },
- {
- "id": "Silerton",
- "name": "model-269",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 441.747,
- "floor": 4,
- "navigation_complexity": 1.438,
- "room": 17,
- "ssa": 1.643
- }
- },
- {
- "id": "Silva",
- "name": "model-250",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 626.12,
- "floor": 3,
- "navigation_complexity": 3.337,
- "room": 18,
- "ssa": 1.241
- }
- },
- {
- "id": "Siren",
- "name": "model-483",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 739.196,
- "floor": 3,
- "navigation_complexity": 5.496,
- "room": 23,
- "ssa": 2.332
- }
- },
- {
- "id": "Sisters",
- "name": "model-431",
- "split_full": "none",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 94.529,
- "floor": 2,
- "navigation_complexity": 1.318,
- "room": 6,
- "ssa": 1.743
- }
- },
- {
- "id": "Smoketown",
- "name": "model-426",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 617.315,
- "floor": 3,
- "navigation_complexity": 1.977,
- "room": 16,
- "ssa": 1.189
- }
- },
- {
- "id": "Sodaville",
- "name": "model-120",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 114.409,
- "floor": 2,
- "navigation_complexity": 2.087,
- "room": 8,
- "ssa": 1.431
- }
- },
- {
- "id": "Soldier",
- "name": "model-270",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 262.672,
- "floor": 3,
- "navigation_complexity": 4.147,
- "room": 11,
- "ssa": 1.643
- }
- },
- {
- "id": "Sontag",
- "name": "model-448",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 680.769,
- "floor": 4,
- "navigation_complexity": 1.368,
- "room": 17,
- "ssa": 1.545
- }
- },
- {
- "id": "Southfield",
- "name": "model-111",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "none",
- "stats": {
- "area": 797.823,
- "floor": 5,
- "navigation_complexity": 1.6,
- "room": 21,
- "ssa": 1.609
- }
- },
- {
- "id": "Spencerville",
- "name": "model-471",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 72.589,
- "floor": 1,
- "navigation_complexity": 1.768,
- "room": 4,
- "ssa": 1.149
- }
- },
- {
- "id": "Spotswood",
- "name": "model-452",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 292.725,
- "floor": 3,
- "navigation_complexity": 3.662,
- "room": 15,
- "ssa": 1.415
- }
- },
- {
- "id": "Spread",
- "name": "model-236",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 760.574,
- "floor": 3,
- "navigation_complexity": 2.945,
- "room": 20,
- "ssa": 1.219
- }
- },
- {
- "id": "Springerville",
- "name": "model-491",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 291.831,
- "floor": 3,
- "navigation_complexity": 5.566,
- "room": 12,
- "ssa": 1.024
- }
- },
- {
- "id": "Springhill",
- "name": "model-43",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 549.54,
- "floor": 4,
- "navigation_complexity": 1.388,
- "room": 11,
- "ssa": 1.896
- }
- },
- {
- "id": "Stanleyville",
- "name": "model-423",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 283.356,
- "floor": 3,
- "navigation_complexity": 3.199,
- "room": 11,
- "ssa": 1.353
- }
- },
- {
- "id": "Starks",
- "name": "model-235",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 353.106,
- "floor": 3,
- "navigation_complexity": 2.954,
- "room": 16,
- "ssa": 1.219
- }
- },
- {
- "id": "Stigler",
- "name": "model-45",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 3134.479,
- "floor": 2,
- "navigation_complexity": 16.449,
- "room": 37,
- "ssa": 1.847
- }
- },
- {
- "id": "Stilwell",
- "name": "model-514",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 358.399,
- "floor": 3,
- "navigation_complexity": 7.782,
- "room": 16,
- "ssa": 1.136
- }
- },
- {
- "id": "Stockertown",
- "name": "model-152",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 844.615,
- "floor": 4,
- "navigation_complexity": 4.842,
- "room": 37,
- "ssa": 0.9
- }
- },
- {
- "id": "Stockman",
- "name": "model-255",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 740.969,
- "floor": 4,
- "navigation_complexity": 7.157,
- "room": 27,
- "ssa": 2.173
- }
- },
- {
- "id": "Stockwell",
- "name": "model-460",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 629.624,
- "floor": 3,
- "navigation_complexity": 1.251,
- "room": 20,
- "ssa": 1.274
- }
- },
- {
- "id": "Stokes",
- "name": "model-198",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 276.521,
- "floor": 3,
- "navigation_complexity": 4.085,
- "room": 9,
- "ssa": 1.455
- }
- },
- {
- "id": "Sugarville",
- "name": "model-27",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 564.827,
- "floor": 3,
- "navigation_complexity": 5.236,
- "room": 16,
- "ssa": 1.957
- }
- },
- {
- "id": "Sultan",
- "name": "model-427",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 357.887,
- "floor": 1,
- "navigation_complexity": 3.541,
- "room": 16,
- "ssa": 1.645
- }
- },
- {
- "id": "Sumas",
- "name": "model-473",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 45.342,
- "floor": 1,
- "navigation_complexity": 2.888,
- "room": 3,
- "ssa": 1.353
- }
- },
- {
- "id": "Sundown",
- "name": "model-85",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 165.31,
- "floor": 1,
- "navigation_complexity": 3.82,
- "room": 9,
- "ssa": 1.287
- }
- },
- {
- "id": "Sunshine",
- "name": "model-392",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 1166.008,
- "floor": 5,
- "navigation_complexity": 3.056,
- "room": 28,
- "ssa": 0.9
- }
- },
- {
- "id": "Superior",
- "name": "model-18",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 220.462,
- "floor": 1,
- "navigation_complexity": 5.106,
- "room": 14,
- "ssa": 1.84
- }
- },
- {
- "id": "Sussex",
- "name": "model-364",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 405.669,
- "floor": 3,
- "navigation_complexity": 8.84,
- "room": 17,
- "ssa": 1.281
- }
- },
- {
- "id": "Sweatman",
- "name": "model-413",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 108.333,
- "floor": 1,
- "navigation_complexity": 4.382,
- "room": 6,
- "ssa": 0.871
- }
- },
- {
- "id": "Swisshome",
- "name": "model-370",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "none",
- "stats": {
- "area": 377.373,
- "floor": 4,
- "navigation_complexity": 2.844,
- "room": 20,
- "ssa": 1.637
- }
- },
- {
- "id": "Swormville",
- "name": "model-298",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "none",
- "stats": {
- "area": 66.793,
- "floor": 1,
- "navigation_complexity": 3.213,
- "room": 7,
- "ssa": 0.944
- }
- },
- {
- "id": "Tallmadge",
- "name": "model-185",
- "split_full": "none",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 56.185,
- "floor": 1,
- "navigation_complexity": 1.483,
- "room": 4,
- "ssa": 1.442
- }
- },
- {
- "id": "Tansboro",
- "name": "model-24",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 378.932,
- "floor": 3,
- "navigation_complexity": 1.941,
- "room": 20,
- "ssa": 2.077
- }
- },
- {
- "id": "Tariffville",
- "name": "model-544",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 160.382,
- "floor": 1,
- "navigation_complexity": 3.569,
- "room": 8,
- "ssa": 2.011
- }
- },
- {
- "id": "Terrell",
- "name": "model-127",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 694.299,
- "floor": 1,
- "navigation_complexity": 1.837,
- "room": 34,
- "ssa": 1.161
- }
- },
- {
- "id": "Texasville",
- "name": "model-93",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 355.121,
- "floor": 3,
- "navigation_complexity": 2.11,
- "room": 16,
- "ssa": 1.602
- }
- },
- {
- "id": "Thrall",
- "name": "model-181",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 1106.305,
- "floor": 3,
- "navigation_complexity": 7.456,
- "room": 28,
- "ssa": 1.56
- }
- },
- {
- "id": "Tilghmanton",
- "name": "model-292",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 605.518,
- "floor": 4,
- "navigation_complexity": 2.651,
- "room": 15,
- "ssa": 1.271
- }
- },
- {
- "id": "Tillman",
- "name": "model-195",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1387.564,
- "floor": 1,
- "navigation_complexity": 4.747,
- "room": 32,
- "ssa": 1.16
- }
- },
- {
- "id": "Timberon",
- "name": "model-161",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 296.948,
- "floor": 4,
- "navigation_complexity": 1.6,
- "room": 17,
- "ssa": 1.046
- }
- },
- {
- "id": "Tippecanoe",
- "name": "model-188",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 154.358,
- "floor": 2,
- "navigation_complexity": 1.786,
- "room": 7,
- "ssa": 1.662
- }
- },
- {
- "id": "Tokeland",
- "name": "model-69",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 315.287,
- "floor": 3,
- "navigation_complexity": 1.045,
- "room": 13,
- "ssa": 1.416
- }
- },
- {
- "id": "Tolstoy",
- "name": "model-454",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 543.053,
- "floor": 3,
- "navigation_complexity": 6.657,
- "room": 19,
- "ssa": 1.297
- }
- },
- {
- "id": "Tomales",
- "name": "model-42",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 415.188,
- "floor": 3,
- "navigation_complexity": 1.044,
- "room": 17,
- "ssa": 1.975
- }
- },
- {
- "id": "Tomkins",
- "name": "model-77",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 850.745,
- "floor": 3,
- "navigation_complexity": 4.928,
- "room": 28,
- "ssa": 1.732
- }
- },
- {
- "id": "Torrington",
- "name": "model-482",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 781.388,
- "floor": 4,
- "navigation_complexity": 2.674,
- "room": 30,
- "ssa": 1.256
- }
- },
- {
- "id": "Touhy",
- "name": "model-456",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 668.494,
- "floor": 4,
- "navigation_complexity": 2.306,
- "room": 15,
- "ssa": 1.302
- }
- },
- {
- "id": "Tradewinds",
- "name": "model-394",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 112.227,
- "floor": 1,
- "navigation_complexity": 2.865,
- "room": 1,
- "ssa": 1.049
- }
- },
- {
- "id": "Trail",
- "name": "model-162",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 535.171,
- "floor": 4,
- "navigation_complexity": 3.123,
- "room": 20,
- "ssa": 1.046
- }
- },
- {
- "id": "Traver",
- "name": "model-251",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 390.532,
- "floor": 3,
- "navigation_complexity": 3.308,
- "room": 18,
- "ssa": 1.494
- }
- },
- {
- "id": "Tyler",
- "name": "model-26",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 216.845,
- "floor": 3,
- "navigation_complexity": 2.21,
- "room": 13,
- "ssa": 1.924
- }
- },
- {
- "id": "Tysons",
- "name": "model-494",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 712.519,
- "floor": 3,
- "navigation_complexity": 3.156,
- "room": 27,
- "ssa": 1.941
- }
- },
- {
- "id": "Umpqua",
- "name": "model-136",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 400.83,
- "floor": 3,
- "navigation_complexity": 1.976,
- "room": 15,
- "ssa": 0.909
- }
- },
- {
- "id": "Uncertain",
- "name": "model-529",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 150.664,
- "floor": 1,
- "navigation_complexity": 1.283,
- "room": 1,
- "ssa": 0.938
- }
- },
- {
- "id": "Upham",
- "name": "model-389",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1840.942,
- "floor": 6,
- "navigation_complexity": 6.869,
- "room": 48,
- "ssa": 0.82
- }
- },
- {
- "id": "Uvalda",
- "name": "model-131",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "test",
- "stats": {
- "area": 616.935,
- "floor": 5,
- "navigation_complexity": 3.875,
- "room": 28,
- "ssa": 1.174
- }
- },
- {
- "id": "Vacherie",
- "name": "model-29",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 455.855,
- "floor": 3,
- "navigation_complexity": 5.836,
- "room": 9,
- "ssa": 1.673
- }
- },
- {
- "id": "Vails",
- "name": "model-225",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 97.904,
- "floor": 2,
- "navigation_complexity": 1.313,
- "room": 3,
- "ssa": 1.526
- }
- },
- {
- "id": "Victorville",
- "name": "model-353",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 455.395,
- "floor": 4,
- "navigation_complexity": 5.257,
- "room": 23,
- "ssa": 2.052
- }
- },
- {
- "id": "Voorhees",
- "name": "model-227",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 269.619,
- "floor": 1,
- "navigation_complexity": 4.354,
- "room": 12,
- "ssa": 1.821
- }
- },
- {
- "id": "Waimea",
- "name": "model-88",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 684.211,
- "floor": 4,
- "navigation_complexity": 1.404,
- "room": 28,
- "ssa": 1.046
- }
- },
- {
- "id": "Wainscott",
- "name": "model-541",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 635.302,
- "floor": 3,
- "navigation_complexity": 11.597,
- "room": 21,
- "ssa": 1.28
- }
- },
- {
- "id": "Waipahu",
- "name": "model-444",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "none",
- "stats": {
- "area": 217.547,
- "floor": 4,
- "navigation_complexity": 1.459,
- "room": 10,
- "ssa": 1.457
- }
- },
- {
- "id": "Wakeman",
- "name": "model-286",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 420.228,
- "floor": 4,
- "navigation_complexity": 2.558,
- "room": 27,
- "ssa": 1.067
- }
- },
- {
- "id": "Waldenburg",
- "name": "model-410",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 289.497,
- "floor": 1,
- "navigation_complexity": 5.257,
- "room": 4,
- "ssa": 0.821
- }
- },
- {
- "id": "Wando",
- "name": "model-221",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "test",
- "split_tiny": "none",
- "stats": {
- "area": 75.131,
- "floor": 1,
- "navigation_complexity": 3.396,
- "room": 5,
- "ssa": 1.398
- }
- },
- {
- "id": "Wappingers",
- "name": "model-183",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 905.911,
- "floor": 3,
- "navigation_complexity": 3.133,
- "room": 23,
- "ssa": 1.012
- }
- },
- {
- "id": "Warrenville",
- "name": "model-300",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 394.612,
- "floor": 4,
- "navigation_complexity": 1.331,
- "room": 14,
- "ssa": 1.764
- }
- },
- {
- "id": "Wattsville",
- "name": "model-263",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 128.299,
- "floor": 1,
- "navigation_complexity": 1.0,
- "room": 8,
- "ssa": 1.82
- }
- },
- {
- "id": "Waucousta",
- "name": "model-239",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 372.016,
- "floor": 4,
- "navigation_complexity": 2.552,
- "room": 14,
- "ssa": 1.575
- }
- },
- {
- "id": "Waukeenah",
- "name": "model-115",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 215.282,
- "floor": 4,
- "navigation_complexity": 5.885,
- "room": 12,
- "ssa": 1.613
- }
- },
- {
- "id": "Webster",
- "name": "model-175",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 788.23,
- "floor": 1,
- "navigation_complexity": 2.64,
- "room": 8,
- "ssa": 1.091
- }
- },
- {
- "id": "Weleetka",
- "name": "model-245",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 1357.157,
- "floor": 4,
- "navigation_complexity": 8.402,
- "room": 26,
- "ssa": 0.498
- }
- },
- {
- "id": "Wells",
- "name": "model-371",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 120.708,
- "floor": 1,
- "navigation_complexity": 3.345,
- "room": 9,
- "ssa": 1.116
- }
- },
- {
- "id": "Wesley",
- "name": "model-70",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 477.22,
- "floor": 3,
- "navigation_complexity": 2.512,
- "room": 19,
- "ssa": 1.416
- }
- },
- {
- "id": "Westerville",
- "name": "model-297",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 359.709,
- "floor": 3,
- "navigation_complexity": 2.337,
- "room": 13,
- "ssa": 0.944
- }
- },
- {
- "id": "Westfield",
- "name": "model-319",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "none",
- "stats": {
- "area": 474.859,
- "floor": 3,
- "navigation_complexity": 5.559,
- "room": 23,
- "ssa": 1.593
- }
- },
- {
- "id": "Whiteriver",
- "name": "model-262",
- "split_full": "none",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 331.766,
- "floor": 5,
- "navigation_complexity": 1.967,
- "room": 25,
- "ssa": 1.438
- }
- },
- {
- "id": "Whitethorn",
- "name": "model-154",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 108.069,
- "floor": 1,
- "navigation_complexity": 1.21,
- "room": 6,
- "ssa": 1.008
- }
- },
- {
- "id": "Wiconisco",
- "name": "model-137",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "val",
- "stats": {
- "area": 736.625,
- "floor": 5,
- "navigation_complexity": 6.327,
- "room": 28,
- "ssa": 1.827
- }
- },
- {
- "id": "Wilbraham",
- "name": "model-503",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 75.49,
- "floor": 1,
- "navigation_complexity": 1.925,
- "room": 6,
- "ssa": 1.616
- }
- },
- {
- "id": "Wilkesboro",
- "name": "model-192",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 734.661,
- "floor": 4,
- "navigation_complexity": 1.791,
- "room": 19,
- "ssa": 1.195
- }
- },
- {
- "id": "Wilkinsburg",
- "name": "model-377",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 518.876,
- "floor": 3,
- "navigation_complexity": 4.693,
- "room": 24,
- "ssa": 1.175
- }
- },
- {
- "id": "Willow",
- "name": "model-151",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 662.264,
- "floor": 3,
- "navigation_complexity": 6.441,
- "room": 24,
- "ssa": 0.9
- }
- },
- {
- "id": "Wilseyville",
- "name": "model-174",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 338.51,
- "floor": 4,
- "navigation_complexity": 2.372,
- "room": 21,
- "ssa": 1.342
- }
- },
- {
- "id": "Windhorst",
- "name": "model-559",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 88.42,
- "floor": 1,
- "navigation_complexity": 1.518,
- "room": 7,
- "ssa": 0.678
- }
- },
- {
- "id": "Winfield",
- "name": "model-414",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 848.274,
- "floor": 5,
- "navigation_complexity": 1.733,
- "room": 19,
- "ssa": 0.871
- }
- },
- {
- "id": "Winooski",
- "name": "model-337",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "none",
- "stats": {
- "area": 1028.84,
- "floor": 5,
- "navigation_complexity": 4.2,
- "room": 70,
- "ssa": 0.742
- }
- },
- {
- "id": "Winthrop",
- "name": "model-55",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 419.476,
- "floor": 4,
- "navigation_complexity": 1.0,
- "room": 18,
- "ssa": 1.931
- }
- },
- {
- "id": "Woodbine",
- "name": "model-411",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "train",
- "split_tiny": "train",
- "stats": {
- "area": 984.751,
- "floor": 4,
- "navigation_complexity": 7.201,
- "room": 20,
- "ssa": 0.916
- }
- },
- {
- "id": "Woonsocket",
- "name": "model-12",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 82.938,
- "floor": 1,
- "navigation_complexity": 2.273,
- "room": 4,
- "ssa": 1.91
- }
- },
- {
- "id": "Wyatt",
- "name": "model-478",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 716.924,
- "floor": 3,
- "navigation_complexity": 9.961,
- "room": 22,
- "ssa": 1.21
- }
- },
- {
- "id": "Wyldwood",
- "name": "model-330",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "val",
- "split_tiny": "none",
- "stats": {
- "area": 191.908,
- "floor": 4,
- "navigation_complexity": 1.226,
- "room": 12,
- "ssa": 1.156
- }
- },
- {
- "id": "Yadkinville",
- "name": "model-571",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 504.718,
- "floor": 3,
- "navigation_complexity": 3.82,
- "room": 18,
- "ssa": 1.402
- }
- },
- {
- "id": "Yankeetown",
- "name": "model-321",
- "split_full": "train",
- "split_full+": "train",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 842.17,
- "floor": 3,
- "navigation_complexity": 2.917,
- "room": 17,
- "ssa": 1.68
- }
- },
- {
- "id": "Yscloskey",
- "name": "model-458",
- "split_full": "val",
- "split_full+": "val",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 370.472,
- "floor": 3,
- "navigation_complexity": 3.26,
- "room": 16,
- "ssa": 1.224
- }
- }
-]
\ No newline at end of file
diff --git a/gibson2/utils/data_utils/ext_object/README.md b/gibson2/utils/data_utils/ext_object/README.md
new file mode 100644
index 000000000..0e3e274cf
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_object/README.md
@@ -0,0 +1,151 @@
+# Import an object into iGibson
+
+To use your own object model in iGibson, it needs be converted to the object format described here: [data format](../README.md).
+
+Here we provide an automated pipeline to execute this conversion (from *.obj* to iGibson format) by running a provided script. This script makes use of the software Blender, which needs to be installed first. You won't need to use blender directly, as the script calls it automatically.
+
+The example script executes 5 main steps, outlined below. It ends by generating a video of the new object rendered in iGibson. For example:
+
+
+
+Above shows the result of processing an object from [Google Ignition](https://app.ignitionrobotics.org/GoogleResearch/fuel/models/Vtech_Stack_Sing_Rings_636_Months)
+
+We currently only offer support for Linux.
+
+## Installing Blender
+
+We use Blender 2.82 for mesh processing. Follow the instruction here: [blender_utils](../blender_utils/) for guide on installation.
+
+## Prerequisites on object data
+
+First, each individual object model should have all of its files in a single folder. And each object model should have its own separate folder.
+
+To import a rigid-body object, the following files and properties are needed as prerequisite:
+1. **Mesh(es)**: the object can consist of a single *.obj* file or a list of *.obj* files.
+2. **Material** (optional): The material (*.mtl*, and textures files) are correctly linked. All *.obj* should be in the same directory, and the directory should contain *.obj*s only from the given object.
+3. **Pose**: meshes are correctly facing forward (e.g. a camera's lens is front-facing)
+4. **Scale**: meshes have correct scale.
+5. **Category**: in iGibson, we need the object category label to render semantics. The label is required here as an input to the processing scripts.
+
+Note: You can make sure the meshes are correct by importing the meshes into MeshLab/Blender.
+
+## Default end-to-end processing of the data
+
+Our processing on the data consists of various components each of which can be customized. For the ease of user, we provide a simple script that uses default options for all steps.
+
+To process an object with default options, you can run the following command:
+```
+./process_object.sh $DIRECTORY $CATEGORY
+```
+two parameters need to be specified:
+1. **$DIRECTORY**: the folder in which the original files live.
+2. **$CATEGORY**: a category label of the object.
+
+Additionally, the meshes are assumed to have **positive-Z axis pointing up** and **positive positive-X axis pointing forward**. (if not, you can pass in the correct axis in [Step 1](#step-1-visual-mesh-processing))
+
+
+The script will perform the following operations:
+- [Step 1](#step-1-visual-mesh-processing): Process the original meshes using Blender and export as visual meshes to *shape/visual*.
+- [Step 2](#step-2-collision-mesh-processing): For all meshes, calculate the collision mesh in *shape/collision* using [V-HACD](https://github.com/kmammou/v-hacd) and optionally Blender.
+- [Step 3](#step-3-generating-object-link-data): Generate *misc/metadata.json, misc/material_groups.json*.
+- [Step 4](#step-4-generating-object-urdf): Generate object's URDF file.
+- [Step 5](#step-5-generating-visualization): Generate video visualization of object rendered in iGibson renderer.
+
+Each step will use the default options.
+
+The name of the object will be ```OBJECT_NAME= basename $DIRECTORY```. The object will be generated at location ```objects/$CATEGORY/OBJECT_NAME``` with in the directory containing iGibson assets, which is by default: ```gibson2/ig_dataset``` (see more on configuring dataset path [here](http://svl.stanford.edu/igibson/docs/dataset.html#download-igibson-data) )
+
+## (Optional) Details on individual steps:
+
+### Step 1: visual mesh processing
+
+For step 1, the following script is used: [scripts/step_1_visual_mesh.py](scripts/step_1_visual_mesh.py).
+The script performs the following functionalities:
+1. core functionality: import the *.obj* files to Blender. And
+- write out meshes in Z-up X-forward format;
+- write out vertex normal;
+- write out all faces as triangles.
+2. optional functionality:
+- [texture baking](https://docs.blender.org/manual/en/latest/render/cycles/baking.html) (by passing in flag --bake): baking textures for rendering in iGibson engines. The baking process will first UV-unwrap the object mesh. Then four channels used for iGibson's PBR rendering will be baked: diffuse color, tangent normal, metallic, roughness.
+**Note**: if your object model contains multiple texture maps (aka *.mtl* file links to image textures), please **do not** perform baking.
+
+Required parameters:
+1. --source_dir: the source directory where the object assets are located.
+2. --dest_dir: the destination directory where the object assets should be exported to. To use in iGibson, the path should be: *$IGIBSON_ROOT/objects/$CATEGORY/$OBJECT_NAME*.
+
+Additional flags of the script are:
+1. --bake: whether textures should be baked. See above.
+2. --up: up axis of the original assets, should be among {X,Y,Z,-X,-Y,-Z}.
+3. --forward: forward axis of the original assets, should be among {X,Y,Z,-X,-Y,-Z}.
+
+Example use:
+```
+blender -b --python step_1_visual_mesh.py --bake --up Z --forward X --source_dir {PATH_TO_YOUR_OBJECT} --dest_dir {PATH_TO_IGIBSON_ASSET}/objects/{OBJECT_CATEGORY}/{OBJECT_NAME}
+```
+
+### Step 2: collision mesh processing
+
+For step 2, the following script is used: [scripts/step_2_collision_mesh.py](scripts/step_2_collision_mesh.py).
+The script performs the following functionalities:
+1. core funtionality: for each visual mesh component, calculate its collision mesh using [V-HACD](https://github.com/kmammou/v-hacd), and merge all the generated collision meshes into a final collision mesh for the object.
+2. optional functionality:
+- splitting loose parts (by passing in flag --split_loose): when calculating the collision mesh, first split each visual mesh into its loose parts, and calculate collision mesh for each part. Note that this will create a more fine-grained collision mesh, but can induce a heavier computation load when performing physics simulation in iGibson.
+
+Required parameters:
+1. --input_dir: directory containing the visual meshes (by iGibson data format, it should be in *shape/visual*).
+2. --output_dir: directory in which the collision mesh should be stored (by iGibson data format, it should be in *shape/collision*).
+3. --object_name: name of the object.
+
+Example use:
+```
+python step_2_collision_mesh.py --input_dir {PATH_TO_IGIBSON_ASSET}/objects/{OBJECT_CATEGORY}/{OBJECT_NAME}/shape/visual --output_dir {PATH_TO_IGIBSON_ASSET}/objects/{OBJECT_CATEGORY}/{OBJECT_NAME}/shape/collision --object_name {OBJECT_NAME} --split_loose
+```
+
+
+### Step 3: generating object meta-data
+
+For step 3, the following script is used: [scripts/step_3_metadata.py](scripts/step_3_metadata.py).
+The script performs the following functionalities:
+1. Calculate the bounding box information of the object, which is used in iGibson's object randomization.
+2. Generate the material information of the object, which is used in iGibson's material randomization.
+
+To specify the material of your object, you can use --material to pass in a list of comma separated materials (e.g. *--material wood,metal,marble*). The supported materials of iGibson are:
+```
+['asphalt', 'bricks', 'ceramic', 'metal_diamond_plate', 'paper', 'chipboard', 'wood_floor', 'rocks', 'ground', 'fabric', 'snow', 'plastic', 'rubber', 'paint', 'wood', 'fabric_carpet', 'porcelain', 'tiles', 'corrugated_steel', 'plaster', 'moss', 'terrazzo', 'paving_stones', 'leather', 'metal', 'marble', 'concrete', 'planks']
+```
+Required parameters:
+1. --input_dir: the root directory of the object, which should be: *$IGIBSON_ROOT/objects/$CATEGORY/$OBJECT_NAME*.
+
+Example use:
+```
+python step_3_metadata.py --input_dir {PATH_TO_IGIBSON_ASSET}/objects/{OBJECT_CATEGORY}/{OBJECT_NAME} --material ceramic,marble
+```
+
+### Step 4: generating object URDF
+
+For step 4, the following script is used: [scripts/step_4_urdf.py](scripts/step_4_urdf.py).
+The script generates a simple single-link URDF for the object.
+
+Required parameters:
+1. --input_dir: the root directory of the object, which should be: *$IGIBSON_ROOT/objects/$CATEGORY/$OBJECT_NAME*.
+
+Optional parameters:
+1. --mass: the mass of the object.
+
+Example use:
+```
+python step_4_urdf.py --input_dir {PATH_TO_IGIBSON_ASSET}/objects/{OBJECT_CATEGORY}/{OBJECT_NAME} --mass 100
+```
+
+### Step 5: generating visualization
+
+For step 5, the following script is used: [scripts/step_5_visualizations.py](scripts/step_5_visualizations.py).
+The script generates a visualization of the object rendered in iGibson. If ```ffmpeg``` is installed, it will create a mp4 video; else, 6 views will be stored as *.png* files.
+
+Required parameters:
+1. --input_dir: the root directory of the object, which should be: *$IGIBSON_ROOT/objects/$CATEGORY/$OBJECT_NAME*.
+
+Example use:
+```
+python step_5_visualizations.py --input_dir {PATH_TO_IGIBSON_ASSET}/objects/{OBJECT_CATEGORY}/{OBJECT_NAME}
+```
diff --git a/gibson2/utils/data_utils/ext_object/images/ignition.gif b/gibson2/utils/data_utils/ext_object/images/ignition.gif
new file mode 100644
index 000000000..2c025214e
Binary files /dev/null and b/gibson2/utils/data_utils/ext_object/images/ignition.gif differ
diff --git a/gibson2/utils/data_utils/ext_object/process_object.sh b/gibson2/utils/data_utils/ext_object/process_object.sh
new file mode 100755
index 000000000..4bacddf47
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_object/process_object.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env bash
+
+BASEDIR=$(dirname "$0")
+echo "$BASEDIR"
+cd $BASEDIR
+#########
+# The script takes inputs:
+# 1. directory to the source files
+# 2. category label of the object
+#########
+IGIBSON_DIR=$(python -c "import gibson2; print(gibson2.ig_dataset_path)" | tail -1)
+DIRECTORY=$1
+OBJECT_ID=$(basename "$1")
+CATEGORY=$2
+OBJECT_EXPORT_DIR=$IGIBSON_DIR/objects/$CATEGORY/$OBJECT_ID
+
+cd scripts
+##################
+# Generate visual meshes
+##################
+blender -b --python step_1_visual_mesh.py -- --source_dir $DIRECTORY --dest_dir $OBJECT_EXPORT_DIR #--up Z --forward X
+
+##################
+# Generate collision meshes
+##################
+python step_2_collision_mesh.py \
+ --input_dir $OBJECT_EXPORT_DIR/shape/visual \
+ --output_dir $OBJECT_EXPORT_DIR/shape/collision \
+ --object_name $OBJECT_ID --split_loose
+
+##################
+# Generate misc/*.json
+##################
+python step_3_metadata.py --input_dir $OBJECT_EXPORT_DIR
+
+##################
+# Generate .urdf
+##################
+python step_4_urdf.py --input_dir $OBJECT_EXPORT_DIR
+
+##################
+# Generate visualizations
+##################
+python step_5_visualizations.py --input_dir $OBJECT_EXPORT_DIR
+
+
diff --git a/gibson2/utils/data_utils/ext_object/scripts/plane/WoodFloor24_col.png b/gibson2/utils/data_utils/ext_object/scripts/plane/WoodFloor24_col.png
new file mode 100644
index 000000000..2ddb7b51f
Binary files /dev/null and b/gibson2/utils/data_utils/ext_object/scripts/plane/WoodFloor24_col.png differ
diff --git a/gibson2/utils/data_utils/ext_object/scripts/plane/WoodFloor24_nrm.png b/gibson2/utils/data_utils/ext_object/scripts/plane/WoodFloor24_nrm.png
new file mode 100644
index 000000000..58417663e
Binary files /dev/null and b/gibson2/utils/data_utils/ext_object/scripts/plane/WoodFloor24_nrm.png differ
diff --git a/gibson2/utils/data_utils/ext_object/scripts/plane/WoodFloor24_rgh.png b/gibson2/utils/data_utils/ext_object/scripts/plane/WoodFloor24_rgh.png
new file mode 100644
index 000000000..aa038ef47
Binary files /dev/null and b/gibson2/utils/data_utils/ext_object/scripts/plane/WoodFloor24_rgh.png differ
diff --git a/gibson2/utils/data_utils/ext_object/scripts/plane/plane.mtl b/gibson2/utils/data_utils/ext_object/scripts/plane/plane.mtl
new file mode 100644
index 000000000..ad9f16bf9
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_object/scripts/plane/plane.mtl
@@ -0,0 +1,15 @@
+#
+# Wavefront material file
+# Converted by Meshlab Group
+
+newmtl material_0
+Ka 0.200000 0.200000 0.200000
+Kd 0.749020 0.749020 0.749020
+Ks 1.000000 1.000000 1.000000
+Tr 1.000000
+illum 2
+Ns 0.000000
+map_Kd WoodFloor24_col.png
+map_Pr WoodFloor24_rgh.png
+map_Pm walnut_floorboards-metallic.png
+map_bump WoodFloor24_nrm.png
\ No newline at end of file
diff --git a/gibson2/utils/data_utils/ext_object/scripts/plane/plane_z_up_0.obj b/gibson2/utils/data_utils/ext_object/scripts/plane/plane_z_up_0.obj
new file mode 100644
index 000000000..40dfe63f1
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_object/scripts/plane/plane_z_up_0.obj
@@ -0,0 +1,34 @@
+####
+#
+# OBJ File Generated by Meshlab
+#
+####
+# Object plane_z_up_textured.obj
+#
+# Vertices: 4
+# Faces: 2
+#
+####
+mtllib ./plane.mtl
+
+vn 0.000000 1.000000 0.000000
+v 2 -2 0.000000 0.752941 0.752941 0.752941
+vn 0.000000 1.000000 0.000000
+v 2. 2 0.000000 0.752941 0.752941 0.752941
+vn 0.000000 1.000000 0.000000
+v -2 -2 0.000000 0.752941 0.752941 0.752941
+vn 0.000000 1.000000 0.000000
+v -2 2 0.000000 0.752941 0.752941 0.752941
+# 4 vertices, 0 vertices normals
+
+
+usemtl material_0
+vt 0.009804 0.990196
+vt 0.009804 0.009804
+vt 0.990196 0.009804
+f 1/1/1 2/2/2 4/3/4
+vt 0.990196 0.990196
+f 1/1/1 4/3/4 3/4/3
+# 2 faces, 4 coords texture
+
+# End of File
\ No newline at end of file
diff --git a/gibson2/utils/data_utils/ext_object/scripts/plane/walnut_floorboards-metallic.png b/gibson2/utils/data_utils/ext_object/scripts/plane/walnut_floorboards-metallic.png
new file mode 100644
index 000000000..bf4cdc40d
Binary files /dev/null and b/gibson2/utils/data_utils/ext_object/scripts/plane/walnut_floorboards-metallic.png differ
diff --git a/gibson2/utils/data_utils/ext_object/scripts/step_1_visual_mesh.py b/gibson2/utils/data_utils/ext_object/scripts/step_1_visual_mesh.py
new file mode 100644
index 000000000..a8478c694
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_object/scripts/step_1_visual_mesh.py
@@ -0,0 +1,116 @@
+import bpy
+import math
+import sys
+import os
+import subprocess
+
+script_dir = os.path.dirname(os.path.abspath(__file__))
+utils_dir = os.path.join(script_dir, '../../blender_utils')
+sys.path.append(utils_dir)
+
+from utils import import_obj_folder, export_ig_object, bake_model, clean_unused
+
+#############################################
+# Parse command line arguments
+#############################################
+
+def get_arg(argv, flag, default=None):
+ if flag in argv:
+ return argv[argv.index(flag) + 1]
+ return default
+
+should_bake = "--bake" in sys.argv
+
+axis=['X','Y','Z','-X','-Y','-Z']
+import_axis_up = get_arg(sys.argv, '--up', default='Z')
+if import_axis_up not in axis:
+ raise ValueError(
+ 'Axis up not supported: {} (should be among X,Y,Z,-X,-Y,-Z)'
+ .format(import_axis_up))
+
+import_axis_forward = get_arg(sys.argv, '--forward', default='X')
+if import_axis_forward not in axis:
+ raise ValueError(
+ 'Axis forward not supported: {} (should be among X,Y,Z,-X,-Y,-Z)'
+ .format(import_axis_forward))
+
+source_dir = get_arg(sys.argv, '--source_dir')
+if source_dir is None:
+ raise ValueError('Source directory not specified.')
+dest_dir = get_arg(sys.argv, '--dest_dir')
+if dest_dir is None:
+ raise ValueError('Destination directory not specified.')
+os.makedirs(dest_dir, exist_ok=True)
+
+model_id = os.path.basename(source_dir)
+
+#############################################
+# Importing obj files from source dir
+#############################################
+for on in bpy.context.scene.objects.keys():
+ obj = bpy.context.scene.objects[on]
+ bpy.data.objects.remove(obj)
+clean_unused()
+
+import_obj_folder(model_id, source_dir,
+ up=import_axis_up,
+ forward=import_axis_forward)
+
+#############################################
+# Optional UV Unwrapping
+# This only needed if baking will be performed
+#############################################
+if should_bake:
+ uv_unwrapped = True
+ for o in bpy.context.scene.objects:
+ if not o.data.uv_layers:
+ uv_unwrapped = False
+ if not uv_unwrapped:
+ bpy.ops.object.mode_set(mode='OBJECT')
+ vl = bpy.context.view_layer
+ bpy.ops.object.select_all(action='DESELECT')
+ for on in bpy.context.scene.objects.keys():
+ obj = bpy.context.scene.objects[on]
+ new_uv = bpy.context.scene.objects[on].data.uv_layers.new(
+ name='obj_uv')
+ vl.objects.active = obj
+ obj.select_set(True)
+ bpy.ops.object.editmode_toggle()
+ bpy.ops.mesh.select_all(action="SELECT")
+ bpy.ops.uv.smart_project(angle_limit=66, island_margin = 0.02)
+ bpy.context.tool_settings.mesh_select_mode = (False, False, True)
+ bpy.ops.object.mode_set(mode='OBJECT')
+
+
+#############################################
+# Export models
+#############################################
+export_ig_object(dest_dir, save_material=not should_bake)
+
+
+#############################################
+# Optional Texture Baking
+#############################################
+if should_bake:
+ mat_dir = os.path.join(dest_dir, 'material')
+ os.makedirs(mat_dir, exist_ok=True)
+
+ # bpy.ops.wm.open_mainfile(filepath=blend_path)
+ # import_ig_object(model_root, import_mat=True)
+ for obj in bpy.context.scene.objects:
+ obj.select_set(True)
+ bpy.context.view_layer.objects.active = obj
+ bpy.ops.object.select_all(action='SELECT')
+ bpy.ops.object.join()
+
+ channels = {
+ 'DIFFUSE':(2048, 32),
+ 'ROUGHNESS':(1024, 16),
+ 'METALLIC':(1024, 16),
+ 'NORMAL':(1024, 16),
+ }
+ bake_model(mat_dir, channels, overwrite=True)
+
+bpy.ops.wm.quit_blender()
+
+
diff --git a/gibson2/utils/data_utils/ext_object/scripts/step_2_collision_mesh.py b/gibson2/utils/data_utils/ext_object/scripts/step_2_collision_mesh.py
new file mode 100644
index 000000000..f619c3957
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_object/scripts/step_2_collision_mesh.py
@@ -0,0 +1,69 @@
+import os
+import subprocess
+import argparse
+import threading
+
+NUM_THREADS = 32
+parser = argparse.ArgumentParser('gen all vhacd')
+parser.add_argument('--object_name', dest='object_name')
+parser.add_argument('--input_dir', dest='input_dir')
+parser.add_argument('--output_dir', dest='output_dir')
+parser.add_argument('--split_loose', dest='split_merge',
+ action='store_true')
+
+args = parser.parse_args()
+
+if not os.path.isdir(args.input_dir):
+ raise ValueError('Input directory not found: {}'.format(args.input_dir))
+ quit()
+
+os.makedirs(args.output_dir, exist_ok=True)
+
+script_dir = os.path.dirname(os.path.abspath(__file__))
+
+if args.split_merge:
+ tmp_dir = os.path.join(args.output_dir, 'tmp', 'split')
+ os.makedirs(tmp_dir, exist_ok=True)
+ ########################
+ # split to loose parts #
+ ########################
+ cmd = 'cd {} && blender -b --python step_2_split.py -- {} {}'.format(
+ script_dir, args.input_dir, tmp_dir)
+ subprocess.call(cmd, shell=True,
+ stdout=subprocess.DEVNULL)
+ input_dir = tmp_dir
+else:
+ input_dir = args.input_dir
+
+tmp_dir = os.path.join(args.output_dir, 'tmp', 'vhacd')
+os.makedirs(tmp_dir, exist_ok=True)
+objs = [o for o in os.listdir(input_dir) if os.path.splitext(o)[1] == '.obj']
+print('Inititating V-HACD for {} meshes...'.format(len(objs)))
+def vhacd(cmd):
+ subprocess.call(cmd, shell=True,
+ stdout=subprocess.DEVNULL)
+threads = []
+for o in objs:
+ in_f = os.path.join(input_dir, o)
+ out_f = os.path.join(tmp_dir, o)
+ cmd = '../../blender_utils/vhacd --input {} --output {}'.format(in_f, out_f)
+ thread = threading.Thread(target=vhacd, args=(cmd,))
+ thread.start()
+ threads.append(thread)
+
+print('Waiting for finishing...')
+for thread in threads:
+ thread.join()
+
+print('Merging V-HACD...')
+###########################
+# Merge all V-HACD to one #
+###########################
+cmd = 'cd {} && blender -b --python step_2_merge.py -- {} {} {}'.format(
+ script_dir, args.object_name, tmp_dir, args.output_dir)
+subprocess.call(cmd, shell=True,
+ stdout=subprocess.DEVNULL)
+
+tmp_dir = os.path.join(args.output_dir, 'tmp')
+cmd = 'rm -r {}'.format(tmp_dir)
+subprocess.call(cmd, shell=True)
diff --git a/gibson2/utils/data_utils/ext_object/scripts/step_2_merge.py b/gibson2/utils/data_utils/ext_object/scripts/step_2_merge.py
new file mode 100644
index 000000000..3d6eafb89
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_object/scripts/step_2_merge.py
@@ -0,0 +1,30 @@
+import bpy
+import os
+import sys
+script_dir = os.path.dirname(os.path.abspath(__file__))
+utils_dir = os.path.join(script_dir, '../../blender_utils')
+sys.path.append(utils_dir)
+from collections import defaultdict
+from utils import clean_unused, import_obj_folder
+
+model_id = sys.argv[-3]
+obj_dir = sys.argv[-2]
+save_dir = sys.argv[-1]
+os.makedirs(save_dir, exist_ok=True)
+
+for on in bpy.context.scene.objects.keys():
+ obj = bpy.context.scene.objects[on]
+ bpy.data.objects.remove(obj)
+clean_unused()
+import_obj_folder('object', obj_dir)
+for obj in bpy.context.scene.objects:
+ obj.select_set(True)
+ bpy.context.view_layer.objects.active = obj
+bpy.ops.object.select_all(action='SELECT')
+save_path = os.path.join(save_dir, "{}_cm.obj".format(model_id))
+bpy.ops.export_scene.obj(filepath=save_path, use_selection=True,
+ axis_up='Z', axis_forward='X',
+ use_materials=False,
+ use_normals=False, use_uvs=False,
+ use_triangles=True,
+ path_mode="COPY")
diff --git a/gibson2/utils/data_utils/ext_object/scripts/step_2_split.py b/gibson2/utils/data_utils/ext_object/scripts/step_2_split.py
new file mode 100644
index 000000000..dfa59a8a8
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_object/scripts/step_2_split.py
@@ -0,0 +1,41 @@
+import bpy
+import glob
+import os
+from typing import Tuple
+import sys
+import math
+import json
+import random
+import numpy as np
+script_dir = os.path.dirname(os.path.abspath(__file__))
+utils_dir = os.path.join(script_dir, '../../blender_utils')
+sys.path.append(utils_dir)
+from utils import import_obj_folder,export_obj_folder,clean_unused
+
+obj_dir = sys.argv[-2]
+save_dir = sys.argv[-1]
+os.makedirs(save_dir, exist_ok=True)
+
+for on in bpy.context.scene.objects.keys():
+ obj = bpy.context.scene.objects[on]
+ bpy.data.objects.remove(obj)
+clean_unused()
+
+import_obj_folder('object', obj_dir)
+bpy.ops.object.select_all(action='DESELECT')
+
+for obj in bpy.context.scene.objects:
+ obj.select_set(True)
+ bpy.context.view_layer.objects.active = obj
+ # bpy.ops.object.editmode_toggle()
+ # bpy.ops.mesh.select_all(action="SELECT")
+ bpy.ops.mesh.separate(type='LOOSE')
+ # bpy.ops.object.mode_set(mode='OBJECT')
+ obj.select_set(False)
+ bpy.ops.object.select_all(action='DESELECT')
+
+export_obj_folder(save_dir, skip_empty=True)
+bpy.ops.wm.quit_blender()
+
+
+
diff --git a/gibson2/utils/data_utils/ext_object/scripts/step_3_metadata.py b/gibson2/utils/data_utils/ext_object/scripts/step_3_metadata.py
new file mode 100644
index 000000000..54d1052c9
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_object/scripts/step_3_metadata.py
@@ -0,0 +1,124 @@
+import numpy as np
+import random
+import os
+import argparse
+import json
+import glob
+import gibson2
+
+parser = argparse.ArgumentParser("Generate Mesh meta-data...")
+parser.add_argument('--input_dir', dest='input_dir')
+parser.add_argument('--material', dest='material', default='wood')
+
+use_mat = 'mtllib default.mtl\nusemtl default\n'
+default_mtl='''newmtl default
+Ns 225.000000
+Ka 1.000000 1.000000 1.000000
+Kd 0.800000 0.800000 0.800000
+Ks 0.500000 0.500000 0.500000
+Ke 0.000000 0.000000 0.000000
+Ni 1.450000
+d 1.000000
+illum 2
+map_Kd ../../material/DIFFUSE.png
+map_Pm ../../material/METALLIC.png
+map_Pr ../../material/ROUGHNESS.png
+map_bump ../../material/NORMAL.png
+'''
+
+def add_mat(input_mesh, output_mesh):
+ with open(input_mesh, 'r') as fin:
+ lines = fin.readlines()
+ for l in lines:
+ if l == 'mtllib default.mtl\n':
+ return
+ with open(output_mesh, 'w') as fout:
+ fout.write(use_mat)
+ for line in lines:
+ if not line.startswith('o') and not line.startswith('s'):
+ fout.write(line)
+
+def gen_object_mtl(model_dir):
+ mesh_dir = os.path.join(model_dir, 'shape', 'visual')
+ if not os.path.isdir(mesh_dir):
+ return
+ objs = glob.glob('{}/*.obj'.format(mesh_dir))
+ for o in objs:
+ add_mat(o,o)
+ mtl_path = os.path.join(mesh_dir, 'default.mtl')
+ with open(mtl_path, 'w') as fp:
+ fp.write(default_mtl)
+
+def load_obj(fn):
+ fin = open(fn, 'r')
+ lines = [line.rstrip() for line in fin]
+ fin.close()
+
+ vertices = []
+ for line in lines:
+ if line.startswith('v '):
+ vertices.append(np.float32(line.split()[1:4]))
+ if len(vertices) <= 1:
+ return None
+ v = np.vstack(vertices)
+ return v
+
+def get_min_max(input_dir):
+ mins = []
+ maxs = []
+ mesh_dir = os.path.join(input_dir, 'shape', 'collision')
+ objs = glob.glob('{}/*.obj'.format(mesh_dir))
+ for o in objs:
+ mverts = load_obj(o)
+ if mverts is None:
+ continue
+ mins.append( mverts.min(axis=0) )
+ maxs.append( mverts.max(axis=0) )
+
+ if len(mins) == 1:
+ min_v = mins[0]
+ max_v = maxs[0]
+ else:
+ min_v = np.vstack(mins).min(axis=0)
+ max_v = np.vstack(maxs).max(axis=0)
+ return min_v.astype(float), max_v.astype(float)
+
+def gen_bbox(input_dir):
+ min_c,max_c = get_min_max(input_dir)
+ save_dict = { 'base_link_offset': tuple((max_c + min_c) / 2.),
+ 'bbox_size' : tuple(max_c - min_c)}
+ save_path = os.path.join(input_dir, 'misc', 'metadata.json')
+ with open(save_path, 'w') as fp:
+ json.dump(save_dict, fp)
+
+def gen_material(input_dir, material_string):
+ materials = material_string.split(',')
+ material_dir = os.path.join(gibson2.ig_dataset_path, 'materials')
+ material_json_file = os.path.join(material_dir, 'materials.json')
+ assert os.path.isfile(material_json_file), \
+ 'cannot find material files: {}'.format(material_json_file)
+ with open(material_json_file) as f:
+ all_materials = json.load(f)
+ for m in materials:
+ assert m in all_materials, \
+ 'unknown material class: {}'.format(m)
+ material_entry = {"1": materials}
+ mesh_to_material = {}
+ mesh_dir = os.path.join(input_dir, 'shape', 'visual')
+ meshes = [o for o in os.listdir(mesh_dir)
+ if os.path.splitext(o)[-1] == '.obj']
+ for m in meshes:
+ mesh_to_material[m] = 1
+ save_path = os.path.join(input_dir, 'misc', 'material_groups.json')
+ with open(save_path, 'w') as fp:
+ json.dump([material_entry, mesh_to_material], fp)
+
+args = parser.parse_args()
+if os.path.isdir(args.input_dir):
+ misc_dir = os.path.join(args.input_dir, 'misc')
+ os.makedirs(misc_dir, exist_ok=True)
+ gen_bbox(args.input_dir)
+ gen_material(args.input_dir, args.material)
+ bake_dir = os.path.join(args.input_dir, 'material')
+ if os.path.isdir(bake_dir) and os.listdir(bake_dir) == 4:
+ gen_object_mtl(args.input_dir)
diff --git a/gibson2/utils/data_utils/ext_object/scripts/step_4_urdf.py b/gibson2/utils/data_utils/ext_object/scripts/step_4_urdf.py
new file mode 100644
index 000000000..eee4926d4
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_object/scripts/step_4_urdf.py
@@ -0,0 +1,80 @@
+import os
+import subprocess
+import argparse
+import json
+import numpy as np
+
+parser = argparse.ArgumentParser("Generate URDF for rigid_body")
+parser.add_argument('--input_dir', dest='input_dir')
+parser.add_argument('--mass', dest='mass', type=float, default=10.)
+
+visual_component_template = '''
+
+
+
+
+
+'''
+
+collision_component_template = '''
+
+
+
+
+
+'''
+
+def get_viz_string(obj_name, viz_mesh):
+ return visual_component_template.format(
+ obj_name=obj_name, viz_mesh=viz_mesh)
+
+def get_col_string(obj_name, col_mesh):
+ return collision_component_template.format(
+ obj_name=obj_name, collision_mesh=col_mesh)
+
+structure_base_template = '''
+
+
+
+
+
+
+
+ {{}}
+
+
+'''
+
+def convert_to_urdf_rigid(input_dir, mass=10.):
+ # get base urdf
+ input_dir = os.path.normpath(input_dir)
+
+ vm_dir = os.path.join(input_dir, 'shape', 'visual')
+ cm_dir = os.path.join(input_dir, 'shape', 'collision')
+
+ model_id = os.path.basename(input_dir)
+ urdf_path = os.path.join(input_dir, '{}.urdf'.format(model_id))
+
+ base_urdf = structure_base_template.format(model_id, mass, '')
+ # add all visual mesh components
+ components = ''
+ vms = [f for f in os.listdir(vm_dir)
+ if os.path.splitext(f)[1] == '.obj']
+ for m in vms:
+ components += get_viz_string(
+ os.path.splitext(m)[0],
+ os.path.join('shape', 'visual', m))
+ # add all collision mesh components
+ cms = [f for f in os.listdir(cm_dir)
+ if os.path.splitext(f)[1] == '.obj']
+ for m in cms:
+ components += get_col_string(
+ os.path.splitext(m)[0],
+ os.path.join('shape', 'collision', m))
+
+ with open(urdf_path, 'w') as fp:
+ fp.write( base_urdf.format(components) )
+
+if __name__ == '__main__':
+ args = parser.parse_args()
+ convert_to_urdf_rigid(args.input_dir, args.mass)
diff --git a/gibson2/utils/data_utils/ext_object/scripts/step_5_visualizations.py b/gibson2/utils/data_utils/ext_object/scripts/step_5_visualizations.py
new file mode 100644
index 000000000..7a843335e
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_object/scripts/step_5_visualizations.py
@@ -0,0 +1,96 @@
+import os
+import cv2
+import sys
+import json
+import gibson2
+import argparse
+import subprocess
+import numpy as np
+import pybullet as p
+from PIL import Image
+from shutil import which
+from gibson2.simulator import Simulator
+from gibson2.render.profiler import Profiler
+from gibson2.objects.articulated_object import ArticulatedObject
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
+
+parser = argparse.ArgumentParser("Generate visulization for iGibson object")
+parser.add_argument('--input_dir', dest='input_dir')
+
+
+def main():
+ global _mouse_ix, _mouse_iy, down, view_direction
+
+ args = parser.parse_args()
+ model_path = args.input_dir
+ print(model_path)
+
+ model_id = os.path.basename(model_path)
+ category = os.path.basename(os.path.dirname(model_path))
+
+ hdr_texture = os.path.join(
+ gibson2.ig_dataset_path, 'scenes', 'background',
+ 'probe_03.hdr')
+ settings = MeshRendererSettings(
+ env_texture_filename=hdr_texture,
+ enable_shadow=True, msaa=True)
+
+ s = Simulator(mode='headless',
+ image_width=1800, image_height=1200,
+ vertical_fov=70, rendering_settings=settings
+ )
+
+ s.renderer.set_light_position_direction([0,0,10], [0,0,0])
+
+ s.renderer.load_object('plane/plane_z_up_0.obj', scale=[3,3,3])
+ s.renderer.add_instance(0)
+ s.renderer.set_pose([0,0,-1.5,1, 0, 0.0, 0.0], -1)
+
+ ###########################
+ # Get center and scale
+ ###########################
+ bbox_json = os.path.join(model_path, 'misc', 'metadata.json')
+ with open(bbox_json, 'r') as fp:
+ bbox_data = json.load(fp)
+ scale = 1.5/max(bbox_data['bbox_size'])
+ center= -scale*np.array(bbox_data['base_link_offset'])
+
+ urdf_path = os.path.join(model_path, '{}.urdf'.format(model_id))
+ print(urdf_path)
+ obj = ArticulatedObject(filename=urdf_path, scale=scale)
+ s.import_object(obj)
+ obj.set_position(center)
+ s.sync()
+
+ _mouse_ix, _mouse_iy = -1, -1
+ down = False
+
+ theta,r = 0,1.5
+
+ px = r*np.sin(theta)
+ py = r*np.cos(theta)
+ pz = 1
+ camera_pose = np.array([px, py, pz])
+ s.renderer.set_camera(camera_pose, [0,0,0], [0, 0, 1])
+
+ num_views = 6
+ save_dir = os.path.join(model_path, 'visualizations')
+ os.makedirs(save_dir, exist_ok=True)
+ for i in range(num_views):
+ theta += np.pi*2/(num_views+1)
+ obj.set_orientation([0., 0., 1.0, np.cos(theta/2)])
+ s.sync()
+ with Profiler('Render'):
+ frame = s.renderer.render(modes=('rgb'))
+ img = Image.fromarray((
+ 255*np.concatenate(frame, axis=1)[:,:,:3]).astype(np.uint8))
+ img.save(os.path.join(save_dir, '{:02d}.png'.format(i)))
+
+ if which('ffmpeg') is not None:
+ cmd = 'ffmpeg -framerate 2 -i {s}/%2d.png -y -r 16 -c:v libx264 -pix_fmt yuvj420p {s}/{m}.mp4'.format(s=save_dir,m=model_id)
+ subprocess.call(cmd, shell=True)
+ # cmd = 'rm {}/*.png'.format(save_dir)
+ # subprocess.call(cmd, shell=True)
+
+if __name__ == '__main__':
+ main()
diff --git a/gibson2/utils/data_utils/ext_scene/README.md b/gibson2/utils/data_utils/ext_scene/README.md
new file mode 100644
index 000000000..7867cc5c8
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/README.md
@@ -0,0 +1,117 @@
+# Import an scene into iGibson
+
+To use external scenes in iGibson, it needs be converted to the scene format described here: [data format](../README.md).
+
+Here we provide an automated pipeline to execute this conversion from:
+1. [CubiCasa5k](https://github.com/CubiCasa/CubiCasa5k): A Dataset and an Improved Multi-Task Model for Floorplan Image Analysis. (Kalervo, Ahti, et al.)
+2. [3D-FRONT](https://tianchi.aliyun.com/specials/promotion/alibaba-3d-scene-dataset): 3D Furnished Rooms with layOuts and semaNTics. (Fu, Huanl, et al.)
+by running a provided script. This script makes use of the software Blender, which needs to be installed first. You won't need to use blender directly, as the script calls it automatically.
+
+The example script executes the following steps
+- Preprocess scene data from CubiCasa5k or 3D-FRONT into scene components.
+- Generate the visual and collision meshes of the walls, floors and ceiling of the scene. Generate the bounding box annotations of the objects in scene. Generate the base scene URDFs.
+- Generate the iGSDF (iGibson Scene Definition Format), an extension of URDF, for the scene. Generate travserability map.
+
+
+
+Above shows some example scenes from CubiCasa5K (first row) and 3D-Front(second row).
+
+**Important Note:** CubiCasa5K and 3D-Front scenes have much less objects per scene (<40) on average than those of iGibson (75).
+
+We currently only offer support for Linux.
+
+## Installing Blender
+
+We use Blender 2.82 for mesh processing. Follow the instruction here: [blender_utils](../blender_utils/) for guide on installation.
+
+## Process external scenes
+
+First, you need to download some helper assets for external scenes, which can be done by simply running:
+```
+python -m gibson2.utils.assets_utils --download_ext_scene_assets
+```
+This will download some default materials, as well as 3D-Front's no-collision URDFs (explained more in details in section [3D-Front)](#important:-addressing-overlapping-bounding-boxes-in-3d-front).
+
+### Process a CubiCasa5K scene
+
+To preprocess a CubiCasa5K scene, please follow these steps:
+1. Please follow CubiCasa5K's instruction [here](https://github.com/CubiCasa/CubiCasa5k#dataset) and download the data. After unzipping, the folder (let's call it ```CUBICASA_ROOT```) should contain:
+```
+colorful high_quality high_quality_architectural test.txt train.txt val.txt
+```
+
+2. Each folder of ```CUBICASA_ROOT/*/* ``` represent the floor plan of a real-world home. We will convert each floor of the home into an iGibson scene, which can be easily done by one command:
+```
+./scripts/process_scene_cubicasa.sh CUBICASA_ROOT/x/x
+```
+replace ```CUBICASA_ROOT/x/x``` with the real path.
+
+3. To convert all CubiCasa5K scenes, you can run:
+```
+for s in CUBICASA_ROOT/*/*; do; ./scripts/process_scene_cubicasa.sh $s; done
+```
+replace ```CUBICASA_ROOT``` with the real path. Note that this process can take multiple hours.
+
+We make the following changes to CubiCasa5K scenes during our processing:
+1. We skip objects that are not in our dataset (e.g. Fireplace). We also skip objects that have unclear category label (e.g. GeneralAppliance).
+2. For objects that have overlapping bounding boxes, we try to shrink the bounding boxes by no more than 20%. We sort all objects by how many other objects the object overlaps with. We iteratively go through the list, if shrinking doesn't resolve the issue, we delete that object.
+
+Notes:
+1. CubiCasa5k are floorplans of fixed furnitures only (e.g. stove, wall cabinet, fridge etc.).
+2. Object and scene category mappings can be found [here](scripts/utils/semantics.py) .
+
+### Process a 3D-FRONT scene
+
+To import a 3D-Front scene into iGibson, please follow the these steps:
+1. Please follow 3D-Front's instruction [here](https://tianchi.aliyun.com/specials/promotion/alibaba-3d-scene-dataset#download) and download the data. After unzipping, the folder (let's call it ```THREEDFRONT_ROOT```) should contain 10k *.json* files.
+2. Each file in ```THREEDFRONT_ROOT``` represent a online-designed apartment. We will convert each apartment into an iGibson scene, which can be easily done by one command:
+```
+./scripts/process_scene_3dfront.sh THREEDFRONT_ROOT/x
+```
+replace ```THREEDFRONT_ROOT/x``` with the real path of any json file.
+
+3. To convert all 3D-Front scenes, you can run:
+```
+for s in THREEDFRONT_ROOT/*; do; ./scripts/process_scene_3dfront.sh $s; done
+```
+replace ```THREEDFRONT_ROOT``` with the real path. Note that this process can take multiple hours.
+
+We make the following changes to 3D-Front scenes during our processing:
+1. We skip scenes that contain unclear category label as part of the scene mesh:
+```
+[ 'CustomizedFixedFurniture', 'CustomizedFurniture', 'CustomizedPersonalizedModel', 'CustomizedPlatform']
+```
+since we can't generate collision meshes properly with these categories. In total, there are 8808 scenes that don't contain any of the category above.
+ 2. 3D-Front also has known corrupted mesh issue (see [github issue](https://github.com/3D-FRONT-FUTURE/3D-FRONT-ToolBox/issues/2#issuecomment-682678930)). We expect this problem to be solved in future releases of 3D-Front.
+3. the kitchen cabinets in 3D-Front are not annotated as objects, but instead the entire kitchen furniture is a single object with each panel of the furniture represented as separate meshes. This impedes us to generate interactive versions of the kitchen cabinets. We include two alternative versions of the scenes: a) a version with non-interactive kitchen cabinets, and b) a version without any kitchen cabinets. We expect this problem to be solved in future annotations of 3D-Front.
+
+Notes:
+1. Object and scene category mappings can be found [here](scripts/utils/semantics.py) .
+
+#### Important: addressing overlapping bounding boxes in 3D-FRONT
+
+While 3D-Front dataset includes a layout description of rooms and elements, including their position and size, the furniture pieces are sometimes defined as overlapping significantly with each other (see reported issue [here](https://github.com/3D-FRONT-FUTURE/3D-FRONT-ToolBox/issues/4)). This has a severe effect in our physics simulation as it tries to solve the penetrating contact. To alleviate this issue, we remove objects that overlap more than 80% of volume with others.
+
+At the same time, real-world free-moving objects can have overlapping bounding boxes (e.g. a chair tucked into a table), thus, for overlapping bounding boxes, we do the following:
+- if two objects overlap with each other, we try to shrink the bounding boxes. We shrink by no more than 80%.
+- we randomize the objects with our object assets, and try to come up with no-collision object configurations from overlapping bounding boxes.
+
+We managed to provide no-collision URDFs for 2239 scenes. If the scene your are converting is among this set, the scene generation process will automatically retrieve the no-collision URDF. If not, **please use the scene at your own discretion**, since the objects might be penetrating with each other.
+
+
+### Examine generated scenes
+
+To examine the scene, you can leverage the ```mouse_interaction.py``` in iGibson's ```example/demo``` folder [examples/demo/mouse_interaction.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/mouse_interaction.py).
+
+For Cubicasa5K, you can examine a scene by running:
+```
+python mouse_interaction.py --source CUBICASA -- scene $SCENE_ID
+```
+Here ```$SCENE_ID``` can be ```10709_floor_0``` or ```10709_floor_1``` if you converted scene ```colorful/10709``` in Cubicasa5k.
+
+Similarly, for 3D-Front, you can examine a scene by running:
+```
+python mouse_interaction.py --source THREEDFRONT -- scene $SCENE_ID
+```
+Here ```$SCENE_ID``` is ````d8f50afc-d93f-49f8-9170-b7b9fe880152``` if you converted scene ```d8f50afc-d93f-49f8-9170-b7b9fe880152.json``` in 3D-Front.
+
diff --git a/gibson2/utils/data_utils/ext_scene/images/ext_scenes.jpg b/gibson2/utils/data_utils/ext_scene/images/ext_scenes.jpg
new file mode 100644
index 000000000..a543c16a0
Binary files /dev/null and b/gibson2/utils/data_utils/ext_scene/images/ext_scenes.jpg differ
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/process_scene_3dfront.sh b/gibson2/utils/data_utils/ext_scene/scripts/process_scene_3dfront.sh
new file mode 100755
index 000000000..287f538d5
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/process_scene_3dfront.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+BASEDIR=$(dirname "$0")
+cd $BASEDIR
+
+THREEDFRONT_DIR=$(python -c "import gibson2; print(gibson2.threedfront_dataset_path)" | tail -1)
+JSON_PATH=$1
+
+python step_1_preprocess_3dfront.py --model_path $JSON_PATH
+
+JSON_PATH=$(basename $JSON_PATH)
+THREEDFRONT_ID="${JSON_PATH%.*}"
+echo $THREEDFRONT_ID
+
+python step_2_generate_scene.py --model_dir \
+ $THREEDFRONT_DIR/scenes/$THREEDFRONT_ID
+blender -b --python step_3_uv_unwrap.py -- \
+ $THREEDFRONT_DIR/scenes/$THREEDFRONT_ID
+python step_3_add_mtl.py --input_dir \
+ $THREEDFRONT_DIR/scenes/$THREEDFRONT_ID
+python step_4_convert_to_ig.py --select_best \
+ --source THREEDFRONT $THREEDFRONT_ID
+python step_4_convert_to_ig.py --source THREEDFRONT $THREEDFRONT_ID
+python step_5_generate_trav_map.py --source THREEDFRONT $THREEDFRONT_ID
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/process_scene_cubicasa.sh b/gibson2/utils/data_utils/ext_scene/scripts/process_scene_cubicasa.sh
new file mode 100755
index 000000000..4ef8fc01b
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/process_scene_cubicasa.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+
+BASEDIR=$(dirname "$0")
+cd $BASEDIR
+
+CUBICASA_DIR=$(python -c "import gibson2; print(gibson2.cubicasa_dataset_path)" | tail -1)
+DIRECTORY=$1
+
+python step_1_preprocess_cubicasa.py --model_dir $1
+
+CUBICASA_ID=$(basename $DIRECTORY)
+echo $CUBICASA_ID
+
+for scene in $CUBICASA_DIR/scenes/"$CUBICASA_ID"_*; do
+ echo $scene
+ python step_2_generate_scene.py --model_dir $scene
+ blender -b --python step_3_uv_unwrap.py $scene
+ python step_3_add_mtl.py --input_dir $scene
+ python step_4_convert_to_ig.py --select_best \
+ --source CUBICASA $(basename $scene)
+ python step_4_convert_to_ig.py --source CUBICASA $(basename $scene)
+ python step_5_generate_trav_map.py --source CUBICASA $(basename $scene)
+done
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/step_1_preprocess_3dfront.py b/gibson2/utils/data_utils/ext_scene/scripts/step_1_preprocess_3dfront.py
new file mode 100644
index 000000000..12a352b66
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/step_1_preprocess_3dfront.py
@@ -0,0 +1,620 @@
+import os
+import sys
+import json
+import math
+import argparse
+import matplotlib
+import subprocess
+import numpy as np
+import matplotlib.pyplot as plt
+from PIL import Image, ImageDraw
+from collections import defaultdict
+from matplotlib.patches import Polygon
+from matplotlib.collections import PatchCollection
+from scipy.spatial import ConvexHull, convex_hull_plot_2d
+from shapely.geometry import Polygon as shape_poly
+
+from utils.utils import *
+from utils.semantics import *
+from utils.scene_urdf import gen_scene_urdf,gen_orig_urdf,gen_orig_urdf_with_cabinet
+
+import gibson2
+
+parser = argparse.ArgumentParser("Convert 3D-Front...")
+
+parser.add_argument('--model_path', dest='model_path')
+parser.add_argument('--save_root', dest='save_root',
+ default=os.path.join(gibson2.threedfront_dataset_path, 'scenes'))
+
+# https://stackoverflow.com/questions/13542855/
+# algorithm-to-find-the-minimum-area-rectangle-for-given-points-in-order-to-comput/
+# 33619018#33619018
+def minimum_bounding_rectangle(points):
+ """
+ Find the smallest bounding rectangle for a set of points.
+ Returns a set of points representing the corners of the bounding box.
+
+ :param points: an nx2 matrix of coordinates
+ :rval: an nx2 matrix of coordinates
+ """
+ from scipy.ndimage.interpolation import rotate
+ pi2 = np.pi/2.
+
+ # get the convex hull for the points
+ try:
+ hull_points = points[ConvexHull(points).vertices]
+ except:
+ hull_points = points
+ # calculate edge angles
+ edges = np.zeros((len(hull_points)-1, 2))
+ edges = hull_points[1:] - hull_points[:-1]
+
+ angles = np.zeros((len(edges)))
+ angles = np.arctan2(edges[:, 1], edges[:, 0])
+
+ angles = np.abs(np.mod(angles, pi2))
+ angles = np.unique(angles)
+
+ # find rotation matrices
+ # XXX both work
+ rotations = np.vstack([
+ np.cos(angles),
+ np.cos(angles-pi2),
+ np.cos(angles+pi2),
+ np.cos(angles)]).T
+ rotations = rotations.reshape((-1, 2, 2))
+
+ # apply rotations to the hull
+ rot_points = np.dot(rotations, hull_points.T)
+
+ # find the bounding points
+ min_x = np.nanmin(rot_points[:, 0], axis=1)
+ max_x = np.nanmax(rot_points[:, 0], axis=1)
+ min_y = np.nanmin(rot_points[:, 1], axis=1)
+ max_y = np.nanmax(rot_points[:, 1], axis=1)
+
+ # find the box with the best area
+ areas = (max_x - min_x) * (max_y - min_y)
+ best_idx = np.argmin(areas)
+
+ # return the best box
+ x1 = max_x[best_idx]
+ x2 = min_x[best_idx]
+ y1 = max_y[best_idx]
+ y2 = min_y[best_idx]
+ r = rotations[best_idx]
+
+ rval = np.zeros((4, 2))
+ rval[0] = np.dot([x1, y2], r)
+ rval[1] = np.dot([x2, y2], r)
+ rval[2] = np.dot([x2, y1], r)
+ rval[3] = np.dot([x1, y1], r)
+
+ return rval
+
+
+def mesh_to_xy_convex_hull(xyz):
+ points = np.array([(x,z) for x,y,z in xyz]).astype(float)
+ try:
+ hull = ConvexHull(points)
+ return np.array([points[hull.vertices,0], points[hull.vertices,1]]).transpose()
+ except:
+ return points
+
+def get_bbox(mesh):
+ xyz = np.array(mesh['xyz']).reshape([-1,3]).astype(float)
+ return xyz.min(axis=0), xyz.max(axis=0)
+
+def get_z_max(meshes):
+ maxes = []
+ for f in meshes:
+ maxes.append(get_bbox(f)[1])
+ max_all = np.vstack(maxes).max(axis=0)
+ return max_all[1]
+
+def get_scene_bbox(meshes):
+ maxes = []
+ mines = []
+ for f in meshes:
+ mmin, mmax = get_bbox(f)
+ mines.append(mmin)
+ maxes.append(mmax)
+ min_all = np.vstack(mines).min(axis=0)
+ max_all = np.vstack(maxes).max(axis=0)
+ return min_all, max_all
+
+def process_scene_wall(model_id):
+ wall_cats = ['WallTop', 'Flue', 'Column']
+ with open(model_id, 'r') as fp:
+ data = json.load(fp)
+ z_max = get_z_max(data['mesh'])
+ wall_components = [f for f in data['mesh'] if f['type'] in wall_cats]
+ polys = [mesh_to_xy_convex_hull(np.array(w['xyz']).reshape([-1,3])) for w in wall_components]
+ rects = [minimum_bounding_rectangle(p) for p in polys]
+ bboxes = [polygon_to_bbox(p[:,0], p[:,1], (0.,z_max), scale_factor=1.) for p in rects]
+ return polys,bboxes
+
+def intersects(poly, poly_list):
+ for p in poly_list:
+ if p.intersects(poly):
+ inter = p.intersection(poly)
+ if inter.area / p.area > 0.05:
+ return True
+ return False
+
+def should_skip(model_id):
+ with open(model_id, 'r') as fp:
+ data = json.load(fp)
+ for f in data['mesh']:
+ if f['type'] in front_to_skip:
+ return True
+ return False
+
+def process_hole_elements(model_id, cat):
+ hole_cats = ['Door', 'Window', 'Hole']
+ if cat not in hole_cats:
+ raise ValueError('{} is not among the hole categories')
+ with open(model_id, 'r') as fp:
+ data = json.load(fp)
+ components = [f for f in data['mesh'] if f['type'] == cat and get_bbox(f)[1][1] > 0.05]
+ polys = [mesh_to_xy_convex_hull(np.array(w['xyz']).reshape([-1,3])) for w in components]
+ zs = []
+ for w in components:
+ mmin, mmax = get_bbox(w)
+ zs.append((mmin[1], mmax[1]))
+ filtered_poly = []
+ filtered_indexes = []
+ for i,p in enumerate(polys):
+ ith_poly = shape_poly(p)
+ if intersects(ith_poly, filtered_poly):
+ continue
+ filtered_poly.append(ith_poly)
+ filtered_indexes.append(i)
+ zs = [p for i,p in enumerate(zs) if i in filtered_indexes]
+ polys = [p for i,p in enumerate(polys) if i in filtered_indexes]
+
+ rects = [minimum_bounding_rectangle(p) for p in polys]
+ bboxes = [polygon_to_bbox(p[:,0], p[:,1], z, scale_factor=1.) for p,z in zip(rects, zs) if z[0] != z[1]]
+ return polys,bboxes
+
+
+def process_scene_rooms(model_id):
+ with open(model_id, 'r') as fp:
+ data = json.load(fp)
+ platforms = [f for f in data['mesh'] if f['type'] == 'CustomizedPlatform']
+ platform_polys = [mesh_to_xy_convex_hull(np.array(w['xyz']).reshape([-1,3])) for w in platforms]
+ to_fill = []
+ if len(platforms) == 0:
+ return to_fill
+ # for each floor, get convex hull & draw on a picture
+ components = [f for f in data['mesh'] if f['type'] == 'Floor']
+ floor_polys = [mesh_to_xy_convex_hull(np.array(w['xyz']).reshape([-1,3])) for w in components]
+ smin, smax = get_scene_bbox(data['mesh'])
+ xmin,_,ymin = smin
+ xmax,_,ymax = smax
+ height = int(100. * (xmax - xmin)) + 20
+ width = int(100. * (ymax - ymin)) + 20
+ floor_img = Image.new('1', (height, width), 0)
+ d = ImageDraw.Draw(floor_img)
+ for coords in floor_polys:
+ x = (coords[:,0] - xmin) * 100.
+ y = (coords[:,1] - ymin) * 100.
+ d.polygon(list(zip(x,y)),fill=1)
+ floor_mask = np.array(floor_img).astype(np.uint8)
+ # then for each "CustomizedPlatform", check if floor is empty below
+ # if so, add floor visual mesh
+ platforms = [f for f in data['mesh'] if f['type'] == 'CustomizedPlatform']
+ platform_polys = [mesh_to_xy_convex_hull(np.array(w['xyz']).reshape([-1,3])) for w in platforms]
+ to_fill = []
+ for coords in platform_polys:
+ platform_img = Image.new('1', (height, width), 0)
+ p = ImageDraw.Draw(platform_img)
+ x = (coords[:,0] - xmin) * 100.
+ y = (coords[:,1] - ymin) * 100.
+ p.polygon(list(zip(x,y)),fill=1)
+ platform_mask = np.array(platform_img).astype(np.uint8)
+ prod = platform_mask * floor_mask
+ if prod.sum() / platform_mask.sum() < 0.9:
+ to_fill.append(coords)
+ return to_fill
+
+# things to process:
+# WallTop, Door, Window, Hole, Floor
+# wall also includes: flue, column
+# to skip visual: CustomizedPlatform
+# NOTE: check if customizedplatform is part of floor
+
+
+def concatenate_meshes(meshes, save_path):
+ num_verts = 0
+ verts = []
+ faces = []
+ normals = []
+ uvs = []
+ for m in meshes:
+ verts.append(np.array(m['xyz']).reshape([-1,3]))
+ faces.append(np.array(m['faces']).reshape([-1,3]) + num_verts)
+ normals.append(np.array(m['normal']).reshape([-1,3]))
+ uvs.append(np.array(m['uv']).reshape([-1,2]))
+ num_verts += verts[-1].shape[0]
+ verts = np.vstack(verts)
+ faces = np.vstack(faces)
+ normals = np.vstack(normals)
+ uvs = np.vstack(uvs)
+ write_3dfront_obj(verts, faces, normals, uvs, save_path)
+
+def write_3dfront_obj(xyz, faces, normals, uvs, savepath):
+ # , vert, face, vtex, ftcoor, imgpath=None
+ with open(savepath,'w') as fp:
+ for v in xyz:
+ fp.write('v {} {} {}\n'.format(v[0],v[2],v[1]))
+ for vt in uvs:
+ fp.write('vt {} {}\n'.format(vt[0],vt[1]))
+# for vn in normals:
+# fp.write('vn {} {} {}\n'.format(vn[0],vn[1], vn[2]))
+ faces = faces + 1
+ for f in faces:
+ fp.write('f {a}/{a} {b}/{b} {c}/{c}\n'.format(a=f[2],b=f[1],c=f[0]))
+
+def gen_static_cabinet_info(save_dir, save_name):
+ urdf_dir = os.path.join(save_dir, 'urdf')
+ os.makedirs(urdf_dir, exist_ok=True)
+ model_name = os.path.basename(os.path.normpath(save_dir))
+ vm_path = os.path.join(save_dir, 'shape', 'visual',
+ '{}_vm.obj'.format(save_name))
+ cm_path = os.path.join(save_dir, 'shape', 'collision',
+ '{}_cm.obj'.format(save_name))
+ cmd = '../../blender_utils/vhacd --input {} --output {}'.format(
+ vm_path, cm_path)
+ subprocess.call(cmd,shell=True,
+ stdout=subprocess.DEVNULL)
+ if not os.path.isfile:
+ # vhacd failed. the cabinet is likely corrupted
+ # using vm as cm
+ cmd = 'cp {} {}'.format(vm_path, cm_path)
+ subprocess.call(cmd,shell=True,
+ stdout=subprocess.DEVNULL)
+ with open(os.path.join(urdf_dir,
+ '{}_{}s.urdf'.format(model_name,save_name)), 'w') as fp:
+ fp.write(gen_scene_urdf(save_dir, model_name, save_name))
+ with open(os.path.join(urdf_dir,
+ '{}_orig.urdf'.format(model_name)), 'w') as fp:
+ fp.write(gen_orig_urdf_with_cabinet(model_name,save_name))
+
+
+
+def export_visu_mesh(model_id, save_dir):
+ os.makedirs(save_dir, exist_ok=True)
+ with open(model_id, 'r') as fp:
+ data = json.load(fp)
+ walls = []
+ ceilings = []
+ floors = []
+ cabinets = []
+ for i,m in enumerate(data['mesh']):
+ #mesh_to_obj(m, i, save_dir)
+ category = m['type']
+ if category in wall_cats:
+ walls.append(m)
+ elif category in ceiling_cats:
+ ceilings.append(m)
+ elif category in floor_cats:
+ floors.append(m)
+ elif category == 'Cabinet':
+ cabinets.append(m)
+ elif category == 'Door' or category == 'Hole':
+ z_max = get_bbox(m)[1][1]
+ if z_max < 0.05:
+ floors.append(m)
+ obj_dir = os.path.join(save_dir, 'shape', 'visual')
+ os.makedirs(obj_dir, exist_ok=True)
+ col_obj_dir = os.path.join(save_dir, 'shape', 'collision')
+ os.makedirs(col_obj_dir, exist_ok=True)
+ concatenate_meshes(walls, os.path.join(obj_dir, 'wall_vm.obj'))
+ concatenate_meshes(ceilings, os.path.join(obj_dir, 'ceiling_vm.obj'))
+ if len(cabinets) > 0:
+ save_name = 'static_cabinet'
+ vm_path = os.path.join(obj_dir, '{}_vm.obj'.format(save_name))
+ concatenate_meshes(cabinets, vm_path)
+ gen_static_cabinet_info(save_dir, save_name)
+ for i,m in enumerate(floors):
+ out_name = 'floor_{}_vm.obj'.format(i)
+ out_path = os.path.join(obj_dir, out_name)
+ xyz = np.array(m['xyz']).reshape([-1,3])
+ faces = np.array(m['faces']).reshape([-1,3])
+ normals = np.array(m['normal']).reshape([-1,3])
+ uvs = np.array(m['uv']).reshape([-1,2])
+ write_3dfront_obj(xyz, faces, normals, uvs, out_path)
+
+def get_all_objs(model_id):
+ with open (os.path.join(os.path.dirname(os.path.realpath(__file__))
+ , 'utils', 'data', 'model_ig_cat.json')
+ , 'r') as fp:
+ model_to_cat = json.load(fp)
+ with open (os.path.join(os.path.dirname(os.path.realpath(__file__))
+ , 'utils', 'data', 'model_bbox.json')
+ , 'r') as fp:
+ model_to_bbox = json.load(fp)
+ with open(model_id, 'r') as fp:
+ data = json.load(fp)
+ z_max = get_z_max(data['mesh'])
+ model_jid = []
+ model_uid = []
+ model_bbox= []
+ for ff in data['furniture']:
+ if 'valid' in ff and ff['valid']:
+ model_uid.append(ff['uid'])
+ model_jid.append(ff['jid'])
+ model_bbox.append(ff['bbox'])
+ scene = data['scene']
+ room = scene['room']
+
+ object_used = defaultdict(lambda : -1)
+ free_objs = []
+ for r in room:
+ room_id = r['instanceid']
+ children = r['children']
+ for c in children:
+ ref = c['ref']
+ if ref not in model_uid:
+ continue
+ obj_id = model_jid[model_uid.index(ref)]
+ if obj_id not in model_to_bbox:
+ continue
+ pos = c['pos']
+ pos_xy = np.array([pos[0], pos[-1]])
+
+ rot = c['rot']
+ ref = [0,0,1]
+ axis = np.cross(ref, rot[1:])
+ theta = np.arccos(np.dot(ref, rot[1:]))
+ og_cat = model_to_cat[obj_id]
+ og_bbox = model_to_bbox[obj_id]
+ if obj_id not in object_used:
+ object_used[obj_id] = len(object_used) + 1
+ instance_id = object_used[obj_id]
+
+ scale = c['scale']
+ scaled_bbox = np.array(og_bbox) * scale
+ scaled_obj_frame = np.mean(scaled_bbox, axis=0)
+ len_x,_,len_y = scaled_bbox.ptp(axis=0)
+ edge_x_vanilla = np.array([len_x, 0])
+ edge_y_vanilla = np.array([0, len_y])
+ center_x, center_z, center_y = pos + scaled_obj_frame
+ if np.sum(axis) != 0 and not math.isnan(theta):
+ theta = theta
+ axis = np.asarray(axis)
+ axis = axis / math.sqrt(np.dot(axis, axis))
+ a = math.cos(theta )
+ b, c, d = -axis * math.sin(theta)
+ aa, bb, cc, dd = a * a, b * b, c * c, d * d
+ bc, ad, ac, ab, bd, cd = b * c, a * d, a * c, a * b, b * d, c * d
+ R = np.array([[aa + bb - cc - dd, 2 * (bd - ac)],
+ [2 * (bd + ac), aa + dd - bb - cc]])
+ edge_x = np.matmul(R, edge_x_vanilla.transpose())
+ edge_y = np.matmul(R, edge_y_vanilla.transpose())
+ else:
+ edge_x = edge_x_vanilla
+ edge_y = edge_y_vanilla
+ normal = edge_y / np.linalg.norm(edge_y)
+ z = (scaled_bbox+pos)[:,1]
+ z[z < 0] = 0
+ z[z > z_max] = z_max-0.1
+ center = np.array([center_x, center_y])
+ y = edge_x / 2.
+ x = edge_y / 2.
+ raw_pts = np.array([center - x - y,
+ center + x - y,
+ center + x + y,
+ center - x + y])
+ if og_cat == 'bottom_cabinet' and z[0] > 0.1:
+ og_cat = 'top_cabinet'
+ free_objs.append(('{}={}'.format(og_cat, instance_id),
+ {'edge_x':edge_y.tolist(),
+ 'edge_y':edge_x.tolist(),
+ 'center':center.tolist(),
+ 'normal':normal.tolist(),
+ 'z':z.tolist(),
+ 'raw_pts':raw_pts.tolist()}))
+ return free_objs
+
+def get_scene_range(model_id):
+ coords = [bbox.get_coords() for bbox in process_scene_wall(model_id)[1]]
+ stacked = np.vstack(coords)
+ xmin, ymin = stacked.min(axis=0)
+ xmax, ymax = stacked.max(axis=0)
+ max_length = np.max([np.abs(xmin), np.abs(ymin), np.abs(xmax), np.abs(ymax)])
+ max_length = np.ceil(max_length).astype(np.int)
+ return max_length
+
+def gen_room_maps(model_id, viz=False):
+ max_length = get_scene_range(model_id)
+ ins_image = Image.new('L', (2 * max_length * 100, 2 * max_length * 100), 0)
+ d1 = ImageDraw.Draw(ins_image)
+ sem_image = Image.new('L', (2 * max_length * 100, 2 * max_length * 100), 0)
+ d2 = ImageDraw.Draw(sem_image)
+
+ with open(model_id, 'r') as fp:
+ data = json.load(fp)
+ mesh_uid = []
+ mesh_xyz = []
+ for m in data['mesh']:
+ category = m['type']
+ #if category in wall_cats:
+ mesh_uid.append(m['uid'])
+ mesh_xyz.append(np.array(m['xyz']).reshape([-1,3]).astype(float))
+ scene = data['scene']
+ room = scene['room']
+ for i, r in enumerate(room):
+ room_id = r['instanceid']
+ children = r['children']
+ room_walls = []
+ for c in children:
+ ref = c['ref']
+ if ref in mesh_uid:
+ idx = mesh_uid.index(ref)
+ v = mesh_xyz[idx]
+ room_walls.append(v)
+ verts = np.vstack(room_walls)
+ hull_pts = (mesh_to_xy_convex_hull(verts) + max_length) * 100.
+ room_id = rooms.index(front_all_rooms[r['type']])
+ d1.polygon(list(zip(hull_pts[:,0],hull_pts[:,1])),fill=i+1)
+ d2.polygon(list(zip(hull_pts[:,0],hull_pts[:,1])),fill=room_id+1)
+
+ padded_image = Image.new('L', (3000, 3000), 0)
+ og_size = sem_image.size
+ padded_image.paste(sem_image,
+ ((3000-og_size[0])//2,
+ (3000-og_size[1])//2))
+ light_image = semmap_to_lightmap(np.array(padded_image))
+
+ if viz:
+ from mpl_toolkits.axes_grid1 import make_axes_locatable
+ fig,ax= plt.subplots(nrows=1,ncols=2,figsize=(13,5))
+ divider = make_axes_locatable(ax[0])
+ cax = divider.append_axes('right', size='5%', pad=0.05)
+ im = ax[0].imshow(ins_image)
+ fig.colorbar(im, cax=cax, orientation='vertical')
+
+ divider = make_axes_locatable(ax[1])
+ cax = divider.append_axes('right', size='5%', pad=0.05)
+ im = ax[1].imshow(sem_image)
+ fig.colorbar(im, cax=cax, orientation='vertical')
+
+ plt.show()
+
+ return ins_image, sem_image, light_image
+
+def get_bbox_vol(bbox):
+ coord_xy = shape_poly(bbox[1].get_coords())
+ z = bbox[1].z
+ return coord_xy.area * (z[1] - z[0])
+
+def get_significant_overlaps(obj_bboxes, threshold=0.8, verbose=False):
+ sig_overlap = set()
+ for i in range(len(obj_bboxes)):
+ for j in range(i + 1, len(obj_bboxes)):
+ if i in sig_overlap:
+ break
+ if j in sig_overlap:
+ continue
+ bbox_i = obj_bboxes[i]
+ bbox_j = obj_bboxes[j]
+ intersection_vol = overlaps(bbox_i, bbox_j)
+ if intersection_vol > 0:
+ volume_i = get_bbox_vol(bbox_i)
+ volume_j = get_bbox_vol(bbox_j)
+ if volume_i < volume_j:
+ if (intersection_vol / volume_i) > threshold:
+ sig_overlap.add(i)
+ if verbose:
+ print(intersection_vol/ volume_i, bbox_i[0], bbox_j[0])
+ else:
+ if (intersection_vol / volume_j) > threshold:
+ sig_overlap.add(j)
+ if verbose:
+ print(intersection_vol/ volume_j, bbox_i[0], bbox_j[0])
+ return sig_overlap
+
+def main():
+ args = parser.parse_args()
+ json_path = args.model_path
+ if not os.path.isfile(json_path):
+ raise ValueError('json file {} not found'.format(json_path))
+ if should_skip(json_path):
+ quit()
+ model_id = os.path.splitext(
+ os.path.basename(
+ os.path.normpath(json_path)))[0]
+ save_dir = os.path.join(args.save_root, model_id)
+ os.makedirs(save_dir, exist_ok=True)
+ export_visu_mesh(json_path, save_dir)
+ misc_dir = os.path.join(save_dir, 'misc')
+ os.makedirs(misc_dir, exist_ok=True)
+ with open(os.path.join(misc_dir, 'wall.json'), 'w') as fp:
+ json.dump([bbox.as_dict() for bbox in process_scene_wall(json_path)[1]], fp)
+ with open(os.path.join(misc_dir, 'window.json'), 'w') as fp:
+ json.dump([bbox.as_dict() for bbox in process_hole_elements(json_path, 'Window')[1]], fp)
+ with open(os.path.join(misc_dir, 'door.json'), 'w') as fp:
+ json.dump([bbox.as_dict() for bbox in process_hole_elements(json_path, 'Door')[1]], fp)
+ with open(os.path.join(misc_dir, 'hole.json'), 'w') as fp:
+ json.dump([bbox.as_dict() for bbox in process_hole_elements(json_path, 'Hole')[1]], fp)
+ with open(os.path.join(misc_dir, 'floor.json'), 'w') as fp:
+ json.dump([("undefined",poly.tolist()) for poly in process_scene_rooms(json_path)], fp)
+
+ objs = get_all_objs(json_path)
+ obj_bboxes = [(cat, BBox(None,None,None,o)) for cat, o in objs]
+ to_delete = get_significant_overlaps(obj_bboxes)
+ objs = [o for i,o in enumerate(objs) if i not in to_delete]
+ obj_bboxes = [(cat, BBox(None,None,None,o)) for cat, o in objs]
+ lap_dict = defaultdict(lambda : [])
+ for i in range(len(obj_bboxes)):
+ for j in range(i+1, len(obj_bboxes)):
+ if overlaps(obj_bboxes[i], obj_bboxes[j]):
+ lap_dict[(i,obj_bboxes[i][1])].append((j,obj_bboxes[j][1]))
+ lap_dict[(j,obj_bboxes[j][1])].append((i,obj_bboxes[i][1]))
+
+ for _ in range(len(lap_dict)):
+ overlaps_list = list(lap_dict.items())
+ overlaps_list.sort(key=lambda x:-get_volume(x[0][1]))
+ overlaps_list.sort(key=lambda x:-len(x[1]))
+ o = overlaps_list[0]
+ # try shrinking
+ shrink_success = False
+ bbox = o[0][1]
+ edge_x_og = bbox.edge_x[:]
+ edge_y_og = bbox.edge_y[:]
+ for scale_factor in range(20):
+ scale = 1. - 0.01 * scale_factor
+ # try scale edge_x
+ bbox.edge_x = edge_x_og * scale
+ overlap = False
+ for i in o[1]:
+ if has_overlap(bbox, i[1]):
+ overlap=True
+ break
+ if not overlap:
+ shrink_success = True
+ break
+ bbox.edge_x = edge_x_og
+ # try scale edge_y
+ bbox.edge_y = edge_y_og * scale
+ overlap = False
+ for i in o[1]:
+ if has_overlap(bbox, i[1]):
+ overlap=True
+ break
+ if not overlap:
+ shrink_success = True
+ break
+ bbox.edge_y = edge_y_og
+ # try scale both
+ bbox.edge_y = edge_y_og * scale
+ bbox.edge_x = edge_x_og * scale
+ overlap = False
+ for i in o[1]:
+ if has_overlap(bbox, i[1]):
+ overlap=True
+ break
+ if not overlap:
+ shrink_success = True
+ break
+
+ obj_bboxes[o[0][0]] = (obj_bboxes[o[0][0]][0], bbox)
+ # update graph
+ for j in o[1]:
+ lap_dict[j].remove(o[0])
+ del lap_dict[o[0]]
+
+ with open(os.path.join(misc_dir, 'free_furniture.json'), 'w') as fp:
+ json.dump([(cat, o.as_dict()) for cat, o in obj_bboxes], fp)
+
+ layout_dir = os.path.join(save_dir, 'layout')
+ os.makedirs(layout_dir, exist_ok=True)
+ ins_image,sem_image,light_image = gen_room_maps(json_path)
+ ins_image.save(os.path.join(layout_dir, 'floor_insseg_0.png'))
+ sem_image.save(os.path.join(layout_dir, 'floor_semseg_0.png'))
+ light_image.save(os.path.join(layout_dir, 'floor_lighttype_0.png'))
+
+if __name__ == '__main__':
+ main()
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/step_1_preprocess_cubicasa.py b/gibson2/utils/data_utils/ext_scene/scripts/step_1_preprocess_cubicasa.py
new file mode 100644
index 000000000..65235061d
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/step_1_preprocess_cubicasa.py
@@ -0,0 +1,457 @@
+import cv2
+import os
+import sys
+import math
+import json
+import shutil
+import random
+import argparse
+import matplotlib
+from xml.dom import minidom
+import numpy as np
+
+from matplotlib.patches import Polygon
+from shapely.geometry import Polygon as shape_poly
+import matplotlib.pyplot as plt
+from matplotlib.collections import PatchCollection
+from shapely.geometry import Polygon as shape_poly
+from collections import defaultdict
+from PIL import Image, ImageDraw
+
+from utils.utils import BBox,polygon_to_bbox,has_overlap,get_volume, semmap_to_lightmap
+from utils.svg_utils import PolygonWall, get_polygon, get_icon, get_points, get_direction
+from utils.semantics import *
+
+import gibson2
+
+
+parser = argparse.ArgumentParser("Convert Cubicasa5k...")
+
+parser.add_argument('--model_dir', dest='model_dir')
+parser.add_argument('--viz', dest='viz', action='store_true')
+parser.add_argument('--save_root', dest='save_root',
+ default=os.path.join(gibson2.cubicasa_dataset_path, 'scenes'))
+
+
+def get_z_dim(e):
+ desc = [p for p in e.childNodes if p.nodeName=='desc']
+ if len(desc) == 0:
+ raise ValueError('Furniture has no z dim annotation, should skip')
+ dim_infos = desc[0].firstChild.nodeValue.split(' ')
+ if len(dim_infos) != 4:
+ raise ValueError('Furniture should have 4 dimension info. {}'.format(dim_infos))
+ dim_dict = {}
+ for d in dim_infos:
+ if ":" not in d or len(d.split(':')) != 2:
+ raise ValueError('Furniture dim should have : as separator, and two elements. {}'.format(dim_infos))
+ k,v = d.split(':')
+ dim_dict[k] = float(v)
+ if 'Height' not in dim_dict or 'Elevation' not in dim_dict:
+ raise ValueError('Height/Elevantion key not present in {}'.format(dim_infos))
+ return dim_dict
+
+def get_transformation_matrix(ee):
+ transform = ee.getAttribute("transform")
+ strings = transform.split(',')
+ a = float(strings[0][7:])
+ b = float(strings[1])
+ c = float(strings[2])
+ d = float(strings[3])
+ e = float(strings[-2])
+ f = float(strings[-1][:-1])
+
+ M = np.array([[a, c, e],
+ [b, d, f],
+ [0, 0, 1]])
+
+ if ee.parentNode.getAttribute("class") == "FixedFurnitureSet":
+ parent_transform = ee.parentNode.getAttribute("transform")
+ strings = parent_transform.split(',')
+ a_p = float(strings[0][7:])
+ b_p = float(strings[1])
+ c_p = float(strings[2])
+ d_p = float(strings[3])
+ e_p = float(strings[-2])
+ f_p = float(strings[-1][:-1])
+ M_p = np.array([[a_p, c_p, e_p],
+ [b_p, d_p, f_p],
+ [0, 0, 1]])
+ M = np.matmul(M_p, M)
+ return M
+
+def get_rotation_angle(ee):
+ M = get_transformation_matrix(ee)
+ if abs(M[0,0]) > 1.:
+ return 0 if M[0,0] > 0 else math.pi
+ return np.arccos(M[0,0])
+
+def get_category(e):
+ if "FixedFurniture " not in e.getAttribute("class"):
+ return None
+ class_name = e.getAttribute("class").split("FixedFurniture ")[-1]
+ if class_name.startswith('ElectricalAppliance'):
+ toks = class_name.split('ElectricalAppliance')
+ if len(toks) != 2:
+ return None
+ class_name = toks[1].strip()
+ if class_name == "":
+ return None
+ return class_name
+
+def get_polygon(e):
+ pol = next(p for p in e.childNodes if p.nodeName == "polygon")
+ points = pol.getAttribute("points").split(' ')
+ points = points[:-1]
+
+ X, Y = np.array([]), np.array([])
+ for a in points:
+ y, x = a.split(',')
+ X = np.append(X, np.round(float(x)))
+ Y = np.append(Y, np.round(float(y)))
+ return X/100., Y/100.
+
+def get_wall(svg, shape):
+ wall_bboxes = []
+ height, width = shape
+ wall_image = Image.new('1', (height, width), 0)
+ d = ImageDraw.Draw(wall_image)
+ for e in svg.getElementsByTagName('g'):
+ try:
+ if e.getAttribute("id") == "Wall":
+ wall = PolygonWall(e, 1, shape)
+ bbox = polygon_to_bbox(wall.Y, wall.X, (0,2.4), None)
+ wall_bboxes.append(bbox)
+ coords = bbox.get_coords()*100.
+ y = coords[:,0]
+ x = coords[:,1]
+ d.polygon(list(zip(y,x)),fill=1)
+ except ValueError as k:
+ if str(k) != 'small wall':
+ raise k
+ continue
+ return wall_bboxes, wall_image
+
+def get_window_door(svg):
+ window_bboxes = []
+ door_bboxes = []
+ for e in svg.getElementsByTagName('g'):
+ if e.getAttribute("id") == "Window":
+ X, Y = get_points(e)
+ bbox = polygon_to_bbox(Y, X, (0.8,2.1), None)
+ window_bboxes.append(bbox)
+ if e.getAttribute("id") == "Door":
+ # How to reperesent empty door space
+ X, Y = get_points(e)
+ bbox = polygon_to_bbox(Y, X, (0,2.2), None)
+ door_bboxes.append(bbox)
+ return window_bboxes, door_bboxes
+
+
+def get_furniture(svg, wall_image):
+ furniture_bboxes = []
+ for e in svg.getElementsByTagName('g'):
+ if "FixedFurniture " in e.getAttribute("class"):
+ category = get_category(e)
+ if category is None or category in cubi_to_skip:
+ continue
+ rr, cc, X, Y = get_icon(e)
+ if len(X) != 4:
+ continue
+ z_dim = get_z_dim(e)
+ z_min = (z_dim['Elevation']) / 100.
+ z_max = z_min + z_dim['Height'] / 100.
+ bbox = polygon_to_bbox(Y, X, (z_min,z_max), get_rotation_angle(e),flip_image=wall_image)
+ furniture_bboxes.append((cubi_cat_mapping[category], bbox))
+ return furniture_bboxes
+
+def get_floor(svg):
+ floor_polygons = []
+ for e in svg.getElementsByTagName('g'):
+ if "Space " in e.getAttribute("class"):
+ room_type_raw = e.getAttribute("class").split(" ")[1]
+ if room_type_raw not in cubi_all_rooms:
+ room_type_ig = 'undefined'
+ else:
+ room_type_ig = cubi_all_rooms[room_type_raw]
+ X, Y = get_points(e)
+ floor_polygons.append((room_type_ig,
+ np.vstack([Y/100.,X/100.]).transpose()))
+ return floor_polygons
+
+
+
+def main():
+ args = parser.parse_args()
+ model_dir = os.path.normpath(args.model_dir)
+ print(model_dir)
+ # model_id = "_".join(model_dir.split('/')[-2:])
+ model_id = os.path.basename(os.path.normpath(model_dir))
+ svg_file = os.path.join(model_dir, 'model.svg')
+ img_path = os.path.join(model_dir, 'F1_scaled.png')
+ svg = minidom.parse(svg_file) # parseString also exists
+ fplan = cv2.imread(img_path)
+ fplan = cv2.cvtColor(fplan, cv2.COLOR_BGR2RGB) # correct color channels
+ height, width, nchannel = fplan.shape
+ shape = height, width
+
+ wall_bboxes, wall_image = get_wall(svg, shape)
+ window_bboxes, door_bboxes = get_window_door(svg)
+ furniture_bboxes = get_furniture(svg, wall_image)
+ floor_polygons = get_floor(svg)
+
+ overlaps = defaultdict(lambda : [])
+ for i in range(len(furniture_bboxes)):
+ for j in range(i+1, len(furniture_bboxes)):
+ if has_overlap(furniture_bboxes[i][1],
+ furniture_bboxes[j][1]):
+ overlaps[(i,furniture_bboxes[i][1])].append((j,furniture_bboxes[j][1]))
+ overlaps[(j,furniture_bboxes[j][1])].append((i,furniture_bboxes[i][1]))
+
+ to_delete = []
+
+
+ for _ in range(len(overlaps)):
+ overlaps_list = list(overlaps.items())
+ overlaps_list.sort(key=lambda x:-get_volume(x[0][1]))
+ overlaps_list.sort(key=lambda x:-len(x[1]))
+ o = overlaps_list[0]
+ # try shrinking
+ shrink_success = False
+ bbox = o[0][1]
+ edge_x_og = bbox.edge_x[:]
+ edge_y_og = bbox.edge_y[:]
+ for scale_factor in range(20):
+ scale = 1. - 0.01 * scale_factor
+ # try scale edge_x
+ bbox.edge_x = edge_x_og * scale
+ overlap = False
+ for i in o[1]:
+ if has_overlap(bbox, i[1]):
+ overlap=True
+ break
+ if not overlap:
+ shrink_success = True
+ break
+ bbox.edge_x = edge_x_og
+ # try scale edge_y
+ bbox.edge_y = edge_y_og * scale
+ overlap = False
+ for i in o[1]:
+ if has_overlap(bbox, i[1]):
+ overlap=True
+ break
+ if not overlap:
+ shrink_success = True
+ break
+ bbox.edge_y = edge_y_og
+ # try scale both
+ bbox.edge_y = edge_y_og * scale
+ bbox.edge_x = edge_x_og * scale
+ overlap = False
+ for i in o[1]:
+ if has_overlap(bbox, i[1]):
+ overlap=True
+ break
+ if not overlap:
+ shrink_success = True
+ break
+
+ if shrink_success:
+ furniture_bboxes[o[0][0]] = (furniture_bboxes[o[0][0]][0], bbox)
+ else:
+ # add to delete
+ to_delete.append(o[0][0])
+ # update graph
+ for j in o[1]:
+ overlaps[j].remove(o[0])
+ del overlaps[o[0]]
+
+ for i in sorted(to_delete, reverse=True):
+ del furniture_bboxes[i]
+
+
+ ##################################
+ # Splitting into separate floors #
+ ##################################
+ total_image = Image.new('1', (height, width), 0)
+ d = ImageDraw.Draw(total_image)
+
+ for group in [wall_bboxes, door_bboxes, window_bboxes]:
+ for bbox in group:
+ coords = bbox.get_coords()*100.
+ y = coords[:,0]
+ x = coords[:,1]
+ d.polygon(list(zip(y,x)),fill=1)
+ for _,bbox in furniture_bboxes:
+ coords = bbox.get_coords()*100.
+ y = coords[:,0]
+ x = coords[:,1]
+ d.polygon(list(zip(y,x)),fill=1)
+ for _,coords in floor_polygons:
+ y = coords[:,0]*100.
+ x = coords[:,1]*100.
+ d.polygon(list(zip(y,x)),fill=1)
+ int_image = np.array(total_image).astype(np.uint8)
+ binary = cv2.threshold(int_image, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
+ ret, labels = cv2.connectedComponents(binary)
+ masks = []
+ for label in range(1,ret):
+ mask = np.zeros_like(int_image)
+ mask[labels == label] = 1
+ masks.append(mask)
+ # iterate through list of masks, each of which is a floor
+ for floor_i,mask_i in enumerate(masks):
+ wall_bboxes_i = []
+ window_bboxes_i = []
+ door_bboxes_i= []
+ furniture_bboxes_i = []
+ floor_polygons_i = []
+ for bbox in wall_bboxes:
+ y,x = (bbox.center*100.).astype(int)
+ if y >= height:
+ y = height - 1
+ if x >= width:
+ x = width- 1
+ if mask_i[x,y] == 1:
+ wall_bboxes_i.append(bbox)
+ for bbox in door_bboxes:
+ y,x = (bbox.center*100.).astype(int)
+ if y >= height:
+ y = height - 1
+ if x >= width:
+ x = width- 1
+ if mask_i[x,y] == 1:
+ door_bboxes_i.append(bbox)
+ for bbox in window_bboxes:
+ y,x = (bbox.center*100.).astype(int)
+ if y >= height:
+ y = height - 1
+ if x >= width:
+ x = width- 1
+ if mask_i[x,y] == 1:
+ window_bboxes_i.append(bbox)
+ for c,bbox in furniture_bboxes:
+ y,x = (bbox.center*100.).astype(int)
+ if y >= height:
+ y = height - 1
+ if x >= width:
+ x = width- 1
+ if mask_i[x,y] == 1:
+ furniture_bboxes_i.append((c,bbox))
+ for poly in floor_polygons:
+ y,x = (np.array(
+ shape_poly(poly[1]).representative_point())*100.
+ ).astype(int)
+ if y >= height:
+ y = height - 1
+ if x >= width:
+ x = width- 1
+ if mask_i[x,y] == 1:
+ floor_polygons_i.append(poly)
+ if len(wall_bboxes_i) < 4 or len(floor_polygons_i) < 1:
+ # This suggests that the mask doesn't represent a floor
+ continue
+ model_dir = os.path.join(args.save_root,
+ '{}_floor_{}'.format(model_id,floor_i))
+ os.makedirs(model_dir, exist_ok=True)
+ save_dir = os.path.join(model_dir, 'misc')
+ os.makedirs(save_dir, exist_ok=True)
+ with open(os.path.join(save_dir, 'wall.json'), 'w') as fp:
+ json.dump([bbox.as_dict() for bbox in wall_bboxes_i], fp)
+ with open(os.path.join(save_dir, 'window.json'), 'w') as fp:
+ json.dump([bbox.as_dict() for bbox in window_bboxes_i], fp)
+ with open(os.path.join(save_dir, 'door.json'), 'w') as fp:
+ json.dump([bbox.as_dict() for bbox in door_bboxes_i], fp)
+ with open(os.path.join(save_dir, 'furniture.json'), 'w') as fp:
+ json.dump([(cat,bbox.as_dict()) for
+ cat,bbox in furniture_bboxes_i], fp)
+ with open(os.path.join(save_dir, 'floor.json'), 'w') as fp:
+ json.dump([(cat,poly.tolist()) for cat,poly in
+ floor_polygons_i], fp)
+
+ layout_dir = os.path.join(model_dir, 'layout')
+ os.makedirs(layout_dir, exist_ok=True)
+
+ coords = [bbox.get_coords() for bbox in wall_bboxes_i]
+ stacked = np.vstack(coords)
+ xmin, ymin = stacked.min(axis=0)
+ xmax, ymax = stacked.max(axis=0)
+ max_length = np.max([np.abs(xmin), np.abs(ymin), np.abs(xmax), np.abs(ymax)])
+ max_length = np.ceil(max_length).astype(np.int)
+ ins_image = Image.new('L', (2 * max_length * 100, 2 * max_length * 100), 0)
+ d1 = ImageDraw.Draw(ins_image)
+ sem_image = Image.new('L', (2 * max_length * 100, 2 * max_length * 100), 0)
+ d2 = ImageDraw.Draw(sem_image)
+ for i, (cat, poly) in enumerate(floor_polygons_i):
+ room_id = rooms.index(cat)
+ pts = [((x + max_length)*100.,(y + max_length)*100.)
+ for x,y in poly]
+ d1.polygon(pts,fill=i+1)
+ d2.polygon(pts,fill=room_id+1)
+
+ ins_image.save(os.path.join(layout_dir, 'floor_insseg_0.png'))
+ sem_image.save(os.path.join(layout_dir, 'floor_semseg_0.png'))
+
+ padded_image = Image.new('L', (3000, 3000), 0)
+ og_size = sem_image.size
+ padded_image.paste(sem_image,
+ ((3000-og_size[0])//2,
+ (3000-og_size[1])//2))
+ light_image = semmap_to_lightmap(np.array(padded_image))
+ light_image.save(os.path.join(layout_dir, 'floor_lighttype_0.png'))
+
+ if args.viz:
+ from mpl_toolkits.axes_grid1 import make_axes_locatable
+ fig,ax= plt.subplots(nrows=1,ncols=2,figsize=(13,5))
+ divider = make_axes_locatable(ax[0])
+ cax = divider.append_axes('right', size='5%', pad=0.05)
+ im = ax[0].imshow(ins_image)
+ fig.colorbar(im, cax=cax, orientation='vertical')
+
+ divider = make_axes_locatable(ax[1])
+ cax = divider.append_axes('right', size='5%', pad=0.05)
+ im = ax[1].imshow(sem_image)
+ fig.colorbar(im, cax=cax, orientation='vertical')
+ png_path = os.path.join(save_dir, 'room_sem_viz.png')
+ fig.savefig(png_path)
+
+ wall_patches = [Polygon(bbox.get_coords(), True, color='b')
+ for bbox in wall_bboxes_i]
+ window_patches = [Polygon(bbox.get_coords(), True, color='b')
+ for bbox in window_bboxes_i]
+ door_patches = [Polygon(bbox.get_coords(), True, color='b')
+ for bbox in door_bboxes_i]
+ furn_patches = [Polygon(bbox.get_coords(), True, color='b')
+ for c, bbox in furniture_bboxes_i]
+ floor_patches = [Polygon(poly, True, color='b')
+ for cat,poly in floor_polygons_i]
+
+ quivers = [np.array([*bbox.center, *bbox.nrm])
+ for c,bbox in furniture_bboxes_i]
+
+ fig, ax = plt.subplots(figsize=(11,11))
+ p0 = PatchCollection(floor_patches, cmap=matplotlib.cm.jet, alpha=0.3)
+ colors = np.random.random(10)
+ p0.set_array(colors)
+ ax.add_collection(p0)
+ p = PatchCollection(wall_patches, alpha=0.2)
+ ax.add_collection(p)
+ p1 = PatchCollection(window_patches, alpha=1)
+ ax.add_collection(p1)
+ p2 = PatchCollection(door_patches, alpha=1)
+ p2.set_array(np.random.random(10))
+ ax.add_collection(p2)
+ p3 = PatchCollection(furn_patches, cmap=matplotlib.cm.jet, alpha=1)
+ colors = 100*np.random.random(10)
+ p3.set_array(colors)
+ ax.add_collection(p3)
+ ax.set_ylim([0,width/100.])
+ ax.set_xlim([0,height/100.])
+ if len(quivers) > 0:
+ x,y,u,v = np.vstack(quivers).transpose()
+ ax.quiver(x, y, u, v, scale=20)
+ png_path = os.path.join(save_dir, 'viz.png')
+ fig.savefig(png_path)
+
+if __name__ == '__main__':
+ main()
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/step_2_generate_scene.py b/gibson2/utils/data_utils/ext_scene/scripts/step_2_generate_scene.py
new file mode 100644
index 000000000..d7969e8e1
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/step_2_generate_scene.py
@@ -0,0 +1,384 @@
+import matplotlib.pyplot as plt
+from matplotlib.patches import Polygon
+from matplotlib.collections import PatchCollection
+from xml.dom import minidom
+import itertools
+from collections import defaultdict
+import numpy as np
+from shapely.geometry import Polygon as shape_poly
+from shapely.geometry import LineString as shape_string
+from shapely.ops import cascaded_union
+import warnings
+import open3d as o3d
+import argparse
+import pickle
+import json
+import subprocess
+
+from utils.Wall_bbox import Wall_bbox
+import utils.earcut as earcut
+from utils.utils import *
+from utils.scene_urdf import gen_scene_urdf,gen_orig_urdf
+
+parser = argparse.ArgumentParser("Generate mesh based on labelImg annotation...")
+
+parser.add_argument('--model_dir', dest='model_dir') # directory wi=th json files
+parser.add_argument('--skirt_file', dest='skirt_file', default='utils/data/skirt.npy')
+parser.add_argument('--skip_saving', dest='skip_save', action='store_true')
+parser.add_argument('--overwrite', dest='overwrite', action='store_true')
+
+structure_classes = ['wall', 'door', 'window', 'floor',
+ 'fireplace', 'hole', 'stair']
+ceiling_height = 2.4
+fixed_scale_object = {'picture': [0.02]}
+no_snap = ['fireplace', 'counter', 'TV']
+cube_shape = ['counter', 'chest', 'carpet']
+
+def gen_structure(wall_bbox,hole_bbox,floor_bbox, model_dir, skirt_pts, save_obj=False, overwrite=False):
+ # finding correspondence between wall and windows
+ # print('Examining walls and holes...')
+ walls_poly = []
+ for bbox in wall_bbox:
+ polygon = shape_poly(bbox.get_coords())
+ walls_poly.append(polygon)
+ holes_poly = []
+ for bbox,_ in hole_bbox:
+ polygon = shape_poly(bbox.get_coords())
+ holes_poly.append(polygon)
+
+ walls_to_holes = defaultdict(lambda : [])
+ for hi, hole in enumerate(holes_poly):
+ has_intersect = False
+ distances = []
+ overlaps = [hole.intersects(wall) for wall in walls_poly]
+ overlaps_area = [hole.intersection(wall).area if overlap else 0
+ for overlap,wall in zip(overlaps, walls_poly) ]
+ if sum(overlaps) > 1:
+ max_idx = np.argmax(overlaps_area)
+ for wi, o in enumerate(overlaps):
+ if wi == max_idx:
+ walls_to_holes[wi].append(hole_bbox[hi])
+ elif o:
+ snap_out_of_wall(hole_bbox[hi][0], wall_bbox[wi],
+ hole, walls_poly[wi])
+ elif sum(overlaps) == 1:
+ wi = overlaps.index(True)
+ walls_to_holes[wi].append(hole_bbox[hi])
+ else:
+ continue
+
+ if save_obj:
+ structure_dir = os.path.join(model_dir, 'shape', 'visual')
+ os.makedirs(structure_dir, exist_ok=True)
+ vhacd_dir = os.path.join(model_dir, 'shape', 'collision')
+ os.makedirs(vhacd_dir, exist_ok=True)
+
+ verts = []
+ faces = []
+
+ structure_obj = []
+ num_verts = 0
+ for idx, w in enumerate(wall_bbox):
+
+ wall = Wall_bbox(w, ceiling_height=w.z[1])
+ if idx in walls_to_holes:
+ for bbox,oname in walls_to_holes[idx]:
+ new_bb = wall.add_hole(bbox)
+ if oname != '':
+ structure_obj.append((new_bb, oname))
+ v, f = wall.build()
+ if save_obj:
+ cm_path = os.path.join(vhacd_dir, 'wall_{}_cm.obj'.format(idx))
+ if overwrite or not os.path.isfile(cm_path):
+ wall.build_collision_mesh(cm_path)
+
+ verts.append(v)
+ f[:, :3] += num_verts
+ faces.append(f)
+ num_verts += v.shape[0]
+
+ v, f = wall.add_skirt(skirt_pts)
+ verts.append(v)
+ f[:, :3] += num_verts
+ faces.append(f)
+ num_verts += v.shape[0]
+
+ v = np.concatenate(verts, axis=0)
+ f = np.concatenate(faces, axis=0)
+ if save_obj:
+ vm_path = os.path.join(structure_dir, 'wall_vm.obj'.format(idx))
+ if overwrite or not os.path.isfile(vm_path):
+ with open(vm_path, 'w') as fp:
+ for vs in v.reshape([-1,3]):
+ fp.write('v {} {} {}\n'.format(*vs))
+ for f1,f2,f3,fn in f:
+ fp.write('f {f1} {f2} {f3}\n'.format(f1=f1,f2=f2,f3=f3))
+
+ ### Process floors
+ floor_counter = 0
+ if len(floor_bbox) > 0 and type(floor_bbox[0]) is not list:
+ floor_ids = set([i for _,i in floor_bbox])
+ if 0 in floor_ids:
+ floor_id_remap = {}
+ for i in floor_ids:
+ floor_id_remap[i] = i+1
+ else:
+ floor_id_remap = {}
+ for i in floor_ids:
+ floor_id_remap[i] = i
+ floor_id_remap[-1] = 0
+
+ floor_polygons = defaultdict(lambda : [])
+ for idx,(bbox,id) in enumerate(floor_bbox):
+ if floor_id_remap[id] == 0:
+ # print(floor_counter)
+ if save_obj:
+ floor_path = os.path.join(structure_dir,
+ 'floor_{}_vm.obj'.format(floor_counter))
+ v, f = gen_cube_obj(bbox, floor_path,
+ is_color=False,
+ should_save=(overwrite or not os.path.isfile(floor_path)))
+ bbox.z = (ceiling_height, ceiling_height + 0.2)
+ v = np.asarray(v)
+ f = np.asarray(f)
+ verts.append(v)
+ f[:, :3] += num_verts
+ faces.append(f)
+ num_verts += v.shape[0]
+ floor_counter += 1
+ else:
+ floor_polygons[floor_id_remap[id]].append(shape_poly(bbox.get_coords()))
+ else:
+ floor_polygons = {}
+ for i,f in enumerate(floor_bbox):
+ floor_polygons[i] = [shape_poly(f)]
+
+ thickness = 0.2
+ for k,polys in floor_polygons.items():
+ if len(polys) > 1:
+ x,y = cascaded_union(polys).exterior.coords.xy
+ else:
+ x,y = polys[0].exterior.coords.xy
+ v = np.asarray([x,y]).T
+ v = v[:-1]
+ v_flat = np.reshape(v, -1)
+ f_t = np.array(earcut.earcut(v_flat)).reshape((-1,3)) + 1
+ v_z = np.asarray([0.,] * int(v.shape[0]))[:,np.newaxis]
+ top_v = np.concatenate([v, v_z], axis=-1)
+ back_v = top_v+0.0
+ back_v[:,-1] = -thickness
+ f_b = f_t + len(top_v)
+ temp = f_b[:,1] + 0.0
+ f_b[:,1] = f_b[:,0]
+ f_b[:,0] = temp
+ cross_faces = []
+ curr_point = 1
+ num_front_plane = len(top_v)
+ for idx in range(num_front_plane):
+ if idx == num_front_plane -1:
+ next_point = 1
+ else:
+ next_point = curr_point + 1
+ cross_faces.append((curr_point, next_point, curr_point + num_front_plane))
+ cross_faces.append((curr_point + num_front_plane, next_point,
+ next_point + num_front_plane))
+ curr_point = next_point
+ v = np.concatenate([top_v, back_v])
+ f = np.concatenate([f_t, f_b, cross_faces], axis=0)
+ f_n = np.asarray([0,] * int(f.shape[0]))[:,np.newaxis]
+ f = np.concatenate([f, f_n], axis=-1)
+ if save_obj:
+ floor_path = os.path.join(structure_dir,
+ 'floor_{}_vm.obj'.format(floor_counter))
+ if overwrite or not os.path.isfile(floor_path):
+ with open(floor_path , 'w') as fp:
+ for vs in v.reshape([-1,3]):
+ fp.write('v {} {} {}\n'.format(*vs))
+ for f1,f2,f3,fn in f.reshape([-1,4]):
+ fp.write('f {f1} {f2} {f3}\n'.format(f1=f1,f2=f2,f3=f3))
+
+ verts.append(v)
+ f[:, :3] += num_verts
+ faces.append(f)
+ num_verts += v.shape[0]
+ floor_counter += 1
+
+ verts = np.concatenate(verts, axis=0)
+ faces = np.concatenate(faces, axis=0)
+ if save_obj:
+ with open(os.path.join( model_dir, 'misc', 'structure.obj' ), 'w') as fp:
+ for vs in verts.reshape([-1,3]):
+ fp.write('v {} {} {}\n'.format(*vs))
+
+ for f1,f2,f3,fn in faces.reshape([-1,4]):
+ fp.write('f {f1} {f2} {f3}\n'.format(f1=f1,f2=f2,f3=f3))
+
+ xa,ya,_ = verts.min(axis=0)
+ x,y,_ = verts.max(axis=0)
+ floor_coords = np.asarray([(x,y),(xa,y),(xa,ya),(x,ya)])
+ total_floor = BBox(floor_coords,0, 0-thickness)
+
+ if save_obj:
+ floor_cm_path = os.path.join(vhacd_dir, 'floor_cm.obj')
+ if overwrite or not os.path.isfile(floor_cm_path):
+ gen_cube_obj(total_floor, floor_cm_path, is_color=False)
+ total_ceiling = BBox(floor_coords, ceiling_height + thickness, ceiling_height)
+ ceiling_cm_path = os.path.join(vhacd_dir, 'ceiling_cm.obj')
+ if overwrite or not os.path.isfile(ceiling_cm_path):
+ gen_cube_obj(total_ceiling, ceiling_cm_path, is_color=False)
+ ceiling_vm_path = os.path.join(structure_dir, 'ceiling_vm.obj')
+ if overwrite or not os.path.isfile(ceiling_vm_path):
+ gen_cube_obj(total_ceiling, ceiling_vm_path, is_color=False)
+
+ bbox_dir = os.path.join(model_dir, 'misc', 'bbox')
+ os.makedirs(bbox_dir, exist_ok=True)
+ all_objects = []
+ for idx, (bbox, oclass) in enumerate(structure_obj):
+ bbox_path = os.path.join(bbox_dir, '{}_{}_bbox.obj'.format(oclass, idx))
+ x,y,z = bbox.get_scale()
+ if x > y:
+ continue
+ gen_cube_obj(bbox, bbox_path, is_color=True)
+ bbox_dict=bbox.as_dict()
+ bbox_dict['category'] = oclass
+ bbox_dict['instance'] = None
+ bbox_dict['is_fixed'] = True
+ bbox_dict['theta'] = bbox.get_rotation_angle()
+ all_objects.append(bbox_dict)
+ return all_objects
+
+def export_scene(fixed_obj_bbox,free_obj_bbox,wall_bbox,model_dir):
+ walls_poly = []
+ for bbox in wall_bbox:
+ polygon = shape_poly(bbox.get_coords())
+ walls_poly.append(polygon)
+
+ free_poly = []
+ for _, bbox in free_obj_bbox:
+ polygon = shape_poly(bbox.get_coords())
+ free_poly.append(polygon)
+ for i, obj in enumerate(free_poly):
+ for wi, wall in enumerate(walls_poly):
+ if obj.intersects(wall):
+ snap_out_of_wall(free_obj_bbox[i][1], wall_bbox[wi], obj, wall)
+ free_poly_snapped= [shape_poly(bbox.get_coords()) for _, bbox in free_obj_bbox]
+ to_delete = []
+ for i, obj in enumerate(free_poly_snapped):
+ for wi, wall in enumerate(walls_poly):
+ if obj.intersects(wall):
+ to_delete.append(i)
+ free_obj_bbox = [f for i,f in enumerate(free_obj_bbox) if i not in to_delete]
+
+ fixed_poly = []
+ for _, bbox in fixed_obj_bbox:
+ polygon = shape_poly(bbox.get_coords())
+ fixed_poly.append(polygon)
+ vs = []
+ fs = []
+ all_objects = []
+
+ bbox_dir = os.path.join(model_dir,'misc', 'bbox')
+ os.makedirs(bbox_dir, exist_ok=True)
+ for i,(oclass, bbox) in enumerate(free_obj_bbox):
+ if oclass == 'shower_head':
+ continue
+ bbox_dict=bbox.as_dict()
+ instance = None
+ if '=' in oclass:
+ oclass,instance = oclass.split('=')
+ instance = int(instance)
+ bbox_path = os.path.join(bbox_dir, 'free_{}_{}_bbox.obj'.format(oclass, i))
+ gen_cube_obj(bbox, bbox_path, is_color=True)
+ bbox_dict['category'] = oclass
+ bbox_dict['instance'] = instance
+ bbox_dict['is_fixed'] = False
+ bbox_dict['theta'] = bbox.get_rotation_angle()
+ all_objects.append(bbox_dict)
+
+ for i,(oclass, bbox) in enumerate(fixed_obj_bbox):
+ if oclass == 'shower_head':
+ continue
+ bbox_dict=bbox.as_dict()
+ instance = None
+ if '=' in oclass:
+ oclass,instance = oclass.split('=')
+ instance = int(instance)
+ bbox_path = os.path.join(bbox_dir, 'fixed_{}_{}_bbox.obj'.format(oclass, i))
+ gen_cube_obj(bbox, bbox_path, is_color=True)
+ bbox_dict['category'] = oclass
+ bbox_dict['instance'] = instance
+ bbox_dict['is_fixed'] = True
+ bbox_dict['theta'] = bbox.get_rotation_angle()
+ all_objects.append(bbox_dict)
+
+ return all_objects
+
+def main():
+ args = parser.parse_args()
+ if not os.path.isdir(args.model_dir):
+ raise ValueError('iGibson model directory does not exist: {}'
+ .format(args.model_dir))
+ model_dir = args.model_dir
+ misc_path =os.path.join(model_dir, 'misc')
+ os.makedirs(misc_path, exist_ok=True)
+ skirt_pts = np.load(args.skirt_file)
+
+ files = os.listdir(misc_path)
+ with open(os.path.join(misc_path, 'wall.json'), 'r') as fp:
+ wall_bbox = [BBox(None,None,None,f)
+ for f in json.load(fp)]
+ hole_bbox = []
+ with open(os.path.join(misc_path, 'window.json'), 'r') as fp:
+ hole_bbox.extend([(BBox(None,None,None,f), 'window')
+ for f in json.load(fp)])
+ with open(os.path.join(misc_path, 'door.json'), 'r') as fp:
+ hole_bbox.extend([(BBox(None,None,None,f), 'door')
+ for f in json.load(fp)])
+ if 'hole.json' in files:
+ with open(os.path.join(misc_path, 'hole.json'), 'r') as fp:
+ hole_bbox.extend([(BBox(None,None,None,f), '')
+ for f in json.load(fp)])
+ if 'furniture.json' in files:
+ with open(os.path.join(misc_path,
+ 'furniture.json'), 'r') as fp:
+ fixed_obj_bbox = [(c,BBox(None,None,None,f))
+ for c,f in json.load(fp)]
+ else:
+ fixed_obj_bbox = []
+ with open(os.path.join(misc_path, 'floor.json'), 'r') as fp:
+ floor_bbox = [b for _,b in json.load(fp)]
+ if 'free_furniture.json' in files:
+ with open(os.path.join(misc_path,
+ 'free_furniture.json'), 'r') as fp:
+ free_obj_bbox = [(c,BBox(None,None,None,f))
+ for c,f in json.load(fp)]
+ else:
+ free_obj_bbox = []
+
+ structure_objs = gen_structure(wall_bbox, hole_bbox, floor_bbox, model_dir,
+ skirt_pts, save_obj=(not args.skip_save), overwrite=args.overwrite)
+ all_objects = export_scene(fixed_obj_bbox,free_obj_bbox,wall_bbox,model_dir)
+
+ all_objects.extend(structure_objs)
+ json_path = os.path.join(misc_path, "all_objs.json")
+ with open(json_path, 'w') as outfile:
+ json.dump(all_objects, outfile)
+
+ model_name = os.path.basename(model_dir)
+ urdf_dir = os.path.join(model_dir, 'urdf')
+ os.makedirs(urdf_dir,exist_ok=True)
+
+ for component in ['wall', 'ceiling', 'floor']:
+ with open(os.path.join(urdf_dir,
+ '{}_{}s.urdf'.format(model_name,component)), 'w') as fp:
+ fp.write(gen_scene_urdf(model_dir, model_name, component))
+ with open(os.path.join(urdf_dir,
+ '{}_orig.urdf'.format(model_name)), 'w') as fp:
+ fp.write(gen_orig_urdf(model_name))
+
+ layout_dir = os.path.join(model_dir, 'layout')
+ os.makedirs(layout_dir,exist_ok=True)
+
+if __name__ == '__main__':
+ main()
+
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/step_3_add_mtl.py b/gibson2/utils/data_utils/ext_scene/scripts/step_3_add_mtl.py
new file mode 100644
index 000000000..428b73ebe
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/step_3_add_mtl.py
@@ -0,0 +1,106 @@
+import os
+import glob
+import random
+import subprocess
+import argparse
+import json
+
+use_mat = 'mtllib {}.mtl\nusemtl default\n'
+wall_default='''newmtl default
+Ns 225.000000
+Ka 1.000000 1.000000 1.000000
+Kd 0.800000 0.800000 0.800000
+Ks 0.500000 0.500000 0.500000
+Ke 0.000000 0.000000 0.000000
+Ni 1.450000
+d 1.000000
+illum 2
+map_Kd ../../../../materials/default_material/wall/diffuse.png
+map_Pr ../../../../materials/default_material/wall/roughness.png
+map_bump ../../../../materials/default_material/wall/normal.png
+'''
+floor_default='''newmtl default
+Ns 225.000000
+Ka 1.000000 1.000000 1.000000
+Kd 0.800000 0.800000 0.800000
+Ks 0.500000 0.500000 0.500000
+Ke 0.000000 0.000000 0.000000
+Ni 1.450000
+d 1.000000
+illum 2
+map_Kd ../../../../materials/default_material/floor/diffuse.png
+map_Pr ../../../../materials/default_material/floor/roughness.png
+map_bump ../../../../materials/default_material/floor/normal.png
+'''
+
+parser = argparse.ArgumentParser("Add default mtl files...")
+parser.add_argument('--input_dir', dest='input_dir')
+
+def add_mat(input_mesh, output_mesh, mat_name):
+ with open(input_mesh, 'r') as fin:
+ lines = fin.readlines()
+ for l in lines:
+ if l == 'mtllib {}.mtl\n'.format(mat_name):
+ return
+ with open(output_mesh, 'w') as fout:
+ fout.write(use_mat.format(mat_name))
+ for line in lines:
+ if not line.startswith('o') and not line.startswith('s'):
+ fout.write(line)
+
+def gen_scene_mat(scene_dir):
+ misc_dir = os.path.join(scene_dir, 'misc')
+ mesh_dir = os.path.join(scene_dir, 'shape', 'visual')
+
+ wall_mat = {"1": ["bricks", "concrete", "paint", "plaster"]}
+ wall_mat_map = {}
+ mat_name = 'wall'
+ mtl_path = os.path.join(mesh_dir, '{}.mtl'.format(mat_name))
+ with open(mtl_path, 'w') as fp:
+ fp.write(wall_default)
+ for f in os.listdir(mesh_dir):
+ if ('wall' in f or 'skirt' in f) and os.path.splitext(f)[-1] == '.obj':
+ wall_mat_map[f] = 1
+ obj_path = os.path.join( mesh_dir, f )
+ add_mat( obj_path, obj_path, mat_name )
+ with open(os.path.join(misc_dir,
+ 'walls_material_groups.json'), 'w') as fp:
+ json.dump([wall_mat, wall_mat_map], fp)
+
+ ceiling_mat = {"1": ["concrete", "paint", "plaster"]}
+ ceiling_mat_map = {}
+ mat_name = 'ceiling'
+ mtl_path = os.path.join(mesh_dir, '{}.mtl'.format(mat_name))
+ with open(mtl_path, 'w') as fp:
+ fp.write(wall_default)
+ for f in os.listdir(mesh_dir):
+ if 'ceiling' in f and os.path.splitext(f)[-1] == '.obj':
+ ceiling_mat_map[f] = 1
+ obj_path = os.path.join( mesh_dir, f )
+ add_mat( obj_path, obj_path, mat_name )
+ with open(os.path.join(misc_dir,
+ 'ceilings_material_groups.json'), 'w') as fp:
+ json.dump([ceiling_mat, ceiling_mat_map], fp)
+
+ floor_mat = {"1": ["asphalt", "concrete", "fabric_carpet",
+ "marble", "planks", "terrazzo",
+ "tiles", "wood_floor"]}
+ floor_mat_map = {}
+ for f in os.listdir(mesh_dir):
+ if 'floor' not in f or os.path.splitext(f)[-1] != '.obj':
+ continue
+ floor_mat_map[f] = 1
+ mat_name = '_'.join(f.split('_')[:2])
+ mtl_path = os.path.join(mesh_dir, '{}.mtl'.format(mat_name))
+ with open(mtl_path, 'w') as fp:
+ fp.write(floor_default)
+ obj_path = os.path.join( mesh_dir, f )
+ add_mat( obj_path, obj_path, mat_name )
+ with open(os.path.join(misc_dir,
+ 'floors_material_groups.json'), 'w') as fp:
+ json.dump([floor_mat, floor_mat_map], fp)
+
+
+args = parser.parse_args()
+if os.path.isdir(args.input_dir):
+ gen_scene_mat(args.input_dir)
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/step_3_uv_unwrap.py b/gibson2/utils/data_utils/ext_scene/scripts/step_3_uv_unwrap.py
new file mode 100644
index 000000000..cae19f694
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/step_3_uv_unwrap.py
@@ -0,0 +1,93 @@
+import bpy
+import math
+import sys
+import os
+script_dir = os.path.dirname(os.path.abspath(__file__))
+utils_dir = os.path.join(script_dir, '../../blender_utils')
+sys.path.append(utils_dir)
+
+from utils import redirect_output
+model_dir = sys.argv[-1]
+
+model_id = os.path.basename(model_dir)
+
+obj_dir = os.path.join(model_dir, 'shape/visual')
+
+if os.path.isdir(obj_dir):
+ objs = [a for a in os.listdir(obj_dir) if os.path.splitext(a)[1] == '.obj']
+
+ blend_path = os.path.join(model_dir, '{}.blend'.format(model_id))
+
+ ####################################
+ # Clearing light, camera, cube
+ ####################################
+
+ for on in bpy.context.scene.objects.keys():
+ obj = bpy.context.scene.objects[on]
+ bpy.data.objects.remove(obj)
+
+ def check_has_vt_unwrapped_already(obj):
+ with open(os.path.join(obj_dir, o), 'r') as fp:
+ for l in fp.readlines():
+ if l.startswith('vt '):
+ return True
+ return False
+
+ ####################################
+ # Importing Objs
+ ####################################
+
+ with redirect_output():
+ data_up, data_forward = ('Z', '-X')
+ for o in objs:
+ obj_path = os.path.join(obj_dir, o)
+ if check_has_vt_unwrapped_already(obj_path):
+ continue
+ bpy.ops.import_scene.obj(
+ filepath = obj_path,
+ axis_up = data_up,
+ axis_forward = data_forward,
+ use_edges = True,
+ use_smooth_groups = True,
+ use_split_objects = False,
+ use_split_groups = False,
+ use_groups_as_vgroups = False,
+ use_image_search = False,
+ split_mode = 'OFF')
+
+ print(bpy.context.scene.objects.keys())
+
+
+ ####################################
+ # Per Object UV Unwrap (preferred)
+ ####################################
+ vl = bpy.context.view_layer
+ bpy.ops.object.select_all(action='DESELECT')
+ for on in bpy.context.scene.objects.keys():
+ obj = bpy.context.scene.objects[on]
+ new_uv = bpy.context.scene.objects[on].data.uv_layers.new(name='obj_uv')
+ vl.objects.active = obj
+ obj.select_set(True)
+ bpy.ops.object.editmode_toggle()
+ bpy.ops.mesh.select_all(action="SELECT")
+ bpy.ops.uv.smart_project(angle_limit=66, island_margin = 0.02)
+ bpy.ops.object.editmode_toggle()
+ bpy.ops.object.select_all(action='DESELECT')
+
+
+ bpy.context.tool_settings.mesh_select_mode = (False, False, True)
+
+ for on in bpy.context.scene.objects.keys():
+ obj = bpy.context.scene.objects[on]
+ vl.objects.active = obj
+ obj.select_set(True)
+ save_path = os.path.join(obj_dir, "{}.obj".format(on))
+ bpy.ops.export_scene.obj(filepath=save_path, use_selection=True,
+ axis_up=data_up, axis_forward=data_forward,
+ use_materials=False,
+ use_triangles=True,
+ path_mode="COPY")
+
+ obj.select_set(False)
+
+bpy.ops.wm.quit_blender()
diff --git a/gibson2/utils/scene_converter.py b/gibson2/utils/data_utils/ext_scene/scripts/step_4_convert_to_ig.py
similarity index 83%
rename from gibson2/utils/scene_converter.py
rename to gibson2/utils/data_utils/ext_scene/scripts/step_4_convert_to_ig.py
index 7684a6b0b..ff609f1c7 100644
--- a/gibson2/utils/scene_converter.py
+++ b/gibson2/utils/data_utils/ext_scene/scripts/step_4_convert_to_ig.py
@@ -1,16 +1,17 @@
#!/usr/bin/env python
-from gibson2.utils.utils import parse_config
import os
-import gibson2
-
-from gibson2.utils.assets_utils import get_ig_scene_path, get_ig_category_path
-
-import argparse
-import xml.etree.ElementTree as ET
import json
-import numpy as np
import math
+import shutil
+import gibson2
+import argparse
+import numpy as np
+import xml.etree.ElementTree as ET
+from gibson2.utils.utils import parse_config
+
+from gibson2.scenes.igibson_indoor_scene import SCENE_SOURCE
+from gibson2.utils.assets_utils import get_ig_scene_path,get_cubicasa_scene_path,get_3dfront_scene_path, get_ig_category_path
"""
Script to update all urdfs
@@ -28,19 +29,28 @@ missing_models = set([
'closet',
'ac_engine',
'water_hearter',
- 'clutter'
+ 'clutter',
+ 'ceiling_lamp'
])
-def convert_scene(scene_name, select_best=False):
-
+def convert_scene(scene_name, scene_source, select_best=False):
+ if scene_source not in SCENE_SOURCE:
+ raise ValueError(
+ 'Unsupported scene source: {}'.format(scene_source))
+ if scene_source == "IG":
+ scene_dir = get_ig_scene_path(scene_name)
+ elif scene_source == "CUBICASA":
+ scene_dir = get_cubicasa_scene_path(scene_name)
+ else:
+ scene_dir = get_3dfront_scene_path(scene_name)
scene_file = os.path.join(
- get_ig_scene_path(scene_name), "urdf", "{}_orig.urdf".format(scene_name))
+ scene_dir, "urdf", "{}_orig.urdf".format(scene_name))
scene_tree = ET.parse(scene_file)
- bbox_dir = os.path.join(get_ig_scene_path(scene_name), "bbox")
+ bbox_dir = os.path.join(scene_dir, "bbox")
os.makedirs(bbox_dir, exist_ok=True)
- with open(get_ig_scene_path(scene_name) + '/misc/all_objs.json', 'r') as all_objs_file:
+ with open(os.path.join(scene_dir, 'misc','all_objs.json'), 'r') as all_objs_file:
all_objs = json.load(all_objs_file)
total = 0
@@ -142,9 +152,16 @@ def convert_scene(scene_name, select_best=False):
# print(total)
fname = scene_name if not select_best else "{}_best".format(scene_name)
- scene_file_out = os.path.join(get_ig_scene_path(
- scene_name), "urdf", "{}.urdf".format(fname))
+ scene_file_out = os.path.join( scene_dir, "urdf", "{}.urdf".format(fname))
scene_tree.write(scene_file_out, xml_declaration=True)
+ if select_best and scene_source == 'THREEDFRONT':
+ urdf_dir = os.path.join(
+ gibson2.threedfront_dataset_path,
+ 'no_col_urdfs')
+ urdf_no_col = os.path.join(urdf_dir,
+ "{}_best_no_col.urdf".format(scene_name))
+ if os.path.isfile(urdf_no_col):
+ shutil.copyfile(urdf_no_col, scene_file_out)
print('all categories:', categories)
@@ -218,10 +235,11 @@ def main():
nargs='+', help='The name of the scene to process')
parser.add_argument('--select_best', dest='select_best',
action='store_true')
+ parser.add_argument('--source', dest='source', help='Source of the scene, should be among [CUBICASA, IG, THREEDFRONT]')
args = parser.parse_args()
for scene_name in args.scene_names:
- convert_scene(scene_name, select_best=args.select_best)
+ convert_scene(scene_name, args.source, select_best=args.select_best)
if __name__ == "__main__":
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/step_5_generate_trav_map.py b/gibson2/utils/data_utils/ext_scene/scripts/step_5_generate_trav_map.py
new file mode 100644
index 000000000..ec2e7221e
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/step_5_generate_trav_map.py
@@ -0,0 +1,79 @@
+#!/usr/bin/env python
+
+import os
+import sys
+import time
+import random
+import gibson2
+import argparse
+from gibson2.simulator import Simulator
+from gibson2.utils.utils import parse_config
+from gibson2.utils.map_utils import gen_trav_map
+from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene,SCENE_SOURCE
+from gibson2.utils.assets_utils import get_ig_scene_path,get_cubicasa_scene_path,get_3dfront_scene_path, get_ig_category_path
+
+"""
+script to generate all traversability maps:
+
+for file in ../../gibson2/ig_dataset/scenes/*
+ python generate_trav_map.py $(basename $file)
+
+"""
+
+def generate_trav_map(scene_name, scene_source, load_full_scene=True):
+ if scene_source not in SCENE_SOURCE:
+ raise ValueError(
+ 'Unsupported scene source: {}'.format(scene_source))
+ if scene_source == "IG":
+ scene_dir = get_ig_scene_path(scene_name)
+ elif scene_source == "CUBICASA":
+ scene_dir = get_cubicasa_scene_path(scene_name)
+ else:
+ scene_dir = get_3dfront_scene_path(scene_name)
+ random.seed(0)
+ scene = InteractiveIndoorScene(scene_name,
+ build_graph=False,
+ texture_randomization=False,
+ scene_source=scene_source)
+ if not load_full_scene:
+ scene._set_first_n_objects(3)
+ s = Simulator(mode='headless', image_width=512,
+ image_height=512, device_idx=0)
+ s.import_ig_scene(scene)
+
+ if load_full_scene:
+ scene.open_all_doors()
+
+ for i in range(20):
+ s.step()
+
+ vertices_info, faces_info = s.renderer.dump()
+ s.disconnect()
+
+ if load_full_scene:
+ trav_map_filename_format = 'floor_trav_{}.png'
+ obstacle_map_filename_format = 'floor_{}.png'
+ else:
+ trav_map_filename_format = 'floor_trav_no_obj_{}.png'
+ obstacle_map_filename_format = 'floor_no_obj_{}.png'
+
+ gen_trav_map(vertices_info, faces_info,
+ output_folder=os.path.join(scene_dir, 'layout'),
+ trav_map_filename_format = trav_map_filename_format,
+ obstacle_map_filename_format =obstacle_map_filename_format)
+
+
+def main():
+ parser = argparse.ArgumentParser(
+ description='Generate Traversability Map')
+ parser.add_argument('scene_names', metavar='s', type=str,
+ nargs='+', help='The name of the scene to process')
+ parser.add_argument('--source', dest='source', help='Source of the scene, should be among [CUBICASA, IG, THREEDFRONT]')
+
+ args = parser.parse_args()
+ for scene_name in args.scene_names:
+ generate_trav_map(scene_name, args.source, False)
+ generate_trav_map(scene_name, args.source, True)
+
+if __name__ == "__main__":
+ main()
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/utils/Wall_bbox.py b/gibson2/utils/data_utils/ext_scene/scripts/utils/Wall_bbox.py
new file mode 100644
index 000000000..c819afcf0
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/utils/Wall_bbox.py
@@ -0,0 +1,491 @@
+import numpy as np
+# import poly_decomp as pd
+from . import earcut
+
+from .utils import BBox
+
+class Wall_bbox(object):
+
+ def __init__(self, bbox, ceiling_height=2.4):
+ self.t = ceiling_height
+ self.b = 0.
+ # self.bbox = BBox(raw_pts, self.b, self.t)
+ self.bbox = bbox
+
+ x_scale,y_scale,_ = self.bbox.get_scale()
+
+
+ self.theta = self.bbox.get_rotation_angle(CAD_dir=(1,0))
+ theta = -self.theta
+ # print(theta, self.bbox.get_rotation_angle(CAD_dir=(1,0)))
+ self.rot_2d = np.array([[np.cos(theta),-np.sin(theta)],
+ [np.sin(theta),np.cos(theta)]])
+
+ self.rot_3d = np.array([[np.cos(theta),-np.sin(theta),0],
+ [np.sin(theta),np.cos(theta),0],
+ [0,0,1]])
+
+ straight_pts = self.bbox.get_coords().dot(self.rot_2d)
+ xmin, xmax = straight_pts[:,1].min(), straight_pts[:,1].max()
+ ymin, ymax = straight_pts[:,0].min(), straight_pts[:,0].max()
+
+ if (xmax - xmin) > (ymax - ymin):
+ self.x_principle = True
+ self.l = xmin
+ self.r = xmax
+ self.f = ymin
+ self.back = ymax
+ else:
+ self.x_principle = False
+ self.l = ymin
+ self.r = ymax
+ self.f = xmin
+ self.back = xmax
+
+ # doors are incorporated as bottom_edge polygons intrusion
+ # some windows (or cut-outs) are top_edge polygons intrusion
+ # similarly for side edges
+ self.bottom_edge_poly = []
+ self.top_edge_poly = []
+ self.right_edge_poly = []
+ self.left_edge_poly = []
+
+ self.tl_corner = None
+ self.bl_corner = None
+ self.tr_corner = None
+ self.br_corner = None
+
+ self.holes = []
+ self.vns = {'x_minus' : 1, 'x_plus' : 2,
+ 'y_minus' : 3, 'y_plus' : 4,
+ 'z_minus' : 5, 'z_plus' : 6}
+
+ # def add_hole(self, b, t, raw_pts):
+ def add_hole(self, bbox):
+ straight_pts = bbox.get_coords().dot(self.rot_2d)
+ x_scale, y_scale,_ = bbox.get_scale()
+ b,t = bbox.z
+
+ if self.x_principle:
+ l,r = straight_pts[:,1].min(), straight_pts[:,1].max()
+ else:
+ l,r = straight_pts[:,0].min(), straight_pts[:,0].max()
+
+ if b < 0 or t > self.t:
+ if b < 0:
+ b = 0.05
+ if t > self.t:
+ t = self.t - 0.05
+ bbox.z - (b,t)
+ if l < self.l or r > self.r:
+ if l < self.l:
+ l = self.l + 0.01
+ if r > self.r:
+ r = self.r - 0.01
+ edge_new = l-r
+ # center_new = (l+r) / 2.
+ if self.x_principle:
+ straight_pts[:,1] = np.clip(straight_pts[:,1],
+ self.l + 0.01, self.r-0.01)
+ else:
+ straight_pts[:,0] = np.clip(straight_pts[:,0],
+ self.l + 0.01, self.r-0.01)
+
+ if x_scale > y_scale:
+ bbox.edge_x = bbox.edge_x / x_scale * edge_new
+ else:
+ bbox.edge_y = bbox.edge_y / y_scale * edge_new
+ # print(self.l, self.r, self.back, self.f)
+ # raise ValueError('Window coordinate out of range... {}'.format(
+ # (self.t, self.l, self. r, l, r, b, t)))
+ isb, ist, isl, isr = b == 0, t == self.t, l == self.l, r == self.r
+ if (isb and ist) or (isl and isr):
+ raise ValueError('Wall broken into two components, not supported')
+ if not (isb or ist or isl or isr):
+ self.holes.append((b,t,l,r))
+ elif ist and isl:
+ if self.tl_corner is not None:
+ raise ValueError('top left corner already occupied')
+ self.tl_corner = (b,t,l,r)
+ elif ist and isr:
+ if self.tr_corner is not None:
+ raise ValueError('top right corner already occupied')
+ self.tr_corner = (b,t,l,r)
+ elif isb and isl:
+ if self.bl_corner is not None:
+ raise ValueError('bottom left corner already occupied')
+ self.bl_corner = (b,t,l,r)
+ elif isb and isr:
+ if self.br_corner is not None:
+ raise ValueError('bottom right corner already occupied')
+ self.br_corner = (b,t,l,r)
+ elif ist:
+ self.top_edge_poly.append((b,t,l,r))
+ elif isb:
+ self.bottom_edge_poly.append((b,t,l,r))
+ elif isl:
+ self.left_edge_poly.append((b,t,l,r))
+ elif isr:
+ self.right_edge_poly.append((b,t,l,r))
+ else:
+ raise ValueError('Logic is wrong, the hole is not being added')
+
+
+ # print('######################')
+ # print('original: ', bbox.center, bbox.edge_x, bbox.edge_y)
+
+ straight_pts_center = straight_pts.mean(axis=0)
+ thickness = (self.f - self.back)
+ # print('thickness: ', thickness)
+ if self.x_principle:
+ straight_pts_center[0] = (self.back + self.f) / 2.
+ else:
+ straight_pts_center[1] = (self.back + self.f) / 2.
+ if x_scale < y_scale:
+ bbox.edge_x = bbox.edge_x / x_scale * thickness
+ else:
+ bbox.edge_y = bbox.edge_y / y_scale * thickness
+ # print('intermediate: ', bbox.center, bbox.edge_x, bbox.edge_y)
+ bbox.center = straight_pts_center.dot(np.linalg.inv(self.rot_2d))
+ # print('final: ', bbox.center, bbox.edge_x, bbox.edge_y)
+ return bbox
+
+ def build(self):
+ self.bottom_edge_poly.sort(key=lambda x: x[2])
+ self.top_edge_poly.sort(key=lambda x: -x[3])
+ self.right_edge_poly.sort(key=lambda x: x[0])
+ self.left_edge_poly.sort(key=lambda x: -x[0])
+
+ f_vertices, f_faces = self.get_plane(front=True)
+ b_vertices, b_faces = self.get_plane(front=False)
+ b_faces[:,:3] += len(f_vertices)
+ vertices = np.concatenate([f_vertices, b_vertices], axis=0)
+ faces = np.concatenate([f_faces, b_faces], axis=0)
+
+ self.vertices = vertices
+ cross_faces = self.build_front_back_faces()
+ faces = np.concatenate([cross_faces, faces], axis=0)
+ self.faces = faces
+ return vertices.dot(np.linalg.inv(self.rot_3d)), faces
+
+ # def build_collision_mesh(self):
+ # self.get_convex_decomposed_plane()
+
+ def build_collision_mesh(self, f_path):
+ vertices, holes = self.get_plane_vertices()
+ faces = np.array(earcut.earcut(vertices, holes))
+ faces = faces.reshape((-1, 3))
+
+ vertices = np.array(vertices).reshape((-1, 2))
+ decomposed = []
+ for f1,f2,f3 in faces:
+ decomposed.append([vertices[f1,:],vertices[f2,:],vertices[f3,:]])
+ # polygon = []
+ # for i in range(len(vertices)):
+ # v = vertices[-(i+1), :]
+ # polygon.append((v[0], v[1]))
+
+ verts = []; fs = []
+ for poly in decomposed:
+ poly_np = np.array(poly)
+ poly_np_mean = np.mean(poly_np, axis=0)
+ poly_np = poly_np_mean + (poly_np - poly_np_mean) * 0.999
+ flattened = poly_np.reshape(-1)
+ pf = np.array(earcut.earcut(flattened)) + 1
+ pf= pf.reshape((-1, 3))
+ bf = pf[:,:] + len(poly_np)
+
+ # front
+ f_z = [self.f,] * int(poly_np.shape[0])
+
+ if not self.x_principle:
+ front_v = np.vstack([poly_np[:, 1], f_z,
+ poly_np[:, 0]]).transpose()
+ else:
+ front_v = np.vstack([f_z, poly_np[:, 1],
+ poly_np[:, 0]]).transpose()
+ if not self.x_principle:
+ pf = np.vstack([pf[:,0], pf[:,2], pf[:,1]]).transpose()
+ pf = np.append(pf, np.array([0,] * len(pf))[:, None], axis=1)
+ #front_v, pf
+
+ # back
+ b_z = [self.back,] * int(poly_np.shape[0])
+ if not self.x_principle:
+ back_v = np.vstack([poly_np[:, 1], b_z,
+ poly_np[:, 0]]).transpose()
+ else:
+ back_v = np.vstack([b_z,poly_np[:, 1],
+ poly_np[:, 0]]).transpose()
+ if self.x_principle:
+ bf = np.vstack([bf[:,0], bf[:,2], bf[:,1]]).transpose()
+ bf = np.append(bf, np.array([0,] * len(bf))[:, None], axis=1)
+ #back_v, bf
+
+ # front-back
+ num_front_plane = len(front_v)
+ cross_faces = []
+ curr_point = 1
+ for idx in range(num_front_plane):
+ if idx == num_front_plane- 1:
+ next_point = 1
+ else:
+ next_point = curr_point + 1
+ if not self.x_principle:
+ cross_faces.append((curr_point, curr_point + num_front_plane,
+ next_point, self.vns['z_minus']))
+ cross_faces.append((next_point, curr_point + num_front_plane,
+ next_point + num_front_plane, self.vns['z_minus']))
+ else:
+ cross_faces.append((curr_point, next_point,
+ curr_point + num_front_plane,
+ self.vns['z_minus']))
+ cross_faces.append((next_point, next_point + num_front_plane,
+ curr_point + num_front_plane, self.vns['z_minus']))
+ curr_point = next_point
+
+ verts.append( np.concatenate([front_v, back_v], axis=0) )
+ cross_faces = np.asarray(cross_faces)
+ fs.append( np.concatenate([pf, bf, cross_faces], axis=0) )
+ # vertices = np.concatenate(verts, axis=0)
+ with open(f_path, 'w') as fp:
+ total_v = 0
+ for idx, (v,f) in enumerate(zip(verts,fs)):
+ f = f + total_v
+ total_v += len(v)
+ fp.write('o convex_{}\n'.format(idx))
+ v= v.dot(np.linalg.inv(self.rot_3d))
+ for vs in v:
+ fp.write('v {} {} {}\n'.format(*vs))
+
+ for f1,f2,f3,fn in f:
+ fp.write('f {f1} {f2} {f3}\n'.format(f1=f1,f2=f2,f3=f3))
+
+
+
+ def get_plane(self, front=True):
+ ### process front
+ vertices, holes = self.get_plane_vertices()
+ z_val = self.f if front else self.back
+ vertices_z = [z_val,] * int( len(vertices) / 2)
+
+ faces = np.array(earcut.earcut(vertices, holes)) + 1
+ faces = faces.reshape((-1, 3))
+ vertices = np.array(vertices).reshape((-1, 2))
+
+ if not self.x_principle:
+ vertices = np.vstack([vertices[:, 1],
+ vertices_z,
+ vertices[:, 0]]).transpose()
+ f_normal = self.vns['y_minus'] if front else self.vns['y_plus']
+ else:
+ vertices = np.vstack([vertices_z,
+ vertices[:, 1],
+ vertices[:, 0]]).transpose()
+ f_normal = self.vns['x_minus'] if front else self.vns['x_plus']
+ if (self.x_principle and not front) or (not self.x_principle and front):
+ faces = np.vstack([faces[:,0], faces[:,2], faces[:,1]]).transpose()
+ faces = np.append(faces, np.array([f_normal,] * len(faces))[:, None], axis=1)
+
+ return vertices, faces
+
+
+ def build_front_back_faces(self):
+ num_front_plane = int(self.vertices.shape[0] / 2)
+ cross_faces = []
+
+ left_normal = self.vns['x_minus'] if self.x_principle else self.vns['y_minus']
+ right_normal = self.vns['x_plus'] if self.x_principle else self.vns['y_plus']
+
+ curr_point = 1
+ total_face = 4
+ if self.bl_corner is not None:
+ total_face += 2
+ if self.br_corner is not None:
+ total_face += 2
+ if self.tr_corner is not None:
+ total_face += 2
+ if self.tl_corner is not None:
+ total_face += 2
+
+ total_face += len(self.bottom_edge_poly) * 4
+ total_face += len(self.right_edge_poly) * 4
+ total_face += len(self.top_edge_poly) * 4
+ total_face += len(self.left_edge_poly) * 4
+
+ for idx in range(total_face):
+ if idx == total_face - 1:
+ next_point = 1
+ else:
+ next_point = curr_point + 1
+ if not self.x_principle:
+ cross_faces.append((curr_point, curr_point + num_front_plane,
+ next_point, self.vns['z_minus']))
+ cross_faces.append((next_point, curr_point + num_front_plane,
+ next_point + num_front_plane, self.vns['z_minus']))
+ else:
+ cross_faces.append((curr_point, next_point,
+ curr_point + num_front_plane,
+ self.vns['z_minus']))
+ cross_faces.append((next_point, next_point + num_front_plane,
+ curr_point + num_front_plane, self.vns['z_minus']))
+ curr_point = next_point
+
+ curr_point = num_front_plane - len(self.holes) * 4 + 1
+
+ for idx in range(len(self.holes)):
+ curr_holes_start = curr_point
+ for i in range(4):
+ if i == 3:
+ next_point = curr_holes_start
+ else:
+ next_point = curr_point + 1
+ if not self.x_principle:
+ cross_faces.append((curr_point, curr_point + num_front_plane,
+ next_point, self.vns['z_minus']))
+ cross_faces.append((next_point, curr_point + num_front_plane,
+ next_point + num_front_plane, self.vns['z_minus']))
+ else:
+ cross_faces.append((curr_point, next_point,
+ curr_point + num_front_plane,
+ self.vns['z_minus']))
+ cross_faces.append((next_point, next_point + num_front_plane,
+ curr_point + num_front_plane, self.vns['z_minus']))
+ curr_point = next_point
+ curr_point += 4
+
+
+ return np.asarray(cross_faces)
+
+ def get_plane_vertices(self):
+ vertices = []
+ if self.bl_corner is not None:
+ b,t,l,r = self.bl_corner
+ vertices.extend([t, l, t, r, b, r])
+ vertices_z.extend([self.f])
+ else:
+ vertices.extend([self.b,self.l])
+ for b,t,l,r in self.bottom_edge_poly:
+ vertices.extend([b, l, t, l, t, r, b, r])
+ if self.br_corner is not None:
+ b,t,l,r = self.br_corner
+ vertices.extend([b, l, t, l, t, r])
+ else:
+ vertices.extend([self.b,self.r])
+ for b,t,l,r in self.right_edge_poly:
+ vertices.extend([b, r, b, l, t, l, t, r])
+ if self.tr_corner is not None:
+ b,t,l,r = self.tr_corner
+ vertices.extend([b, r, b, l, t, l])
+ else:
+ vertices.extend([self.t,self.r])
+ for b,t,l,r in self.top_edge_poly:
+ vertices.extend([t, r, b, r, b, l, t, l])
+ if self.tl_corner is not None:
+ b,t,l,r = self.tl_corner
+ vertices.extend([t, r, b, r, b, l])
+ else:
+ vertices.extend([self.t,self.l])
+ for b,t,l,r in self.left_edge_poly:
+ vertices.extend([t, l, t, r, b, r, b, l])
+
+ holes = []
+
+ for b,t,l,r in self.holes:
+ holes.append(int(len(vertices) / 2))
+ vertices.extend([b, l, t, l, t, r, b, r])
+ return vertices, holes
+
+ def add_skirt(self, skirt_pts):
+ num_pts = skirt_pts.shape[0]
+ skirt_verts = []
+ skirt_faces = []
+
+ segments = []
+ if self.bl_corner is not None:
+ b,t,l,r = self.bl_corner
+ segments.append(r )
+ else:
+ segments.append(self.l)
+
+ for b,t,l,r in self.bottom_edge_poly:
+ segments.extend([l, r])
+
+ if self.br_corner is not None:
+ b,t,l,r = self.br_corner
+ segments.append(l)
+ else:
+ segments.append(self.r)
+
+ # front
+ segments = np.array(segments).reshape([-1, 2])
+ num_seg = len(segments)
+ for front in [True, False]:
+ reverse_factor = -1 if front else 1
+ x_loc = self.f if front else self.back
+ for idx, (seg_start, seg_end) in enumerate(segments):
+ if not front:
+ seg_start, seg_end = seg_end, seg_start
+ for x, z in skirt_pts:
+ skirt_verts.append((x_loc + reverse_factor * x, seg_start + reverse_factor * x, z)
+ if self.x_principle else
+ (seg_start + reverse_factor * x, x_loc + reverse_factor * x, z))
+ for x, z in skirt_pts:
+ skirt_verts.append((x_loc + reverse_factor * x, seg_end - reverse_factor * x, z)
+ if self.x_principle else
+ (seg_end - reverse_factor * x, x_loc + reverse_factor * x, z))
+ vert_idx_offset = idx * num_pts * 2
+ if not front:
+ vert_idx_offset += num_seg * num_pts * 2
+ for i in range(num_pts):
+ curr_point = i + vert_idx_offset + 1
+ if i == num_pts - 1:
+ next_point = vert_idx_offset + 1
+ else:
+ next_point = curr_point + 1
+ if self.x_principle:
+ skirt_faces.append((curr_point, next_point,
+ curr_point + num_pts, self.vns['z_minus']))
+ skirt_faces.append((next_point, next_point + num_pts,
+ curr_point + num_pts, self.vns['z_minus']))
+ else:
+ skirt_faces.append((curr_point, curr_point + num_pts,
+ next_point, self.vns['z_minus']))
+ skirt_faces.append((next_point, curr_point + num_pts,
+ next_point + num_pts, self.vns['z_minus']))
+
+
+ num_front = len(skirt_verts)
+ left = self.bl_corner[-1] if self.bl_corner is not None else self.l
+ right = self.br_corner[-2] if self.br_corner is not None else self.r
+ segments = [(True, left, self.f, self.back), (False, right, self.back, self.f)]
+
+ for minus, pos, seg_start, seg_end in segments:
+ reverse_factor = -1 if minus else 1
+
+ for x, z in skirt_pts:
+ skirt_verts.append((pos + reverse_factor * x, seg_start + reverse_factor * x, z)
+ if not self.x_principle else
+ (seg_start + reverse_factor * x, pos + reverse_factor * x, z))
+ for x, z in skirt_pts:
+ skirt_verts.append((pos + reverse_factor * x, seg_end - reverse_factor * x, z)
+ if not self.x_principle else
+ (seg_end - reverse_factor * x, pos + reverse_factor * x, z))
+ vert_idx_offset = (1 - int (minus)) * num_pts * 2 + num_front
+ for i in range(num_pts):
+ curr_point = i + vert_idx_offset + 1
+ if i == num_pts - 1:
+ next_point = vert_idx_offset + 1
+ else:
+ next_point = curr_point + 1
+ if not self.x_principle:
+ skirt_faces.append((curr_point, next_point,
+ curr_point + num_pts, self.vns['z_minus']))
+ skirt_faces.append((next_point, next_point + num_pts,
+ curr_point + num_pts, self.vns['z_minus']))
+ else:
+ skirt_faces.append((curr_point, curr_point + num_pts,
+ next_point, self.vns['z_minus']))
+ skirt_faces.append((next_point, curr_point + num_pts,
+ next_point + num_pts, self.vns['z_minus']))
+ return np.array(skirt_verts).dot(np.linalg.inv(self.rot_3d)), np.array(skirt_faces)
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/utils/data/model_bbox.json b/gibson2/utils/data_utils/ext_scene/scripts/utils/data/model_bbox.json
new file mode 100644
index 000000000..8a017e9e9
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/utils/data/model_bbox.json
@@ -0,0 +1 @@
+{"a35752da-0ee4-424e-a1ec-40d75de65234": [[-0.373072, -0.000780584, -0.37304000000000004], [0.372821, 0.709947, 0.37279]], "6a1b87d1-9be4-456e-aeb5-5005614cdc6b": [[-0.6495440000000001, 0.0, -0.3], [0.65, 0.75, 0.299544]], "71255f80-7280-3555-a566-a1076389c3dc": [[-0.6096, 5.7e-05, -0.27940000000000004], [0.6096, 0.762045, 0.27940000000000004]], "88cef8fb-224e-483f-ab9f-143ac3a81e09": [[-1.22018, -0.000213356, -0.372265], [1.22047, 0.9165380000000001, 0.372065]], "e4883e12-0c7f-4397-9f0a-e8c424c7cd8c": [[-0.23587499999999997, -1.9073500000000002e-08, -0.225939], [0.23587499999999997, 1.26977, 0.225939]], "908ee318-f4d3-48b1-8498-f4cb8627aac0": [[-0.41117899999999996, -0.00125578, -0.18539899999999998], [0.41129800000000005, 0.821067, 0.18551600000000001]], "0fb0494a-7124-462c-865f-22b33eac8329": [[-0.272959, 0.0, -0.300325], [0.272959, 0.9912569999999999, 0.300046]], "b8307272-f3bc-4b03-8dc7-d12231fbd96d": [[-0.152484, 4.6157900000000003e-08, -0.15116300000000002], [0.152484, 0.374094, 0.15116300000000002]], "11db9fbe-c9a6-4a9d-a951-ddea8b459fcb": [[-0.8033540000000001, 0.0, -0.241004], [0.8033540000000001, 0.575737, 0.241004]], "ff193ce7-c759-4607-99bc-7a79050887b6": [[-1.249738, 0.0, -0.547391], [1.249649, 0.88371, 0.547391]], "b5f2a681-be8d-4b8c-9219-d19aa6ad8b9f": [[-1.225503, 0.0005510000000000001, -0.469546], [1.225503, 0.825217, 0.46941099999999997]], "af4566ab-f47a-406c-af9b-36bf3bbaf3fe": [[-1.8215999999999999, -0.000635071, -0.798605], [1.82256, 0.843558, 0.798146]], "74345089-2a96-44e0-9da1-b640fb6f7f5d": [[-0.88812, 0.0, -0.40517600000000004], [0.88812, 0.7161750000000001, 0.40517600000000004]], "0dc0268b-2836-4538-94ac-b389acdedfa4": [[-0.242375, 1.52588e-08, -0.242375], [0.242375, 0.549761, 0.242394]], "566ef201-0d00-40c4-9f24-d89a679549e8": [[-1.213372, 0.0, -0.656143], [1.213372, 0.727105, 0.656001]], "2d1aac23-76fe-4efd-b82c-f7be383e1958": [[-1.423091, 0.00025100000000000003, -0.824902], [1.4233000000000002, 0.83532, 0.8243210000000001]], "d9895a36-92cd-40f7-9743-c156748d2d2a": [[-0.19316, 0.0, -0.193807], [0.19313400000000003, 0.536699, 0.193807]], "fb6637eb-e686-4110-9555-dd0c7c9e2af2": [[-1.20476, 7.62939e-09, -0.48473900000000003], [1.20457, 0.903969, 0.48533499999999996]], "58df4af8-53de-42ca-a7ca-0861ff45f397": [[-0.5, -0.000483927, -0.285415], [0.5, 1.8195400000000002, 0.285406]], "467663a0-3056-46c2-bcde-237c4324db8d": [[-0.9400400000000001, 0.000707, -0.439795], [0.940094, 0.625223, 0.43998899999999996]], "54053cc9-17bf-44a6-a4ea-f259c9a29db9": [[-1.20952, -0.000615994, -0.457757], [1.20911, 0.8736799999999999, 0.45833199999999996]], "7875b4cc-6b7f-403d-b2e6-964c63e63343": [[-0.672659, 0.0, -0.398891], [0.672659, 0.46084899999999995, 0.398891]], "4eac74dd-6c66-3667-b465-0ce546be2dfc": [[-0.908506, 0.0, -0.458437], [0.90851, 0.7198350000000001, 0.458436]], "c3eb7a1d-d1bf-45e3-ba45-0286a589032c": [[-0.254554, 0.0, -0.254554], [0.254554, 0.25435800000000003, 0.254554]], "f2fdae96-ce29-4d4d-bf17-5ade2d057be5": [[-1.0151430000000001, 6.1000000000000005e-05, -1.040458], [1.013237, 1.521913, 1.040458]], "180c9dab-fcd7-436b-b877-ea2cbfe85b00": [[-1.0007599999999999, -7.94076e-18, -0.20383099999999998], [1.0007599999999999, 0.5, 0.20383099999999998]], "3f63acc6-1241-471b-b4ca-202b5cddd4a0": [[-0.8, -9.988030000000001e-12, -0.2], [0.8, 0.73, 0.2]], "03051836-f41b-4fb5-88d9-de7fd5ae86b7": [[-0.261534, 6.10352e-08, -0.262103], [0.261466, 0.953957, 0.262381]], "ac31e601-ca70-4ca7-bec1-6ae033370398": [[-0.9, -1.2057600000000001e-17, -0.25], [0.9, 0.800574, 0.25]], "5b0e6dd0-a559-4110-a89f-266bb211526d": [[-0.597531, 5.18799e-07, -0.544401], [0.597979, 0.8843429999999999, 0.543998]], "10e0fd38-6a35-4635-81f1-5bf18e741fd3": [[-0.022743199999999998, -1.0774300000000001e-18, -0.022743199999999998], [0.022743199999999998, 0.8150350000000001, 0.022743199999999998]], "5a13e2af-8719-3c76-aade-07b20b2ff7fe": [[-0.280377, -0.013257000000000001, -0.37353299999999995], [0.293803, 0.72807, 0.305335]], "d54bdebe-984f-491b-9767-ea909a6966eb": [[-0.248802, -5.8056e-18, -0.108087], [0.248764, 0.968429, 0.10807800000000001]], "3d42021c-ef3c-423a-b20a-5027f512eea9": [[-0.33794199999999996, -0.000448651, -0.34704799999999997], [0.33921799999999996, 0.6046520000000001, 0.347049]], "20b9a2fa-2146-4a2e-9652-86a64e415479": [[-0.808163, -0.0012726699999999998, -1.11124], [0.808315, 0.8010299999999999, 1.11333]], "1142855b-0ce2-4c2c-ac44-d87f7983be0f": [[-0.223477, 0.000119, -0.2202], [0.223238, 0.875626, 0.220459]], "8a5b1ed9-800e-4a4b-b95f-20cf28bbeaa4": [[-0.830433, -0.00114753, -0.43473500000000004], [0.830567, 0.7611539999999999, 0.435047]], "38238086-9f7f-4db1-801a-358191e672c0": [[-0.6787430000000001, 0.0, -0.351569], [0.678994, 0.419905, 0.351821]], "2cedb8d1-4ede-4509-8463-19337112b381": [[-0.854726, 4.1e-05, -0.18689], [0.854726, 0.6539820000000001, 0.186852]], "da7a073d-0e36-493b-9b86-7e96af2b3e3a": [[-1.10744, -0.0010056800000000001, -0.523676], [1.10757, 0.75579, 0.523192]], "81af1feb-181f-4047-9b6a-214757293820": [[-0.264004, 0.0, -0.318765], [0.264004, 0.446106, 0.318766]], "99fa9aa3-af8f-4f5c-bd97-238593242b50": [[-0.8847830000000001, 0.000322, -0.487166], [0.8847830000000001, 0.9059269999999999, 0.487242]], "77f1d8e7-4860-46aa-90fb-ad0295c4034c": [[-0.5529350000000001, -1.18027e-17, -0.21253799999999998], [0.5529350000000001, 0.702413, 0.21253799999999998]], "32bb58b7-743b-40b3-9848-b1c13c7fa904": [[-0.17769100000000002, 1.52588e-08, -0.10517099999999999], [0.17769100000000002, 0.44332, 0.10517099999999999]], "f6f83e87-1924-4688-9d30-a9eced33863a": [[-0.449563, -0.00023599599999999998, -0.432162], [0.449978, 0.8813, 0.432297]], "5d450bed-7cb6-4fdd-aaec-3618e0674cfd": [[-1.181146, 0.000284, -0.49131], [1.18131, 0.956742, 0.491592]], "66bf4221-66c9-4d37-a695-ab371621c70b": [[-0.719089, -8.893990000000001e-07, -0.249089], [0.719089, 0.919905, 0.249089]], "ee520469-b2d9-4552-b207-e674cd30a402": [[-0.198432, -8.28849e-13, -0.200711], [0.198432, 0.41708399999999995, 0.200712]], "7179289a-666d-40a9-bf9c-65047236f5a5": [[-0.6890130000000001, 0.0, -0.61186], [0.6890120000000001, 0.398872, 0.611718]], "11960890-cd65-442e-9f36-5bd2d8336f0a": [[-0.614798, -2.1627099999999998e-05, -0.260288], [0.614798, 0.913756, 0.261023]], "df7026b9-9ffb-438f-8dd6-d40c8d54225c": [[-0.9, -1.51398e-17, -0.399758], [0.9, 0.72, 0.399758]], "0c4a2cda-3a5c-4ab8-b2e6-c82caf5e0a28": [[-0.562021, 1.76398e-17, -0.332046], [0.561599, 2.2531, 0.33199599999999996]], "b44e175e-11ce-42dc-834c-95a5b5a3e17d": [[-0.663064, -5.831059999999999e-18, -0.210033], [0.663064, 2.45844, 0.210344]], "9bb3a083-2b92-491b-b5dc-a4514f2ba56b": [[-0.27125, -1.38765e-19, -0.24164100000000002], [0.271194, 1.00003, 0.24164100000000002]], "74d1fe81-5592-4cab-a187-ceb4b40035ae": [[-0.199217, -8.21565e-18, -0.135145], [0.199211, 0.8410989999999999, 0.135124]], "040574e6-76f4-45fe-aa00-8f14362b0c10": [[-0.199947, 6.29996e-18, -0.199947], [0.199947, 0.45, 0.199947]], "3b4b35bb-23c3-4f75-856c-5eb219124141": [[-0.275853, 0.0, -0.27964], [0.275853, 0.760405, 0.279498]], "07a4daba-df9d-461e-b18d-59834b7660a4": [[-0.395459, -0.00124616, -0.452318], [0.39624000000000004, 0.895634, 0.452082]], "87a4cd8f-06e2-4b10-9086-c462edaa9c67": [[-1.32076, -1.14959e-05, -0.44835500000000006], [1.31917, 0.7873220000000001, 0.448461]], "404c9fe1-1a22-4c8f-a019-90f48acff8e7": [[-0.339772, -0.000695916, -0.33817300000000006], [0.340113, 0.5214529999999999, 0.338141]], "80044f0e-0052-4e23-9107-e8af7a343c67": [[-1.17897, -0.000727178, -0.514566], [1.17902, 0.957349, 0.51439]], "849b7c41-a912-48ef-9dcb-34dc1d08ec6a": [[-0.700571, -9.15612e-18, -0.225045], [0.700571, 2.55004, 0.225045]], "71808838-f84b-4a85-a6e6-efff89daa429": [[-1.725642, 0.0, -0.20281400000000002], [1.725642, 0.902349, 0.20281400000000002]], "cdb92528-cf52-4fdd-b3cd-1c368f7d9284": [[-0.299711, -8.28533e-06, -0.297197], [0.299711, 0.603445, 0.297197]], "7709ab33-f1ed-4f82-ad5c-5a25183e8123": [[-0.252464, 0.0, -0.28269], [0.25241399999999997, 0.8282550000000001, 0.282744]], "0b5ea81c-754b-425d-b7ea-cf559300b43b": [[-0.356387, 5.55095e-08, -0.36], [0.356387, 0.374804, 0.36]], "932d44f7-8cbe-4377-8737-9a89e857e191": [[-0.519077, -0.00328679, -0.26847], [0.5189860000000001, 1.0520399999999999, 0.225491]], "78bcc4b2-d186-4f0a-98aa-09d77cd397ea": [[-0.887162, 1.73124e-07, -0.38177799999999995], [0.88653, 0.9084739999999999, 0.38212]], "1770f363-1173-45a2-b30a-83eeca8ba557": [[-0.416643, 2.2000000000000003e-05, -0.44420699999999996], [0.41651000000000005, 0.878391, 0.444284]], "41dc35ec-0839-4667-83ce-d358a5c5dcaf": [[-1.1495, 1.21101e-17, -0.197772], [1.1495, 0.480049, 0.197882]], "7ade5547-a4e4-4220-b1f8-ca8ac48f12f5": [[-0.2, -3.79625e-09, -0.210925], [0.2, 0.499985, 0.210925]], "d7db0156-40d2-43a2-b4e9-16a86321011c": [[-1.202068, 0.000207, -0.485122], [1.202068, 0.992979, 0.48534799999999995]], "209fdbd6-b95d-4d11-a05e-8fcefa32a60d": [[-0.736493, -4.41731e-17, -0.745992], [0.736493, 0.32372300000000004, 0.745992]], "64921698-980e-4f51-a07e-ebafcaebe3ca": [[-0.858276, 0.0, -0.524994], [0.858276, 0.38, 0.524994]], "64056d39-09c8-394a-8e16-1288bc8e8d68": [[-0.613035, 0.010188999999999998, -0.348794], [0.618051, 2.160956, 0.339931]], "d72250f6-0422-4e0c-9a75-96d2b2b481e8": [[-0.53, -9.21485e-18, -0.160001], [0.53, 0.985, 0.160001]], "2919b6e8-2469-4874-b4c6-ed99cd4771a3": [[-0.28283200000000003, -1.69207e-17, -0.276336], [0.28283200000000003, 0.12826700000000002, 0.276336]], "2df6a25f-d796-4118-bf48-7f796a0c1cbb": [[-0.314254, 1e-05, -0.29930599999999996], [0.31421299999999996, 0.805644, 0.299207]], "bfb894c1-9458-4a21-8105-1102251c809b": [[-0.49681600000000004, -8.92803e-05, -0.229653], [0.496815, 0.7834139999999999, 0.229654]], "6405364a-09f5-4cec-aa54-57c29285c338": [[-0.416029, -1.23535e-06, -0.377244], [0.41603, 0.7213769999999999, 0.37743699999999997]], "7cc6119d-9105-435a-a0b8-35d800d31bf5": [[-0.853466, 1.42154e-17, -0.252394], [0.853466, 2.50171, 0.252631]], "1b1e5e3d-a83f-3c6d-b7be-80cc6a82b493": [[-0.273868, 7.2e-05, -0.292177], [0.27378399999999997, 0.9810639999999999, 0.294057]], "b06fbb8c-e3d9-4d1c-bd48-4a94a93a5610": [[-1.5071199999999998, -7.62939e-09, -0.719723], [1.50732, 0.731345, 0.719658]], "bdb61f2b-081b-4a1e-8a4f-2cb4ef6005ff": [[-1.1048, -0.00067066, -1.0486199999999999], [1.1074, 1.42221, 1.0486199999999999]], "5f3db3aa-328d-4e5f-a039-3ae371b63679": [[-1.24622, -0.000846774, -0.530099], [1.24659, 0.926446, 0.530645]], "ed3e8674-d042-40f4-bdc7-423cc63d98b2": [[-0.36844099999999996, 0.0, -0.41119], [0.368426, 0.879636, 0.41125]], "4e3e92cd-bab7-4295-a0d8-0e1586e33c85": [[-0.638452, 0.00017, -0.206955], [0.6385799999999999, 0.7775270000000001, 0.20698]], "9f60056d-5e15-454d-8668-a5d670a16bde": [[-1.59, 0.0, -0.175], [1.59, 2.404, 0.175]], "5d6b0f8e-14ef-45c2-80c0-f951f9d05eea": [[-0.666957, -1.50416e-17, -0.329471], [0.666957, 0.365933, 0.329471]], "b0f83038-eda6-49c1-a8b9-3ba218106955": [[-0.5696869999999999, 0.000149, -0.40773400000000004], [0.5696869999999999, 0.33716, 0.407727]], "db713c49-9294-4830-8c7a-88aaee741202": [[-0.378046, 0.0006510000000000001, -0.33720799999999995], [0.378046, 0.530701, 0.33720799999999995]], "43e74fb5-7546-462c-a484-730c3581fe79": [[-1.108442, 0.0, -0.495991], [1.108964, 0.67979, 0.49624899999999994]], "c613ab4c-e49b-43ec-8edf-cb7f5356b0e1": [[-0.278915, -3.95377e-18, -0.29006699999999996], [0.278915, 0.62458, 0.29006699999999996]], "258cace4-4d87-4cac-a4f6-1e47e3708f73": [[-0.9314230000000001, 0.000222, -0.43138800000000005], [0.9314230000000001, 0.995804, 0.43138800000000005]], "6c110998-56b8-4ea2-9b52-0813e42da661": [[-1.59099, -3.98492e-17, -0.6711239999999999], [1.59099, 1.7075200000000001, 0.669513]], "a454de07-1d86-4590-95f5-93e6eceabba3": [[-0.40330800000000006, -3.94082e-08, -0.239844], [0.40300400000000003, 1.21892, 0.239923]], "37f2b471-7d32-424e-a610-399f88925f94": [[-0.267532, 3.05176e-08, -0.267532], [0.267532, 0.611893, 0.267532]], "220f7308-06d7-4b41-a0b4-533bb28bb104": [[-0.800097, -9.51275e-18, -0.210959], [0.800097, 0.82052, 0.210959]], "557af7c8-934b-3ab4-b66f-e3562bc06bab": [[-0.46997700000000003, -0.0, -0.47573099999999996], [0.46997700000000003, 0.7623829999999999, 0.47573099999999996]], "87bf4db6-7346-4891-99a4-d72b2252ec20": [[-0.479733, 0.0, -0.45823300000000006], [0.479733, 0.7383839999999999, 0.45823300000000006]], "f23ee173-3379-4480-b53e-260ce435bc77": [[-0.47537199999999996, 0.0, -0.200191], [0.47537199999999996, 0.9007170000000001, 0.200191]], "9d09f888-dcd9-4d9f-b144-7418fc1ec350": [[-0.354266, -2.41826e-05, -0.36111600000000005], [0.354694, 0.970719, 0.36127299999999996]], "4a211f95-0657-366f-943f-437290133b8f": [[-46.9691, 0.0, -50.7531], [46.9691, 69.7762, 43.9702]], "b63d2ebf-36b4-4a0f-8c80-3cb2fa8516ff": [[-1.04374, -3.16919e-17, -0.7135469999999999], [1.04399, 2.0426599999999997, 0.7135469999999999]], "1ef7fb07-6f59-4a80-9b10-73bd3b611049": [[-0.28366, 0.0, -0.255768], [0.28366, 0.746299, 0.255575]], "603dedd3-3ef5-4ab1-87f5-fd93182150e8": [[-0.39163600000000004, -0.000193217, -0.39557299999999995], [0.39175699999999997, 0.372111, 0.395522]], "29ff5eb5-53e6-4c70-8f7c-e6f57ba4bc32": [[-0.476425, 1.85117e-17, -0.471073], [0.475966, 0.850724, 0.470178]], "617472a6-2db0-477c-a549-6c058444d96f": [[-0.9716039999999999, 6.79016e-05, -0.795063], [0.9716039999999999, 1.39595, 0.7950780000000001]], "57540a46-fcf9-45ab-819d-56722a75b564": [[-1.132868, 0.0, -0.558357], [1.133583, 1.0986960000000001, 0.558959]], "483e39f8-3ced-4795-a1a9-1edc54f92c82": [[-1.3292670000000002, 0.0005, -1.354386], [1.3283600000000002, 0.925163, 1.353973]], "6dc9ee3b-b184-4b93-b8a6-ae0bbc00f12e": [[-1.27963, -2.82317e-17, -0.498995], [1.27962, 0.7597780000000001, 0.49961500000000003]], "be4cdd72-5566-4e84-9023-ae8a2f2d603b": [[-0.8850629999999999, 0.0, -0.469334], [0.88504, 0.935173, 0.469243]], "6503e9c3-9f65-45d3-bf2c-454360db055f": [[-0.961277, 0.00020299999999999997, -0.529475], [0.960626, 1.1796550000000001, 0.530753]], "9bb6bc0f-1a6f-4a44-91cc-86099a886530": [[-0.250015, 5.727229999999999e-07, -0.223867], [0.250012, 0.46056600000000003, 0.22371400000000002]], "b5c2be8e-ab60-4cb8-bb59-abf7d26cef40": [[-0.23711500000000002, 0.0, -0.23711500000000002], [0.23711500000000002, 0.539291, 0.23711500000000002]], "5776312e-c047-4b7b-a7e5-8b3b1b881736": [[-1.14702, -0.00031125799999999997, -1.1127], [1.14696, 1.75574, 1.1128799999999999]], "4d763507-ca63-437a-827e-e66fcececbe8": [[-0.9000279999999999, -1.97168e-17, -0.45], [0.900031, 0.7200669999999999, 0.45004]], "3d74c574-f846-46d1-9d65-6b3fce55e33f": [[-0.571253, -1.6446799999999998e-17, -0.331404], [0.571253, 2.44, 0.331404]], "4e4b3a9c-5df4-4d0d-970c-7b80b2d3af16": [[-0.599055, 0.0, -0.59864], [0.598645, 1.145152, 0.598961]], "0b9360e9-4f81-4176-81aa-99bdc0d62892": [[-0.3, -8.981899999999998e-18, -0.3], [0.3, 0.681527, 0.3]], "0551fe88-da5a-4267-add4-428499e18cef": [[-0.25439, 0.0, -0.254389], [0.25439, 0.623518, 0.254389]], "632dcee2-c530-463e-9854-5519e09d9f5d": [[-0.428052, 0.0, -0.350006], [0.428052, 0.521322, 0.350006]], "297ecba4-d2a9-408f-b52b-fa6277611011": [[-0.5745640000000001, -1.46479e-18, -0.574458], [0.5745640000000001, 0.623412, 0.574458]], "638408fa-2023-4cce-9dcf-a378e28312d9": [[-0.258763, -5.7687500000000005e-06, -0.24354199999999998], [0.258614, 0.572137, 0.243377]], "9ede8992-7ad2-48d5-a119-bfce07d8d371": [[-0.864281, -1.23626e-17, -0.238263], [0.864281, 0.439822, 0.238263]], "1f1ed866-7031-4313-a60e-2af3ba476376": [[-0.4752, -3.87246e-16, -0.2002], [0.4752, 1.5810300000000002, 0.2002]], "a8db2878-a32f-41b0-8971-9ae1d0f478e5": [[-1.0000499999999999, -0.000488312, -0.49979399999999996], [1.00004, 0.736817, 0.499765]], "00ec4eee-6cb2-415b-ab42-23b92e077cb6": [[-0.44555799999999995, 0.0, -0.499375], [0.44555799999999995, 0.887993, 0.499375]], "522ea16c-48fe-449b-82ad-d0dca77281e4": [[-0.471074, 0.0, -0.471073], [0.470892, 0.444488, 0.470892]], "3b59e670-4d6b-4671-8302-95b273504aa7": [[-0.8870210000000001, 0.0, -0.33159700000000003], [0.887578, 0.81793, 0.331599]], "8be25063-5397-40fc-808c-75ecd35ae133": [[-0.274273, 0.000176453, -0.19836600000000001], [0.274181, 0.5519700000000001, 0.198123]], "0a05cf26-fbb9-4134-a793-e62915762d77": [[-0.401347, -5.96733e-07, -0.40261], [0.401347, 0.39382300000000003, 0.40261]], "2d623d6b-03f6-4cf9-8daa-5d7d399d9716": [[-0.7, 0.0, -0.7], [0.7, 0.751361, 0.7]], "01482e2c-b64c-4e31-866c-cbdebe08d5d5": [[-0.296357, 0.0, -0.296428], [0.29621, 0.651486, 0.296357]], "27847521-2303-43c0-bc6c-8a9ea13ade95": [[-0.230643, 0.0, -0.267362], [0.230643, 0.873273, 0.267362]], "e344ad1f-8dad-484c-a673-a25db3a441d6": [[-0.21043800000000001, 2e-06, -0.166643], [0.21043800000000001, 1.0609659999999999, 0.166643]], "123da801-f2e4-4556-b00a-f62ffee429bf": [[-1.0111400000000001, -1.92248e-17, -0.340281], [1.0120099999999999, 0.6258859999999999, 0.340824]], "a160dc40-921c-4d75-b112-5a3533d15356": [[-0.24900200000000003, -0.00010387499999999999, -0.256601], [0.24969000000000002, 0.719547, 0.25724199999999997]], "7300d786-565f-4a84-84e3-fc4a12ac2238": [[-0.731106, 0.0, -0.57106], [0.731107, 0.346628, 0.57106]], "84d02369-3a59-40c4-a38e-2bdf08bfe111": [[-0.385468, 1.7166100000000002e-08, -0.0784377], [0.385468, 1.2046, 0.0784377]], "63d8c852-8d9c-4fa2-ac30-f123e6db9265": [[-1.1005500000000001, 5.01796e-06, -0.184333], [1.1005500000000001, 0.6326350000000001, 0.184333]], "31cd1c8b-74a7-4979-8397-2fbbd5274f80": [[-1.2964099999999998, -0.0026320700000000002, -0.533902], [1.29614, 0.751194, 0.535309]], "26618081-6f80-4b90-a149-b57f18ba9a9f": [[-0.43877299999999997, -1.52588e-08, -0.188909], [0.43877299999999997, 1.7901099999999999, 0.188909]], "5fcf6263-4774-4123-950b-b1e68ccbb50d": [[-0.485553, 0.0, -0.17197500000000002], [0.485553, 2.798242, 0.17197500000000002]], "c38e9641-3409-4d36-97a2-509b6b9b62a9": [[-0.319436, 0.0, -0.332005], [0.319436, 2.03139, 0.332005]], "981ea3ef-dca2-4eab-934f-3b247585d9c5": [[-0.599969, -1.45587e-17, -0.299978], [0.599969, 0.450002, 0.29998]], "6a272f30-de7a-433b-a778-4c53737b8e5f": [[-0.19604, 0.0, -0.203323], [0.196098, 0.35604199999999997, 0.203315]], "55c85908-376a-4857-8c82-829d00c7f309": [[-0.19933900000000002, -1.17072e-17, -0.19933900000000002], [0.19933900000000002, 0.45002600000000004, 0.19933900000000002]], "a376fdae-c5de-45a3-ae45-cbb1654b49ab": [[-0.444459, 0.08294990000000001, -0.445023], [0.445271, 1.02013, 0.445051]], "10219887-d944-4d18-a2b3-d43376b0b089": [[-0.249202, 1.38329e-18, -0.23055], [0.248738, 0.367715, 0.229848]], "2d159fe2-104b-4de9-bd85-d16dce731671": [[-1.29685, -3.66211e-07, -0.293501], [1.29685, 2.51046, 0.29350000000000004]], "39a386e1-029e-4dfb-af6d-af19ae1e198f": [[-0.681249, -1.91711e-07, -1.07802], [0.681707, 0.994622, 1.07802]], "1270af0d-9133-447f-8556-aedc9eaa4d0b": [[-1.83532, -0.0006872250000000001, -1.5871199999999999], [1.83605, 0.926686, 1.5875700000000001]], "20a1fe44-10c4-4685-bae0-5ce564e1a19c": [[-1.3278, -4.15249e-05, -0.44595], [1.3265500000000001, 0.750955, 0.446045]], "7628153f-abf1-4569-8829-6004cb29cd0b": [[-1.2404000000000002, -0.000647465, -0.528381], [1.2398, 0.848235, 0.531105]], "58470854-b3d3-4d63-a3e0-5f9bc1add260": [[-0.7, -8.60423e-18, -0.20859100000000003], [0.7, 0.950001, 0.209088]], "210e365e-f949-4075-a7c4-4a7cc43178bc": [[-0.5553370000000001, -1.1110200000000001e-17, -0.18348299999999998], [0.5553370000000001, 0.7157680000000001, 0.18348299999999998]], "9bdd6231-ae58-43a5-a994-6f450229ddf1": [[-0.856595, -0.000557681, -0.300161], [0.8569209999999999, 1.58514, 0.300151]], "21f7bc0a-44e6-4e8e-b3ef-b461b1089e01": [[-0.46475299999999997, -1.23036e-05, -0.479763], [0.464739, 1.10506, 0.47970199999999996]], "679047ae-ee91-4605-964d-4c7e2e21b938": [[-0.330052, 0.000189993, -0.32976500000000003], [0.329856, 0.36987299999999995, 0.332025]], "99e19c41-1c71-4c36-8781-0b534c3c05e5": [[-0.04442, 0.0, -0.044664999999999996], [0.04442, 0.694992, 0.044664999999999996]], "5e42db5e-3361-468b-8d82-d9c35a286b21": [[-0.401544, -0.0, -0.394627], [0.401544, 0.855286, 0.39460700000000004]], "108d44d9-1ce0-4dcd-86f3-5f6e69c4c879": [[-0.24575399999999997, 1.01902e-07, -0.26837], [0.24575399999999997, 0.821489, 0.268157]], "ec05137c-d110-4a20-9a45-f78f3c1d0eb4": [[-0.34281999999999996, -0.00111527, -0.334915], [0.34277599999999997, 1.0249, 0.334974]], "7a1df5e9-0a47-3640-a68a-1b1aa07e8414": [[-0.312402, 0.0, -0.302883], [0.312402, 0.8182240000000001, 0.302883]], "76305e86-69b8-4986-a2f7-65b1e8c43ca0": [[-0.259341, -2.77912e-05, -0.266157], [0.258733, 0.968044, 0.266217]], "051a9bf5-104b-4189-9449-8ff98812cd54": [[-0.22106, 0.0, -0.21770199999999998], [0.22106, 0.537742, 0.21770199999999998]], "59c1ed05-d289-4a09-9786-62f72bbfd0d6": [[-0.288452, 0.0, -0.217294], [0.288452, 0.6813020000000001, 0.217294]], "a19ecc5f-8e37-4b4d-82f7-0a0710ed03dd": [[-0.934054, -9.63715e-18, -0.21], [0.934054, 0.416051, 0.21]], "00fe956b-131d-40fb-a3e3-483a9f157a40": [[-1.1, -5.75584e-18, -0.105], [1.1, 1.8, 0.105]], "2752e301-d232-382d-8051-8882c8a023a7": [[-0.455, -0.00040599999999999995, -0.232817], [0.455, 0.876686, 0.229732]], "158c6274-e688-4147-9d49-5ed5155b8c30": [[-0.12122899999999999, 3.8147e-09, -0.12122899999999999], [0.12122899999999999, 0.248919, 0.12122899999999999]], "4e015268-8d2e-4d84-ba20-031dc2924370": [[-1.02072, -1.5825899999999998e-17, -0.32154299999999997], [1.02072, 2.4, 0.321039]], "1986f65b-be81-439d-bb1b-5dab26214e57": [[-1.26085, -2.2353400000000002e-05, -0.263152], [1.26052, 0.515296, 0.263681]], "4cd8beee-d10d-458b-9c8c-a2955108fc6d": [[-0.66759, 3.05176e-08, -0.311274], [0.667586, 1.9250399999999999, 0.311274]], "e73ff703-adb1-4d3a-993d-60f6d148bec4": [[-0.523756, 0.0, -0.419298], [0.52341, 1.013163, 0.41938699999999995]], "046e2345-5d66-4083-81fe-3cf798b1077b": [[-0.041141300000000006, 2.04512e-05, -0.041141300000000006], [0.041141300000000006, 1.37756, 0.041141300000000006]], "3ec677c9-c683-4345-afad-c1ae45780cf1": [[-1.13208, -0.00012145100000000001, -0.39437], [1.13231, 0.7236060000000001, 0.39488]], "50335b74-1e2d-45ec-a2ee-d36964e40704": [[-1.0, 1.20998e-17, -0.201436], [1.0, 0.398382, 0.201436]], "f7a9e634-d3af-4d90-beb4-c97da4d82ee4": [[-0.553874, 0.0, -0.553874], [0.553874, 0.858472, 0.553874]], "6615bbd5-025d-45a2-9489-fed57d044001": [[-0.7817310000000001, 0.0, -0.5705250000000001], [0.7817310000000001, 0.9520109999999999, 0.5705250000000001]], "27f11b18-2514-4ead-9800-fbaf65e20329": [[-1.07257, -0.00142371, -1.2367400000000002], [1.0723, 1.36743, 1.2328000000000001]], "5ec4a22d-b147-41e1-9bb5-7f71a341d6bc": [[-0.805831, 0.0, -0.17902300000000002], [0.805831, 0.817354, 0.17902300000000002]], "8c88bf88-c253-4a3e-b3a3-53d96a47e873": [[-2.135, -1.17018e-17, -0.20889500000000003], [2.135, 2.45, 0.209908]], "76ac34be-3cd0-43d7-8dcc-397cda694664": [[-0.6149519999999999, 1e-06, -0.440518], [0.614465, 0.975715, 0.439886]], "76ef274a-3977-43f9-aa52-9056a89d8f16": [[-0.308876, -0.00125441, -0.308987], [0.30898, 0.425139, 0.308875]], "8637f137-48bf-4605-902c-d47a2ff81e9a": [[-0.274905, -9.60557e-18, -0.163865], [0.274905, 0.43532600000000005, 0.163865]], "5b76af59-ae9e-42bb-a4ed-b46d3238d1c3": [[-0.308593, -0.000917745, -0.41510199999999997], [0.308701, 0.940893, 0.415339]], "0004ae9a-1d27-4dbd-8416-879e9de1de8d": [[-0.266886, 5.03082e-05, -0.22165500000000002], [0.267034, 0.468969, 0.22158899999999998]], "16febe29-52d9-4833-a695-b09446e65512": [[-0.24811, 0.0, -0.24507500000000002], [0.247977, 0.934816, 0.24507500000000002]], "9560c2b1-7ec1-4f4c-bdfb-3c806d082265": [[-0.9010389999999999, -9.53674e-09, -0.199556], [0.9010389999999999, 0.740056, 0.199556]], "060f87eb-3b9b-4131-b045-e7a8578e8c1d": [[-0.398636, 0.000298, -0.418643], [0.398615, 0.8514019999999999, 0.418454]], "72111125-c726-3c88-85b7-5935724b5f97": [[-0.301908, -0.002735, -0.320679], [0.301484, 0.845788, 0.32616999999999996]], "32025285-a0ca-40b6-9924-dd4e003013f6": [[-0.328314, 0.0, -0.21654099999999998], [0.328314, 0.61848, 0.21654099999999998]], "409b7c91-ccab-4131-bd99-2da5320c2ce5": [[-1.125, -3.55271e-17, -0.425001], [1.125, 0.742843, 0.425001]], "03d5f978-339f-43a2-9cf4-890f8d8f8530": [[-0.655, -7.00498e-17, -1.145], [0.655, 0.96, 1.145]], "06520b1f-f153-4a98-a89c-6561ec40b318": [[-0.250925, -0.000119435, -0.271764], [0.25102599999999997, 0.765235, 0.271374]], "4f6df54e-b8f4-426e-8533-f6b4a88b7aa7": [[-0.295265, -2.6317699999999997e-05, -0.295338], [0.295265, 0.659047, 0.295355]], "2f5020c7-934d-4139-9b75-585d99cbc3f0": [[-0.91277, -2.20728e-17, -0.390861], [0.9113249999999999, 0.6612709999999999, 0.391498]], "1fe97184-a26a-42ee-b5ca-2ac16ef6530a": [[-1.02931, -2.35229e-06, -1.23214], [1.02929, 0.984032, 1.23212]], "102e207e-d7eb-4175-96b0-7b6e6f2b0a31": [[-0.269555, 2.9999999999999997e-06, -0.269555], [0.269553, 0.527779, 0.269553]], "7eaaa405-12bf-4800-9931-940e3be49943": [[-0.468048, -7.927510000000001e-05, -0.470634], [0.468322, 0.7998449999999999, 0.470627]], "bf861c3d-da49-4325-aa7d-eedcb398bacf": [[-0.699807, 0.0, -0.22795400000000002], [0.699807, 0.831941, 0.22795400000000002]], "e47e357e-bb7a-4a28-ad69-e32f9313f0a5": [[-0.286706, 0.0, -0.128485], [0.286706, 0.835278, 0.128485]], "26bd67b4-ad3c-46f1-b07c-6d7d50f877c3": [[-1.6960400000000002, -4.81837e-17, -0.9428730000000001], [1.69662, 0.909329, 0.943353]], "220b5f5e-a3b6-439f-a7e7-e8f58132870a": [[-1.05312, -0.000503996, -1.01635], [1.05359, 0.896972, 1.01603]], "767f0288-4e9f-4784-b32d-6661f807f1d4": [[-1.26489, -2.4641599999999998e-05, -1.0282200000000001], [1.2649, 0.828942, 1.02921]], "67100539-9668-4ad0-8445-641bd40b8ae3": [[-0.266744, 7.62939e-09, -0.291328], [0.267123, 0.8834789999999999, 0.291676]], "aaca783f-2512-48b5-bb9b-ae642c52f901": [[-1.1821, 1.52588e-08, -1.12782], [1.18106, 1.32037, 1.1291200000000001]], "50c81514-0d1d-48fc-befe-ac9fa917022c": [[-0.35290999999999995, 8e-06, -0.478576], [0.352781, 1.10022, 0.47835]], "3eb4751d-19c5-3b2a-9354-10aa6a2c186e": [[-0.559203, 0.0, -0.559203], [0.559203, 0.497142, 0.559203]], "84e912d9-105c-43d3-b0ae-be0e754cd486": [[-0.95, -9.148240000000001e-17, -1.05], [0.95, 1.05, 1.05]], "200c7ae6-a733-4ced-852c-dab54ab95c16": [[-0.36912100000000003, 0.0, -0.36912100000000003], [0.36912100000000003, 0.414611, 0.36912100000000003]], "6dccfbc5-4ad1-4db9-8eb1-dba8ae0b6275": [[-0.275687, -6.43152e-05, -0.275687], [0.275716, 0.233445, 0.275687]], "013f235f-1034-4476-8b32-7282d4822b1f": [[-0.962653, -7.6501e-05, -0.379844], [0.962693, 0.752812, 0.379844]], "9bd804d5-5ed5-4768-a3b6-03da546f03f7": [[-0.246983, -1.45091e-05, -0.24698399999999998], [0.247086, 0.7398170000000001, 0.24702100000000002]], "061892b4-bda8-499c-bd2d-7d10f0a230b7": [[-0.883789, 0.0, -0.23468599999999998], [0.883789, 0.523859, 0.23468599999999998]], "051e058b-d604-4b7e-8bea-bc6dc1d43d1d": [[-1.217751, 0.0, -0.430153], [1.21775, 0.840048, 0.430753]], "7b71bd22-b80b-40aa-835f-564a814d68f3": [[-0.7228189999999999, -0.00011216500000000001, -0.407907], [0.7228189999999999, 0.804363, 0.407907]], "3da11e21-92d3-4543-b342-105c324c39c8": [[-0.40854599999999996, -0.000102819, -0.450232], [0.407352, 0.7758280000000001, 0.449685]], "bf9ea360-1965-4f09-a8e3-59687062fe27": [[-1.4449100000000001, 5.59552e-17, -0.949401], [1.44449, 0.7646550000000001, 0.947734]], "766d644c-97ce-42b1-9a15-323bc70db244": [[-1.116086, 0.0, -0.385593], [1.116079, 0.859987, 0.386457]], "616e7447-d3aa-3919-aba0-d4a6809fcee8": [[-112.5, 0.0, -65.0], [112.5, 74.3562, 65.0]], "947ad72f-635f-4b84-9e8f-3da6a2e7ff64": [[-0.349206, -1.21409e-17, -0.350008], [0.349206, 0.38722999999999996, 0.350008]], "bff6e7b4-4e17-401d-b684-dc768def3869": [[-0.8873000000000001, -0.000136137, -0.971744], [0.886807, 0.9943470000000001, 0.972417]], "03db2587-8f45-4154-9736-557f6256ae1c": [[-0.510231, 5.89699e-08, -0.3423], [0.510231, 2.09301, 0.34262]], "bfcb3603-3239-48c8-951e-c0d861a018de": [[-0.353915, 0.000153, -0.35815600000000003], [0.353664, 0.9491809999999999, 0.35848100000000005]], "3f819689-ad91-41de-9418-b228b184ad01": [[-0.195076, 0.0, -0.195076], [0.19506199999999999, 0.5043, 0.195076]], "54026ce7-8499-4ff6-b088-fb90028ccae6": [[-0.17904599999999998, 0.000357278, -0.146842], [0.17867999999999998, 1.262, 0.14657299999999998]], "1e81f176-e7fd-4580-8697-aeff753062fa": [[-0.341077, 1.9073500000000002e-08, -0.34169499999999997], [0.341745, 0.9237380000000001, 0.341263]], "259189ef-c572-4db8-b0b3-41be520eb20b": [[-1.850027, 0.002464, -0.88022], [1.8502, 0.757804, 0.880311]], "018cf659-b7a0-47cc-8490-27e3e00ed483": [[-1.15409, -0.000209406, -1.26298], [1.15342, 0.853755, 1.26298]], "0c0c2842-496f-4679-9b8b-f28c0903e438": [[-0.497716, 0.0, -0.49804000000000004], [0.49804099999999996, 1.023513, 0.49804000000000004]], "47dfeb0e-ff9f-4b29-9d70-40cca6f0780b": [[-1.02422, 7.917199999999999e-08, -0.256584], [1.02422, 2.43471, 0.2572]], "fa9229b4-7d48-40f2-adef-ceccab8697f5": [[-0.19535799999999998, 4.5767599999999995e-08, -0.18308], [0.19535799999999998, 0.496461, 0.18308]], "eb369a6a-230d-4231-8cee-0f54201ae975": [[-0.39155, 2.9999999999999997e-06, -0.328397], [0.391649, 0.716186, 0.328397]], "a47ae982-caab-4b01-a6d7-6cb8eba88974": [[-0.409187, 0.0, -0.40968499999999997], [0.407975, 1.074441, 0.409877]], "6756a871-fc8f-4db3-8692-dc9c512d4ad1": [[-0.26441, -0.000572853, -0.264256], [0.264208, 0.801918, 0.264274]], "087c2571-888d-46a2-a6c3-d0a9c6988a4e": [[-0.24173100000000003, 0.0, -0.23458500000000002], [0.24173100000000003, 0.856054, 0.23458500000000002]], "41eaa956-e829-4852-88a5-313232ee75dc": [[-1.078644, 0.002086, -1.034154], [1.078644, 0.76627, 1.033496]], "b63299fd-c11b-4a1d-8511-31cbfe11bcea": [[-0.265769, -2.22192e-06, -0.21848900000000002], [0.26577, 0.454058, 0.218535]], "efaeabac-2ede-4050-a9e7-c6a926bfbb11": [[-0.47177, 1.8e-05, -0.388717], [0.471976, 0.893331, 0.388812]], "6d8cb6d1-1ed9-4af9-9249-ede2906b0834": [[-0.387456, 0.0, -0.234634], [0.387456, 0.310442, 0.234634]], "f394d524-89b1-4acf-a21a-7eae82390fb5": [[-0.604286, 0.0, -0.260425], [0.604362, 0.8205370000000001, 0.260425]], "c3ee981e-0335-47c0-bc17-99d9b3cb59cf": [[-1.1263800000000002, -1.90735e-09, -0.72324], [1.12598, 0.929247, 0.724146]], "0d1c2c39-5c57-4c75-b477-603123dc0b40": [[-0.357658, -0.000216462, -0.483792], [0.356877, 0.958725, 0.484828]], "d8794280-c6ed-4004-b33c-53cf8d93140b": [[-0.365188, -0.000414573, -0.366747], [0.364225, 0.681353, 0.366939]], "616faa27-89fa-4f29-94f0-ca51cc7f35a2": [[-1.164961, 0.0, -0.421993], [1.164474, 0.926045, 0.420771]], "c5727da4-8c89-4d09-b8dd-fe70583e8155": [[-0.229729, 0.0, -0.179974], [0.22980799999999998, 0.463686, 0.179924]], "7b16303d-fe2c-4e81-a6c8-b9b758ab455f": [[-0.635422, 0.0, -0.6409600000000001], [0.635687, 0.8695470000000001, 0.640518]], "44c0faa6-9d85-45f7-bf87-cf583e6ad88a": [[-0.258494, 0.0, -0.259369], [0.258494, 0.503373, 0.259369]], "4b0ea7e5-aa34-4131-b512-d34ef754846c": [[-0.9288590000000001, 4.77888e-08, -0.254058], [0.9288620000000001, 0.48991799999999996, 0.254167]], "3e39820c-1095-466d-af99-9d87e7c7907c": [[-0.910039, -6.914459999999999e-18, -0.269592], [0.910039, 0.804162, 0.269592]], "04753da7-1d93-4857-8b7f-51c50fe95568": [[-0.37312100000000004, 0.0, -0.376629], [0.37443899999999997, 1.103469, 0.376629]], "2e1d86d2-6cec-379a-9f36-ad943ce2448d": [[-49.7155, 0.0, -27.0276], [49.7155, 78.7274, 27.0276]], "26389983-4b56-410c-a2f8-b28ed3344279": [[-0.14423, -1.52588e-08, -0.025955699999999998], [0.144338, 0.992706, 0.025955699999999998]], "81a8dcd4-9de1-4fdc-8780-b07883fd48ee": [[-0.5186540000000001, -1.59124e-05, -0.156945], [0.518137, 0.911272, 0.157796]], "290ad037-4370-3ad4-9926-369a00b569b5": [[-39.5196, 0.0, -39.5196], [39.5196, 109.0105, 39.5196]], "2a821bb0-4c82-4b72-9974-4ece7f2d2316": [[-0.48641, -2.3365e-08, -0.5256649999999999], [0.486499, 1.05873, 0.525725]], "26e8ffde-7285-4928-b907-d90287c68ecc": [[-0.6523350000000001, -3.26113e-09, -1.05651], [0.6523359999999999, 0.954732, 1.0566]], "886c336a-96da-4258-8a4f-575be5b7e2e9": [[-0.92729, -7.62939e-09, -0.44553899999999996], [0.9272060000000001, 0.717393, 0.445254]], "b9638563-60a7-4592-9d69-8b03a5a2a34a": [[-0.343756, -5.19172e-09, -0.339794], [0.343756, 0.108986, 0.339767]], "4a4761bc-9f6c-43d3-993d-ceab92569d3a": [[-1.0590300000000001, -0.000209052, -0.42741999999999997], [1.05899, 0.7352609999999999, 0.42742199999999997]], "29fd3dac-d939-433c-8e16-65696776542c": [[-0.75, -9.88081e-18, -0.20747], [0.75, 0.36, 0.20747]], "e894d90d-960c-40fd-a6fd-c4d87b1dc2fd": [[-0.9483069999999999, 0.0, -0.457316], [0.9483069999999999, 0.908701, 0.457316]], "98105891-1421-4f66-a513-0ac57aa3bf54": [[-0.30727699999999997, 5.51743e-18, -0.131124], [0.333583, 0.576462, 0.251031]], "d4c49505-8a5e-4766-b5cb-6b6fe7142292": [[-0.470783, -6.97676e-08, -0.426691], [0.47078200000000003, 0.767885, 0.42802100000000004]], "0587b568-e7e7-4022-9e65-b2c7f53cd907": [[-0.311357, 0.00026536, -0.315394], [0.311237, 0.9845050000000001, 0.315409]], "d29c310b-3447-4fed-a240-cd0ea23e12ec": [[-0.29112899999999997, -0.0, -0.40998199999999996], [0.29112899999999997, 0.8688400000000001, 0.410002]], "b8db10ea-142f-49f1-b6a5-2e57827c6b52": [[-0.345619, 0.0, -0.344246], [0.345619, 0.461486, 0.344246]], "7495ba4c-14e0-4f29-a864-6564524e8afa": [[-0.5921379999999999, 0.0, -0.15756399999999998], [0.5921379999999999, 0.779797, 0.15756399999999998]], "2367712e-695d-4b3a-bc44-a2711b48c3dd": [[-0.811554, -7.62939e-09, -0.17465399999999998], [0.811554, 0.608435, 0.17465599999999998]], "21910dbc-4da0-3b35-a43c-e4b09ed594e5": [[-0.5457350000000001, -1e-06, -0.577308], [0.560742, 0.670038, 0.5301509999999999]], "05dd288f-ce85-4f1c-b218-f27354225915": [[-0.42367600000000005, -9.744360000000001e-05, -0.453266], [0.423887, 0.9640380000000001, 0.45286000000000004]], "39d7fa5f-1d5a-4537-85ec-409015ce78c2": [[-0.141186, 0.0, -0.124086], [0.141186, 0.312122, 0.124086]], "952368a4-9815-40ea-868e-11f5f2744c51": [[-0.32650199999999996, 0.0, -0.30194299999999996], [0.32650199999999996, 0.8889090000000001, 0.302242]], "85502557-96e1-4840-83b8-6aad2298d6c7": [[-0.256942, 0.0, -0.24963999999999997], [0.256942, 0.8476170000000001, 0.24963999999999997]], "a706a607-7e31-45e0-86f0-08573486871f": [[-0.675, -1.20015e-17, -0.2], [0.675, 0.9, 0.2]], "506c7892-3049-4a53-ae3d-c41bad0700e8": [[-0.901493, 0.0, -0.209036], [0.901493, 0.53206, 0.209036]], "73c0f57c-5cb7-4440-8d59-6dee85f358de": [[-0.260955, 5.95374e-09, -0.17013899999999998], [0.260955, 0.619308, 0.17013899999999998]], "5c19e757-5134-44cc-adee-6831e74096eb": [[-1.22372, -0.000140511, -0.44500799999999996], [1.2238200000000001, 0.917825, 0.445152]], "65d94be6-74d9-4f3c-a7ce-fffe1f25ba15": [[-0.5836979999999999, -9.60105e-18, -0.220275], [0.5836979999999999, 1.79662, 0.220194]], "7e2bcbc7-e16c-433a-810e-87b896f14ca6": [[-1.60376, -0.0010435, -1.00195], [1.6032499999999998, 0.869426, 0.999771]], "08f0e88a-cca8-43c2-947f-9a8062d342b6": [[-1.52118, -0.00011962199999999999, -1.0237399999999999], [1.52187, 0.688556, 1.02453]], "37f22d41-832b-44c7-9763-089149607594": [[-0.272558, -0.000619408, -0.310116], [0.27255199999999996, 0.52693, 0.31021]], "655c2982-53f0-4ead-8d91-fca5902e69c1": [[-0.199355, -2.4869e-17, -0.19895], [0.199355, 0.169589, 0.19895]], "1a114a3e-b623-350d-9318-50ad5be10fb5": [[-0.911371, 0.000297, -0.438627], [0.911371, 1.232283, 0.438549]], "ca436b28-1913-4726-90b5-93c052244fef": [[-0.423947, -0.000785404, -0.423937], [0.423946, 1.15876, 0.42383200000000004]], "146d13af-5e0e-4032-8be3-71d8b6ca8406": [[-0.31999, 0.0, -0.359923], [0.31999, 0.5335730000000001, 0.359923]], "b50ccd2a-3aaa-4693-8cdc-7090f78204cd": [[-0.655802, 0.0, -0.30422699999999997], [0.655802, 0.6386419999999999, 0.30422699999999997]], "3eafb8d4-0afb-4439-a020-395f3c7da7f2": [[-0.28722200000000003, 1.30359e-06, -0.278121], [0.287268, 0.8594759999999999, 0.278155]], "dcada3bb-39e5-4ad6-9dae-11fee68726cf": [[-0.6027089999999999, -5.06694e-05, -0.19586099999999998], [0.6027089999999999, 1.0177500000000002, 0.19571100000000002]], "7a39301a-3379-4c7b-bee1-1eb721048a86": [[-0.352767, -4.87379e-05, -0.310049], [0.352774, 0.7841429999999999, 0.310042]], "05be3726-480e-40c2-888b-74f4d56ede4a": [[-0.340205, -0.0, -0.354974], [0.340529, 0.921989, 0.355001]], "63d8b411-9737-43f4-8dc1-8ebcb008b61a": [[-1.20752, 0.0, -0.570878], [1.20752, 0.9554309999999999, 0.570878]], "7db7a7dc-70af-42fe-9601-ea991cc9f653": [[-1.246752, 0.00021700000000000002, -0.457939], [1.2536100000000001, 0.9065179999999999, 0.456092]], "1f2c5a0e-f031-4c72-b7cc-9d60390d1c0e": [[-0.967288, 0.0, -0.343633], [0.967028, 0.91218, 0.343633]], "6cc1c4c4-5b3c-4210-9b2c-20043874c1ad": [[-0.8938240000000001, 0.0, -0.19572099999999998], [0.8938240000000001, 0.489529, 0.19572099999999998]], "7bfab3be-a34a-4d17-9d57-641e0a7f8108": [[-0.945672, 0.000269393, -1.07023], [0.94709, 1.26134, 1.06999]], "51cf674e-7f84-4e50-8deb-11ec4a9ae4de": [[-0.474131, 0.0, -0.397494], [0.474131, 0.705352, 0.39749]], "47c91fb3-4424-31fb-a0b5-85b0a9635504": [[-0.34827199999999997, 0.0041789999999999996, -0.51795], [0.34827199999999997, 0.94316, 0.385252]], "c7476973-4218-4687-abad-a35fd1ec99a3": [[-0.509524, -1.6568099999999998e-06, -0.723225], [0.509524, 0.445486, 0.723225]], "2cb1497c-ace1-4c70-a098-abb80aeace79": [[-0.765462, 1.70663e-07, -1.04457], [0.765462, 1.13277, 1.04482]], "1a08092e-9b95-409c-a07e-e2b22294efee": [[-0.4, -5.51998e-18, -0.159852], [0.4, 1.28, 0.159938]], "7a6cf709-1d8b-4f76-9df5-f420cc9eb713": [[-0.513459, 1.27113e-08, -0.244876], [0.513459, 0.840206, 0.244744]], "c744f59f-6133-4131-a131-88209820de61": [[-0.214815, -0.0, -0.21586300000000003], [0.214787, 0.873825, 0.215957]], "df7eb50b-47db-42af-9513-3a2cdca11138": [[-0.537941, -0.000875615, -0.250543], [0.537941, 1.4637, 0.252224]], "66829e44-415f-4e19-9d58-0564eb8f42eb": [[-1.0936, -2.28163e-17, -0.40570500000000004], [1.0943800000000001, 0.8679389999999999, 0.406061]], "0d7421d4-2656-435b-9eb1-8884b4b3dcb3": [[-0.171662, -4.6032499999999995e-06, -0.171667], [0.171662, 1.73, 0.171662]], "ed18d608-4fa6-4fde-a7ec-e89385f7a1f7": [[-0.335393, 0.0, -0.37813899999999995], [0.335393, 0.812892, 0.378149]], "5676b325-81ea-4079-b717-9603c586b572": [[-1.47815, -5.72205e-09, -0.500249], [1.47812, 0.89087, 0.500559]], "4232a474-2661-44b7-becb-0dba932629b5": [[-0.19786, -9.281869999999999e-18, -0.186588], [0.19786, 0.8317279999999999, 0.186495]], "b5c1677b-8398-4332-9e83-e85c789ee209": [[-0.293088, -0.0, -0.297892], [0.293088, 0.8285370000000001, 0.297892]], "0f778b4c-7406-4120-8f3c-8a9fa867a2d6": [[-1.61233, -0.00031945599999999997, -0.506134], [1.6125, 0.7798919999999999, 0.506353]], "80ce3fc7-bb8e-414e-b39c-a638b76ba9de": [[-0.849366, 7.62939e-09, -0.21252500000000002], [0.849366, 0.41936999999999997, 0.21252500000000002]], "75cbe516-3049-47cd-80de-5332d41b14bf": [[-1.2431, -6.912139999999999e-05, -0.529874], [1.24191, 0.841721, 0.529114]], "c88f25fa-d2be-4cea-b89f-ade61071a917": [[-0.688929, 0.0, -0.237592], [0.688929, 0.485679, 0.237592]], "1690e7fb-5340-429b-b3c8-0ab7c20455ae": [[-0.9407599999999999, 0.0, -0.476843], [0.940659, 0.799909, 0.476842]], "9d0f56a7-c2e4-41be-9033-8ac51ed033fc": [[-0.294313, 0.0, -0.246524], [0.294313, 0.714056, 0.246524]], "e9bd517b-849a-4d61-a78d-9a05285d1b32": [[-0.5595060000000001, -1.9519100000000002e-07, -0.376305], [0.5595060000000001, 0.416582, 0.376305]], "fc6b1d8f-e38e-4bd8-914e-4e019105765e": [[-0.229707, 0.0, -0.230677], [0.229707, 0.585064, 0.230677]], "7f179935-a6a3-4188-a4ec-e5d734002b07": [[-0.6, -3.38144e-05, -0.21], [0.6, 1.288, 0.21]], "13148444-7625-461d-9db4-fae186c8a9f0": [[-0.280135, 0.0, -0.280135], [0.28008099999999997, 0.538099, 0.280135]], "941a14b9-ee31-4001-8f93-d42059cfe59b": [[-0.542268, 3.51906e-05, -0.0612959], [0.542268, 0.663371, 0.061291000000000005]], "629d9996-8b8c-4422-81b3-5418c05d9160": [[-0.989594, -0.0017653, -0.41726599999999997], [0.9895999999999999, 0.804663, 0.41687399999999997]], "2da09b49-7b5e-4777-ab7e-b128ba816932": [[-0.338005, 0.0, -0.288826], [0.338005, 0.781933, 0.288704]], "24624dae-698b-4c70-957c-a67531aac5e4": [[-0.416775, -0.000341286, -0.45813200000000004], [0.416524, 0.9666129999999999, 0.45844700000000005]], "5efd439d-6a3b-484a-b79a-7074666759b3": [[-0.270457, -1.65607e-17, -0.270457], [0.270457, 0.14, 0.270457]], "5627d0ff-abbc-4c53-81b0-8a2b07b58ba4": [[-1.46028, -0.00011124, -0.527645], [1.4603899999999999, 0.937213, 0.52821]], "b2a26a03-b549-4123-883d-01ea91624770": [[-0.09800110000000001, -0.00015879500000000001, -0.0979996], [0.09800110000000001, 0.9079269999999999, 0.0979996]], "80b3c1bd-cd8b-4866-845f-e44b767fd92c": [[-0.875979, 0.0, -1.10852], [0.875867, 1.0993899999999999, 1.1101699999999999]], "1b98b0ec-0397-4241-99cf-b342bc319359": [[-0.8997499999999999, -2.41308e-17, -0.42248600000000003], [0.8997499999999999, 0.7298749999999999, 0.42248600000000003]], "73056f69-1900-4ca5-923b-d617ba47a927": [[-0.9865269999999999, -7.03268e-17, -1.16036], [0.986432, 1.46599, 1.16036]], "9b6864a3-5a08-43eb-baec-dae80aad1f12": [[-0.413934, 2.391e-05, -0.16298400000000002], [0.413932, 0.81637, 0.16299]], "3fb272ad-8d57-3632-b82b-4da71a5350f6": [[-0.224971, -0.002105, -0.23515799999999998], [0.224971, 0.720603, 0.260519]], "0dd1a2fb-d656-4408-a1b6-54f86785e012": [[-1.3881899999999998, -0.00110517, -1.4025899999999998], [1.38517, 1.0989, 1.4006100000000001]], "4e200c6a-d235-4f50-871b-b63d0d85bc97": [[-0.25797899999999996, -0.00029584800000000003, -0.258832], [0.257949, 0.78335, 0.25917]], "4080ecdd-247e-41de-9060-62d79ea227cf": [[-0.432542, -0.000303697, -0.432425], [0.432605, 0.6031839999999999, 0.43264600000000003]], "86e02d2a-22f0-450a-97da-86424c4b68a2": [[-0.591917, 0.0, -0.591917], [0.591917, 0.358742, 0.591917]], "46da3b9f-78ac-4e0a-aa6b-da85dbf6cb46": [[-0.225, 0.0, -0.225], [0.225, 0.49955599999999994, 0.225]], "46efcafc-0622-4a48-880e-451e28e15008": [[-1.04791, -4.22864e-09, -1.2193399999999999], [1.04772, 1.1094499999999998, 1.2193399999999999]], "8fb52553-9433-4819-8393-2867ebf6ce46": [[-0.357778, -2.25409e-05, -0.357778], [0.357753, 0.395313, 0.357838]], "4a1ee475-caa2-441b-9d9f-832dc3c01a3c": [[-0.31901599999999997, -5.56402e-08, -0.331746], [0.319183, 0.751931, 0.331861]], "7b06046a-b009-4b08-8407-ca1b4bd535e4": [[-0.6732779999999999, -0.00093742, -0.648807], [0.671866, 0.87103, 0.648424]], "2b6216ea-23a2-435a-b6be-1f32aed4cad4": [[-0.66014, -0.0, -0.213892], [0.66014, 1.090832, 0.214069]], "a6696ab2-7ab1-4865-a0ea-9b1aba908285": [[-0.124045, 3.97106e-18, -0.09433730000000001], [0.124045, 0.400538, 0.09433730000000001]], "5345e23f-c624-4501-b7eb-15a7283afcd3": [[-1.4375399999999998, -4.7648e-06, -0.5329630000000001], [1.4375299999999998, 0.7651519999999999, 0.5316420000000001]], "c2100a72-accc-485e-ac9e-3b8998392121": [[-0.367357, 5.7591499999999995e-09, -0.353982], [0.367357, 0.801667, 0.35393]], "6da2f6b3-b504-4455-9d7c-937b9818f7db": [[-0.25252600000000003, -3.3875200000000004e-05, -0.252539], [0.252497, 0.22479, 0.252524]], "c9d93142-6292-41f5-90ca-cd68d31cdcec": [[-1.322391, 0.0, -0.270192], [1.322391, 0.791683, 0.270192]], "392da8c3-da90-478b-ac7d-4e3b3ffe3e87": [[-0.224013, -1.21346e-17, -0.224601], [0.224012, 0.607113, 0.224595]], "bb6cbf83-5781-4689-aa0c-f45063d615aa": [[-0.9490479999999999, 0.0, -0.276736], [0.9491689999999999, 0.462831, 0.27669]], "5bb5b80f-d0e7-402f-87fe-1848455915e4": [[-0.257865, 2e-05, -0.290732], [0.257786, 0.7644679999999999, 0.290482]], "1e817035-9f48-4832-a983-0ac44c243d12": [[-1.14, -1.1920899999999999e-10, -0.250001], [1.14, 0.722, 0.250002]], "0858d6e6-004a-4ab9-bb73-6a54b6f228e3": [[-0.8501829999999999, 0.0, -0.19439599999999999], [0.8501829999999999, 0.49994500000000003, 0.194418]], "1b7c7f4d-b801-455a-ab56-8e29286ea59c": [[-0.338775, 0.0, -0.312135], [0.338775, 0.83831, 0.313701]], "1abc5a82-85a1-3fb9-ae88-792ad8fddcac": [[-1.054636, 0.0, -0.492798], [1.054636, 0.720495, 0.492798]], "14483243-3183-489c-bd6b-fe502cfe32cc": [[-0.32156, -9.62631e-18, -0.19924], [0.32156, 0.46163400000000004, 0.19924]], "1ba78b12-1c33-4f8a-97f6-9a4ea84dc3f9": [[-0.25, -1.3487299999999999e-17, -0.25], [0.25, 0.5, 0.25]], "0898bdf2-fd42-45ec-979c-080b91ce320b": [[-1.61419, -0.000147166, -0.6450870000000001], [1.61458, 0.815187, 0.6464230000000001]], "bb1ec6a7-85b0-4b47-8637-2d22d39515bb": [[-1.150712, 0.0, -0.421794], [1.150711, 0.827906, 0.421366]], "db94b918-4b53-42f9-839c-c18cc2c49e3f": [[-0.199343, -1.27898e-16, -0.198991], [0.199343, 0.169589, 0.198991]], "4220d3b4-88d2-3fd2-bc91-c55a1ff0ced1": [[-1.198739, 0.0, -0.48491700000000004], [1.265263, 0.979935, 0.48491700000000004]], "5c569464-c0a0-440f-9c03-71e8d57e05fc": [[-0.11997999999999999, -3.66583e-08, -0.29997599999999996], [0.11997999999999999, 0.07000060000000001, 0.29997599999999996]], "6a0b1325-4b16-4fd2-9f42-2742a8f8ca6f": [[-0.45, -1.44508e-17, -0.275], [0.45, 0.475, 0.275]], "0b6897e9-3f39-4141-8c16-8bd639bd8a56": [[-0.8934300000000001, -0.000190239, -1.00614], [0.8898229999999999, 1.2142, 1.0059099999999999]], "780f9f9f-d48b-45c3-9171-c5e133fe81f1": [[-0.5927089999999999, 4.4000000000000006e-05, -0.34893300000000005], [0.592912, 0.693438, 0.34887999999999997]], "c7d0e4b6-939d-4bca-87e6-f57ae3dd7130": [[-0.279701, -6.55684e-18, -0.107081], [0.279701, 0.42278, 0.107081]], "6914bc9b-d7f3-3d85-9fdf-a8e30b54ed35": [[-38.7047, -0.0354, -38.7047], [38.7047, 74.9616, 38.7047]], "1ed074bd-83a9-4570-ae89-db2404e790ab": [[-0.75, -1.0367199999999999e-07, -0.20000199999999999], [0.75, 0.54, 0.20000099999999998]], "28c135ac-9ae0-39dc-b9c2-fd4fdc19bb20": [[-0.397668, -0.001114, -0.407823], [0.397668, 0.876053, 0.39315600000000006]], "29f0c38b-8da4-4181-ae30-14b1eb650fb0": [[-0.311582, 0.0, -0.336443], [0.311582, 0.924693, 0.33632399999999996]], "b5c60f50-7e44-4d76-8866-13a85cdb5b74": [[-0.304365, 0.0, -0.20085699999999998], [0.304365, 0.524806, 0.20085699999999998]], "48db9ffc-306b-4a41-b040-dec707e6f2ba": [[-0.691837, -1.08381e-17, -0.177], [0.691837, 0.697229, 0.177]], "be434854-faee-4d0f-a948-84818b44a4f7": [[-0.42564100000000005, 6.1000000000000005e-05, -0.552951], [0.42564100000000005, 0.9215810000000001, 0.552913]], "7a658b68-6752-490c-a9ad-2941ce1fb504": [[-0.770071, -3.83722e-05, -0.966871], [0.769635, 1.03274, 0.966873]], "5aa1b510-1f7f-4cc8-a018-b92c395afec1": [[-1.54007, 1.32796e-08, -0.306925], [1.54007, 2.54651, 0.306925]], "56b8baf2-ced5-4780-9d2a-40689073f053": [[-0.710565, 0.0, -0.40002899999999997], [0.710565, 0.686124, 0.40002899999999997]], "30817808-0301-447b-b14e-703d98aa9ae5": [[-0.59262, 1.61283e-17, -0.26523399999999997], [0.592718, 1.40972, 0.265235]], "b0243319-1b93-45e6-b7af-8efc2ad9aa9d": [[-0.345674, -9.84825e-06, -0.34570700000000004], [0.345681, 0.7471479999999999, 0.34563000000000005]], "0830dd10-29a7-4471-a2fc-434d042d8c32": [[-0.28711200000000003, -9.01226e-18, -0.255058], [0.28711200000000003, 1.1793500000000001, 0.255058]], "ce2fddf4-5119-44dc-9b2a-7f8485634b28": [[-0.170475, 0.0, -0.19561800000000001], [0.170475, 1.761835, 0.19561800000000001]], "3287f120-f4de-468e-93e5-97a5aeb477a7": [[-0.410994, -0.0011146300000000001, -0.47292700000000004], [0.411507, 0.932184, 0.47362299999999996]], "615bc65e-eec2-4bc4-a735-0d4d45d583cd": [[-1.0456100000000002, 1.21744e-08, -1.0326600000000001], [1.0456, 1.00314, 1.0326600000000001]], "409e5829-c368-40c9-ac6f-767fb19b4d54": [[-0.65, -9.534039999999999e-18, -0.19014299999999998], [0.65, 2.7, 0.190941]], "39922c43-03a5-4276-94fd-100fa73ffd4e": [[-0.684351, 0.000451, -0.464105], [0.686553, 1.01281, 0.464212]], "a7784e04-80e6-467a-93dc-eac88ca21fae": [[-0.799551, -0.000703956, -0.323444], [0.799551, 1.20093, 0.323444]], "216f7336-4e3e-4665-940a-d33ca4afb0fd": [[-1.39624, 0.0, -0.506644], [1.3962200000000002, 1.08799, 0.5069400000000001]], "97606825-00ae-4fea-a421-804faeb73d44": [[-0.237495, 0.0, -0.237495], [0.237495, 0.436063, 0.237495]], "6da96b77-fadb-4842-808e-85bdd2c30594": [[-1.489805, 0.0005, -0.462212], [1.4894990000000001, 0.8923180000000001, 0.462355]], "87e35114-6a80-422e-afc6-75a29e945d04": [[-0.8562059999999999, 0.0, -0.307862], [0.8562059999999999, 0.9151640000000001, 0.307862]], "b8691383-7782-4e7e-9198-2475e987f082": [[-0.312794, -1.2934100000000001e-17, -0.235958], [0.312794, 0.730002, 0.235958]], "83cae192-b11b-4cd4-b6f3-8d55ce211625": [[-0.984453, -1.79993e-17, -0.303494], [0.984453, 2.5050399999999997, 0.303952]], "7a1be132-84dc-44f6-9768-8eed5e562ae0": [[-0.6816150000000001, 0.00134897, -1.12074], [0.681801, 1.02073, 1.11986]], "03608677-5363-4a95-ba5c-a7a0b112db56": [[-1.13853, 1.68332e-11, -0.32777500000000004], [1.13853, 2.40815, 0.32777500000000004]], "8da9f8b9-8a39-445d-b338-992338003e7f": [[-0.311789, 0.0, -0.355906], [0.311718, 0.723356, 0.355653]], "7b10ec70-d032-4c75-a1bc-8fa6ea7f8ca3": [[-0.905459, -3.15838e-07, -1.05959], [0.9050480000000001, 1.1737, 1.0585]], "2d206e2b-325a-3780-9304-3dbdf37b7d8c": [[-0.97419, 1.1999999999999999e-05, -0.443566], [0.979603, 0.8503189999999999, 0.49676299999999995]], "a68002c4-ac82-46e7-8946-0ee9f600e529": [[-1.340532, 0.0, -0.964314], [1.340532, 0.777082, 0.963742]], "03370373-5e38-43f0-8133-07fecdd6159d": [[-0.298551, 0.0, -0.298551], [0.298551, 0.567469, 0.298551]], "143368b6-f9c6-4013-b24b-ef638dcb8f30": [[-0.260171, 2.86293e-06, -0.233597], [0.260206, 0.750347, 0.233302]], "040d99d3-ee9c-406b-bbca-6c812323badd": [[-0.312489, 0.0, -0.160367], [0.312489, 0.472894, 0.160336]], "a44054d5-9370-4353-9bc8-c73709d82d65": [[-0.30121200000000004, -0.000351688, -0.30095700000000003], [0.30033899999999997, 0.11916399999999999, 0.301514]], "6494f33c-0c80-3b87-934f-2645b515f81b": [[-54.783, 0.0, -59.3741], [54.783, 77.0387, 59.3741]], "e44abb9d-cdae-48f8-a719-21e05ba1ccd8": [[-0.182141, 1.09206e-17, -0.188905], [0.182141, 0.504053, 0.188905]], "62112f4d-fabd-4307-92bf-a0135b55d1f1": [[-0.296531, -1.1630199999999998e-17, -0.225], [0.296531, 0.45598700000000003, 0.225]], "71fbdc29-958b-4021-84eb-f8ed917391db": [[-0.648646, -6.4837e-16, -0.5488620000000001], [0.648646, 1.53843, 0.5488620000000001]], "b0e659e5-08c2-44f9-aeae-888ca079a95e": [[-1.15119, 1.2207e-07, -0.187548], [1.15119, 2.4, 0.18731]], "92678333-6047-45ef-88e3-dacea1bb04a4": [[-0.39597299999999996, 0.000341956, -0.415505], [0.39600799999999997, 0.68639, 0.417605]], "362671bf-ebc0-49cd-a3d6-a91b5d62ecb3": [[-0.8079959999999999, -6.25096e-05, -0.449996], [0.8079959999999999, 0.766323, 0.449999]], "08011234-d5e0-4eb0-bd6b-bed34868ca89": [[-0.9, 0.0, -0.207134], [0.9, 0.5, 0.207134]], "f3271cac-dcf6-4545-a92c-74d997310f74": [[-0.217911, 0.0, -0.27560199999999996], [0.217911, 0.446952, 0.27560199999999996]], "f2c5deb2-67eb-49a0-af58-19c92a87d280": [[-0.276223, -0.00011974, -0.27636900000000003], [0.276221, 0.21618500000000002, 0.27637]], "49e8f3e2-52ad-4c16-864a-4ea7f7478313": [[-0.232329, -5.684340000000001e-17, -0.232121], [0.232297, 0.47558300000000003, 0.23225400000000002]], "81e68235-20fa-4895-ba44-2397c530cfcc": [[-1.0813, 0.000101689, -1.1967400000000001], [1.0819, 1.11988, 1.19642]], "00b8fe1c-2ba0-4a25-a7d8-44e278cd9f7d": [[-1.583966, 0.001307, -0.561483], [1.586297, 0.978592, 0.560462]], "83d75bac-2a13-4680-84d6-3eaa2ccada03": [[-0.370492, -0.000308179, -0.35215], [0.370025, 0.904542, 0.351074]], "2e622929-fd01-41a0-befb-087ad737326b": [[-1.05016, 7.62939e-09, -0.197955], [1.05009, 0.916048, 0.19810199999999997]], "436dc837-ccec-4d21-a779-8a4a8323c3fc": [[-0.278444, -4.8377999999999997e-05, -0.269808], [0.278174, 0.8579380000000001, 0.269667]], "3cbc1192-41b0-4a88-91f2-40ae432f6315": [[-0.181824, 0.0, -0.182006], [0.181824, 0.757863, 0.181949]], "f91d151a-f2bf-43e8-91ef-4e7e95728139": [[-0.40731900000000004, -3.44098e-08, -0.337556], [0.407371, 0.464244, 0.337507]], "484b1fe3-4aa1-40d2-852f-00048cd1b1f5": [[-0.440514, 0.0, -0.37486400000000003], [0.440514, 0.398182, 0.37486400000000003]], "4fed5a4a-b52e-4226-a6ae-d3a102b602ac": [[-0.18671800000000002, -1.97892e-07, -0.20131], [0.186719, 0.819098, 0.20117100000000002]], "6d518ae9-c407-3782-b245-3ff053feddc8": [[-36.4923, 0.0, -34.4355], [36.4923, 81.1473, 34.6231]], "5f4e4280-71c5-37e6-967c-c6b8f21a0b92": [[-0.236739, 0.0, -0.31267700000000004], [0.236739, 0.790428, 0.31267700000000004]], "9c9f6b41-6c0f-45d6-803b-f4d6bb0d3399": [[-0.547746, 0.0, -0.520076], [0.547745, 0.38404299999999997, 0.520076]], "cbb9fdce-e6f0-4c03-91b3-af9a1d81e8a5": [[-1.74316, -0.0007653740000000001, -1.1778199999999999], [1.74034, 0.907313, 1.18006]], "b93b389d-14d3-4489-b11e-e6f7f60e5190": [[-0.659157, -5.43696e-05, -0.657492], [0.659157, 0.400112, 0.6575620000000001]], "6d486dd3-8a92-4d27-b989-d5bb8a2ce25b": [[-0.517753, 0.0, -0.880551], [0.517752, 0.514546, 0.8801739999999999]], "2777ee3b-36c2-3887-8723-f3e5aa7d2363": [[-0.358354, 0.000123, -0.38339399999999996], [0.35944400000000004, 0.7299599999999999, 0.41855600000000004]], "7cc60589-1c0d-4942-bc46-616e54845b66": [[-1.513134, 0.000341, -0.513282], [1.514367, 1.112389, 0.517757]], "8cda950c-f8c8-4e30-9671-0df124bdacf3": [[-0.248111, 0.0, -0.274901], [0.248048, 0.843908, 0.274936]], "8cf0f886-0ee9-4f2d-8462-38783e39a9b8": [[-0.600445, -9.108310000000001e-18, -0.15125], [0.600445, 2.0, 0.15126]], "498a9312-e776-4525-9a9c-3225df3304e4": [[-0.381043, -0.000308379, -0.39195599999999997], [0.380865, 0.429903, 0.39236899999999997]], "9d40d9be-42d0-4dbb-9fed-0a57143f4e34": [[-0.274141, 0.0, -0.254443], [0.274161, 0.796791, 0.254325]], "e070f03a-adc5-4f55-81b3-aa72c324338d": [[-1.164553, 0.000168, -0.465308], [1.164553, 0.860555, 0.465288]], "575a5bec-20b9-4769-8cd7-d5d243cb19eb": [[-0.20952400000000002, 3.05417e-06, -0.20952400000000002], [0.20952400000000002, 0.629162, 0.20952400000000002]], "eeacf700-56a4-4245-8720-25deaa2ad398": [[-0.20511500000000002, 0.0, -0.194236], [0.20511500000000002, 0.6115189999999999, 0.19422499999999998]], "befbb6c0-ebeb-435c-981d-c1ee9fd60d21": [[-0.504277, 0.0, -0.37965699999999997], [0.504028, 0.7007030000000001, 0.37965699999999997]], "12c91460-8ccf-4196-adae-450d39c00d47": [[-0.801377, -1.4059200000000001e-08, -0.156554], [0.801377, 0.630335, 0.156554]], "7f218a39-77e5-4b59-a050-02f6d22ca224": [[-0.747837, -2.8376e-05, -0.221714], [0.7481659999999999, 1.9024, 0.22162099999999998]], "0220bd66-882a-4f00-9009-f5788caeab72": [[-0.9002410000000001, 0.0, -0.200383], [0.9002410000000001, 0.500936, 0.200354]], "81a16c65-26ec-454b-8822-a13fedd4272a": [[-1.07188, -0.00040843600000000003, -1.16738], [1.07248, 0.91069, 1.16727]], "447e7b39-e2a9-3857-b889-1088270d771a": [[-0.202626, 0.0, -0.22992], [0.202626, 0.848347, 0.22992]], "a9ed597d-812b-4c2c-95c4-2fdd02077446": [[-0.622921, 0.0, -0.200568], [0.622921, 0.694597, 0.200568]], "3be200c7-6943-4f19-8b03-d2bede79449a": [[-0.509672, 2.25858e-08, -0.230399], [0.509672, 2.1194100000000002, 0.23046299999999997]], "ec9eef2c-f4fa-43d2-a545-906d9c81d6f0": [[-0.537038, 1.54354e-07, -0.167597], [0.537038, 2.55, 0.167597]], "98542840-6e7a-4764-b3e1-2580defff484": [[-0.410796, -0.00042199800000000003, -0.410954], [0.410755, 0.978934, 0.410976]], "26ca6f3a-1fa4-483b-83ce-5a3f4699dbd4": [[-0.33662, 0.0, -0.33744], [0.33662, 0.857292, 0.33744]], "af600d41-7558-4ee4-bbe5-b86258e7e751": [[-0.49534100000000003, -4.09933e-05, -0.136352], [0.49534100000000003, 0.622921, 0.136354]], "60b09d35-461c-4cdc-a640-3ce738a5f81d": [[-1.279093, 0.0, -0.524832], [1.279093, 0.8771439999999999, 0.524832]], "6073ec34-5258-4d93-a970-f1c04f24062e": [[-1.35642, -0.00110261, -0.626035], [1.3574899999999999, 0.921849, 0.625762]], "08696a08-1d74-4332-90ef-9cfe312ad281": [[-0.959121, 0.0, -1.060313], [0.959092, 1.147318, 1.059713]], "0818b0dd-d191-4a84-8f5a-ed628721b3e0": [[-1.16017, -1.65279e-17, -0.33008000000000004], [1.16017, 2.51756, 0.330095]], "686bf2a6-e92e-4af1-8288-4bae5a983459": [[-0.940497, 0.0, -0.47446800000000006], [0.940497, 0.8610120000000001, 0.47446800000000006]], "b0537ad1-162e-4887-b638-c0c2302035ae": [[-1.25003, -7.32093e-05, -0.49996], [1.25003, 0.736745, 0.49996]], "5c128570-f5fb-4bbb-903f-2a85db20e20c": [[-0.338523, -5.04845e-05, -0.175139], [0.33843, 0.598682, 0.175037]], "5de9bd4d-bd10-4793-afb3-385a18234d5e": [[-0.21241900000000002, 0.0, -0.208145], [0.21241900000000002, 0.5069089999999999, 0.20820699999999998]], "92f880af-e66e-425d-94a2-566b369ad6be": [[-0.21419899999999997, 7.62929e-09, -0.22389099999999998], [0.214201, 0.156945, 0.22389099999999998]], "108bbb43-5203-44b9-b61d-18c8d9f965f1": [[-2.7476089999999997, 0.0, -0.662952], [2.747592, 0.781446, 0.663251]], "7a20dc56-2f09-42fa-81f4-7356519d8ced": [[-0.59636, 0.0, -0.396824], [0.59636, 0.41045699999999996, 0.396824]], "486e87d6-3e65-4d79-8863-cb12ead2dc88": [[-0.219556, -5.31971e-05, -0.153269], [0.219656, 0.8118089999999999, 0.15341100000000002]], "e40f2a24-f9cf-48c0-89bc-b71b795c3d5c": [[-0.22656099999999998, 0.0, -0.26382], [0.22656099999999998, 0.593395, 0.26382]], "77708b87-0f98-4481-b09f-f9f49c57cb40": [[-0.95, -2.39248e-17, -0.45], [0.95, 0.753941, 0.45]], "6e7d323a-de8d-424c-bcd9-384c7540b55b": [[-0.82175, 0.000248, -0.3125], [0.8220000000000001, 2.003751, 0.31232299999999996]], "a975e5f0-d61d-4fed-ae91-84688aef8437": [[-0.513547, -0.00237987, -0.45244700000000004], [0.513567, 0.7880079999999999, 0.452453]], "2e7269e4-2de4-4e73-b827-3751eef24314": [[-0.344338, 0.0, -0.384507], [0.344338, 0.299501, 0.384507]], "1c6de7ae-48d8-4930-b3ef-e32fb4dfe51f": [[-1.00041, -7.95581e-18, -0.2], [1.00041, 0.48031, 0.2]], "2cc391e3-020d-48fb-8b8a-d37aa294af3e": [[-1.1993470000000002, 0.0, -0.49844700000000003], [1.199212, 0.857777, 0.498585]], "613a3bba-016d-4e1d-aa06-8dac504edfa4": [[-0.237396, 0.0, -0.32826], [0.237408, 0.981078, 0.325907]], "ed2fb23c-d84d-4bde-bfef-b852d6c84223": [[-0.467772, 0.0, -0.455924], [0.46767400000000003, 1.256391, 0.456222]], "1bee9d53-59c1-313c-95b1-0098998d74ec": [[-0.235139, 0.0, -0.248975], [0.235139, 0.7444289999999999, 0.248975]], "6cb4a725-391f-4b19-b54f-ff4f54bd8b39": [[-1.1297199999999998, -0.00022788, -0.407589], [1.1297199999999998, 0.703767, 0.40841500000000003]], "f4b66843-e104-4a61-b0c0-177749bcb3c8": [[-0.393028, 0.0, -0.429071], [0.39301600000000003, 0.9940829999999999, 0.42898200000000003]], "2cbbf03e-c688-465c-91fc-4352600fe485": [[-0.35613999999999996, -9.85012e-05, -0.46909599999999996], [0.35651499999999997, 0.8134229999999999, 0.473692]], "cfd1cc3f-b464-44fd-8662-8fbe1a5885b1": [[-0.22307200000000002, -2.72282e-09, -0.22307200000000002], [0.22307200000000002, 0.498154, 0.22307200000000002]], "10f69c0e-69c6-3ada-9d87-f8459a3a8071": [[-0.24951299999999998, -0.000612, -0.258827], [0.24951299999999998, 0.838532, 0.259816]], "90b90ded-283f-4175-9db5-3e35ca5927da": [[-0.264728, -3.2749799999999996e-05, -0.264864], [0.26474, 0.606712, 0.264863]], "590a7525-1214-49a8-b9b0-585a86c7197e": [[-0.400525, -0.00100781, -0.37416699999999997], [0.40037300000000003, 0.753149, 0.374149]], "501a1164-cde8-4261-9ba8-cd5ebf59d6c4": [[-1.60316, -0.000840365, -0.56076], [1.60184, 1.09612, 0.560821]], "fd0e3b8d-965e-4ae3-8a40-d0979ec9ff3c": [[-0.21287299999999998, 0.0, -0.23876799999999998], [0.21287299999999998, 0.868502, 0.23878900000000003]], "fc28b230-ca8c-4b9c-8190-79c0db522b3c": [[-0.839854, 4e-06, -0.557929], [0.839854, 0.8798009999999999, 0.557929]], "d150b794-c363-4de1-841b-581a0e7de3a9": [[-0.37548000000000004, 8.8723e-06, -0.199229], [0.375864, 1.1937900000000001, 0.199229]], "3e36f8bc-83aa-497b-8179-92c76f2d7d56": [[-0.34064300000000003, 0.0, -0.373118], [0.34043799999999996, 1.078735, 0.373118]], "e9f2df5e-1c3c-4b71-9ff4-edb6c3dfc9df": [[-0.701666, -1.253e-09, -0.177042], [0.701667, 1.038, 0.17765899999999998]], "db597b90-0780-4340-8708-71db3f4b55f9": [[-0.6431650000000001, -7.1991e-05, -0.31329799999999997], [0.643056, 0.930839, 0.31329799999999997]], "235b23eb-1a3b-4545-bb44-a549b45e13cf": [[-0.363688, -2.14577e-09, -0.363688], [0.363688, 0.232624, 0.363688]], "4f5f2706-c5fb-4591-8926-8cf7c5ab5ec6": [[-1.7760900000000002, -4.43262e-08, -0.526048], [1.77612, 0.924874, 0.527026]], "65ca0194-3c30-4c3a-a687-cea75e3a8b53": [[-1.00966, -3.43323e-08, -0.288947], [1.00966, 2.25412, 0.289027]], "20b95756-2099-4c80-b152-3e458f00de91": [[-0.34902700000000003, -7.8125e-06, -0.130666], [0.34902700000000003, 1.93048, 0.130666]], "641767c4-11cc-4a5c-ad87-e392ce092ee5": [[-1.080671, 0.0, -0.302058], [1.080671, 2.4431950000000002, 0.302058]], "0bffa06b-2080-42bc-95e7-7c444425d989": [[-0.39244500000000004, 0.0, -0.377138], [0.39244500000000004, 0.817526, 0.377138]], "2a0669c4-76bf-419d-9b90-b808cb245224": [[-1.3737000000000001, 1.45459e-17, -0.579499], [1.3737899999999998, 0.832976, 0.580508]], "6121172c-95e6-4f95-b5e2-709369a26f8a": [[-0.23865100000000003, -9.36344e-18, -0.239466], [0.23865100000000003, 0.60239, 0.239466]], "73f40afe-b449-43b6-9428-9af7fdc6b466": [[-0.791421, 0.0, -1.254158], [0.791421, 0.778922, 1.254158]], "9600708e-c589-4924-9dc8-c2fe3286497b": [[-0.167849, -0.00038884799999999996, -0.142956], [0.168312, 0.418305, 0.14332599999999998]], "7642c1ce-55aa-4cda-9238-31b1cafc7989": [[-0.17698599999999998, 0.000135036, -0.150315], [0.176984, 0.840839, 0.150405]], "717cb342-9948-41e2-bd4a-7e7ac2097478": [[-0.850011, -2.67029e-08, -0.303103], [0.850009, 2.0, 0.304103]], "731f0c77-d586-48bc-bd80-562fd7bf2840": [[-1.14571, -2.2205700000000002e-14, -0.5560390000000001], [1.14571, 1.8787200000000002, 0.536625]], "e45372f2-a22d-4769-8f0e-afa8e4117970": [[-0.36851, 0.0, -0.365099], [0.36822099999999997, 0.6958960000000001, 0.36516]], "4cd22dc7-62c2-42a5-89b7-6b3d3303fd40": [[-1.3, 1.86759e-17, -0.305001], [1.3, 2.5, 0.305001]], "dffd2ab5-466d-427d-b3ed-46d172dfa58c": [[-0.0840179, -3.8000399999999995e-18, -0.0827447], [0.0839485, 0.531321, 0.08281269999999999]], "38f18f26-24d7-4108-b820-6eec943ac593": [[-0.22812100000000002, 0.0, -0.22812100000000002], [0.22812100000000002, 0.488193, 0.22812100000000002]], "7df23cf5-1e4d-4c6c-b680-84c80e92830d": [[-1.038542, 7.8e-05, -0.44665999999999995], [1.039361, 0.751973, 0.445862]], "77e9a9ac-0a7d-4e97-883b-f9348c7e6905": [[-0.305263, -0.000181314, -0.305302], [0.30566299999999996, 0.497777, 0.30470400000000003]], "efb5dd5f-118e-42a2-9ce1-210140baa01c": [[-0.28282599999999997, 1.65194e-17, -0.28282599999999997], [0.28282599999999997, 0.057720200000000006, 0.28282599999999997]], "5d0106a3-9759-4d7e-8682-9ac96b210779": [[-0.790561, -2.7557900000000003e-05, -0.888317], [0.790561, 1.24354, 0.8877700000000001]], "06d73a72-69bf-483d-919f-8e7084968b8c": [[-1.01758, -3.05176e-08, -0.277016], [1.01758, 1.25148, 0.277016]], "07d68c62-a30f-4dd5-92aa-28cc0b58bafc": [[-0.469955, 0.0, -0.712273], [0.469955, 0.480939, 0.712273]], "f92e4a5d-691a-4555-a4e7-e09aa1dfd80e": [[-0.277294, 0.000489, -0.257268], [0.277196, 0.90654, 0.25766100000000003]], "cb2fad04-e0d2-4b01-a8c9-21c96ce9a715": [[-0.587244, 1.52588e-08, -0.414262], [0.587244, 0.43679900000000005, 0.414262]], "f80d2849-b104-42e5-b86e-d930ef6d3645": [[-0.873035, 0.0, -0.96792], [0.873035, 2.282033, 0.96792]], "03324866-9cfd-4b45-8142-f009f2c0b4c2": [[-0.871932, 0.0, -0.314122], [0.871932, 0.741022, 0.314122]], "4f029666-3e76-4840-adf6-0d7a9f7365ba": [[-0.433685, 1.88765e-07, -0.611669], [0.433685, 0.46313000000000004, 0.611669]], "72dccd01-4f58-410d-8c6f-987f39356749": [[-0.438607, 0.0, -0.392829], [0.438577, 0.9771850000000001, 0.392641]], "3b9c922c-2257-3a04-a382-ae23b4fdec13": [[-144.1993, 0.0, -90.5683], [144.1993, 75.4319, 91.7289]], "a7409a8f-6e55-4e04-9c67-6e4d39fe0989": [[-0.25, -1.35691e-17, -0.25], [0.25, 0.706248, 0.25]], "261f1f02-ecba-4e92-81da-94d4356576e6": [[-0.527328, -6.3978100000000005e-18, -0.21901900000000002], [0.526054, 1.00352, 0.21901900000000002]], "0931ee7c-70eb-4cb9-9e4f-7f7ae9bf44bf": [[-1.3457599999999998, 2.0891599999999998e-17, -0.402949], [1.34595, 0.7708360000000001, 0.404052]], "45e0eedd-a79e-4a8a-bd92-0f7b1f4931de": [[-0.330446, 6.8e-05, -0.322986], [0.330371, 0.70636, 0.32305500000000004]], "1aa41018-8732-49dc-8a5c-949f038dd283": [[-0.907328, -8.185650000000001e-18, -0.155485], [0.907328, 0.39494599999999996, 0.155485]], "38e201f3-bdea-4f19-9c1a-80af7fabe38c": [[-0.52496, 0.000415, -0.462836], [0.52496, 1.124873, 0.462836]], "03312b51-719b-4f64-b130-798301de5212": [[-0.40743, 0.0, -0.322756], [0.407431, 0.887, 0.322756]], "50b91183-abd9-4f3e-aa37-dcb0662ff15f": [[-0.127317, -1.34965e-05, -0.119932], [0.127272, 0.847612, 0.11988599999999999]], "18b04ca5-a96c-4458-ad5c-22cbafb81396": [[-0.825433, 0.000372, -0.345387], [0.825595, 0.827219, 0.345993]], "4385e5a4-61ce-4976-b9b6-3733ca3eaf0a": [[-0.57522, 2.8982000000000004e-07, -0.31264], [0.57586, 2.34386, 0.312539]], "60f8fd7a-c53f-4fe2-9330-f68095916a6c": [[-0.26530000000000004, 4.66172e-06, -0.31423100000000004], [0.265364, 0.816197, 0.314232]], "f2a8446a-00fd-4543-8c74-db2b565adff4": [[-0.21, 1.90735e-09, -0.21], [0.21, 0.430731, 0.21]], "9e8c0111-b23b-4e8e-98a6-9f2f53ed3a8e": [[-0.808394, -4.1728e-06, -1.0416800000000002], [0.808394, 1.02029, 1.04229]], "c52cef24-638b-4c51-be3d-2ce35f42083e": [[-0.274117, 0.0, -0.274117], [0.274117, 0.529081, 0.274117]], "47a20db0-13e0-4e6a-86b6-6db0d6ec2df1": [[-1.2810499999999998, 2.47187e-07, -0.508493], [1.2810499999999998, 0.947426, 0.508815]], "f8b74702-bfc1-4b83-a135-7ce30d23f527": [[-0.658505, -0.0012293999999999999, -0.683339], [0.658505, 0.873694, 0.6832779999999999]], "e45c34fe-8856-4cf0-9452-c3517cfc9ac2": [[-0.33781700000000003, 5.24232e-08, -0.279513], [0.3378, 0.8540770000000001, 0.279534]], "d6467f06-ee74-4d5b-bc29-82dd531e2549": [[-0.9250020000000001, 9.14414e-08, -1.0472], [0.925, 0.979777, 1.0472]], "4d5d9f0b-af2b-4436-8580-9ccd76c93536": [[-1.081225, 0.0, -0.425754], [1.081225, 0.7660339999999999, 0.425754]], "6e1efa9c-2f15-4553-abb9-c948253f2929": [[-1.08154, -5.12711e-05, -0.751899], [1.07785, 2.14571, 0.751373]], "17316e7a-6008-49c1-88ee-bfc409885a1a": [[-0.29107299999999997, -0.0, -0.291072], [0.29107299999999997, 0.570441, 0.291072]], "61217f61-0333-4004-917f-3649920534e5": [[-1.22534, -7.59232e-05, -0.41241900000000004], [1.22474, 0.98225, 0.412106]], "13ef77d6-e50f-4b71-912f-4f56b5c469ce": [[-1.21916, -1.94984e-17, -0.721073], [1.2196500000000001, 2.12046, 0.7219580000000001]], "0bdfc3b8-825e-4edf-8373-1d95f53d377d": [[-0.544693, 1.6305e-06, -0.328479], [0.544536, 0.385685, 0.32823399999999997]], "5285bc52-c5cb-48d4-a0c2-bde9b827686d": [[-0.64045, 0.0, -0.408218], [0.640707, 0.372014, 0.40801299999999996]], "20b3cb94-6487-41af-9226-7946cd14ed1b": [[-0.449844, -1.22286e-17, -0.449844], [0.449844, 0.653159, 0.449844]], "c6a80f2c-1ed5-4593-89dc-84aadee33698": [[-0.150562, -5.1301e-18, -0.08419739999999999], [0.150562, 1.09818, 0.08419739999999999]], "71ffa3a7-4235-4b4a-a615-2656fca6f860": [[-0.7761239999999999, 3.9689699999999994e-05, -0.417717], [0.775513, 0.835886, 0.41652]], "aec4451a-1143-44e8-857e-9b2c3c7b9cf7": [[-0.264187, 0.0, -0.259934], [0.264187, 0.759652, 0.259934]], "16cb7de7-b323-43d7-abc4-b10af95649df": [[-0.823359, -0.00109955, -0.786483], [0.824318, 0.746237, 0.7850199999999999]], "c005077b-afd8-3a6d-a4d1-f2781a7ded93": [[-0.873622, 0.0, -0.40949199999999997], [0.873622, 0.762013, 0.40949199999999997]], "4ea4d80f-ae9d-3255-a38a-83af235863ba": [[-1.577191, -4e-06, -0.435557], [1.577191, 0.760334, 0.435556]], "5c9615aa-a953-4ec1-91f7-ce96c54381d0": [[-0.965202, -7.49321e-16, -0.248865], [0.965202, 0.737667, 0.248865]], "850e13d2-8cd3-49bf-8a65-d183f83e0eba": [[-0.143899, -6.2773000000000005e-18, -0.106722], [0.144042, 0.417903, 0.106722]], "910a68c1-43cd-48b6-a1c1-f20680bd0a0f": [[-0.581325, -8.93581e-05, -0.47499699999999995], [0.581325, 0.855021, 0.47499699999999995]], "5e778529-d087-45ef-80a8-7bfb7903c375": [[-1.0236, -0.000201046, -0.362301], [1.02302, 0.7519849999999999, 0.361521]], "490fe1d7-daac-4230-be02-cdaaffb8af32": [[-0.12265000000000001, 0.0, -0.12265000000000001], [0.12265000000000001, 0.7541169999999999, 0.12265000000000001]], "04b9e18d-20d2-4fb5-a055-de3459719dce": [[-0.288881, -1.06597e-17, -0.210238], [0.288881, 0.452319, 0.210238]], "ff9bde70-32ee-441f-b1d3-217a7c43e081": [[-1.01363, -9.955379999999999e-18, -0.200951], [1.01363, 0.937623, 0.200951]], "26514721-8967-4ae2-ab37-b70bfede2873": [[-1.10036, -2.70921e-17, -0.500043], [1.10036, 0.750104, 0.500043]], "b11df2a7-0f4e-481e-8a6a-3b67cf21c9af": [[-0.7000700000000001, -1.84198e-05, -0.21101], [0.7000700000000001, 0.83203, 0.211026]], "7c433797-2547-4150-8e34-850a7f581f3a": [[-1.01094, 1.1448500000000001e-07, -1.0506199999999999], [1.01094, 1.31186, 1.0506199999999999]], "9473eba4-4e42-4bb3-8836-45a88bdf662a": [[-0.479795, 0.00021536199999999998, -0.443501], [0.480023, 0.914922, 0.443979]], "709bb15d-00a9-4da6-9f92-e18e9391a525": [[-0.281557, 7.476610000000001e-09, -0.249587], [0.281557, 0.41960299999999995, 0.249587]], "72c0dd85-07f6-4e72-b215-ba47cea35c1d": [[-0.6388929999999999, -1.34757e-07, -0.39710900000000005], [0.638738, 0.76, 0.396864]], "6942e2c2-de23-4ffc-95cc-6c41b64df530": [[-0.29078499999999996, 0.0, -0.261604], [0.29078499999999996, 0.8791110000000001, 0.261604]], "2240cb09-50e3-424c-b154-8a9f4b06dac1": [[-0.917136, -7.24428e-05, -1.3258400000000001], [0.9170149999999999, 0.972644, 1.3258400000000001]], "67b419b2-41df-4b94-a8b6-440455819427": [[-1.63584, -0.000453235, -0.435258], [1.63679, 0.952503, 0.43622700000000003]], "8c14a633-3a0d-4fba-abae-0687b9e5a840": [[-1.1003660000000002, 0.0017419999999999998, -0.400305], [1.099953, 0.898147, 0.400274]], "2b15dc28-9a81-4daf-b3e2-96c01c83eaca": [[-0.5728300000000001, 3.05176e-08, -0.38205100000000003], [0.5727530000000001, 0.693874, 0.38205100000000003]], "5e74276b-933b-41fa-8378-bd9a462ccec1": [[-1.265, 6.10352e-08, -0.298313], [1.265, 2.4, 0.301688]], "7d54ef72-bdbc-4131-a8ac-d39ade5e3407": [[-1.14684, -0.00235179, -0.9883710000000001], [1.14609, 2.07665, 0.9883710000000001]], "7bb2ad87-4811-3766-a763-dd8fcc1ce11e": [[-1.442347, -0.000755, -0.504623], [1.43985, 0.8543609999999999, 0.5385880000000001]], "d67f36a9-eb5a-4980-a8d7-a94f470de352": [[-0.9986780000000001, 1.58871e-17, -0.9986780000000001], [0.9986780000000001, 0.7743040000000001, 0.9986780000000001]], "90cc27a7-81c5-4616-bf5f-08016a33c19e": [[-0.270457, -1.65607e-17, -0.270457], [0.270457, 0.14, 0.270457]], "8e227e9d-221d-4375-abea-6fd25e2eb19d": [[-0.347237, -8.467250000000001e-05, -0.347037], [0.34723, 0.6611090000000001, 0.34720799999999996]], "76e638c9-37bc-4297-9564-2aac6f2ad4fc": [[-0.348048, 7.41282e-07, -0.330877], [0.347987, 0.7008289999999999, 0.331025]], "6ffcea7d-4355-3af5-9373-8b21e82e0ff8": [[-0.235139, 0.0, -0.248975], [0.235139, 0.7444289999999999, 0.248975]], "08ca9934-55a8-4d6e-ba0e-6d2c4fe64c67": [[-0.986195, 6.13142e-17, -1.11572], [0.9861960000000001, 1.3178100000000001, 1.1162]], "62219907-ae06-457c-8ce0-d6625723ace8": [[-0.401626, 0.0, -0.42892899999999995], [0.401626, 0.9583069999999999, 0.42892899999999995]], "8e2abcdb-8381-45e5-b18a-cdb087459b33": [[-1.63994, -1.98698e-08, -1.155], [1.64013, 0.7996500000000001, 1.15531]], "9ac80526-f6b4-4e65-9a54-674ddbc6c6f5": [[-0.335206, -0.000271122, -0.36262900000000003], [0.335607, 0.266349, 0.362834]], "81959338-1781-3b3c-93f6-ff1e43a13e06": [[-0.27760999999999997, 0.0, -0.305824], [0.27760999999999997, 0.820976, 0.266343]], "c04c4c9a-30f0-46ef-b541-7f16f1c1b5c9": [[-1.4580899999999999, 1.61375e-07, -0.46442100000000003], [1.45736, 0.826503, 0.465117]], "eb9d6f25-ba4a-4033-aba1-3ae300cb9825": [[-1.21112, -7.62939e-09, -1.13711], [1.20988, 1.00593, 1.13705]], "e48e3031-fa60-4c3e-9e65-d0d5631cae06": [[-0.23722000000000001, 0.0, -0.278021], [0.23722000000000001, 0.756661, 0.278021]], "17988333-b8c0-4a0a-8576-506ad93270db": [[-1.21265, -1.8100399999999999e-06, -0.472517], [1.21265, 0.921239, 0.472534]], "e4b57600-7139-4529-b4dc-6bbb463309d3": [[-0.178722, -4.40308e-07, -0.17717300000000002], [0.178722, 0.438465, 0.17717300000000002]], "812084ed-dd1c-3c64-8cf2-b6897bf003c9": [[-0.282661, 0.003412, -0.44749], [0.454321, 0.851333, 0.456823]], "54bdc70d-0304-3e7d-a159-ff86cfa54871": [[-134.0993, -0.0, -70.7218], [134.0993, 75.7805, 68.17]], "59e702ed-ba7f-3193-9131-064e86b0c831": [[-0.22070900000000002, -0.001711, -0.29382], [0.21945399999999998, 0.9898650000000001, 0.291114]], "29beef4c-4986-4b51-9bfe-1c5ec4f81a15": [[-1.3800999999999999, 2.0719800000000003e-17, -0.34034], [1.3800899999999998, 2.51816, 0.34034]], "7145f234-af1b-4100-873a-1301b8faf77d": [[-1.6403999999999999, 4.2815200000000003e-07, -1.15536], [1.63977, 0.799207, 1.15468]], "25c924ef-cd89-4e88-88da-2f379e67c717": [[-1.0097, -6.28879e-17, -1.17262], [1.00816, 1.10106, 1.17334]], "9d841ea8-c3d2-494d-a7d9-ebbc5076869c": [[-0.596039, 0.0, -0.5960110000000001], [0.596166, 0.750343, 0.5961650000000001]], "1e5bb567-b530-3b98-be29-d7b563c41930": [[-0.40537, 0.02108, -0.665296], [0.40342500000000003, 0.82926, 0.665296]], "55a8c415-70bb-4874-aa05-de73f4e976db": [[-1.00001, -1.21236e-17, -0.225001], [1.00001, 0.793199, 0.225056]], "5364b5cb-fa9d-4d2a-a65e-699d5c5342c7": [[-0.717137, 0.0, -1.0116], [0.717821, 1.14445, 1.01297]], "71eca80e-ba2f-40bc-baf0-f3a1de58a375": [[-0.19682200000000002, 6.10352e-08, -0.18492799999999998], [0.19682200000000002, 0.765076, 0.18493400000000002]], "a8bff7a3-6e3e-4928-b943-a265b2bb9773": [[-0.26545799999999997, 5e-06, -0.259903], [0.265755, 0.37495199999999995, 0.25994700000000004]], "11743de3-3c46-4d31-801a-2573bff963dd": [[-0.24854199999999999, 0.0, -0.284144], [0.24854199999999999, 0.887727, 0.284144]], "61678739-e87f-4d14-83b5-917baa5f1a06": [[-0.259144, 0.0, -0.279956], [0.259144, 0.497389, 0.279956]], "47ef9a66-b01c-4763-b415-09292d54512e": [[-0.6, -5.44968e-18, -0.16], [0.6, 0.7, 0.16]], "5dd46e7e-7425-475b-88c6-736b17fda9c6": [[-0.19605799999999998, 0.0, -0.226533], [0.19605799999999998, 0.528095, 0.226533]], "525e3db0-5f7a-349b-b18e-f54d36a82d22": [[-0.559172, 0.0, -0.23538699999999999], [0.559172, 1.10109, 0.235382]], "2b9e8a81-a96c-4dd5-8fe5-9d9949b09362": [[-0.36656500000000003, -1.03218e-05, -0.36656700000000003], [0.366572, 0.45236600000000005, 0.366562]], "56c41341-bb30-4ad5-bf99-c156222d8ec1": [[-0.19606, 8.11231e-18, -0.14599600000000001], [0.19606, 0.42613100000000004, 0.146008]], "d580e239-6a9f-4cd3-9bf8-22e21e14cc79": [[-0.625, -2.04755e-11, -0.625], [0.625, 0.73, 0.625]], "5d70443b-93c6-413e-9e8f-c6288646992e": [[-0.5772390000000001, 0.0, -0.5772390000000001], [0.5772390000000001, 0.760431, 0.5772390000000001]], "702f3525-ef0c-4726-aa02-399c2fcf284e": [[-0.8776139999999999, -7.62939e-09, -0.47954], [0.878065, 0.7453230000000001, 0.47959]], "1ab13bf2-6378-3ea3-872d-1a3d724f8954": [[-84.6495, 0.0, -42.8265], [84.6495, 84.4519, 42.8265]], "6063cc59-ff2c-4c3a-a58b-f6aad91157f9": [[-0.330679, -3.32197e-08, -0.25175000000000003], [0.330679, 0.6, 0.251754]], "8e58fb02-90a0-42af-8f99-2ec9556061e4": [[-0.253175, -2.5951199999999996e-09, -0.261929], [0.253633, 0.6267240000000001, 0.261849]], "a4b8128b-a453-47d4-a0da-ce48c1397087": [[-0.9406990000000001, -3.4179900000000003e-07, -0.447688], [0.9406669999999999, 0.789302, 0.447115]], "53fbc88a-2ad9-42ce-a78f-568cca0f8ce8": [[-0.217066, 1.2481700000000001e-05, -0.27233], [0.217164, 0.949827, 0.272158]], "ef292341-44b2-4ff5-989f-1cf78ffaf7f0": [[-0.196723, 0.0, -0.191053], [0.19670300000000002, 0.604588, 0.191163]], "4318d141-3af0-4e4a-a3a2-4151ec41a6b6": [[-0.887908, 0.00020166799999999998, -0.997782], [0.889327, 1.52835, 0.997795]], "0bd02aa2-56aa-469c-85d1-415434bec8c5": [[-0.860348, 3.8e-05, -0.46978000000000003], [0.860348, 1.1554600000000002, 0.469477]], "e3a5ecd9-81c4-4514-8649-43e90bb0dfdb": [[-0.303222, 0.000147, -0.30792], [0.303193, 0.70343, 0.30792]], "47313e81-314d-4f8f-b530-566efc54d4d8": [[-0.999837, -8.55307e-18, -0.230797], [0.999837, 0.493866, 0.230797]], "e31f203d-3def-4de4-a13e-752c70be9033": [[-0.316668, 0.0, -0.34436300000000003], [0.31662199999999996, 1.0247709999999999, 0.344385]], "8ee760c1-7955-4a84-9002-cbfe92e64207": [[-0.817724, 0.0, -0.39545], [0.817286, 0.793544, 0.39545]], "44012364-4d47-44c1-a8cb-9e848fe6def7": [[-0.464916, 0.0, -0.455371], [0.464916, 1.262308, 0.455372]], "fc061946-7655-4d0a-8d46-bc779a3d49e3": [[-0.37270600000000004, 0.0, -0.372746], [0.37270600000000004, 0.406073, 0.372736]], "6686ae4b-16e1-40b4-921d-c1238dfc3afd": [[-0.311879, 0.0, -0.32699399999999995], [0.311879, 0.829977, 0.32699399999999995]], "410561db-f2a3-4092-992e-9b1e8154d01b": [[-0.9228489999999999, -7.67884e-05, -1.05288], [0.922647, 1.04837, 1.05268]], "69ee653a-b440-4a5c-beaf-b9268b6705ee": [[-0.8142090000000001, 0.0, -0.7589790000000001], [0.8142090000000001, 0.523132, 0.7589790000000001]], "4fefb13e-3e17-40bc-93a0-1d61b4645844": [[-1.02072, -6.10355e-08, -0.313772], [1.02072, 2.4, 0.313811]], "1d2b4af2-df25-3d90-8672-2084950c5caf": [[-53.4636, 0.0, -53.1107], [53.1306, 73.66, 53.4837]], "7cf17653-504c-49fc-9b80-934a2c6b3fe4": [[-1.681583, 0.0, -0.6462730000000001], [1.681535, 0.989123, 0.646339]], "48837580-2014-4595-ae78-e655724d88d9": [[-0.39178199999999996, 1.38283e-08, -0.112312], [0.39178199999999996, 0.916732, 0.11241300000000001]], "047b54f0-4ee4-406f-a25c-b3f12cfa88a1": [[-1.4668100000000002, -1.45614e-07, -0.441024], [1.46715, 0.856503, 0.442128]], "53d98c26-9e60-41d5-b53d-8aa31d56d6c8": [[-1.4809299999999999, -3.39068e-05, -0.954542], [1.48136, 0.8616710000000001, 0.95557]], "aca90e4a-d361-431a-af5f-8a3ef3fcf31c": [[-0.423346, 0.0, -0.387281], [0.424001, 1.048825, 0.38711199999999996]], "b0b113d7-5b31-4bf1-a85e-72b6e096fe6f": [[-0.36841500000000005, 0.0, -0.36841500000000005], [0.36841500000000005, 0.327999, 0.36841500000000005]], "fb427e8b-ed62-4957-a8cf-3d1b0095fbaf": [[-0.523013, -1.4190700000000001e-06, -0.52301], [0.523546, 0.453662, 0.523013]], "6e82e3ea-4751-4750-9778-8dee579b8663": [[-0.565526, 0.0, -0.565526], [0.565526, 0.41470199999999996, 0.565526]], "b1cbab5c-316a-4fab-91ea-f75519686f75": [[-0.250319, 0.0, -0.22486599999999998], [0.250319, 0.539041, 0.22486599999999998]], "d1f3b2a4-cfef-4bd0-8132-82527b15aef5": [[-0.982989, -0.000664024, -1.06488], [0.9826600000000001, 1.15151, 1.06464]], "0415b54c-9fbc-4261-b9e9-018e3910d63e": [[-0.9997780000000001, -0.0, -0.300109], [0.998, 2.5980000000000003, 0.30011]], "2b55c539-e64d-488c-852f-24bbd831b909": [[-1.10897, 1.7816399999999998e-05, -0.47013800000000006], [1.10705, 0.809616, 0.470757]], "682d07c6-8d7e-40ad-b707-941acdbfad03": [[-0.75, 0.0, -0.04], [0.75, 0.794475, 0.04]], "08aa4869-7670-47e7-9aca-cc78b3de028d": [[-0.22226600000000002, 0.0, -0.22428599999999999], [0.22226600000000002, 0.396626, 0.22428599999999999]], "536437f4-e3ed-4b31-b839-f502a8778150": [[-1.39655, -1.35381e-05, -0.503131], [1.39678, 0.942603, 0.5038239999999999]], "0810e504-f222-43ec-bc37-dc7808bc47d8": [[-1.41302, -1.37773e-17, -0.225001], [1.41302, 0.393335, 0.225001]], "f10369ae-7b27-46b9-aeeb-3ef930a70aaa": [[-0.2, 0.0, -0.2], [0.2, 0.993749, 0.2]], "001663c3-d459-4fbc-8563-89592fd21d18": [[-1.4182499999999998, -4.76837e-09, -0.512305], [1.41844, 0.6305879999999999, 0.510759]], "807a5aab-58e3-43f8-a6af-d335e8f3323f": [[-0.740477, -4.80037e-05, -1.035], [0.73983, 1.465, 1.0354]], "24932564-a73e-4c26-bbaf-b4c15894bbaf": [[-0.701062, 0.0, -0.678958], [0.701062, 0.7660250000000001, 0.678958]], "ccd3c0bf-dcbb-445e-9d60-bda6461fe1ea": [[-0.18768, 0.0, -0.18768], [0.18768, 0.585042, 0.18768]], "13ea1157-9143-3b97-b0be-4a1e88780c2a": [[-47.5, 0.0, -47.5], [47.5, 79.5576, 47.5]], "fcb7b0b7-e74f-4397-907c-37cd2fe9efbc": [[-0.30356, 0.0, -0.183006], [0.303458, 0.30137, 0.183006]], "42ad6632-98b0-46d8-9969-ed8d67bfb2ed": [[-0.893442, -1.0209499999999999e-07, -1.0312000000000001], [0.895218, 1.28567, 1.03173]], "4d0767ac-5b1c-4cd4-b305-589fedddea98": [[-0.495979, 0.0, -0.16793], [0.495979, 0.8626590000000001, 0.16793]], "602042be-a5ea-47e8-93bc-9a8a9270aa45": [[-1.4968000000000001, -3.84475e-12, -0.500581], [1.49693, 0.7513179999999999, 0.500579]], "64014cc4-287b-477b-94e5-30aefb92c8a6": [[-0.199211, 0.0, -0.199605], [0.199211, 0.44968800000000003, 0.199605]], "57d68a37-ce3c-43f7-b79d-0d13178cd6d2": [[-1.0339, -7.45906e-18, -0.227607], [1.0339, 2.46, 0.22800399999999998]], "6898badc-cf55-3bbf-a498-cbfd128c698c": [[-0.796823, 0.020594, -0.26138300000000003], [0.793323, 0.761714, 0.27048500000000003]], "773583e4-d6ef-4d1b-aa33-f6f20158e86e": [[-1.0253700000000001, 0.0, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "7dd73f78-75aa-48d3-8dce-4e8c9459cea0": [[-0.23396899999999998, -1.3589700000000001e-17, -0.230689], [0.23390799999999998, 0.978189, 0.23089400000000002]], "8c9c75e8-d0d1-4da2-aa99-bdba646ae63e": [[-0.21992599999999998, 0.0, -0.22748000000000002], [0.21992599999999998, 0.460463, 0.22748000000000002]], "21e5934b-dcca-401e-96d6-62523f2fa308": [[-0.8675, -1.83697e-17, -0.3], [0.8675, 2.5, 0.3]], "26d454a6-308d-3c4f-a871-df9e29e70d63": [[-0.236615, 2.9999999999999997e-06, -0.18921700000000002], [0.236615, 0.788986, 0.32122300000000004]], "8416a2eb-56dd-321b-98f1-d75b316d481c": [[-0.28201899999999996, 0.0, -0.28201899999999996], [0.28201899999999996, 0.458039, 0.28201899999999996]], "0e2091bc-7a97-46b6-98f0-d960a6903042": [[-0.28537199999999996, -3.8147e-09, -0.28537199999999996], [0.28537199999999996, 0.142628, 0.28537199999999996]], "00661c5b-bb1e-49ca-a5c2-480dbe12a344": [[-0.210039, -1.6307e-14, -0.21], [0.210039, 0.6777249999999999, 0.21]], "a6ccdbb9-f0ac-4931-8a56-9e186cb3ba8c": [[-0.303955, -7.844810000000001e-05, -0.30403199999999997], [0.304043, 0.12626099999999998, 0.303977]], "b155cfe8-9fec-4f1f-b0e6-4d29609e1133": [[-0.49701500000000004, 5.14574e-08, -0.496905], [0.496905, 0.38885800000000004, 0.496905]], "5c142ce1-10aa-49c5-8142-e364dbfb0548": [[-0.963925, 0.0, -0.36228499999999997], [0.9647249999999999, 0.8278749999999999, 0.36459400000000003]], "4b4bf7fe-8f9b-42de-b072-e54ead8a57c3": [[-0.287031, 0.0, -0.153945], [0.287031, 0.691747, 0.153945]], "76a28268-6c3c-42ac-b215-c78cdbb937bc": [[-0.779345, 9.44623e-06, -0.134387], [0.7785139999999999, 0.751917, 0.13433]], "9d810a8f-96b6-4ed0-b252-c52155617011": [[-0.400349, 0.0, -0.37067100000000003], [0.400349, 0.943849, 0.37067100000000003]], "3c00db4f-d06f-4d4e-b58a-cfa7e2b93174": [[-0.88, -1.9410200000000002e-17, -0.348], [0.88, 0.852935, 0.348]], "38549bd8-8b13-4ba9-bd07-ccc282b10e83": [[-1.08097, -6.3814e-17, -1.07416], [1.08097, 1.2, 1.07416]], "ab7b6d2e-f0bc-4920-90d4-9f972a6e6db8": [[-0.825711, 0.0, -0.415846], [0.825711, 0.75, 0.415846]], "3d41a66b-08b3-4be0-a6f0-84cac4df3be5": [[-0.0694181, -2.4392900000000002e-14, -0.060708000000000005], [0.0696214, 0.5477799999999999, 0.060994]], "7220b2ab-ede5-4ec9-8770-fbf7d5ad71a9": [[-1.86706, 0.000273, -0.88481], [1.863087, 1.093111, 0.884077]], "571a41e0-015f-44d1-afcc-7d63d167eb60": [[-0.793262, 1.25725e-17, -0.242041], [0.7933150000000001, 0.475574, 0.242165]], "20f62b0c-17b9-4672-82f5-fa39612fd3b2": [[-0.39492400000000005, 0.0, -0.404953], [0.39492400000000005, 0.8870239999999999, 0.404953]], "1c1382fd-5526-497d-b73c-c75fb431fc5d": [[-0.18162099999999998, -1.39683e-09, -0.18162099999999998], [0.18162099999999998, 0.624696, 0.18162099999999998]], "4e74cca9-f876-4811-abc5-54d745e84780": [[-0.328426, 0.0, -0.33603299999999997], [0.328023, 0.8828489999999999, 0.336157]], "474fa09a-647b-4828-9ab2-6f5894f966df": [[-0.263527, 0.0, -0.352764], [0.263527, 1.083902, 0.352894]], "2fe7a894-a92c-43b5-8911-990db4a1ffaa": [[-0.30653199999999997, -4.84903e-19, -0.306526], [0.306539, 0.585991, 0.306529]], "50d8868c-8fc8-3c8d-9ac7-262542379876": [[-0.517825, 0.005502, -0.160166], [0.513954, 0.986934, 0.149404]], "5177c343-8247-4db1-a0d9-40347ffc5102": [[-1.0678, -7.15256e-09, -1.23212], [1.0678, 1.1, 1.23253]], "9154c59a-3d62-4b0f-a102-5e06e0797849": [[-0.24817, -8.99368e-18, -0.236188], [0.24817, 0.631038, 0.236262]], "f0a61b2d-421d-4f3b-8e75-df01fce139f8": [[-1.4346100000000002, -6.72266e-17, -1.36784], [1.43495, 0.9736750000000001, 1.3679599999999998]], "1c9f4cca-38f6-3237-bb75-5be336f9881a": [[-0.284389, 3.9e-05, -0.36038], [0.284389, 0.685933, 0.36198099999999994]], "0c807cf1-8e2b-45df-8200-a5aa35f030f7": [[-0.6562649999999999, -6.0009e-17, -0.9893770000000001], [0.6562649999999999, 1.0817, 0.9893770000000001]], "1f7a5b95-8c9f-4476-9db2-43a06738605b": [[-0.19609300000000002, -4.29782e-18, -0.19609300000000002], [0.19609300000000002, 0.451295, 0.19609300000000002]], "1b5dc129-a339-42ce-a25c-3c114d09da04": [[-0.874087, -3.05176e-08, -1.10444], [0.874031, 1.24614, 1.10438]], "bdd9a7c7-026b-4100-a44c-21c7c0510dcd": [[-0.277605, 0.0, -0.277605], [0.277605, 0.621629, 0.277605]], "691fd80f-9208-49f2-b4ec-5f56ba4788d6": [[-0.278757, -0.000313331, -0.278572], [0.278716, 0.629234, 0.278572]], "eeecca29-8bd8-4050-b6f4-b96ee8cbdf50": [[-0.480437, 3.39296e-05, -0.48042999999999997], [0.48051499999999997, 0.716936, 0.480621]], "0ccc5552-b190-466d-b448-a673d8ba9fce": [[-1.291789, 0.0, -0.414671], [1.291857, 0.632171, 0.414494]], "cd25f4ca-1752-4d12-9845-e8dbd9e9dd50": [[-0.126321, 0.0, -0.126319], [0.126321, 0.36788200000000004, 0.125845]], "72faa6ff-caa5-4036-94b0-b18d220fd65c": [[-0.393421, 0.0, -0.37899099999999997], [0.393421, 0.796349, 0.37899099999999997]], "2b2b65fd-f53e-45fb-b7ce-9b4251b2c8a3": [[-1.30519, -0.000133356, -0.44838700000000004], [1.30581, 0.79684, 0.44841000000000003]], "51db51b3-7a44-4755-a3a6-7b85a70abbd2": [[-0.479193, 0.0, -0.347785], [0.479193, 0.37255299999999997, 0.347785]], "383f2172-6382-4629-a54a-0480a8793622": [[-0.295434, 0.0, -0.274735], [0.295553, 0.34318899999999997, 0.274856]], "5885fad2-4f02-4e3e-b474-d33f126a6b84": [[-0.550357, 3.05176e-08, -0.413439], [0.550357, 0.383018, 0.41316200000000003]], "d2f22074-c90f-48a9-9114-8b748a110616": [[-0.243533, -1.24905e-17, -0.219066], [0.243533, 0.769945, 0.219066]], "386f64a3-b66b-4f6d-b09e-b57fbae35a32": [[-1.19125, -0.00031473099999999995, -0.448005], [1.19055, 0.9423239999999999, 0.447166]], "f5675233-21fa-4f6e-9f0a-bc1d5ba45e63": [[-1.1377899999999999, 6.48692e-05, -0.444032], [1.13745, 0.711217, 0.44335]], "3ef48664-ce00-4c66-8f3e-c39e139b9cd4": [[-0.350127, 0.0, -0.35534999999999994], [0.350127, 0.8507330000000001, 0.35534999999999994]], "a8b68865-cfbd-4060-9fae-a0181b0e452a": [[-1.44256, 2.0083000000000003e-06, -0.556525], [1.44254, 0.8298789999999999, 0.558515]], "0512aee9-b2e3-41c8-8db6-b93247318c97": [[-0.21546800000000002, -5.16345e-06, -0.285493], [0.215501, 1.0184600000000001, 0.28552700000000003]], "0e020c15-965b-4cf1-afe6-8bd544226e44": [[-0.34396299999999996, 0.0, -0.379322], [0.34396299999999996, 0.684011, 0.379764]], "c3e5002f-9690-46f7-8ce7-206b4c01edcd": [[-0.437027, 0.0, -0.331707], [0.436947, 0.736567, 0.331707]], "d1f20bb4-fadc-4a0e-b30d-dee918288935": [[-0.531528, 0.0, -0.48025199999999996], [0.531528, 0.8673420000000001, 0.48025199999999996]], "466388a7-42f4-4469-95f9-4d89cf0bd16f": [[-0.267967, 0.0, -0.053682999999999995], [0.267987, 0.884932, 0.053704999999999996]], "d0bc1c47-f480-49b3-86ec-f4cd89e04db7": [[-0.25, -1.7251e-17, -0.25], [0.25, 0.45, 0.25]], "38537074-3040-35ae-9908-0a729d498eec": [[-31.0523, 0.0, -34.252], [31.1677, 84.4882, 34.252]], "7e908bee-db00-36aa-9883-77e8fdfed531": [[-118.3061, -0.0002, -44.8351], [118.3061, 73.6625, 56.1307]], "4890e48b-62ec-45a7-80eb-d9111b9619e7": [[-0.295184, 0.0, -0.392338], [0.295184, 0.4275, 0.392338]], "e53b1bce-5055-45fe-b611-dd195b9d2269": [[-0.298846, 0.0, -0.344405], [0.298981, 1.076408, 0.344405]], "019ecfc9-500d-45b4-869d-958f41905ba2": [[-0.256163, 0.0, -0.26915], [0.256117, 1.098829, 0.270869]], "94976888-1d1a-421d-a4ea-d60ebf5f7775": [[-0.272675, 1.52588e-08, -0.278096], [0.272685, 0.762367, 0.27815100000000004]], "04e36426-a6c6-4c9a-befb-e208c8ebf714": [[-0.225159, 0.0, -0.200143], [0.225159, 1.300935, 0.200143]], "4056383b-df35-4d60-8ff2-e66dd9b8c293": [[-0.405, 2.51951e-06, -0.405], [0.405, 0.45988799999999996, 0.405]], "db007a3a-3298-412f-8eff-eac2dac7270f": [[-1.0915000000000001, -0.00282447, -1.11111], [1.0908499999999999, 1.3181200000000002, 1.11233]], "96c7294e-b7f9-4741-b3af-6417a14ecdcd": [[-1.6159700000000001, 8.495169999999999e-08, -0.5017309999999999], [1.6159700000000001, 0.823271, 0.501737]], "1aef5e72-a67c-4d87-8204-45439beabed9": [[-0.598538, 0.0, -0.598538], [0.598538, 0.75, 0.598538]], "f98d8bef-2e17-4931-98f7-a03ae0ccf442": [[-0.6035, 1.10043e-07, -0.40281599999999995], [0.6035, 0.419547, 0.40281599999999995]], "2e644b55-8538-463b-98c2-8172678362f9": [[-1.2990799999999998, -1.04629e-06, -0.25], [1.2990799999999998, 0.549407, 0.25]], "0ea10ffb-60a0-48d7-9c79-f272bfd5ac77": [[-0.548425, 0.0, -0.548425], [0.548425, 0.38312199999999996, 0.548425]], "c79e1500-1f1f-4768-ac14-984477a8c042": [[-0.25, -1.53081e-17, -0.25], [0.25, 0.46455399999999997, 0.25]], "4e904746-cb1c-422b-b150-72732c1481ed": [[-0.602611, -2.6498699999999998e-05, -0.244482], [0.599371, 1.21847, 0.243061]], "47ef6062-e3dc-4eb5-8aaa-350e857eae40": [[-0.6964090000000001, -1.30789e-05, -0.6964090000000001], [0.6964090000000001, 0.7342700000000001, 0.6964090000000001]], "04dbc652-b127-4070-bfc3-c07fa5bc4ede": [[-1.2, -1.97995e-17, -0.355], [1.2, 2.202, 0.355]], "29400afc-3763-46a2-ab59-b6153ce88961": [[-0.875, -1.8339099999999998e-17, -0.3005], [0.875, 2.65, 0.3005]], "5c6a1cd0-5f6b-42b3-96ef-fc1e4ef7d067": [[-0.358404, 0.0, -0.21838999999999997], [0.358404, 0.49682499999999996, 0.21838999999999997]], "0561f98b-635c-4d62-8ab7-c7724511b785": [[-0.499957, 0.000165, -0.531446], [0.499749, 1.2513370000000001, 0.529958]], "79bddc14-d901-4c81-8fef-f0badadd6194": [[-0.23000900000000002, 5.95732e-09, -0.231519], [0.23000900000000002, 0.479028, 0.231519]], "660f0928-c45a-4be2-9ce6-b0813293a905": [[-1.13534, -0.0010525600000000001, -1.09683], [1.13483, 1.11282, 1.09793]], "e2b4cf55-bad1-48f0-a486-9791e6802c14": [[-0.7720140000000001, 7.55586e-05, -1.0635599999999998], [0.7720140000000001, 1.6219999999999999, 1.06375]], "00593873-bfa3-4cab-8efe-3528312a6257": [[-1.4975569999999998, -0.0, -0.360574], [1.497379, 0.6300520000000001, 0.360574]], "2c54a73e-a92e-3bcb-bef3-208d2530870d": [[-1.156603, -0.0, -0.53076], [1.156603, 0.760187, 0.530759]], "d75f726a-9f38-4a89-bcd7-a3bd518bb670": [[-0.5725589999999999, 2.87868e-08, -0.052731], [0.57256, 1.05444, 0.052731]], "2cff958d-5385-4554-9ddc-597a56a49886": [[-0.359014, 1.42237e-17, -0.274138], [0.359014, 0.566388, 0.274136]], "4b88fa1e-fb5a-3441-b977-20f11f2126b7": [[-187.6461, -0.1201, -79.7911], [187.6461, 86.2904, 79.7911]], "bf174969-9764-46ce-a0ab-4cb566cc3c87": [[-0.215156, 0.0, -0.215156], [0.215156, 0.597438, 0.215156]], "08ef7379-aa9c-3f4a-988b-e4834c4a3ae9": [[-0.26135200000000003, -0.00010899999999999999, -0.275579], [0.26135200000000003, 0.769838, 0.276297]], "c6655160-2753-4bb8-b1d3-13130af98015": [[-0.510414, 1.52588e-08, -0.407099], [0.510414, 0.718621, 0.407099]], "147a52db-0e04-4c1b-ad97-339d00fc731c": [[-0.8531340000000001, 0.0, -1.288759], [0.8531340000000001, 0.9695900000000001, 1.287685]], "1c33b2e8-6c02-3a72-905a-5bea4ae713d0": [[-0.23608200000000001, -2.3999999999999997e-05, -0.281121], [0.237063, 0.8777429999999999, 0.250405]], "561516af-3d72-4bfe-b73c-882ddf9dc95d": [[-0.933481, -4.94609e-08, -1.11978], [0.934306, 1.12869, 1.1202800000000002]], "6a9e7882-45f4-4940-b55f-47cca4635340": [[-0.5431539999999999, 0.0, -0.53708], [0.5431539999999999, 0.401093, 0.53708]], "caec9173-0f6a-4cbd-9d6e-036f13c9994b": [[-0.236811, 1.16423e-17, -0.241872], [0.23690999999999998, 0.433663, 0.24149]], "05e875a4-a420-4c81-bcb3-e985eb856f22": [[-1.20009, 7.947560000000001e-08, -0.599186], [1.20009, 0.7395879999999999, 0.599186]], "06ed337c-0db5-40be-8114-884082e0edb4": [[-0.760582, -8.4811e-18, -0.20016899999999999], [0.760582, 0.7779600000000001, 0.20016899999999999]], "54bbec00-286e-4e5a-90a5-5682caf5053a": [[-0.325, 0.0, -0.234146], [0.325, 0.54, 0.234146]], "889d46f4-c6fd-4f2f-87d4-54c9bdc34f6c": [[-0.490203, 6.131469999999999e-07, -0.23917000000000002], [0.490203, 0.7743429999999999, 0.239169]], "389abaca-ecde-4b38-a5db-709fb346921a": [[-0.400507, -0.000385866, -0.347256], [0.40097499999999997, 0.345499, 0.347014]], "97e79e2d-298e-42a9-a742-bf7159fb068d": [[-0.515834, -0.00529621, -0.515538], [0.5157849999999999, 1.12013, 0.515608]], "27749ead-7e38-3ad0-bc3f-cf4950fa6dd5": [[-0.9906, -0.0, -0.457745], [0.9906010000000001, 0.6499379999999999, 0.45764099999999996]], "77fc7fe0-c95f-4dd0-ba4f-4de602ead19f": [[-0.936599, 3.26538e-05, -0.41781], [0.936307, 0.7333750000000001, 0.418864]], "05740eed-3ed1-472e-81b6-f651395c4ada": [[-0.182203, -7.62939e-09, -0.172534], [0.182203, 0.478502, 0.172534]], "7714d6f8-bef4-4ec4-ac6e-deb6644801ff": [[-0.448568, 0.0, -0.38433500000000004], [0.448568, 1.015841, 0.384108]], "5f2ae658-6fa3-4b0e-a39b-25cc86287f29": [[-0.727718, 0.0, -0.516588], [0.727718, 0.913536, 0.516588]], "2439e21f-2c7d-4fea-ad39-d21539945f13": [[-0.436401, -5.6524300000000005e-09, -0.435395], [0.436351, 0.856781, 0.435841]], "37ef9777-84f4-4858-ba7c-491796e6fddf": [[-0.5529999999999999, -0.000367164, -0.22399999999999998], [0.5529999999999999, 0.803571, 0.223965]], "635c3cd1-a3f1-4ede-a0c3-540631c7feca": [[-1.8465790000000002, 0.0, -0.567526], [1.8464990000000001, 1.017309, 0.5673020000000001]], "c87b799e-11c3-48f4-a1e0-c67cdf9e5b00": [[-2.02477, -0.00034045, -0.598487], [2.02458, 0.694629, 0.59823]], "63fb829b-fe84-44c5-8449-ddabff483630": [[-0.399831, 0.0, -0.20638600000000001], [0.399831, 0.9816750000000001, 0.206155]], "1fbf4192-1fb3-4451-8254-95da51452ee3": [[-1.47667, -0.00014908100000000002, -0.945774], [1.47549, 0.890215, 0.946211]], "4d495443-cb1b-42ba-b43e-9270f18555c0": [[-1.265079, 0.0, -0.28350000000000003], [1.265079, 2.400001, 0.28350000000000003]], "30926db2-c1b3-4f71-9800-e363d36a51d0": [[-0.596318, -1.52588e-08, -0.325264], [0.596318, 0.542107, 0.325264]], "04ae2dc3-d672-4394-b494-fed626c7a06b": [[-1.2658580000000001, 9.8e-05, -0.49439700000000003], [1.266959, 0.839661, 0.494288]], "12f6166a-3223-4b42-8fe4-90036e374a4f": [[-1.285, -1.2116200000000002e-08, -0.286389], [1.285, 2.25, 0.286389]], "c3a62426-8efa-499f-8c07-7fd5e1e299e3": [[-1.09295, 2.60928e-17, -0.432282], [1.09314, 0.912193, 0.433486]], "5482d002-9364-48b6-a437-4aad9d4a5e07": [[-0.699935, -6.3989e-05, -0.224774], [0.699936, 0.7872669999999999, 0.224831]], "4d221a11-c33b-4ad8-9349-f3d3c88a3c1d": [[-0.360548, -0.0, -0.584118], [0.360496, 0.388619, 0.584119]], "04be7b1b-0c5d-3f74-8dc5-63c17a7bbcc5": [[-0.38305900000000004, 5e-06, -0.354112], [0.40937199999999996, 0.686719, 0.35643099999999994]], "e363968d-4177-425d-9fc5-fc572a1f394d": [[-0.5, -0.000268246, -0.258522], [0.5, 1.50937, 0.25849]], "5f86cea2-bb34-4b39-9c62-2505417ac7c7": [[-0.47360399999999997, 0.0, -0.22352799999999998], [0.473603, 0.47557099999999997, 0.22352799999999998]], "27908d6a-1195-4538-98ac-1a072798e58e": [[-0.701148, 0.0, -0.709868], [0.701148, 1.189843, 0.709867]], "22a4bd03-9adf-4e3c-8540-f3d1b20ac3ff": [[-1.1637300000000002, -0.0009708849999999999, -0.361144], [1.16374, 2.46061, 0.361169]], "30f97f08-a05b-4f64-a9d8-2f14e291bc88": [[-0.532234, 3.8147e-09, -0.338694], [0.532234, 0.221416, 0.338694]], "8b3c235a-1844-4941-9bea-dd9e8cf72f1f": [[-0.485422, -1.54623e-05, -0.397766], [0.48446300000000003, 0.6744, 0.397768]], "274c7578-e068-4852-8674-af79428e25e1": [[-0.232879, 1.13208e-17, -0.264173], [0.232879, 0.736649, 0.264376]], "70e2459b-41a9-38c2-81a1-efc9e7e76dfd": [[-109.0304, -0.0002, -56.4164], [109.0304, 91.2372, 73.704]], "26571b10-6720-48cf-a00f-53d66050bc96": [[-1.11053, 0.00018235000000000001, -0.587633], [1.1105, 0.9026510000000001, 0.587676]], "37c8590a-f99b-471b-835d-7457da2aeb4b": [[-0.52799, -0.00137182, -0.527906], [0.527893, 0.702335, 0.527893]], "6af44d96-2d68-4ac7-9724-0b838523cfa3": [[-0.225947, 0.0, -0.254285], [0.225947, 0.828776, 0.25521499999999997]], "a83e0ead-b3e4-468e-b8f1-e9699db7c232": [[-0.6444840000000001, -0.000306493, -0.346543], [0.6444840000000001, 0.44670499999999996, 0.346543]], "dfcb801c-33c0-42a7-91d4-a646df767ea3": [[-0.270074, 0.0, -0.280747], [0.2697, 0.553103, 0.280792]], "afa0439a-27de-449b-8720-eca59ca3474d": [[-1.43, -5.20397e-08, -0.312367], [1.43, 2.6, 0.312367]], "c671e3da-9c20-49c8-b79a-a357ac447c38": [[-0.632532, -1.45445e-07, -0.34639200000000003], [0.632502, 0.238519, 0.346404]], "660681f2-625f-46bd-b261-caa306cc5968": [[-0.9000020000000001, 0.0, -0.40000399999999997], [0.9000020000000001, 1.05723, 0.40000399999999997]], "9f728104-5dbb-4444-8542-8d50b001ed57": [[-0.449014, 0.0008680000000000001, -0.379881], [0.449603, 0.9403239999999999, 0.379754]], "28168dbe-1c54-4d60-a796-a8409b875c49": [[-1.88782, -3.23051e-17, -0.66632], [1.8878700000000002, 0.842133, 0.6672669999999999]], "08154cc0-a4b5-338a-bc23-234138f28b8b": [[-0.249211, -2.9999999999999997e-06, -0.279911], [0.249211, 0.7047289999999999, 0.27991299999999997]], "281d33db-4e43-42ea-ba76-ee0890042e85": [[-1.142396, 0.001449, -1.102127], [1.142396, 1.139276, 1.1019670000000001]], "75fe4187-164d-4d8b-8e4a-25340b3c0857": [[-0.378506, -5.1939600000000005e-18, -0.378505], [0.378506, 0.283428, 0.378505]], "7833b0da-a1f4-3c79-8608-4c9b11f3efd3": [[-1.1140940000000001, -0.0, -0.450879], [1.107704, 0.8933230000000001, 0.461763]], "2293cbe4-5554-4c3b-a092-09cacb7f57b1": [[-1.34995, -1.60982e-17, -0.334056], [1.34995, 2.70789, 0.33411900000000005]], "43adc992-e772-4763-a7ad-36eecfde3e5b": [[-0.289467, 0.0, -0.220274], [0.289442, 0.590144, 0.220274]], "5e29e54c-5215-497c-a9a6-a1162d0ce5f1": [[-0.230745, 0.0, -0.250775], [0.230744, 0.833357, 0.250762]], "4473a28b-7d5e-4145-91a9-804c2968c667": [[-1.06169, 7.398910000000001e-08, -0.201706], [1.06169, 0.46139600000000003, 0.201706]], "993edc54-006e-433f-a999-77d2f7f1b4ee": [[-1.3940000000000001, -0.000192397, -0.644177], [1.39389, 0.886694, 0.6439579999999999]], "2c38c03f-66bf-4a06-93b2-724c996d0998": [[-1.47751, -0.00158646, -0.597369], [1.47736, 0.758886, 0.597163]], "c6612ec0-a735-43dc-bde7-1094d2ae344f": [[-0.21810300000000002, 0.0, -0.220316], [0.21810300000000002, 0.605392, 0.220316]], "460e6208-bd39-48e6-87ef-c9e15c240671": [[-0.30561299999999997, 0.0, -0.203186], [0.30561299999999997, 0.288328, 0.203186]], "7de13f22-abff-35e4-b9fa-f00577dbafaa": [[-0.612374, 0.010029, -0.612374], [0.612374, 0.76402, 0.612374]], "2dab35dd-3675-452b-8c0e-845e2d9526f8": [[-0.18162099999999998, -1.39683e-09, -0.18162099999999998], [0.18162099999999998, 0.624696, 0.18162099999999998]], "7a2fa21c-29ba-462e-bae9-c4319375b608": [[-0.2588, -1.14441e-08, -0.255585], [0.25884, 0.610307, 0.255637]], "71823f22-9b53-49c2-8708-fa7c89dde14f": [[-0.787672, -1.78471e-07, -1.0253], [0.787672, 1.18717, 1.0253]], "b49efa64-17b0-4b07-bb16-a64fc4a03f80": [[-0.825, -0.00016923600000000002, -0.225832], [0.825, 0.927814, 0.225832]], "5ba819b5-d790-4346-82b3-f2e3c346bcd4": [[-1.02788, -1.73772e-17, -0.31666], [1.02789, 2.6302800000000004, 0.31738700000000003]], "05c8718d-3a0e-4063-a40d-977b36075e30": [[-0.687065, 0.000508911, -1.02234], [0.6890689999999999, 1.21059, 1.02146]], "6a13999b-89da-49ca-8ee3-44658668aef6": [[-0.18614999999999998, -1.35777e-17, -0.261755], [0.18614999999999998, 0.596356, 0.261755]], "73bd5cf2-aafd-4cd8-87cd-585024e40df6": [[-0.715872, 9.321790000000001e-18, -0.20409300000000002], [0.715872, 0.7500020000000001, 0.20409300000000002]], "6dcfcec1-7795-4324-a032-a32e2894550d": [[-1.39515, -0.00019033399999999998, -0.900735], [1.39423, 0.591949, 0.899864]], "9129c153-38a4-4b23-97c8-90b3b9fc4e06": [[-0.9981829999999999, 7.62939e-09, -0.22041899999999998], [0.9981829999999999, 0.520212, 0.220434]], "101adcf1-613a-4b96-871e-b7e2b8f6b50c": [[-0.24208400000000002, 8.29954e-08, -0.27473600000000004], [0.242105, 0.8707210000000001, 0.27479]], "201f281e-52d6-41cb-87c3-1e00b9282d9f": [[-1.026572, 0.0, -0.41110599999999997], [1.0266039999999998, 0.710244, 0.411333]], "2a7ad7b0-dc8b-4e72-b58d-fabb41a48cc7": [[-110.3846, -0.1203, -61.1544], [110.3846, 186.0388, 61.1544]], "7e33d9d3-6387-4705-a679-012a80197e67": [[-1.2403, -1.8540700000000002e-17, -0.308449], [1.23793, 2.42691, 0.308514]], "f0ab528b-13e0-472a-873a-628c834a5839": [[-0.231648, 8.520249999999999e-18, -0.162508], [0.231648, 0.270747, 0.162508]], "3bfdd478-48a3-4b89-a080-ab1711e98c0e": [[-0.210684, 0.0, -0.177443], [0.210715, 0.393289, 0.177443]], "6c039ec6-9393-4b51-9046-0bbc09dca79f": [[-0.395, -4.00992e-09, -0.37], [0.395, 0.759011, 0.37]], "87322ab9-e3a3-4f25-9782-86b6bb5f0f93": [[-0.424926, -9.447340000000001e-09, -0.433718], [0.424662, 0.67999, 0.433]], "89b7c9e6-dc40-4e23-b64b-0c9876967430": [[-0.5400010000000001, -6.10352e-08, -0.245001], [0.5400010000000001, 2.08, 0.245]], "635e6bb1-bf8b-4979-bd5d-ad26357cf3d3": [[-0.6, 0.0, -0.282939], [0.6, 0.5, 0.282939]], "61122718-1c67-4abc-bc6b-48b78f9d1fd6": [[-0.285272, 1.6e-05, -0.296313], [0.28529, 0.529095, 0.296272]], "d4585471-281f-4cd5-b094-2091dbc20107": [[-0.110822, -4.21885e-18, -0.0803228], [0.110822, 0.5564439999999999, 0.0800963]], "08982d71-ab53-431b-8038-2e0a0b54daaf": [[-1.06401, -7.62939e-09, -0.476288], [1.06392, 0.82188, 0.47696599999999995]], "5f175677-3321-467a-9a82-1ede16807be6": [[-0.793522, -5.50549e-17, -0.955694], [0.792106, 1.31832, 0.955529]], "5e3ec2e9-d0c2-4e19-80c9-594aca914135": [[-1.15568, 0.0035822199999999997, -1.16306], [1.15222, 1.1059999999999999, 1.1606999999999998]], "17a8e3d2-e3cf-47dc-99d6-a0bab700cdc4": [[-0.561284, 0.0, -0.184549], [0.561284, 0.448772, 0.184549]], "7a9cdb6f-47f8-4f99-a661-fa793b2928bb": [[-0.320446, 0.0, -0.332731], [0.320446, 1.174025, 0.332962]], "e6f0fc32-aa55-427f-a014-f265af3fbcd6": [[-0.271049, -0.000181471, -0.25444], [0.271154, 0.803712, 0.254046]], "5e74793b-1a0d-3d51-91ee-6179a204c07b": [[-0.30734100000000003, 4.4999999999999996e-05, -0.274364], [0.306796, 0.731294, 0.28284]], "6bc10aaa-e414-4b43-baca-412bfedbaa37": [[-1.12341, -2.2618099999999998e-17, -0.379913], [1.12341, 0.7912, 0.381464]], "ac57e7d0-51d7-45a1-9816-0f6e1b1b7b9e": [[-0.7495, 0.0, -0.19949999999999998], [0.7495, 1.778126, 0.19949999999999998]], "49ea9e72-099f-455d-8df6-5e259542e73c": [[-0.284337, -0.000501254, -0.271099], [0.283734, 0.9869889999999999, 0.27174600000000004]], "51811dd2-7615-4943-9b8b-123bb44cadd9": [[-0.604588, -2.91623e-05, -0.378068], [0.604588, 0.515184, 0.378068]], "2ec84a37-8444-4362-9369-c56451e4ae1a": [[-0.64969, -2.1096499999999998e-06, -0.260474], [0.64969, 1.86037, 0.260474]], "7f7a8610-d4b8-4a98-8955-c98b1a34c6f7": [[-0.350269, 3.34719e-08, -0.366276], [0.350187, 0.8327089999999999, 0.36621400000000004]], "71c4791c-25f1-4fa7-ba4c-0287c9dd81ad": [[-1.008833, 0.0, -1.0837189999999999], [1.008833, 0.789265, 1.083462]], "65052830-e94d-4398-b647-fab1406bdbc6": [[-1.4133600000000002, -2.78644e-17, -0.5150330000000001], [1.41272, 0.8168859999999999, 0.5153300000000001]], "c19e1a69-5674-4883-ba96-fc4ee9e7ba85": [[-1.0950499999999999, -0.00241457, -1.22229], [1.09425, 1.8859800000000002, 1.22235]], "98ebdadf-0fc2-4245-8c40-d5c7db5e56ba": [[-0.7575069999999999, 0.0012025900000000001, -0.252192], [0.7575069999999999, 1.86732, 0.252192]], "794faad8-3dbb-45ea-a753-eedf1d1f7295": [[-0.396156, -0.000100486, -0.391432], [0.39678800000000003, 0.73575, 0.390802]], "0d5562d8-cea0-4426-a236-af033659f306": [[-1.2169400000000001, 8.24194e-07, -0.47622], [1.21696, 0.7576160000000001, 0.47622]], "04345dcd-9495-46bf-951f-3c055bdf185e": [[-1.166683, 0.0, -1.103801], [1.166683, 1.3277539999999999, 1.104097]], "438d8d9a-7aed-4775-8188-6dba39471a93": [[-1.0681, 1.44225e-17, -0.286768], [1.0681, 0.567725, 0.286768]], "0d309488-bbbf-4ba1-8e2c-7e6fcfb26cb3": [[-0.589907, -5.68499e-06, -0.589888], [0.589907, 0.734053, 0.589893]], "afe3b21f-760e-49e7-a216-a8215346b68f": [[-1.311595, 0.000258, -0.675432], [1.312966, 0.847692, 0.675143]], "c1348b2f-f1ee-4df4-8c8a-a64e02ddbb62": [[-0.41025799999999996, -0.0, -0.413022], [0.410204, 0.9519960000000001, 0.41308100000000003]], "feef7fa8-de52-4fd9-9bce-38c9750378d2": [[-1.350978, 0.000135, -0.62608], [1.350729, 0.880997, 0.626155]], "0629cbd0-8721-437d-a34a-952a9e2b2f5f": [[-0.7793089999999999, -7.62939e-09, -0.24679700000000002], [0.7793089999999999, 0.37851100000000004, 0.24679700000000002]], "66be5448-ce63-4e25-8bcf-5bd36cb155ec": [[-0.29479099999999997, -0.000168258, -0.261628], [0.294844, 0.440218, 0.261628]], "ce81a168-c515-4de7-a20b-e8ffe76d75ee": [[-0.332331, 6.6353e-18, -0.120099], [0.332331, 1.26075, 0.120098]], "6d5abfe5-e8e6-46e4-a59a-77e4c8230c21": [[-0.265351, 0.0, -0.258154], [0.265259, 0.9165340000000001, 0.258242]], "80f782cd-025f-4b67-930f-5abf46c1ee5b": [[-0.7641849999999999, 0.0, -0.317764], [0.7641849999999999, 0.662197, 0.317629]], "074ef4d4-cb22-4a0e-a611-3a579b9b21a2": [[-0.56736, -0.000297446, -0.236413], [0.56753, 0.670514, 0.23640899999999998]], "7e0cf41d-ea46-41cc-b8f5-f002808178c1": [[-0.742141, 0.0, -0.489879], [0.742141, 0.44132, 0.489879]], "4446df24-ffa2-3ffa-b7c6-94ebad0fd701": [[-0.427695, 0.0, -0.490164], [0.427695, 1.076785, 0.49080399999999996]], "3fa617e2-72a1-4d55-96c0-40965ce36e52": [[-0.30650099999999997, -1.7963399999999998e-17, -0.30650099999999997], [0.30650099999999997, 0.46413, 0.30650099999999997]], "ab9df4f6-dab2-4b7a-9658-bde553f48e69": [[-1.0222, 1.47072e-07, -1.0627], [1.0222, 1.10612, 1.06357]], "449c4927-93df-4465-a43a-fffa5442cbbc": [[-0.26224000000000003, 0.0, -0.26224000000000003], [0.26224000000000003, 0.524, 0.26224000000000003]], "6cb9622a-71e7-4940-bc40-9a1af4dff3b1": [[-1.216324, 0.0, -0.438745], [1.216324, 0.631158, 0.43869]], "d7817105-3471-4fb8-be9c-22077d239cbe": [[-0.355637, 0.0, -0.35552700000000004], [0.355637, 0.80935, 0.35552700000000004]], "1849653d-6daa-406c-a09f-f2646f2194a6": [[-0.17537199999999997, 0.0, -0.12687400000000001], [0.17537199999999997, 1.267317, 0.12687400000000001]], "b5a6381c-1185-4b43-bd02-eea87a944c96": [[-1.17527, 0.0, -0.41164], [1.1751399999999999, 0.8707670000000001, 0.41178899999999996]], "5a829b8d-4fea-361b-93de-5af6fbd16481": [[-39.3388, -0.0, -38.7477], [40.4657, 76.7942, 41.7472]], "62aeb6c8-f523-3b23-8b02-1689a716567d": [[-0.601, 0.0, -0.601], [0.601, 0.713912, 0.601]], "d2eb176f-93bb-4409-a12d-d5657b26f9da": [[-0.444826, 0.0, -0.414274], [0.445321, 0.9133159999999999, 0.41432]], "070f1e42-ca80-4ad3-ab24-9a89d79e802e": [[-1.29999, -1.07233e-17, -0.175125], [1.29999, 2.48, 0.175126]], "b9dca0d1-6166-4ac2-a048-3051c19b362c": [[-0.58161, 0.0, -0.17794000000000001], [0.58161, 1.040626, 0.177652]], "ae787d13-f9f0-46ef-9f4c-79e029f5a609": [[-0.36023499999999997, -8.68091e-06, -0.223639], [0.360204, 0.6943670000000001, 0.223705]], "65a01d8d-dcc5-45ea-9d41-55a34e3623e2": [[-1.06539, -6.42881e-17, -1.0499], [1.06539, 1.4969700000000001, 1.0499]], "a3193af8-a798-45be-8fd0-60ea70daa7fb": [[-0.474261, 0.0, -0.426732], [0.474261, 0.786958, 0.426732]], "ef10c201-6626-4df2-b62c-8527fb9f594c": [[-1.0489, -0.00194018, -0.390094], [1.04909, 0.7654219999999999, 0.390383]], "858e25f7-b5ba-4f5a-acb0-f5ef714ca4df": [[-0.5870799999999999, -1.72761e-08, -0.258534], [0.5870799999999999, 1.9, 0.258534]], "3992f9cf-b6ab-4f2f-b678-c980391f2689": [[-0.266451, 0.0, -0.311549], [0.266451, 1.121423, 0.311071]], "e2d97410-3632-439d-9366-b532498f6cdf": [[-0.48911, -1.4432799999999999e-06, -0.45632], [0.489159, 0.844891, 0.456313]], "31f19e77-a94c-4e87-95f9-2aaa8cd973ba": [[-0.22439, -9.510379999999999e-18, -0.22439], [0.22439, 0.45, 0.22439]], "2502cec2-3444-4046-b2c8-8afda329d115": [[-0.087363, 0.0, -0.089971], [0.087319, 1.053367, 0.089922]], "d9e72fed-0b46-491c-b4bb-928972218e37": [[-1.3474000000000002, 0.0, -0.47627200000000003], [1.347264, 0.875482, 0.479875]], "565d9237-b322-43ac-b0e2-c6b47ea728dc": [[-0.823839, 0.0, -0.42800499999999997], [0.824041, 0.876176, 0.42780700000000005]], "f24feff5-5cfa-426d-88dc-ab21e1f7ca35": [[-0.316405, 1.38611e-17, -0.25286000000000003], [0.316405, 0.5612980000000001, 0.252943]], "b32c7221-08af-455b-969b-3af0debd32e9": [[-0.6092029999999999, -5.76818e-09, -0.244256], [0.609433, 0.421291, 0.244739]], "a9983074-f063-43a8-950e-a8a861a313ec": [[-1.0389220000000001, 0.0, -0.221999], [1.0389220000000001, 0.488305, 0.221999]], "62c3067f-9eb2-4558-9996-dfdb1051c37b": [[-0.501575, -5.79224e-05, -0.50686], [0.5020709999999999, 0.951346, 0.506704]], "80947687-79a8-4ce4-94fc-a5b54a3a22ec": [[-1.77651, -1.06815e-08, -0.578072], [1.7762799999999999, 0.902142, 0.578213]], "cdbee3f3-750f-49f7-9cb4-167c7788b522": [[-0.43628500000000003, -9.78619e-09, -0.435853], [0.43628500000000003, 0.652402, 0.435853]], "5dd82a41-61b0-39df-b8ac-007f773086fe": [[-1.1140940000000001, -0.0, -0.450879], [1.107704, 0.8933230000000001, 0.461763]], "d14e06fc-0908-4ab4-9efb-675155fdbedd": [[-0.275, -1.1902699999999999e-17, -0.20476], [0.275, 0.5, 0.20479399999999998]], "db2d6abf-3da9-4760-b805-2c6eab0c8063": [[-0.295, -1.6532699999999998e-17, -0.295], [0.295, 0.204, 0.295]], "06252e70-567f-4cc4-9056-0733ffed2c70": [[-0.109888, -2.35367e-17, -0.045835100000000004], [0.109888, 0.739969, 0.045835100000000004]], "3c35f189-830d-4f8e-bd79-743a487a1806": [[-0.0716807, -0.000160749, -0.0497229], [0.0716807, 0.9472809999999999, 0.0497229]], "854b1e42-7c3f-492f-97ea-83553ed76609": [[-1.24542, 0.000105492, -1.21237], [1.24542, 2.05498, 1.2119199999999999]], "3c4ba909-83f9-4a79-9804-45b90b909e3d": [[-0.303613, 7.96424e-08, -0.250922], [0.303613, 0.552718, 0.250922]], "fb71b194-f607-4271-b8e4-8c82c7e606af": [[-0.28866800000000004, 0.0, -0.307602], [0.288702, 0.8893340000000001, 0.30779599999999996]], "38dc6b77-bf8c-47ba-8c68-356c8c672c31": [[-0.7186520000000001, 0.0, -0.49530700000000005], [0.7186520000000001, 0.57008, 0.49530700000000005]], "e009febd-9660-4f86-91a5-74b27ae78382": [[-1.32776, -4.2632599999999996e-17, -0.49540999999999996], [1.32775, 0.7493470000000001, 0.495436]], "405a8fc1-9d46-48f8-99e8-ca3ab17b2a20": [[-0.225277, 0.0, -0.175305], [0.225277, 1.270948, 0.175305]], "802a538a-247e-4404-a015-54552d25372f": [[-1.02582, 4.57764e-08, -1.11341], [1.02633, 1.1954500000000001, 1.11215]], "559e7fcc-08cb-4790-a094-19f528bf7369": [[-0.45, -1.07156e-17, -0.194996], [0.45, 0.95, 0.194996]], "85c3c553-1938-4845-86a0-12e2e8dd3dc7": [[-0.39096200000000003, -2.4862700000000003e-06, -0.439495], [0.39096200000000003, 0.941383, 0.439588]], "62117100-7bc5-42c8-b8ce-626d46400970": [[-0.6643640000000001, 0.0, -0.6643640000000001], [0.6643640000000001, 0.779949, 0.6643640000000001]], "03d2c211-6bb1-475c-8a61-69246f5e0483": [[-0.422958, 1e-06, -0.349514], [0.422958, 0.8906019999999999, 0.349529]], "7a2706a9-b7de-4eb1-8d4e-da519f8c9398": [[-0.45848700000000003, 0.0, -0.465333], [0.45848700000000003, 0.248111, 0.465333]], "75e5997f-3425-473e-bd0e-a04daf66c2f1": [[-0.66676, 0.0, -0.302442], [0.66676, 0.388859, 0.302442]], "01ddee89-26d2-48e5-a413-959b26472bcf": [[-0.725, 6.10352e-08, -0.244441], [0.725004, 0.87, 0.24465900000000002]], "b3a35149-1cd4-4e2a-a4d2-2a64bea20977": [[-0.902, 1.33514e-08, -0.204587], [0.902, 0.594059, 0.204587]], "431e3530-40b1-404a-bf3b-d6a2fee00a65": [[-1.246537, 0.0, -0.533489], [1.246391, 0.813887, 0.533566]], "0f95f670-3100-4cbd-85bd-e2d2167dd450": [[-0.268767, -1.0582600000000001e-05, -0.276149], [0.268798, 0.35870199999999997, 0.276149]], "066a6e67-86a5-497c-93ef-95ee8cb3093a": [[-0.29046299999999997, 0.0, -0.23012], [0.29046299999999997, 0.5898680000000001, 0.23012]], "806d3a54-d3e5-45ed-a912-cb46793d0a76": [[-1.1, 0.000499642, -0.261434], [1.1, 1.2932, 0.261982]], "246cb5f9-27f3-4d14-8c8d-ba1f55266d46": [[-1.45886, 1.27825e-17, -0.21895499999999998], [1.45886, 2.7360700000000002, 0.21895499999999998]], "621858df-a521-47c5-b7db-0e7dd9e4d331": [[-1.5342259999999999, 0.0, -0.574355], [1.5342259999999999, 0.691155, 0.574359]], "de828ed8-9d9a-49b6-b076-91ff951ed7ce": [[-1.161024, 0.0, -0.42491500000000004], [1.160449, 0.869008, 0.421717]], "19f47b83-3a3e-4f63-b9c3-a421468dbd7f": [[-0.254552, -2.2630800000000004e-05, -0.270401], [0.254552, 0.854642, 0.270196]], "43af331b-5743-38a3-a6f0-dd927378bcbb": [[-59.3273, 0.0, -47.3643], [57.8415, 122.612, 53.6647]], "22a8bd60-7b3d-45a9-bdfd-b7c4b85f066b": [[-0.23789100000000002, -3.90209e-06, -0.23800100000000002], [0.23833400000000002, 0.7504900000000001, 0.23781300000000002]], "7cedd2dc-22aa-34dc-8c9b-c87fa3ff3b3e": [[-0.442956, -0.0, -0.505063], [0.442956, 1.0017829999999999, 0.505063]], "25ee28d0-4356-4a4d-a314-3bdeb00a09df": [[-0.519891, -2.3546e-17, -0.427028], [0.519891, 0.849031, 0.427028]], "4c6a57d3-fa56-45a8-96d1-9bf767e8ba82": [[-0.254759, 8.3e-05, -0.254658], [0.254658, 0.547828, 0.254759]], "0b2dce97-c99d-4892-947c-3fec708a8c2f": [[-0.44823799999999997, -3.74569e-05, -0.43546399999999996], [0.44823500000000005, 1.12463, 0.43701799999999996]], "4f9b3021-87c1-4754-97bc-ffdae9278fda": [[-0.9496439999999999, 0.00011240399999999999, -0.898879], [0.949863, 1.49932, 0.8988710000000001]], "588037d1-e7af-4fd4-bede-98ffdab78b23": [[-1.0090000000000001, 5.6618e-17, -1.12761], [1.0090000000000001, 1.34262, 1.12761]], "53efea48-b11e-4043-bd7c-996f2c9d2fca": [[-0.859367, 0.000125, -0.46141800000000005], [0.8593649999999999, 0.804089, 0.46142299999999997]], "2c0d595f-c2f4-4bf6-b81e-af86475d0d21": [[-1.1912829999999999, 0.0, -0.23078900000000002], [1.1912829999999999, 2.460407, 0.23078900000000002]], "37aaf01b-2a04-4c02-9b15-322c848877d0": [[-0.240435, 0.0, -0.252044], [0.240435, 0.47049300000000005, 0.252044]], "4a150921-6380-4fa4-a92c-3ff7991a3875": [[-0.819502, 6.10352e-08, -0.256904], [0.819502, 2.35458, 0.256905]], "27a26a80-217e-48d5-b9e2-72fb73cd4dd4": [[-0.21517399999999998, 0.0, -0.203339], [0.21517399999999998, 0.404138, 0.203448]], "eea54d62-f168-436e-ba5a-0d35ce9d1fa2": [[-0.152842, -6.10352e-08, -0.154343], [0.153091, 1.10697, 0.153954]], "a36dbd6d-ad42-491b-a1c7-7cd44579a691": [[-0.382991, -9.53113e-05, -0.391549], [0.382991, 0.787751, 0.391549]], "9f95afb0-aaf3-47be-8251-b5baaf4841ee": [[-1.474149, 0.0, -0.544958], [1.474149, 0.9439749999999999, 0.544958]], "445c75d6-3d2a-4e8b-b348-1391c548bd70": [[-0.582514, -7.202700000000001e-05, -0.48961799999999994], [0.582514, 0.939742, 0.48910400000000004]], "46410638-6746-4481-acb8-3ab203895b7c": [[-0.76789, -1.6345599999999998e-05, -0.21717199999999998], [0.76789, 0.8506440000000001, 0.21717199999999998]], "a2843527-230a-4a2e-9054-7623f1edb592": [[-0.307221, -1.81022e-17, -0.31448699999999996], [0.307221, 0.1, 0.31448699999999996]], "afccf279-c980-4d14-ae09-f712c1bbb45d": [[-0.315065, 0.0, -0.38053], [0.315178, 0.76859, 0.38053]], "7fae132e-87e9-4cd3-a357-b337a34e31ff": [[-0.9530150000000001, -1.7165e-05, -0.244817], [0.953014, 0.555639, 0.244817]], "8335733d-e23b-4b34-99dd-68e1f886f80f": [[-0.5601769999999999, -1.08239e-17, -0.180501], [0.5601769999999999, 0.809144, 0.180501]], "f96b9638-dbdf-446a-bbda-c1ead674e76c": [[-0.422746, 0.000512, -0.42268700000000003], [0.423294, 0.8129259999999999, 0.42268700000000003]], "da1bcea3-821a-460a-85ac-92385cd1a250": [[-0.7865819999999999, 0.0, -0.608504], [0.7865819999999999, 0.475184, 0.608504]], "a2a8b471-48b3-4dd9-9ffd-dcf66d72dd58": [[-0.328215, -2.53825e-08, -0.234599], [0.328221, 0.654221, 0.23475200000000002]], "62da127b-5543-4a5b-a5f9-582ddcb3d029": [[-0.21828299999999998, 7.5e-05, -0.239564], [0.218292, 0.887164, 0.23962]], "2d82fafe-2527-44b0-94df-b2cabf061bc2": [[-0.629634, -4.63198e-08, -0.34779200000000005], [0.627631, 0.251736, 0.347445]], "7ecf90e6-79fd-4bf6-ab74-8b72600419b7": [[-1.1127, 0.0, -0.397316], [1.1127, 0.915139, 0.39736600000000005]], "b8166c30-9880-4498-9b71-4373adc11832": [[-0.918177, 6.3e-05, -0.398864], [0.9172490000000001, 0.927694, 0.398864]], "7d9ed100-9897-4d06-8f1d-00fc9260ff9d": [[-0.17892600000000003, 0.00016784799999999998, -0.178052], [0.17892600000000003, 1.15203, 0.178055]], "943dc565-915f-4f6c-80e7-7eb7b84137af": [[-0.713592, 5.769730000000001e-08, -0.181587], [0.713592, 0.666683, 0.181587]], "127ceae9-2a53-477c-81ee-29a23cdfe803": [[-0.260506, -0.00033228399999999996, -0.260484], [0.26029, 0.424395, 0.260989]], "65c3b1ff-a0dd-41f1-8f00-27633cb33902": [[-0.589801, 0.0, -0.394553], [0.590121, 0.630688, 0.394576]], "352eb2b1-5fb9-4b3c-8253-ddd5462f7747": [[-0.8322759999999999, 0.0, -0.099354], [0.8322759999999999, 0.937115, 0.099354]], "54681d75-6559-4263-ae9c-759d57db7d22": [[-0.598679, -3.73839e-06, -0.299339], [0.598679, 0.360106, 0.299339]], "b5c0dec2-fe6f-4f82-b682-413837b9d814": [[-0.5, 0.0, -0.526464], [0.5, 1.229636, 0.526378]], "88fdd335-d975-4c77-bf41-722973bc0f4b": [[-0.600184, -1.75495e-05, -0.262959], [0.600184, 1.19949, 0.262952]], "e4667a09-48c2-4073-9873-35abef8244a1": [[-0.486175, -0.000289397, -0.0750309], [0.486181, 0.8134699999999999, 0.0751077]], "9b6b95c9-6cf3-45a7-ae06-680a5278053e": [[-1.1523999999999999, -0.000168593, -0.537822], [1.15289, 0.904793, 0.538567]], "4b8f438d-47ef-4bd1-aa8e-b9b13e1c53c7": [[-0.6753669999999999, -0.000101219, -0.9934480000000001], [0.67548, 0.836263, 0.992888]], "0a06d217-39dd-4d9c-8685-4926da21abf3": [[-0.578161, -0.000446029, -0.577975], [0.578247, 1.11233, 0.578133]], "b8e5dcb5-a141-4f35-a41f-034a702bf56c": [[-0.29489699999999996, -3.8147e-09, -0.192249], [0.29489699999999996, 0.43886600000000003, 0.192249]], "2465c974-4398-41e0-9a2b-dd073d94b260": [[-0.4, -1.06781e-05, -0.200012], [0.4, 1.8420500000000002, 0.20000199999999999]], "46db08ca-4165-4a26-ae35-56c85ab15ced": [[-1.22405, 1.52304e-08, -0.485927], [1.22305, 0.889639, 0.487192]], "2f8be13a-50da-4754-9026-4037f8fb0c45": [[-0.651083, -1.76045e-17, -0.352017], [0.651083, 0.396274, 0.352017]], "0424edd1-b8d0-41a3-a705-09200a44445b": [[-0.757583, 5.43576e-17, -1.13773], [0.757583, 1.0, 1.13773]], "3ea40316-35c1-4bf3-8d7d-ecd828f82a3d": [[-0.841241, 2.4218e-06, -1.0449599999999999], [0.841195, 1.19374, 1.04493]], "85088488-cf38-3193-ad59-0363a33681c3": [[-46.1077, 0.0, -43.3632], [46.1077, 73.0525, 47.2253]], "9e0ec8f2-7775-4b5d-9935-565970298699": [[-0.540032, 0.0, -0.31924399999999997], [0.540032, 0.174252, 0.31924399999999997]], "9d3ca979-5a5e-4ed1-a45d-e8d4ca9b4dc3": [[-0.22548200000000002, 0.0, -0.335326], [0.225916, 0.9475159999999999, 0.335326]], "ae8f7363-ae47-44bb-8ce5-083d8654866f": [[-0.236388, 0.0, -0.236388], [0.236388, 0.432682, 0.236388]], "6af8c568-058b-4be1-90cf-6a5eddb90642": [[-1.05396, -2.84669e-17, -0.531831], [1.05444, 0.843584, 0.530784]], "ef8594be-a7de-469c-ba15-7c3304de6613": [[-0.38600700000000004, -0.0009703349999999999, -0.403605], [0.386212, 0.7083240000000001, 0.40374899999999997]], "1c07be82-8936-433c-abb5-ecbab233f3cd": [[-1.2944419999999999, 0.000106, -0.767918], [1.294469, 1.572188, 0.7677729999999999]], "0c3f2528-7b8a-451f-8aad-3a0264eb1fb8": [[-1.133267, 0.0, -0.45095199999999996], [1.133267, 0.866539, 0.450781]], "62cf0e93-d73e-43e8-bb30-113ae0dd7a1b": [[-1.6658099999999998, 9.53674e-09, -1.07874], [1.6658099999999998, 0.8568680000000001, 1.07995]], "28dd3ca2-3e58-38ef-980d-0f2f7a795cc3": [[-0.320988, 0.0, -0.314796], [0.320988, 0.948708, 0.314796]], "805dbdc9-0f7d-4224-be07-8dd7b3446331": [[-0.75, -3.48016e-06, -0.214922], [0.75, 0.729208, 0.214923]], "3d7ae1fe-3ea9-42ea-a315-323a10e30f2f": [[-1.842002, 0.0, -1.03654], [1.8425880000000001, 0.8681749999999999, 1.036183]], "6f34683b-6504-4e0d-a1d7-dbaca5daf845": [[-0.6, -2.4869e-17, -0.258144], [0.6, 0.85, 0.258592]], "37c98801-a6c8-46dd-a041-3799630a1989": [[-0.603656, -0.000512726, -0.234358], [0.6039370000000001, 1.00191, 0.234553]], "4bdb8763-e976-43a0-ab37-23bb156cd742": [[-0.275615, 0.000104, -0.277895], [0.275615, 1.146674, 0.277953]], "49f3868f-f14f-45d9-8882-3e96ede0ff8a": [[-0.900001, 1.20887e-08, -0.4], [0.9, 0.7451019999999999, 0.4]], "096593da-5aef-4858-bab8-c6760311ef43": [[-1.16178, -2.4470799999999998e-17, -0.43339500000000003], [1.16146, 0.7897289999999999, 0.435353]], "e2816087-9a7c-4e59-82e2-abd3cfb529dc": [[-0.30647800000000003, 0.0, -0.24759], [0.30647800000000003, 0.513808, 0.24759]], "6ae6cebe-3fb7-48f0-b43a-6e1626ce3f9c": [[-0.38506700000000005, -5.40012e-16, -0.422784], [0.385039, 0.787426, 0.42253399999999997]], "6c2fd22a-75d5-4f18-bf23-d80347bb4f53": [[-0.253608, 2.6162999999999997e-05, -0.253885], [0.253255, 0.693296, 0.253812]], "7d2d82d0-ad8a-4fef-9288-8e763a29f50f": [[-0.324627, -0.000132825, -0.32464], [0.324617, 0.614522, 0.324606]], "6f5fe168-2150-43ed-97ba-8d24fd3fe69a": [[-1.20977, -5.7088400000000006e-06, -0.44149900000000003], [1.21003, 0.814981, 0.44176099999999996]], "2b9f5705-f6bd-48dd-acf1-257c8ed0b9b3": [[-0.474261, 0.0, -0.426732], [0.474261, 0.786958, 0.426732]], "c2be36fa-91ee-44e6-9235-e044981d1746": [[-0.30959, -1.3509200000000001e-05, -0.34051200000000004], [0.30959, 0.700827, 0.34051200000000004]], "fa6ceb17-c0ea-4cde-ae53-46ed84851db1": [[-1.04205, -1.84138e-17, -0.318555], [1.04205, 2.04921, 0.31854299999999997]], "28d193d3-6996-4122-ada0-85658c38bb09": [[-0.437696, 8.240339999999999e-09, -0.430988], [0.43823300000000004, 0.8500679999999999, 0.430909]], "313bed5f-191a-443c-8144-1917d80587b9": [[-1.35259, 1.51743e-05, -0.448428], [1.35232, 0.879276, 0.449031]], "b4c62110-65cd-4ced-9329-0e7e6731cbf0": [[-0.13974999999999999, 0.0, -0.13974999999999999], [0.13974999999999999, 0.67779, 0.13974999999999999]], "1a8e0879-55bb-4eeb-984d-b1ffa2bc44ee": [[-1.2375, -0.00028879700000000003, -0.42756], [1.23749, 0.925604, 0.42760800000000004]], "688acc5a-522c-4e59-bd28-b9bfb9809698": [[-0.7307359999999999, 0.0, -0.28782599999999997], [0.7306279999999999, 1.504318, 0.28782599999999997]], "e536ff89-c363-4c5d-886d-25777ed2e66c": [[-0.30720600000000003, -6.53741e-08, -0.324499], [0.307205, 0.742154, 0.324067]], "ba6ae635-b166-4331-9714-c5b5cfe01a8e": [[-1.2499, -2.99979e-07, -0.30633099999999996], [1.2499, 2.5, 0.306398]], "3f341df8-c46e-4d07-8f3c-d3bb2daa6410": [[-1.1352330000000002, 0.0, -1.090358], [1.1352330000000002, 1.5695009999999998, 1.092016]], "8eb2b743-9a0c-4dce-96f6-1662205836b8": [[-0.260186, 0.0, -0.313693], [0.260231, 0.7765810000000001, 0.313668]], "7cccc3c6-589d-4997-b130-16f370fa8d81": [[-1.07029, -7.62939e-09, -0.264262], [1.07029, 0.5399539999999999, 0.264262]], "258cc528-3276-4346-8469-af9daee2308d": [[-0.24928899999999998, 0.0, -0.249252], [0.24928899999999998, 0.478771, 0.249252]], "04345f2e-cf98-4061-b1b7-98612d7bf344": [[-1.3976, 2.7286e-05, -0.6103419999999999], [1.39799, 0.83769, 0.609136]], "6c72dee5-ad5b-4061-9f57-ff39506af543": [[-0.456074, -8.77942e-05, -0.4587], [0.456081, 1.15361, 0.45882399999999995]], "72a03ffa-697e-39e3-99d7-b232ddb53e2b": [[-1.030381, 0.0, -0.529435], [1.0303820000000001, 0.7086709999999999, 0.529436]], "2e3d6237-e30d-4ed8-8b59-f400e2c904d6": [[-0.6597320000000001, 1.2207e-07, -0.23404], [0.6597320000000001, 2.434, 0.23619900000000002]], "756c401b-b000-4183-9d1f-7c87900bd91d": [[-0.788951, -6.82406e-05, -0.222587], [0.7889870000000001, 0.540059, 0.221688]], "57641687-ab8a-435d-abb9-83c9398fd313": [[-0.438202, 1.1280999999999999e-17, -0.248994], [0.438202, 1.16257, 0.248891]], "012679e2-1597-4fc0-93e0-62206617fb31": [[-1.13, -1.8189300000000002e-17, -0.297053], [1.13, 2.4, 0.297053]], "24bb8530-2012-4c89-8c6c-b89eb993b072": [[-0.237776, 6.2e-05, -0.299781], [0.237776, 0.8733620000000001, 0.299781]], "6ac7a87f-1c90-4bf0-8195-504538d3cbdb": [[-0.335959, -0.000843555, -0.33596], [0.335959, 0.328419, 0.33596]], "787de2ad-7ad3-4b6d-95f9-da9d3554ad56": [[-0.253597, 0.0, -0.253597], [0.253597, 0.706905, 0.253597]], "49220bc6-1ae5-401b-b35e-3c3c00bfb935": [[-0.49100299999999997, 0.0, -0.348316], [0.49100299999999997, 0.37255299999999997, 0.34833]], "9fb1e141-de8a-4b4b-8db8-abaa38eacb9a": [[-0.9999379999999999, -2.4844400000000002e-08, -0.20800000000000002], [0.9999379999999999, 0.490001, 0.20800000000000002]], "7ad112f4-24de-4fff-9571-115b3d70bff4": [[-1.8422900000000002, -0.00063488, -0.802869], [1.84226, 0.838394, 0.8038630000000001]], "78b78ae1-7363-42d6-9d92-3e435563b8aa": [[-0.630487, 1.52588e-08, -0.2281], [0.630487, 0.853223, 0.2281]], "a419b5a4-4bfe-4e04-a3f3-7c7e3e9fcd17": [[-0.300033, -9.40266e-18, -0.211594], [0.300033, 1.08551, 0.211594]], "c7208e3c-691e-4441-bc94-2527899d7bf2": [[-2.323, 8.2416e-18, -0.164404], [2.323, 1.44883, 0.16444299999999998]], "df988c03-2697-411b-be30-0193fb3df1d8": [[-1.27207, -2.8421700000000003e-17, -0.45368200000000003], [1.27211, 0.913783, 0.454115]], "6f091168-eacd-4693-b37d-94abbaa340be": [[-0.972063, 5.880770000000001e-17, -1.0822100000000001], [0.974473, 1.63924, 1.08249]], "2d97a5e7-75a3-42d6-ba9f-545d15ac7a0c": [[-0.420524, -0.000132386, -0.44634700000000005], [0.420552, 0.7548569999999999, 0.446591]], "4fed340e-6d64-4328-ba85-d0152a1b7f36": [[-0.304449, 1.52588e-08, -0.200645], [0.304449, 0.742154, 0.200646]], "b8342d3d-3c26-4b8c-9415-dd7d8bcca544": [[-0.7897329999999999, 1.6e-05, -0.445888], [0.791647, 0.772635, 0.445888]], "41480acb-02de-49d6-87dd-0b39aa5cb32a": [[-0.274543, 0.0, -0.252879], [0.274543, 0.648182, 0.252879]], "43972619-2408-442b-afac-c0e0f51b344c": [[-1.6675399999999998, -0.000616395, -0.830376], [1.6664400000000001, 0.697354, 0.828468]], "1b6ecc74-a53f-4130-9435-6945256ec225": [[-1.424665, 0.0, -0.507885], [1.424665, 1.010152, 0.507894]], "bfea3860-6588-4034-8cae-12d94b4df59f": [[-1.285071, 0.0, -0.438282], [1.285071, 0.867573, 0.438282]], "6b71c44d-2f9e-4747-8c4e-b3c834a907be": [[-0.315, -4.57764e-08, -0.245], [0.315, 2.08, 0.245]], "2b9af779-a73d-4f37-8d62-4a537bd041be": [[-0.29973, 0.0, -0.300022], [0.29973, 0.10066000000000001, 0.300022]], "610419be-6a45-462b-852e-f76413e99dad": [[-1.2839599999999998, -2.63709e-09, -0.540591], [1.2842799999999999, 1.05343, 0.540741]], "d7810383-c7d5-4582-a311-35d4d779bb2d": [[-0.766309, -1.2185199999999999e-17, -0.21100000000000002], [0.766309, 0.765088, 0.21100000000000002]], "ee82b952-3691-442a-8fc2-b7f3e520a283": [[-0.648219, 0.000248, -0.421346], [0.6487040000000001, 0.412114, 0.421345]], "505114d5-c069-4a99-9ddb-10335671caa0": [[-1.69, 0.0, -0.21], [1.69, 1.2, 0.21]], "6b2ff6b4-f90c-45ca-ba14-3406bba8457f": [[-1.41903, -0.000645303, -0.275496], [1.41903, 2.01358, 0.275495]], "4832fe88-10f4-485b-b030-ea50af4706ef": [[-0.27291699999999997, 0.0, -0.27291699999999997], [0.272905, 0.58611, 0.272852]], "3f546069-dc34-425c-87d0-f1cc1f858a5c": [[-0.402531, -0.00203985, -0.40407899999999997], [0.402531, 1.2057, 0.40407899999999997]], "715dbb68-50b3-48ad-81b7-03177b7015a1": [[-1.20885, 8.54023e-11, -0.21537299999999998], [1.20885, 0.498892, 0.21537299999999998]], "487b28a6-b0ba-425c-bab9-23f1fa3b24eb": [[-0.381539, -0.00018230799999999998, -0.485568], [0.381475, 0.902438, 0.486305]], "2352f6ec-4d3a-4850-9bc9-dd10a67fefa5": [[-1.08388, -1.14441e-08, -1.0943], [1.08583, 1.54339, 1.09569]], "c41efea1-9cab-4ce0-9189-c784f19a4da7": [[-0.83521, -3.9794799999999994e-05, -1.05441], [0.835515, 1.18272, 1.05437]], "94e8c062-c563-467c-be7f-a333df1b0bad": [[-1.67497, 1.492e-08, -0.224723], [1.67497, 2.4, 0.225259]], "6a7eeddd-0155-4b5b-86ac-67e6a6ca9e39": [[-0.470564, -0.000585624, -0.470469], [0.470586, 0.934931, 0.470619]], "032f82f5-ffc8-4240-9545-ec5311eaf01b": [[-0.276079, -1.1634000000000001e-18, -0.275866], [0.276074, 0.533795, 0.276075]], "2a6200a8-d265-4c47-8e23-bab584b1e4a2": [[-1.3772, -8.83015e-05, -0.5814739999999999], [1.37726, 0.854342, 0.581716]], "42de14d1-7d7e-35c9-ac44-fccac9cf19ba": [[-1.0816729999999999, 1.3e-05, -0.443566], [1.11899, 0.8503189999999999, 0.496764]], "9e665ed7-28b0-4809-8898-35d291d0b798": [[-1.02038, -1.92856e-17, -0.337156], [1.02038, 2.36388, 0.337155]], "e0ee334f-2d46-49d5-8d76-270715ec8cbf": [[-0.387871, -1.05424e-17, -0.196411], [0.387871, 1.01414, 0.19682200000000002]], "021998d6-2d2d-40d4-ba50-888a0bda1ca4": [[-0.38908099999999995, 6.44073e-05, -0.44034999999999996], [0.388976, 0.690209, 0.44013599999999997]], "01ccb00d-2cc9-464e-a250-42adbf4eb646": [[-0.243635, 0.0, -0.24388100000000001], [0.243635, 0.252508, 0.24388100000000001]], "002a0c8e-8a56-4b38-a6c8-75c339d48f46": [[-0.765342, 0.0, -0.548453], [0.765342, 0.479159, 0.548453]], "d12201e8-4ad6-4833-b225-e788a51f561c": [[-0.201081, 0.0, -0.23099499999999998], [0.201081, 0.6921120000000001, 0.23099499999999998]], "b8338829-e387-4a39-95cb-7e2100dafb1e": [[-0.9008369999999999, -8.358500000000001e-17, -1.365], [0.902234, 1.229, 1.365]], "fa3f26ed-dc84-4819-b5fa-9b4e6c664e6b": [[-0.315, -9.71395e-18, -0.19635999999999998], [0.315, 0.513, 0.19635999999999998]], "816680d7-7bc7-4264-b451-33c24f0a2174": [[-0.732984, -1.2282799999999999e-17, -0.238043], [0.732984, 0.7338089999999999, 0.238043]], "610c2c7b-7558-4e43-9b25-7588b4feeae4": [[-0.589745, 0.000561, -0.468716], [0.5890679999999999, 1.111768, 0.468717]], "082f1f77-d72e-431e-9ece-99a6db089a70": [[-0.379167, 0.0, -0.402137], [0.379157, 0.8717199999999999, 0.40226]], "38b27b79-f6e6-4ef7-b525-e3c6b6de2619": [[-0.284986, 0.0, -0.284971], [0.284986, 0.48120199999999996, 0.284971]], "1b872790-c442-47d7-9cfb-f7ac71468a9e": [[-0.769129, 0.000456, -0.45482300000000003], [0.769129, 0.6878449999999999, 0.45482300000000003]], "86244b09-0b05-4965-948c-57eb9a38c721": [[-0.850235, -5.5308500000000004e-17, -0.9454940000000001], [0.850001, 1.51119, 0.9450700000000001]], "aed9e91e-bd31-4699-8d10-bfb354af6ee1": [[-0.241942, -9.99201e-18, -0.143199], [0.241942, 0.475987, 0.143199]], "2767c5cc-24b2-341c-b76a-e0f5c2153b0e": [[-0.4635, -0.0002, -0.47909999999999997], [0.4635, 1.0756999999999999, 0.47909999999999997]], "7eb0d057-2b98-43b7-90aa-077205261a26": [[-0.9810800000000001, -0.0, -0.390178], [0.9810800000000001, 0.717609, 0.390178]], "2e4a41c1-dcc6-48f5-87da-8216011f697c": [[-0.592066, 0.0, -0.594622], [0.592066, 0.351201, 0.594622]], "610e35a5-595b-4919-91bb-de99ef9de8b8": [[-0.220769, -8.85764e-05, -0.214599], [0.22077000000000002, 0.699127, 0.21427]], "0e29e910-61d9-4261-8942-a1728d211847": [[-0.17958400000000002, 0.0, -0.182012], [0.179573, 0.449054, 0.182012]], "557b3fd4-da5e-4503-9592-ca65a9648a1e": [[-0.526861, 1e-06, -0.425755], [0.526861, 0.766211, 0.425754]], "7a080daa-c02f-43f0-8394-5c943d0f68c9": [[-1.719914, 0.004683, -0.984105], [1.719914, 0.759917, 0.984055]], "c4217943-56b1-42e6-a004-65b114ade8b6": [[-0.370323, 0.0, -0.386514], [0.370323, 1.189099, 0.386514]], "1d2cdf9a-ae99-4ef7-b855-5ccd499863d3": [[-0.484554, 0.0, -0.484554], [0.484554, 0.338518, 0.484554]], "3bfeed24-ef65-45ec-b93f-3d1815947b02": [[-0.385927, 0.0, -0.385929], [0.385927, 0.394242, 0.385929]], "5159ffde-a7c7-4d2c-8b07-8c4d088487ee": [[-1.06523, 8.87109e-08, -1.16771], [1.06527, 0.949463, 1.16777]], "6bd9a579-43a2-4ed9-a217-0123eb3f3757": [[-0.338581, -0.00035586, -0.44518599999999997], [0.33653799999999995, 0.7739449999999999, 0.44996]], "82e03ea5-48b3-410f-bf76-6b9129c2f215": [[-0.8109820000000001, -4.0853999999999996e-08, -1.01909], [0.8109820000000001, 1.37562, 1.01909]], "3757821a-3581-48d3-8cac-46a638b84482": [[-0.29325500000000004, -6.17291e-07, -0.135071], [0.293415, 1.07219, 0.135071]], "14132991-8e49-45ed-82d0-f48ba5903b8f": [[-1.317516, 0.0, -0.536333], [1.317248, 0.788598, 0.536235]], "5c974638-7af2-431f-aa1c-57044deacf96": [[-0.757134, -7.40572e-18, -1.25538], [0.757134, 0.9462609999999999, 1.25538]], "1b96c8bd-7425-4bf9-b00c-ff7c0ad7af5d": [[-0.407238, -3.5839499999999995e-08, -0.243424], [0.407238, 0.919765, 0.243553]], "ff5b83c7-ca6b-451a-94e7-8e01980a008a": [[-0.504308, 0.00110013, -0.503379], [0.502866, 0.71081, 0.500479]], "b2547f60-2576-4001-8cf7-831fedeed1ce": [[-0.649672, 3.8147e-09, -0.350004], [0.6496810000000001, 0.349197, 0.350005]], "e4700dc9-291e-493b-af80-524329c405fd": [[-0.156975, 0.0, -0.15698499999999999], [0.157061, 1.78, 0.15698499999999999]], "cf94412f-a729-4247-9fb7-79a8678cff25": [[-0.215, -1.28001e-17, -0.219959], [0.215, 0.49776600000000004, 0.219959]], "dbfc3a53-2aab-403b-95b7-ad0d133ab58c": [[-1.4308, 1.2623600000000001e-17, -0.20616], [1.4308, 2.30754, 0.20616]], "2ab65a52-51ca-3e2f-b1ac-315e93f40773": [[-42.1383, -0.0073, -46.4139], [42.1383, 106.874, 47.3363]], "40a8b7e3-1476-4eb7-b832-2300ad65b0e2": [[-1.14274, -0.000107041, -0.564501], [1.14354, 0.881524, 0.5643889999999999]], "c9cf2b56-d3c4-4a47-949a-4cd80f8dfdaf": [[-0.912536, -1.26037e-17, -0.246294], [0.912536, 0.462651, 0.246294]], "20ae6ca9-6eb4-4f2c-9606-82c7ad1074b0": [[-0.923054, 0.0, -0.233567], [0.923053, 2.190192, 0.233597]], "09490581-f56e-4031-924b-176429ba173a": [[-0.993456, -5.993500000000001e-17, -0.979329], [0.996784, 1.8549, 0.9827379999999999]], "7dfc9af8-27f3-4d65-9c56-e5f84b8a0d6f": [[-0.532282, -0.00193462, -0.601963], [0.53229, 0.867701, 0.601849]], "469b4de1-956c-437f-a1d8-14163b807e49": [[-0.21089200000000002, 5.72205e-09, -0.21062899999999998], [0.210642, 0.423542, 0.21062899999999998]], "f37307a9-0026-4979-a238-10e701982c59": [[-0.281804, -1.90735e-09, -0.205614], [0.281804, 0.543925, 0.205614]], "27059911-89f4-3e78-a511-4c9b8cf51fb3": [[-0.252954, 0.000247, -0.24641200000000002], [0.257616, 0.8641530000000001, 0.265119]], "1c648cfd-6eca-4a84-af58-b62a3a4d173a": [[-0.311156, 0.0, -0.301916], [0.311156, 1.019602, 0.301917]], "08f24535-b7a8-48c7-9790-9323adbdbdf8": [[-1.7643799999999998, -1.49447e-17, -0.255934], [1.7643799999999998, 2.67, 0.255934]], "2bf217bb-d8d0-3693-a06f-9bec9a3ac8f6": [[-0.226008, 0.0, -0.266979], [0.223933, 0.807577, 0.26661]], "9b5bbf71-3ba0-40b0-86e7-b295b23a5e86": [[-0.372093, -9.75562e-18, -0.343336], [0.37223300000000004, 0.44992, 0.343501]], "63c6f1ac-fa9c-493a-a43d-7c4b9d8dcffa": [[-0.267364, 3.6016099999999996e-05, -0.22781099999999999], [0.266977, 0.5787530000000001, 0.22784300000000002]], "4a76c521-b125-405e-850d-9a185e8cc6a2": [[-0.361635, 0.0, -0.350279], [0.361635, 0.915586, 0.35062]], "4f247470-b328-4044-aa05-4288d8e6e3c5": [[-0.356832, 4.71802e-05, -0.225768], [0.356772, 0.839889, 0.225767]], "01244633-0eab-43c7-af22-aab45596262c": [[-0.378446, 1.1000000000000001e-05, -0.648151], [0.421915, 0.708878, 0.648151]], "54b533c9-fbc1-4c08-b7b6-845a2bbbafbe": [[-0.23499099999999998, -1.54658e-05, -0.225929], [0.23499099999999998, 0.533166, 0.225903]], "ff2c5a07-f913-40c0-9a0a-51a01b8f1963": [[-0.45000300000000004, -8.59161e-18, -0.16053499999999998], [0.45000300000000004, 1.8, 0.16069299999999997]], "eaf67de4-9ff4-44ca-919f-7afe10ca560d": [[-0.284754, -0.000214437, -0.272088], [0.284661, 0.782983, 0.27212]], "2d49b92c-b732-4f71-9f07-57b29c7f30c4": [[-0.644652, 6.10352e-08, -0.263921], [0.644095, 1.44617, 0.26522]], "f938d56d-3c3d-4ff8-a42c-d0d474d38e39": [[-0.233519, 1.19059e-17, -0.231017], [0.233737, 0.42694699999999997, 0.23044699999999999]], "93a7847f-b482-44c9-8bf4-0417d174f4a7": [[-0.240139, 0.0, -0.262731], [0.240139, 0.471617, 0.262731]], "796eb74e-4df4-448b-807b-6539c7aa49e4": [[-1.62179, -5.0026000000000005e-05, -0.707363], [1.6220599999999998, 0.737716, 0.707247]], "71a24a70-356a-41ab-a371-4d761791edb7": [[-0.319415, -0.000314653, -0.29215599999999997], [0.319434, 0.54119, 0.291432]], "85aeff7b-2ab2-41b2-86e2-c41e652750b4": [[-0.297563, -8.95422e-13, -0.296878], [0.297557, 1.0844, 0.296872]], "315e89f4-775f-44b0-88c7-3ff00cd42320": [[-1.166453, 0.000302, -1.1204399999999999], [1.166453, 1.039934, 1.121072]], "9b12433e-2224-46fb-8833-4bb9fc2ddd96": [[-0.355066, -0.000278731, -0.456528], [0.355878, 0.9334910000000001, 0.45667]], "a43769e4-9411-496e-96b9-e7a47a0c2036": [[-1.0971, -8.56785e-06, -0.594894], [1.0971, 0.779423, 0.594894]], "1b5f244d-7a2f-4087-8e7b-3a8f8369cb08": [[-0.703646, 1.41105e-17, -0.261452], [0.703646, 0.9997060000000001, 0.26165]], "8b8b9a9a-2221-4715-98bc-2b2f206db088": [[-0.29648800000000003, 0.0, -0.297074], [0.29648800000000003, 0.6311829999999999, 0.297074]], "81b674a0-9c41-4c5b-9bed-241b997a7111": [[-0.26409, 0.0, -0.322005], [0.26409, 0.44744100000000003, 0.322005]], "80b12c00-811b-4be4-a070-de7e56081994": [[-0.280219, 6.892680000000001e-08, -0.151668], [0.280222, 0.8524039999999999, 0.151787]], "08aacb04-7ef4-4881-8d0c-c2b05092abed": [[-0.561134, -0.000156081, -0.483673], [0.561169, 0.8192520000000001, 0.484099]], "0911a15e-85ba-450a-950f-d4251bae7aa1": [[-0.23078800000000002, 5.5983e-09, -0.234695], [0.23078800000000002, 1.526, 0.234695]], "c1ee0255-52ba-4cfd-b3bf-c20906fac5b0": [[-0.267137, 9.400000000000001e-05, -0.275968], [0.267455, 0.984815, 0.275731]], "e48d2ba1-64fe-435c-967b-4c5bb2d7df59": [[-0.210043, -0.000444118, -0.20999400000000001], [0.210107, 0.8308639999999999, 0.210211]], "505fa793-9088-41e8-8a5f-a897487f2859": [[-0.299721, 5e-06, -0.273406], [0.299727, 0.667138, 0.272824]], "1f83cab1-6800-4c47-a6a2-2530b1c84dad": [[-0.289466, 2.49818e-08, -0.21688400000000002], [0.289466, 0.642058, 0.21688400000000002]], "4b1b7c1e-3762-498c-aecd-b5eef1cea2b3": [[-0.6922119999999999, -5.6615e-05, -0.251442], [0.692209, 1.8196700000000001, 0.251573]], "60237fa4-4e5e-446e-ab6c-2958b9b7e487": [[-0.308487, -9.446539999999999e-18, -0.194237], [0.308487, 1.4450999999999998, 0.194238]], "34f53bae-f817-45d7-b1d1-8b41f3265ee3": [[-1.6357400000000002, -1.81899e-15, -0.22796500000000003], [1.6357400000000002, 0.647242, 0.22796500000000003]], "eaa65343-42a3-4abd-a234-89a4ba1d40bc": [[-0.356091, -1.8417999999999999e-06, -0.356091], [0.356091, 0.44706, 0.356091]], "0d826263-1fce-4f30-9031-7dfc250c7a6e": [[-0.644256, 0.0, -1.070402], [0.644256, 1.197159, 1.070403]], "b51031f3-d86b-4c52-a1f3-0917aa2e0844": [[-0.24132, 0.000117, -0.24219000000000002], [0.24132, 0.6682340000000001, 0.24219000000000002]], "c63fd353-cd8d-461c-99e4-a80a83fc00b3": [[-0.7471420000000001, -7.10332e-05, -0.336706], [0.7471420000000001, 0.479671, 0.33658299999999997]], "7055818d-8795-4efc-8be1-a9760267def1": [[-0.536625, -4.31183e-05, -0.562196], [0.536081, 0.957101, 0.5622659999999999]], "a637fc0e-230c-47cf-ae89-ced218c4f4f0": [[-0.502753, -0.000130647, -0.0748701], [0.502753, 0.7167870000000001, 0.0749644]], "eaad2321-5f98-4e47-ae8f-0a0748e0f6d5": [[-0.32771900000000004, 0.0, -0.453872], [0.32771900000000004, 0.8348260000000001, 0.453872]], "506d43c6-854f-45ae-aa86-809e0512fa2a": [[-0.32499, -3.15989e-07, -0.270383], [0.32500700000000005, 0.7182590000000001, 0.270365]], "fc706327-7820-4829-b0e1-e029c807cebd": [[-0.201071, 0.0, -0.198017], [0.201071, 0.455252, 0.198017]], "214c4c33-af26-45c2-ae83-d32a433ce543": [[-0.721785, 1.01582e-07, -0.297834], [0.721692, 0.866947, 0.297927]], "1b457472-4a8f-4712-b172-3b8224383c69": [[-1.04205, -1.84138e-17, -0.318555], [1.04205, 2.04921, 0.31854299999999997]], "28936363-4670-4add-8ce8-2bbb98d5c844": [[-0.6739839999999999, 5e-06, -0.249591], [0.6739539999999999, 0.768574, 0.249585]], "835503b6-673a-454c-bea3-85f52d24bdd3": [[-0.848439, 0.001205, -0.45329099999999994], [0.848439, 0.9154829999999999, 0.45313899999999996]], "11710d4f-b5a6-4f42-9149-e6d5c898bdf4": [[-0.25015, 0.00017500000000000003, -0.254579], [0.250595, 0.877804, 0.254754]], "f2e08623-4743-47d7-91b7-4c015aa1fdc0": [[-0.319377, 0.0, -0.35429900000000003], [0.319377, 0.7458159999999999, 0.35429900000000003]], "75140bce-2f13-4c9e-8d76-1747163d7232": [[-1.38695, 0.0, -1.11533], [1.38695, 0.974902, 1.115231]], "511658a2-d60b-4d71-8f5c-40f1f4306474": [[-0.4, 1.12669e-17, -0.234938], [0.4, 1.30507, 0.234938]], "009070c8-1246-4d65-8133-27cde12e274e": [[-0.8469190000000001, 0.0, -0.211501], [0.84717, 1.897189, 0.2115]], "afcf6dfd-730f-4ba1-b8c2-158804fb6886": [[-0.25001, -1.20766e-17, -0.216675], [0.25001, 0.45835099999999995, 0.216675]], "0893af5b-1c13-4996-b1ad-78329f5c2fd2": [[-1.144031, 0.0, -0.482755], [1.14403, 0.8355790000000001, 0.482755]], "26ca941d-fb40-4f85-87a3-3a4094ead91c": [[-1.03573, -0.00702821, -0.791515], [1.03609, 2.06176, 0.7941360000000001]], "5ee9858c-f352-4c66-befc-695b65e5457a": [[-0.34714300000000003, 0.0, -0.373921], [0.347651, 1.0360209999999999, 0.374211]], "032c235f-47b4-4827-a9d8-77230cbffd1c": [[-1.39292, -2.5022e-11, -0.300822], [1.3925800000000002, 2.4211, 0.301092]], "2ea96c19-76ad-4b78-98f8-a3123334b5cc": [[-0.249388, 1.42467e-17, -0.250234], [0.24938500000000002, 0.361242, 0.250204]], "a00c3f8e-1cbc-4df0-a9dc-899c71950ab3": [[-0.600778, -0.00181623, -0.22472899999999998], [0.6010220000000001, 1.09696, 0.22443000000000002]], "f226d593-9d95-407c-a911-0c73bfad50bf": [[-0.26368400000000003, 0.0, -0.212643], [0.26368400000000003, 0.490299, 0.212643]], "4dbdbee8-8445-440e-858f-90a0a045d212": [[-0.279826, 0.0, -0.280195], [0.279826, 0.580499, 0.280195]], "3c795266-3ccf-4a34-a60c-c5aefe4e4784": [[-0.995406, -1.33963e-17, -0.238911], [0.995406, 0.417982, 0.238911]], "9190da8a-beca-4bd6-ab42-0a0519a3cec7": [[-0.0777693, -8.702279999999999e-09, -0.0777693], [0.0777693, 0.89886, 0.0777693]], "78b061ec-31ea-3227-b8b4-d10dd26ba7d4": [[-0.722616, 0.001099, -0.356943], [0.722637, 0.76047, 0.363003]], "50e6b76e-6c76-46d1-b8cb-5d1af3e98984": [[-1.09057, -2.82695e-05, -0.204557], [1.09057, 2.47713, 0.204557]], "7d0a3b31-7d66-4d09-9761-647938bf43a6": [[-1.3725, 1.83332e-06, -1.4042400000000002], [1.3725, 1.3792, 1.40404]], "142b9425-e37f-433a-b7d9-71586244d638": [[-0.429627, 4.04943e-06, -0.459309], [0.429778, 1.04383, 0.45927300000000004]], "a87a9ae8-e548-488e-8769-b4bc530b35fa": [[-0.34958500000000003, -5.50648e-08, -0.325114], [0.350615, 1.0418, 0.32414299999999996]], "8b64cd69-2f4d-4b26-98e1-96dbd1e370fb": [[-0.5412210000000001, 0.0, -0.541436], [0.5412210000000001, 0.5911740000000001, 0.541436]], "fc74e757-6216-4093-90ad-2fbcc0c2a6e5": [[-0.22616499999999998, 0.00017769, -0.282594], [0.22578700000000002, 0.856502, 0.282927]], "916105d3-57be-473d-86f1-3235e0bb831e": [[-0.48621000000000003, 0.0, -0.43408599999999997], [0.48629199999999995, 0.809268, 0.434245]], "2286f5b7-d882-4c44-a354-e2d795eb7893": [[-0.40185200000000004, 1e-06, -0.384033], [0.40185200000000004, 0.713542, 0.384086]], "d9f7d4e3-3c09-40e9-9b3e-7d39ee79ef88": [[-0.855548, 0.000373, -0.30014399999999997], [0.855122, 0.455566, 0.299961]], "f91cecf2-e5ee-43f9-b89c-ca8315ddeda1": [[-0.305934, 0.001148, -0.329565], [0.305934, 0.733079, 0.33071399999999995]], "ee44f81c-7f0a-442e-ab98-ba579b52e325": [[-0.347776, 0.0, -0.347738], [0.347776, 0.486034, 0.347766]], "141b9d01-93b9-42ac-bc26-4fbb81c27799": [[-1.16016, -1.65279e-17, -0.33008000000000004], [1.16017, 2.51756, 0.33009]], "5ea6ea24-0f4d-406d-94f9-b04bc1ede3ef": [[-0.7641849999999999, 0.0, -0.317764], [0.7641849999999999, 0.662197, 0.317629]], "007d0585-9b54-4918-87f0-38da23ddecd2": [[-0.425634, -3.5380400000000003e-17, -0.442189], [0.42568100000000003, 0.8344799999999999, 0.442153]], "288ac6f4-47ef-418d-87d0-6cc1365a98f4": [[-0.24634799999999998, 0.0, -0.21255], [0.24634799999999998, 0.49711, 0.21255]], "58fb4bae-3c09-43f8-9b61-42799c0edfe9": [[-90.0, 0.0085, -12.0], [90.0, 105.0085, 12.0]], "5befc930-7aeb-4271-b007-ad9b0b22bec3": [[-1.3894440000000001, 0.000401, -0.462543], [1.389496, 0.7659590000000001, 0.462727]], "7f0315f9-2cf5-497e-9bee-f52948484c08": [[-0.5458310000000001, -0.0011794, -0.55508], [0.54574, 0.356235, 0.555172]], "a7397c65-a066-46de-b9fa-49a7f2d45a13": [[-0.249941, 0.0, -0.256066], [0.250054, 0.751665, 0.25607399999999997]], "07b75cfa-1b61-4b7a-8a32-223ad4c18409": [[-1.53375, -2.66462e-17, -0.9418040000000001], [1.53375, 1.8356000000000001, 0.9418080000000001]], "0da7563e-ddd6-4e67-8e4f-e5f7f7772108": [[-0.252871, 5.97888e-08, -0.252905], [0.252955, 0.259911, 0.252956]], "487e3552-1f49-3925-8993-967b148de273": [[-0.40055300000000005, 0.0, -0.40055300000000005], [0.40055300000000005, 0.716168, 0.40055300000000005]], "8139b26d-01ad-42de-99d7-cb23b9e4be93": [[-1.64145, -7.975279999999999e-05, -0.8833620000000001], [1.64186, 0.760033, 0.884061]], "de279c41-9886-4948-bccc-d6bb7fc840c8": [[-0.8, -1.22159e-17, -0.20149999999999998], [0.8, 1.7570500000000002, 0.20149999999999998]], "7a138300-14a5-4c61-a5cb-5c0cd25ed0ef": [[-1.6448500000000001, -1.08565e-07, -0.338108], [1.6448500000000001, 2.69382, 0.338109]], "6bb592ac-81c2-4df6-8f2e-ee2c42de67cc": [[-0.398096, 0.0, -0.232301], [0.398096, 1.716907, 0.232301]], "5a2bd3ba-50ca-4bae-95a1-81f1151f0d3b": [[-0.43234, 0.0, -0.43717399999999995], [0.43228099999999997, 0.819709, 0.437053]], "94dc7b45-f5eb-40fa-85ca-63eb6519f883": [[-0.137735, -2.31597e-06, -0.129688], [0.137729, 0.8312930000000001, 0.129689]], "b9db14f3-27a1-4325-b212-9bf82352d66c": [[-0.315, -1.26088e-17, -0.225106], [0.315, 0.654556, 0.225104]], "58fabe3e-ceb0-4886-a702-45a948d0af2e": [[-0.249996, -2.0206799999999997e-18, -0.24999500000000002], [0.24999500000000002, 0.6590260000000001, 0.249996]], "4f7c6596-347d-49cc-8f05-c001ed654955": [[-1.307579, 2.1e-05, -1.329289], [1.3067900000000001, 1.3163589999999998, 1.329348]], "c50d2aeb-6229-412f-9089-9580934f1dcd": [[-0.331383, -0.00023787300000000002, -0.330584], [0.33220799999999995, 0.556183, 0.33048]], "5ce1f588-2a65-47c9-8f5c-d1d17d17dd0d": [[-1.3896700000000002, -2.90882e-08, -0.339673], [1.3896700000000002, 2.3614599999999997, 0.339673]], "34b24e1e-c3c1-4a48-9305-8143aac5f81b": [[-0.423574, 8.7e-05, -0.390436], [0.42335900000000004, 0.728284, 0.390117]], "44be76b3-f4c8-4e23-a178-0768398674eb": [[-0.45839599999999997, -0.0, -0.490197], [0.45839599999999997, 0.8978860000000001, 0.490197]], "0b9f1125-92d6-4be2-9503-22200d4c7e16": [[-1.41808, 7.662959999999999e-19, -0.825543], [1.41757, 0.724219, 0.825371]], "09e66e82-b652-31df-aecd-f3c468264c62": [[-0.423973, 0.000665, -0.573838], [0.43778300000000003, 0.91762, 0.573653]], "674ec9db-2450-4514-9542-9646ce170098": [[-0.57813, -1.26305e-17, -0.25312999999999997], [0.57813, 1.9611699999999999, 0.25312999999999997]], "7a1d1b3b-4c78-4edc-8a11-c9a3f962e97f": [[-0.425019, 0.0, -0.16152999999999998], [0.425019, 1.8899860000000002, 0.16152899999999998]], "ef3feea3-635f-477d-b3e2-9f8c29172dde": [[-0.1821, -0.00010869699999999999, -0.183964], [0.18152200000000002, 0.351775, 0.18354399999999998]], "013e03b1-98e4-417c-9609-b132c92094fb": [[-1.22899, -2.4704000000000003e-05, -0.469594], [1.2290999999999999, 0.6798480000000001, 0.468775]], "39412e5f-0053-4a56-b9ea-63af68632e20": [[-1.3274940000000002, 0.0, -0.288893], [1.3274940000000002, 0.713439, 0.288894]], "ae9bafa1-399c-4a02-8815-2400a4d6ba0f": [[-0.5431539999999999, -3.27606e-17, -0.53708], [0.5431539999999999, 0.554541, 0.53708]], "091c331f-557e-4c5e-b084-8eb0d938d298": [[-0.124, -2.4111800000000002e-05, -0.122615], [0.124212, 0.700535, 0.122615]], "a6f5eca0-23a9-4741-9db1-07591845b24b": [[-0.806513, 0.0, -0.41180100000000003], [0.8064610000000001, 0.749305, 0.41180100000000003]], "7b044f42-bec9-41d5-86ee-636f870b7fac": [[-0.422512, 1.50068e-17, -0.253417], [0.422512, 1.85838, 0.253417]], "1ec3563c-89d9-4a09-89ef-a1f9ca23b007": [[-0.594299, 2e-05, -0.463146], [0.594299, 1.117018, 0.46329]], "1849c9f0-fb98-4f43-932a-78e6595e481f": [[-0.236491, 0.0, -0.226808], [0.236491, 0.43379100000000004, 0.226808]], "b1833d8e-5de3-4f85-9eb6-42b4767c53af": [[-0.255053, -0.0, -0.251403], [0.255053, 0.7224349999999999, 0.251403]], "240da6e5-af4c-420f-adbe-cba77ab1408d": [[-0.34999600000000003, -4.75199e-08, -0.349946], [0.349994, 0.445035, 0.349976]], "4a8b2e50-451e-4ee1-a509-697f87481545": [[-0.413316, -0.000280345, -0.412247], [0.413662, 0.967884, 0.411877]], "0aaec758-71e9-4087-86d1-bc6df4e4b262": [[-1.63892, 0.00032, -0.505698], [1.63892, 0.949231, 0.505898]], "4bae3bd1-cd56-4520-92df-5da0ff28e7b9": [[-1.22306, -1.14504e-17, -0.25589300000000004], [1.2230400000000001, 0.565705, 0.25585]], "ce1488f3-914e-4354-9038-4a62d5470296": [[-0.597127, 5.6641e-08, -0.397072], [0.596677, 0.275902, 0.39791200000000004]], "896ae8f9-c09d-4d09-83df-d78b46c5ab12": [[-0.54276, 0.0, -0.12659], [0.54276, 0.9690489999999999, 0.12659]], "f1fba920-4996-4310-aa1a-a0c03ba80845": [[-0.530989, -9.536740000000001e-10, -0.185848], [0.530989, 0.796482, 0.185848]], "93e52a11-6fa9-467e-8da1-95b53e3286bb": [[-0.28420100000000004, 4.4000000000000006e-05, -0.316207], [0.284326, 0.714572, 0.316599]], "57a314b1-d732-43d7-9582-e069737f2f9c": [[-0.310479, 0.0, -0.310478], [0.310479, 0.592662, 0.310478]], "714d9c1d-4274-49da-9637-49ee08455dc5": [[-0.524743, 0.0, -0.249724], [0.524743, 0.7735949999999999, 0.249725]], "2ce68f62-b78c-348d-a267-a090468db8af": [[-0.65, 0.00023099999999999998, -0.65], [0.65, 0.705004, 0.65]], "77fd6f28-1138-42c3-8105-82c0e818ae31": [[-1.2434269999999998, 0.000186, -0.438262], [1.243181, 0.801999, 0.43844900000000003]], "c8851c3a-dd16-425d-a580-ba2fdbe6b7a1": [[-0.841086, -1.52588e-08, -2.18518], [0.8410599999999999, 0.7372799999999999, 2.18518]], "6f90c6a9-f37c-431a-85b5-a74f48149e90": [[-0.79264, 6.06538e-17, -1.02602], [0.79264, 1.4493, 1.0259099999999999]], "c7e5dce4-09b6-4358-8a25-90f1a66d6d21": [[-0.18113600000000002, 0.0, -0.18113600000000002], [0.18113600000000002, 0.48595700000000003, 0.18113600000000002]], "4e98a6a2-3202-42b2-bddd-8e8256214d2a": [[-0.7545109999999999, 0.0, -0.42832099999999995], [0.7545109999999999, 0.601311, 0.42832099999999995]], "13ecac9c-5aaf-490b-80ac-39d8af0890d7": [[-1.3355240000000002, 0.00022700000000000002, -0.47910200000000003], [1.335574, 0.8458870000000001, 0.479028]], "186dc52f-806a-4064-b5a1-f22a95aa17f7": [[-0.5364099999999999, -1.50822e-17, -0.37426200000000004], [0.5364099999999999, 0.9649840000000001, 0.37426200000000004]], "e4b2f668-097d-43c2-b784-27918a8fb6aa": [[-0.194998, -0.0006506789999999999, -0.195959], [0.19598600000000002, 1.4289500000000002, 0.19480599999999998]], "47e57130-9be3-3b91-9dbf-725ae8dad08e": [[-0.253569, 0.0, -0.281465], [0.253569, 0.83203, 0.232242]], "c681bf3b-8279-4548-a509-83801dd79d3b": [[-0.793069, -4.880740000000001e-07, -0.998293], [0.793069, 0.988627, 0.998293]], "1338705a-26de-4b89-808e-687e243b46b2": [[-0.500214, -0.000496353, -0.245972], [0.5008050000000001, 1.71111, 0.24554099999999998]], "6fff3381-4bcb-463d-a558-df4d2d45bf06": [[-0.528123, -0.000168691, -0.43310200000000004], [0.528642, 0.762419, 0.43306399999999995]], "57c01ed5-a5e2-4221-ba84-545d2ddc0c17": [[-0.691589, -2.0292399999999998e-17, -0.336], [0.691589, 2.20843, 0.336]], "3a412bbe-1de1-412e-bb31-d544c5e2eeb0": [[-0.45, -1.03483e-17, -0.25], [0.45, 0.6, 0.25]], "5505368e-818d-449e-95a4-b22fbdf3c97c": [[-0.5273490000000001, 2e-05, -0.321513], [0.5273490000000001, 0.37339, 0.32154200000000005]], "5ab6a9bd-8f66-4a50-9ae1-028566c1ab73": [[-0.207671, 2.3841900000000002e-09, -0.216223], [0.20763, 0.416509, 0.21571]], "007a52b4-27db-4430-b754-4fc5f254e917": [[-0.882902, -1.7370399999999998e-17, -0.356955], [0.882902, 0.928921, 0.356955]], "d6740fcc-1946-4bff-9efa-677f452e2e53": [[-1.0555700000000001, -2.18668e-06, -0.19054300000000002], [1.05549, 0.750907, 0.19080200000000003]], "18bb8a8e-007d-4a10-b723-6023676b5215": [[-0.878926, 0.0, -0.32555], [0.878926, 0.358523, 0.32555]], "33061136-bad0-4ffa-b303-dd8543405dd4": [[-0.280661, -6.07517e-06, -0.216361], [0.28057, 0.70512, 0.216002]], "c194ac17-0778-4248-9d7b-1def29224871": [[-0.250137, 0.0, -0.20017600000000002], [0.250137, 1.2999459999999998, 0.20017600000000002]], "e9624c56-3916-4a15-96d3-5fda56cf0cb9": [[-0.9905329999999999, -2.5695600000000002e-08, -1.2023000000000001], [0.989728, 1.36797, 1.20258]], "286bcbb5-0b8b-47c4-ae14-b5f71d4136e6": [[-0.351852, 0.000162407, -0.36318300000000003], [0.351972, 0.8882599999999999, 0.36315800000000004]], "4fa9fd58-999c-4b46-a0a8-d43719916c41": [[-0.847802, -1.2191299999999999e-06, -1.05261], [0.8486539999999999, 1.00341, 1.05267]], "71f2fc44-a558-4633-88d0-52c66519b966": [[-1.32067, -1.06201e-05, -0.403304], [1.31974, 0.72939, 0.40366799999999997]], "67f94294-ce00-4106-92c5-603858b5a73d": [[-0.344338, 0.0, -0.384507], [0.344338, 0.299501, 0.384507]], "2cdddd47-c27e-4059-ac82-47649c890217": [[-0.8839910000000001, -1.25304e-07, -0.968151], [0.8839919999999999, 0.914431, 0.967679]], "51c9c5ae-72c8-4182-aa8f-ece42a1bc871": [[-0.303964, 0.0, -0.274453], [0.303964, 0.620721, 0.274453]], "71677d07-c6a9-4b1c-95d8-72b60a2435ee": [[-0.7830370000000001, 0.0, -0.44799900000000004], [0.782029, 0.7292069999999999, 0.448082]], "6672409c-e786-42c3-a679-a0a27d1691c1": [[-1.4048720000000001, 0.0, -0.570612], [1.405411, 1.250005, 0.5692499999999999]], "0b618eb2-4a1c-43c4-bee7-205c5a6a08d0": [[-1.0, -1.4848899999999998e-17, -0.2565], [1.0, 0.565, 0.256501]], "66ef4624-3459-4589-9c49-7f0368c467d7": [[-0.278442, 0.000444, -0.278487], [0.278442, 0.590711, 0.278487]], "657d03a0-52ae-4fb0-8a59-b3633a03c2ad": [[-0.750458, -7.40912e-18, -0.16], [0.750458, 0.448901, 0.16]], "1978275c-8e55-49e4-aa8e-ba0c4800d40b": [[-0.370773, 0.0, -0.15515], [0.370568, 1.47867, 0.155928]], "47e1d7cf-034c-43d6-a185-097ee6e5529c": [[-0.984454, -1.6644600000000002e-17, -0.281828], [0.984454, 2.5050399999999997, 0.281828]], "44a785fa-1afe-465c-90ea-5847592b334b": [[-0.20002099999999998, -4.64942e-11, -0.15165900000000002], [0.20002099999999998, 0.429424, 0.15173]], "fe7f9a02-218e-4513-8c34-4e87545af25b": [[-0.545919, 0.0, -0.28890899999999997], [0.545919, 2.14661, 0.28890899999999997]], "e1f69b2f-5ff5-45f1-ba2b-da94a87230df": [[-0.394577, 0.000574, -0.422031], [0.394673, 1.232977, 0.42206499999999997]], "253ad8c5-7934-4546-80d8-261b7158572b": [[-0.304485, 0.0, -0.195], [0.304485, 0.526475, 0.195]], "bee3d6c4-f2ee-474e-bc3c-aeb7eace4177": [[-0.225389, 0.0, -0.175435], [0.225389, 1.050472, 0.175435]], "8c4ad2c8-5ba3-486f-8744-b766058ff974": [[-0.261667, -0.000462553, -0.130971], [0.261535, 0.947239, 0.130848]], "01dc4d95-41d5-4602-a099-10a1ede9303c": [[-0.7818470000000001, 1.40998e-17, -0.248766], [0.7818470000000001, 1.91927, 0.24884399999999998]], "02ffddd9-2746-4cae-8676-82eb2e5bf3ae": [[-1.6837600000000001, -8.10338e-08, -0.514817], [1.6837600000000001, 1.09675, 0.515239]], "789c9d21-22a1-4612-8fd3-90a56644d4aa": [[-0.316405, -8.36301e-06, -0.24137799999999998], [0.316369, 0.500006, 0.241361]], "7ef6c6fc-e7e2-4004-a6c2-5b2522f40b53": [[-0.37176699999999996, 0.0, -0.372249], [0.37176699999999996, 0.903496, 0.372249]], "2f06bfa9-9b25-4800-b7f8-fda04a4f4c6d": [[-0.33287500000000003, -8.354409999999999e-05, -0.32317], [0.332885, 0.698081, 0.323275]], "4da220f3-080c-4ed7-801e-12c264f90c6b": [[-0.771684, -1.67457e-05, -0.763667], [0.7717010000000001, 0.707894, 0.763667]], "5346074f-fb50-4e93-82df-739ea17b7b6b": [[-0.8647849999999999, -2.18612e-06, -0.199492], [0.8647849999999999, 0.6285029999999999, 0.199492]], "f6490401-342f-45ad-a804-f6fb4994d470": [[-1.3076499999999998, 1.08874e-17, -0.178125], [1.3076499999999998, 2.093, 0.177828]], "1a55111c-d745-475c-b3fb-884f7bb102db": [[-1.13416, -3.91572e-08, -0.26709700000000003], [1.13416, 0.63324, 0.26709700000000003]], "056d9c19-ddb8-45d0-bc22-f9c4f0b41962": [[-0.2, -0.0, -0.175], [0.2, 0.44866700000000004, 0.175]], "2714d969-1c6c-4bc6-b5e8-c5f1f1cafec7": [[-0.309254, 0.0, -0.314687], [0.309254, 1.110802, 0.314687]], "e5313b6e-a14f-43ce-9857-68e9ce2c3430": [[-0.412501, -3.2542e-07, -0.411996], [0.412501, 0.400088, 0.411995]], "09379704-5da1-36b4-9eff-3a68424e2d91": [[-144.916, 0.0, -70.0], [145.9344, 75.0997, 70.0]], "c72614b4-2669-42c1-8793-2a8e11d399f6": [[-0.314096, 0.0, -0.288999], [0.314096, 0.5740460000000001, 0.288999]], "c46211a7-2f21-4bed-95ed-30d39ad2a59d": [[-2.100125, 0.0, -0.260008], [2.100125, 2.779999, 0.260008]], "1f7034f1-311c-4f70-b507-7c7eef08c9fc": [[-0.789705, 0.0, -0.425355], [0.789705, 0.531192, 0.425355]], "0da2a2ff-fd2d-3cd3-8dc9-9303c7a80814": [[-40.1621, -0.1686, -39.5894], [38.963, 89.8942, 40.0713]], "e22e6b7c-ede8-4021-a395-16eda100bb70": [[-0.574226, 0.0, -0.5508529999999999], [0.574226, 0.38760100000000003, 0.5508529999999999]], "52614a91-6257-4101-862b-54e4a20b7422": [[-0.147979, 0.0, -0.14805], [0.147979, 0.513583, 0.14805]], "7fd33157-255f-4dc0-afa9-4e1c2b001126": [[-0.650311, -2.83854e-17, -0.46517600000000003], [0.650311, 0.673616, 0.46517600000000003]], "39e1fb36-bcd3-3746-b923-8ede74e69323": [[-35.0, 0.0, -35.0], [35.0, 50.2319, 35.0]], "2c8ea0e4-ec79-424c-a67a-69ecc4dab48c": [[-1.055, -6.10352e-08, -0.150002], [1.055, 2.4, 0.150002]], "6dbf310e-fe19-46f4-b0e4-27d43a44bd16": [[-0.465289, 1.33514e-17, -0.46436999999999995], [0.465289, 0.481021, 0.46436999999999995]], "62892364-2d6c-3264-a4d6-8c50323c25a5": [[-1.0234610000000002, 0.002642, -0.46894199999999997], [1.020334, 1.008629, 0.46845]], "8aa5e2ce-e86c-443a-85e6-56a3fd956b36": [[-0.58, 1.5308e-17, -0.3], [0.58, 2.09965, 0.3]], "e65aa9d3-7f29-4795-80f5-eb47705ddb41": [[-0.386044, 4.882810000000001e-07, -0.38392899999999996], [0.386044, 0.32219000000000003, 0.38392899999999996]], "2cf4b802-21b3-4b94-bc67-a52c86811594": [[-0.238969, 0.0, -0.23370100000000002], [0.23894300000000002, 0.606847, 0.233688]], "658aad90-c413-431a-a577-eff5b6eb0bfa": [[-1.0462, -0.000422814, -0.369704], [1.04644, 0.8420690000000001, 0.369859]], "f8b2d9b1-4eec-43f4-9eeb-d4db35f8be1e": [[-0.125743, -1.52588e-08, -0.125743], [0.125743, 0.7465980000000001, 0.125743]], "7496d387-d436-341a-9f14-eee699ad10ba": [[-0.6858, 0.0, -0.4318], [0.6858, 0.7239, 0.4318]], "82628cee-09f0-472c-9969-e8e492f6ce70": [[-0.233677, 0.0, -0.22969], [0.233677, 0.464277, 0.22968699999999997]], "c02d4213-31f1-4bf5-8290-6d4d5783a624": [[-0.17568799999999998, -6.01726e-05, -0.17569099999999999], [0.17568799999999998, 0.456426, 0.17569099999999999]], "1399ddc7-5db2-4ced-8fd0-9ceb7f5be05a": [[-0.948122, -0.000255198, -0.399259], [0.948455, 0.5935199999999999, 0.399464]], "090f33c7-1f11-4200-8b6a-a44e3ccd8797": [[-0.841307, -0.000690991, -0.257727], [0.841307, 0.65654, 0.257727]], "f3a448fe-ce0e-4aae-a7f7-509baac3406e": [[-0.47786700000000004, -9.67094e-18, -0.208901], [0.47786700000000004, 0.6145689999999999, 0.20892600000000003]], "09d273b4-c8cc-4f51-8cec-68f8838d6bb0": [[-1.0846200000000001, 0.0, -0.425829], [1.0846200000000001, 0.8672920000000001, 0.425696]], "10d53fd0-b0fd-4498-8cdf-41e10a6fc1ac": [[-1.97387, 0.0, -0.971858], [1.97271, 0.88517, 0.971807]], "9fdeef9f-307f-40ae-b546-dea15ebe1bea": [[-0.448442, 0.000123, -0.41607999999999995], [0.448485, 0.845322, 0.41609699999999994]], "619aafec-5d33-4455-92f0-58c07fb3cb50": [[-0.140691, -1.0574499999999998e-05, -0.13411], [0.140736, 0.39583799999999997, 0.133872]], "076e553f-b67d-4b5e-9b0d-a6d4aea3402a": [[-1.02119, -5.4650000000000004e-17, -1.08481], [1.0215699999999999, 1.03196, 1.0847499999999999]], "56346505-d188-4586-a21c-f39b05274562": [[-0.382932, -2.84803e-07, -0.443798], [0.383129, 1.1708, 0.443643]], "f903af41-5cd2-4528-b160-8b0c5f4b88ef": [[-0.269561, -0.0, -0.087407], [0.269561, 0.852947, 0.087407]], "cd458c7a-5d0b-45d9-940f-8971a7b18d51": [[-0.560226, -0.0, -0.573445], [0.560226, 1.061356, 0.573951]], "13031c58-7951-4044-8bc8-9e47cb42742c": [[-0.773533, -7.62939e-09, -0.245493], [0.773533, 0.645143, 0.245493]], "2f247606-3729-4b96-a660-056a9d5bc76e": [[-0.372367, 0.0, -0.41666800000000004], [0.37268799999999996, 0.789918, 0.416873]], "1b87189f-ae27-4b86-949a-84b749caed7d": [[-0.524431, 0.0, -0.524431], [0.524431, 0.351869, 0.524455]], "6d7294dc-7fea-4bd2-9789-a2f26fc6d362": [[-0.517753, 0.0, -0.8801749999999999], [0.517648, 0.514546, 0.880551]], "aa12068b-9f9a-4fb3-8fcd-b70f22249e9d": [[-0.701323, 0.0, -0.397454], [0.701323, 0.769321, 0.397447]], "0158dc1f-f6f4-49eb-98db-ceee9c737a74": [[-0.5797209999999999, -5.4640799999999994e-05, -0.579683], [0.579709, 0.771131, 0.579768]], "7388a66a-0ef2-4c30-9274-24f575fa4931": [[-0.380608, -3.7715e-05, -0.374722], [0.38063699999999995, 0.16015100000000002, 0.374627]], "18b68a1e-d2c5-31e8-9e29-277af73e71d4": [[-0.376925, -0.00010899999999999999, -0.36166], [0.361207, 0.735438, 0.288792]], "2321f625-3721-495e-a83b-fa2f9fd06430": [[-0.234089, 0.0, -0.23429200000000003], [0.234089, 0.6681910000000001, 0.23429200000000003]], "4deb2b70-fd9e-4c5a-b179-fabf29d90f59": [[-0.8, -1.53084e-17, -0.250037], [0.8, 0.978418, 0.250037]], "995a0f9e-9683-4712-8ffd-a1525171e7ac": [[-0.18698, -3.97749e-07, -0.0194679], [0.186761, 1.0796999999999999, 0.0194679]], "de5d892b-107c-4525-885e-53585305b655": [[-0.793204, -1.02141e-17, -0.188705], [0.793204, 0.709861, 0.18871200000000002]], "6fa46855-32fe-4ff2-9b6b-ee04a823efb9": [[-0.574842, 5.50485e-09, -0.448823], [0.574842, 0.39804, 0.448823]], "e12245bf-0d10-4eee-87a0-ce75ea0ed8bb": [[-0.279864, 0.0, -0.259378], [0.279864, 1.45589, 0.259378]], "7d1fb480-5b4a-45d7-bded-7f4e179337b9": [[-0.446194, 0.0, -0.134397], [0.446194, 0.6607160000000001, 0.134397]], "a6c790cb-a5ff-4a26-9e60-6eb236fbc509": [[-0.8250879999999999, -8.33822e-18, -0.20000099999999998], [0.8250879999999999, 0.466034, 0.20000099999999998]], "0d5bf690-d1fb-4a20-a228-42604c8affdf": [[-0.992364, -5.38883e-05, -1.22523], [0.9924200000000001, 1.0430599999999999, 1.22578]], "c239ca88-897d-4e97-8773-3c01bb87b4f6": [[-0.7037, 0.0, -0.548879], [0.701533, 0.379224, 0.548879]], "d567a5a3-afc6-4d2a-8f7d-9d5614ea3cf3": [[-0.375971, 0.000177, -0.381553], [0.375788, 1.1007259999999999, 0.381096]], "07c11f6f-76ff-4237-b38e-ea55a81ec939": [[-0.634436, -6.8802e-17, -1.13764], [0.634457, 1.35642, 1.13755]], "6ce0a155-6e62-4843-9ce1-91a18bea843e": [[-0.34233600000000003, 0.000621, -0.329227], [0.341645, 0.8021639999999999, 0.329227]], "1072a3d9-aff2-4030-9148-7f1e4aaf15f6": [[-0.794342, 0.0, -0.456372], [0.794342, 0.762, 0.456372]], "22f88d8c-6fc2-4f07-b964-071e2d95d840": [[-0.17354199999999997, 0.0, -0.17354199999999997], [0.17354199999999997, 0.509746, 0.17354199999999997]], "663a12ab-2250-42bd-8fe1-4cefecd798fb": [[-0.719089, -8.893990000000001e-07, -0.249089], [0.719089, 0.919905, 0.249089]], "91874d52-4f31-4c6c-a66f-a0a7dbd3e4a7": [[-0.821126, -0.000793228, -0.22677], [0.821126, 1.11295, 0.22677]], "46ccda99-78ee-4aec-84eb-0618a74fd06c": [[-0.49987699999999996, -5.2758500000000007e-05, -0.224949], [0.49987699999999996, 0.8, 0.224938]], "af93e490-fcca-4484-b64b-c7abeffb6b48": [[-0.367811, 0.0, -0.318585], [0.367811, 1.1398439999999999, 0.318585]], "394c5ecc-1975-4229-8843-6712d06d16cb": [[-0.21583300000000002, 7.62939e-09, -0.215954], [0.215823, 0.460283, 0.215928]], "af24ea63-908b-403d-9568-7c01a680635b": [[-0.216714, 1.2782500000000001e-18, -0.216753], [0.216714, 0.462051, 0.216753]], "dc3da40f-423f-42b3-b6e3-adc0096feaa6": [[-0.24, 0.0, -0.24], [0.24, 0.597855, 0.24]], "a4aa6165-a24c-4646-9589-27e9d26f8951": [[-0.811824, -6.32168e-17, -1.03241], [0.8096840000000001, 1.1103100000000001, 1.0324200000000001]], "abe3740a-c178-478b-936f-0f59b24e77b8": [[-0.194488, -0.000237471, -0.174283], [0.19465800000000003, 0.296209, 0.174364]], "33c25d3a-2758-4fde-936d-a4665a606318": [[-30.0, 3.8147e-07, -30.0], [30.0, 15.7456, 30.0]], "4b679027-5143-42b1-a331-8bac346207ec": [[-0.303832, -1.4597499999999999e-05, -0.304011], [0.304043, 0.880239, 0.30375399999999997]], "18bebe48-e3b0-4a88-b2cc-8cebc44e1a36": [[-0.25, -1.29376e-17, -0.266952], [0.25, 0.529945, 0.266952]], "c5ddf01d-ec26-47fd-b7cd-040a398cc12e": [[-0.244909, -0.00013744900000000002, -0.24712599999999998], [0.24491700000000002, 0.731544, 0.246448]], "368d46ff-ea2b-45e2-a119-f0fd6edd5baf": [[-0.456183, -0.00010865899999999999, -0.456183], [0.456183, 0.40287799999999996, 0.456183]], "86048a28-ad43-4957-b37d-2217f0c10211": [[-0.36558599999999997, -0.000141064, -0.48983400000000005], [0.364921, 1.24557, 0.49033499999999997]], "e47ba442-11e4-4016-b9cf-6fc807946d0e": [[-0.287111, 0.0, -0.287111], [0.287111, 0.834458, 0.287111]], "44dd764d-f60d-454a-bce2-03c18653d8a3": [[-1.16031, -0.000302467, -0.455565], [1.16022, 0.7459359999999999, 0.45557400000000003]], "2d382c25-d064-33e9-bf86-0398d169c95a": [[-1.078116, 0.0, -0.471342], [1.093769, 0.694739, 0.46069899999999997]], "9d57ed1c-ba2a-4ec3-a74b-495766e787fd": [[-0.8632380000000001, 2.8999999999999997e-05, -0.411068], [0.863043, 0.854303, 0.41100099999999995]], "23477dce-20f9-340e-bebf-3dfaeb71b6b4": [[-34.6489, 0.0, -39.7023], [36.4957, 76.7016, 41.3478]], "441e1921-ed75-4191-ad0f-397b884d1021": [[-0.43235100000000004, -0.000348549, -0.43211599999999994], [0.432095, 1.0501399999999999, 0.43211599999999994]], "2046863b-b103-395e-bc9b-91cf5ad009c9": [[-0.445705, 0.0, -0.814797], [0.445705, 0.738663, 0.814797]], "144f2bb1-0f02-4d1c-9627-fae53fc75406": [[-1.97387, 0.0, -0.977337], [1.97271, 0.8845770000000001, 0.971807]], "56f8d695-62e8-4b02-a091-a326b9ff7fef": [[-0.346768, 0.0, -0.593062], [0.346768, 0.494116, 0.593062]], "3472e703-287c-3eca-a92f-1bf0f9527308": [[-40.0, 0.0, -39.9999], [40.0, 81.6924, 40.0]], "3667cf4a-21da-43ec-be1c-6728778a6a1e": [[-0.310181, 3.2e-05, -0.310263], [0.31021899999999997, 0.610331, 0.310233]], "f6a3fbf9-b41a-4597-b53d-482ca03053fb": [[-0.38506599999999996, 1.05138e-05, -0.411839], [0.38508000000000003, 0.9670380000000001, 0.412147]], "5cf20093-e8c1-405f-aaf7-ede2c1ce2819": [[-0.373688, 0.0, -0.17028400000000002], [0.373688, 0.454557, 0.17028400000000002]], "8c832312-91b7-4034-a8a3-72a664fa6bb3": [[-0.260285, 1e-06, -0.296397], [0.260281, 0.930848, 0.296397]], "c763bb6a-a776-457e-aa29-10177907c0ce": [[-0.508668, 0.0, -0.20027799999999998], [0.508668, 2.423559, 0.20027799999999998]], "4554100f-78e3-4e67-8069-60f220417bde": [[-0.9, -1.272e-17, -0.291967], [0.9, 2.305, 0.289435]], "68af35cd-4b88-4c0d-914e-5a713a4c69a0": [[-0.350334, -1.32648e-17, -0.244137], [0.350334, 1.4382499999999998, 0.244137]], "58961b54-d044-474a-9498-80a6f31cf10b": [[-0.509734, 0.0, -0.33866599999999997], [0.509734, 0.606177, 0.33866599999999997]], "4ae411dd-cd8f-3b77-acbd-8f4d813d7534": [[-0.268426, -0.0, -0.286716], [0.268426, 0.9039060000000001, 0.286716]], "13c16368-42f4-3d25-9472-76ee7725ab51": [[-174.9999, -0.0005, -80.0], [175.0, 75.139, 90.0]], "f1f6fd18-6494-40d5-9fba-988c0734aaf3": [[-1.4985, -3.05979e-08, -0.175], [1.4985, 2.55, 0.175001]], "f2389f72-3e9a-4de6-a967-b5a4eb2f542b": [[-0.817188, 6.732939999999999e-05, -0.2005], [0.817188, 0.40031300000000003, 0.2005]], "2bdb1631-3521-4a00-9d7e-2c34b06da2a9": [[-0.909197, 5.31474e-05, -1.0164199999999999], [0.909197, 1.2865, 1.0168000000000001]], "3ffaa0a4-3ff5-364e-afec-0835c098d1ff": [[-0.488236, 0.0, -0.47294800000000004], [0.488236, 0.970865, 0.47294800000000004]], "014813da-7bfb-438f-93e6-dad1ab34ae55": [[-0.303025, -0.0, -0.331811], [0.303037, 0.9124079999999999, 0.331927]], "510147e5-323e-47a7-b745-be8054710766": [[-0.29592199999999996, -1.48969e-17, -0.29592199999999996], [0.29592199999999996, 0.467262, 0.29592199999999996]], "cfe5cb38-74d7-4077-8f7e-a384b7f4505a": [[-0.24067, -0.000147977, -0.240674], [0.24077400000000002, 0.711772, 0.24081600000000003]], "5da5ca38-55f9-4818-90ee-20bc04a9cf2f": [[-0.8386790000000001, -7.62939e-09, -1.08848], [0.8386790000000001, 1.31052, 1.08848]], "2b3da3e2-901c-442b-957e-954619d933ac": [[-1.4090870000000002, 0.0, -0.43668999999999997], [1.4092850000000001, 0.820318, 0.436691]], "6e2c0320-48c7-4d7c-bd98-0d0a35148714": [[-0.157059, 8.77074e-19, -0.156967], [0.157005, 0.864329, 0.15701]], "39a8e6fa-0980-411d-b13f-15699650dda3": [[-0.316763, 0.0, -0.214607], [0.316763, 0.259, 0.214607]], "451b8cd3-e635-4e6e-ab7a-ae91ca251fae": [[-0.511501, 7.62939e-09, -0.089975], [0.511501, 0.7628149999999999, 0.09011670000000001]], "a1134fbd-3471-4531-aafa-dfe0c7e4b395": [[-0.325514, 0.0, -0.269744], [0.325514, 0.6272059999999999, 0.269744]], "5b812e8c-aa9d-4f8e-a29e-bd9a0c658719": [[-1.15388, 3.05176e-08, -0.310624], [1.15388, 2.27801, 0.311156]], "8c45fdf5-fc7c-48ed-86fc-6ecfdc098485": [[-0.270272, -7.62939e-09, -0.278375], [0.270194, 0.38048699999999996, 0.27849799999999997]], "92ff3d92-0d06-4e97-aa6b-d5ae21377c91": [[-1.2383929999999999, 0.0, -0.486518], [1.238333, 0.937863, 0.486244]], "6c04211f-96df-37e7-a700-b1155fb24923": [[-2.0376279999999998, 0.0, -1.48582], [2.044675, 0.6804049999999999, 1.4621979999999999]], "7444ccb3-989a-485f-a0ac-f9702fcb79f3": [[-0.399815, -0.0, -0.37689999999999996], [0.399815, 0.796178, 0.37689999999999996]], "6a56063e-f594-44bf-ae95-8d5956d4f220": [[-0.8443200000000001, 7.62939e-09, -0.961593], [0.845476, 1.16346, 0.962681]], "0efb7d52-0d59-49b3-800c-161aaa388ed1": [[-0.446537, -4.67924e-05, -0.42593000000000003], [0.44728, 0.7674120000000001, 0.42601500000000003]], "e2e4cf0d-75a9-41e9-8ecd-3e270a83a7ef": [[-0.42393099999999995, -0.000189206, -0.100402], [0.423724, 1.00928, 0.100402]], "40d24560-af2e-4b24-be89-056cd89e4b59": [[-0.473338, -9.087200000000001e-05, -0.44614800000000004], [0.473338, 0.719079, 0.44614800000000004]], "2027ffde-a7af-419a-8421-224c03e656d6": [[-1.0954000000000002, -5.23451e-05, -1.15083], [1.0954000000000002, 1.5968600000000002, 1.15085]], "35b38447-4597-4297-838d-8392f62e37c3": [[-0.293334, -3.98568e-05, -0.13], [0.293334, 1.27429, 0.13]], "5badaa53-ecaf-32a0-8fcf-de91daf19fe6": [[-0.575599, -9.499999999999999e-05, -0.49658599999999997], [0.575597, 0.952488, 0.49658499999999994]], "00334c6e-72f8-4fb6-9e11-ab011bf6c3a7": [[-1.098694, 0.000208, -0.447758], [1.098694, 0.7795380000000001, 0.448544]], "936077cb-b825-405d-a4aa-511afb102964": [[-0.299475, 0.0, -0.302584], [0.299475, 0.925111, 0.302424]], "2b36a187-3c66-3cef-855c-2158aa680b81": [[-1.053971, -0.000997, -0.531969], [1.053971, 0.916559, 0.529475]], "7599c6c3-3472-4237-8ee5-7b77f3934fa4": [[-0.222757, 0.0, -0.25660900000000003], [0.222757, 0.787377, 0.25660900000000003]], "1c5b15ad-aba5-4804-89c5-7fc30e562931": [[-0.21800899999999998, 2.28882e-08, -0.190019], [0.21800899999999998, 1.02899, 0.190019]], "b7d85632-59ac-4529-b214-996870c894d9": [[-0.538712, 0.0, -0.530092], [0.538619, 0.440668, 0.53003]], "64494d83-b25a-4425-b3dc-dc570beb8ca0": [[-0.959734, 0.0, -0.678477], [0.959734, 0.369097, 0.678477]], "7b4cc7d7-a08a-4085-a9d7-ddbdce78245c": [[-1.08333, -0.000261657, -1.18024], [1.08047, 1.16882, 1.18118]], "daeed374-84ed-4a16-ba18-71c5c79b6034": [[-1.00177, -2.12877e-17, -0.600632], [1.00177, 0.712576, 0.600632]], "05866acd-800e-4ec0-83b1-e0243a54bfe3": [[-0.6495010000000001, 0.000293868, -0.258765], [0.650023, 1.6694, 0.259328]], "a8497f1e-1f63-4a82-b750-1c924a20b142": [[-0.378909, -0.0017563799999999999, -0.37886400000000003], [0.378428, 1.3378700000000001, 0.378151]], "056e6841-842f-4dbc-8ca9-3c7b11256f43": [[-0.42217799999999994, -7.62939e-09, -0.21030100000000002], [0.42217799999999994, 1.0419100000000001, 0.210791]], "087f3bbd-9609-4080-baa2-cdcb7230002a": [[-0.821125, -5.248840000000001e-09, -0.22677], [0.821125, 0.680603, 0.226766]], "8632ffc6-59a7-3c91-a29d-5eee927bf335": [[-0.850881, 0.000675, -0.824011], [0.850881, 0.754197, 0.8240099999999999]], "7ddcbf71-fcd2-4457-9647-a4418e546166": [[-0.326582, -0.000926169, -0.323894], [0.326668, 1.17399, 0.32276400000000005]], "36dc4a3c-8181-46e5-a3aa-a69b01433827": [[-0.537038, -7.50693e-11, -0.462038], [0.537038, 0.402899, 0.462038]], "06502e02-e43f-4371-9ef9-293d62827bfb": [[-0.328446, 0.0, -0.32844999999999996], [0.328439, 0.372085, 0.32843000000000006]], "61547c48-5f53-4507-ac00-a5ab7b84f221": [[-1.4763499999999998, -3.41879e-05, -0.954666], [1.47644, 0.861508, 0.9544]], "1fb3390c-565a-4456-91fe-fc6baaf86006": [[-0.845968, -0.000582734, -1.1178700000000001], [0.847437, 1.3082, 1.11772]], "0ac22aca-d4f6-4bec-afca-ae0462c84089": [[-0.80904, -0.0023610999999999997, -0.365381], [0.8082210000000001, 0.8924070000000001, 0.36540999999999996]], "1c992756-170b-4f94-aaac-788c02cfb649": [[-0.4523, -1.2512599999999999e-17, -0.232261], [0.4523, 0.7561279999999999, 0.232261]], "8860dfa2-5713-405a-bed1-04dd55a5dd69": [[-0.474587, -0.00016310100000000002, -0.20299], [0.4746, 1.9933400000000001, 0.202984]], "9930c8fc-c0fc-4298-ad0d-100f42af4b62": [[-0.315052, -3.92626e-05, -0.314148], [0.314712, 0.33779600000000004, 0.314069]], "8968ca4c-2f73-4a12-b5a3-7f95d9fb4e58": [[-0.505099, 0.0, -0.516167], [0.505099, 0.970527, 0.516167]], "2cd54c2d-9a03-4eb4-9bb2-3c6695b9c18e": [[-0.848431, -9.53674e-09, -1.11471], [0.846665, 1.4824799999999998, 1.11469]], "665a4a3d-8694-4c84-8ef2-14cab3a333ab": [[-0.858315, 0.00028199999999999997, -1.099865], [0.858315, 1.057064, 1.099865]], "0bfc7747-1832-49a7-8599-e203db437b7f": [[-0.41367800000000005, -0.0007574309999999999, -0.41255699999999995], [0.41367800000000005, 0.988264, 0.41255699999999995]], "81848c23-1c7d-3ea8-a764-e9caed065190": [[-1.270945, 0.01306, -0.762279], [1.235738, 0.9606570000000001, 0.574137]], "e6e161a1-1219-4c79-886d-4f6b7ea28c39": [[-1.191889, 0.00021, -0.45007800000000003], [1.191908, 0.8541190000000001, 0.450146]], "7b42d5ab-ed37-40e9-b366-e049c5c15dfe": [[-1.05229, -0.00016626, -0.230981], [1.0521800000000001, 0.600834, 0.23150099999999998]], "e0d0379b-0835-482f-836a-5803975ade24": [[-1.481389, -0.0, -0.33358600000000005], [1.481389, 2.39078, 0.33344999999999997]], "69fea616-7551-4924-88ef-80d103ea26ea": [[-1.30039, 1.52588e-08, -0.305714], [1.30039, 0.884717, 0.305917]], "949cbcce-6629-4b0f-b2bb-fda5a49b9061": [[-0.19967500000000002, -0.000502441, -0.21077], [0.199729, 0.57729, 0.210872]], "53b342b7-f56b-405d-a261-0cad489479cd": [[-0.9407380000000001, -0.00103189, -1.22631], [0.940723, 1.06355, 1.22664]], "15203101-e0f0-42ba-ba89-513f75bb137a": [[-0.600433, 1.14441e-08, -0.295937], [0.600433, 2.22588, 0.295666]], "0d831b81-3ec1-4f8c-bb27-e9ebd83ec3b4": [[-0.2298, 0.0, -0.276437], [0.229759, 0.7535630000000001, 0.27664]], "72d524a0-4ea5-36bf-9965-2b0ef48aefda": [[-0.30277899999999996, -3.7000000000000005e-05, -0.34651600000000005], [0.30277899999999996, 0.812897, 0.34651499999999996]], "64665ed8-e8dc-4a58-b529-c0318daf9428": [[-1.12947, -0.000417136, -0.404638], [1.12979, 0.6816249999999999, 0.404859]], "c13078c1-d6e9-4ddb-ba2c-6d3bf3919d3e": [[-0.45, -2.64218e-17, -0.45], [0.45, 0.74, 0.45]], "77ec0491-2716-412f-8bc8-42c617b533f2": [[-1.32163, 4.7729099999999997e-17, -0.846698], [1.32114, 1.8940299999999999, 0.84512]], "4ce252ed-bd40-44f6-92fa-f6e13f73f545": [[-1.411901, 0.0, -0.43469700000000006], [1.411901, 0.865466, 0.43469700000000006]], "3f3e9fe3-3db0-407b-9956-57025c5b7e6d": [[-0.853211, 0.0, -0.981322], [0.8527849999999999, 0.967168, 0.981109]], "6a66e11e-b412-32b9-862a-57d3e8f7ee77": [[-0.306936, -0.000229, -0.273599], [0.300876, 0.9561379999999999, 0.24446]], "46592c84-472e-4354-9c4e-111258007a43": [[-1.04769, 4.22602e-06, -1.2011], [1.04769, 1.19374, 1.20145]], "5e36ae96-f772-4d2b-8146-c7861527c2ae": [[-0.238969, 0.0, -0.23370100000000002], [0.23894300000000002, 0.606847, 0.233688]], "c1388904-9d7b-4f22-94f5-48e5778ebc4c": [[-1.06946, -0.000829589, -0.477356], [1.07058, 0.913493, 0.47659799999999997]], "986a7091-335d-4ad8-9844-1252049970c6": [[-51.9635, -3.6525, -57.2963], [51.9635, 76.6185, 57.2963]], "3631efbf-3c73-4eab-bf83-e7faff47be3a": [[-0.771012, -5.570930000000001e-06, -0.29856], [0.770972, 1.7353200000000002, 0.29856]], "6340374d-9b45-46d3-b698-a0feba472348": [[-0.39490699999999995, -0.0, -0.547594], [0.394837, 0.977333, 0.547883]], "0986c15d-1e67-4b12-90f3-998619153ca6": [[-0.959734, 0.0, -0.678477], [0.959734, 0.369097, 0.678477]], "34cf6d9d-b643-4e94-be4a-082733a297d4": [[-0.270818, -1.03724e-05, -0.0708208], [0.270818, 0.7689889999999999, 0.0708208]], "86b7eb6e-e2a3-4985-90c3-970a71db4fbe": [[-0.512222, 0.0, -0.49215400000000004], [0.512077, 1.7538570000000002, 0.49189]], "6ef878a0-03be-41db-abb4-60d454a231de": [[-0.105066, -1.64727e-05, -0.105066], [0.105066, 1.18154, 0.105066]], "de056690-50c2-4e34-a88a-32080d2cc9ae": [[-0.6227750000000001, 6.75137e-08, -0.312083], [0.6227750000000001, 2.29863, 0.312083]], "864f85f8-c330-4049-9458-f953b3b4d00e": [[-0.44081600000000004, 0.0, -0.520961], [0.440961, 1.042405, 0.520961]], "f0b346ac-4c07-4fde-8eff-9c3537304525": [[-1.0680459999999998, 1.9e-05, -1.094169], [1.069692, 1.523802, 1.094169]], "401aa29f-6dbe-41f6-b91d-9c7bf5af9dd8": [[-0.925293, 0.000678753, -1.12607], [0.925293, 1.1276300000000001, 1.1260599999999998]], "51d8f810-d983-4ab4-a460-0f3c4c8efa30": [[-0.914302, -0.0013527600000000002, -1.14282], [0.913348, 1.7067599999999998, 1.14233]], "cd150ee7-5b6e-478a-a3be-057ca7a3180f": [[-0.154671, 2.71397e-07, -0.11603899999999999], [0.154671, 0.500001, 0.116227]], "08687b7c-bec8-449e-8d51-846bdd587478": [[-1.0775, -4.6545500000000004e-05, -0.514184], [1.07628, 0.896367, 0.515077]], "6d80b238-ff4d-4603-8c71-61787cbab5cf": [[-0.499542, -0.000402715, -0.499533], [0.49934399999999995, 0.38237499999999996, 0.49952599999999997]], "12e30110-5cd0-4507-9aaf-ad33bf29e80e": [[-0.21827000000000002, -1.1978599999999999e-17, -0.21827000000000002], [0.21827000000000002, 0.455518, 0.218269]], "0f8c4927-c030-4138-8171-50bb41559f9b": [[-0.470563, 0.0, -0.4], [0.470563, 0.753489, 0.4]], "52a12fa9-5024-43de-8acd-1ab9acf26b56": [[-0.7, 0.0, -0.235336], [0.7, 0.9, 0.235336]], "a9e662be-94ad-43bd-a135-9862e1defc1f": [[-0.7789069999999999, -9.89351e-18, -0.21136500000000003], [0.7789069999999999, 1.13869, 0.210724]], "d89ec2d4-ca71-4332-8d2a-ad67251baa0a": [[-0.332682, -2.2033299999999998e-17, -0.39381], [0.332658, 0.8294830000000001, 0.393459]], "8bf7a9d8-3f54-4af7-a1a9-304788f23e09": [[-1.50716, -1.14441e-08, -1.00573], [1.5068000000000001, 0.715001, 1.00533]], "55653e8b-300a-4b21-bc1c-6588324c9fc7": [[-0.371117, 0.0, -0.20525300000000002], [0.371117, 0.635642, 0.20525300000000002]], "0882ad82-29f8-4829-931e-1a3959df88d8": [[-1.31454, 0.0, -0.435713], [1.314458, 0.934075, 0.435649]], "16ad2792-36c1-4264-baa4-dcc5ca224f47": [[-0.410544, -0.00017413999999999998, -0.40342100000000003], [0.410233, 0.895985, 0.403941]], "8d1df02c-9ab3-4d88-94a7-597a51acb30f": [[-0.79815, 2.77609e-17, -0.799322], [0.79815, 0.73, 0.799322]], "332a5983-809d-3ca1-b25f-02f517fde295": [[-45.675, 0.0, -45.675], [45.675, 81.9237, 45.675]], "fffd4028-7f01-46c7-96d2-36c3f51b5ba6": [[-1.002111, 0.0, -1.106879], [1.001353, 1.639771, 1.106895]], "680ad79e-60c9-4170-a8c9-1a81a9c4425c": [[-0.897857, 6.86049e-08, -0.287354], [0.8977299999999999, 2.32718, 0.287354]], "43e57655-af74-4d61-b1e4-a6afa47cf093": [[-1.4096119999999999, 0.0, -0.38925600000000005], [1.4096119999999999, 0.7767109999999999, 0.389156]], "4483a0f8-e95b-4dc3-8796-03e2a55d5fcf": [[-1.1613200000000001, 6.10545e-08, -1.00497], [1.1613200000000001, 1.52737, 1.00499]], "4b5ce737-4733-4dfe-b703-8b8908b2a171": [[-1.613157, 2e-06, -0.660536], [1.613157, 2.211046, 0.660536]], "550ff82e-a5ba-4fef-a2e1-e87cd188ae84": [[-0.531756, -0.00037012700000000004, -0.592213], [0.531907, 0.868115, 0.59149]], "5a1f6c5e-1d58-45e3-b9ff-26eba3d80e86": [[-0.6891379999999999, 0.0, -0.544663], [0.6891379999999999, 0.35228299999999996, 0.544663]], "e705adc6-c469-4401-ae22-44ee22644318": [[-0.287748, 0.0, -0.287767], [0.287767, 0.556034, 0.287715]], "732191c5-9236-452c-a02c-6cb63f1e2fd3": [[-0.839036, -3.25082e-12, -1.02036], [0.839036, 1.10204, 1.0213299999999998]], "252c2950-6bad-4bf7-a557-76b1a08f7394": [[-0.225, 0.0, -0.276292], [0.225, 0.9, 0.276292]], "7423e139-439d-4675-87ad-0a9221cd03f8": [[-0.525281, -5.36862e-06, -0.5248940000000001], [0.525166, 0.521234, 0.525237]], "8720182a-6ef5-4680-b164-192b9b0e8626": [[-0.526029, 0.0, -0.44174599999999997], [0.526029, 0.8628319999999999, 0.44174599999999997]], "58f2b921-f488-480a-a6ce-099715ea4eab": [[-1.1, 0.0, -0.184938], [1.1, 2.079985, 0.184938]], "0fa4c982-2c4e-4c4b-9ac7-6f3ccbf3829a": [[-1.2135, -3.90731e-17, -1.2686199999999999], [1.2135, 0.912246, 1.2686199999999999]], "6616f3c4-6e5c-4349-9a1c-6f4e03e5c1c1": [[-0.359792, 0.0, -0.24796800000000002], [0.359792, 0.43719700000000006, 0.24796800000000002]], "404f7f4e-867d-423f-96d1-5611bcdaa73d": [[-1.1401999999999999, -0.00113942, -0.54738], [1.1402299999999999, 1.20214, 0.546111]], "066ab8fb-dcad-40b7-9404-15f40f1d8e99": [[-1.040291, 0.000173, -0.401564], [1.040325, 0.925147, 0.401777]], "0e41d85a-4841-455a-80a7-7a6353e14718": [[-0.8013129999999999, 0.0, -1.142984], [0.801689, 0.8648690000000001, 1.1429850000000001]], "08f6c6fa-703f-487b-b13c-71fafda05a9a": [[-1.4338399999999998, -0.000635333, -0.49357599999999996], [1.43386, 0.9030849999999999, 0.492333]], "6872c816-e88d-45f3-9465-f856e58504b3": [[-0.530251, -9.13031e-09, -0.365201], [0.530251, 0.35021299999999994, 0.365201]], "40fcee9e-520a-4f6d-b8f5-044f5123cc9d": [[-0.432602, -0.000175229, -0.415739], [0.43259099999999995, 0.46489800000000003, 0.415912]], "ec601a37-6c67-4d94-8e95-9512673f5a8d": [[-0.8074370000000001, -0.000506129, -0.345612], [0.8074370000000001, 0.82123, 0.34547100000000003]], "1a09235e-b9a9-44df-8bbc-121b66ef9d29": [[-0.723657, -1.4917e-17, -0.306511], [0.724016, 2.09906, 0.306707]], "43d6c37b-155a-47e6-bcf6-563735b35c84": [[-0.49595599999999995, 0.0, -0.239001], [0.49595599999999995, 2.400001, 0.239001]], "110b4d90-3f09-4874-8a9e-839a6194d6a3": [[-0.48938200000000004, 0.0, -0.225049], [0.48928499999999997, 0.452579, 0.225049]], "23b828c7-3550-3aff-b339-0bc0225c0373": [[-37.3284, -0.0818, -36.157], [37.3284, 72.7903, 38.0091]], "22eaee6c-18b0-4612-a1ef-15bd2d1b1a07": [[-1.0252, 1.02141e-17, -0.22105], [1.0252, 0.612105, 0.221163]], "e29480dc-51b0-4548-965b-705c70ce9c66": [[-0.8224509999999999, 0.0, -0.24209399999999998], [0.8224509999999999, 0.5850310000000001, 0.24209399999999998]], "145fc897-83b2-43dc-9133-83f415995bde": [[-1.17777, -0.000175759, -0.40475099999999997], [1.1779300000000001, 0.718997, 0.40496099999999996]], "92e0dccd-1b13-4d1e-a96d-e3166ac4bebd": [[-0.40112299999999995, 0.0, -0.38595100000000004], [0.40112299999999995, 0.8288120000000001, 0.38609000000000004]], "78ef86c1-ab26-4e9d-96d3-c9669c4065e4": [[-0.4999, -1.49851e-07, -0.49994500000000003], [0.499943, 0.315, 0.49991399999999997]], "7106c8f3-23d0-4528-93f6-9a162c6105be": [[-0.19056499999999998, 0.0, -0.22736499999999998], [0.19056499999999998, 0.19979399999999997, 0.22736499999999998]], "1fc1d19b-87b5-4d16-8cfa-69d642a37dba": [[-1.07362, -5.70222e-08, -0.271128], [1.07362, 2.66015, 0.271337]], "5949665c-499d-413e-ba9c-b8595ee700e5": [[-0.285958, 0.0, -0.34126199999999995], [0.285872, 0.819691, 0.3411]], "c00da5ea-9daf-4583-bea3-9a75ed2d8053": [[-0.288819, -8.48705e-05, -0.29506699999999997], [0.288822, 0.809521, 0.294778]], "731509fc-6200-47cd-9e69-5d8ef55c3f8b": [[-0.9891150000000001, -3.72077e-05, -0.42199800000000004], [0.989101, 0.804952, 0.421299]], "d673e433-609f-4f69-8a08-780a89795757": [[-0.59713, 3.41797e-06, -0.59713], [0.59713, 0.728784, 0.59713]], "b9229f4f-f133-4535-a4b7-0e9f260a2a9d": [[-0.14871800000000002, -1.5629999999999998e-05, -0.148947], [0.148766, 1.04549, 0.148728]], "c671816b-ef3f-41f5-a18c-5b2aac4a0f15": [[-0.25096, 0.0, -0.25845], [0.25096, 0.512866, 0.25845]], "d7064e71-4304-42bc-b960-cdecbcccb7a9": [[-1.22629, -0.00219166, -0.457479], [1.22635, 0.805518, 0.457964]], "198f2b99-a7f7-3971-a40c-1f61aa7b7588": [[-0.9906, 0.0, -0.4826], [0.9906, 0.7365999999999999, 0.4826]], "6f3873d8-0c7b-46dc-9a64-928ab7aa4059": [[-0.27588999999999997, 0.0, -0.27588999999999997], [0.27588999999999997, 0.070075, 0.27588999999999997]], "664f5826-d09f-349c-8265-447f23fbaf65": [[-0.358354, 0.000123, -0.38339399999999996], [0.35944400000000004, 0.7299599999999999, 0.41855600000000004]], "0b36f29a-b271-4c3c-862e-f1168c5a5cad": [[-0.651721, 1.03489e-08, -0.220671], [0.65172, 1.05505, 0.220967]], "82080b7d-e56b-4184-9ff8-62125cf62816": [[-1.56565, -2.60972e-17, -0.503241], [1.5661600000000002, 0.879618, 0.502999]], "4d46ad3a-750a-4f8f-afff-534a0fe3eec8": [[-0.751056, -1.52588e-08, -1.01163], [0.751823, 0.856505, 1.01243]], "57f08c70-969f-4320-9fc4-fb83447094e8": [[-0.88825, 3.94864e-08, -1.14409], [0.8877379999999999, 1.07687, 1.143]], "e2a1c029-9de5-434b-9796-8ccbed32e557": [[-1.09114, -0.00015592, -0.5214500000000001], [1.09129, 0.753115, 0.52099]], "0dbd0e22-0e25-439a-8472-fa3cd394c9ad": [[-1.144031, 0.0, -0.482755], [1.144031, 0.7170340000000001, 0.482755]], "95368c58-59dd-47d8-b164-c54336923836": [[-0.157298, 6.02879e-10, -0.156251], [0.157298, 0.31, 0.156251]], "7e259fdb-ecdc-4498-bdd3-b95c1218fb89": [[-0.545924, -9.77698e-05, -0.34723], [0.545924, 0.788281, 0.34723]], "38b5bc9a-5c59-4cef-87e0-aba437acbdd2": [[-1.01205, 3.52564e-08, -1.1415], [1.00955, 0.850001, 1.14172]], "1aa6abf4-2464-4d91-a283-f38c6d33f592": [[-0.9550749999999999, -2.4530200000000002e-17, -0.46897599999999995], [0.954608, 0.831365, 0.46892]], "3db3c2ad-1ee1-440f-9bbe-4b804afb8449": [[-0.702811, -2.13163e-15, -0.181182], [0.702811, 0.795879, 0.181182]], "346eb388-299e-4236-895a-7a527db53990": [[-0.7502160000000001, -9.680950000000001e-05, -0.199576], [0.750029, 1.19435, 0.200339]], "777f06bc-a1ef-47ca-bef8-fb127f7bb17e": [[-1.01125, -0.00021112100000000001, -0.8030320000000001], [1.01125, 1.93237, 0.80337]], "c899366c-4578-432d-8c65-bef87b826be6": [[-0.31095300000000003, 0.0, -0.32597099999999996], [0.311811, 0.906653, 0.32738599999999995]], "e46792a0-8a74-4c53-a5bf-98ce52a3f203": [[-1.21404, 6.10352e-08, -0.606059], [1.21404, 1.2203, 0.606059]], "567d95bc-c4f3-43d9-bcfc-60139997d3dc": [[-1.2672400000000001, -0.00012856899999999998, -0.406578], [1.26505, 0.9944419999999999, 0.406667]], "8fe26c63-f744-4dbf-9149-ed8147275bed": [[-0.272584, -0.0, -0.213318], [0.272584, 0.44975499999999996, 0.213318]], "19e1a64d-a87f-4d82-8834-5c34b889a059": [[-0.436828, 9.3e-05, -0.418646], [0.436749, 0.5133800000000001, 0.41866]], "cac6fe2d-1ce5-431b-abd3-68317007808b": [[-1.011376, 0.005, -0.32405900000000004], [1.011376, 0.9283710000000001, 0.32405900000000004]], "007498dc-954a-4ddc-b318-164b7e4dfefc": [[-1.34608, 0.001122, -1.327175], [1.344087, 1.272041, 1.3272950000000001]], "fabcf4ae-299a-4c44-94c7-cbbe5a5b4765": [[-0.290115, -0.0, -0.272254], [0.290115, 0.8286199999999999, 0.272254]], "3f7f94cd-11f7-45e5-8488-3c9e028b220b": [[-0.286752, 0.000226, -0.253854], [0.286752, 0.757875, 0.253936]], "1c680265-f628-441e-afc1-78d521ff42b6": [[-0.300572, 0.0, -0.40948999999999997], [0.300572, 0.885509, 0.40948999999999997]], "65a49e31-1bb2-470a-9f55-01e842a49cee": [[-1.3303550000000002, 0.000285, -0.448198], [1.3303550000000002, 0.904007, 0.448403]], "26c2c0ce-084b-41a5-9686-577a452844bb": [[-0.268454, -5.72205e-09, -0.180005], [0.268454, 0.32054499999999997, 0.180005]], "311ec0f4-b14c-43aa-858a-a1eb3b94b0ca": [[-0.315111, -1.0164599999999999e-17, -0.1875], [0.315111, 0.43810000000000004, 0.1875]], "36d25f51-163c-4068-85e1-6cd556b127b0": [[-0.423208, 0.0, -0.47491999999999995], [0.42312600000000006, 0.937153, 0.47491999999999995]], "0d108bf9-f65f-47a6-912a-d6c0727b4e30": [[-2.04054, -2.88856e-19, -0.363347], [2.04054, 2.5, 0.363347]], "1e1d6fd2-b0bf-4686-80e4-ae2b8ccccf13": [[-1.06967, -5.40526e-17, -0.882746], [1.0702, 1.97305, 0.882746]], "009ac457-0558-494c-bffa-72c4c0960649": [[-0.773308, -0.0, -0.447397], [0.773308, 0.6241140000000001, 0.447397]], "d3f5e3cb-550a-49bb-b99d-322ddec42daf": [[-1.20321, -1.52588e-08, -0.202045], [1.20242, 2.10789, 0.202045]], "4b6de243-ba0f-4185-81ea-18d549bd2357": [[-0.272098, 0.0, -0.272098], [0.27126300000000003, 1.334744, 0.272098]], "8105b670-faf1-33e0-b9e4-16c199cc11ca": [[-0.265578, 0.0, -0.249282], [0.265578, 0.752518, 0.251464]], "5ff46298-7b9b-4ef4-926b-f6a59490f796": [[-1.442328, 0.0, -0.45312199999999997], [1.442328, 0.7619079999999999, 0.452814]], "b29d6634-1afe-4198-8588-4caf825010f9": [[-0.422539, 0.0, -0.46329099999999995], [0.42216000000000004, 0.887572, 0.46340400000000004]], "42e10d41-2ad8-4e0a-9616-b879cece0f3f": [[-0.924166, -0.00411594, -1.05886], [0.921732, 1.23781, 1.05748]], "5e3a4347-58a1-4424-87cb-6147306cc9d1": [[-1.8397210000000002, 0.0, -1.026564], [1.840647, 0.8681749999999999, 1.026822]], "5b9df1d3-7bf8-4edf-ab16-8139e5e2c11f": [[-0.966884, -1.5973999999999998e-08, -0.839187], [0.967244, 1.0995300000000001, 0.839648]], "24582f50-e36a-4306-a5d6-c03013fe23d7": [[-0.719575, -2.9706600000000004e-06, -0.48660200000000003], [0.719579, 0.453549, 0.486561]], "8ff76300-f7c1-4007-bb95-070b27c947ee": [[-0.226061, 4.47159e-07, -0.225089], [0.22606400000000001, 0.472823, 0.225089]], "23c641e7-189e-4dd4-a211-1d8dd731450d": [[-0.975986, 6.515419999999999e-17, -1.12432], [0.975004, 0.9398019999999999, 1.12584]], "1b1788c6-2ce2-4ddb-b8b9-7776bc0bb88d": [[-0.36347, -7.3011e-11, -0.207697], [0.36347, 0.8982899999999999, 0.207697]], "40f6e595-b2f6-41b1-81b9-41d8342ae635": [[-1.15887, -1.02743e-05, -0.416407], [1.15887, 2.26632, 0.416407]], "b8926d8a-d765-48c7-a5dd-80b197cdf4b6": [[-0.0990875, -1.96734e-18, -0.0990847], [0.0990847, 0.8421339999999999, 0.0991216]], "cd51a757-f111-4b48-b2a9-e1817c2ead92": [[-1.24143, -0.000245272, -0.648692], [1.24181, 0.976114, 0.647285]], "773717ac-13b8-4071-9863-37ee856ff606": [[-1.82923, -0.000244684, -1.2397799999999999], [1.82976, 0.824425, 1.24024]], "4ad68bb5-b071-4777-8669-30212d494e4e": [[-0.7226269999999999, -0.0011847000000000001, -0.31842400000000004], [0.722645, 0.651436, 0.319759]], "a7621218-bd3a-48ab-9694-9f307bb4ba1e": [[-0.21161200000000002, -1.08375e-05, -0.196492], [0.211678, 1.11971, 0.19650700000000001]], "71dd5d19-9ab3-43b3-af45-e7b7cd112bb7": [[-0.8880119999999999, -0.00013654, -0.47165399999999996], [0.8882850000000001, 0.8433740000000001, 0.47178600000000004]], "6ac38df4-d64e-4aa4-b31d-ee57a33c5d7b": [[-0.650094, 0.0, -0.275095], [0.6500929999999999, 0.45000300000000004, 0.275095]], "2c6f3def-7015-457a-8210-5f4c4ce1e5cb": [[-0.310189, 0.000167, -0.33678400000000003], [0.310189, 0.966165, 0.33734400000000003]], "e75846b1-e2ca-4763-8559-28a651debf84": [[-0.425412, 0.0010440199999999999, -0.31660699999999997], [0.427067, 0.358948, 0.316716]], "e4b0dc19-5f8b-4ffb-8ab3-4b88847a710c": [[-0.306531, 0.0, -0.299793], [0.30678300000000003, 0.8658629999999999, 0.299818]], "788783c2-df6b-4356-ab9d-6dc059711c00": [[-1.03634, -0.000225401, -1.03553], [1.03441, 1.27796, 1.03644]], "6997e6e0-758b-42be-9b48-5475ac9773f5": [[-1.61233, -0.00041891400000000005, -0.83006], [1.6119700000000001, 0.7798919999999999, 0.829832]], "5698039e-91f4-4e52-b39c-f6a79c03b9c2": [[-0.939476, -2.01846e-09, -0.186085], [0.939476, 0.454579, 0.18624400000000002]], "b0986d32-f7d9-4d15-af08-88b9fae12b70": [[-0.269439, 0.001011, -0.217044], [0.269439, 0.645629, 0.21805599999999997]], "5fcab5b4-d357-410c-b633-6037ee6bb29b": [[-0.44034399999999996, 1.28019e-17, -0.499878], [0.439946, 0.9034770000000001, 0.501087]], "b7d1f388-5f43-462e-b4ad-8bf6489e368f": [[-0.41348999999999997, 0.0, -0.231307], [0.41348999999999997, 0.398084, 0.231307]], "5a72093d-b9e5-4823-906b-331ced5e08d7": [[-0.531359, -0.0010870699999999999, -0.235502], [0.531795, 1.0244499999999999, 0.23554099999999997]], "bbf14626-92ab-47f2-a2e9-650a786e29c2": [[-0.387456, 0.0, -0.234634], [0.387456, 0.310442, 0.234634]], "6c097118-c8cf-475c-b918-189316a7fa3b": [[-0.294584, 1.3e-05, -0.22267199999999998], [0.294531, 0.598089, 0.22267900000000002]], "6d1b37f6-429d-3035-adaa-e2372bca3f72": [[-0.880036, 0.0, -0.204736], [0.880036, 0.405778, 0.204737]], "ce55e912-6332-4249-a2c6-f686d8bda8c1": [[-1.44514, -8.73781e-06, -0.529762], [1.44568, 0.967261, 0.529963]], "ae8cc539-77ad-4183-856d-d407d949bed5": [[-0.38933, 0.000161017, -0.390037], [0.389382, 1.12664, 0.390047]], "81c40313-4ecf-47e1-8e5d-0fb7155721fc": [[-1.3541800000000002, -1.0715699999999999e-17, -0.225008], [1.3541800000000002, 0.49, 0.225]], "097169f3-ed0c-4b51-8e6c-cfe70989a202": [[-0.6484690000000001, -1.4772900000000002e-09, -0.345163], [0.6484690000000001, 0.499409, 0.345163]], "3fca3628-408a-3948-8715-4cc3925bf1e1": [[-41.6338, 0.0, -40.0], [41.6338, 77.0831, 40.0]], "9bab8067-6b18-4b4c-b980-92b690005387": [[-0.737394, 7.3e-05, -0.335136], [0.737394, 0.7615560000000001, 0.335136]], "6d6f066e-be4f-43b6-a0b1-09ae6eea1373": [[-0.324991, 0.0, -0.36258], [0.324991, 0.9718049999999999, 0.36258]], "3ff85f12-b172-4a20-bd0c-3f9dd222e0f9": [[-1.1276000000000002, -3.30198e-08, -0.25949300000000003], [1.1276000000000002, 0.469064, 0.25949300000000003]], "67aa7939-195d-4bd6-95ac-45b173ca5f5c": [[-0.274448, -0.00023654600000000002, -0.27437], [0.27455999999999997, 1.04918, 0.274412]], "86106205-3d91-4f5d-9064-297dadf61d08": [[-0.58652, -3.8147e-09, -0.5855], [0.58652, 0.3925, 0.5855]], "f8cf8ab1-7d50-4cd3-8120-0d130bc27d14": [[-0.784807, -1.97328e-17, -0.326539], [0.784807, 1.27596, 0.326539]], "3d90fbf5-64aa-44be-b8db-c4b0593aa6b4": [[-1.20973, -0.00016476700000000002, -0.41323], [1.20974, 0.844413, 0.41362000000000004]], "69cafc94-8036-4e4f-b1cf-eeef93ad002f": [[-0.596414, -1.5709999999999999e-06, -0.287153], [0.596414, 0.685557, 0.287209]], "09926e0a-8894-42f8-9662-58ff6a20a626": [[-0.49138, 7.2e-05, -0.496435], [0.49138, 0.675653, 0.496439]], "3d798477-2a40-4da2-a6fb-91cc638ff2a1": [[-1.1665, -9.53674e-09, -0.259782], [1.1665, 0.603791, 0.259782]], "74c91fba-a354-4975-b3f0-55d13ff4a383": [[-0.40191299999999996, 0.0, -0.511008], [0.40191299999999996, 0.369155, 0.511008]], "ccb862af-0731-4ec7-bda5-9b11506190f6": [[-0.310992, -0.00020874699999999999, -0.31721], [0.310992, 0.657429, 0.31721]], "45a280bd-6586-4752-879b-bf671cfbfbf8": [[-0.764104, -3.00384e-17, -0.7352620000000001], [0.764104, 0.397329, 0.7352620000000001]], "782f69e7-5988-37a0-95cc-36de0b2e43a6": [[-0.226008, 0.0, -0.259514], [0.222944, 0.807577, 0.26661]], "96d948e5-ae2f-464b-a4e5-17936bdd4b2e": [[-0.364334, 1.97096e-17, -0.364334], [0.364334, 0.510765, 0.364334]], "f40dbe9d-9282-4dc2-ba19-38abfe6e7dbf": [[-0.411091, 0.0, -0.405008], [0.411091, 0.354731, 0.405008]], "803d908f-6f5d-3138-9bce-87febbd42e5c": [[-0.43920200000000004, 0.0, -0.49485399999999996], [0.43920200000000004, 0.754683, 0.474316]], "09f5441d-dd3a-494a-a930-06ce2f5f6ee7": [[-1.1331820000000001, 0.0, -0.43528599999999995], [1.133047, 0.842988, 0.43528599999999995]], "b899c743-57d6-4703-ad65-8faf594c51f8": [[-0.179514, 0.0, -0.159575], [0.179503, 0.384968, 0.159576]], "228b6184-4019-4ef4-9eec-46584c66cb5e": [[-0.20345300000000002, 0.000108531, -0.201765], [0.20332899999999998, 0.38258600000000004, 0.201765]], "f32fb422-a6ea-4bbc-b0f7-6df331725485": [[-1.005, -8.67847e-07, -0.1925], [1.005, 0.57, 0.1925]], "695c6d25-3d96-3946-bd75-d1ac480cacd6": [[-112.5, 0.0, -40.0], [112.5, 85.0, 40.0]], "6aad9e85-2fe2-4005-a901-b41697b96a7f": [[-0.943637, 3.05176e-08, -1.02149], [0.943632, 1.5482, 1.02148]], "1da59a58-7627-4954-9950-4b5dbace0186": [[-0.314866, 0.0, -0.27493300000000004], [0.314866, 0.270449, 0.275067]], "f21efcc5-4877-44fa-9a02-2d73d6d077b9": [[-0.385584, 2.10456e-05, -0.40352200000000005], [0.385584, 1.0314, 0.403837]], "3dec3032-05a4-4cba-932d-48c6b12ebe5e": [[-0.749961, -1.50752e-17, -0.3025], [0.749961, 2.05, 0.3025]], "2a04e84b-3f3a-41b2-82ab-6fd46a144988": [[-1.16003, -2.77074e-06, -0.535729], [1.16004, 0.819963, 0.5361889999999999]], "de91ad29-c2f7-41e6-b314-3e0eba11dace": [[-0.39253, -0.00022321899999999998, -0.40252099999999996], [0.391997, 0.505552, 0.40003]], "8d4810de-1c7b-4ace-b9b3-edf23619b063": [[-1.1488, 4.20643e-06, -1.20808], [1.15009, 0.776612, 1.20724]], "38560cc9-e290-4b12-b3ce-f4c82d504043": [[-0.292869, -0.00023717900000000001, -0.292869], [0.292869, 0.359907, 0.292869]], "1800ff3b-46e1-44bb-be1b-7922d59a160e": [[-0.39630200000000004, 0.000123, -0.40686], [0.39629800000000004, 1.069176, 0.40686999999999995]], "9d28cd8d-49b6-4cca-9672-79f4d2069cf6": [[-0.276328, -0.0, -0.276328], [0.276328, 0.34493, 0.276328]], "51800492-43b0-43a7-a20b-cfb38c405a98": [[-0.54858, 0.0, -0.54858], [0.54858, 0.349359, 0.54858]], "588bb6c1-22e2-4ba8-b6a1-456fbe823be2": [[-0.59656, -1.36726e-17, -0.244039], [0.5965590000000001, 0.396136, 0.244039]], "e3d33704-98af-4bb2-afde-fa8079694aff": [[-1.09202, -0.000187406, -1.04546], [1.09202, 0.969483, 1.04454]], "f9c74bb2-fb6c-43dd-8bf6-c2ff2ad96b25": [[-0.282183, 0.0, -0.169822], [0.262192, 0.448093, 0.328898]], "1b38e80a-c066-4905-bed8-4888d2668ed1": [[-0.700414, 0.0, -0.57667], [0.700402, 0.46847900000000003, 0.57667]], "6f02d910-2ab0-4540-897d-3510e3274b2b": [[-0.338611, -0.0010293, -0.347036], [0.338611, 0.880235, 0.347687]], "d7fd3c67-1a91-466b-a955-8760de8e1575": [[-0.306533, -2.53799e-09, -0.0841619], [0.306533, 0.36445, 0.084162]], "a90651b2-33ef-4b7f-91ba-39821ddcba18": [[-1.08393, -2.87592e-09, -0.302674], [1.08393, 1.0693899999999998, 0.302614]], "8260a9f1-59be-4e81-8696-99995fe82e25": [[-1.00894, -2.57863e-05, -0.303003], [1.00892, 1.3464099999999999, 0.302975]], "40efd667-96ae-4b1f-946c-dd9c1479b8c1": [[-1.20863, -0.00021983099999999998, -0.34342399999999995], [1.20886, 0.581112, 0.343611]], "eb70d604-c5b9-4b6c-8383-6f6409ce7245": [[-0.225963, -1.4240699999999999e-06, -0.22652999999999998], [0.22574000000000002, 0.464688, 0.226327]], "1c0e2658-703a-4c00-b1a7-601db6806fa7": [[-1.10131, -1.18595e-17, -0.33131700000000003], [1.10131, 0.840009, 0.331293]], "cdd49b30-a0fc-4c88-97e0-d3246c3aa0e1": [[-0.395979, 0.000171, -0.395979], [0.395979, 0.7596649999999999, 0.395979]], "a808729e-5695-4799-8da1-89675b81b147": [[-0.258592, -0.00034952700000000003, -0.184872], [0.258592, 0.994437, 0.184876]], "6c95f458-b1c1-37f5-ba84-bf96ddcf6656": [[-40.0, 0.0, -39.9999], [40.0, 81.6924, 40.0]], "55600004-6fde-4ff2-b404-c61079616ae3": [[-0.233006, 0.0, -0.232979], [0.233006, 0.512441, 0.232979]], "2609f0aa-53b8-4cea-84f2-9030eb5c883d": [[-0.08536239999999999, 1.13202e-08, -0.019948999999999998], [0.0854027, 0.8692610000000001, 0.0199497]], "587be7f1-bbfd-4948-82d8-217d70e27fdf": [[-0.231308, -2.4449200000000002e-06, -0.240896], [0.231293, 1.0288599999999999, 0.24090399999999998]], "8bfa48ae-42e9-4e5d-b151-e6acfe3cde0c": [[-0.415288, 0.0, -0.981189], [0.415288, 1.193787, 0.981189]], "90619437-788f-4bf9-894e-5523634d2d6d": [[-0.997467, -8.03729e-05, -0.485023], [0.997829, 0.920968, 0.48361600000000005]], "24ca1642-27a8-4725-9611-a00f6d3dd347": [[-1.175597, 0.0, -1.054332], [1.175597, 1.034097, 1.04866]], "742e82eb-83e0-40e1-8cf1-f445ad831703": [[-1.74919, -4.58971e-17, -0.8666719999999999], [1.74899, 0.704428, 0.867212]], "93bf3dca-281a-4b0c-8a48-c751561eb4e1": [[-0.305643, 0.0, -0.137023], [0.305574, 1.3384479999999999, 0.13699999999999998]], "3a3aade2-0ba0-4345-9c43-65e8fded45c2": [[-0.22375, -2.0578699999999999e-16, -0.207918], [0.22375, 0.5539999999999999, 0.207918]], "63c55a89-8f69-3d71-ada8-80c5cfb01e6e": [[-0.255368, -0.0008179999999999999, -0.31244700000000003], [0.255545, 0.9792770000000001, 0.301264]], "7a23f714-0bce-4123-8054-dc7b517e6415": [[-0.7089409999999999, -0.000445504, -1.1691], [0.707205, 0.9551919999999999, 1.16889]], "91abd8fe-2686-4c18-ba2e-50579bdc2b3a": [[-0.255, -1.22125e-17, -0.213789], [0.255, 0.499, 0.213593]], "41e88177-e831-4173-8987-0e00840eb89d": [[-1.03249, 0.000151307, -1.05641], [1.03212, 1.26005, 1.0550199999999998]], "1a661e4c-3c65-41f4-b46a-b275f12456b9": [[-0.835453, 0.0, -0.39348799999999995], [0.8357829999999999, 0.7419929999999999, 0.39348799999999995]], "d7a6d2b3-4192-4728-b3bd-c99dcb6a09f0": [[-0.565005, -1.58776e-07, -0.320181], [0.565454, 1.6766999999999999, 0.320294]], "4914ae4b-67d4-4af4-bbfc-765ae88e14ae": [[-0.274739, 0.0, -0.29061699999999996], [0.275, 0.787242, 0.290616]], "5dceea43-d17d-3b2c-a9ed-2e62782ee43f": [[-0.279646, 0.002386, -0.300473], [0.279646, 0.976802, 0.300473]], "052065aa-8642-4969-abb0-98e429eb4360": [[-0.552885, -0.00306944, -0.550188], [0.552864, 1.21831, 0.549898]], "085e4d1b-f84c-4a5f-afaa-1fb07261f9b7": [[-1.8242099999999999, 4.00543e-08, -0.505806], [1.8241, 0.9535389999999999, 0.50659]], "b5e6468a-1f25-40e4-b38c-7e6969fc2605": [[-0.655987, 0.0, -0.785359], [0.655987, 0.292264, 0.785359]], "7dce7d7b-1243-44cc-94a6-aaf3ab155f0f": [[-0.632906, 0.0, -0.17913900000000002], [0.632906, 0.713203, 0.17913900000000002]], "658d62a3-855d-40c2-911b-38d51dc098fa": [[-0.28404399999999996, -0.0, -0.28404399999999996], [0.28404399999999996, 0.381295, 0.28404399999999996]], "ed6e25e5-0497-4390-aa5f-2b3197f40a4c": [[-0.756806, -2.02275e-05, -0.175003], [0.756806, 0.833997, 0.175]], "c8924f25-d350-44a7-8db3-531d735ce385": [[-0.25316099999999997, 0.0, -0.25523], [0.25316099999999997, 0.553356, 0.25516300000000003]], "3913c596-ce17-444d-a3e2-516fd68a5cb5": [[-0.22575800000000001, -1.03592e-05, -0.306952], [0.225767, 0.735993, 0.30676400000000004]], "50b08a7d-05e0-4499-9625-92ee6bbe02e6": [[-0.41220399999999996, -3.75356e-07, -0.46183100000000005], [0.412434, 0.789192, 0.46124200000000004]], "c2d7281e-a0ae-4b33-8a62-2fde4583a787": [[-0.225, 7.96021e-18, -0.16], [0.225, 0.678914, 0.16]], "c00118d5-47d8-4d63-9e76-b4461bc45959": [[-0.263604, 0.0, -0.235375], [0.26354900000000003, 0.148817, 0.235375]], "940e1dd1-e3d1-4afe-94a5-e7ed0e329b0c": [[-0.536584, -4.63651e-05, -0.424811], [0.536593, 0.47059399999999996, 0.42469999999999997]], "5b767119-7fa8-48b0-a646-28af049330fc": [[-0.24376899999999999, 0.000195, -0.261838], [0.24394300000000002, 0.6729959999999999, 0.26165099999999997]], "11655eae-9ceb-44f7-bab8-4fb20d2651fe": [[-0.965444, -0.000518444, -0.240424], [0.965175, 2.18626, 0.24054099999999998]], "39870622-71aa-445c-9579-a44e03974cd8": [[-0.638647, 1e-06, -0.27037], [0.6382800000000001, 0.545048, 0.27037]], "251be3a1-e684-4e30-a6fe-2ec57cc75cbc": [[-1.690053, 0.0, -0.7151869999999999], [1.690603, 0.8048090000000001, 0.7141299999999999]], "7e101ef3-7722-4af8-90d5-7c562834fabd": [[-63.1239, 0.0, -36.3904], [63.1239, 28.8762, 36.3904]], "a6f9adf0-6bf7-4e54-9867-6201fa0858f1": [[-0.308152, 7e-06, -0.32186], [0.30814800000000003, 0.78601, 0.321676]], "23d30aad-270e-4195-b261-bf4547ffb68a": [[-0.29886199999999996, 3.05176e-08, -0.250602], [0.29886199999999996, 0.815033, 0.250602]], "021b6af9-a974-4f7a-bf46-e2e33615e733": [[-0.808725, 1.25401e-07, -0.379336], [0.808756, 0.7082989999999999, 0.380124]], "0eb963f7-bc2e-460a-9018-b5ba97149980": [[-0.489028, -0.0012537300000000002, -0.484496], [0.488922, 0.948044, 0.484496]], "6fef21c1-9be8-4290-9591-494b16d4a4cb": [[-0.9125, 6.01302e-17, -1.02], [0.9125, 1.1393, 1.02]], "565d66b8-7caa-4275-9146-0290738f028f": [[-0.180777, -6.675720000000001e-09, -0.19531600000000002], [0.180777, 0.49093400000000004, 0.19531600000000002]], "06658bda-8c15-4b6e-907a-5e0d307adf88": [[-0.454646, -1.8984899999999998e-17, -0.383213], [0.454655, 0.764569, 0.38351199999999996]], "7f78a965-20cb-4bf8-9993-a94083ed21ad": [[-0.966673, 1.1999999999999999e-05, -1.0185980000000001], [0.967172, 1.092304, 1.0186]], "291e9524-1c36-485a-b489-ad83000b4289": [[-1.0261799999999999, 0.00020665900000000001, -0.6575270000000001], [1.02637, 0.7532460000000001, 0.656785]], "4a5c3ddc-7e08-4d57-930e-87ab143d37ab": [[-0.890077, -6.18209e-17, -1.07801], [0.887561, 1.09161, 1.0780500000000002]], "67da2b33-aa93-4df6-921a-d26e42feb1d7": [[-0.776416, -3.8443000000000004e-05, -0.996947], [0.776127, 1.01058, 0.996947]], "bd77218d-333c-489e-a5b9-cf9f9c1a34ec": [[-0.37345599999999995, -1.21509e-05, -0.275], [0.373488, 0.696786, 0.275]], "ad337b8d-db4c-420e-824b-c77b8a14cff3": [[-0.7828539999999999, 0.0, -0.283603], [0.7828539999999999, 0.5234190000000001, 0.283603]], "30bbd754-24dc-46f4-b093-c870660bf179": [[-0.26728, -5.37109e-05, -0.201087], [0.26728, 0.8645919999999999, 0.201087]], "bf86ea39-e9b6-4679-80d0-5ebf0ad331cb": [[-1.00889, 0.0, -0.416153], [1.00889, 0.989292, 0.415217]], "652a25e5-0f15-384f-b57a-4400cb800545": [[-1.1936740000000001, 5.999999999999999e-06, -0.466448], [1.195425, 0.741179, 0.49213700000000005]], "0fddda67-0340-3fb4-af5f-b5edb4665510": [[-0.279646, 0.002386, -0.300473], [0.279646, 0.976802, 0.300473]], "497d9da0-809a-4736-a336-f94e623103b2": [[-0.18339, 8.90226e-18, -0.18351900000000002], [0.18339, 0.7972549999999999, 0.18351900000000002]], "c430f507-2b43-44f5-9f4f-2244900cb4ff": [[-0.08748739999999999, -7.21596e-20, -0.0874866], [0.0874828, 0.38905, 0.0874829]], "5d9ed4b8-593d-48ea-9c92-e5bcc4c2d238": [[-0.23756799999999997, 0.0, -0.24478100000000003], [0.23756799999999997, 0.863621, 0.24478100000000003]], "bbe291a9-0a24-497f-b4e2-7b543b916d72": [[-0.448899, -0.000235316, -0.46754199999999996], [0.448899, 0.76215, 0.467452]], "70b47a80-458d-423c-864a-4d21924570e0": [[-0.362047, -3.58466e-08, -0.245158], [0.362047, 0.857236, 0.245366]], "0b8e6d9d-436e-41e4-8ef2-8fc231668ed3": [[-0.344338, 0.0, -0.384507], [0.344338, 0.8472280000000001, 0.384507]], "8e8fa972-653b-47ce-a727-42a5ff5f6f8a": [[-0.577091, 0.0, -0.48467799999999994], [0.577091, 0.353, 0.48467799999999994]], "3952e506-2c9d-425b-8b15-5355931301e3": [[-1.0788280000000001, -0.0, -0.19818100000000002], [1.079416, 1.334234, 0.198182]], "82823f7b-5be4-41c3-b72b-fd309bd910d1": [[-1.07279, -0.000577345, -1.21083], [1.07222, 1.11185, 1.20987]], "c95a80fb-4900-49c2-958b-baac4aedaa14": [[-0.8477469999999999, 3.7000000000000005e-05, -0.25200700000000004], [0.847833, 1.1985219999999999, 0.252165]], "167bf773-7de8-48a5-bb5c-d58345130ed7": [[-0.145426, 0.0, -0.138315], [0.14446, 0.737746, 0.13998100000000002]], "07fb4bf5-95c2-45ed-a5d3-8fc896179595": [[-1.53891, 0.00040548, -0.584987], [1.54048, 0.834472, 0.585677]], "0cd14fb8-c9bf-48be-99d3-ccdf38a7f017": [[-0.360304, -1.15979e-17, -0.217927], [0.35912799999999995, 2.0, 0.218341]], "6cb2ed45-cf9f-4e53-89b1-02583f1e79dd": [[-1.10222, 1.80021e-17, -0.303997], [1.10222, 2.66367, 0.303997]], "644cde47-1978-305c-8d28-2073afcecda3": [[-0.29677, 0.0, -0.258253], [0.291795, 0.830497, 0.23429]], "03375fab-55d8-48da-85dc-4d3876da4f67": [[-1.74, 2.86102e-09, -0.21], [1.74, 2.42001, 0.21]], "36e4f2da-d529-49b0-b65b-d2addb39c4c9": [[-1.005061, 0.0, -0.2], [1.005061, 0.5652539999999999, 0.2]], "628fa2e6-3dc5-4e99-8e6c-830d2de24fd6": [[-0.502069, 0.0, -0.399833], [0.502069, 0.39178199999999996, 0.399833]], "9343fb43-976a-43a2-b04f-b15da9841d7e": [[-0.580796, 0.0, -0.354852], [0.580796, 0.45, 0.354852]], "3dcdb2ae-6e3f-407b-8122-e70e42b2eab2": [[-1.316688, 0.000117, -0.475204], [1.316689, 0.8758549999999999, 0.47519399999999995]], "7a41ea52-0793-48b2-bc94-13dfb097a366": [[-1.74988, 7.62939e-09, -1.09501], [1.75013, 1.04859, 1.09488]], "24ce56dd-6d29-4e0b-bcdd-a8fd28e6d7e1": [[-0.20380500000000001, 0.0, -0.228008], [0.20380500000000001, 0.859217, 0.228008]], "7b150f56-f06d-48da-b388-6fe7bd80c6f8": [[-0.212666, 0.0, -0.212666], [0.212666, 1.3035640000000002, 0.212666]], "3f12bd1d-d542-4405-a12e-d91f0147232d": [[-0.30728, -0.00011366700000000001, -0.0651766], [0.307287, 0.993544, 0.0655264]], "847210c0-646a-485c-b318-537758e94227": [[-1.61233, -0.00041891400000000005, -0.83006], [1.6119700000000001, 0.7798919999999999, 0.829832]], "56b1b9fd-78a1-40d7-b20b-97b5c70f289e": [[-0.976278, 0.0, -1.1962730000000001], [0.975827, 1.047908, 1.196202]], "22c61a0e-246b-4d8e-99f0-a52c2478cdd4": [[-1.040378, 0.0, -0.177259], [1.040378, 1.58, 0.177259]], "3ed16418-d4f6-4e06-9ea2-fe47c9b0d2d2": [[-0.260001, 0.0, -0.211467], [0.260001, 0.55, 0.211467]], "7e99e811-6a00-47e8-935c-a2ae1d12348c": [[-0.779049, 8.007810000000001e-05, -1.04562], [0.780411, 1.20742, 1.04515]], "b9191d60-af46-4d58-9ba2-e54cdf6024ba": [[-0.37711399999999995, -2.1126799999999998e-17, -0.42544800000000005], [0.376752, 0.778722, 0.424178]], "4ca5de6f-f111-466b-8c9a-84958d6e39b6": [[-0.905368, -1.0264599999999999e-17, -0.255722], [0.905368, 0.7353459999999999, 0.255721]], "ee6bfb2e-bc0f-4d43-9343-47ff415b3b24": [[-0.15, -9.1772e-18, -0.15], [0.15, 0.49242600000000003, 0.15]], "5554e6fe-082d-31ce-a307-0394e3d80206": [[-0.6585909999999999, -0.0, -0.43012999999999996], [0.6585899999999999, 0.8432999999999999, 0.430323]], "47aab5cd-73dc-4bfc-ba36-15f35168b51f": [[-0.344338, 0.0, -0.384507], [0.344338, 0.299501, 0.384507]], "abc7523e-b680-4e84-9106-eed9f6f0fdbe": [[-0.49100900000000003, 1.15463e-17, -0.254785], [0.49100900000000003, 0.743244, 0.254913]], "421f8a79-16e8-4064-8a49-3b2507f76f6e": [[-0.26831900000000003, -1.52588e-08, -0.255288], [0.26831900000000003, 0.8310500000000001, 0.255288]], "606addac-1451-4150-8b84-70b99864db9a": [[-1.09486, -0.000899501, -0.306321], [1.09512, 1.4709100000000002, 0.306447]], "455e63a9-190b-4863-a444-bc58a7f6a78f": [[-0.83, -2.71022e-07, -0.35011400000000004], [0.83, 1.64224, 0.350002]], "56393cfc-2737-3b41-9152-8a0397e78a68": [[-63.5, 0.0, -38.1], [63.5, 106.6912, 38.1]], "816a8b03-5a6f-4651-84b0-2b73c2e11b23": [[-1.34518, -0.000311972, -0.532857], [1.3457599999999998, 0.905383, 0.5310349999999999]], "34defcbe-6f8a-43a1-a385-cdb6755f295f": [[-0.8279949999999999, 0.0, -0.375], [0.8279949999999999, 0.749911, 0.375]], "1fabeadc-efd8-4b75-a865-3da667a63d6f": [[-0.631978, 0.0, -0.563083], [0.632274, 0.9228400000000001, 0.563057]], "c0216c9b-cd78-46e1-87c9-3ab90ba3a6ec": [[-0.11625, -4.7246299999999995e-05, -0.114398], [0.116047, 1.0496299999999998, 0.114551]], "6ee22227-ea06-4deb-b2ea-7ffe36e7499c": [[-0.8047270000000001, -4.664630000000001e-06, -0.202003], [0.8047270000000001, 0.69943, 0.202003]], "b9237c75-6b5b-4c0f-a776-5ab036c5fb22": [[-0.27981100000000003, -1.1796000000000001e-17, -0.20902], [0.279434, 0.568889, 0.209031]], "8076578e-eacb-4865-8d1e-4b977bbe8a61": [[-0.45110700000000004, -9.73849e-18, -0.218448], [0.45110700000000004, 1.79578, 0.218625]], "f817d13d-a2ff-43b5-8ecc-9507987ce825": [[-1.00319, 1.2207e-07, -0.32698900000000003], [1.00319, 2.39078, 0.326982]], "08389a32-693e-41f5-86ca-2fbe14d49a3b": [[-0.302989, 0.0, -0.311188], [0.302989, 0.710808, 0.313519]], "1ff4f2ae-8a16-4230-9d14-43731c1d3fb6": [[-1.0753300000000001, -4.46252e-05, -1.08357], [1.07568, 1.01319, 1.0829600000000001]], "f380e8b1-0f97-4966-bceb-d730fa53f01c": [[-1.33389, -0.000256063, -0.850527], [1.33388, 0.903693, 0.851102]], "6346eb3b-8049-44c0-9706-1161fa480542": [[-1.20022, 0.0012371300000000001, -0.492477], [1.20022, 0.722166, 0.492477]], "c4fda120-f3eb-413f-a7ba-5cff189e4e89": [[-1.94023, -0.000109502, -1.1040699999999999], [1.94025, 0.892368, 1.1040699999999999]], "599a4c66-2c25-4b7f-9064-84e033d1fccd": [[-0.409974, -0.0011560099999999999, -0.385573], [0.409974, 0.725099, 0.38535200000000003]], "7281cdef-1185-440c-8465-3e1052043ca6": [[-0.529884, 9.507249999999999e-08, -0.203541], [0.529884, 0.88212, 0.203566]], "60962502-e93a-41ba-a395-3f5a42ec1e6e": [[-1.49388, -2.30926e-17, -0.544774], [1.49388, 2.20402, 0.544774]], "59842058-dcbd-49c6-b572-96bdd36004fd": [[-1.07449, -2.39449e-05, -1.07348], [1.06999, 1.00015, 1.0728]], "d4bcb6f0-6baa-4d8c-8745-bac3614b26ea": [[-0.212373, 0.0, -0.212373], [0.212373, 0.41504800000000003, 0.212373]], "b31f5748-be20-477f-98d4-00311258080f": [[-1.07625, -1.65573e-17, -0.33197200000000004], [1.07625, 1.03817, 0.33197200000000004]], "15870cc2-11b0-4b82-bcc9-27f6f6818dba": [[-0.8393980000000001, -1.1066700000000001e-17, -0.190001], [0.8393980000000001, 0.63458, 0.190001]], "5f0f922f-25a5-47e4-a205-5b77447f5413": [[-0.6, -2.53796e-07, -0.211931], [0.6, 1.37168, 0.211202]], "8c3b228f-c321-4bf9-8ff0-316daaa5f2b1": [[-0.446654, 0.0, -0.379579], [0.446654, 0.456183, 0.379579]], "4046df2a-6909-49a0-8ff0-b5661da39be0": [[-0.289331, 0.0, -0.334122], [0.289331, 0.528095, 0.334122]], "7e50436c-29a3-456d-803c-406ef7a88810": [[-0.4916, -0.000133086, -0.454794], [0.49097499999999994, 0.775698, 0.455033]], "15673874-6a7b-42cc-a937-0d745efeaab5": [[-0.604341, 0.0, -0.505217], [0.604341, 0.275272, 0.505217]], "e821070c-319f-4205-a717-23e3740713b3": [[-0.22941099999999998, -7.35535e-05, -0.229511], [0.229691, 0.5042139999999999, 0.22956600000000002]], "9e9f4548-4d07-4e9d-8da6-aa0b516cfd01": [[-0.965875, 0.0, -0.339238], [0.965875, 0.762563, 0.339238]], "a12acfc1-6929-488a-966f-01ab7e6e7555": [[-0.666559, 0.0, -0.185307], [0.666559, 0.440115, 0.185307]], "01899124-9a73-4a42-bee2-ba55f6efb8f3": [[-0.255859, -0.0, -0.266845], [0.25579799999999997, 1.126358, 0.26651199999999997]], "ffd71c3f-5625-4090-a8d7-a3caba1af504": [[-0.8880079999999999, 0.000343, -0.865013], [0.8880079999999999, 0.759749, 0.865012]], "bb4e489f-6a01-4da8-946d-fc08bc67b86a": [[-0.246361, 0.0, -0.237729], [0.246361, 0.409659, 0.237729]], "31eb1058-315f-460d-911f-9dd4d4b80a3c": [[-0.254162, 0.0, -0.147018], [0.254162, 0.734771, 0.147018]], "60698fbd-8409-4d94-b5e2-6c2476864f84": [[-0.25, -4.8522699999999994e-08, -0.25], [0.25, 0.5, 0.25]], "1ab599a4-bc6f-3da8-acdb-f1508e908b57": [[-171.4242, -0.019, -66.0119], [171.4242, 73.9159, 69.4989]], "102d2c99-2993-48a1-9596-519c93c4c40b": [[-0.142542, 0.0, -0.14252900000000002], [0.14252900000000002, 0.639886, 0.14252900000000002]], "47685d2b-ec8d-49b2-a61c-18b6d735642a": [[-1.121224, 0.002059, -1.184833], [1.121224, 1.207214, 1.184575]], "4cf8178c-7c07-41f3-aa07-9b64458b6ae4": [[-0.688715, -0.000783508, -1.01151], [0.68879, 1.1670399999999999, 1.01107]], "49bf9877-f049-4953-a76b-c77868354e2e": [[-0.41340000000000005, -1.03433e-17, -0.18798600000000001], [0.41340000000000005, 0.932144, 0.18798600000000001]], "ab9f4f35-4a0b-4f6a-9bc2-ffbe57705edb": [[-0.344338, 0.0, -0.384507], [0.344338, 0.8472280000000001, 0.384507]], "11de1fd6-72bc-4ac2-8a68-5b1f9084bbb8": [[-1.75647, 0.000936662, -0.741851], [1.7566499999999998, 0.942066, 0.742889]], "f91cfa55-133f-4a61-b54d-a2ad69106b79": [[-0.456085, -0.000411353, -0.45618899999999996], [0.456021, 0.7255400000000001, 0.456193]], "a9e03517-ae16-42f0-a529-ce10f9dc5c02": [[-0.504645, -0.00018684599999999998, -0.447656], [0.505217, 0.762443, 0.447633]], "40a9655a-f4eb-4ad7-94b8-cb282aa5b454": [[-0.85, -1.1865499999999999e-17, -0.244588], [0.85, 0.625324, 0.24476900000000001]], "4332abb5-b950-4763-8687-5f66a6e1d68b": [[-0.346036, 0.0, -0.198], [0.346036, 0.47055199999999997, 0.198]], "46a9eeed-d3f1-4353-9ff8-808547935c6a": [[-0.177874, 0.0, -0.180241], [0.17787199999999997, 0.320719, 0.180188]], "209e62c8-e76b-4b6c-a4c7-192c28f5c5bb": [[-0.881737, 0.0, -0.169955], [0.881737, 1.137384, 0.17052900000000001]], "793506bb-13a0-4f1f-96a9-04b600300585": [[-0.309102, 0.0, -0.378764], [0.309102, 0.836301, 0.378774]], "54cd9418-b83d-417c-bfc0-5595cd6fb924": [[-0.24927600000000003, 0.0, -0.219665], [0.24927600000000003, 0.559295, 0.219665]], "68036ef6-c3cc-4a40-9a29-b59db84472f8": [[-1.39688, 5.201230000000001e-06, -1.07192], [1.3981999999999999, 0.927808, 1.06956]], "0bc4c410-240e-42ec-bf07-6589f94ef8dd": [[-0.161672, 0.0, -0.143173], [0.161672, 0.322774, 0.143173]], "af2fa9f0-902f-469f-9953-da8d2c318656": [[-0.825951, -1.37494e-17, -0.276755], [0.825951, 0.923853, 0.276755]], "1d5f1e71-88ef-4e30-9bae-7c94b4509c2c": [[-1.336602, 0.0, -0.571214], [1.336602, 0.910262, 0.571214]], "00555cec-c448-4f9b-94a3-5ee009ead775": [[-0.996928, 7.513630000000001e-16, -0.23927900000000002], [0.996928, 0.419282, 0.23927900000000002]], "534272f5-d0b5-4079-acb4-1aeb9f788bae": [[-0.616436, 0.0, -0.242856], [0.616456, 0.370456, 0.242814]], "b8c07dfa-00e5-4c85-b95b-051c04df8797": [[-0.538614, 0.000431, -0.44583599999999995], [0.538614, 0.804577, 0.445726]], "4d24044b-8ed0-4623-8bf2-fce87aaa3766": [[-0.7, -1.78273e-17, -0.308858], [0.7, 2.64, 0.308858]], "6ac7b3b2-cd64-4de9-a2fa-a09bf3513ada": [[-0.491055, 0.0, -0.377048], [0.49105400000000005, 0.685571, 0.377048]], "c69159f0-d657-48dc-b941-62666a88b59b": [[-0.265142, 0.0, -0.265142], [0.265142, 0.5908359999999999, 0.265142]], "6aa9828e-dfee-488a-a1c9-5f3b8fa4b210": [[-0.215258, -1.03114e-17, -0.221771], [0.215314, 1.04037, 0.22174499999999997]], "568b82b3-c65c-3a7d-b845-8702105e3cb0": [[-109.0304, -0.0002, -56.4164], [109.0304, 91.2372, 73.704]], "4e203e35-931d-4731-8fdc-1812687326c0": [[-0.766345, 0.0, -0.5425030000000001], [0.766345, 0.364965, 0.5425030000000001]], "710ac4e9-9853-435a-b33d-3bed1f999957": [[-0.259548, -6.8017e-05, -0.246845], [0.259548, 0.307791, 0.246845]], "5a73580c-9f1a-40e5-b63b-62e559543514": [[-0.633111, -0.00020255, -0.35879300000000003], [0.633266, 2.23637, 0.35879300000000003]], "31e4a90a-47ea-4afb-87c6-fe75c79a4bc9": [[-0.8, 1.02721e-08, -0.2], [0.8, 1.16663, 0.200019]], "db6ac1ed-a70e-4c48-b573-1ab3e2ff626b": [[-0.427468, -0.00137339, -0.428114], [0.427744, 1.01108, 0.428656]], "705d818d-482b-471a-a572-f66ad298b163": [[-0.529884, 9.507249999999999e-08, -0.203541], [0.529884, 0.88212, 0.203566]], "1feb0ade-8650-4ffc-829c-511f8b8eb215": [[-0.9409820000000001, -1.52588e-08, -0.975848], [0.9409820000000001, 0.8214090000000001, 0.9758490000000001]], "4052c199-a88a-4327-9cd5-7bfd2ce9100d": [[-0.280304, 0.0, -0.25130600000000003], [0.280304, 0.539639, 0.25130600000000003]], "efde2983-456d-460d-88a8-07f10e0f54eb": [[-0.19957, 0.0, -0.19957], [0.19957, 0.498403, 0.19957]], "61e67dd1-ad02-35f1-9232-8839d71d2ddf": [[-0.490381, -0.0, -0.23896799999999999], [0.509619, 0.9, 0.285208]], "15476b5c-7173-41e9-953c-333818c25bff": [[-1.1755, -7.0038e-05, -0.472765], [1.1755, 0.8289329999999999, 0.472583]], "0e58f271-f7fc-42b7-b98b-9eaf1d93169a": [[-0.553168, -0.000496111, -0.24753699999999998], [0.553169, 1.2403, 0.24759499999999998]], "0a6ce4c3-1fbd-4135-b441-40a07c634660": [[-0.7, 0.0, -0.324726], [0.7, 0.75005, 0.32475099999999996]], "4cdc1a3b-b49b-3402-b468-53c6c11d4357": [[-1.0668, 0.0, -0.517525], [1.0668, 0.7570669999999999, 0.517525]], "17fefd05-26c2-46aa-8dde-155642ebd129": [[-0.7050069999999999, 0.0, -0.19186499999999998], [0.705669, 0.795418, 0.192527]], "fcde5055-8e86-428b-acb7-7d96b1d4b1ff": [[-0.332495, 0.0, -0.377937], [0.33254100000000003, 0.698728, 0.37788499999999997]], "d0488331-92cb-49bc-976b-5a407e4da864": [[-0.528145, 0.0, -0.161905], [0.528145, 0.6795, 0.161905]], "9e71a205-0332-4821-b304-cd0406c6fb20": [[-0.271336, 0.0, -0.27134199999999997], [0.271318, 0.6475, 0.27137]], "090fd738-2c0f-4cad-99b5-c9d2c43d4289": [[-0.46639600000000003, -3.88476e-06, -0.196944], [0.46639600000000003, 0.622872, 0.19688]], "7a8b15fc-7a53-31fe-9ff9-0f734f1a55f6": [[-1.815385, -0.000294, -0.775067], [1.791539, 0.798796, 0.918993]], "ea92f9b0-cb40-4f19-bc79-369d8e6520dc": [[-0.9841920000000001, -6.648590000000001e-17, -1.1028], [0.984963, 1.4221000000000001, 1.1028]], "794416b0-c03e-42fd-9a7c-48f5dc9517b1": [[-0.032552, 0.0, -0.032552], [0.032552, 1.137585, 0.032552]], "72873f4b-0cb4-41d4-9700-062ff52f545e": [[-0.752877, -5.21274e-08, -1.0752], [0.752877, 1.13016, 1.0752]], "2846a9c0-4d47-42c8-9cd4-53a64d86a65e": [[-0.24173100000000003, 0.0, -0.242413], [0.241607, 0.859927, 0.242413]], "984f4c0d-7dd9-4ac9-94f5-67880b00edbf": [[-0.6990770000000001, -3.4849e-05, -0.194892], [0.6990770000000001, 1.13957, 0.194892]], "454e0bb1-53fd-4548-b87f-379a3d669d51": [[-0.644725, -0.00136654, -1.18952], [0.644422, 0.8763920000000001, 1.18941]], "9b303b73-1cbd-4de0-b651-3e3b82f2d5c4": [[-1.238007, 0.0, -0.413059], [1.238007, 0.8983599999999999, 0.41305]], "1aed6852-ee09-31b6-a260-9679d7d543eb": [[-0.982533, 0.0, -0.5321359999999999], [0.982533, 0.8246939999999999, 0.532151]], "9d049eb8-b546-4f46-a9b0-76a4af29e331": [[-1.03192, 0.0, -1.08148], [1.0315699999999999, 0.848235, 1.08084]], "0dc2b028-4d13-4c64-b68c-f99091bb9cd1": [[-0.626776, 0.0, -0.294483], [0.626776, 2.030883, 0.292127]], "580a2ad6-9b06-4847-8e98-64de2cefe01e": [[-0.367074, -1.13861e-17, -0.250653], [0.367125, 1.71106, 0.250565]], "725ce92d-a851-48b9-964b-f1bad8fc8307": [[-0.990261, -0.000628423, -1.21469], [0.990262, 1.00214, 1.21425]], "2b44bb02-b77f-490f-acbe-7fe4ecb7dcc1": [[-1.031749, 0.0, -1.061334], [1.031749, 1.200002, 1.061045]], "233c467c-9144-483c-809e-2dd63982d16d": [[-1.04047, 0.000112244, -1.16627], [1.04066, 1.07825, 1.16626]], "008d88ef-c902-45e7-ab69-803b223779b9": [[-0.454784, -7.81186e-05, -0.45584800000000003], [0.454851, 1.02232, 0.45476300000000003]], "67740e98-c6ad-439a-afa4-57589a9e6055": [[-0.838348, -2.8133199999999997e-05, -0.22746300000000003], [0.838348, 1.1179000000000001, 0.227464]], "8998df0e-d34f-4783-b5ae-7d21e3ec3258": [[-1.4859200000000001, -6.1036e-08, -1.4859200000000001], [1.4859200000000001, 2.22897, 1.4859200000000001]], "267e349d-12f3-4f67-bde2-a9e307ae9c73": [[-0.7666769999999999, 0.0, -0.20267], [0.7666769999999999, 0.43722, 0.202671]], "5ef74c88-1042-4b3c-b8ae-8e7bdb0735a3": [[-0.7616289999999999, -3.74959e-09, -1.30037], [0.76117, 1.1512099999999998, 1.30001]], "fc923002-f37d-4181-a50e-2ec3e54f4ac0": [[-0.9322010000000001, -3.05176e-08, -0.160127], [0.9322010000000001, 1.28899, 0.160127]], "3d86330e-9364-4095-981a-20d210d3b264": [[-1.28673, -0.00115775, -0.432809], [1.2871000000000001, 0.783389, 0.433741]], "8bc8e550-b56e-4998-8cb5-03938f552112": [[-0.295271, 0.0, -0.315207], [0.295272, 0.899984, 0.315348]], "776cdff9-dade-4e88-8b23-3c8eec0d5be9": [[-0.998582, -2.76572e-05, -0.29672899999999997], [0.998583, 2.3284700000000003, 0.296738]], "652bb0dd-0361-48ef-aee8-1941dec0f29e": [[-0.6014929999999999, 0.0, -0.289176], [0.6014929999999999, 2.476213, 0.289176]], "44fcf4b2-748c-4a90-9b32-483850b29fbe": [[-0.64634, 6.0180700000000005e-05, -0.506417], [0.64634, 1.12589, 0.507111]], "28e4596d-4bba-465a-bf1c-b5182933bd29": [[-0.877762, 0.0, -0.19548100000000002], [0.877762, 0.454337, 0.19548100000000002]], "a73e4832-ee52-46c3-a6e4-a2249db7f793": [[-0.271198, 3.5845300000000004e-08, -0.276968], [0.271123, 0.920886, 0.27730899999999997]], "e45dc5d0-b8f4-4273-b657-cb2e05a08ef7": [[-1.66262, -1.14441e-08, -0.7884329999999999], [1.66299, 0.779632, 0.789518]], "63703299-e4c2-4156-8df3-180a070141c9": [[-1.06264, 2.52925e-08, -0.4012], [1.06177, 0.8387739999999999, 0.39976100000000003]], "9286eb05-1487-40a4-9187-6f9f1256450e": [[-1.06345, -5.07338e-08, -0.401293], [1.06604, 0.842399, 0.40085]], "ad6c9cfb-e61f-4e14-bca3-777d00a8dbee": [[-0.75, -1.25351e-05, -0.16], [0.75, 0.4, 0.16]], "5314eb25-9c92-49ad-905e-79ca90ef8747": [[-1.30779, 0.000261996, -0.540028], [1.30773, 2.14312, 0.540028]], "6d68928b-d9a7-4ef7-83ed-e863a194d5cf": [[-0.32618699999999995, 0.0, -0.348384], [0.32618699999999995, 0.696407, 0.348384]], "45ec868b-b4e9-4429-8f2f-5082f09b808b": [[-1.04271, -2.0315199999999998e-17, -0.35322699999999996], [1.04271, 2.39722, 0.35322699999999996]], "a35ba93a-a794-41db-b36c-989981a0f148": [[-0.525, 1.1039900000000001e-17, -0.220296], [0.525, 2.04, 0.22043600000000002]], "619eee82-a5bc-4d06-9c15-403e63c0f764": [[-1.2116200000000001, -8.36318e-08, -0.264783], [1.2116200000000001, 0.565233, 0.264783]], "75fd3650-4824-4ab2-81f8-1cc9423c2b56": [[-0.27808499999999997, 0.0, -0.326984], [0.27808499999999997, 0.797071, 0.32742600000000005]], "b2b66d78-5e60-4f75-b608-754b63710f67": [[-0.34036099999999997, -0.000470383, -0.340228], [0.34023800000000004, 0.66227, 0.340228]], "b98f48d1-9b8b-430a-b803-c24d87a77386": [[-0.224651, 0.0, -0.264001], [0.224651, 0.8545520000000001, 0.264001]], "0bde5aca-36dc-4e57-94ef-70947727b13b": [[-0.957734, -0.000256588, -0.21075600000000003], [0.95773, 1.13011, 0.21075600000000003]], "c1ddd574-e823-43df-8a17-11b93eeddc6c": [[-0.29584900000000003, 0.0, -0.316], [0.29584900000000003, 0.93717, 0.316]], "095c2a07-7f10-4e9a-b740-7bdbcbf4b2d6": [[-0.25405300000000003, -0.000212653, -0.262454], [0.254207, 0.508844, 0.262636]], "15c56627-711e-4d33-a435-3599ad97eda8": [[-1.00012, -0.000573355, -0.459342], [1.00004, 1.6814500000000001, 0.459342]], "7d0a56b4-29b3-40ba-970b-850a5791f020": [[-1.4799, -0.000146582, -0.60073], [1.4799, 0.919278, 0.60073]], "53276cc2-ec07-4b36-9946-5f14d8a38305": [[-0.669713, 0.0, -0.510769], [0.669713, 0.307513, 0.510769]], "2be9c694-3e59-4e5f-b81b-f21b9a91cb9c": [[-0.40305300000000005, 0.0, -0.417438], [0.40305300000000005, 0.7839700000000001, 0.417238]], "481e10c7-9e78-46ef-83f2-f69cf4198cc0": [[-0.42015099999999994, 0.0, -0.17677700000000002], [0.42015099999999994, 0.8225969999999999, 0.17677700000000002]], "6c4bcb68-0528-4edf-a2e6-5ae186a6e8dc": [[-1.107693, 0.0, -0.219261], [1.107693, 0.535, 0.219261]], "1f26832a-db11-4d1b-b44f-b4f99d548d5b": [[-0.16018100000000002, -2.44622e-06, -0.158548], [0.16018100000000002, 0.345563, 0.158548]], "376f0d51-0231-35d5-b4f4-a25b6e7b7ecb": [[-173.5745, 0.0, -109.9475], [221.9741, 78.0543, 145.3568]], "a4addf37-1b0c-43d1-9fb1-f272f14cba55": [[-0.220098, 0.0, -0.21817799999999998], [0.220098, 0.5053909999999999, 0.21817799999999998]], "c54f825b-9305-30bb-b6bb-5bd2efde4038": [[-0.206063, 0.0, -0.20716], [0.206063, 0.631521, 0.20716]], "0e25e454-e81d-4050-bfd1-d2d560b25777": [[-0.9315049999999999, -0.000572694, -0.955176], [0.931271, 1.81903, 0.954969]], "24adeee8-399e-46e9-8d8c-aa641084c1e1": [[-0.2, 0.0, -0.193561], [0.2, 0.55, 0.193561]], "25d25b90-1efe-4b21-918d-fa7a4b3844c9": [[-0.488744, -1.69777e-17, -0.277266], [0.488744, 1.4399799999999998, 0.277266]], "ccb73d13-49fd-47da-84bf-255d28892cc0": [[-2.105, 1.22465e-18, -0.22], [2.105, 2.8, 0.22]], "44979314-e61e-447e-8b07-d96ef6a59a9a": [[-1.6837600000000001, -8.10338e-08, -0.514817], [1.6837600000000001, 1.09679, 0.515239]], "2cee3c53-fb28-401c-a9e5-2ba963964b2c": [[-0.450035, -2.74811e-17, -0.45], [0.450035, 0.404869, 0.45]], "1143ecc3-183c-4596-a029-28afcb3e049d": [[-0.256098, -1.16654e-08, -0.24065], [0.256098, 0.81568, 0.24061]], "2cd35737-3596-4f42-81f3-49194dae7600": [[-0.301507, 0.0, -0.301507], [0.301507, 0.298543, 0.301507]], "c4256f70-bce0-43b1-bfd4-e9ba51096b29": [[-0.84744, 0.0, -0.13577], [0.84744, 2.0, 0.13577]], "6fdd09dd-4767-4820-a879-9683dadd1879": [[-0.9127649999999999, 6.11742e-17, -1.11692], [0.912766, 1.0772199999999998, 1.11692]], "1e66214b-4c7f-4ce7-9a37-c41dcd7eb98b": [[-0.633873, 3.05176e-08, -0.228765], [0.633873, 0.586516, 0.228765]], "0af8c872-c38e-4bca-bede-c3fe2bb869ad": [[-0.454326, 8.38777e-18, -0.136983], [0.454326, 1.15979, 0.136983]], "409e7d25-c45c-4127-a303-e6f24c55192d": [[-1.97061, -0.00144947, -0.773759], [1.9697200000000001, 0.919975, 0.7741790000000001]], "d9ad33bc-dc3b-4222-a28b-6eaaa96b5098": [[-0.15, 0.0, -0.075], [0.15, 1.199, 0.075]], "47aa7da4-f017-46ce-96a2-fcff918bc334": [[-1.02219, -3.05176e-08, -1.0785200000000001], [1.02219, 1.7398099999999999, 1.0785200000000001]], "1caa1272-5ba7-4ed4-9e43-aae14247424d": [[-0.266092, -9.002450000000001e-18, -0.23339600000000002], [0.266151, 0.5117860000000001, 0.233439]], "1176d6ce-69ea-4b87-8cae-1a2b9848c207": [[-0.341419, 0.0, -0.35932600000000003], [0.341419, 1.149685, 0.35932600000000003]], "55351be0-e453-4b67-a960-c3aca1840c27": [[-0.35, 0.0, -0.35], [0.35, 0.397294, 0.35]], "f9cafe53-a055-4059-90b2-892a14e3b750": [[-0.455, 1.17558e-17, -0.194988], [0.455, 0.7850490000000001, 0.194988]], "b520ee41-01c6-4e9b-9e82-a9cf9fca9317": [[-0.6, 8.446809999999999e-08, -0.285335], [0.6, 1.07768, 0.285334]], "611f89cf-c6a9-4c2f-b09b-0584d75381c9": [[-0.181754, 0.0, -0.186749], [0.181754, 0.9903019999999999, 0.186749]], "6530b06e-6ad2-4033-b061-f127f1460953": [[-0.90596, -3.05176e-08, -0.9273990000000001], [0.9059529999999999, 1.87215, 0.92716]], "83f11bb1-69de-487a-81df-4d53208d93a1": [[-1.3574700000000002, 7.62939e-09, -0.9075320000000001], [1.35744, 0.9255490000000001, 0.9059550000000001]], "dfaaccd6-4e53-4a2d-beb0-43ad30ea8f41": [[-0.9841920000000001, -5.46439e-17, -1.07838], [0.9841920000000001, 1.33462, 1.07838]], "a493bbf0-3f37-4a72-8d1a-db8797f9eb1a": [[-0.451217, 0.0, -0.45270699999999997], [0.451217, 0.633631, 0.45270699999999997]], "3e44eae9-3e3c-49af-86e8-dc21bfc8725c": [[-0.273033, -0.000298639, -0.23707899999999998], [0.27290600000000004, 0.48473799999999995, 0.237123]], "2733efef-df31-45f7-b427-c3dc7437a75b": [[-0.510664, -5.24517e-10, -0.201316], [0.510664, 1.0913899999999999, 0.201321]], "34a5b5b4-b2fd-3bc6-8637-561616a163a6": [[-75.0, 0.0, -45.0], [75.0, 76.2, 45.0]], "91529269-ea9c-4809-9629-8e60a957b34e": [[-0.33746200000000004, 1.36976e-17, -0.22389399999999998], [0.337554, 0.7002290000000001, 0.22389299999999998]], "dd5f5e5a-c20c-4214-b16d-749940738759": [[-0.7430119999999999, -1.13257e-17, -0.18503799999999998], [0.7430119999999999, 0.540496, 0.18503799999999998]], "2940d1ec-9fd5-484e-ad2e-cf77746f42d9": [[-0.9997020000000001, -1.8398799999999998e-17, -0.300475], [0.9997020000000001, 2.51886, 0.300475]], "481fbaf7-add9-4f68-af6a-2e4d51162439": [[-1.1022100000000001, 1.80021e-17, -0.303997], [1.1022100000000001, 2.66367, 0.303997]], "795de70f-08ac-4a36-8d75-c2d8b064ba50": [[-0.580963, 1.52588e-08, -0.024933999999999998], [0.580963, 0.683891, 0.024933999999999998]], "40aea91d-f454-4d67-bae5-cf05cdd799ee": [[-0.8458950000000001, -0.0, -0.31869], [0.845875, 0.685894, 0.318615]], "57ca041c-ca7f-4215-ad86-66e792e42e4a": [[-1.22, -4.77835e-08, -0.41064900000000004], [1.22, 2.45087, 0.41064900000000004]], "786f57be-dc9f-4ffe-a5fd-4b061e0deb54": [[-0.333328, 7.000000000000001e-05, -0.39683599999999997], [0.333292, 0.8432810000000001, 0.396616]], "0f2d04fd-dfbc-443e-87e8-4df92160cc45": [[-0.75, 0.0, -0.14931], [0.75, 0.761219, 0.14931]], "5d2915d7-cf58-4ef4-a8db-4c8d9301b3ca": [[-1.11527, -1.3507300000000002e-09, -0.496874], [1.1129600000000002, 1.0211, 0.498815]], "7de9ffd6-f4c4-4c35-b7aa-a5a1cb7e285c": [[-0.600451, 1.0506300000000001e-17, -0.178417], [0.600451, 2.65, 0.178417]], "d870d4e4-3ee3-4f14-840d-4283545babf8": [[-0.249923, 0.0, -0.249923], [0.249923, 0.479537, 0.249923]], "0da0ff5e-6562-42cd-9260-a14660b9421b": [[-0.177576, 0.0, -0.20394400000000001], [0.177576, 0.575356, 0.20394400000000001]], "690acb41-1c8a-4222-b3de-859266dcee1b": [[-0.5117349999999999, -0.00015265300000000002, -0.511716], [0.5116149999999999, 0.446674, 0.511242]], "8917637b-ee72-49d4-b64e-ab98df1ff762": [[-0.538565, -5.20575e-18, -0.116945], [0.538565, 1.51471, 0.11695399999999999]], "0fc59610-c9d1-42b3-a536-c2b9e05c366e": [[-0.893054, 0.0, -1.0477400000000001], [0.893054, 1.2170480000000001, 1.0469920000000001]], "062d9bec-df16-4fd6-98ad-57ebc1b71753": [[-1.3757300000000001, -3.6185500000000003e-06, -0.544683], [1.37611, 0.834619, 0.544375]], "a5861df3-2ccf-4dc1-b882-a376699a7fab": [[-0.353701, 0.0, -0.23403300000000002], [0.353701, 0.433216, 0.23403300000000002]], "119abe6a-8111-4a91-9ba9-40b37a4bbee8": [[-0.9527639999999999, 0.0, -0.460139], [0.9527639999999999, 0.540371, 0.460139]], "74aa6cfc-8645-470c-8abf-60b42d65649c": [[-0.589319, -0.0009122819999999999, -0.245003], [0.589278, 1.66541, 0.243537]], "2afd2edf-1a32-4427-91a2-48110d874ecc": [[-1.4752699999999999, -1.23978e-08, -0.23192900000000002], [1.4752699999999999, 0.8290000000000001, 0.23192900000000002]], "2a89f148-8de5-4100-a6f4-e0019bd6e57b": [[-0.5272169999999999, 0.0013039999999999998, -0.534643], [0.527243, 1.121844, 0.534643]], "699d902a-f6d3-471f-a3ad-184ea7fe6666": [[-0.459104, -0.000470114, -0.415495], [0.460329, 1.04156, 0.414731]], "160cb7b0-aee3-3580-8fc6-1c067141f42c": [[-49.7155, 0.0, -27.0276], [49.7155, 78.7274, 27.0276]], "d2f151e6-1233-4b56-b228-c1fbae3b8549": [[-0.193286, 2.98178e-07, -0.191444], [0.193286, 0.962658, 0.191445]], "241c6a0d-9a01-49a1-8a11-7aaf5210e685": [[-0.45635800000000004, -1.4218999999999999e-06, -0.333618], [0.456659, 0.462445, 0.33401200000000003]], "06e80991-bff5-46ab-bb8f-93e270f61a1c": [[-0.311118, -0.00025867500000000004, -0.311574], [0.311114, 0.603256, 0.311146]], "5e4c006a-4a50-32f0-b64a-a3826a0d9196": [[-0.335107, -0.0034260000000000002, -0.286254], [0.335107, 0.801139, 0.286254]], "765564c9-3ac3-413d-a83f-b77282e75273": [[-0.485051, 0.000548612, -0.42186799999999997], [0.484052, 0.690653, 0.421284]], "c1210a52-fd9d-4657-b2f3-253c8fea5320": [[-0.158735, 0.0, -0.280654], [0.158735, 1.173921, 0.280654]], "7b523483-9417-42aa-bcc5-fd8cfd4eb9ed": [[-0.626999, 0.0, -0.24963999999999997], [0.626999, 0.894913, 0.249508]], "00063df5-b7d7-42af-a11c-ac8a690272fd": [[-0.411371, -0.0006356409999999999, -0.411557], [0.41147599999999995, 0.763375, 0.41139400000000004]], "59c20fb1-33bb-4b8f-9f73-0ee53a79264f": [[-0.9222360000000001, -6.12848e-08, -1.1245699999999998], [0.9222360000000001, 2.62328, 1.12396]], "5bec38a8-fc65-4dd2-ba84-da694dbfb2a1": [[-0.377598, 7.5e-05, -0.42328699999999997], [0.37761, 0.885796, 0.423553]], "0033e020-460c-4990-a2d2-cfe223a2f5a0": [[-0.300294, -1.1600799999999999e-17, -0.24057099999999998], [0.300293, 0.97, 0.240681]], "1a933c65-8c70-4fc1-8b14-332d75a68fc4": [[-0.39744, 1.41175e-17, -0.367799], [0.396642, 0.68078, 0.36794699999999997]], "6fde7263-f1dc-424c-a9d1-45364df35ec0": [[-0.5496139999999999, 4.5881799999999996e-08, -0.5960070000000001], [0.549961, 1.28674, 0.596042]], "98c75be6-578f-4a44-9c7f-4e9148fa3d7a": [[-0.758153, -2.4281900000000002e-05, -0.661973], [0.758153, 0.869681, 0.661972]], "10376a00-0f8f-48db-ab89-ac0bd7180da6": [[-0.9201349999999999, -7.62939e-09, -0.350283], [0.919907, 1.0456, 0.351165]], "e44f4796-3c49-41d9-8eae-2d8fdcf6f44e": [[-0.8998609999999999, 0.0, -0.6656839999999999], [0.8998609999999999, 0.664515, 0.6656839999999999]], "1bf7cb00-0113-3971-8fef-842ac086281d": [[-0.259735, 0.0, -0.27819], [0.259543, 1.103732, 0.27819]], "78c4727f-0190-45d8-ad95-75e2a2ff9d13": [[-0.6416689999999999, 0.0, -0.25], [0.6416689999999999, 0.721974, 0.25]], "df18ac99-a364-42a7-b66f-427d4fed2ef5": [[-0.6, 3.05176e-08, -0.235002], [0.6, 2.06, 0.235]], "26ab6047-002b-443d-9c07-793edd23e893": [[-0.423274, -0.000194172, -0.44236600000000004], [0.423298, 0.7474979999999999, 0.44236600000000004]], "0da0ecf6-7c20-38e0-afb2-8917852e4ff2": [[-0.6096, 0.000654, -0.27940000000000004], [0.6096, 0.7615860000000001, 0.27940000000000004]], "81a73455-a00b-49d0-9817-fceeb7506966": [[-1.0, 6.28469e-17, -1.03017], [1.0, 1.83642, 1.03017]], "f397af33-15e0-4239-80d6-4ae7c58af0ce": [[-0.915687, -1.14021e-17, -0.187217], [0.915687, 0.689186, 0.187217]], "e1389435-c8a4-4182-ad40-cbb2dbbefa05": [[-0.20633700000000002, -1.7375299999999998e-18, -0.028376000000000002], [0.20633700000000002, 0.995315, 0.028376000000000002]], "5bb674e5-86c7-4abc-b63c-37996d6e5f4a": [[-0.659199, 3e-05, -0.350675], [0.658861, 0.398748, 0.350742]], "62ddcbee-7efe-4005-bca0-ea600b8161cc": [[-1.210237, 0.0, -0.503794], [1.206999, 1.240229, 0.5044270000000001]], "8c7e4130-d96b-4852-97ef-51aa09bcdc7f": [[-0.59685, 0.0, -0.59685], [0.59685, 0.6672150000000001, 0.59685]], "4ff49173-3cbc-4513-986e-674ad6c8990a": [[-0.292072, 5.391369999999999e-06, -0.291964], [0.292147, 0.882208, 0.291798]], "472d6045-1a5a-49d0-aa6c-36f3e048385a": [[-1.5185579999999999, 0.0, -0.949224], [1.5185579999999999, 0.8676619999999999, 0.949224]], "140e9aa4-7eb8-48ee-96f6-7f3df354ecfd": [[-0.639216, 0.0, -1.0168869999999999], [0.639216, 0.798179, 1.0168869999999999]], "543ac948-4339-49ff-a1ae-84e5747bf53c": [[-0.300001, 0.0, -0.299999], [0.300001, 0.565, 0.299999]], "30bc2d85-ef26-45d5-8fcf-f48d23c49a5e": [[-0.346897, -0.00037420799999999995, -0.449125], [0.346897, 0.921434, 0.449051]], "e488902f-4d17-4793-86df-67e23b9d94ad": [[-0.673374, -6.52437e-09, -0.311458], [0.673446, 0.720874, 0.311458]], "e57d209a-0a16-4961-85e7-1aee139ef322": [[-0.305585, 0.0, -0.20418399999999998], [0.305585, 0.427791, 0.20418399999999998]], "30c70214-5e27-455e-96bb-c55f9f4d8649": [[-0.756635, 0.0, -0.21256699999999998], [0.756635, 0.780004, 0.21256699999999998]], "cfc4944e-bb2f-47a3-9340-deb6998ec92f": [[-0.34846200000000005, -0.000532187, -0.40255899999999994], [0.34840200000000004, 0.71194, 0.40249899999999994]], "08907cb7-81f4-4c9b-a1f4-eefe29eb4b6e": [[-1.0238800000000001, 6.81391e-09, -1.22636], [1.02356, 0.937545, 1.22636]], "71eb55bb-b50f-436e-aba5-a25504574d49": [[-0.944179, 0.0, -0.9604210000000001], [0.943357, 1.111557, 0.960236]], "7ce0d1c5-7cd9-4404-9e1f-7c8811314ddb": [[-1.2344870000000001, 0.000333, -1.211919], [1.2344870000000001, 1.5224170000000001, 1.211919]], "a4480408-4192-48a0-bff7-c3bc0efa25d8": [[-0.36024, -6.962339999999999e-10, -0.107081], [0.36024, 0.42278, 0.107081]], "d923a5a2-d65b-434d-ab54-0a17e27647a5": [[-0.35, -7.50191e-05, -0.37569], [0.350009, 0.8070780000000001, 0.375205]], "84d77d86-bd10-4185-9b08-a0fdfc242e53": [[-1.13798, -0.000941355, -0.40240000000000004], [1.13799, 0.8121349999999999, 0.402448]], "6bf1f088-3ef4-479d-8e1b-9b58d0eb8b0c": [[-0.619478, 0.0, -0.362385], [0.6196079999999999, 0.31556, 0.362385]], "2f9fa145-ed25-4dbb-ac56-9b1e43396df0": [[-0.44248899999999997, -1.74076e-17, -0.284288], [0.44248899999999997, 0.623313, 0.284288]], "4f1109e1-7b9f-4663-8357-e3b665f62821": [[-1.54994, 8.26075e-18, -0.16196000000000002], [1.54994, 2.8, 0.16196100000000002]], "a2e681fa-e610-4f99-ae95-415d06220c8b": [[-1.17275, -1.52588e-08, -1.4132900000000002], [1.17238, 1.30798, 1.4132900000000002]], "5d297a14-19cd-4952-8804-22fdd8b09ae2": [[-0.258772, 0.0, -0.278631], [0.258772, 0.9395560000000001, 0.27880099999999997]], "7e98b04e-db7c-4ef1-9b76-a8db0ab8075c": [[-0.36788699999999996, 5.7099399999999996e-08, -0.374839], [0.36788699999999996, 0.895981, 0.374622]], "a2b5bc66-1a5b-4631-be87-dc504e6619e7": [[-0.427107, -0.00010234699999999999, -0.42715000000000003], [0.42709800000000003, 0.7895699999999999, 0.42714799999999997]], "b2e5a495-3ff6-4344-8394-299a42891da7": [[-0.493565, 9.1849e-05, -0.44232999999999995], [0.493344, 0.7972790000000001, 0.44248800000000005]], "6b3eb1de-ecbc-3e4e-9b5d-b12f0cfec7e9": [[-0.22406500000000001, 0.00025299999999999997, -0.295455], [0.23769200000000001, 1.098225, 0.190296]], "64f86d6f-5091-42c3-9385-ae9655bbca81": [[-0.889928, -2.44864e-06, -0.299595], [0.889797, 2.00222, 0.299208]], "68b37ea2-082c-4024-9e0b-c2d78ed9c32a": [[-0.275053, 0.0, -0.250179], [0.275053, 0.5688799999999999, 0.250179]], "8118a31b-f6c2-41cf-8dc0-bd72fe26a369": [[-0.399815, 0.0, -0.37672199999999995], [0.39964799999999995, 0.796249, 0.37689999999999996]], "d6964af1-bfe8-4e89-99f1-3b79477f16fb": [[-0.222407, 0.0, -0.222181], [0.22237300000000002, 1.256829, 0.222181]], "28678d69-d2a9-459d-a096-e9b7c8a2cfc8": [[-0.354004, 0.0, -0.295263], [0.354004, 0.804917, 0.297232]], "4a1bca02-fbe1-4d5a-8ab8-73cf01b50396": [[-0.971983, 0.0, -1.1395440000000001], [0.971027, 1.206844, 1.139216]], "1aa71039-c31d-41c5-bddb-e9bce0adef45": [[-1.060759, 0.00027, -0.500166], [1.060759, 0.969488, 0.500483]], "63cb7a6a-c4b4-47fb-9360-3f9b04622b37": [[-0.9, 1.23978e-08, -0.5], [0.9, 0.750001, 0.5]], "c4d96e9c-54ac-4a70-8159-233f0a365983": [[-0.327402, -0.000505183, -0.302102], [0.327742, 0.8491719999999999, 0.301925]], "895c8faf-f785-466d-858b-0eede86b0104": [[-0.9009999999999999, -6.10352e-08, -0.301], [0.9009999999999999, 2.5980000000000003, 0.301]], "e7b17552-131f-4d3e-ab1b-f80eb8bbabea": [[-0.33, 0.0, -0.235], [0.33, 0.5, 0.235]], "0c85037a-833c-4e94-a3d8-2bcaeb053bcf": [[-0.634437, -6.8802e-17, -1.13764], [0.634457, 1.35642, 1.13755]], "003eea79-6ec0-4731-b5fb-acc09dc59898": [[-1.10927, -0.000270691, -1.0832], [1.10927, 1.29338, 1.08306]], "4eb55fc9-1a1a-4371-baf4-8f61f3ece58f": [[-1.4292699999999998, 1.43051e-08, -0.8692449999999999], [1.42964, 0.750908, 0.870074]], "10d8b28c-5bdb-4e06-98b7-666404ffcf9d": [[-0.982748, -0.000316189, -0.44171], [0.9827790000000001, 0.7714449999999999, 0.443834]], "bd480c30-db5e-4361-983b-a8373f8441ef": [[-0.317324, 1.2517e-09, -0.459739], [0.317259, 0.8876900000000001, 0.459363]], "cb8db969-8844-4673-b5db-fe3212f58e59": [[-0.800105, 0.0, -0.200136], [0.800105, 0.8500749999999999, 0.200136]], "5654d23b-b5db-4746-bafb-fef701cdbe53": [[-0.594195, 1.83105e-07, -0.144711], [0.593841, 0.648378, 0.144619]], "bc87c192-15c0-4967-a2ce-b496ff29c404": [[-0.556146, 0.0, -0.044116], [0.556146, 0.809097, 0.044116]], "0ce9c013-c520-42a2-b3b3-ca36090ec092": [[-1.031965, 0.0, -0.413903], [1.03213, 0.82804, 0.413728]], "bf9c9441-6e59-4396-ac9c-8416807485ee": [[-1.5, -1.5308e-17, -0.2502], [1.5, 0.32, 0.2502]], "c46d3093-8589-438f-adfc-6f481c203c0d": [[-0.22343900000000003, 0.0, -0.22343800000000003], [0.22343900000000003, 0.46428400000000003, 0.22343800000000003]], "788ca091-7b59-46bb-93da-22d374547b65": [[-0.9464159999999999, -0.00101491, -0.253949], [0.9464279999999999, 0.871653, 0.255543]], "d500da56-153d-47a9-80ba-6722b05193d0": [[-0.7733110000000001, 0.0, -0.34861], [0.7733110000000001, 0.548383, 0.34861]], "e1da1be6-fc1d-4eab-8f25-e58b52265375": [[-0.301066, -0.000359909, -0.36849699999999996], [0.301121, 0.723724, 0.36857999999999996]], "ba3e6b84-bb8f-4df8-8416-8c6779854697": [[-0.452795, -1.90735e-09, -0.460444], [0.452264, 0.960615, 0.460195]], "406fed21-44d3-4a4c-8bce-e942e80856a4": [[-0.237697, 0.000103, -0.261434], [0.237697, 0.876964, 0.261434]], "69a248bd-182e-436a-b4c1-01eae7b06156": [[-1.3459999999999999, 3.10662e-17, -0.5116510000000001], [1.3462399999999999, 0.907389, 0.512819]], "130dfcdc-c79a-4594-8c94-12faf8f537c2": [[-1.21778, 0.000118347, -0.456567], [1.21667, 0.7180240000000001, 0.456599]], "1b34c0ce-ef67-4685-99fd-27f6b82a46b8": [[-0.9000060000000001, 0.0, -0.15004], [0.9000060000000001, 0.6133850000000001, 0.15004]], "18b5b81f-7860-449f-87fb-5552e3a96fb9": [[-0.362458, 0.0, -0.36769599999999997], [0.362458, 0.727103, 0.367697]], "22da2ff5-6dd3-4c99-b179-b075a35eb3eb": [[-0.970527, -0.000566406, -1.24024], [0.969786, 1.07122, 1.24017]], "3257cbae-4b6a-4494-a859-071bae4c65b0": [[-1.04657, -7.62939e-09, -0.2575], [1.0464, 1.0338, 0.2575]], "054808d0-7f84-4553-91b2-068a981c86f6": [[-0.34963, 0.0, -0.432741], [0.34979, 1.182351, 0.43283499999999997]], "0708dd7c-e021-4954-9801-bd3cd8b0ad25": [[-0.224887, 0.0, -0.01], [0.224887, 0.6, 0.01]], "8aa68338-d11b-4180-a15a-5313f5876ac0": [[-0.22870000000000001, -1.50193e-05, -0.228982], [0.228923, 0.9006059999999999, 0.228709]], "de955cf5-7a9f-434f-a613-c5f4705c8918": [[-1.216324, -0.0, -0.465308], [1.215705, 0.800612, 0.465142]], "0a5ad243-5246-4ee4-ac11-4db44797e97e": [[-0.9845659999999999, -6.316270000000001e-17, -1.13777], [0.9845619999999999, 1.14185, 1.13777]], "e407fb7f-cad6-41db-b055-b53cec937796": [[-0.3, -8.31686e-18, -0.214171], [0.3, 1.1, 0.214171]], "d7ea79e0-cb4a-4640-ad77-e9b2703ed084": [[-0.360246, -0.000208209, -0.232928], [0.360244, 1.2958500000000002, 0.233164]], "b8bc0f0f-104a-4a88-8faa-57240690950c": [[-0.212193, -0.00013535699999999998, -0.28685099999999997], [0.212026, 0.8113379999999999, 0.286589]], "a3d8da3d-7458-4755-83a0-9af43322499f": [[-0.49138, -0.00143363, -0.497476], [0.49138, 0.6745019999999999, 0.49723300000000004]], "fbd95d52-9b0d-4088-ba64-15b42a0f79c4": [[-0.77, 0.000477, -0.455], [0.77, 0.510521, 0.454369]], "006c6db0-1477-4340-9163-d08a6cf72738": [[-0.7346779999999999, -1.46924e-17, -0.26518200000000003], [0.7346779999999999, 1.69916, 0.26518200000000003]], "6c4c51f0-34e9-4770-a41e-8e9bcc885721": [[-0.24549800000000002, 0.0, -0.305024], [0.2455, 0.846353, 0.305024]], "5972b934-343c-4428-917b-e7f6524c4d89": [[-1.0569169999999999, 0.000105, -1.267166], [1.057383, 1.1966240000000001, 1.267469]], "43f83fe9-ab65-4d67-816a-1e6e3c1161c2": [[-0.253874, -6.6486299999999994e-18, -0.129303], [0.253874, 0.513236, 0.129303]], "75f1026d-65a5-4cb6-a40f-7cfef0893cba": [[-0.380334, -3.0327599999999997e-05, -0.24574100000000001], [0.380274, 0.5120020000000001, 0.24585100000000001]], "8f8c83e2-5d2a-4b7a-9543-a9fa11d0e525": [[-0.202388, 0.0, -0.202388], [0.202237, 0.458617, 0.202388]], "27a67198-1d19-424c-ad83-623386e48fbb": [[-0.38410299999999997, 0.0, -0.41312899999999997], [0.38410299999999997, 1.1580679999999999, 0.413449]], "a8f8397d-0fdb-4ccd-985f-54771dbeb186": [[-0.75237, 0.0, -0.40132199999999996], [0.75237, 0.7094159999999999, 0.40132199999999996]], "7a64e890-4891-3865-93f3-e12a95027455": [[-0.309624, 0.0, -0.28872], [0.309624, 0.8085460000000001, 0.28872]], "7c1f342b-e045-4e47-a2af-de4bb1652cd8": [[-0.427529, 0.0, -0.384944], [0.42747599999999997, 0.872703, 0.384408]], "41dab4af-402a-42ee-a8db-44620405ee1b": [[-0.405935, 0.0, -0.364991], [0.40592300000000003, 1.038713, 0.36489699999999997]], "38ea2314-1803-442e-9add-ace97d2959a2": [[-0.079319, 0.0, -0.07965900000000001], [0.079319, 0.60127, 0.07965900000000001]], "076491e8-2208-4c5a-ac25-53b4c423da93": [[-0.8670690000000001, -6.330559999999999e-05, -0.47567], [0.866803, 0.753937, 0.47567]], "1ea67d92-da40-4f0a-a17e-fe5f40cc466d": [[-1.038542, 7.8e-05, -0.44665999999999995], [1.039361, 0.7975669999999999, 0.445862]], "3d88f944-0702-4e86-bccd-4ece63efafe2": [[-1.0250709999999998, 0.00014099999999999998, -0.380683], [1.0250709999999998, 0.845753, 0.380811]], "7fde7e39-f5a4-4311-a2b4-015cc2e7be09": [[-0.732127, -1.14441e-08, -0.2], [0.732127, 0.90945, 0.2]], "100f8655-1af5-48b6-86bf-e8453a780abe": [[-0.534865, -3.05176e-08, -0.234342], [0.5348040000000001, 1.63829, 0.234342]], "9abb77a4-2594-4ab2-8feb-02c6a7ef8a13": [[-0.768379, 1.0559399999999999e-07, -0.419127], [0.767735, 1.05351, 0.41904]], "67606a33-44a2-4f1e-bd05-e2903298cca6": [[-0.516749, 0.0, -0.17048200000000002], [0.516749, 0.809236, 0.17048200000000002]], "a11fbb79-e677-4f4e-8f7c-94b99434f1e9": [[-0.47694000000000003, 0.0, -0.407645], [0.47694000000000003, 0.448103, 0.407645]], "99a8d692-aee1-4366-9a4f-a6af3ea70b6f": [[-0.6206130000000001, -3.48687e-08, -0.292818], [0.6206130000000001, 2.16677, 0.292818]], "91a197a3-a53f-4cad-a4a3-8b07408fb491": [[-0.35226100000000005, 5.14315e-06, -0.206979], [0.35216299999999995, 0.18940400000000002, 0.20706]], "722c09e2-9786-417a-8f47-104259cc8840": [[-0.9213330000000001, -0.000515104, -1.0107599999999999], [0.920585, 1.4991999999999999, 1.01166]], "591b3d58-aad9-4d9f-8d81-c60db7fd716f": [[-0.461549, -0.000193219, -0.378466], [0.461565, 0.8381050000000001, 0.37878999999999996]], "19d24c9d-eed2-4cb9-98ef-d2bdfa95d746": [[-0.758744, -0.00021468399999999998, -1.0470300000000001], [0.7598269999999999, 0.869927, 1.04803]], "8aba8742-6711-4330-9e1a-4b6a387f3f97": [[-0.143351, 0.054797200000000004, -0.14319300000000001], [0.143036, 1.17803, 0.144447]], "5af7dda1-dd1b-3318-a3f9-6a4f70190ad6": [[-1.0093729999999999, 0.0028139999999999997, -0.5939679999999999], [0.999613, 0.7268640000000001, 0.595684]], "302eda2f-0c31-42b3-bfd9-ecf9cef8e999": [[-0.429607, -6.40795e-06, -0.369806], [0.42982, 0.741946, 0.370716]], "4260f1cf-57c4-4409-9693-531fcfdafc51": [[-1.48769, -1.57735e-07, -0.893626], [1.48769, 0.8335049999999999, 0.893626]], "67ba2ce8-c6aa-45c2-a522-c615571348cc": [[-0.312272, -1.80802e-17, -0.337119], [0.312265, 0.796767, 0.337103]], "8f4f873e-6974-4126-8c16-ab7d85204903": [[-0.40637799999999996, -0.0, -0.207152], [0.40637799999999996, 1.032781, 0.20715399999999998]], "ed7b75f2-72e2-40c1-ba9b-a953df554904": [[-0.24543399999999999, -1.2052699999999999e-17, -0.201234], [0.24543399999999999, 0.533276, 0.201234]], "1d24fd7b-4ed9-474e-8155-ce0d9def78b7": [[-0.390668, -2.3099899999999998e-17, -0.444292], [0.390668, 0.883739, 0.444264]], "306febbd-0827-4d7e-9901-7a50780c8694": [[-0.98, -2.16354e-09, -0.24727], [0.98, 1.23, 0.247788]], "5e82b82a-c5cc-4d27-8082-202c55b56bca": [[-1.085699, 0.0, -0.186841], [1.085699, 0.886575, 0.18684]], "7609f402-54ca-4d06-9551-93e16da368e2": [[-0.219053, 2.9999999999999997e-06, -0.258559], [0.219071, 1.010889, 0.258584]], "9c62fb18-f0b7-4ba4-abca-bc60d19b2a42": [[-0.35470799999999997, -0.000177878, -0.353453], [0.35470799999999997, 1.18842, 0.351098]], "5e0ce7b5-63d4-4d93-8728-fb075e3ff248": [[-0.4, -4.02169e-05, -0.4], [0.4, 0.8684480000000001, 0.4]], "0d4d8459-04d5-4737-97f1-114854c673c9": [[-0.67388, 0.0, -0.16403800000000002], [0.67388, 1.12775, 0.16403800000000002]], "7af70c72-f14b-47e8-b346-3cf98836fc17": [[-0.7641849999999999, 0.0, -0.317764], [0.7641849999999999, 0.662025, 0.317629]], "149033c9-04cb-487c-984d-10cadcc4ddc0": [[-0.900001, -1.21099e-17, -0.255027], [0.900001, 0.610009, 0.255]], "3c046cec-52cb-4b97-9b39-53e549807679": [[-0.379108, -7.62939e-09, -0.086878], [0.378541, 0.506305, 0.086943]], "9bded2cd-199c-4c00-82f2-e1169634de43": [[-1.07495, -8.91609e-09, -0.292746], [1.07495, 1.63162, 0.292746]], "1ccf7503-24cf-4127-a545-3ffceb6b9bc6": [[-0.906773, 0.0, -0.375143], [0.906773, 0.367171, 0.375143]], "9b666081-d547-44ed-ae34-e32f0c467755": [[-1.22211, -3.34273e-18, -0.094194], [1.22212, 1.61453, 0.094194]], "6016e4da-6365-4b64-a6c1-468be224aa11": [[-0.8025, -0.000513337, -0.47472200000000003], [0.801365, 0.8634569999999999, 0.47490499999999997]], "4bf1afb1-c034-4849-9131-1b41d051d0c4": [[-0.201727, -1.23879e-17, -0.202309], [0.201727, 0.140419, 0.202309]], "0fee7a5a-5478-4c0d-af5f-e6dd0159bf6d": [[-1.16122, 1.0916300000000001e-07, -0.22027999999999998], [1.16122, 0.3336, 0.22027999999999998]], "04b8f221-06b7-42c7-a762-780898b8f7b2": [[-0.292927, 0.000115103, -0.283292], [0.29327000000000003, 0.36845599999999995, 0.282734]], "e9c241c7-0466-4a2d-8489-11dbd8191dd3": [[-0.44315800000000005, 0.0, -0.44315800000000005], [0.44315800000000005, 0.414707, 0.44315800000000005]], "01dfc00c-638a-4890-8788-ccd35e567602": [[-0.272327, -9.45725e-18, -0.256044], [0.272327, 0.47869, 0.256044]], "1c1c88dd-39bf-4a6b-9b46-e2699b3a98eb": [[-1.04791, 1.01007e-12, -0.395173], [1.04755, 2.38239, 0.39509099999999997]], "45ac0c68-6109-45b5-98dc-456f579113c0": [[-0.281528, 7.62939e-09, -0.283221], [0.281528, 0.5367649999999999, 0.283221]], "d5663f07-64a0-495e-a020-f3a85818d71a": [[-0.236282, 1e-06, -0.23629999999999998], [0.236293, 0.489352, 0.23630199999999998]], "0803fd68-5726-49fb-9fa5-5e68bfbeceb0": [[-0.33582, 0.0, -0.556403], [0.335819, 1.055825, 0.55642]], "22caee27-9cb3-47ba-90c2-ba17560d039c": [[-0.955514, -7.34733e-05, -1.05385], [0.955635, 0.9736879999999999, 1.05389]], "395251d5-2f67-4b6f-addc-b3cfc149fa99": [[-0.8658480000000001, 1.2207e-07, -0.25485], [0.865847, 1.70119, 0.25485]], "e664d640-6a5b-4d18-9d1c-b28ae9ba0f28": [[-1.886642, 0.0, -0.47035899999999997], [1.8870390000000001, 0.8939499999999999, 0.47035899999999997]], "dd520805-5a8f-4ef2-b35c-82f57b55349e": [[-0.37634999999999996, 7.62939e-09, -0.351694], [0.37646999999999997, 0.888277, 0.35131100000000004]], "cedd4ac8-2347-4dc0-b391-772248e58ede": [[-0.472072, 0.0, -0.46563000000000004], [0.471458, 0.922493, 0.465268]], "50caf37e-e0b1-4aa7-93ef-93c474f3f4d2": [[-0.225274, 0.0, -0.25597000000000003], [0.225274, 0.873489, 0.25597000000000003]], "253c8192-6266-41eb-aede-abaf5474e928": [[-0.867214, -5.6029e-05, -0.426984], [0.8669110000000001, 0.821467, 0.425469]], "af69165c-eead-4290-821e-e532868d695a": [[-0.27087700000000003, -6.8810999999999995e-18, -0.155831], [0.27087700000000003, 0.45061799999999996, 0.155831]], "58aea236-874e-4877-bfbc-0f9729be170e": [[-1.63836, 1.80021e-17, -0.303997], [1.63836, 2.66367, 0.303997]], "7c1b5b39-a2eb-4c7b-93cd-36cbe448edf6": [[-1.5841800000000001, 0.000264276, -0.765461], [1.58321, 0.778168, 0.766501]], "7dc13931-2c24-3ec9-99fd-d67875b02680": [[-0.358354, 0.000123, -0.38339399999999996], [0.35944400000000004, 0.7299599999999999, 0.41855600000000004]], "702b103d-9b81-4b92-b435-1c8e592f7098": [[-0.492491, -0.0, -0.474933], [0.492494, 0.9852500000000001, 0.474692]], "186286b8-93a9-4da6-bc7a-8002a3dc9204": [[-0.8501569999999999, 4.09806e-05, -0.437073], [0.850119, 0.644336, 0.436868]], "8b814b90-c4ef-4276-be4b-20ac374a14b6": [[-0.21201899999999999, -6.55801e-05, -0.211894], [0.212613, 1.82705, 0.211923]], "6dbce80b-e290-4a7d-8670-e1242d496ac0": [[-0.245531, 0.0, -0.245565], [0.245531, 0.606816, 0.245565]], "ab93058b-a3a0-4485-a536-52c5bbaeaf1a": [[-0.37217100000000003, 0.0, -0.38205500000000003], [0.372182, 0.672771, 0.38198]], "cece9bf9-5306-4727-ab59-f6411676fdd3": [[-0.42923900000000004, -0.000168355, -0.43826], [0.429651, 0.77262, 0.43856900000000004]], "6a0fc647-ae35-41d0-be97-3e98c1814fa9": [[-1.7825, -1.4571699999999998e-14, -0.365501], [1.7825, 2.556, 0.365501]], "7aeeeedb-d586-429c-8ba4-8f80ddae02bf": [[-0.282, -1.68389e-17, -0.282], [0.282, 0.13, 0.282]], "044e0463-2dcc-49b2-9718-dcd8a43b899f": [[-0.41573, 0.0, -0.364094], [0.415644, 0.890577, 0.363746]], "50fdbd0d-1ae5-4e5c-89c2-8fc2e0eb05a7": [[-0.467692, 6.7e-05, -0.284897], [0.46767600000000004, 1.131947, 0.284897]], "c13fcaf2-dcf6-4878-8770-52a05e5f8fea": [[-0.276276, 0.0, -0.20044499999999998], [0.276326, 0.525656, 0.20041399999999998]], "729cb450-34d4-4ab0-ac94-e7279f07c31e": [[-0.243288, 0.0, -0.286098], [0.24333200000000002, 0.928365, 0.286049]], "f8c3c03e-c471-4823-8588-1216d68e7e90": [[-0.19545300000000002, 1.71428e-08, -0.19545300000000002], [0.19545300000000002, 0.46061599999999997, 0.19545300000000002]], "23281f81-d550-4f4e-a17f-92b63006316c": [[-0.548537, 1.3e-05, -0.548775], [0.548537, 0.914674, 0.549296]], "344c28f2-2354-4ef8-a706-74eafd4152cd": [[-0.550959, 0.0, -0.117587], [0.550959, 0.889376, 0.117587]], "1f4c4bcf-eabd-4b01-89a7-0040213b3ad0": [[-0.236491, 0.0, -0.226808], [0.236491, 0.43379100000000004, 0.226808]], "857f3505-5bc6-41bb-8b2a-0eecae6f5b4a": [[-0.9573529999999999, 0.0, -0.185], [0.9573529999999999, 1.116416, 0.185]], "4eac94f3-c301-420a-9a2e-c327db12b121": [[-0.424926, -9.447340000000001e-09, -0.433718], [0.424662, 0.67999, 0.433]], "26fcbc81-34c4-4d12-a89d-25fb0df9c8ad": [[-0.876922, -0.000171195, -0.526907], [0.876923, 0.7708710000000001, 0.526907]], "2324b33c-f9eb-3640-94a0-04a67d9d8461": [[-0.232608, -2.8999999999999997e-05, -0.255319], [0.23257000000000003, 0.77925, 0.260876]], "05e1a765-ab62-49c0-a40e-adf7ede590c4": [[-0.967975, -3.05176e-08, -1.00173], [0.96735, 1.2232399999999999, 1.00116]], "27afe8b6-b7a6-4b44-a916-788b9aa27ed1": [[-0.224991, -0.000102924, -0.224991], [0.224991, 0.49457999999999996, 0.224991]], "73a7f22c-04d3-48e3-a0dc-ed78880cbc10": [[-0.291479, 0.0, -0.03458], [0.291479, 0.049038000000000005, 0.03458]], "58963c05-1397-4bd4-888b-ecb29a450d82": [[-0.34224400000000005, -0.000777234, -0.34105800000000003], [0.34265300000000004, 0.392539, 0.341756]], "939608e2-f989-4f7b-bb7b-3778938b438f": [[-1.17627, 1.75114e-07, -0.492188], [1.17627, 0.828233, 0.492172]], "74a23289-5427-4455-9189-679c0534f616": [[-0.259962, 0.0, -0.29063], [0.25982, 0.6950020000000001, 0.29063]], "77085e5b-f0d1-4d2c-bdb5-7f4a458e5079": [[-1.97234, -0.00020611299999999998, -0.9584860000000001], [1.9721199999999999, 0.901305, 0.958391]], "5c6edb70-b212-4579-abbb-04540151a0bc": [[-0.685346, 0.0, -0.35999200000000003], [0.685346, 0.6737730000000001, 0.35999200000000003]], "d66678d0-a604-4a40-b60f-37f763e9e163": [[-1.36272, 1.52588e-08, -0.509918], [1.3649700000000002, 0.9184180000000001, 0.507232]], "7928346a-7078-466e-91e2-5f2a38ed2cf8": [[-1.452972, 0.0, -0.507808], [1.4523670000000002, 0.7539969999999999, 0.509807]], "27498740-3ec5-425a-aaa3-9f4703765e5f": [[-1.04818, 0.000100545, -1.1597499999999998], [1.04844, 1.02092, 1.16017]], "2987f74a-6a99-48e0-a15f-def10895ad06": [[-0.375629, 1e-06, -0.385843], [0.375629, 0.794322, 0.385843]], "a1cfe72e-bd14-408c-ad68-ef6c7ef2a7bb": [[-0.454361, 0.00029499999999999996, -0.454361], [0.454361, 0.9329609999999999, 0.454361]], "a068693f-ecbe-4231-9f32-23f0a3210fda": [[-0.5207459999999999, -0.00022857200000000002, -0.214303], [0.520901, 0.852168, 0.214286]], "20eec04a-a4c8-40b6-94cc-bd4d9387f966": [[-1.246186, 0.0, -0.5147229999999999], [1.246186, 0.8116549999999999, 0.5147229999999999]], "272766d5-3e7c-4b6e-9e48-7aa29f0590fe": [[-0.388015, 1.52588e-08, -0.354086], [0.388141, 0.754098, 0.354534]], "6bcb0872-4280-4a6d-9dd7-703af3487783": [[-0.7509999999999999, -1.54144e-17, -0.327611], [0.7509999999999999, 2.3609999999999998, 0.327611]], "1304be14-bd5d-4bf4-bdf3-a30cdae5fcb7": [[-0.241666, -4.49452e-05, -0.24096299999999998], [0.241637, 0.835235, 0.241256]], "64556062-aa99-333a-ae2a-bd214a499099": [[-40.9156, 0.0, -42.101], [39.6469, 87.126, 42.4861]], "13c62b58-7cc4-4bf7-80d1-3d5f05080f54": [[-0.35548, 8.3e-05, -0.39576], [0.355681, 0.726511, 0.395713]], "81251bae-95f0-44c2-923d-439a38549886": [[-0.620329, 2.7000000000000002e-05, -0.641357], [0.620514, 0.530001, 0.641184]], "4e996f6c-ea8f-4f0b-88d6-b724fd671d73": [[-0.316825, -1.2224599999999999e-08, -0.115815], [0.316799, 0.504262, 0.115954]], "d1f19589-025f-4bb5-8aa1-c75ff2d04e37": [[-0.18553799999999998, 4.8292299999999995e-09, -0.185651], [0.18553799999999998, 0.386513, 0.185651]], "679f0759-014c-4b76-9ec2-655069ab90fc": [[-0.262094, 0.0, -0.235884], [0.262094, 0.524188, 0.235884]], "636a2637-8069-4f0d-a32c-436e959b102f": [[-0.382393, -0.000789329, -0.34238], [0.381755, 0.936226, 0.34246000000000004]], "e0755599-37cc-4c96-945a-34cdabb8252a": [[-0.225, -1.18877e-17, -0.215859], [0.225, 0.48201, 0.215859]], "14115c0f-f5aa-3401-8930-b641d04c0a5a": [[-0.722616, 0.001099, -0.356943], [0.722637, 0.76047, 0.363003]], "fcbcb5bc-5680-408e-85fe-489ea6fbde8d": [[-1.22823, 0.0, -0.425147], [1.22823, 0.797436, 0.425147]], "5921e731-07e7-42be-9b2b-b7e7025de569": [[-0.800119, -3.26642e-08, -0.189988], [0.800172, 0.429061, 0.190098]], "3a78e14c-171d-451f-b4ad-41936568aba7": [[-0.456865, -1.38112e-16, -0.30081800000000003], [0.45685499999999996, 0.35070300000000004, 0.30081800000000003]], "140689ca-0f1e-4b8d-bac4-3b679d3f6ba1": [[-0.819502, 6.10352e-08, -0.256904], [0.819502, 2.35458, 0.256905]], "00033fdb-e9f8-4abe-aa9b-878761356d35": [[-0.382151, -5.54071e-07, -0.41335500000000003], [0.382219, 0.9952589999999999, 0.413329]], "710f4b97-34d9-48d1-b8a3-f880725f28bf": [[-0.335156, -0.000219055, -0.36764899999999995], [0.33523000000000003, 1.0472700000000001, 0.367707]], "009dc710-856c-4d59-b6bf-38a32a6241b5": [[-1.05158, -0.000155702, -1.12829], [1.05158, 1.40792, 1.1305500000000002]], "2d65ee1c-d8a5-3ccf-b04d-c0afd5f3c307": [[-1.2, 0.0, -0.305872], [1.2, 0.639749, 0.305872]], "68b3c32f-6c5e-47a1-a751-40f7d86fb1a1": [[-0.055131, 0.0, -0.054845], [0.055187999999999994, 0.620375, 0.054836]], "7ed7b74e-4db4-3872-ab7f-282b2b43c6bb": [[-0.301019, 0.0, -0.350495], [0.301019, 0.769485, 0.350505]], "aa4714b2-e1f4-40b9-b680-5ee2d82c920b": [[-0.286283, 0.0, -0.17816099999999999], [0.286283, 0.403262, 0.178162]], "30504177-1412-4369-8604-50e687cced55": [[-0.43687, -1.0003200000000001e-17, -0.436008], [0.43687, 0.6515439999999999, 0.436008]], "6d2fc776-acfe-4c1b-b6ce-f4df0925ce49": [[-1.07563, -6.726140000000001e-07, -1.15151], [1.07563, 1.11005, 1.15174]], "c4c8ed38-7bdc-479b-ad41-40efb930aa35": [[-0.29744499999999996, -0.000200996, -0.282651], [0.297583, 0.878069, 0.282652]], "f3a52dcb-b4c1-4682-a1ef-5b8387a7760a": [[-0.149469, -9.37916e-16, -0.0781493], [0.149192, 1.56218, 0.0781493]], "76d1b15e-667e-4b7a-b6dc-74bf7626350c": [[-0.9966769999999999, -0.0008960410000000001, -1.12642], [0.996665, 0.917175, 1.12618]], "47743ba1-1b3a-4b2a-8698-caf384221bca": [[-0.357307, 0.00045367400000000005, -0.53326], [0.357307, 0.681955, 0.53326]], "7cfc39e8-1e10-4487-93ba-dc811893ba21": [[-0.33677399999999996, 0.0, -0.307355], [0.334611, 0.838311, 0.30933299999999997]], "318f6349-44bb-487e-aa44-4c2649e9e348": [[-0.22383299999999998, -6.34144e-05, -0.25393699999999997], [0.224178, 0.7666679999999999, 0.253664]], "70bfd2f5-3ab1-4876-9d2e-9a7d151bc657": [[-0.0603932, -1.15446e-05, -0.046579499999999996], [0.0599639, 1.06358, 0.046579499999999996]], "2174747e-042c-4695-8b8e-2fa6200af0f8": [[-0.209022, -7.59903e-07, -0.21816500000000003], [0.20903300000000002, 1.0444499999999999, 0.217833]], "7b805dfe-868b-4bf7-84db-f49054f97d20": [[-1.5, -1.5467e-17, -0.29740500000000003], [1.5, 2.8, 0.298776]], "0c7c35ff-8fda-44f7-9e5a-cf75ed3e50fa": [[-0.39989600000000003, 0.0, -0.400047], [0.39989600000000003, 0.500293, 0.400047]], "eed7aea0-aa17-48f4-bf86-fb696c2847aa": [[-0.751108, -2.2477200000000002e-17, -0.402084], [0.751108, 0.764, 0.402084]], "0f675b38-d77d-4056-916d-28378e208dbc": [[-1.24272, -0.000318398, -0.396683], [1.24184, 0.885089, 0.39712600000000003]], "fb669034-ca92-4c3d-823d-a38900b28d9e": [[-0.311391, 0.0, -0.285045], [0.311391, 0.66497, 0.285045]], "f87cd562-016f-4da4-a08f-13debf311708": [[-0.263502, 4.2e-05, -0.255611], [0.263428, 0.787205, 0.25562799999999997]], "c93297f5-50a4-4f80-8bfb-085f61af44a2": [[-0.49086199999999997, 0.0, -0.472169], [0.49086199999999997, 0.995908, 0.472229]], "0a42986e-556c-4afa-9973-86f93de5fa76": [[-0.3, 0.0, -0.225], [0.3, 0.45, 0.225]], "60bd4423-bbe8-4595-9f57-15783f43cfde": [[-0.900133, 6.14929e-17, -1.08425], [0.900133, 0.9557859999999999, 1.08425]], "ecbe987e-9923-48e6-9ef3-56af6d1b920d": [[-1.94717, -5.51685e-17, -0.94011], [1.94672, 0.9127620000000001, 0.94]], "9e5c0313-b76c-4ae6-8e15-87f7e8263a80": [[-0.22361599999999998, -1.17545e-17, -0.205533], [0.22361599999999998, 0.649962, 0.205533]], "742e05fe-6602-41b3-a17d-663411244c5e": [[-0.40033799999999997, 0.0, -0.398031], [0.400406, 0.634235, 0.398027]], "5225ced7-7ee3-4b5f-98fe-127a94e9a2d4": [[-0.8141200000000001, -1.28019e-17, -0.222497], [0.8141200000000001, 0.62446, 0.222497]], "24a7dac1-c5cd-4631-94a8-439ef02bca77": [[-0.297447, -3.09002e-06, -0.295798], [0.297447, 0.472973, 0.295798]], "bdbebf89-4395-434f-a409-da0219e71164": [[-1.11595, -5.85566e-09, -0.478037], [1.11728, 0.8468859999999999, 0.479123]], "20f171c7-21ae-4876-bb79-6ec3fabc2ade": [[-1.12211, 9.828450000000001e-08, -1.13987], [1.12216, 1.87337, 1.13985]], "b5f97d3a-4eec-40e4-b1cf-b320639c2043": [[-1.335434, 0.0, -0.524037], [1.334764, 0.900856, 0.524037]], "65660d98-3afb-33f5-afbb-41899bf888b4": [[-0.9041419999999999, -0.007259, -0.606653], [0.9040250000000001, 0.779248, 0.606653]], "7cb0ab45-a470-4f26-a951-3d5988ae0f48": [[-1.0479, 0.00015680099999999998, -0.449584], [1.04828, 0.9476730000000001, 0.450751]], "34bd8afc-dd97-3b13-8d19-3fa28f025e51": [[-27.7827, 0.0, -27.9401], [27.7827, 87.6048, 31.2247]], "17ebff72-48fa-4ab7-a912-9bdbe64df4d0": [[-0.270936, 7.62939e-09, -0.270936], [0.270936, 0.6548609999999999, 0.270936]], "3e83bd4f-6802-437f-a8b0-e115d57d7b97": [[-0.25011099999999997, -1.58536e-05, -0.25011099999999997], [0.25011099999999997, 0.294501, 0.25011099999999997]], "fe17af6e-8724-4357-b600-e5e7abb5db5e": [[-0.29034, 0.0, -0.28503900000000004], [0.29034, 1.227264, 0.28503900000000004]], "5126dfaf-eabd-45e3-b976-04dd27606caa": [[-0.252906, -4.879819999999999e-09, -0.251854], [0.252906, 0.560173, 0.251854]], "6f87d8ec-3bdc-46ec-b09c-7370a8878fef": [[-0.361956, -0.00014685, -0.37256700000000004], [0.362195, 0.7571030000000001, 0.37256700000000004]], "23852a10-b717-41b9-9ab0-90e533d3b592": [[-0.8595869999999999, 2.34148e-06, -1.07349], [0.859883, 1.48773, 1.07324]], "0efd05bd-7270-42ef-b4c3-8afd35eeff85": [[-0.8713580000000001, -1.3383599999999999e-17, -0.256991], [0.8713580000000001, 0.509302, 0.256991]], "d78e2754-80aa-458d-95db-e7ef03b34984": [[-0.266521, -8.29316e-09, -0.223108], [0.266521, 0.558005, 0.223108]], "1c81749c-8727-4692-aa5c-c748a3c32d51": [[-0.250064, -4.09994e-05, -0.263617], [0.250064, 0.0674554, 0.263615]], "31120a4d-2be1-35b8-8bff-f80557d7463b": [[-58.058, 0.0, -67.4871], [58.058, 85.0934, 67.4871]], "3f62e5f1-dafc-40db-9d2e-0cf798b69dcc": [[-1.6027099999999999, -0.000342939, -0.475418], [1.60294, 0.921153, 0.47611400000000004]], "1d98af0b-9e19-4ec7-b006-5d1f53b6b44d": [[-1.15, 0.0, -0.3], [1.15, 2.45, 0.3]], "f5b9df5f-562b-4064-bcb4-cf2daf47cd33": [[-0.58694, 0.0, -0.586944], [0.58694, 1.019541, 0.586944]], "239ce4a3-256c-4b04-b578-caeb52fb87ba": [[-0.6729559999999999, 7.62939e-09, -0.6138669999999999], [0.672932, 0.267907, 0.6139180000000001]], "06a11496-dadc-469d-86ec-1c15fe15fa1e": [[-0.373741, -7.238649999999999e-17, -0.373741], [0.373741, 0.111597, 0.373741]], "07e050f2-15a2-4c83-b484-b3a022b2ba02": [[-0.978715, 6.33035e-17, -1.0766], [0.9782129999999999, 0.9435169999999999, 1.07646]], "6e45e554-7bc1-304d-a333-26ea6271e6b0": [[-60.7347, 0.0, -37.6833], [62.9108, 136.0725, 40.2794]], "5ce9e65d-d7bc-476f-8143-85bfe0ed029e": [[-0.7712739999999999, -2.2090299999999998e-08, -1.05995], [0.7712739999999999, 1.31076, 1.05995]], "b6d34142-e8df-47e0-8340-01f38359fcac": [[-0.391154, -1.56434e-08, -0.14394], [0.391154, 0.610538, 0.143922]], "73691d26-2249-4c48-ae64-454b184fcf4e": [[-1.7553999999999998, -0.0009509130000000001, -1.24014], [1.7550999999999999, 0.692886, 1.2392400000000001]], "0e259558-e927-4c08-8372-9b19688957d1": [[-0.6, -1.23995e-17, -0.2325], [0.6, 0.8, 0.2325]], "4e38c28c-4661-4182-bf58-2ce346f27fe8": [[-0.437134, -2.23122e-17, -0.43748800000000004], [0.43748800000000004, 0.116587, 0.43748800000000004]], "43388928-4fb1-42ed-85d2-513abeba766e": [[-1.322088, 0.0, -1.0521129999999999], [1.322708, 0.674435, 1.051684]], "5a1519a1-907b-4dec-a294-02545967adcd": [[-0.354863, -6.23353e-05, -0.23755800000000002], [0.354864, 0.680057, 0.23799800000000002]], "99bb0a0a-8d3c-4887-9014-d3ba91aacd5f": [[-0.249998, -1.33992e-17, -0.255929], [0.250002, 0.49999299999999997, 0.255926]], "5c84e17c-a2e4-48f9-8b00-bcaeaaa9373e": [[-1.148695, 0.0, -0.535721], [1.148805, 1.188255, 0.535777]], "69c5569e-2685-4fd4-b691-61e16a893b4d": [[-1.0418399999999999, -0.00035518, -0.797781], [1.04129, 0.885069, 0.796989]], "8dd3797a-d0f9-43ca-bc00-7a96cfae58c4": [[-0.858968, -1.55194e-17, -0.302282], [0.858968, 2.03318, 0.302282]], "73254188-802f-44ad-b62d-683bbe0b10b2": [[-0.710294, -6.6742800000000005e-18, -0.16], [0.710294, 0.69923, 0.16]], "5d8e7816-838e-45d8-b0db-5cc6f503cb22": [[-1.26571, 0.0, -0.530458], [1.26571, 0.894114, 0.537535]], "45113567-caf1-3757-8b25-fcb18504b64f": [[-0.513684, 0.002856, -0.444651], [0.513863, 0.776087, 0.462316]], "c7f29efd-c57f-45d5-b30d-b8c06f897994": [[-0.349729, 0.000589, -0.334515], [0.35001899999999997, 0.7643000000000001, 0.33431399999999994]], "653f2baa-60de-4d5a-b0f4-c3f1b5461e92": [[-0.707551, 0.0, -0.395], [0.706999, 1.098928, 0.395]], "2b308f89-9b94-3d94-a7e2-db47476330e7": [[-0.464118, 0.0, -0.405461], [0.454692, 0.79868, 0.409129]], "cd969ec6-5ff1-4aef-900f-cc2d320791b3": [[-0.358954, 0.0, -0.30062300000000003], [0.358954, 0.41623699999999997, 0.30062300000000003]], "e4accb44-ea51-425a-ae27-3dac83db46b4": [[-0.7529980000000001, 3.24249e-08, -0.392999], [0.7529980000000001, 0.7530540000000001, 0.392999]], "57666a38-d501-4619-bfc8-09840a8d28d9": [[-0.158047, 0.0, -0.15148799999999998], [0.15804600000000002, 0.396083, 0.151485]], "a7380f05-ecb0-4014-acf6-e69ecea2f57f": [[-0.6346229999999999, 3.36871e-17, -0.56735], [0.6346229999999999, 0.514677, 0.56735]], "55a4dbfd-89c1-4f48-8542-0767b0e5b0e2": [[-0.237847, -9.82369e-18, -0.237847], [0.237847, 0.427436, 0.237847]], "7f773d7a-dbc5-4427-b732-263b0e5e2a9d": [[-0.538902, -9.6642e-18, -0.25832499999999997], [0.538902, 0.857023, 0.258347]], "08a0aeb2-cab2-46a3-b392-9f69e7c2b823": [[-1.1869939999999999, 0.000742, -0.38702], [1.187122, 0.631427, 0.38722900000000005]], "e1901a24-92a0-48c6-9d94-170924c21600": [[-0.285701, 0.0, -0.19625], [0.285701, 0.449304, 0.19625]], "27c28ae1-d885-4018-81a3-f3c033cd8f47": [[-1.07601, -0.00130274, -1.15605], [1.07445, 0.8323180000000001, 1.15533]], "0d46061f-d479-4575-9f31-c48589cc9d39": [[-0.6848810000000001, 0.0, -0.38114800000000004], [0.6848810000000001, 0.703232, 0.38114800000000004]], "efd57f9b-c5e6-43c2-b6ce-be8b3ad405ff": [[-1.17896, -3.3376399999999996e-08, -1.15086], [1.179, 1.2776, 1.15075]], "6259842e-4bda-46b5-a577-1bc8cd940de3": [[-1.2169809999999999, 0.00013, -0.43721600000000005], [1.216983, 0.7913410000000001, 0.43721600000000005]], "44d7529c-c2c6-44c9-a0f5-5759e210a957": [[-0.220852, -0.00108057, -0.222153], [0.222087, 0.470871, 0.22253900000000001]], "6270767d-7439-470e-afc3-b72d6a86b40a": [[-0.171813, 0.0, -0.171649], [0.171692, 0.328068, 0.171649]], "7124c2c2-f551-4f3d-9875-8c0ad41f8271": [[-0.43992800000000004, 0.0, -0.17533300000000002], [0.43992800000000004, 0.252662, 0.17533300000000002]], "08290e00-3e26-4b49-bbf8-6514e51aa40c": [[-1.02072, -1.63018e-17, -0.313772], [1.02072, 2.4, 0.313775]], "2d5ffffd-9294-4dfa-9200-68f65d449a7b": [[-1.0092, -0.000100139, -0.319634], [1.0076399999999999, 0.9559780000000001, 0.32091299999999995]], "ac47f2a6-0cac-4648-b698-0233c34f7f70": [[-0.14854699999999998, 2.8999999999999997e-05, -0.14854699999999998], [0.14854699999999998, 0.698387, 0.148567]], "d97195f1-c010-4d18-a002-7820e8082bc6": [[-1.29581, -1.89333e-17, -0.45075699999999996], [1.29525, 0.8612690000000001, 0.450826]], "40654b1e-a20b-4210-beb0-eceedac7644c": [[-0.7031480000000001, -4.2948100000000003e-17, -0.701396], [0.7031480000000001, 0.504972, 0.701396]], "bb158b66-fcbe-4e17-8fd9-4e0be8932a23": [[-1.640339, 0.0, -1.154773], [1.639586, 0.822373, 1.154774]], "14e0cd8e-92b1-43c6-9544-ab973375e6ac": [[-1.2753100000000002, -0.000118381, -0.536701], [1.2742, 0.9408249999999999, 0.534898]], "16153397-131d-499b-85f4-a0d28f199b75": [[-0.921772, -0.00331301, -1.15844], [0.921728, 1.52882, 1.15843]], "1ea295c5-c220-4e65-8245-7db92b6d246b": [[-0.620611, -6.10352e-08, -0.6198089999999999], [0.620109, 1.3434700000000002, 0.620559]], "8524ac54-815f-42f2-bc34-0505f3298198": [[-0.692037, 0.0, -0.694547], [0.692037, 0.36493000000000003, 0.694549]], "5dd1a2e8-6ab8-4bcf-94b0-6d4e1ec7a33d": [[-0.198076, 0.0, -0.198076], [0.198076, 0.47049100000000005, 0.198076]], "38ef2f93-8af1-44c4-bafb-8ae6e6622d3d": [[-0.174648, -1.62987e-05, -0.17003900000000002], [0.174921, 0.29462900000000003, 0.170165]], "07c36b71-6e62-4d33-97dd-b38ae69118d6": [[-0.905, -1.9983999999999998e-17, -0.31], [0.905, 0.91, 0.31]], "12f172a7-7538-445f-97d6-b9854cd32255": [[-0.270322, -7.62939e-09, -0.278352], [0.270239, 0.380484, 0.278468]], "b627ee54-6ccf-496f-8a81-931938e5e4ec": [[-1.125, -2.89077e-17, -0.560687], [1.1257599999999999, 0.871812, 0.559654]], "b3e45859-0476-42df-bc84-b8625b12b929": [[-0.253199, 5.77746e-09, -0.233479], [0.253221, 0.384904, 0.233572]], "62476440-9d7c-47d5-a489-ecb2732c500a": [[-0.6, -4.5187e-05, -0.159439], [0.6, 0.7209990000000001, 0.15962099999999999]], "460b959b-cac5-471c-bbf2-e6e0ffa22b86": [[-0.94207, -1.14441e-08, -0.440614], [0.941991, 0.6282260000000001, 0.439953]], "5bf22970-ea29-4614-af88-d88cb25800c1": [[-1.058086, 0.0, -0.312744], [1.058086, 0.9073650000000001, 0.313085]], "4fbaa69a-f362-4ebf-b8c5-8ad49b309fec": [[-0.37439700000000004, 0.0, -0.370734], [0.37439700000000004, 0.929381, 0.37164700000000006]], "cfbbc59a-80c7-44ff-8a5f-1e150937b731": [[-0.25396, -3.93362e-09, -0.255138], [0.25396, 0.492398, 0.255138]], "00883cfc-9ec8-4494-bc40-6c768d4ed9d9": [[-0.262072, 0.0, -0.287536], [0.262072, 0.9675050000000001, 0.287593]], "241c55e2-7ca1-469f-9996-99374f1c03a5": [[-1.1018080000000001, 0.0, -1.0744799999999999], [1.1018080000000001, 1.585772, 1.074435]], "2e20ed65-b2ff-4c1e-afe9-240ab855daad": [[-0.210183, -8.64142e-09, -0.22544899999999998], [0.210441, 0.251321, 0.22565100000000002]], "fd46a167-e39b-4cc7-8240-9c8f067d9a32": [[-0.263992, -2.79615e-05, -0.26395399999999997], [0.26394100000000004, 0.142742, 0.263992]], "4602591c-785f-408d-bae3-10bc6bae9e6b": [[-1.06654, -1.50139e-06, -0.362838], [1.06654, 2.03496, 0.362837]], "1b319f46-729a-4703-a97f-f2e538ff8869": [[-0.566286, 3.8147000000000004e-08, -0.30286799999999997], [0.566286, 2.1162, 0.30286799999999997]], "47babdd0-b7fd-416b-a257-fc23d885f4f0": [[-0.477923, -9.7546e-10, -0.211529], [0.477923, 0.968915, 0.21152]], "7be168e2-57a7-4719-b2d9-541ffd10f011": [[-0.301564, -0.000162158, -0.325653], [0.301887, 0.83817, 0.32657200000000003]], "a80c3c46-e3d0-408c-929e-7d93a75057d9": [[-0.379387, -0.000225682, -0.344398], [0.379387, 0.6825969999999999, 0.34483400000000003]], "bee0e60f-5e51-4e90-9656-0be2a1305f50": [[-0.14702400000000002, 0.00272576, -0.147733], [0.146775, 1.13336, 0.147783]], "a29f69f7-9df2-4038-bb61-122c9f6f907d": [[-0.25854299999999997, 0.0, -0.275604], [0.258557, 0.9026529999999999, 0.275443]], "6ce85b7a-5281-3957-b287-88b610e7791c": [[-0.9, 0.0, -0.265], [0.9, 0.7, 0.265]], "6a353b76-4f16-42be-a986-58475ec87eb8": [[-1.6658099999999998, 9.53674e-09, -1.07874], [1.6658099999999998, 0.8568680000000001, 1.07995]], "eb4c39b1-ee24-40a5-8bd7-9e8d7faa98ee": [[-0.25590599999999997, -0.00351644, -0.292982], [0.255704, 1.01238, 0.292995]], "c56b454e-5c55-4dcb-bccd-3c67357bc9ec": [[-0.499908, -5.4553999999999995e-06, -0.23450800000000002], [0.500196, 1.22255, 0.234575]], "570d1db8-abab-4dfe-95f3-20713b876114": [[-1.65316, -6.75259e-05, -0.504358], [1.65273, 0.9088729999999999, 0.5055230000000001]], "6226c8eb-1c45-4eda-bb03-32c395340a4b": [[-0.325042, 0.0, -0.307778], [0.325042, 0.48645000000000005, 0.307778]], "19607e0b-6c17-4a77-9a2a-8179b5c7cc67": [[-0.31, 0.0, -0.365217], [0.31, 0.8087909999999999, 0.36518300000000004]], "b399d411-411d-4428-9c2b-6de9e4d83c7b": [[-0.348374, -0.000149175, -0.35389499999999996], [0.348338, 0.728302, 0.353874]], "8b8cdbde-57e3-432a-a46a-89a77f8e6294": [[-0.29046299999999997, 0.0, -0.23012], [0.29046299999999997, 0.5898680000000001, 0.23012]], "7d4d3e12-cdbf-4947-ac28-8bb639b7636f": [[-1.31, 1.83697e-17, -0.300001], [1.31, 2.5, 0.300001]], "d1da9705-6ec5-4905-b211-b681c5091068": [[-1.02016, -2.8421700000000003e-17, -0.406493], [1.02016, 0.6800889999999999, 0.406493]], "32da1b30-359e-4a3c-afd0-2c148988c358": [[-1.45031, 1.22427e-17, -0.204186], [1.45031, 2.60069, 0.204178]], "9b0da6c3-f776-4ff4-b3b5-de22c3c8176b": [[-0.180734, 0.0, -0.211045], [0.180734, 0.330865, 0.211045]], "f5a92e10-0d6a-4080-8dc1-6e7c996f482e": [[-0.335482, -1.39007e-08, -0.0851051], [0.335482, 1.01706, 0.0851727]], "967011ed-753f-4eb2-8505-feefe3f33f88": [[-1.53305, -1.3296400000000001e-17, -0.292265], [1.53305, 0.736465, 0.292265]], "6a20719b-c911-4fb5-9873-5103e0ff5dce": [[-1.00962, -0.00013023899999999998, -1.38245], [1.00962, 1.16423, 1.3825999999999998]], "50867bcd-3423-4a8f-917b-b0ca6955b8a6": [[-0.286788, -4.8470800000000004e-05, -0.581993], [0.288762, 0.760201, 0.581953]], "cefd834f-8ad2-4e83-a149-4f28002e0330": [[-0.7552119999999999, 0.0, -0.232798], [0.755247, 0.631569, 0.23286400000000002]], "7a2d6a8d-6929-4d68-a070-75bd3f614026": [[-0.265807, 5e-06, -0.259903], [0.265755, 0.374884, 0.25994700000000004]], "56b2941e-48da-4b06-850e-8026dabca593": [[-0.31860099999999997, -3.6365500000000004e-07, -0.244735], [0.31860099999999997, 0.55, 0.244735]], "246ec99c-b64b-4c6e-bf5b-6208f0bcf843": [[-0.885709, -5.51563e-17, -1.04061], [0.8856480000000001, 1.20952, 1.04203]], "00c9b87e-defe-4f6e-91a9-e7e21a4e6497": [[-1.09913, -0.000535889, -0.23615200000000003], [1.09913, 2.1002, 0.236402]], "4309c121-3bce-4a55-8dca-7dd5a54513df": [[-0.8477859999999999, -9.21777e-07, -1.0532299999999999], [0.848674, 1.00332, 1.05129]], "b3b7e415-b77b-4dc5-8bdf-7673a00f2b0d": [[-0.34525500000000003, 0.0, -0.339306], [0.345289, 0.8609279999999999, 0.339362]], "047464cd-5011-48fe-b229-fb36a71ba9f6": [[-1.34659, 9.53674e-09, -0.504184], [1.34659, 0.8813890000000001, 0.504902]], "8262ca41-97f9-4aa5-9ce1-aeefbb2e2973": [[-0.259341, -2.77912e-05, -0.266157], [0.258733, 0.968044, 0.266217]], "7ae7e6d1-db4a-4615-956e-3fb72e374068": [[-1.1124450000000001, 0.000261, -1.259619], [1.1138540000000001, 1.332436, 1.258665]], "6c19c49b-9500-4f27-9ffb-f6a7a032a406": [[-1.02422, 7.917199999999999e-08, -0.256584], [1.02422, 2.43471, 0.2572]], "45d36d0a-d5f4-4d0d-b577-fd52821e67e8": [[-0.396254, 0.0, -0.438487], [0.39563400000000004, 0.81889, 0.438487]], "5b8bdcc2-74e9-4f08-8f3e-652773b07aec": [[-0.33264000000000005, -2.2033400000000002e-17, -0.393967], [0.33264200000000005, 0.8295629999999999, 0.393643]], "8304b3b9-a375-4848-8e6c-8e4adf0679e2": [[-0.30595300000000003, 1.52588e-08, -0.30595300000000003], [0.30595300000000003, 0.5862120000000001, 0.30595300000000003]], "62fedc5a-f443-45cc-bec6-e924825755fa": [[-0.592641, 1.14441e-08, -0.534078], [0.592691, 0.7965040000000001, 0.533018]], "016606df-0db0-33a6-a9d4-2aee03eec507": [[-0.722616, 0.001099, -0.356943], [0.722637, 0.76047, 0.363003]], "9c2424f6-5c02-44dc-a129-d43ca083ffe3": [[-0.160995, -8.03943e-06, -0.134976], [0.16119499999999998, 0.415689, 0.13502]], "de7594cf-da6b-4fdd-a201-603bb5df11c1": [[-0.16210899999999998, 0.000721, -0.145203], [0.162083, 1.252046, 0.14472200000000002]], "5273567a-5d9f-426e-9eed-a0d2e7bff941": [[-0.27828800000000004, 1.6688399999999998e-17, -0.275833], [0.27828800000000004, 0.471603, 0.275833]], "5d6b789c-3ee9-438c-9333-6f8f17b01c2f": [[-0.304084, -1.43106e-06, -0.243963], [0.304085, 0.605191, 0.244434]], "63f5d48e-3809-4b42-8715-87856b8542f9": [[-0.35313, -9.894739999999999e-18, -0.172272], [0.353022, 1.202, 0.172272]], "144aa12d-0d7c-4bbe-b0e3-7d669aac74df": [[-0.42127200000000004, 4.98665e-08, -0.6139], [0.421259, 0.37920099999999995, 0.6139]], "69f0e57d-a0ae-3d14-88a1-061c2a1a8bc8": [[-0.918133, 0.001535, -0.203754], [0.918133, 0.6639790000000001, 0.203754]], "4cde752e-623f-4072-a3d0-1517aafd4cc6": [[-0.700495, -0.0, -0.40086700000000003], [0.700495, 0.395965, 0.40086700000000003]], "abe230df-0b8d-4947-bbd4-c3b2b81311a6": [[-0.569556, 0.0, -0.152874], [0.569556, 0.6760240000000001, 0.152874]], "7995a72e-c313-4599-91c9-c3b9ed420248": [[-1.00002, -5.3927899999999996e-05, -0.24012699999999998], [1.00001, 0.520352, 0.240088]], "6a3ea151-bb07-4aaa-a893-1b3b5f9413de": [[-1.1979300000000002, 1.38084e-07, -0.456674], [1.19791, 0.8542829999999999, 0.457059]], "29852e58-6589-4486-bd9c-3821e3db58ac": [[-0.6, 0.0, -0.19286899999999998], [0.6, 0.8839530000000001, 0.19286899999999998]], "246fa886-d307-4438-8cca-2f10aecc75b1": [[-1.07672, -1.83697e-17, -0.300001], [1.07672, 2.4, 0.300001]], "b133cefd-2243-4914-9d26-be1a36b092a9": [[-0.272531, -0.000211545, -0.240034], [0.272509, 0.52693, 0.239958]], "4d36ad1a-1766-333d-b930-190a3ae5ea67": [[-0.65, 0.0, -0.65], [0.65, 0.7373569999999999, 0.65]], "e392d741-035f-434d-856e-25594458d98a": [[-0.275, -1.9821800000000003e-17, -0.355223], [0.275, 0.665, 0.355223]], "767c965b-ce4a-4187-8508-9406d7a95652": [[-0.449865, -1.2207e-07, -0.299784], [0.449865, 2.00037, 0.301976]], "74945ddc-5a90-48d1-a658-7799ade4b206": [[-0.9257259999999999, 0.000478, -0.384185], [0.9257259999999999, 0.795626, 0.383833]], "d271f860-bff8-459a-8ba0-defdf223c4db": [[-0.16653500000000002, 0.0, -0.16653500000000002], [0.16653500000000002, 0.8708499999999999, 0.16653500000000002]], "866a37f8-d4cb-42af-a1fb-ec27030f536b": [[-0.294264, -0.000534917, -0.427682], [0.29408999999999996, 0.761804, 0.42782400000000004]], "b4e96b08-b603-4021-8730-13a70cbb10d0": [[-0.312989, -4.9156299999999996e-06, -0.291912], [0.313019, 0.139854, 0.291912]], "66fbcf32-4f04-4065-a576-eff15f25f4b4": [[-0.343144, -0.0, -0.317034], [0.343144, 0.480505, 0.317034]], "bc951ea9-e184-4504-9cf2-01273f51aab9": [[-1.2356, -0.00047967299999999996, -0.475334], [1.23562, 0.813721, 0.47524299999999997]], "86ac306d-f0e4-4683-99df-e75d3de32643": [[-0.615449, 0.0, -0.294787], [0.615449, 0.417412, 0.294787]], "66b7ebc2-54a3-408c-b7c6-d6d066b847cb": [[-0.368426, 0.0, -0.41124299999999997], [0.368442, 0.879636, 0.41125]], "1d739bde-633e-4a4e-907e-4af10e556799": [[-0.40389400000000003, 7.62939e-09, -0.334369], [0.404497, 0.8068919999999999, 0.33521700000000004]], "6b041586-b20f-405b-b044-9ac048f47741": [[-1.026564, 0.0, -0.224053], [1.026481, 0.48585700000000004, 0.22411899999999998]], "51a33bb5-097f-4c72-8fcd-df33a019034f": [[-0.353778, 5.999999999999999e-06, -0.334774], [0.35379399999999994, 0.579734, 0.33479]], "24ae86f8-6a16-49a3-b0e9-f35bfe9dfb3f": [[-0.7062940000000001, -3.15708e-19, -0.412433], [0.7062930000000001, 0.412762, 0.412433]], "fb6d84cf-0b11-4ae8-9727-88827cad30e0": [[-0.709236, -8.6571e-09, -0.197967], [0.709236, 0.853206, 0.19829]], "0e4e2ae8-2960-4e0d-9990-afefdc5a82f4": [[-0.700094, 0.0, -0.40006], [0.700094, 0.7603660000000001, 0.40006]], "80f00afd-2296-441d-9fe0-87670ea02a1f": [[-0.6426130000000001, -7.62939e-09, -1.0762], [0.6426130000000001, 1.18897, 1.07612]], "6441b02e-6d7b-43e4-a465-761edb92b239": [[-1.0, 0.0, -0.2], [1.0, 0.4, 0.2]], "f1bdbdd8-f00b-4ad8-8bd0-74f5c283776e": [[-0.191121, -9.996150000000001e-05, -0.191003], [0.19123300000000001, 0.41690800000000006, 0.190954]], "74fd46e1-fdb4-4d54-81fe-566bf3290a5d": [[-1.1451099999999999, 7.62939e-09, -0.465797], [1.14556, 0.6403319999999999, 0.462454]], "51b46396-3d0d-466c-9fae-ffb0a72386b1": [[-0.387456, 0.0, -0.234634], [0.387456, 0.310442, 0.234634]], "8634ce95-386e-328b-9f08-dbc03452d6f8": [[-0.304596, 0.0, -0.389796], [0.304596, 0.8496349999999999, 0.389938]], "69c89bd0-41bf-41a0-85b4-6689e85ded32": [[-1.135288, 0.0, -0.20101500000000003], [1.135288, 0.513245, 0.20101500000000003]], "8d599e4a-10f9-454a-a986-33ff6e35697f": [[-0.258917, 0.0, -0.19750199999999998], [0.258917, 0.5824199999999999, 0.198109]], "d7c59b53-313d-43bf-a712-f042efe58d99": [[-0.4397, 0.0, -0.31455], [0.4397, 0.26986899999999997, 0.31455]], "5f5949dd-e1db-4dcd-9328-cfa5d3e0b224": [[-0.416969, 0.0, -0.399966], [0.416206, 0.8172820000000001, 0.399966]], "93aee123-ab23-43fb-bb8b-00f668366ace": [[-0.345133, 1.09428e-08, -0.345133], [0.345133, 0.421639, 0.345133]], "15f76e07-8716-40a8-8d34-01f2158b95bc": [[-0.695658, -1.1071200000000001e-08, -0.695663], [0.695651, 0.7514019999999999, 0.695658]], "28ca9bd1-e10a-4c41-a580-9654e8a6d06b": [[-0.254914, 4.57764e-08, -0.254914], [0.254914, 0.377792, 0.254914]], "95f1f4b2-f600-49d9-af9d-e42b614292f6": [[-0.250198, 0.0, -0.200323], [0.250198, 1.390184, 0.200323]], "5e5731fa-3e5a-4169-bae3-966c08290aac": [[-0.901906, -1.52588e-08, -0.48582099999999995], [0.901878, 0.6869719999999999, 0.48582099999999995]], "7c44e19f-1afd-4645-9a5c-9e15a25f3c31": [[-0.346962, -0.0008083410000000001, -0.35552799999999996], [0.345481, 0.845389, 0.35529499999999997]], "5600f477-e7d0-41ba-8f3a-289175c8b52a": [[-0.414633, 0.0, -0.47154], [0.41457299999999997, 0.94463, 0.47161299999999995]], "0bb51857-09db-4dc5-9977-ef019aeeb82f": [[-0.357445, 0.0, -0.357424], [0.357543, 0.592243, 0.357522]], "55cc370a-e547-3b46-8f71-d165b46ca596": [[-81.5778, 0.0, -45.0], [81.5776, 75.1776, 45.0]], "cc345a49-f722-4834-8f83-76dbf1e16c0f": [[-1.25003, 3.0174599999999997e-17, -0.518191], [1.2499200000000001, 0.8982779999999999, 0.5187660000000001]], "6fe37444-dcc0-4571-82ce-abf0a35bc07d": [[-0.247977, -1.20882e-05, -0.255452], [0.24796700000000002, 0.767002, 0.255555]], "cbfb77b6-92f7-4bb6-9160-eaa820606773": [[-1.166765, 0.000319, -0.489604], [1.166342, 0.9552679999999999, 0.489488]], "c2fecd9b-c61e-423a-a48d-08c63931cd1f": [[-1.2924719999999998, 2e-06, -1.044999], [1.2918969999999999, 1.0539669999999999, 1.044999]], "e7047394-9c2f-4456-8eb6-1d5531b1910e": [[-0.238887, -0.0, -0.299476], [0.238887, 0.733588, 0.299476]], "0fc8608d-4b89-47f0-ae02-f96d0f1ed849": [[-0.493195, 0.0, -0.561147], [0.493211, 1.005026, 0.560978]], "64c7b51f-5d88-4771-b8cd-5533c64dcbb1": [[-0.18753699999999998, 0.0, -0.18753699999999998], [0.18753699999999998, 0.529763, 0.18753699999999998]], "07d38cfb-dcb0-3f0c-96d1-69f465ebb40d": [[-124.58, 0.0, -47.5913], [124.58, 89.3629, 47.5913]], "10e65d7c-09a7-4192-b016-43aac97d139c": [[-0.629638, 0.00025, -0.6251169999999999], [0.628493, 0.6761409999999999, 0.624141]], "59fce13a-3c19-4cc2-82ee-d53b3b9182d3": [[-1.0, -1.0375400000000001e-17, -0.175311], [1.0, 2.4, 0.17714400000000002]], "e406c52d-750d-4837-ba30-6a2bc6f9de23": [[-1.59234, -0.000206468, -1.05402], [1.59297, 0.8316459999999999, 1.0549]], "41da43a9-5bbc-4517-ab9e-49b02e8caf12": [[-0.728132, -1.32238e-17, -0.266243], [0.728132, 0.8872450000000001, 0.266243]], "d476cae9-4364-4147-861d-69d294fdeac9": [[-0.645319, -4.0994500000000004e-08, -0.275607], [0.645319, 0.9236289999999999, 0.27559]], "17d7e17f-3c37-46d2-b606-2b81f7a1a3eb": [[-0.083763, 0.0, -0.083762], [0.083763, 0.348239, 0.083763]], "df17cbc5-4cbd-46aa-8366-5fb3e0ba9735": [[-0.350818, 0.0, -0.379591], [0.351308, 0.762392, 0.37939900000000004]], "f03ce316-d31a-4369-98c1-3874df499738": [[-1.3954300000000002, -9.00423e-05, -0.511989], [1.39492, 0.894234, 0.511815]], "33a9642a-e699-4426-9bcf-0f2d1ba483f8": [[-0.819502, 6.10352e-08, -0.256904], [0.819502, 2.35458, 0.256905]], "094e1cb8-4a48-446e-a88c-ddee36aba955": [[-0.25, -1.1665100000000001e-17, -0.2], [0.25, 0.40755899999999995, 0.2]], "6edd8810-b49a-433b-bfa2-c63bbe0c30d8": [[-0.600001, -3.2685000000000003e-16, -0.32581200000000005], [0.600001, 0.940231, 0.32581200000000005]], "0f6c8d55-eef7-4414-b6c7-eb40ab2a3f7f": [[-0.9065089999999999, 6.46097e-17, -1.08], [0.905622, 1.32031, 1.07928]], "508404d3-d635-4d5c-ae4e-e3d5d412958d": [[-0.456587, -9.84748e-18, -0.18652000000000002], [0.456587, 1.2747, 0.18652000000000002]], "5d58aa45-f73d-4a3a-a909-577641c1f7cf": [[-1.335648, 0.0012690000000000002, -0.524139], [1.335565, 0.935148, 0.522573]], "85fa6c39-7260-407f-b831-a9e7113d25bf": [[-0.197488, -3.8147e-09, -0.209025], [0.19749099999999997, 0.700317, 0.209025]], "653e1a8d-df5d-491b-b6d6-e9cc5d012426": [[-0.4385, -1.33104e-18, -0.405007], [0.438561, 0.947992, 0.404221]], "69acc8df-eaac-4453-9729-12f25673b9fe": [[-0.252108, -0.00043057699999999997, -0.232044], [0.252207, 0.5529160000000001, 0.231532]], "0aab9dbc-ada7-439f-8ebe-742d076ce617": [[-1.093101, 0.000356, -1.16841], [1.095718, 1.109043, 1.168584]], "02b26e96-d260-34b5-86c5-ee000e395642": [[-0.437552, 0.0, -0.41049], [0.437552, 0.40023800000000004, 0.41049]], "10f5a34f-ae03-4195-bdb3-1b351eb00555": [[-1.6158000000000001, -0.00207568, -0.881343], [1.6156899999999998, 0.807367, 0.882166]], "131a515f-b042-47f2-87d8-172614306394": [[-0.8891129999999999, 0.0, -0.425691], [0.889114, 0.7809130000000001, 0.425691]], "a00ba93b-9966-4589-a697-cdb7ddab9565": [[-1.1635, -0.000337658, -0.405439], [1.16387, 0.743146, 0.406323]], "118c4f34-9a09-401f-87c1-630920203df8": [[-0.750188, 0.0, -0.208789], [0.750188, 1.3354169999999999, 0.208789]], "dcd62f60-0954-4573-a995-0abc96367f1f": [[-1.34493, -0.00014262, -0.531441], [1.3449799999999998, 0.90598, 0.532502]], "083e402c-d38f-4bdd-822f-e06465d46457": [[-0.772345, 0.000348, -0.984306], [0.772345, 1.0487600000000001, 0.985204]], "c0d1a000-3445-435f-8db4-d701c8d4b762": [[-0.413761, 0.00161462, -0.413731], [0.413761, 1.0210599999999999, 0.413791]], "1b2c2528-9456-3717-8fa3-8a46e97f74d3": [[-0.235139, 0.0, -0.248975], [0.235139, 0.7444289999999999, 0.248975]], "27a67254-913a-43b1-8292-ca73c8998f91": [[-0.279565, -0.0, -0.284778], [0.279565, 0.600225, 0.28499199999999997]], "bc7be068-10c6-4c5e-9525-ee826864b7f2": [[-0.306345, 0.0, -0.306345], [0.30674399999999996, 0.628857, 0.306345]], "d77eeaec-ba82-47ec-b69e-b5123b6d2f60": [[-0.261768, -5.7701499999999996e-05, -0.34909799999999996], [0.261766, 0.85137, 0.349039]], "dbc49bb6-e9a0-4ffb-8fce-c4abfe1d0bf1": [[-1.16816, 2.3981800000000004e-07, -0.538346], [1.16771, 0.944621, 0.539138]], "95f1bd8e-0860-4581-af8c-d45d0e435f17": [[-0.239731, -1.16401e-17, -0.21336], [0.239731, 1.31303, 0.21336]], "2dcfa0f5-71a0-4849-ac2a-d0a2d0fb1bba": [[-0.556961, -1.44135e-05, -0.428035], [0.556896, 0.701789, 0.427637]], "155de1e3-3f28-4127-81c9-9ff5cd2cb1d2": [[-0.608541, 0.0, -0.554763], [0.608541, 0.326164, 0.554763]], "273009eb-d503-4ebd-aa3c-2f1b4772e7ab": [[-0.6, 0.0, -0.6], [0.6, 0.385, 0.6]], "4a44ab0c-af72-49e6-8813-e36f746977dd": [[-1.17288, -0.000230716, -0.479105], [1.17198, 0.91334, 0.478885]], "574d68a2-9a3a-43c9-af9c-84509012db13": [[-0.902893, 4.77293e-07, -1.0995], [0.9032420000000001, 1.23381, 1.1003]], "6da3766b-1e21-3481-a0c1-9256e09f3bc2": [[-0.251459, 3.3e-05, -0.216536], [0.251459, 0.794072, 0.285133]], "6fa92cec-9814-4f21-b188-368353de5970": [[-0.506742, 0.0, -0.506742], [0.506742, 0.512175, 0.506742]], "73a85910-2860-49b2-b00b-2ee02d05884c": [[-0.513556, -0.000359758, -0.5034810000000001], [0.513079, 0.666649, 0.5023380000000001]], "6fe28e4b-da6c-4b5a-bc39-6eaff0322b34": [[-0.34807099999999996, -0.00037586300000000004, -0.33701000000000003], [0.34767899999999996, 0.200465, 0.337083]], "70a8fbee-b7d5-4ccf-85fb-5cc24f72bd0b": [[-0.912348, -7.68029e-05, -1.0443], [0.912385, 1.33082, 1.0438800000000001]], "237d1b27-ca2b-4265-8a08-1db0ef12ab30": [[-0.172792, 0.0, -0.172792], [0.172792, 0.44343499999999997, 0.172792]], "594a44b8-da84-45b3-b448-8ad6d355290f": [[-0.48428, 7.000000000000001e-05, -0.48623600000000006], [0.484277, 0.794322, 0.486239]], "51a2c6e7-1c5e-445b-932e-f40e10ef3fdd": [[-0.847086, 0.0, -0.528013], [0.847086, 0.967607, 0.528013]], "1c092622-dd26-46eb-ae80-8b43b78454a5": [[-1.11428, -0.00029153100000000004, -0.450938], [1.1133499999999998, 0.775752, 0.45097499999999996]], "4ab50b00-4880-4980-b663-c5078bf7a227": [[-1.1987, -7.62939e-09, -0.499277], [1.1983199999999998, 0.963865, 0.49985100000000005]], "bb136700-4185-4376-ae5b-3de6080e4e57": [[-0.36938499999999996, 0.0, -0.391137], [0.36942100000000005, 1.842206, 0.391137]], "a3a4fdf9-9dc7-4cf2-97f2-d3addb8f089d": [[-0.888472, -9.399279999999999e-05, -0.375648], [0.8894639999999999, 0.791715, 0.37495199999999995]], "017779ff-603f-42e5-828b-283eade97439": [[-1.25939, -7.01791e-05, -0.50671], [1.25926, 0.8276519999999999, 0.506355]], "5793b31f-8c59-37f8-a06e-7ebaaf61d132": [[-61.0815, -0.0372, -64.8415], [61.0815, 94.8394, 57.0649]], "e1571151-263d-4e01-b760-50b292a243c3": [[-0.508062, 0.0, -0.49806399999999995], [0.50812, 1.214979, 0.49806399999999995]], "7dbdb6a7-5d1b-45c0-bec8-c63ec5667e03": [[-0.40834699999999996, -0.00106794, -0.40997900000000004], [0.40952, 1.17706, 0.409985]], "527f2837-6bed-42ff-a917-45d55454e0c5": [[-0.9312940000000001, 7.866669999999999e-05, -0.59103], [0.9312560000000001, 0.797693, 0.591581]], "8f384f23-6d20-4917-bff8-660fd9d65922": [[-0.344338, 0.0, -0.384507], [0.344338, 0.299501, 0.384507]], "0bfd4d0d-df44-4f44-b3ea-806e1db198fe": [[-0.628257, 0.000265, -0.325098], [0.6256900000000001, 0.7598480000000001, 0.324339]], "dd89f847-b508-4a2a-a014-8d8dbd885726": [[-0.24204799999999999, 0.000129, -0.325985], [0.24204799999999999, 0.93596, 0.326046]], "5fed185e-16f4-4156-95fb-46bdc573523e": [[-0.601941, -1.25146e-17, -0.24922], [0.601941, 0.8307420000000001, 0.24922]], "b6eed575-7905-41b5-bd6a-66c6a538f125": [[-0.305031, 1.25158e-17, -0.230581], [0.305031, 0.48046700000000003, 0.230581]], "b3e73de5-e531-42e9-9883-fa9daabc0de7": [[-0.8275060000000001, -5.16168e-17, -1.02972], [0.827326, 0.7007420000000001, 1.02915]], "1c046a6a-3950-4bda-bf3b-ab7ab0bdc35d": [[-0.44293999999999994, -1.52588e-08, -0.0374235], [0.44293999999999994, 0.872808, 0.0374235]], "46933fb9-cae0-43ec-b601-f7ad644b2c0f": [[-0.16412600000000002, 0.0, -0.173171], [0.16412600000000002, 0.455, 0.173171]], "63414d2e-db87-4033-9645-4157a6f30da9": [[-1.075, 0.0, -0.301001], [1.075, 2.092533, 0.301001]], "9b2c63c7-8a00-4354-a072-33902e7f9bbd": [[-0.488187, -1.18373e-06, -0.482188], [0.487421, 0.758005, 0.481896]], "64227952-d60d-4c1d-8f08-745914b95954": [[-0.9802460000000001, -0.000533147, -1.16292], [0.9758910000000001, 0.8238150000000001, 1.2115]], "4779b09d-b40b-4c97-9bdd-a743e3bdc66a": [[-0.8554510000000001, -5.34062e-17, -0.89089], [0.8554510000000001, 1.36168, 0.89089]], "4d4ed837-e00d-4e35-8ef2-b397bb4aa42d": [[-0.378827, 5.7999999999999994e-05, -0.385962], [0.378827, 0.869897, 0.386147]], "1c52c6b2-0e7f-496c-82ad-10636ee89e3f": [[-0.7637900000000001, -0.00200592, -0.919222], [0.7637900000000001, 0.988264, 0.9209900000000001]], "698c5f06-44f4-41bb-9000-52b3d9cc7d4a": [[-0.486481, -8.79729e-05, -0.47110100000000005], [0.48648899999999995, 1.15942, 0.47190800000000005]], "12331863-e353-4926-9b40-e1b0d32e3342": [[-1.265988, 0.000107, -0.46652], [1.265227, 0.956307, 0.46634099999999995]], "00c90f7e-2b91-44e7-86f0-0fa00268e63b": [[-1.302552, 6.9e-05, -0.5024069999999999], [1.3024600000000002, 0.8543040000000001, 0.502113]], "121f609e-9d6f-4a5e-8f8b-9c1220e7c23a": [[-0.8236669999999999, -0.0, -0.552219], [0.8236669999999999, 0.40408299999999997, 0.552219]], "75e83d69-392b-4794-aca4-c5f1dd2d228a": [[-0.47638199999999997, 0.0, -0.528363], [0.476696, 0.915705, 0.528532]], "63f943ed-b30b-4982-afe6-eebfebe9eeb6": [[-0.708, -1.11649e-17, -0.199465], [0.708, 0.8859999999999999, 0.199465]], "52f55100-1eca-4f2e-ac2b-0bb8671c91db": [[-0.320274, 5.36959e-16, -0.25], [0.320274, 0.44003100000000006, 0.25]], "4f8d1916-ba33-4e11-bcfa-bf21e0c22ae4": [[-1.2405, -7.62939e-09, -0.430316], [1.24037, 0.75929, 0.43134]], "b12a271d-8c49-447f-ac86-469ce7d91eeb": [[-0.254888, 0.0, -0.254888], [0.254888, 0.520833, 0.254888]], "0c669d87-9e77-41ff-81c4-d7abcb4207e7": [[-1.20313, 3.57259e-06, -1.1715600000000002], [1.20259, 0.868355, 1.16993]], "fa83de66-dcee-4a47-8741-1aa668889a86": [[-0.349932, -5.59682e-05, -0.349927], [0.349932, 0.32899999999999996, 0.349932]], "003573d9-a6ae-4bdb-a01f-156040f08048": [[-1.041922, -0.0, -1.492797], [1.04221, 0.9074509999999999, 1.492799]], "05bd9b39-5166-4730-8707-038fbc78c986": [[-0.945777, 3.5000000000000004e-05, -1.112137], [0.94612, 1.002855, 1.110971]], "a16eea89-aa75-494c-8937-2a8a7d65b9f8": [[-0.16702999999999998, 5.34255e-05, -0.167082], [0.167081, 0.860516, 0.16702000000000003]], "2a70d37c-b58a-481b-b960-73321437df59": [[-1.062454, 0.0005070000000000001, -0.390648], [1.062454, 0.8543999999999999, 0.390649]], "420c89cd-767f-4620-80a3-11628403c539": [[-0.948955, -7.05424e-17, -1.1932800000000001], [0.950449, 0.783928, 1.19384]], "75aca66b-7852-4d21-938b-d6cb9ea77002": [[-0.285518, -3.09944e-09, -0.223524], [0.285518, 0.470051, 0.223524]], "e3f8ccaa-da93-4c32-8e83-87e0599ba440": [[-0.41078000000000003, 3.8147e-09, -0.052969499999999996], [0.410663, 0.9197369999999999, 0.052969499999999996]], "52713ba3-7597-481d-9896-85c1d2ec2eff": [[-1.8544100000000001, -7.422e-10, -0.583446], [1.85665, 0.728494, 0.584193]], "a4df9d54-2dad-4dbf-a4b2-c942ccb8288d": [[-0.390242, -1.02165e-17, -0.224691], [0.390242, 1.50297, 0.224695]], "7cf19c44-6cc4-3ef5-88bd-10cd98157ee3": [[-0.257, 0.0005099999999999999, -0.27685], [0.257, 0.798496, 0.27685]], "58611f22-e2b7-479a-8ff4-186926c28a2e": [[-0.485751, 1.52588e-08, -0.39909], [0.485751, 2.50449, 0.39909]], "d254f79b-17e1-4afe-ab30-40d32041facd": [[-0.44980400000000004, 0.0, -0.48182200000000003], [0.44980400000000004, 0.37898699999999996, 0.48182200000000003]], "208d701e-50c0-4651-9dc9-d7bf7c28b851": [[-0.210749, -1.00289e-05, -0.211952], [0.210764, 0.655655, 0.212068]], "77bdd2b5-553a-43e2-a96f-15285ec87d57": [[-0.236491, 0.0, -0.226808], [0.236491, 0.43379100000000004, 0.226808]], "685df4a4-cd69-4f0b-82f5-675bd0738881": [[-0.454326, 8.38777e-18, -0.136983], [0.454326, 1.15979, 0.136983]], "6829306d-5d2d-46db-aef0-682cd9a312fd": [[-1.27417, 7.710679999999999e-08, -0.513811], [1.27527, 0.815452, 0.529426]], "ef3867e2-995e-4490-b3c3-260c75d8f80b": [[-0.9330970000000001, -1.1839799999999999e-17, -0.220315], [0.9330970000000001, 0.8314919999999999, 0.220315]], "551dfab5-0210-4a1f-b213-8cc230f44d3b": [[-0.260523, 0.0, -0.25549700000000003], [0.260523, 0.44905900000000004, 0.25549700000000003]], "5a72a795-d8e5-38a2-8ae8-a0d6b88fff8c": [[-0.260168, -0.0, -0.326884], [0.260168, 0.8643609999999999, 0.32596800000000004]], "dfa244cb-7980-40e5-82cc-c9e29a543802": [[-0.304008, -9.277229999999999e-05, -0.30303599999999997], [0.303991, 0.131, 0.303]], "b3393f71-2044-4dfb-837e-fbea00fab9b5": [[-0.914058, 0.0, -0.41702300000000003], [0.914058, 0.721609, 0.41694400000000004]], "248774ec-da30-4b29-a9c8-1aa5668ec462": [[-0.315456, 0.0, -0.32628100000000004], [0.315456, 0.722021, 0.32628100000000004]], "e2ed06a7-d767-4d08-8e0b-e05fafbf943d": [[-0.59862, 0.0, -0.515], [0.59862, 0.422551, 0.515]], "cb94534a-c439-455b-b948-20e70cbdf55f": [[-0.344338, 0.0, -0.384507], [0.344338, 0.8424240000000001, 0.384507]], "ebbcb7c8-6e55-4ae7-a451-9b33ec3d5515": [[-0.25722, -1.4461400000000001e-08, -0.25725000000000003], [0.25722, 0.500004, 0.25725000000000003]], "db6f6739-0a6e-436b-b6b6-9c470d21ee87": [[-0.596017, -1.703e-17, -0.278121], [0.59601, 1.17642, 0.278121]], "028321de-918c-45d3-bb08-e499bf9a1c49": [[-0.365394, 9.777000000000001e-18, -0.365373], [0.365373, 0.627485, 0.365373]], "3bc8343f-452b-4e67-a986-e34436c6479b": [[-0.592393, -2.19902e-18, -0.21715199999999998], [0.5926250000000001, 0.829144, 0.21756]], "3882182e-1382-4d4b-b280-ca9d76d990de": [[-1.04001, -0.000405496, -1.1557899999999999], [1.0387300000000002, 0.937491, 1.15559]], "275969aa-20c3-4cb6-b7ee-29761775b5af": [[-0.274948, -6.04356e-05, -0.274948], [0.274948, 0.530207, 0.274948]], "f69e5c36-8b94-41c7-ba54-c8abce0b525c": [[-0.28806899999999996, 1e-06, -0.287535], [0.28806899999999996, 0.755694, 0.287535]], "f6e743d8-ac38-4bbe-b419-366e6ba9bd37": [[-1.0455800000000002, 0.0, -0.411645], [1.0455809999999999, 0.7135680000000001, 0.411645]], "3f409efd-8c48-41c0-b930-b0e915ffbeec": [[-0.301052, 0.0, -0.290616], [0.301051, 0.7898869999999999, 0.290267]], "4ed03b9a-a3e3-4b47-88a1-b6118f5e830f": [[-0.240377, 5.48761e-05, -0.21145], [0.24051999999999998, 1.05166, 0.211358]], "3b7c9375-f400-40ce-86db-996760e827f7": [[-1.12943, -2.3544900000000002e-17, -0.399619], [1.1297199999999998, 0.756453, 0.40014000000000005]], "3ff714e8-29f7-303b-9609-8eea7c144741": [[-0.28868099999999997, -0.00021600000000000002, -0.31672999999999996], [0.28868099999999997, 0.793214, 0.30265000000000003]], "406a71eb-ec34-4267-85e0-e3f8b6d03643": [[-0.315645, -1.6048400000000002e-17, -0.315439], [0.315635, 0.58133, 0.315448]], "aac7bf48-3144-4377-963b-137b12324255": [[-0.6974290000000001, 0.0, -0.40838500000000005], [0.699234, 1.580496, 0.40838500000000005]], "22f35f0f-59d4-4636-9753-8682a7312097": [[-1.35779, 1.19714e-17, -0.988057], [1.35779, 1.68271, 0.9880639999999999]], "033280d4-d766-4edf-b499-6c1c1c402c50": [[-0.868072, 1.91467e-17, -0.331959], [0.868072, 2.15195, 0.331959]], "faca49e2-63d4-4c55-a677-7296fc243141": [[-0.171735, 0.0, -0.171735], [0.171735, 0.437878, 0.171735]], "0dfad82e-ebf0-4d55-b1e2-c5bc75ab0511": [[-0.850006, -1.4939e-08, -0.18397200000000002], [0.850006, 0.9117780000000001, 0.18397200000000002]], "253e9caf-59f6-4a57-a2df-e559a9b615bc": [[-0.467988, -0.0005902079999999999, -0.511588], [0.467762, 0.967136, 0.511073]], "c3b2dd0f-33e8-45d6-afb6-6e603151b626": [[-0.264619, 2.2797999999999998e-06, -0.26028], [0.264631, 0.796956, 0.260233]], "6c93a5d6-d44e-45e0-84c8-cfc1629438c1": [[-0.24185500000000001, -0.0, -0.265896], [0.24185500000000001, 0.949294, 0.265896]], "f041de2a-4d3d-4669-ab70-84c24373f612": [[-0.367018, 0.0, -0.389223], [0.367018, 0.8392430000000001, 0.389223]], "7db22822-4c53-49bc-ba2c-f3e1907cead4": [[-1.46765, 1.64902e-17, -0.523871], [1.46719, 0.948006, 0.524345]], "b5ab5c8e-f881-4b4e-8ac6-c4c28a4ffa59": [[-0.495707, -0.0013941600000000002, -0.495674], [0.495637, 0.431027, 0.49564199999999997]], "72de87bb-1ea9-401b-be22-398f777a6c6b": [[-0.371831, 0.000297, -0.443292], [0.37201799999999996, 0.935673, 0.443292]], "05ee1cfc-6b3a-45b5-8e99-833cd6a4d2e1": [[-0.627201, -3.14655e-09, -0.193463], [0.627201, 0.6050099999999999, 0.193463]], "09dacb7b-65e9-43c7-9642-d36673a126cc": [[-1.09466, 6.308219999999999e-17, -1.16188], [1.09704, 1.2197, 1.16274]], "878f7eb2-b0c6-4e56-9610-75af19099346": [[-0.81279, 0.0, -0.40653500000000004], [0.812728, 0.7072280000000001, 0.40653500000000004]], "636f10e1-e4e7-40a1-b3ba-cde5c8a07c84": [[-1.261321, 0.0, -0.905929], [1.261322, 0.746165, 0.905929]], "32475a7e-a379-4f2b-9666-1ae76cb94b98": [[-0.176855, -0.00034943, -0.17689800000000003], [0.17718699999999998, 1.0740699999999999, 0.176964]], "5c743f3d-6647-4f2b-9ecf-561b119cc104": [[-0.198018, -5.69278e-06, -0.198018], [0.198018, 0.7277, 0.198018]], "95125b09-8703-4088-a2d4-f202bd08d0a7": [[-0.931652, -3.05176e-08, -0.196996], [0.931652, 2.11865, 0.196996]], "4b40568b-0701-449c-99e7-37645669bdd9": [[-0.571879, -0.0, -0.573483], [0.571879, 0.598417, 0.573483]], "b256ca34-cf53-49d5-a6cf-27952a9c4f89": [[-0.994384, -2.50787e-05, -1.12974], [0.994384, 1.03058, 1.12926]], "1cad6c4d-48ac-45a4-80f2-f4b66c09826b": [[-0.25789, -0.000244547, -0.255319], [0.257886, 0.76727, 0.255328]], "686acd03-2e85-4290-9a19-d40196209a57": [[-0.423497, 0.0, -0.38982999999999995], [0.423497, 0.604664, 0.389959]], "c83b3213-33ac-4b92-b9e2-77baa86cf1ff": [[-1.07129, 3.99604e-17, -0.6825990000000001], [1.07247, 1.81996, 0.680456]], "0c2f5f5b-6ff7-4d35-bec3-39e6458c7c8c": [[-0.45740000000000003, -0.0, -0.20325600000000002], [0.457356, 2.1079939999999997, 0.20325600000000002]], "46fd79fc-9522-4381-9049-e54f61b211fb": [[-1.270607, 0.0, -0.558111], [1.270607, 0.867792, 0.558111]], "631fc71a-e898-447d-82bc-9ca9867c69fb": [[-0.7838240000000001, 6.47947e-08, -0.302331], [0.783821, 0.417106, 0.302331]], "f95c4da5-83ef-4123-af9a-3b17af255a66": [[-1.1946299999999999, -3.8147e-09, -0.426368], [1.19459, 0.809314, 0.42607500000000004]], "27ee0648-009f-42de-a19f-2887bab6ed49": [[-1.6640000000000001, 2.8145599999999997e-05, -0.629848], [1.66412, 0.816816, 0.63048]], "10885d59-04f5-42c9-ac3a-83810fb64dcd": [[-0.358647, 1.90735e-09, -0.358639], [0.358754, 0.25056, 0.35863999999999996]], "6f31bde3-88c3-4353-ab38-a6518f2518bc": [[-0.307203, 0.0, -0.370316], [0.307203, 0.9840340000000001, 0.37088]], "515ff780-6ec0-440a-968e-d2c4a73583c4": [[-0.31672999999999996, 1.86658e-17, -0.31671099999999996], [0.31672999999999996, 0.786064, 0.316712]], "53d02a81-22f8-33aa-bbb4-24cf0b8b3920": [[-0.273868, 7.2e-05, -0.292177], [0.27378399999999997, 0.9810639999999999, 0.294057]], "0bc5bcb0-0bbf-4fe1-a38e-16e20434f8b0": [[-1.17896, -3.3376399999999996e-08, -1.1509], [1.1791200000000002, 1.2776, 1.15075]], "f409f4f8-68c8-4a25-bcc7-d631f22066b2": [[-0.40136299999999997, -1.26517e-13, -0.20406500000000002], [0.40136299999999997, 0.468223, 0.20406500000000002]], "d1e91568-a9b4-471d-b85c-665abe8e4276": [[-0.428776, -0.00038662, -0.504253], [0.430353, 0.833074, 0.503413]], "50130809-38e4-4ace-92c1-bcc36d83ff26": [[-0.24070699999999998, 0.000245, -0.236388], [0.24081, 0.642984, 0.23663499999999998]], "56e40172-7e94-48c5-b29b-6e945832b7e3": [[-0.30095500000000003, -1.28822e-17, -0.219475], [0.30095500000000003, 0.681413, 0.219475]], "98d79c07-d61d-4849-9a96-78c9c1ab0466": [[-0.263889, 0.0, -0.24540199999999998], [0.26412800000000003, 0.626503, 0.24540199999999998]], "7af981e3-4988-4bd7-a6dd-c514b2faaf8c": [[-0.296537, -1.27424e-17, -0.295142], [0.296384, 0.40091, 0.295691]], "f9bc5ca8-180a-4a0c-8cf1-e85b20864fa3": [[-0.247173, 0.0, -0.273657], [0.247196, 0.868845, 0.273551]], "8231608a-994f-4416-b68b-3db75feafe32": [[-0.296099, 0.0, -0.294477], [0.296189, 0.615963, 0.294566]], "0412cdcb-b191-4f49-a22a-e206e61ef1c9": [[-0.259694, 1.12575e-17, -0.198323], [0.259694, 0.582419, 0.198323]], "00e371c6-da47-429e-b0cd-2ba243912ee8": [[-1.51494, 7.62939e-09, -1.01406], [1.51579, 0.819045, 1.01453]], "e1d522b1-c962-4364-afe2-a5486e70c1e9": [[-0.367879, 0.0, -0.445035], [0.367879, 1.025519, 0.445035]], "4a6c8766-5641-4d4d-914b-822e409441a4": [[-0.325, 0.0, -0.151001], [0.325, 0.89, 0.151001]], "bd45178d-ae3f-4980-b62c-d27351e34e83": [[-0.250577, 0.0, -0.250577], [0.250577, 0.511155, 0.250577]], "84ce2744-2c18-4fc1-b8ce-6a34908fdedf": [[-1.153818, 0.0, -0.455036], [1.153818, 0.836931, 0.454896]], "e39beb94-ce4e-4775-b30d-9faaa6e9b058": [[-0.7528130000000001, 0.0, -0.375651], [0.7528130000000001, 0.7100709999999999, 0.375651]], "1b177d51-d465-49c3-8580-9b2c81e24f95": [[-1.2, -2.20559e-06, -0.23], [1.2, 0.63, 0.23]], "a0a4bcc3-a960-4f09-9ee2-458f57b0c997": [[-0.545451, 0.0, -0.45460900000000004], [0.545451, 0.208575, 0.45460900000000004]], "5f6ef37d-5525-497b-87f3-b6cce3d5f676": [[-0.299973, -9.51607e-06, -0.258299], [0.299973, 0.559503, 0.25827]], "ed85d5d4-7b3e-4355-ad0e-b8b0ea52d7f7": [[-0.22021000000000002, 0.0, -0.200777], [0.22021000000000002, 0.859842, 0.200777]], "b90589f3-0c9b-499a-bc54-4ccc97ec7010": [[-0.791406, -0.000156812, -0.160609], [0.79136, 0.8598560000000001, 0.160799]], "36178363-d252-4b82-968d-a4bfcac1d9cc": [[-0.297447, -2.70152e-05, -0.295798], [0.297447, 0.472973, 0.295798]], "ada48d55-60be-46e3-8649-befd587e0a51": [[-0.27588999999999997, 0.0, -0.27588999999999997], [0.27588999999999997, 0.070075, 0.27588999999999997]], "094ed7df-1568-457a-aa01-478b98bc896a": [[-0.329685, 0.0, -0.329723], [0.32974600000000004, 0.603116, 0.329745]], "2c009f4a-2c5f-4b3d-8cb2-389a3000bfa4": [[-0.305266, 0.0, -0.273463], [0.305266, 0.948488, 0.271461]], "c1cdca71-d544-4300-8351-f4034eb140b7": [[-0.328495, 0.0, -0.356977], [0.32865900000000003, 0.697424, 0.357277]], "a2c84eb6-8c78-4082-9532-e00350b01434": [[-0.40021799999999996, 0.0, -0.39819200000000005], [0.400304, 0.8306359999999999, 0.39807699999999996]], "4413254f-8b73-3a49-b71c-5f8bb8876aac": [[-1.234984, 0.0, -0.478466], [1.234984, 0.833431, 0.483391]], "7acf98b8-349b-4b03-86a5-5fda22cf7818": [[-0.515783, -8.79416e-18, -0.169242], [0.515783, 1.7601, 0.171706]], "30c91dda-6485-4980-8490-27541bd6710c": [[-0.857921, -6.31546e-17, -1.03139], [0.857921, 1.17199, 1.03139]], "97c76c43-bb65-4f05-9f16-d67695f8f397": [[-1.34594, -8.11389e-05, -0.444202], [1.34582, 0.891341, 0.444558]], "d6687f6e-4e8c-493d-9b97-4ead11944e8d": [[-0.42269399999999996, 0.0, -0.41784999999999994], [0.42269399999999996, 0.8056260000000001, 0.41796999999999995]], "22f12a9e-f3a1-4fd4-b597-cfb8723aca74": [[-0.24492999999999998, -8.96074e-09, -0.182079], [0.24492999999999998, 0.270747, 0.182079]], "b568faf4-3150-449a-88f2-3c2a7f4bfc17": [[-0.615821, 0.000361, -0.7060420000000001], [0.615821, 0.782398, 0.7064579999999999]], "d80e9d77-c728-4d39-82b1-84485899ac7b": [[-0.406841, -0.000188126, -0.41066600000000003], [0.406645, 0.9113169999999999, 0.410958]], "52cdb70e-5cb3-41ce-9d39-b8d7dc8a4513": [[-0.8206140000000001, -5.05439e-17, -1.0038500000000001], [0.8206140000000001, 0.9128350000000001, 1.0038500000000001]], "4febf26e-dfbc-428b-8982-2aacfaefd317": [[-0.967334, -8.50994e-18, -0.211314], [0.9673099999999999, 0.599294, 0.211308]], "956197c0-1ffe-4707-91da-37660fe8eb52": [[-1.047909, 0.000212, -0.480322], [1.047909, 0.9152419999999999, 0.480321]], "d0dae903-414b-414c-8bfa-8f105e79844a": [[-0.525165, 2.4003999999999997e-07, -0.447519], [0.524898, 0.952464, 0.447029]], "69648960-25c8-4508-bcf5-ab288c2f15f5": [[-1.160824, 0.0, -1.16502], [1.160824, 1.081348, 1.16502]], "b12b4b4f-a0fe-43a7-add2-f95e0eeb1835": [[-0.37317999999999996, -1.99115e-05, -0.336115], [0.37311700000000003, 0.814021, 0.33629800000000004]], "1189d1b7-81f3-469c-8e1d-fe1db897ed04": [[-0.857179, 0.0, -0.446162], [0.857179, 0.403027, 0.446162]], "902c3155-811c-4f76-bbcc-7ca57b6999a4": [[-0.742232, 0.0, -0.47944600000000004], [0.742232, 0.46366100000000005, 0.47944600000000004]], "0c7d295e-f2a1-488f-ba3c-2e7350f46b5e": [[-0.996756, 6.675720000000001e-09, -0.44959499999999997], [0.99677, 0.767943, 0.44962]], "525dfbf2-f67d-4547-b6f9-4f48350053d8": [[-1.011063, 0.0, -0.194195], [1.011063, 0.467716, 0.194195]], "979f2e7d-12b7-40f4-a57c-388907f78b27": [[-0.531914, -1.67345e-17, -0.316055], [0.531914, 1.9955600000000002, 0.316085]], "419afed6-a0b1-4e43-8b79-7107c8adce36": [[-1.28698, -0.0028101, -0.432796], [1.28708, 0.783305, 0.433796]], "b63725db-7394-48f4-bb99-5707bd346d88": [[-1.522329, 0.0, -0.46326], [1.522329, 0.873659, 0.46347900000000003]], "737c5b12-3df8-4224-b200-c447b1daa811": [[-1.1798600000000001, -0.000426356, -0.539985], [1.17878, 0.8983920000000001, 0.53942]], "6e63d677-66c4-4c0a-9ecc-60d69c4c3a36": [[-0.264321, -0.000326064, -0.235091], [0.264321, 0.607657, 0.235703]], "4c4778d7-a5af-4e90-a5b9-cb2ebd283a53": [[-0.235, 0.0, -0.157166], [0.235, 2.03, 0.157166]], "8042d0c4-443a-427a-96ee-1fa4fb261da6": [[-1.39846, -0.000273903, -1.25605], [1.39846, 1.2931800000000002, 1.25825]], "842bedb2-5379-45f6-9678-c5f385ddba53": [[-0.606498, -0.00011612, -0.260714], [0.606498, 0.844727, 0.260838]], "5c2f1032-2e00-4e7e-8cbd-c9e871346337": [[-0.225612, -0.000109943, -0.203128], [0.225612, 0.941309, 0.203127]], "98895ddd-acf4-43bf-9ad6-2c9bf98866cf": [[-1.19776, -0.000295425, -1.02479], [1.19672, 1.09989, 1.02372]], "bb2babab-9064-4bee-90a1-ce4681d6cb1d": [[-0.322417, 0.00014800000000000002, -0.322417], [0.322417, 0.14963800000000002, 0.322415]], "4f3e6181-1575-41e5-9a9c-50555c7084fd": [[-1.4, -7.64539e-18, -0.155146], [1.4, 2.5, 0.155003]], "f2ecc636-3b30-4f45-96f0-5bd3fcd85a1f": [[-0.37111400000000005, 2.5175800000000003e-09, -0.407352], [0.37111199999999994, 0.739294, 0.40598799999999996]], "7898e53a-7395-483f-9694-66727298b472": [[-0.267389, 1.52588e-08, -0.265434], [0.267389, 0.16018000000000002, 0.265434]], "83cb51c3-94b9-4b00-90f0-95d205ce6a9d": [[-0.997063, -0.00012853, -0.427127], [0.997212, 0.667493, 0.427753]], "27dd0e32-8854-470a-bdc9-62c10aa45a89": [[-0.221478, -5.1958399999999996e-17, -0.222137], [0.22142299999999998, 0.405154, 0.22239699999999998]], "62b4b5ed-be64-4b5a-9f26-ab341d7c2cb6": [[-1.1388800000000001, -0.0, -0.150973], [1.1388800000000001, 0.549318, 0.150973]], "46e1f50f-ee0f-412c-ae8e-95d54ea99356": [[-0.220749, 9.2707e-10, -0.232123], [0.220718, 1.13664, 0.234011]], "d7b98bde-9f84-4c4f-be6d-472d8c63e4e4": [[-0.41025500000000004, 0.0, -0.414241], [0.41025500000000004, 0.8960769999999999, 0.414241]], "5f5746fc-1a91-416c-a7e5-5cd1c125fa46": [[-0.670855, 0.0, -0.180064], [0.670855, 0.9566410000000001, 0.180064]], "f33f69a1-bdd4-4432-bfb5-950a3606397c": [[-0.254289, 0.000624, -0.255138], [0.254351, 0.692417, 0.254497]], "7d60aa62-4305-4b6f-84e7-7fdc24790afd": [[-0.482902, -3.65622e-05, -0.422392], [0.482839, 1.16177, 0.42212299999999997]], "04ec6093-afa8-493a-a415-b0e0629ce7d0": [[-1.16743, -4.27335e-17, -0.7595050000000001], [1.16722, 0.92561, 0.7595860000000001]], "275d9252-24dd-3a14-9df0-eed49aaefb59": [[-1.17875, 0.0, -0.47294800000000004], [1.173179, 0.9545, 0.47273699999999996]], "3cb3fed6-4bc2-473d-b916-7d49bdaa66ce": [[-0.8650289999999999, -0.0, -0.247608], [0.8650289999999999, 0.485221, 0.247455]], "5f042093-52d7-40f3-bf43-e256195fbfef": [[-1.1520000000000001, 5.42808e-08, -0.310452], [1.1520000000000001, 2.4032, 0.31045300000000003]], "c6c03d80-ead8-41b6-90bd-59aa8d293b15": [[-0.400876, 0.0, -0.400876], [0.400876, 0.7209990000000001, 0.400876]], "2057d07d-11a6-4873-9199-8eca3f6fcb8c": [[-0.689315, 0.0, -0.47515500000000005], [0.689315, 0.360442, 0.47515500000000005]], "e8f868af-e2d8-47a4-add8-81d2bf522ea4": [[-0.85, -1.1268800000000001e-17, -0.227805], [0.85, 1.825, 0.227805]], "4be6873a-f3e6-4c34-b56e-5fbd5b73cb80": [[-0.675461, 0.0, -0.20131900000000003], [0.6754349999999999, 0.850115, 0.201318]], "ee284979-0d7d-4c31-8fba-da441f2e7c6a": [[-0.596392, 0.0, -0.23240200000000003], [0.596392, 2.025278, 0.231422]], "b03af7d5-6aab-4a20-b2c7-7db05b0846e8": [[-0.22021000000000002, 0.0, -0.200777], [0.22021000000000002, 0.859842, 0.200777]], "73b20377-3d6f-4218-80db-7c4cfc9be138": [[-2.00036, -2.2380899999999998e-05, -0.883749], [2.00001, 0.866112, 0.883352]], "02250622-9b86-436d-9709-e27542a7bd66": [[-0.472038, 7.3e-05, -0.39285400000000004], [0.471841, 1.044167, 0.39285400000000004]], "0b2cf6c9-2464-4219-8233-198a1f29776e": [[-0.90917, -1.1629999999999999e-17, -0.21289100000000002], [0.90917, 0.69292, 0.21559999999999999]], "b70bd195-d4e7-4d46-ba57-7c053351c461": [[-0.436788, 1e-06, -0.446672], [0.436796, 0.905019, 0.44664499999999996]], "25291e3b-297c-429d-9afb-e3b026a0a8c6": [[-0.839001, 0.0, -0.228445], [0.839001, 2.10354, 0.228445]], "c6740a83-5265-488b-adb9-d571489727ac": [[-0.32911, -0.000162114, -0.32911], [0.32911, 0.40846200000000005, 0.32911]], "9b07bdb0-5645-4588-b202-9ef637971c46": [[-1.1896, 4e-06, -1.142796], [1.190287, 1.3451840000000002, 1.142547]], "8ac734f2-d852-48ad-8642-078abe6a7329": [[-0.157859, 0.0, -0.21241], [0.157859, 0.534938, 0.21241]], "dddc3e53-d038-439a-bb3d-644945f20a1b": [[-0.297464, -2.10267e-05, -0.310706], [0.297301, 0.6599039999999999, 0.310239]], "380319eb-c155-4ddd-b99b-54c538629e8b": [[-1.22159, 0.0, -0.456169], [1.22159, 0.9099550000000001, 0.456169]], "863747ea-4502-49d3-bd2d-98e2551b586a": [[-1.21239, -8.29364e-08, -0.5785049999999999], [1.21235, 0.778549, 0.578507]], "1abab334-35fc-4dec-a8fb-bbe6b46866ba": [[-0.706374, 2.3e-05, -0.21464300000000003], [0.7063729999999999, 0.540115, 0.21463000000000002]], "4572daf6-d92f-4404-a396-c4c2014886b4": [[-0.199343, -1.27898e-16, -0.198991], [0.199343, 0.169589, 0.198991]], "c8b017e7-7890-4e8b-af7a-b764f611cc10": [[-0.730924, 3.69914e-07, -0.7308870000000001], [0.730924, 0.753475, 0.7308870000000001]], "81d1ecd3-9a1c-4ee2-be0e-de9c6c121ed3": [[-0.281415, -2.08298e-05, -0.24574100000000001], [0.281538, 0.8748900000000001, 0.24574300000000002]], "bb6bcfe0-60c4-4e01-b416-ec4bae39c99c": [[-1.15201, 1.7858800000000002e-17, -0.308344], [1.15201, 2.4027600000000002, 0.308344]], "27195304-e542-4ad0-90e8-69c9eb662834": [[-0.228681, 7.164860000000001e-07, -0.228647], [0.228681, 0.586934, 0.228647]], "44f7c8c8-757e-4128-b55a-7b699cce2f58": [[-0.224369, 0.0, -0.230403], [0.224369, 0.5335730000000001, 0.230403]], "e9c69651-0fc4-4a29-a586-1baf745617f3": [[-0.949864, -0.000264689, -0.898926], [0.949864, 1.5002099999999998, 0.8988710000000001]], "e0cda557-3927-4473-8c01-5903e91f5045": [[-1.75, -1.9007099999999998e-08, -0.235002], [1.75, 2.8, 0.235002]], "2bed5f1c-b612-459f-b6ba-a5eebbd90e09": [[-0.516517, -0.00056088, -0.462834], [0.5170130000000001, 1.23375, 0.463163]], "1a6d3e5c-8fe3-44e5-a233-2582a556d414": [[-0.7955159999999999, 0.0, -1.026732], [0.7955159999999999, 1.139767, 1.026732]], "c71892d6-a237-4cf3-b9e4-1fe8cb9086ac": [[-0.398876, -3.5167000000000004e-05, -0.28636500000000004], [0.39927500000000005, 0.506823, 0.288864]], "aab3d173-7393-4585-a105-8da4403ade49": [[-0.254857, -1.13025e-17, -0.254857], [0.254857, 0.157729, 0.254857]], "619a822d-dd10-49d2-8ede-94aaa700984c": [[-1.121499, 8e-06, -1.023523], [1.123262, 1.2753109999999999, 1.0236109999999998]], "5e64ff8a-11de-3abd-9bd6-b00c1a675231": [[-0.675, -0.000756, -0.225], [0.675, 0.743349, 0.225]], "4e13b15c-29fe-4fb7-85e4-4aaa1b5513ec": [[-0.264089, 0.0, -0.302866], [0.264089, 0.7964230000000001, 0.302866]], "940fd971-7295-44fc-8c5d-3f8462583da2": [[-0.8377840000000001, 0.0, -0.43453699999999995], [0.8378660000000001, 0.925235, 0.43463500000000005]], "ba094176-5166-4451-9571-560648063b57": [[-0.385445, -0.000564524, -0.38204], [0.385321, 0.34652, 0.381862]], "04d0f36b-09ea-468c-96f2-d393c8ae8f62": [[-0.924745, -0.0006881039999999999, -0.321377], [0.924745, 0.716859, 0.32191699999999995]], "13a27b6d-74a4-4eff-8766-1ef0f01e3aad": [[-1.9537799999999999, -1.70974e-17, -0.341688], [1.9537799999999999, 2.71291, 0.341175]], "a209d423-8ff6-4e07-b5c9-56a75507058a": [[-1.6285079999999998, 0.0, -1.031801], [1.6284219999999998, 0.979651, 1.03156]], "35cae47d-d625-484f-babe-7993f35148d8": [[-0.250922, -1.22148e-05, -0.128884], [0.250922, 0.951626, 0.129534]], "6c7d01ad-7d17-4209-a542-4435ce4a01bf": [[-1.0269599999999999, 1.80021e-17, -0.303997], [1.0269599999999999, 2.66367, 0.303997]], "65850f85-f51c-4ee3-b2f5-64ba41d749fc": [[-0.362459, 0.0, -0.39602], [0.362459, 0.9715, 0.395933]], "7848d795-4c75-40aa-887e-073529c3fa10": [[-1.1893259999999999, 0.0, -0.24810600000000002], [1.1893259999999999, 0.489544, 0.24810600000000002]], "faccb889-ee52-4fa8-9b1a-856b0f273257": [[-0.592726, -0.0009931270000000001, -0.592726], [0.592726, 0.49575600000000003, 0.592726]], "881ef752-48e9-454a-a1cb-d9a650bbef24": [[-0.517753, 0.0, -0.880551], [0.517752, 0.514546, 0.8801739999999999]], "1a3d7384-e6ba-4954-9a04-8b75edacc994": [[-0.310711, -8.7776e-06, -0.307413], [0.310717, 0.314014, 0.307413]], "74b409b1-9e04-4abe-89b8-a953a9b1337d": [[-0.17955400000000002, 0.0, -0.177805], [0.17955400000000002, 0.6410769999999999, 0.177804]], "d7768e49-b2ff-4821-9e21-8e94b2575c68": [[-1.44505, 2.09768e-17, -0.5], [1.44505, 0.765, 0.5]], "2c5c4934-16a8-4eb7-b9a3-08a40388b184": [[-0.8582510000000001, -2.39699e-05, -0.280092], [0.8581340000000001, 2.02231, 0.28]], "bec06416-cd6f-4688-a3de-3856b8a929cf": [[-0.6405500000000001, -0.000261383, -0.320828], [0.642185, 0.901142, 0.32111199999999995]], "aa497e9d-30f1-4b6d-8a32-25cd3d95d104": [[-0.39081699999999997, 0.0, -0.39093200000000006], [0.390981, 1.186136, 0.390931]], "fa90fa64-0a7a-49c4-96f8-530fd880c3a5": [[-0.6, 0.0, -0.19286899999999998], [0.6, 0.7, 0.19286899999999998]], "7d1a380f-bb60-3ffa-ae12-96b6d23d8c64": [[-0.398712, -0.0, -0.393967], [0.398715, 0.7299039999999999, 0.392476]], "b97af9d1-8f6b-47bd-bfff-71245aa1b72f": [[-1.039823, 0.0, -0.518115], [1.039823, 1.040516, 0.518115]], "2d7ac146-2cd3-449c-94e1-aa11d05fd5db": [[-0.36233400000000004, -0.000377908, -0.0330816], [0.362453, 1.56745, 0.0333136]], "61a32c28-44bd-4c78-b398-7385bc6a123b": [[-0.217746, 7e-06, -0.217746], [0.217746, 0.512331, 0.217746]], "02a64bc1-70d6-4da7-98c8-19038cfe95ec": [[-0.630838, 0.0, -0.128888], [0.630838, 0.495606, 0.128916]], "64fbe801-fc54-42c9-ad09-bcf7756c4677": [[-1.0252, 2.28882e-08, -1.06325], [1.02598, 1.08859, 1.06506]], "74ae784b-9aa5-4da6-a814-11c57e980d9d": [[-1.0501829999999999, 2.1e-05, -0.436195], [1.0504120000000001, 0.943315, 0.436377]], "9110001b-e49a-4703-aebe-ee2e61d6f469": [[-0.504596, 0.0, -0.45027], [0.504596, 0.7752490000000001, 0.45027]], "46005c45-ba17-4233-949b-d55e6c8374bd": [[-0.76, -3.3396e-05, -0.48], [0.76, 0.74883, 0.48]], "e19805a1-ff5b-454e-a81f-b1a21fcbf7ef": [[-0.266365, -7.99851e-09, -0.215991], [0.266365, 0.6575650000000001, 0.215992]], "becee4c5-be8e-4ad7-88c6-fa7f45f3aaed": [[-0.45201399999999997, 0.000179621, -0.296098], [0.45163, 0.555647, 0.295987]], "5e68ed73-0e57-41b8-ab4b-528f674cf184": [[-0.667499, -0.000153192, -0.274903], [0.667514, 1.9132900000000002, 0.275135]], "a678ec1b-8118-40fa-b77e-fbf761b6308f": [[-0.208234, 0.0, -0.208234], [0.208234, 0.578678, 0.208198]], "736b0e6d-de6e-4045-91b8-b843ebee33b3": [[-1.4584450000000002, 0.0, -0.53969], [1.4584450000000002, 0.879966, 0.53969]], "33355828-c98b-47f6-a748-4539b1ec471e": [[-0.970519, -0.000793632, -0.341023], [0.9704980000000001, 0.64594, 0.34149500000000005]], "9f0bb3f2-f8bb-4cbc-9ba2-9d1f3933ce69": [[-0.134052, -4.62771e-07, -0.134344], [0.13422, 1.5949700000000002, 0.134086]], "d16f6285-e669-44cd-8898-31e20a127d43": [[-0.246932, 0.0, -0.246932], [0.246932, 0.552772, 0.246932]], "5d662608-e130-49bf-9ed1-e8ce759df64f": [[-0.44311300000000003, 0.000333, -0.482597], [0.443191, 0.931393, 0.48266800000000004]], "6042a378-6361-42aa-8fd7-45ec7cd89be6": [[-0.5459700000000001, 0.0, -0.70108], [0.546069, 0.377149, 0.70107]], "82952d41-00e4-46ea-b5a5-dad51f22107e": [[-0.21422, 6.46482e-09, -0.22389099999999998], [0.21420000000000003, 0.156945, 0.22389099999999998]], "52c7339a-33ab-4654-9232-1a9d5db194be": [[-1.3824, -0.000490984, -0.52291], [1.38242, 0.922785, 0.5231669999999999]], "58438343-a954-4e16-aa5d-80f00ed5a0b0": [[-1.047522, 0.0, -0.467222], [1.047486, 0.92325, 0.467222]], "48a406e1-6324-4d03-ba90-06eb371e43af": [[-0.725, 6.10352e-08, -0.24444], [0.725, 0.87, 0.24477900000000002]], "849fb21c-0340-4c5f-8a4a-18d0f765efc9": [[-0.239265, 0.0, -0.239264], [0.239265, 0.46301000000000003, 0.239264]], "97a59fab-e005-4826-b3e2-6522a80f5247": [[-0.160729, -0.000117737, -0.160767], [0.16107500000000002, 0.740591, 0.16105899999999998]], "452793a7-feab-4004-b144-fa7e7a6b8705": [[-0.274823, 9.66512e-18, -0.175], [0.274823, 0.451683, 0.175]], "2d2442a4-04a4-4e92-859e-a6bdc1b3e51a": [[-0.705775, 0.0, -0.871745], [0.705775, 1.211874, 0.8717950000000001]], "6c265549-4946-41d2-96b0-0e0bd3d2089f": [[-0.22957899999999998, 0.000106, -0.253824], [0.229601, 0.648413, 0.253786]], "72e08436-c969-414b-ad6e-d3eba114220b": [[-0.410456, -1.56692e-17, -0.410456], [0.410456, 0.122604, 0.410456]], "f25c4fa1-d5e6-4eb5-ab32-ca56afa96cd3": [[-0.686327, 0.0, -0.640163], [0.686327, 0.48091500000000004, 0.64007]], "dd6a79b2-61cc-4d6a-bf7d-7acc8e752f51": [[-0.680611, 0.000276, -0.344065], [0.680611, 0.391753, 0.344065]], "1d3ddeb3-afd4-48bf-ac67-146637c70422": [[-0.629125, -5.27076e-17, -0.8849800000000001], [0.628893, 1.05166, 0.884757]], "30658f7b-6cd5-4a7c-82a1-af2e7adc7b1b": [[-0.770094, 0.000222, -0.494773], [0.770109, 1.377801, 0.49477200000000005]], "47a11128-1de8-4624-aa37-226979c7a248": [[-1.119678, 0.0, -0.37675800000000004], [1.119678, 0.751706, 0.37675800000000004]], "deb037a4-8082-48f0-9c6d-af866dc31c92": [[-0.7578539999999999, 6.10352e-08, -0.36080199999999996], [0.7578530000000001, 0.33250599999999997, 0.36080199999999996]], "f44fe630-f6f9-42de-b105-28682786d77d": [[-0.175001, -1.0715699999999999e-17, -0.175001], [0.175001, 1.558, 0.175001]], "7665f863-5552-3e14-a9fb-1eba14faa326": [[-0.482589, -0.00010800000000000001, -0.421301], [0.482589, 0.933772, 0.421301]], "2946a5e8-d81d-4768-ae28-f27ba8886410": [[-0.425159, 0.0, -0.232722], [0.425159, 1.252, 0.232723]], "7f89ac93-4eb3-4701-85c5-7a03f4ec6a6b": [[-1.27091, -1.44971e-07, -0.392096], [1.27091, 2.42618, 0.392096]], "13d01cc8-b080-4e03-85dc-eff4a65b0716": [[-1.020001, 1.5e-05, -0.276], [1.020001, 0.544292, 0.276]], "6d22fcb0-05a2-46db-954a-ff5f206b4785": [[-0.775423, 0.0, -0.20735499999999998], [0.775423, 0.7395, 0.20735499999999998]], "50c7e1c4-92fd-495e-bc0c-f43fa5f06735": [[-1.4163, -0.0005986650000000001, -0.5223490000000001], [1.41655, 0.908189, 0.522278]], "08f6e8e1-2eb1-401a-a1b6-35d0d734eac4": [[-1.0242499999999999, -2.97496e-05, -0.497374], [1.02428, 0.835338, 0.495611]], "c65033bc-8b5b-4608-b6f3-2c2853e8e670": [[-0.414532, -0.0, -0.18577000000000002], [0.414532, 1.052913, 0.18577000000000002]], "3f790857-3677-41f3-bec0-88425a12095a": [[-0.825521, -5.61184e-17, -0.916483], [0.825521, 1.5026400000000002, 0.916483]], "d0d69216-c681-49f6-8bb1-5d745ed3de39": [[-0.46515999999999996, -1.60929e-07, -0.21561699999999998], [0.465126, 0.412145, 0.215561]], "1e6dcaf2-c674-35b6-b4c7-ba6523595860": [[-175.0, -0.0005, -80.0], [174.9999, 73.1775, 90.0]], "e274da8d-d814-43e6-bb8d-d5f6bfd950fb": [[-0.67604, -3.56895e-05, -0.24588000000000002], [0.676722, 1.25173, 0.245856]], "59d4a5f6-41e1-4efa-b280-0cf914bb084c": [[-1.22659, -0.00954666, -1.30552], [1.22657, 1.21024, 1.3056299999999998]], "04504ec8-c391-3b71-a60b-d55c44419ab8": [[-50.0, -0.0528, -49.2668], [50.0, 80.3924, 50.7332]], "5f6eb8da-8f0e-47a6-9d14-3f604dcb947f": [[-0.500901, 0.0, -0.432429], [0.500901, 0.954888, 0.431888]], "87941f28-6bc6-4c51-8143-9d6695c618cc": [[-0.39500399999999997, 0.0, -0.352864], [0.395035, 0.850679, 0.35279400000000005]], "0bd81869-830e-4673-bfeb-e4d1e5c60302": [[-0.286354, 0.0, -0.295771], [0.286354, 0.9048120000000001, 0.29577000000000003]], "5c612000-adb5-4951-85e4-c10004f1581b": [[-1.206656, 0.0, -0.41239899999999996], [1.206842, 0.736031, 0.41247]], "83811b6c-c9fc-4b08-9f8b-366ae24b368a": [[-0.45902099999999996, -5.46501e-05, -0.432401], [0.458506, 0.803613, 0.432182]], "73e85e57-b389-494b-81dc-5827c238cb1b": [[-0.800105, 0.0, -0.200136], [0.800105, 0.8500749999999999, 0.200136]], "24b4b76a-65b5-4774-8797-726bd6abe893": [[-0.3, 7.62939e-09, -0.2125], [0.3, 0.8, 0.2125]], "28dcdaa1-7388-4157-afbe-9ab5fe16ef61": [[-1.12577, 4.4607099999999996e-09, -1.20333], [1.12577, 0.75035, 1.20333]], "2d9188df-b68c-4c52-b107-9d035451a959": [[-1.18436, 3.67002e-06, -0.5252870000000001], [1.18509, 0.9759709999999999, 0.52729]], "758b7302-a6c5-4281-9939-2eebaa6ed2b9": [[-0.29296500000000003, 4e-06, -0.32737099999999997], [0.29296500000000003, 0.720789, 0.327372]], "1cb65fda-95d6-40cc-befc-5d04ede8fc2b": [[-0.275, -1.18201e-17, -0.206963], [0.275, 0.55, 0.206963]], "d4c0ea3d-f9bf-4fe1-9db0-ba35803080fc": [[-0.928792, -1.7913699999999998e-08, -1.03398], [0.928843, 1.13505, 1.03456]], "1a2e9df7-e649-4f91-bed9-d0143f3b579a": [[-0.15195499999999998, -0.000471976, -0.15195499999999998], [0.15195499999999998, 0.9381929999999999, 0.15195499999999998]], "60758d1d-68d8-43e7-8523-f085fc9ebbf4": [[-0.881016, -0.00115504, -1.07645], [0.880786, 1.3486600000000002, 1.07582]], "7fac119a-0981-4f6d-947f-35c7bbbd9ba4": [[-0.358562, 0.0, -0.36245399999999994], [0.358562, 0.48816899999999996, 0.362126]], "db49e6e7-e9bd-4be8-bce9-8eb2e4938618": [[-0.222347, 2.3999999999999997e-05, -0.235861], [0.22236799999999998, 0.399681, 0.235861]], "0e44b3e5-df80-458c-ac9c-c1381eaf010a": [[-1.00538, -9.362469999999999e-09, -0.291169], [1.00538, 2.68534, 0.291169]], "9646f746-37c9-44aa-a3a6-8189729f3281": [[-1.22963, -0.000605449, -0.469673], [1.22872, 0.71783, 0.46955399999999997]], "70b85202-1ead-30c9-a687-1013a0f0e452": [[-63.0, 0.0, -33.454], [63.0, 76.3262, 33.0361]], "4847f8da-749d-4408-a3d8-f6cb7e124fec": [[-0.419874, 0.000686762, -0.16648700000000002], [0.419874, 0.7964319999999999, 0.166287]], "e31b30e4-8efc-4ecc-b3ec-19db19ffa98f": [[-1.346352, 0.0, -0.5286310000000001], [1.3463409999999998, 0.888172, 0.528644]], "611473e7-176a-4678-9ae4-b8184cdf8039": [[-0.3265, -1.8651699999999998e-17, -0.23591499999999999], [0.3265, 0.62834, 0.23591499999999999]], "846bef72-20b1-4910-918d-cf16981a1c70": [[-0.6901649999999999, 0.0, -0.17063199999999998], [0.6901649999999999, 0.32604799999999995, 0.17063199999999998]], "a5942497-91fb-479e-9afd-779b9cb469fb": [[-0.740634, -6.309909999999999e-07, -0.32799500000000004], [0.740636, 0.280396, 0.32799500000000004]], "cfa45fc2-9dd3-41f4-ae34-8b16f03d96cc": [[-0.64005, 0.0, -0.64005], [0.64005, 0.803728, 0.64005]], "efe1857b-d46a-47bd-b92f-0dc81a4eb620": [[-0.23722000000000001, 0.0, -0.278021], [0.23722000000000001, 0.756661, 0.278021]], "24f95734-9101-3602-a3e2-3143123e9601": [[-103.3869, 0.0, -33.538], [103.3869, 67.4467, 33.1707]], "6d0642d0-4c9c-488c-a3ce-ff6720d08479": [[-0.5297149999999999, -4.88791e-06, -0.332161], [0.529506, 0.38264699999999996, 0.332161]], "7fe8f8c0-c922-4329-a886-ac5861ef0942": [[-0.9798990000000001, 0.0, -0.439108], [0.9798990000000001, 1.0120310000000001, 0.438754]], "29e03813-a974-4241-a643-22c38ff69172": [[-0.574687, 7.20564e-05, -0.575901], [0.574687, 0.26911, 0.575901]], "1a9c7a98-758b-4faf-aa16-33f821380f98": [[-0.579982, -0.0, -0.5370940000000001], [0.580037, 1.276025, 0.537194]], "9c2e6c40-74b3-40b9-84bf-5de7cbfec0ff": [[-0.16865200000000002, 0.0, -0.201065], [0.16867200000000002, 0.6773309999999999, 0.201065]], "722a8383-3ad7-4344-b2be-ebf1dd12f451": [[-0.8724339999999999, 0.0, -0.409652], [0.8724339999999999, 0.750001, 0.409652]], "540a839f-bac3-4686-85c1-56640109e8f1": [[-0.786459, -1.67708e-17, -0.304141], [0.786459, 1.97003, 0.304141]], "d6b8d980-efda-4984-bee3-e7fd750e88fe": [[-1.80944, -2.75856e-17, -0.7], [1.80951, 1.73882, 0.696998]], "30f80fbb-ca6f-406d-a578-05818474be48": [[-0.95473, 0.0, -0.188888], [0.95473, 0.509272, 0.188888]], "8d299fcf-5e2b-4953-92ef-3970de46172f": [[-1.06103, -2.80294e-05, -0.470169], [1.0612000000000001, 0.797584, 0.470091]], "4aafdd05-b120-4722-92aa-8dab3d920053": [[-0.9817199999999999, 1.4930299999999998e-17, -0.482628], [0.9809269999999999, 0.818837, 0.480109]], "7f10ff29-43a8-495e-9f38-e55285cd27a9": [[-0.296952, 3.02564e-05, -0.290586], [0.297205, 0.47048, 0.291134]], "0bad3e18-a5c4-4e86-a6a4-b83aa62d8802": [[-0.344142, -1.89063e-05, -0.343594], [0.344073, 0.6883870000000001, 0.342503]], "a32fbc3e-32e7-44a9-b947-306c42d3a34d": [[-0.240277, 0.0, -0.223827], [0.23970400000000003, 1.348825, 0.223827]], "4ee9bfc1-e31a-4958-b855-17b744cbdcdc": [[-0.8390430000000001, -1.9073500000000002e-08, -1.0343600000000002], [0.839054, 1.0858400000000001, 1.03417]], "0944a6d4-55e5-34d6-ba22-e0aca007349b": [[-40.0, -0.0192, -40.0], [40.0, 82.8993, 40.0]], "09f18111-d73e-4e87-8b9b-c8e585701ff7": [[-0.705633, 2.3877400000000003e-05, -0.263802], [0.705633, 0.823714, 0.263802]], "0d345c26-fedc-4f03-bdc2-80b9f27db831": [[-0.87222, -4.118e-06, -1.04253], [0.871802, 0.7905629999999999, 1.04259]], "5b5cbb1a-9216-4e14-994e-9f3f374b074a": [[-0.5282560000000001, 0.0, -0.449915], [0.528353, 0.7995180000000001, 0.449915]], "59eb8be9-fb11-474e-957e-721ba1b1d491": [[-0.238387, 0.0, -0.233569], [0.238387, 0.592755, 0.233569]], "61381470-da68-3ce7-98c1-9883c9cbc1eb": [[-0.606092, 0.000303, -0.196768], [0.45421500000000004, 0.81011, 0.199936]], "2f4f4b29-851d-3fed-bfb9-292ae748c5fc": [[-61.0815, -0.0372, -64.8415], [61.0815, 94.8394, 57.0649]], "09e0094a-0615-4623-97ee-85f3ddc87032": [[-0.26311, -0.000596173, -0.264768], [0.263287, 0.805149, 0.264575]], "f3e723dc-db3c-4309-a8b2-05008ba5e400": [[-0.516076, -3.86349e-05, -0.209561], [0.516076, 1.3717, 0.209561]], "46e1956b-5f00-4064-a41a-b7dd01aac830": [[-0.829787, -0.00118928, -1.13805], [0.8314, 1.41065, 1.13788]], "6e16ad24-712f-4d40-abe6-93ecdf10bcb9": [[-0.42519799999999996, 0.0, -0.175065], [0.42519799999999996, 1.305338, 0.175065]], "5bb21669-d969-4507-94dc-1bd9c806806e": [[-0.632191, 3.4758800000000003e-06, -0.37938099999999997], [0.6321629999999999, 0.298284, 0.379396]], "0ad7bad9-c1fd-4057-a73c-a6296202a479": [[-0.45708799999999994, 0.00010200000000000001, -0.44144], [0.45708799999999994, 0.8933190000000001, 0.44163600000000003]], "4a4a11fa-9359-4f65-a68e-6dfc9908af1f": [[-0.65, -0.000346212, -0.19], [0.65, 0.568532, 0.19000599999999998]], "287e4cde-2209-4d5f-baf4-3b1077a01172": [[-1.53018, -1.39885e-08, -0.867461], [1.53024, 0.7858350000000001, 0.866957]], "a788be97-952e-455e-99f2-b998ab873acc": [[-0.278709, -0.00020941299999999998, -0.29744499999999996], [0.27793, 0.834144, 0.29715199999999997]], "a6b44420-4e2a-40f9-ba1f-9f5f51919e89": [[-0.278237, 0.0, -0.287495], [0.278237, 0.61501, 0.287397]], "4ec045ba-18f3-4d25-978d-36fea5a83a85": [[-0.2298, 0.0, -0.276437], [0.229759, 0.7535630000000001, 0.27664]], "a777eb62-7b38-4a0a-b0a2-cbbc9f9dbf3d": [[-0.600043, 0.0, -0.300033], [0.600043, 0.752466, 0.300033]], "a1458bfd-2d20-4f23-895b-7b5e7e638b6e": [[-0.413641, 7.62939e-09, -0.39067799999999997], [0.413733, 0.6610469999999999, 0.390499]], "98b1ddc4-a86b-4c32-b245-95c8a8d49a2e": [[-0.6874129999999999, 1.03607e-17, -0.194313], [0.6874129999999999, 0.8184480000000001, 0.19430599999999998]], "70456aa8-10b4-403b-ae01-8f4f2a288e1e": [[-0.335924, -1.3418e-05, -0.3567], [0.336451, 1.08897, 0.357014]], "00777e3d-1a47-4193-ad13-43e8881ca6b8": [[-1.23556, -0.000429842, -1.13285], [1.23557, 1.4475200000000001, 1.13218]], "1731bda3-d883-47fd-8224-3f0ef38e82e7": [[-0.394834, 0.0, -0.345207], [0.394834, 0.83281, 0.345207]], "d796c38f-932c-4a13-9640-90c15cc90e3f": [[-1.3574709999999999, 0.0, -0.478568], [1.357346, 0.860587, 0.478568]], "d952be54-5728-4ee8-8f79-35ecfa1212ce": [[-0.42220399999999997, -8.20358e-05, -0.40544600000000003], [0.422203, 1.12651, 0.405445]], "63af26e6-4d80-4c6f-b826-4d09c042bc2e": [[-0.217148, 0.0, -0.22691299999999998], [0.217148, 0.43825800000000004, 0.22691299999999998]], "3d002fec-67b6-427d-a442-3734aed858d9": [[-1.558623, 0.0, -0.55], [1.558623, 0.7731270000000001, 0.55]], "b274aeae-e7c2-4b02-86a9-65248ac1e6d4": [[-1.00193, -2.8643799999999995e-17, -0.23616399999999999], [1.00194, 0.64, 0.236221]], "894bfdab-c7c4-4ea5-8624-a545b9dd8dae": [[-0.058706699999999994, 7.62939e-09, -0.058689200000000004], [0.058744199999999996, 0.944971, 0.058698600000000004]], "bc7c90bb-c1cf-4b1d-ae98-5f7fc5ba0dd4": [[-0.614542, -5.596890000000001e-06, -0.200063], [0.614432, 0.785561, 0.20006900000000002]], "d3009942-98ba-4652-bb92-13e61b82bde7": [[-0.341894, 0.0, -0.341894], [0.341894, 0.420634, 0.341894]], "a6707409-ce9c-4873-b65b-c594e1a1b67c": [[-0.500043, -1.54321e-17, -0.25183099999999997], [0.500043, 0.7600920000000001, 0.25183099999999997]], "aeef9192-6656-4d48-ae21-db87267aba94": [[-0.616942, 5.5650799999999996e-09, -0.24654800000000002], [0.616942, 1.99969, 0.24654800000000002]], "7c15367a-925c-4b89-8f0b-d46e2a386f7d": [[-0.365695, -9.00366e-05, -0.455659], [0.365788, 0.880656, 0.45547899999999997]], "ca80336b-4825-4ce0-b7c5-5621ce6343d8": [[-0.5500970000000001, -8.72022e-18, -0.19447299999999998], [0.5500970000000001, 1.0800400000000001, 0.19447299999999998]], "5ec8be8f-f953-40e1-9a1e-9710b83c176c": [[-0.371884, 0.0, -0.493368], [0.37188299999999996, 0.9025839999999999, 0.493368]], "4700b3ed-0d33-434f-bf15-1edee1cb65b3": [[-0.5243990000000001, 0.0, -0.19659400000000002], [0.5243990000000001, 1.252219, 0.19659400000000002]], "eaa895b6-dde2-4904-97bd-8ecde12028a8": [[-0.53, -1.35967e-07, -0.53], [0.53, 0.44994300000000004, 0.53]], "59b95376-f918-4700-a253-5d6243f1fd0e": [[-1.0000010000000001, 0.0, -0.300002], [1.0, 0.75, 0.300002]], "121556d8-0b94-4320-9f82-b31977dbf9c1": [[-0.249098, -0.00047221300000000003, -0.248876], [0.249008, 1.26269, 0.249059]], "c5a5481d-01e1-40f1-b110-499ed9fb05e7": [[-0.525147, 0.0, -0.17022400000000001], [0.525147, 0.7130289999999999, 0.17022400000000001]], "71a4d3f2-a09c-44ff-9b63-9f0f70098c5f": [[-0.43204, -9.027390000000001e-07, -0.24481999999999998], [0.43204, 0.452338, 0.24505500000000002]], "88bab778-aa61-4ae3-9fac-b7ff21d7a626": [[-0.223888, -1.00346e-05, -0.22397099999999998], [0.22405, 1.0446, 0.223919]], "3c0bc607-b9e8-43d8-a520-038385a97cad": [[-0.439839, 0.0, -0.410135], [0.439846, 0.800731, 0.410135]], "0a46f1ea-56e6-4504-9ba4-70e6ce886faf": [[-1.13939, 3.47044e-08, -0.787517], [1.13939, 2.06623, 0.787517]], "c9102930-de4b-475b-9df9-e3b2385a14d4": [[-0.350187, 2.13385e-06, -0.366112], [0.350187, 0.8331040000000001, 0.366156]], "6ff36d27-c149-44f5-9e77-39037f8251a9": [[-0.900617, -8.883590000000001e-18, -0.2], [0.900617, 0.5, 0.2]], "d08f1e60-7dc3-4270-82b9-a4ccc150cf46": [[-0.21316600000000002, 0.0, -0.12847799999999998], [0.21316600000000002, 0.209317, 0.12847799999999998]], "6052bb84-e1a6-3071-874c-5ae10e3e12ea": [[-1.261495, 0.0, -0.5321359999999999], [1.261495, 0.8246939999999999, 0.532164]], "b66fccb0-d2b1-440c-85d8-47cbdf72c3fb": [[-0.264728, -2.79883e-05, -0.264864], [0.26474, 0.606712, 0.264863]], "0e03db4c-d23b-42af-91d1-576a5c444a6e": [[-1.9726599999999999, -2.41875e-10, -0.971429], [1.9713900000000002, 0.8852119999999999, 0.9717749999999999]], "82f392c4-3d5c-4559-a3ee-5c643500585e": [[-0.913562, -1.99148e-17, -0.372875], [0.913502, 2.03801, 0.372892]], "a05950c1-d397-430a-a84a-f186f6e26b7a": [[-0.423678, -0.0, -0.406639], [0.423678, 1.3984100000000002, 0.406639]], "2c0a99cb-b1ef-46e6-b553-a3648794c0d7": [[-0.953746, 5.581129999999999e-07, -1.15602], [0.95392, 1.44584, 1.1546399999999999]], "5fd0c725-0688-44c9-aea3-e867243818a3": [[-0.425413, 1e-05, -0.553453], [0.42635199999999995, 0.923516, 0.55333]], "b9f96f80-07ac-445c-893b-fa02173345a0": [[-0.723267, -0.000113508, -0.150645], [0.723267, 1.23089, 0.150645]], "b142d37c-62f9-4f14-a757-356310a8e346": [[-0.35, -2.0004699999999998e-06, -0.25009], [0.350001, 0.589648, 0.250089]], "060c4f7c-0640-4e5a-884e-36250b2527f4": [[-1.16741, -1.66582e-17, -0.298925], [1.16741, 0.8280670000000001, 0.298925]], "72ceae36-37b8-4b8d-9549-ceea4b653229": [[-0.275079, 0.0, -0.20018999999999998], [0.275079, 1.160851, 0.20018999999999998]], "6a2ffa42-89dc-4c83-9ed2-24687af58911": [[-0.9687520000000001, 3.05176e-08, -0.33872300000000005], [0.9687520000000001, 1.0357399999999999, 0.33872300000000005]], "1d920ba1-6a64-4834-b9f9-737fb7660bcc": [[-0.251, 1.1920899999999999e-10, -0.251], [0.251, 0.1321, 0.251]], "0eda6797-989e-426e-8f96-4e1c6c85aff5": [[-0.960254, 0.0, -0.427282], [0.960254, 0.767933, 0.427282]], "32c3f7da-2788-4a14-9878-7e8f141d7d51": [[-0.512703, -0.000520833, -0.496267], [0.51239, 1.44127, 0.496675]], "c3a85c3d-46a8-4793-b088-44ff50b37f37": [[-0.616864, -5.31608e-06, -0.232591], [0.616864, 1.45156, 0.232364]], "600bfa92-f56a-35b2-ac90-2634dee248f3": [[-0.235784, -0.00086, -0.307761], [0.232788, 0.992372, 0.305241]], "c96b81b9-51f5-4ac6-b737-8e63d09feee8": [[-1.487908, 0.0, -0.1765], [1.487908, 2.329, 0.1765]], "0ac939a0-68a1-4144-a562-78b48c79adb2": [[-1.15174, -0.00158349, -0.454167], [1.1515300000000002, 0.814846, 0.456308]], "e7defba1-6d30-415d-a374-a61af4e0b132": [[-0.216036, -9.611949999999999e-05, -0.259693], [0.216036, 0.5760000000000001, 0.259693]], "ac810ad0-0e7c-486e-bde7-2665312a72da": [[-0.523476, -0.0012606, -0.49871000000000004], [0.523476, 1.1573, 0.498382]], "34f01ca5-b30c-4273-84c8-1a9d4a71980e": [[-0.8766379999999999, 2.13071e-05, -0.8796980000000001], [0.8766330000000001, 0.906104, 0.879301]], "2ae81529-1493-4568-b78e-e5946b182098": [[-0.29934499999999997, 5.6e-05, -0.37018900000000005], [0.29936599999999997, 0.934906, 0.370107]], "05c2ba89-d3ef-47d9-b272-149712dd9b1e": [[-0.6420619999999999, -5.127979999999999e-06, -0.34502000000000005], [0.642059, 0.337057, 0.345012]], "12070e40-3a5a-41ac-a3e0-209e230db460": [[-0.34306800000000004, -8.516510000000001e-19, -0.349835], [0.34338, 0.604495, 0.35023499999999996]], "62443957-1c5a-425b-9527-3f2fed78eb12": [[-1.0253700000000001, 0.0, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "307dec24-4beb-4d07-8b06-d2c715a7b1a5": [[-0.542404, -2.16962e-18, -0.5264840000000001], [0.542356, 0.24182700000000001, 0.526475]], "7bf590ba-7f4f-4f13-8be7-92eeef002c3c": [[-1.01577, -1.0997300000000001e-17, -0.2], [1.01577, 0.440055, 0.2]], "0bca869d-b715-4795-b911-9de38f642f22": [[-0.33777, 0.000344, -0.40665100000000004], [0.337771, 0.797079, 0.40653399999999995]], "3fa36b26-81a5-33f1-8fe2-b4f684e6fc12": [[-1.1140940000000001, 0.0, -0.450879], [1.107704, 0.8933230000000001, 0.461763]], "56e99f03-de10-4747-be11-c7b420f50a49": [[-0.21, -1.14122e-17, -0.21124700000000002], [0.21, 0.598108, 0.21123899999999998]], "d4768a2a-c1dd-402d-bd34-8b842880c508": [[-0.243533, -1.24905e-17, -0.219066], [0.243533, 0.769945, 0.219066]], "9f62b75e-3c8b-4be2-87d3-84ea43e7c4e8": [[-0.215, -1.2268300000000001e-17, -0.215], [0.215, 0.43547800000000003, 0.215]], "ea0be776-bedd-48cc-b929-e1f79e4e847e": [[-0.293209, 0.0, -0.226513], [0.293209, 0.594968, 0.226513]], "a6380746-8bb5-4686-8cbf-9058eda4c022": [[-1.41, -0.00031443199999999996, -0.30257100000000003], [1.41, 2.6, 0.30257100000000003]], "4aee4c5c-cf71-4084-a2ea-9e7d35900f97": [[-0.200767, -6.0538599999999995e-06, -0.164956], [0.200245, 0.798214, 0.164771]], "59e2cf82-8b0b-4495-89b5-6ae9382f00a8": [[-0.9270520000000001, -3.66326e-05, -0.430512], [0.9277599999999999, 0.766918, 0.430998]], "6f5c5154-fa96-4675-8e1b-9c8d4151e996": [[-0.24379, 0.0, -0.243761], [0.24379, 1.266348, 0.243761]], "4584676b-862d-4372-928a-a62579b72d03": [[-1.361087, 0.0007340000000000001, -1.3220070000000002], [1.3597720000000002, 1.181916, 1.3220070000000002]], "7a276f3a-d7a6-4af6-9505-5c108d59e84e": [[-0.595001, -1.51192e-08, -0.285991], [0.595001, 0.713637, 0.285991]], "7c746b37-65f2-3b8b-83a8-c627a499ed84": [[-40.1621, -0.1686, -39.5894], [38.963, 89.8942, 40.0713]], "4a3ddfa6-ec55-4703-9ce6-f02366d31e3c": [[-0.412983, -0.000453813, -0.398929], [0.413812, 0.562527, 0.398025]], "40f6741a-66bf-472d-8fbf-0742a08dcdc3": [[-0.712724, 1.1000000000000001e-05, -0.264501], [0.712724, 1.548535, 0.265026]], "27864eba-2f73-49e5-b95f-e0cf5f9178f0": [[-0.82806, -1.3876100000000001e-17, -0.26892], [0.82806, 0.828991, 0.26892]], "553fd456-0d2f-31d4-9f31-26a3b79dd205": [[-0.272299, -0.004988, -0.297975], [0.28292100000000003, 0.815258, 0.253411]], "ae70cd6c-2be5-417b-b68c-173da0125450": [[-0.8953700000000001, -9.35584e-18, -0.5096029999999999], [0.8953700000000001, 0.6685469999999999, 0.5096029999999999]], "292c2ef0-f04f-4d1d-b051-b12dd7c47ff7": [[-1.672389, 0.002416, -0.996172], [1.672655, 0.877287, 0.995667]], "487ef6ec-64be-47f0-933e-50f1559c30dd": [[-1.1775, -1.52588e-08, -0.210339], [1.1775, 2.33001, 0.210339]], "52430fec-51c3-4556-a5f0-4835ee0eaeed": [[-1.18309, 2.48701e-17, -0.468116], [1.18844, 0.9164100000000001, 0.469811]], "0fec1c2d-e016-4d9d-a406-ed34a14ccdc2": [[-0.722085, -0.0008175799999999999, -1.00342], [0.7236509999999999, 1.45663, 1.00342]], "d0f797f9-0570-4daa-867a-c998beddfaae": [[-0.463512, 0.000503, -0.463176], [0.463512, 1.256742, 0.463176]], "2324e861-bac5-411d-9c27-d16063b1c516": [[-0.707231, 0.00075, -0.444767], [0.707231, 0.771288, 0.444711]], "4a6eb304-dcc5-477e-8349-933c2ee27d0d": [[-1.16342, -0.00025832000000000003, -0.405563], [1.16387, 0.743146, 0.406237]], "e14d89ec-42a6-4dec-995a-63d7feb3c89b": [[-0.250271, 0.0, -0.20046399999999998], [0.250271, 1.06088, 0.20046399999999998]], "78e30bd4-f86b-49e4-904b-672cedb887e3": [[-1.10635, -0.00149815, -0.47165], [1.10598, 0.972886, 0.47172]], "3f7d26ad-491a-4de6-8f41-b81e9f094016": [[-0.363345, 4.1e-05, -0.41458], [0.363345, 0.923184, 0.414489]], "5f3de668-976a-49d9-b8c8-f07d66229c9f": [[-0.886686, 0.0, -0.394623], [0.886686, 0.423068, 0.394623]], "8173ca3a-e7f6-48ff-90f1-3b4237205dca": [[-1.12218, -0.000287458, -1.06674], [1.12037, 1.2356399999999998, 1.0667499999999999]], "516f087b-a170-4a2b-ab4c-b74913c2e926": [[-0.354884, 0.000365858, -0.169071], [0.354869, 0.552136, 0.168748]], "ab36deca-be9b-431c-a62c-fb33eee925cb": [[-1.45102, 0.0, -0.189652], [1.45102, 2.41582, 0.19022099999999997]], "db27ec00-3452-4f98-98a8-7b06bc9e4860": [[-0.201727, -1.23879e-17, -0.202309], [0.201727, 0.140419, 0.202309]], "54e13710-db1c-460d-a52e-bf2bb22d19c2": [[-1.0872, -0.000716619, -0.365432], [1.08713, 0.787577, 0.365394]], "5a5c45b5-c2b1-3ca0-aaff-df35084450cd": [[-0.720482, 0.00026599999999999996, -0.38], [0.719725, 0.777714, 0.38]], "7f065772-c89d-42d2-94cc-062ff234920e": [[-0.46309399999999995, -0.000685568, -0.22898800000000002], [0.46360799999999996, 0.908964, 0.228175]], "510389ef-a72b-4009-8e68-7107469187be": [[-0.441396, 0.0, -0.48038], [0.441396, 1.138554, 0.48038]], "664b58cd-2670-40bf-9c48-5d4ce60bd91d": [[-0.784525, 0.0, -0.583887], [0.7845260000000001, 0.758665, 0.583887]], "fa0d0092-8dee-439f-b5f2-b5c2e05f7add": [[-0.241301, -7.71047e-05, -0.241286], [0.241301, 0.9003220000000001, 0.241286]], "83c43ab5-7f54-4ee3-bf66-4bb2861a2324": [[-0.7127249999999999, 0.0, -0.262974], [0.712912, 0.35269399999999995, 0.262974]], "628993d4-fa68-454a-b72b-57ac15d7b8a0": [[-1.54995, -0.0021411299999999998, -0.9838030000000001], [1.55012, 1.0795000000000001, 0.9826260000000001]], "154f8b57-38f4-3548-9e11-67caf24eac0d": [[-0.328403, 0.0, -0.35005400000000003], [0.33805999999999997, 0.700809, 0.33617600000000003]], "83f6d69a-eea1-4a23-ac16-1f8ac28db13f": [[-1.12459, -1.0790100000000001e-07, -1.09783], [1.12472, 1.21865, 1.0977]], "18e2637d-15b2-44e3-b83c-fbc3a96286c0": [[-0.5488810000000001, -1.16837e-17, -0.215249], [0.5488810000000001, 0.749002, 0.215249]], "e45091f7-8083-490d-97c7-15e20c9004bd": [[-1.00782, 0.00018167, -1.05969], [1.00932, 0.813219, 1.05975]], "e9129eaf-ab59-4e38-9f74-deab282fe5fe": [[-0.359488, 0.0, -0.311322], [0.359488, 0.452288, 0.311322]], "daee0fa2-0d44-4d0d-9210-c2c231a2c2a8": [[-0.369763, -0.00119576, -0.3701], [0.36924100000000004, 0.33610500000000004, 0.36985500000000004]], "7a76f61b-8b2e-32ef-93e0-01e73429a3fb": [[-1.270945, 0.01306, -0.762279], [1.235738, 0.9606570000000001, 0.574137]], "678e885a-5c6e-4b67-9199-7af839c8ef20": [[-1.154566, 0.000333, -1.3435540000000001], [1.154566, 1.1867130000000001, 1.342841]], "7cacdf4a-69fa-4a7a-a2d8-ab74724210db": [[-0.570642, 0.0, -0.751723], [0.570642, 0.5691149999999999, 0.749766]], "75026e8e-44de-495d-b111-7db007821b16": [[-0.8222889999999999, -0.000428389, -0.22657699999999997], [0.822445, 0.427271, 0.226473]], "f350c1ba-8040-4750-9e6e-f45cfbf916a4": [[-1.01277, 0.00122249, -0.97131], [1.01208, 0.645436, 0.971858]], "ace0eb31-1a94-4125-ad36-33e374ab62bd": [[-2.2725, -8.41944e-18, -0.2125], [2.2725, 2.8, 0.2125]], "aa4bbd58-d118-4e1c-b8b6-410b759beb86": [[-0.275486, 0.0, -0.286659], [0.275486, 0.8506, 0.286843]], "78563000-6c88-4b15-836a-117da26437a6": [[-0.223526, 0.0, -0.266104], [0.223555, 1.224615, 0.266104]], "86f06454-e6e1-47b8-bf77-c2bc3640f09a": [[-0.39008899999999996, 2.3e-05, -0.337196], [0.390071, 0.858643, 0.337198]], "f1133783-0aa5-454f-ab6a-9210880bea74": [[-0.866109, 4.7000000000000004e-05, -0.335687], [0.866073, 0.7134969999999999, 0.335883]], "4e527a02-c289-3a12-b4ae-308ed5dc150b": [[-33.8174, 0.0, -42.0077], [33.8174, 90.2389, 42.0077]], "59240966-d827-46e9-beee-a9d928f63569": [[-0.9, 7.39694e-08, -0.229022], [0.9, 0.75, 0.229022]], "105529c9-a81d-4050-a0f9-a7963bcd886f": [[-1.057956, 0.0, -1.142099], [1.057956, 1.021693, 1.142029]], "37ebcfd3-9804-439e-89f1-d62f2c4e1b1c": [[-0.502704, -9.68434e-15, -0.16279], [0.502704, 2.2, 0.163188]], "5206872c-1674-430c-8d34-e46d5843fe07": [[-0.579013, 0.0, -0.503874], [0.579013, 1.269612, 0.5038239999999999]], "ed4f7cb8-4b62-41a2-a39a-a72b813d5a7b": [[-0.471013, 0.0, -0.435249], [0.47037100000000004, 0.297577, 0.435998]], "56a87f3b-06a6-4315-afff-def1f708533a": [[-1.114508, 0.0012, -0.494458], [1.114586, 0.801601, 0.494544]], "4b0d7eb3-a00e-4211-bac0-a21513cc55c6": [[-1.4, -1.52469e-17, -0.25100100000000003], [1.4, 0.4, 0.251]], "ecd3141d-7753-4ecf-bc9d-590ba78cc465": [[-1.4379, 1.3113e-09, -1.09914], [1.4390299999999998, 0.80854, 1.09852]], "a0a475d9-474a-4733-aef8-3d592adf489b": [[-1.15458, -0.000261665, -1.09546], [1.15245, 1.8259100000000001, 1.0938299999999999]], "68ea46f4-8229-45c2-bdfe-3b42a1100f90": [[-0.942826, -0.00122374, -1.05901], [0.943291, 1.1966700000000001, 1.0575700000000001]], "772e338e-3907-48ff-b695-5d0aa0088c51": [[-0.36805, 0.0, -0.392087], [0.36812, 1.026951, 0.391372]], "5119667c-2467-47d8-b68d-6c66bfb90bc3": [[-0.345936, 0.0, -0.363396], [0.345936, 0.8925759999999999, 0.363373]], "64dd3025-263a-3535-b70d-fe0c8da3d37a": [[-45.675, 0.0, -45.675], [45.675, 81.9237, 45.675]], "65df3dbc-6e8e-46a7-8b77-b025798a85ef": [[-0.8877349999999999, 0.0, -0.569871], [0.8877349999999999, 0.418251, 0.569871]], "c3c80594-d649-44f4-b92c-ffff3096b493": [[-0.233378, 0.0, -0.267161], [0.233629, 0.8430620000000001, 0.267027]], "e26f097d-99ea-4200-93eb-3c3fe6ac4562": [[-0.503491, -1.76286e-05, -0.225499], [0.504157, 1.23925, 0.225486]], "d7089b16-f4e1-439d-94b8-2d23a1fe3ff1": [[-0.7689109999999999, 0.0, -0.252709], [0.7685299999999999, 0.6299819999999999, 0.252671]], "be19ca05-cffc-4619-b950-33bebb7b403d": [[-0.298581, -7.87514e-06, -0.267422], [0.298581, 0.5, 0.267422]], "3f821e1d-2ee9-4d60-85ba-65b6fc77da9c": [[-0.270067, -3.5677e-05, -0.19314399999999998], [0.270067, 0.7249909999999999, 0.19314399999999998]], "a0b67c64-15a4-4969-91a6-89e365d87d12": [[-0.726376, -1.72043e-17, -0.30784300000000003], [0.726376, 2.27825, 0.30784300000000003]], "f5c3d1ab-5434-4712-ae98-65ded6e5c166": [[-0.558123, 0.0, -0.479604], [0.558123, 0.932891, 0.479604]], "fc7315a5-d20f-45fe-8f8e-309f38ea44ac": [[-1.8049799999999998, -1.82477e-17, -0.305992], [1.8049799999999998, 2.42, 0.305992]], "8b089f0a-3600-4932-845c-74c8c680cf7f": [[-0.385614, -1.4543400000000002e-17, -0.385614], [0.385614, 0.36320099999999994, 0.385614]], "271380c0-29f8-4929-8732-4b70d33cbb02": [[-0.375, -2.86102e-09, -0.220638], [0.375, 0.453583, 0.22053799999999998]], "35aea6cd-36c8-4240-b8e9-33da974b70ce": [[-0.5271750000000001, -0.00042820900000000003, -0.52737], [0.527475, 1.12401, 0.52719]], "612309ac-d00e-4742-b5ec-4ce20977f507": [[-0.17215599999999998, 0.0, -0.17213599999999998], [0.17215599999999998, 0.610768, 0.17213599999999998]], "103e839a-537c-4ea0-aebf-8c1e79fd1349": [[-0.40392000000000006, 0.0, -0.459107], [0.40392000000000006, 0.755093, 0.459102]], "bd05d6c5-21d5-4d4e-b2d5-8ce1a51c3cfb": [[-0.711, -1.28784e-17, -0.23067900000000002], [0.711, 0.851, 0.231699]], "194aa7f6-0754-4fd6-ae65-a2a3ec0e27aa": [[-0.471764, 0.0, -0.409964], [0.471915, 1.30636, 0.409604]], "c2499372-7330-4c82-9bef-ee65d35dc906": [[-0.283698, -4.96032e-08, -0.283698], [0.283698, 0.190149, 0.283698]], "807b7caf-fcc9-46f4-98a4-3ee2a7ce87fa": [[-0.200049, -9.35694e-07, -0.198494], [0.20005099999999998, 0.507527, 0.198503]], "f00494e5-a9b6-4e74-936f-ea183df00996": [[-0.279701, -6.55684e-18, -0.107081], [0.279701, 0.42278, 0.107081]], "4f501ce5-28ab-4d40-9547-5be1311dc29f": [[-0.43764899999999995, -0.000232998, -0.41804], [0.43764899999999995, 0.8670650000000001, 0.41804]], "37d91629-46db-4979-8525-42d124133e39": [[-0.663051, 0.0006519999999999999, -0.16398], [0.663051, 0.333261, 0.164654]], "52f79bcc-87c4-43d1-a355-c252f59d1a36": [[-0.340477, 4.02548e-06, -0.40219499999999997], [0.34267200000000003, 0.7996909999999999, 0.40249899999999994]], "0962feeb-5685-49d2-8443-620974572733": [[-0.380602, 7.60234e-10, -0.120001], [0.380602, 1.40319, 0.12001099999999999]], "1f3392c9-be69-48f5-8f8e-c0af53ee7a9c": [[-0.8262959999999999, -6.14107e-17, -1.00291], [0.8262959999999999, 1.12048, 1.00291]], "1abf87db-9e18-3a7b-a4fe-c1325d269fd2": [[-0.22506, 0.003054, -0.300494], [0.236697, 0.862474, 0.2254]], "3b9b33a7-792e-4692-b7b9-c1b56a02e71d": [[-0.209756, 0.0, -0.209902], [0.209756, 0.485434, 0.209902]], "05593295-1c01-4c2b-9838-3db5b22451af": [[-0.508296, 0.0, -0.41903100000000004], [0.508296, 0.178792, 0.41903]], "b9da328c-9897-4abe-9aeb-ef188d76f007": [[-0.27913, 0.0, -0.27913], [0.278851, 1.2, 0.27913]], "4b134ef0-f2c8-48f8-8e06-3fe393ea249f": [[-1.64006, 1.90735e-09, -0.7952790000000001], [1.64029, 0.779042, 0.795081]], "81bfa586-bea2-40a7-9728-282e156d8d9a": [[-0.661456, 0.0, -0.45873600000000003], [0.661456, 0.440727, 0.45873600000000003]], "06dfd96e-44c4-402b-896a-c895cd537929": [[-0.751639, 0.0001, -1.095105], [0.751568, 1.061156, 1.094673]], "ccbf7902-effb-4d94-a3e3-b5d502f4acc6": [[-0.257885, -6.747080000000001e-18, -0.257885], [0.257885, 0.57614, 0.257885]], "201226d3-7b96-46ff-b4a3-9051f28f4817": [[-0.953485, -5.07991e-05, -1.16384], [0.953281, 1.03707, 1.1637300000000002]], "4229f29b-b36f-44e9-900d-15affc9b323c": [[-0.75728, 3.2e-05, -0.43251199999999995], [0.757279, 0.3765, 0.433558]], "de88dd8c-2b9b-4ee9-90ab-77aeb0d5b5ac": [[-0.486021, 8.20923e-06, -0.0755028], [0.486021, 0.965726, 0.07552679999999999]], "92dfeb3a-1e7a-4184-9a21-689d5fb81036": [[-0.368057, 4.07976e-05, -0.36405099999999996], [0.368217, 0.406827, 0.364038]], "05b20215-776e-320f-be17-798787b531a6": [[-0.40798900000000005, 0.00369, -0.376182], [0.41091700000000003, 0.6858660000000001, 0.375991]], "98b08568-12ed-4b14-b2d8-4722e4c341ce": [[-0.509672, 5.72205e-08, -0.214222], [0.509672, 2.1194100000000002, 0.214222]], "1fe4b495-b4f4-4db6-89b6-70ba85ac5fb9": [[-0.388241, 1e-06, -0.369343], [0.388241, 0.7169070000000001, 0.36938699999999997]], "fb17273a-ea90-4c7b-ba02-06dc63a95604": [[-0.23293, -3.33181e-05, -0.142701], [0.232931, 0.815372, 0.142178]], "1a06af05-9dec-4e14-b09e-3e9def0f4ad3": [[-1.172074, 0.000277, -0.7857850000000001], [1.172074, 0.682385, 0.7857850000000001]], "5c13170b-119a-4b1c-8b35-ff5a14a8403f": [[-1.52852, -0.00214259, -1.12379], [1.52705, 2.1145300000000002, 1.11987]], "2d5dc8c9-1e0c-4747-a3ce-d5c80bf12041": [[-0.38034, -5.208489999999999e-05, -0.40450600000000003], [0.38188, 0.772992, 0.406218]], "f43310eb-270b-49ec-aef9-11103921b224": [[-1.115141, 0.0, -1.0967019999999998], [1.11514, 2.261409, 1.096285]], "a38c236b-5487-40c7-aedf-477f996c87c4": [[-0.259341, 0.0, -0.25914000000000004], [0.259341, 0.24917, 0.25914000000000004]], "6b2d2463-e861-4e0c-af8f-7980092f38a4": [[-0.426835, -0.000103997, -0.470265], [0.426605, 0.973623, 0.47043]], "6321e604-9437-4090-ba2c-af5567201483": [[-1.002475, 6.6e-05, -1.0419450000000001], [1.001789, 0.970063, 1.041677]], "8a431cf4-0476-4a50-b847-8c59edf5f3bc": [[-0.149057, 0.0, -0.149057], [0.149057, 0.315575, 0.149057]], "e06e81e5-9229-4bba-9090-bee0ad85073d": [[-0.21882200000000002, -4.79126e-06, -0.23149999999999998], [0.21904800000000002, 0.8269620000000001, 0.231131]], "36704e45-f757-48db-9383-77c58d2a8e4e": [[-0.613278, 3.3e-05, -0.168494], [0.613029, 0.41470999999999997, 0.168675]], "247b6396-9e9e-44df-a9fa-ce1b16676a4f": [[-0.730521, 0.000332845, -0.963037], [0.7302, 1.0648900000000001, 0.963151]], "65220997-f0e3-431d-8544-e4c3d6cb64a9": [[-0.8981140000000001, 0.000222, -0.6801940000000001], [0.8981140000000001, 0.616545, 0.6801940000000001]], "75b5ee8a-f4fd-4d36-8c91-a0542bc7c9f6": [[-1.84195, -0.000819715, -0.8028879999999999], [1.84246, 0.8392879999999999, 0.803779]], "b954d8d8-33db-46b3-a218-bd1079f233a6": [[-0.260972, 2.2000000000000003e-05, -0.251552], [0.260972, 0.678851, 0.25153]], "1cd6e42d-5ab6-3b3a-b009-40e91404d44f": [[-0.9, 0.005714, -0.45], [0.9, 0.73, 0.45]], "0c8d40c7-e246-45c1-a492-1606d6b7014c": [[-1.51762, -0.000166515, -0.815533], [1.5172700000000001, 1.14634, 0.815257]], "093e84e2-746b-49a8-98c7-601e4e1ffe34": [[-0.221325, -1.2462299999999999e-17, -0.20173200000000002], [0.221324, 1.08538, 0.20173200000000002]], "18fa4d81-d200-492e-9e5d-f05f714a880b": [[-1.270886, -0.0, -0.299112], [1.270886, 0.8003560000000001, 0.299112]], "86bd42f4-36b4-4436-88dd-b9df588e786d": [[-1.02611, 3.82347e-17, -0.641911], [1.02599, 1.9877699999999998, 0.642025]], "c602569f-4db1-495a-bd2c-47dec23907b1": [[-1.037191, 0.0, -0.45329099999999994], [1.040441, 1.082727, 0.45325400000000005]], "6c0a0d04-4b54-4bc9-b710-0865550c4cb6": [[-0.7896139999999999, 2.8225800000000003e-08, -1.0061], [0.7896139999999999, 0.9873569999999999, 1.0061]], "3aea82ad-83ff-462d-b235-a9f2ddfdee72": [[-0.7069580000000001, -0.000592725, -0.42765000000000003], [0.706928, 0.816882, 0.427746]], "b73146ac-345e-40e7-a975-b90be799e224": [[-1.22814, -8.18114e-05, -0.412249], [1.22903, 0.869792, 0.412245]], "b9a31abf-f88f-4c5f-9f39-21b4039283de": [[-0.4, -1.7306700000000002e-07, -0.23065000000000002], [0.4, 0.44926, 0.230659]], "62abafd7-38cc-4105-a3be-f32cbe6a5788": [[-1.1401999999999999, -1.62702e-08, -1.29652], [1.14028, 1.23243, 1.2943500000000001]], "734b2469-ff27-4288-8bde-f9561bae1370": [[-0.639216, -1.5328600000000001e-07, -1.0168899999999998], [0.639216, 0.79322, 1.0168899999999998]], "3ce3cc7d-fadd-45e5-8312-0915a357103c": [[-0.28800000000000003, 3.07092e-08, -0.24], [0.28800000000000003, 0.503096, 0.24]], "745d57f8-2c5d-407a-b485-d054b9a543ad": [[-0.993783, 0.00018999999999999998, -0.670177], [0.993455, 0.706656, 0.669878]], "83b9d5bf-98ca-4cf9-b42e-59b8ffcbbd81": [[-0.8471460000000001, 0.0, -1.107905], [0.847145, 1.2617310000000002, 1.107906]], "fd501ee5-68f1-4f73-a3c5-675bcc9991f1": [[-0.882252, -1.3544700000000002e-17, -0.2075], [0.882252, 1.45, 0.2075]], "56408f83-c4d4-3108-b609-dbd022f84ace": [[-0.8506130000000001, 0.0, -0.409486], [0.8506130000000001, 0.8346250000000001, 0.409486]], "792c5fc4-ed5c-439b-a9c5-f116ab93ab09": [[-0.230666, 0.0, -0.251845], [0.230666, 1.002143, 0.251845]], "d358cff2-1039-4836-bb26-b74a51ad207a": [[-0.249924, 0.0, -0.247519], [0.249924, 0.7791049999999999, 0.247519]], "782fbbae-ce29-437f-8f98-f568a50772ba": [[-1.3047499999999999, -0.0013381, -0.454429], [1.30465, 0.870076, 0.4548]], "17c5fa6f-277a-4a2b-9160-7bae21de15bf": [[-0.625, 0.0, -0.19], [0.625, 2.4, 0.19]], "274bd1e2-020a-4f61-9d98-fe792f764ab8": [[-0.877822, -2.36578e-17, -0.416704], [0.876815, 0.8507859999999999, 0.417416]], "482d8cae-ecae-46fa-8a9d-4524734c233e": [[-0.8684350000000001, -2.67029e-08, -0.673866], [0.869839, 1.1307800000000001, 1.5968799999999999]], "b7dafd0a-f3bb-41c9-92b1-62925f0fb7b9": [[-0.660133, -3.08609e-17, -0.678997], [0.660133, 0.363, 0.678997]], "91aa1fe2-b1c7-4b34-bf47-72b8870a6459": [[-0.391834, 0.0, -0.185629], [0.391834, 1.128819, 0.185629]], "ed3f4f51-8748-4296-8f61-ef733510b31b": [[-0.420261, -0.000151196, -0.08901389999999999], [0.420225, 0.8785930000000001, 0.0889427]], "2924c470-d123-48de-bbc4-af3ec50872ff": [[-0.602324, -6.58617e-18, -0.147711], [0.60232, 0.24940400000000001, 0.14771900000000002]], "890523b7-ddb5-4c05-b82a-464403646e1c": [[-0.299433, 0.0, -0.20267700000000002], [0.299433, 1.522914, 0.20267700000000002]], "6bf4fdb4-8457-43d7-9a81-41b24675c22f": [[-0.783413, 3.34457e-09, -1.20001], [0.783413, 1.3156100000000002, 1.19994]], "af41d8eb-90f5-4218-ae73-a4475d63728f": [[-0.314, -2.01202e-17, -0.34197000000000005], [0.314, 0.741815, 0.34210799999999997]], "c94f2f76-de6c-450b-9d03-d0bf599876fb": [[-0.425575, 9.8e-05, -0.729737], [0.425575, 0.565327, 0.729772]], "21839bde-a699-4bc9-b8a0-a2f3b850c8ef": [[-0.919388, 0.0, -0.54], [0.919388, 0.8617579999999999, 0.54]], "55b3d721-c41b-405b-889a-8a8b16023230": [[-0.936963, 1.80021e-17, -0.303997], [0.936963, 2.66367, 0.303997]], "b143c4bc-2f4f-4729-97be-6d509734b09c": [[-0.0686452, -5.44912e-05, -0.0686452], [0.0686452, 1.08244, 0.0686452]], "dd49b740-7632-4928-adf1-3fd853decb30": [[-0.772859, 0.0, -0.328677], [0.77286, 0.745593, 0.328677]], "a6a1c4ec-a9e1-4135-bb78-8311278f3969": [[-0.2, -4.93479e-06, -0.012681500000000002], [0.2, 0.343851, 0.012683999999999999]], "c4f6373f-946f-4115-95d9-9d8f55f09e4e": [[-0.17511500000000002, 0.0, -0.17511500000000002], [0.174575, 0.691464, 0.17511500000000002]], "fd8faee8-5dd8-4a00-ac74-00e0d8c1cf1f": [[-0.250689, 0.0, -0.297794], [0.250689, 0.9233530000000001, 0.297579]], "ff576b2e-d6c6-4d28-b503-87108a652398": [[-0.413752, -8.61469e-06, -0.411078], [0.41384099999999996, 0.824816, 0.411618]], "aa4d4bfb-9577-423f-a643-828728a0d7f3": [[-0.34010399999999996, 6.31714e-05, -0.38318800000000003], [0.339715, 0.755866, 0.382472]], "4165ab32-4967-485a-b1aa-1c0a7994d5cd": [[-0.471149, -3.1782699999999996e-05, -0.426768], [0.47151899999999997, 0.7150669999999999, 0.426396]], "ad019f8c-2c85-48ae-90b8-4287ec72e9df": [[-0.854329, -7.89821e-06, -0.942221], [0.854761, 0.885468, 0.941942]], "09e9dd4c-e512-3477-8d7b-0729f4efb5f5": [[-1.067494, 0.0, -0.24], [1.073415, 0.93, 0.250608]], "2391032b-b1a8-4359-a9d9-b31ac4b12fe1": [[-0.199355, -9.59233e-17, -0.19895], [0.199355, 0.169589, 0.19895]], "c435cc5e-9755-41c9-85ab-e803e85d86d4": [[-0.590348, 0.000138, -0.59046], [0.59046, 0.351108, 0.59046]], "e0550007-70fe-44c1-8721-f14b11a14c23": [[-0.6645220000000001, -0.000142302, -0.541603], [0.6645220000000001, 1.03179, 0.541906]], "63e2c3db-648c-4fa6-9be8-5802ba48e145": [[-1.408945, 0.0, -0.525938], [1.408945, 0.860751, 0.525938]], "8a737f44-4f63-4fcb-ab50-ea429b04deae": [[-0.220459, 0.0, -0.236955], [0.220459, 0.7990179999999999, 0.236955]], "423dcbba-41b8-4532-8b07-40503215220b": [[-1.2975899999999998, 0.0, -0.49292], [1.2975899999999998, 0.873704, 0.49278500000000003]], "781e2d59-dc62-46d1-94a1-1aa8ba5b1311": [[-0.897213, 0.0, -0.46671300000000004], [0.897213, 1.4328809999999998, 0.46719299999999997]], "4953d51c-39a2-42a4-be96-5b0d8362aff0": [[-0.37620600000000004, 0.0, -0.33813000000000004], [0.37620600000000004, 0.853913, 0.33813000000000004]], "0f915db9-fdf2-4315-ac8d-a1f26f88799f": [[-0.301132, -0.000299963, -0.301132], [0.301132, 0.22650099999999998, 0.301132]], "a4876bad-812f-492c-9c0e-35293918aa31": [[-1.15, -0.0, -0.95], [1.15, 0.74546, 0.95]], "f4d86465-1f41-4562-9e3d-3d4e239a9d1e": [[-1.5193, -0.00031326399999999995, -0.7724880000000001], [1.5202799999999999, 0.8709739999999999, 0.7724129999999999]], "1a84ab0a-f432-3693-a887-1d590288a54e": [[-0.9751730000000001, 0.000114, -0.23905], [0.9751730000000001, 0.789165, 0.23905]], "a10991d3-264b-4b77-81d0-42b3059bf639": [[-1.40341, 1.0176999999999999e-07, -0.1804], [1.40341, 2.6006599999999995, 0.18060099999999998]], "e9c758c0-a9f2-4f0a-861d-287a6f34fdbd": [[-0.311162, 0.0, -0.288518], [0.31086400000000003, 0.702379, 0.288518]], "a97f9900-b489-498b-8973-cb1a69690d35": [[-0.144874, 1.7e-05, -0.146537], [0.144785, 0.589828, 0.14651999999999998]], "7b3b539e-2acb-4007-81e0-da88a7eaba78": [[-0.40870399999999996, -3.97874e-08, -0.442463], [0.40934, 0.827291, 0.44365099999999996]], "27a9c7b2-01fe-47cf-8208-09d38eb5e84b": [[-1.425, -9.82547e-18, -0.19392900000000002], [1.425, 2.38779, 0.194499]], "ec008c96-5096-4125-83cb-89c997576bf5": [[-1.11157, -0.000111788, -0.40916600000000003], [1.11201, 0.816029, 0.409285]], "b4578773-f0fd-4f0d-9964-acbef6aaf8c7": [[-0.36153799999999997, 9.103539999999999e-08, -0.36148600000000003], [0.36179, 1.13024, 0.36139499999999997]], "68cdef2f-2b73-4a17-af99-2e8ca53e65a2": [[-1.44679, -3.22068e-17, -0.545046], [1.44679, 0.7602030000000001, 0.545046]], "2201315e-a0ec-481e-8de0-20a0d75286db": [[-0.913125, 7.06047e-17, -1.1875], [0.913125, 0.941937, 1.1875]], "3f80a5f1-0c85-4b36-8ef5-0a020b6bd18c": [[-0.683809, 0.00023555, -0.24692499999999998], [0.683809, 1.00136, 0.24681999999999998]], "8506ba9c-acd3-3da5-be94-1eb701246c46": [[-0.24034199999999997, 6.3e-05, -0.265262], [0.23982299999999998, 0.830852, 0.268846]], "3d4d7bf4-50d8-4967-bfd0-a156b1dbb208": [[-0.22821100000000002, 0.0, -0.231917], [0.22821100000000002, 0.534751, 0.23197199999999998]], "8093b9f5-835f-42d8-80c3-43e402519a0a": [[-1.1436, -0.00100222, -0.611916], [1.1437, 0.860056, 0.611772]], "b8cb3d8e-7d0b-45a7-ae4b-57c20c87275d": [[-0.811499, -0.000760179, -0.225194], [0.811049, 0.55019, 0.225342]], "0a631571-4180-404b-9a26-24b37e7f1fed": [[-1.477165, -0.0, -0.475298], [1.476148, 0.935129, 0.476602]], "e9abb0c6-6908-4bf3-b43b-0c6d21259612": [[-1.26127, -3.37508e-17, -0.5228240000000001], [1.26129, 0.917889, 0.5238539999999999]], "42914a23-3866-4467-8c58-f66ae08c4de6": [[-0.774605, -3.49371e-10, -0.524077], [0.774605, 0.486514, 0.524077]], "10b38d44-c3ae-385d-800a-10d7fa215dac": [[-48.9061, -0.0031, -44.8501], [48.9061, 57.9397, 44.8501]], "e90d0cd7-80d8-4849-8869-6c4517edf193": [[-0.729991, -0.0006659729999999999, -0.21049700000000002], [0.729991, 0.7987430000000001, 0.21186699999999997]], "5df04d66-ff2d-4ae8-b087-a304a49576bb": [[-1.1978900000000001, -2.51521e-17, -0.43300400000000006], [1.19791, 0.7825660000000001, 0.43188299999999996]], "10f62e71-6e6c-4d9e-821e-c1837305f10f": [[-0.250071, 0.0, -0.25004000000000004], [0.25004000000000004, 0.568526, 0.25004000000000004]], "d52a9e3c-2456-4a3b-b383-aad130813332": [[-0.711006, -1.14441e-08, -0.204712], [0.711006, 0.8118519999999999, 0.204712]], "f9b23849-d9ee-435e-9668-676a5cc8e594": [[-0.5381009999999999, -0.0015697600000000001, -0.246387], [0.530515, 0.701384, 0.25356]], "8e2dc0e3-d513-4fc9-911c-dccbbe635b11": [[-1.4475, -1.8253199999999998e-17, -0.31773399999999996], [1.4475, 2.45, 0.318186]], "5ba9e800-ee53-4eff-8cc6-ba73b55e2cab": [[-1.05217, -5.39401e-07, -0.315651], [1.05217, 2.1341, 0.315651]], "5d410dcb-6a88-4ef9-a993-c1cff9f05db1": [[-0.900109, 0.0, -0.20000800000000002], [0.900109, 0.45010300000000003, 0.200007]], "cc4117b3-1387-4e20-8c61-d9d12ef36194": [[-0.310038, -0.00026984299999999997, -0.234019], [0.310039, 1.1054000000000002, 0.23397300000000001]], "d649c4db-c5c6-426c-bce5-320dab045e62": [[-0.5, -2.01345e-17, -0.5], [0.5, 0.420018, 0.5]], "cf9831ad-c48b-40bb-b33d-270de895b389": [[-0.548758, 0.0, -0.27377300000000004], [0.548918, 0.436929, 0.27366]], "15795b72-071c-4965-b374-8699477523b9": [[-0.834963, -0.00146155, -1.02595], [0.8359300000000001, 1.34966, 1.0275400000000001]], "66694225-b430-42f5-b977-aa94af9836ba": [[-1.03775, 6.03961e-17, -1.04844], [1.0394700000000001, 0.939112, 1.04702]], "ac063e05-e625-4ced-b04b-3e45b77c839c": [[-0.190946, -9.507800000000001e-18, -0.19094899999999998], [0.19095600000000001, 0.758134, 0.190966]], "803cd6af-d727-4a94-99d5-8b3310aaf579": [[-1.27816, -0.00143554, -0.5799179999999999], [1.27604, 0.932191, 0.580973]], "447091fc-d9b9-4d76-8586-e050501356ef": [[-0.349207, -1.1779500000000001e-08, -0.350008], [0.349207, 0.38722999999999996, 0.350008]], "40536da6-7369-3ce2-8742-2b86dd33090e": [[-0.306894, 0.000397, -0.394692], [0.306894, 0.8001999999999999, 0.394692]], "a520a8c8-1df1-459f-9927-eb47a454dd89": [[-0.39530099999999996, 0.0, -0.36125], [0.39530099999999996, 0.67845, 0.36125]], "9bbdeba4-2680-4135-a0f3-92874c8a60ce": [[-0.339726, -3.5870899999999996e-05, -0.33941000000000004], [0.339726, 0.0880325, 0.33941000000000004]], "f8741138-071d-4c3b-86b9-142fbc623f93": [[-0.07386619999999999, -0.000297867, -0.0739309], [0.0739177, 0.61, 0.0738642]], "7295403f-5ae8-4e04-b687-8e3779ac41b7": [[-0.311409, 0.0, -0.327355], [0.311409, 0.8383419999999999, 0.32756300000000005]], "da2f4cae-4c21-4671-aaaf-2eb1f5424f16": [[-0.8394039999999999, -0.00101078, -0.159568], [0.8395170000000001, 0.6918479999999999, 0.159253]], "7a6bb036-06d5-4f58-ae34-453640a0a0af": [[-0.35699800000000004, -0.000246562, -0.355303], [0.356982, 0.602274, 0.355302]], "5d2dcacc-9ec4-4375-89f6-09aea58bd68b": [[-0.276932, -5.87545e-06, -0.276932], [0.276932, 0.3895, 0.276932]], "b3097f98-d093-42fd-b7b0-12143f9f666f": [[-0.85, -1.52588e-08, -0.2], [0.85, 0.685465, 0.2]], "e922a734-7c1d-44fb-b47b-4fba8302aff9": [[-1.24314, -8.648600000000001e-08, -0.470661], [1.24313, 0.7730459999999999, 0.47145200000000004]], "85f87c09-9f44-4dc2-9157-3615ca5cece7": [[-0.6824479999999999, -2.28882e-08, -0.988382], [0.6824479999999999, 1.13348, 0.988456]], "53f66291-0eb9-42c5-a01b-bb08b2bc7e4a": [[-0.47564999999999996, -1.23817e-17, -0.23769600000000002], [0.47564999999999996, 1.64091, 0.23745000000000002]], "2090d236-7b72-4021-b93b-96e5a7af3862": [[-0.894131, 0.0, -0.19], [0.894131, 0.42078400000000005, 0.19]], "e319c3f4-fc83-4f7b-b9c4-5365c6193037": [[-0.656998, -8.19122e-07, -0.41355400000000003], [0.656998, 0.250076, 0.41355400000000003]], "fec8436d-cf62-4a7e-899b-3bea10deb5ec": [[-0.8696299999999999, -0.000179859, -0.408201], [0.867945, 0.855712, 0.40823099999999996]], "4cc3c6c1-5fd3-4d24-8630-1bd5ec4a10f9": [[-0.487484, 6.16822e-17, -1.05165], [0.487484, 0.983, 1.05165]], "5eda7ff3-b6bc-44a1-ac85-c9a9d35fce34": [[-0.41815800000000003, 0.0, -0.421686], [0.417992, 0.716155, 0.421718]], "20a277a2-ff08-4993-9863-9591854ffe12": [[-1.289315, 0.0, -0.698535], [1.290226, 0.938716, 0.697603]], "97dc7e5b-68bc-4e1f-ac9b-b5de5e69819d": [[-0.776328, -6.86373e-06, -0.18325500000000003], [0.7762350000000001, 1.3205, 0.182879]], "0b0946c0-3835-4207-978b-c5f93b8c6c71": [[-0.529115, 0.0, -0.253763], [0.529115, 0.431789, 0.253763]], "2c8bb91c-5462-4f1e-a086-96a427a745e6": [[-0.314097, 0.0, -0.288999], [0.314097, 0.5740460000000001, 0.288999]], "d82775c6-d7d9-41d6-b844-83c2a481ea4b": [[-1.01139, 1.52588e-08, -0.35613700000000004], [1.01139, 1.0618699999999999, 0.35607900000000003]], "0541491e-21a3-454c-8c78-acfafaffc6d5": [[-0.59856, -1.1776099999999998e-15, -0.9217489999999999], [0.59856, 0.952645, 0.9217489999999999]], "506cf979-ba31-4671-b8fd-9b9b1d50b319": [[-0.6914669999999999, 6.253970000000001e-17, -1.13324], [0.691815, 0.826435, 1.1326]], "8161a64e-d421-4cfa-8f17-e8b42c2969af": [[-0.7618659999999999, 0.0, -0.25135], [0.7618659999999999, 0.8856919999999999, 0.25135]], "4f4f8527-9b6f-498b-859e-0e2574ec536d": [[-1.27175, 0.0, -0.301658], [1.27175, 2.540876, 0.301658]], "d89054a0-5501-4470-87b8-85056ce6bb0d": [[-1.1599899999999999, 0.000284339, -0.426062], [1.15981, 0.7483029999999999, 0.42534]], "7c130177-89f3-4b09-8b80-694d9ef9f6c7": [[-1.3161699999999998, -0.00103607, -0.557524], [1.31609, 1.14408, 0.557985]], "261628f0-9c0b-4cb5-b07b-b7f633c08825": [[-0.28562, -1.52588e-08, -0.20952400000000002], [0.28562, 0.599728, 0.210089]], "f7e667ee-f042-4428-b29b-6a89d81a48d9": [[-0.247746, -0.000149139, -0.212714], [0.247647, 0.523378, 0.212819]], "4b743cc1-b131-4e4d-bab7-7b0cdaf6d8b4": [[-0.09308949999999999, 4.86628e-19, -0.0832577], [0.09308949999999999, 0.873792, 0.0832577]], "fe4b70bd-0f28-4d61-bd69-cc8f3dc3c3b6": [[-0.374706, 3.05175e-08, -0.376346], [0.374706, 0.628911, 0.376346]], "4ddf942a-a9db-4b0f-86f9-87f94881f88f": [[-0.25925899999999996, -4.88652e-05, -0.245883], [0.259431, 0.5594680000000001, 0.245688]], "0ac175bd-8a0f-4f81-87c8-aa2dc980bdb6": [[-0.30806, -3.42157e-06, -0.287315], [0.30809000000000003, 0.137652, 0.287315]], "7ed123e8-b232-4e10-8c0a-cdd67c8d47aa": [[-0.5675, -1.68984e-17, -0.332472], [0.5675, 2.10747, 0.332479]], "6bb7ac84-841f-4929-a7fc-bcd55bdcdfc4": [[-0.456, -1.2322600000000001e-17, -0.23075700000000002], [0.456, 2.2230000000000003, 0.230913]], "44f20bb8-a8bf-4d7c-bd18-19a5a906c9cf": [[-1.01987, -0.00035785699999999995, -0.288701], [1.01987, 1.54195, 0.290119]], "455dad1b-183e-4329-a743-e9fc81ebf6e4": [[-0.796528, 3.60183e-05, -1.04574], [0.796566, 0.7793399999999999, 1.04587]], "97b7ea2a-b96e-4568-982b-227233898e7a": [[-0.81471, -0.0005033139999999999, -0.404383], [0.814515, 0.367327, 0.40448799999999996]], "29b11ecf-e069-4f82-a09e-ffca1c9137b1": [[-0.57509, -9.684730000000001e-05, -0.172527], [0.57509, 1.30417, 0.172527]], "4fae225e-caed-4ddc-889a-e2788b22187c": [[-0.790071, 0.0, -0.201849], [0.790071, 0.550299, 0.201849]], "62108982-7bd2-4d96-9e1e-f1883cef0fa0": [[-1.149358, 0.000144, -0.44489199999999995], [1.149449, 0.945927, 0.44489199999999995]], "523d0df7-e1a7-3d3e-afad-7ebae91903b7": [[-49.7155, 0.0, -27.0276], [49.7155, 78.7274, 27.0276]], "2a602a2c-37b2-4e5d-bab5-394d706d06f3": [[-0.594367, -0.00162208, -0.5742280000000001], [0.593776, 0.802826, 0.5736910000000001]], "3b608f3a-6b8a-4f51-af1d-fd6db66cf4a3": [[-0.6500920000000001, 0.0, -0.20010899999999998], [0.6500920000000001, 0.8809619999999999, 0.20010899999999998]], "62eb1d41-b20e-4ea0-8d4a-10f9665c4a01": [[-0.228918, -8.65825e-06, -0.22861499999999998], [0.22905799999999998, 0.220667, 0.228513]], "f745c13f-eee3-494a-9206-a90cb530c76f": [[-1.111789, 0.0, -0.15], [1.111789, 2.43, 0.15]], "821cc811-9bbc-49cf-af6a-c1a595a116ee": [[-0.549202, 0.0, -0.20877800000000002], [0.549202, 0.27978400000000003, 0.20877800000000002]], "a4a3deb5-a21b-4c69-914b-3ed6e596aa4a": [[-0.43, -2.5474299999999998e-05, -0.20027999999999999], [0.42992199999999997, 1.29657, 0.20027999999999999]], "cbe4bcd1-70b0-4fa1-874b-6c1c7219f734": [[-0.711516, 0.0, -0.214785], [0.711516, 0.59939, 0.214786]], "e471da3d-4933-44e6-97e8-f5139ffdb6a2": [[-0.37918199999999996, 3.4e-05, -0.37288600000000005], [0.37886000000000003, 0.831383, 0.37288600000000005]], "4ff29d21-1fd1-4afc-bdc2-ff2bf3a8ed0d": [[-1.04115, -6.58865e-17, -1.15811], [1.03942, 1.20515, 1.1572]], "cee77dc8-ba79-49e3-adf8-0f70168dcead": [[-1.0780500000000002, -0.00023539999999999998, -0.458829], [1.07754, 0.7559239999999999, 0.458144]], "99768957-1d6b-4fe7-9ef2-65d8b6e7babd": [[-0.772879, 0.0, -0.30444], [0.772879, 0.799744, 0.30444]], "c0ef8486-2c81-460a-9d19-350e4cf78a47": [[-0.411912, 0.000126835, -0.8077070000000001], [0.411777, 0.377894, 0.807935]], "080b92e9-ec14-43ec-81d7-835f4b1ebb40": [[-0.875869, -0.00015991100000000002, -1.0073], [0.8768290000000001, 1.45774, 1.00801]], "6c217555-bab3-4a04-99e0-694e48ec7339": [[-1.0253700000000001, -6.49358e-17, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "12ef1b07-8691-4163-a2dc-411ffc0fe964": [[-0.29338000000000003, -0.000363985, -0.29296700000000003], [0.292966, 0.44826900000000003, 0.293034]], "3ee20c12-cd65-4d9e-8c47-b22c26ff7ff2": [[-0.976906, 0.0, -0.5644089999999999], [0.976906, 0.354902, 0.5644089999999999]], "51b655da-26ca-4489-9af3-53a006edd491": [[-1.082454, 0.0, -0.36544699999999997], [1.08295, 0.67836, 0.36563]], "62fd8089-01eb-430f-832e-f87d4d0f5aa7": [[-0.4, 1.82603e-18, -0.059821299999999994], [0.4, 0.045, 0.059821299999999994]], "1518ca4a-ebf0-4e7f-90bf-83a589bac550": [[-1.04359, 1.52588e-08, -0.202011], [1.04359, 0.589906, 0.202011]], "42be6988-1258-49f3-804a-43fb3bb66c6e": [[-1.11179, 0.0, -0.16639099999999998], [1.11179, 2.43, 0.16653099999999998]], "b89b2785-adc2-45a6-9989-7a7aa5342e65": [[-0.154489, 0.0, -0.196443], [0.154489, 0.44906799999999997, 0.196443]], "9c50b151-ec2c-47d2-9e09-a69b2fe768da": [[-0.17288900000000001, 0.0, -0.17288900000000001], [0.17288900000000001, 0.433266, 0.17288900000000001]], "77d06c4e-a411-46c4-9cc5-fd6c2742a618": [[-0.270794, 0.0, -0.270794], [0.270794, 0.55, 0.270794]], "5aef28fb-0071-4c76-aee9-db196fd2bd7b": [[-0.41674100000000003, -6.55457e-05, -0.37774500000000005], [0.418468, 0.855393, 0.37748]], "dbb2c59f-f13f-4579-9b81-28df2e11a0da": [[-0.373284, 5e-06, -0.473406], [0.373325, 0.32218800000000003, 0.473396]], "0f5d0383-79b1-488b-8a9a-520e50271e7d": [[-0.243557, 0.0, -0.233275], [0.243557, 0.422264, 0.233275]], "ccb08979-0219-49fc-9b4c-8cb4f5770647": [[-0.6251720000000001, 6.10352e-08, -0.24087499999999998], [0.625182, 1.71992, 0.24074500000000001]], "935df7d7-b1a5-44b1-8eee-7868db9e95f8": [[-0.28, 0.0, -0.205], [0.28, 0.71, 0.205]], "63952377-0848-4a26-ae70-a4d01f259ac4": [[-1.02354, 1.07059e-17, -0.192174], [1.02354, 0.8280679999999999, 0.192561]], "0f0f8391-056f-439a-8c68-d1c132cd672b": [[-0.203469, -0.000244497, -0.203461], [0.203429, 1.21771, 0.20346499999999998]], "9009bf15-6028-49e1-a037-cb1b2f20e7bd": [[-0.823831, 2.3841900000000002e-09, -0.218168], [0.823831, 0.648328, 0.218616]], "1cfc6e9c-3c3d-48d4-81b6-f1981007d2ae": [[-1.06004, 7.36062e-08, -0.509769], [1.0617, 0.939864, 0.512478]], "7bc730a8-da71-4278-9eaf-f567a982b5e7": [[-0.26726099999999997, 4.4000000000000006e-05, -0.270671], [0.26756, 0.883495, 0.26966]], "d1bb19aa-7dd0-49f7-9560-30fa738bc889": [[-0.95, -0.000179839, -0.858272], [0.95, 1.68102, 0.85721]], "3328d309-b3d5-301f-8537-f52409f35906": [[-27.7827, 0.0, -27.9401], [27.7827, 87.6048, 31.2247]], "d764f12f-755c-40e2-b7bc-4fc2e9e3f9fc": [[-1.132368, -0.0, -0.48979999999999996], [1.132368, 0.864138, 0.49789700000000003]], "13d588a4-aed1-4453-92f0-aa0c8bc2d11b": [[-1.08887, -4.76837e-09, -0.38096800000000003], [1.08887, 0.639602, 0.380021]], "0ff29889-665c-4b9f-93a3-3b1a9ad0c688": [[-1.204679, 0.0, -1.047741], [1.20468, 1.137804, 1.047741]], "a9be5d5c-61d1-4a86-a95f-4a6074ccb6a8": [[-1.8195599999999998, -5.67443e-08, -0.150001], [1.8195599999999998, 2.7, 0.150001]], "de5d2f45-3cb5-4835-92e1-73e171558979": [[-0.318332, 0.0, -0.221533], [0.318332, 0.553238, 0.221533]], "24f8d680-1061-401b-ab15-2321501031e1": [[-1.775, 0.0, -0.3], [1.775, 2.5, 0.3]], "8bba3d84-9d53-4dc6-ad3e-dfac6907b177": [[-0.418228, 0.0, -0.41820300000000005], [0.418228, 0.8406220000000001, 0.41820300000000005]], "037c739f-4653-41d5-936e-d1d7102bccb0": [[-0.414793, 0.0, -0.446964], [0.415152, 0.785119, 0.44670299999999996]], "224835f3-556e-46f7-94b0-5cecec1cedc1": [[-1.40149, 0.00031947999999999997, -1.40514], [1.3988399999999999, 1.1263800000000002, 1.40501]], "5a798fbf-b342-41cd-b88d-a073cd52f3d8": [[-0.928141, -1.3539999999999999e-17, -0.228875], [0.928141, 0.53959, 0.228875]], "47f34fa6-cd94-4fac-8a76-7ed660e7718b": [[-0.175784, -0.000847226, -0.19259199999999999], [0.175736, 1.04736, 0.19259199999999999]], "428836db-fb61-4207-9af8-468b1a286029": [[-0.474304, -7.14202e-06, -0.474304], [0.474304, 1.2365300000000001, 0.474304]], "ce9d47e8-cc34-4642-9fa9-61569b059179": [[-0.241024, 0.0, -0.241339], [0.241339, 0.457853, 0.241339]], "5385c838-e127-4676-9a90-1563226c4881": [[-0.34639000000000003, 1.46893e-05, -0.34320700000000004], [0.346568, 0.619071, 0.343311]], "073e761b-b9c4-4e9b-af2c-4e65f7f1a9bf": [[-1.04557, 0.0004887509999999999, -1.02592], [1.04562, 0.89777, 1.0259099999999999]], "5fd84e6a-b92d-4373-92f6-ba7d7aa562a6": [[-1.7294, 0.0, -1.199857], [1.730787, 0.918218, 1.199857]], "8c94a5c4-b94c-42f9-a212-ef4303b2313a": [[-0.27192900000000003, -7.91023e-10, -0.182905], [0.271988, 0.69151, 0.182874]], "02ab9d20-ee01-40b3-b3bc-9bdcc066d382": [[-0.566913, 0.0, -0.5661849999999999], [0.566913, 0.582373, 0.5661849999999999]], "55e2f7b1-ed80-4c8f-8b96-7053f214df4c": [[-0.830054, -0.000513884, -0.39474], [0.8294429999999999, 1.00739, 0.395434]], "74c2352a-23e4-4789-b060-7d07a0446007": [[-0.215014, -0.0, -0.216116], [0.215043, 0.873831, 0.216145]], "2667043c-e39c-457a-9c02-e7edb058028f": [[-1.12802, -0.000374658, -0.372148], [1.12896, 0.781929, 0.372592]], "ad37faea-9ed2-412f-a856-e4a4584c5e24": [[-0.401184, -3.66322e-05, -0.24377500000000002], [0.401184, 0.7521559999999999, 0.24379699999999999]], "b8b746a5-bf6e-4679-a702-e783140cc4d8": [[-1.043067, 0.0, -0.506203], [1.043273, 0.960489, 0.5062019999999999]], "0ed083fa-fab0-494e-a36c-8ff630b676c7": [[-0.22500299999999998, -7.07454e-08, -0.200003], [0.225001, 0.96, 0.20000199999999999]], "af132cf6-232e-4772-96ac-a75a18a21382": [[-0.6662560000000001, 0.0, -0.35138800000000003], [0.6662560000000001, 0.7237, 0.351389]], "8b8e6917-51bf-43f5-a2ed-44822c0ad710": [[-0.9, -2.7551e-17, -0.5], [0.9, 0.770146, 0.5]], "e6a4a044-6ee4-4901-89fe-5ab8b4bc8af9": [[-0.8786539999999999, -0.00036267199999999997, -0.8786539999999999], [0.8786539999999999, 1.0252299999999999, 0.8786539999999999]], "e6cea7d6-0701-417d-b52d-9759ec66e1bd": [[-0.326558, 0.0, -0.387619], [0.326637, 0.963257, 0.387619]], "edafe9da-56cc-400b-a101-f5bafbe4cea5": [[-0.298636, -5.18963e-05, -0.301319], [0.298796, 0.353725, 0.301471]], "ac2e38b8-fe04-4a6e-a89d-e5948e210163": [[-0.288435, 3.11778e-07, -0.258498], [0.288437, 0.7470260000000001, 0.258489]], "a91e11fe-c219-47c9-a0a1-5fa46b9a1af4": [[-0.490008, 1.88965e-08, -0.241014], [0.49000900000000003, 1.2109999999999999, 0.241014]], "608bf1ea-8d72-3421-a837-0c10b9194ac4": [[-1.27, 0.0, -0.635], [1.27, 0.762111, 0.635]], "470dba8a-9f91-4f6e-bf27-6aaed43846db": [[-0.569556, 0.0, -0.152874], [0.569556, 0.6760240000000001, 0.152874]], "82044272-791c-47e8-aa8a-c91545aa0c9f": [[-0.683084, -1.52588e-08, -0.999859], [0.683058, 0.964944, 0.999859]], "aa3bc9f7-0f39-4a9f-a4d1-c255da20dd89": [[-0.376409, 0.0, -0.439422], [0.376726, 0.8115349999999999, 0.439504]], "c8d25dfa-8d2e-453a-9df6-3f94cfa6493b": [[-0.301004, 9.804759999999999e-05, -0.301004], [0.301004, 0.7588469999999999, 0.301004]], "540f6360-bd68-4810-8be0-80b78cda2845": [[-0.259857, 0.000117725, -0.260013], [0.259723, 0.45094900000000004, 0.259807]], "c67f852c-de9c-4699-89f4-a6d4284c5f9d": [[-1.029808, 0.0, -0.208559], [1.029808, 0.402171, 0.208559]], "e0aadec1-12e3-484b-8f81-d3cefef4e2c2": [[-0.362657, 0.0, -0.36802799999999997], [0.362657, 0.7814329999999999, 0.36802500000000005]], "373f425d-8082-4cfb-b711-b1407a4ac0b7": [[-0.251, 1.1920899999999999e-10, -0.251], [0.251, 0.1321, 0.251]], "6b9df021-6ea5-439b-897d-c672b0727ecb": [[-1.0106600000000001, -1.2671e-08, -0.427575], [1.01071, 0.861654, 0.42764899999999995]], "6ba321a3-429a-4e70-9926-0a3c57d3d817": [[-0.208552, 0.0, -0.272209], [0.208534, 0.8181539999999999, 0.272211]], "53a6282c-e891-4b61-8892-8a821385facf": [[-0.41997500000000004, -1.46684e-17, -0.263199], [0.41997500000000004, 1.21709, 0.263199]], "6ffa21e8-16e0-4fe9-8606-dfa097353763": [[-1.12027, -6.94251e-09, -0.347506], [1.12027, 2.19068, 0.347506]], "50823ece-f1e0-4a8e-b7d6-312953939076": [[-0.50006, 5.25586e-05, -0.262561], [0.500029, 0.949939, 0.262588]], "0050f47f-0d3e-46c7-8a0d-47a16b524e96": [[-1.24996, -7.34401e-05, -0.49997100000000005], [1.24994, 0.761852, 0.500008]], "ff2077cd-3241-445a-b310-19cbdee0f66a": [[-0.91, -5.8501900000000005e-09, -0.21], [0.91, 0.451, 0.21]], "792e7db4-96c3-46a6-adb8-27fd40036740": [[-0.9951779999999999, -0.000139828, -1.0587], [0.9956659999999999, 0.871156, 1.0587]], "04ba615e-ee8d-49f2-96f0-52a16f8993ca": [[-1.002357, 0.0, -1.195925], [1.001872, 1.283236, 1.195946]], "07c12b12-11ec-4038-89e2-760308edcd1f": [[-0.221478, -5.44453e-16, -0.222137], [0.22142299999999998, 0.405154, 0.22239699999999998]], "4675ffbf-5c9c-4458-8ea7-a715fdf642b7": [[-0.885201, 6.01035e-17, -1.02647], [0.885201, 1.56774, 1.02647]], "838c3a56-c2b0-42dc-a4ec-6b88e9cc24d5": [[-0.797333, 0.0, -0.391704], [0.797333, 0.808604, 0.391704]], "6171046c-0df0-4bea-91fa-8b65612aaabe": [[-0.636926, -6.9711e-08, -0.199206], [0.636926, 0.9483509999999999, 0.199206]], "964e6431-bec6-469f-9485-e7a6777580e0": [[-0.537938, -0.000123649, -0.33876199999999995], [0.537934, 0.244262, 0.338778]], "5ff93c1a-11b7-4f33-a258-411ecbeed1d0": [[-0.8, -2.95491e-08, -0.18], [0.8, 0.40936999999999996, 0.18]], "26df8f51-1552-438d-8da7-a1213f6640b2": [[-0.313341, 0.0, -0.23509], [0.313341, 0.593548, 0.23509]], "491e56b4-94d5-451b-b70e-a491bfdb51fe": [[-0.394232, -5.8783000000000005e-18, -0.1], [0.394232, 0.65415, 0.1]], "1809091d-f0e6-420d-bf25-7a55b5c4e105": [[-0.069487, 0.0, -0.07040199999999999], [0.069487, 1.304906, 0.07040199999999999]], "00a91a81-fc73-4625-8298-06ecd55b6aaa": [[-0.42869500000000005, 7.3e-05, -0.453494], [0.428467, 0.927425, 0.453377]], "688881f2-459e-4802-b1a0-f6a517b25edb": [[-0.222187, -1.31983e-06, -0.176185], [0.222187, 0.43566000000000005, 0.17638600000000001]], "c390f121-819e-4405-896a-1e60a357edcb": [[-1.112578, 0.0, -0.25329599999999997], [1.11257, 0.9888039999999999, 0.255054]], "e0088830-bce0-42c5-9051-5fcd4ec8f2a8": [[-0.8311069999999999, 0.0, -0.601049], [0.831353, 0.5014569999999999, 0.600846]], "fd169514-203e-4a59-b4d0-4ebf8b4aa7b0": [[-1.5388399999999998, -1.8444e-17, -0.512412], [1.53882, 0.9294150000000001, 0.51414]], "65fc28ea-ee35-4773-9439-21f9497424c3": [[-1.43861, -6.75856e-08, -0.799443], [1.43812, 0.9812829999999999, 0.798528]], "848132bc-fcaf-4770-98f0-77c622a9704a": [[-0.449382, -2.0148699999999998e-17, -0.44940800000000003], [0.44912199999999997, 0.521401, 0.44951500000000005]], "07c19a12-0a59-4dfd-aece-57d19108b792": [[-0.268125, 0.0, -0.268117], [0.268149, 0.57858, 0.268117]], "781acb2f-94f7-413e-83e2-6c18382533e1": [[-0.24075, 0.0, -0.261878], [0.24079599999999998, 0.8167700000000001, 0.26201]], "12123d1b-b5d0-4448-a61b-92ead240a229": [[-0.275661, 3.05176e-08, -0.310037], [0.27553, 0.665445, 0.31071000000000004]], "da234115-b5ab-4c7b-9485-41a6fb7ed4e0": [[-0.208451, -1.43414e-05, -0.23846900000000001], [0.208451, 0.781281, 0.238481]], "8e8ffa10-6b88-4633-8bc3-77cf34979877": [[-1.50136, -0.000490677, -0.267451], [1.50136, 0.8275060000000001, 0.267743]], "75abc26b-5348-42f1-ae37-6dc6b8ab3377": [[-2.09396, -2.3841900000000002e-09, -0.9165779999999999], [2.09502, 0.877913, 0.917026]], "3ed85212-0160-4201-ba07-ac76a61a575c": [[-0.34875500000000004, 1e-06, -0.430359], [0.34978299999999996, 0.794524, 0.429346]], "f701adaf-6e1a-494a-8a6a-4010c02f3a2e": [[-0.533976, -0.000145047, -0.059862], [0.534349, 0.9856130000000001, 0.0598584]], "664996a4-155e-4096-a7d7-cf6650f02833": [[-0.867371, 0.0, -0.5197959999999999], [0.867131, 0.7602509999999999, 0.519809]], "f574b3c9-6169-42a0-8c79-39c0f33c4018": [[-0.148962, -9.45134e-06, -0.148669], [0.148962, 0.655868, 0.148669]], "edf114fc-9811-45ff-acd1-8a7fa7b6b9cb": [[-0.261327, -0.000147854, -0.261327], [0.261327, 1.25983, 0.261327]], "974cff78-8715-49a2-a726-f4ace9abdfa3": [[-0.770532, -3.42852e-17, -0.55992], [0.770532, 0.47259300000000004, 0.55992]], "79e00af8-d9ce-3612-9019-e923a9adb9c2": [[-0.261331, -0.0016589999999999999, -0.260766], [0.26137699999999997, 0.565086, 0.26038]], "6bfd8a50-5063-4b1f-bce8-63fa33ddee35": [[-0.755123, 0.0, -0.571179], [0.755123, 0.330821, 0.571179]], "c1afdceb-913a-40b1-9e43-c84b08c12d0c": [[-0.310608, 0.0, -0.238794], [0.31055499999999997, 0.75291, 0.238794]], "153adf3f-0fb3-4077-ba95-df83304a612a": [[-0.463554, -2.69551e-05, -0.525811], [0.463547, 0.8043689999999999, 0.525068]], "2752265b-7c05-4e4a-af81-0501f729e01e": [[-0.275, 0.0, -0.29249400000000003], [0.275, 0.55, 0.29249400000000003]], "4d7483cb-2cbf-4859-9614-a13375954f48": [[-0.937013, 0.0, -0.560447], [0.9374850000000001, 0.827896, 0.560563]], "250acddd-7d4d-4f22-8fb6-603ac07c8c39": [[-1.14, -1.40253e-10, -0.250001], [1.14, 0.722, 0.250001]], "efb36682-8f35-43fb-a3fd-a0077e97830e": [[-0.48286700000000005, 0.000119442, -0.44644399999999995], [0.483057, 0.9148999999999999, 0.446687]], "2d35e882-8f86-375b-82f0-c9af2be7737a": [[-0.347633, 0.000712, -0.43097499999999994], [0.347149, 0.671695, 0.43097499999999994]], "7a4091f8-71ff-4897-a703-a57af1d1f318": [[-0.419491, -3.80361e-08, -0.225502], [0.419491, 2.03493, 0.225501]], "64310e42-7094-440e-abe7-caaff3a0c1e8": [[-0.4, 0.0, -0.4], [0.4, 0.35, 0.4]], "5980c1d7-9167-4862-b1c6-29bb00447576": [[-0.699505, -2.4522600000000002e-17, -0.6994159999999999], [0.699452, 0.718242, 0.699466]], "800b368e-4b84-4b28-94ce-b831dfece51b": [[-0.9433410000000001, 6.48006e-17, -1.07313], [0.943081, 1.19681, 1.07585]], "4092c1d2-0789-45ee-bb72-207f617b5fa9": [[-0.631804, -1.3445900000000001e-05, -0.214196], [0.631804, 1.0546, 0.214105]], "415ece98-abd5-3a67-9157-c40338de92ee": [[-40.0, -0.0192, -40.0], [40.0, 82.3195, 40.0]], "ee10ac88-e99c-41bd-8579-ee0626924007": [[-0.833235, -1.41481e-17, -0.282845], [0.833235, 2.11112, 0.282845]], "2a4cdefa-33ee-41b9-887d-926fe31988fa": [[-0.47416200000000003, -6.84037e-18, -0.11220599999999999], [0.47416200000000003, 0.6981449999999999, 0.11220599999999999]], "83c55c72-174e-481e-bf89-d5497477ec18": [[-0.846341, 0.0, -1.137821], [0.846341, 0.92039, 1.131524]], "ccb4b5a7-2e59-4e3f-a5be-8731ed2c9b98": [[-0.427423, -1.52588e-08, -0.427423], [0.427423, 1.14592, 0.427423]], "48269298-e819-4a68-87e8-1594f98de533": [[-0.349988, -0.0015524299999999998, -0.34807099999999996], [0.349988, 0.26063, 0.34807099999999996]], "820c3394-9ee3-41b1-9a0d-dc893d447c78": [[-0.8314879999999999, 0.0, -0.510641], [0.8314879999999999, 0.392201, 0.510641]], "3da90446-a1e7-4f5c-b4cf-372fea72e9bd": [[-1.188511, 0.002893, -1.482774], [1.193265, 1.264111, 1.4831549999999998]], "d4a77898-866c-47a8-ab0d-d5b6c3536d6b": [[-0.294998, -7.62939e-09, -0.224497], [0.294998, 0.465993, 0.224497]], "e64a66ea-7f81-421c-b903-3802e0b2bcf7": [[-0.21520499999999998, 0.0, -0.21520499999999998], [0.21520499999999998, 0.551798, 0.21520499999999998]], "a779b65c-2f81-4532-bfe9-cee2c56eaac6": [[-0.22355699999999998, 0.0, -0.211371], [0.22355699999999998, 0.8853270000000001, 0.211371]], "59d0e33d-7c55-4612-81b1-251a71018dad": [[-0.5767880000000001, -0.0008909209999999999, -0.5200589999999999], [0.576321, 0.9169280000000001, 0.520342]], "15560c80-c144-49be-82f8-85bb07ffec5c": [[-0.726432, -7.62939e-09, -0.267132], [0.726432, 0.991223, 0.267132]], "4bcde604-ea9a-4beb-8fa0-8313e91e4d1b": [[-0.719435, -0.000168173, -0.291589], [0.719435, 0.94876, 0.29162099999999996]], "72c699a6-53c6-4b0d-b430-e14f2e15ff91": [[-1.274474, 0.00048300000000000003, -1.234033], [1.274228, 1.425068, 1.2339740000000001]], "d3b90781-9764-4b5f-b70d-1a82e9fb365e": [[-0.281644, 0.0, -0.281644], [0.281644, 2.752234, 0.277842]], "4ab299d8-9aba-3c95-94fb-be22b71a8161": [[-1.3394659999999998, 0.0, -0.541511], [1.3394659999999998, 0.77179, 0.541511]], "52be025b-2d5d-474b-9fb5-597b2acf3ca9": [[-0.35432, 0.0, -0.401997], [0.354315, 0.7461679999999999, 0.401997]], "1e64fb2e-8995-45a3-b69f-d55d53ae8f38": [[-0.8055549999999999, -9.91815e-05, -0.967608], [0.8042279999999999, 1.00397, 0.967052]], "d5e7e555-b89f-4ada-b721-c015753a94d7": [[-0.40995, 0.0, -0.40995], [0.40995, 0.35408700000000004, 0.40995]], "8eaddda9-b186-4f68-8655-bb7a6e152a9c": [[-0.609792, 0.0, -0.609792], [0.609792, 0.7226699999999999, 0.609792]], "81e08055-04c3-40f2-b0f6-611b637b55de": [[-0.9000400000000001, -4.781359999999999e-13, -0.500001], [0.9000400000000001, 0.75, 0.500001]], "47212f24-4bce-47d2-a2fe-ab3e6c9158b0": [[-0.7808750000000001, 1.03975e-07, -0.427864], [0.78086, 0.6017779999999999, 0.427878]], "b845987c-209a-450a-b95c-4fd1e5b9c7de": [[-0.68, 0.0, -0.53], [0.68, 0.8222830000000001, 0.53]], "a9c33714-e2b7-4450-82d3-058505058706": [[-0.695956, -0.0, -0.409779], [0.695956, 0.960668, 0.409779]], "d59b107b-663c-4b56-8dd2-f26493d8abfd": [[-0.187374, -1.85967e-08, -0.187374], [0.187374, 1.65823, 0.18736799999999998]], "66c1ca6a-a090-47fe-a078-e298bf130348": [[-1.27551, -0.000278862, -0.527329], [1.2754699999999999, 0.909767, 0.528526]], "5b93fca9-e11d-45e0-af11-e6b884f7fd3c": [[-0.820128, 1.52588e-08, -0.947513], [0.820371, 1.10742, 0.950081]], "49103a22-7e99-475e-8e8b-53bbd180f437": [[-0.272939, 5.999999999999999e-06, -0.26045], [0.272957, 0.860994, 0.260443]], "af909f60-fbc5-4722-b5fa-68b4456d170d": [[-0.415454, 5.4000000000000005e-05, -0.379264], [0.415461, 0.738091, 0.379484]], "cd1b300a-06c1-442e-a2a4-530eb5f9aa60": [[-0.19686199999999998, 0.000102982, -0.196885], [0.19686199999999998, 1.84375, 0.196885]], "dd252f15-42af-427b-8acf-04e3e58442ef": [[-0.9037649999999999, 0.0, -0.31721499999999997], [0.9037649999999999, 0.576928, 0.31721499999999997]], "0df6d945-8e0d-3303-ba03-951f01e580bc": [[-0.283717, 3.9e-05, -0.36038], [0.283717, 0.682077, 0.36038]], "51ee76e1-6037-4535-a8b9-9d989882aab8": [[-1.02, -2.8768e-17, -0.475], [1.02, 0.758327, 0.475]], "dd972d97-3568-4b33-a716-f4bc753b2f70": [[-0.668155, 0.0, -0.668486], [0.666289, 0.511234, 0.668486]], "0f409e36-6119-482d-a8f9-558bc5cadce5": [[-0.717851, 0.0, -0.31928], [0.717851, 0.517727, 0.31928]], "6f083a06-9651-4353-a72a-690b26356964": [[-0.42777099999999996, 2.09351e-05, -0.302894], [0.42777099999999996, 1.26478, 0.304664]], "0d9d29e3-9033-47f3-8b81-a37c278e6ac6": [[-0.424633, -0.00043646799999999997, -0.100569], [0.424602, 1.00922, 0.100578]], "4e90c984-635f-4e05-9695-cacae33724b9": [[-0.6779510000000001, -2.90035e-17, -0.474777], [0.6779510000000001, 0.365933, 0.474777]], "5b3eb52a-e3ed-4f13-bcb7-2564bf39d34b": [[-0.6, 0.0, -0.6], [0.6, 0.738889, 0.6]], "f32d99cd-42c0-48f2-a484-686d093bb466": [[-0.249925, 0.0, -0.247519], [0.249925, 0.7791049999999999, 0.247519]], "0058c439-768f-4553-9990-557954f0e4c3": [[-0.601831, 0.0, -0.59951], [0.601831, 0.47000100000000006, 0.59951]], "fa892aee-16e1-4410-b8e1-1196e89e4455": [[-0.890244, 0.0, -0.604069], [0.890244, 0.793874, 0.604069]], "03a33ab0-188b-47b6-8a4d-44e428670846": [[-1.411712, 0.0, -0.50205], [1.411712, 0.932068, 0.5019279999999999]], "083fa19d-86d6-43de-b026-515f141b88a8": [[-0.601789, -2.51971e-17, -0.4125], [0.601789, 0.391846, 0.4125]], "ccfcf103-9409-47c7-9b4d-e5cfc6a6d36a": [[-0.44752699999999995, 1.8e-05, -0.41840200000000005], [0.447194, 0.8400310000000001, 0.418392]], "3fac47c3-18a1-46c7-aaf1-d6d1af0ae715": [[-0.650076, -3.48927e-08, -0.200949], [0.651583, 0.9959269999999999, 0.20362]], "639d65ed-a275-4f06-94e0-ebaaa3bd5d86": [[-1.15515, 4.29077e-05, -1.16906], [1.1553499999999999, 1.4325, 1.169]], "6e01d4b2-c436-4375-80c9-c6515b778fc1": [[-1.32819, -0.000332322, -1.3532300000000002], [1.32725, 0.925037, 1.35321]], "e8c3140c-053d-4b0e-969b-64c149d9720e": [[-0.285257, -6.97443e-18, -0.212208], [0.285258, 1.0870600000000001, 0.21221399999999999]], "111de8a4-5f31-4b68-87d5-28e4e8879648": [[-1.11577, -6.53562e-17, -1.06961], [1.11577, 0.926357, 1.06935]], "7007099e-4dff-4dda-8aaf-23139d3c2a32": [[-0.290588, -1.8183100000000002e-05, -0.335128], [0.290806, 0.716652, 0.33523600000000003]], "33bd5381-f53d-4395-9620-6b6ba083cb0c": [[-0.562696, -1.68754e-17, -0.25473], [0.5626979999999999, 0.7564310000000001, 0.25473]], "be1eeab9-bf0f-44dc-af86-03f674fa9bce": [[-0.374957, 3.38722e-08, -0.343119], [0.374841, 0.6882769999999999, 0.343102]], "80899d47-b544-4ee1-a9ca-b037e46ac829": [[-0.17606100000000002, 8.46479e-05, -0.17658300000000002], [0.176065, 0.30547, 0.17658300000000002]], "4382d39b-30a7-49b9-addc-ffa64f93e02b": [[-0.818237, 5.1747499999999997e-17, -0.8817400000000001], [0.818237, 1.15323, 0.881689]], "21b7c9d6-c768-465f-a3f9-900f06d5fbc4": [[-0.9701460000000001, -1.29478e-05, -1.05301], [0.971558, 1.00299, 1.05066]], "ff08c008-5931-4268-82cd-e91b95c53bb4": [[-0.47647, 0.0, -0.528532], [0.47638199999999997, 0.915705, 0.528532]], "0ba48071-5092-4c99-a43a-cfd7f607ddad": [[-1.314375, 1.7e-05, -0.52293], [1.3143479999999998, 1.001851, 0.522891]], "d1abbc13-d45b-4ac5-b4c5-7945871b1021": [[-0.27264700000000003, -0.00029449099999999997, -0.272219], [0.27200399999999997, 0.273853, 0.271503]], "a0254598-4f8d-46be-a94e-bfd2f2e85114": [[-1.2604300000000002, -1.63833e-05, -0.18], [1.2604300000000002, 1.85831, 0.18]], "5e093f91-25c1-3185-afc2-f63093a88948": [[-40.0, -0.0192, -40.0], [40.0, 82.3195, 40.0]], "3fa94918-af18-4916-98ef-5df6ed673db5": [[-0.494903, -0.000483307, -0.494903], [0.494903, 0.395922, 0.494903]], "97869792-3bcc-4cbb-bf32-1065ce976dcc": [[-1.322471, 0.0, -0.542301], [1.3227389999999999, 0.999166, 0.541526]], "578a50ef-9ce8-4847-ab68-35ed3a1a5b17": [[-0.34243899999999994, -6.60718e-05, -0.40651499999999996], [0.342623, 1.04225, 0.40653]], "00680be9-2ac0-4a4c-ba1a-528be9f0a15b": [[-0.502996, -3.94197e-09, -0.502778], [0.502707, 0.269347, 0.502491]], "24d3c100-8272-48cb-9f5b-bda7822febd2": [[-0.7375320000000001, -0.00029818199999999997, -1.1184699999999999], [0.7375320000000001, 0.8799899999999999, 1.11775]], "79495087-c691-418e-9951-4c47f91a9cda": [[-0.30813199999999996, -1.84405e-17, -0.308872], [0.30813199999999996, 0.551356, 0.308872]], "b78cf8d6-eb50-4977-b4ca-e05c68acf253": [[-0.8635670000000001, -1.2263800000000001e-17, -0.24975999999999998], [0.8635670000000001, 0.400679, 0.24975899999999998]], "2fcd1893-e595-4a6f-8a01-71a4a78ca393": [[-0.845111, 8.20427e-08, -0.28909199999999996], [0.8451080000000001, 2.07707, 0.28909199999999996]], "7d72b38d-e5df-3c58-b7c7-3c494c00eeca": [[-0.255, 0.0, -0.394167], [0.255, 1.120973, 0.325]], "ea8a86f4-bcb6-48d0-b129-cfd57a1c57bb": [[-0.217224, 0.0, -0.217224], [0.217224, 0.409399, 0.217224]], "d77fdba8-263e-4bcf-b4c4-4c92a72a91cd": [[-0.718, -8.61293e-18, -0.20000199999999999], [0.718, 0.8741209999999999, 0.20000199999999999]], "3b92b678-a005-40aa-af39-8d5ec22dd0d1": [[-0.438724, 0.0, -0.438745], [0.438724, 0.87726, 0.438745]], "d0f44fa3-1cf1-4cbe-ae92-1feadb36258b": [[-0.9423279999999999, -2.26085e-14, -1.17035], [0.9424079999999999, 0.9287949999999999, 1.17045]], "4bf7f34e-9f1a-4448-9228-fd523ddcdbef": [[-0.623283, -0.00040792000000000004, -0.622924], [0.623045, 1.02589, 0.624385]], "7e81d364-98bc-4e82-80d1-04c3b651d98a": [[-0.24302700000000002, 0.0, -0.255275], [0.24302700000000002, 0.8475079999999999, 0.255275]], "85bf43f9-8086-422c-87b3-69d0ead9d4bc": [[-0.47699800000000003, 0.010678, -0.47703], [0.476957, 1.292477, 0.47703]], "782c10fe-dec8-442e-bc32-4f13993aaa00": [[-0.628809, 0.0, -1.000303], [0.628809, 0.901815, 1.000303]], "72ef73cc-1d89-449d-8651-227bf4012d31": [[-0.44266500000000003, -2.68799e-08, -0.254924], [0.44266500000000003, 1.357, 0.255684]], "58577da3-9cb8-41ae-8d3e-ed7e7cf0e306": [[-1.1035, 7.197339999999999e-17, -1.22061], [1.10375, 1.36042, 1.21952]], "0ca57bbc-70e8-43c8-8945-38659f619027": [[-0.499054, 0.0, -0.508506], [0.499054, 0.7667459999999999, 0.508506]], "12cdeefe-571f-4e6c-9a0b-212c177a30e9": [[-0.571571, 4.51355e-05, -0.579151], [0.570796, 0.57187, 0.5792499999999999]], "1163a85a-fa15-45f8-bd67-7037f76c7b97": [[-0.759657, 0.0, -0.220052], [0.75984, 1.99984, 0.22039]], "666060f9-39fa-4b69-bac3-ebeeb30f566b": [[-1.3, -3.36043e-17, -0.55], [1.3, 0.73, 0.55]], "f643700a-89bc-412c-ab64-166918920d07": [[-0.710725, 0.000202, -0.160167], [0.710725, 0.717044, 0.160167]], "861c72d1-5988-423c-8f8c-eaf77e3868cc": [[-0.242653, -0.0, -0.242653], [0.242653, 0.550665, 0.242653]], "808c5f39-733b-3eca-a3e6-8b19df8abfc1": [[-0.9453900000000001, 0.0, -0.493336], [0.9453900000000001, 0.7591450000000001, 0.493336]], "a4872807-d812-4a08-a1bf-cd958e8c33bb": [[-0.21293399999999998, 0.0, -0.117213], [0.213079, 0.732143, 0.11723499999999999]], "3e622db8-3971-4468-9403-ef8aa4171f88": [[-0.648298, -8.06198e-18, -0.337413], [0.6482859999999999, 0.5405570000000001, 0.337747]], "a2e48bd4-ce55-4cd2-b3d1-5fc18fc0e7a2": [[-0.278946, -1.0587299999999999e-17, -0.175], [0.278946, 0.44032699999999997, 0.175]], "80a1df7a-a234-48ea-923e-0bead6caf719": [[-1.05233, 1.3151500000000001e-17, -0.249255], [1.05233, 0.473785, 0.249331]], "4c0af339-2f2e-407c-8c4b-67fb1421efef": [[-1.3851900000000001, -3.48097e-07, -0.188748], [1.3851900000000001, 0.41843800000000003, 0.188748]], "23718c27-06a9-3565-9e4d-35562f803e3b": [[-0.825, 0.003939, -0.235], [0.825, 0.8073600000000001, 0.235]], "05dc963e-e0e3-4148-902d-f38dee2eafb9": [[-1.161399, 0.0, -0.266212], [1.161399, 0.8694710000000001, 0.266212]], "02b8f6a3-9abb-4d3d-8950-8b7a7c81b40e": [[-0.8, -1.31762e-06, -0.207395], [0.8, 0.5, 0.207443]], "ef95daa9-89ba-4b05-9594-40257e0e9a0f": [[-0.313965, -4.8569700000000004e-05, -0.41444899999999996], [0.314185, 0.8309869999999999, 0.414422]], "6401ad46-fff0-4270-af45-485a25fd140c": [[-0.26297899999999996, 0.0, -0.297124], [0.262899, 0.926596, 0.29734]], "128135d4-1a6a-425d-b2d8-3ffeeb692ae0": [[-0.525308, -0.000106009, -0.6005210000000001], [0.525305, 1.07164, 0.600643]], "143e78e7-19c7-4e36-a5fe-050ace140184": [[-0.843228, -1.71078e-07, -0.947312], [0.843283, 0.890474, 0.947393]], "2c5e4742-bfa2-46f7-9387-9c8985d68104": [[-0.33, 0.0, -0.173469], [0.33, 1.5130590000000002, 0.173469]], "2e1cb7d1-97d0-4e29-91ed-d8ac86655c68": [[-1.061168, 0.0, -1.2141419999999998], [1.061577, 1.044102, 1.214134]], "91e45e60-ee09-497c-a348-dcf9fb314f2e": [[-0.269415, -1.52588e-08, -0.163061], [0.269407, 1.7817599999999998, 0.163061]], "7e346355-cc35-4741-9ea2-7a3ccbdc7523": [[-1.01947, 1.86327e-17, -0.304296], [1.01905, 1.9417, 0.304291]], "7e908400-800e-46de-9e0e-3d468c91ba90": [[-1.05263, 1.52588e-08, -0.506667], [1.05263, 0.932312, 0.496905]], "3fbc0d9d-b383-40d4-a5a3-9a7a493ecf87": [[-0.9144960000000001, -1.11266e-17, -0.20624199999999998], [0.9144960000000001, 0.41685099999999997, 0.20624199999999998]], "a86c2ff3-207a-4b64-b6f4-8514d4fd9000": [[-0.81773, 0.0, -0.559138], [0.81773, 0.360634, 0.558649]], "1e266fe5-e096-40b3-9d98-830c941e29ef": [[-0.341152, 0.0, -0.343864], [0.341152, 0.570995, 0.343864]], "73f0f55c-4c6c-4931-9425-98e2cd2923bb": [[-0.514136, -0.000185221, -0.5475099999999999], [0.5145150000000001, 1.2872700000000001, 0.5473490000000001]], "d860c249-91c7-4612-a207-e9713905c063": [[-0.550741, 0.0, -0.26255500000000004], [0.550741, 0.35645400000000005, 0.26255500000000004]], "260e0d5e-8e20-46d0-92f4-02fed10fabb5": [[-0.40962000000000004, -0.000505317, -0.409321], [0.40964300000000003, 0.875386, 0.409337]], "97d47716-c1d9-4fea-baf2-60a0fec7712c": [[-1.0546280000000001, 2e-06, -0.48038400000000003], [1.0548279999999999, 0.7969849999999999, 0.48038400000000003]], "37744b58-f4df-4e4d-b256-350e9794afdb": [[-0.269847, -8.57694e-18, -0.294499], [0.269847, 0.572288, 0.294499]], "28449ed2-369d-4733-8419-4d64b0d5a05d": [[-1.341406, 0.0, -0.964314], [1.341406, 0.6955800000000001, 0.964314]], "6148201b-cd56-48e6-84c4-c08eee58b898": [[-1.05705, 0.000167595, -1.10642], [1.05458, 1.4094200000000001, 1.10646]], "54f02c07-bd28-4469-9806-647b8296366d": [[-0.871857, 6.3e-05, -0.40242], [0.871857, 0.67623, 0.40242]], "3352fafe-b858-41e1-b720-00dc547ac106": [[-0.32960900000000004, -5.8882300000000004e-05, -0.329656], [0.32961199999999996, 0.543179, 0.329697]], "078ff56c-acca-4bf5-9804-4ef17fee1d07": [[-0.620092, 0.0, -0.30595300000000003], [0.620092, 2.03439, 0.30595300000000003]], "8cbdfebe-ff0e-474c-9f11-ee5ad803c90a": [[-0.7610129999999999, 0.0, -0.761347], [0.7610129999999999, 0.727457, 0.761347]], "34f275f6-b8f3-45a6-b529-c87dc051d12e": [[-0.6, 1.38104e-17, -0.228501], [0.6, 0.9079999999999999, 0.228501]], "7542671c-3e71-42a1-8bd5-168397468d3d": [[-0.34370399999999995, 0.0, -0.39303], [0.343761, 0.769438, 0.392868]], "5c099dfe-b099-480b-bb51-e16c276b30da": [[-1.19679, 2.9842000000000003e-08, -0.427302], [1.1967700000000001, 0.817217, 0.42816299999999996]], "1f0cfe9c-bf69-49ca-af62-687cac458307": [[-0.261604, 0.0, -0.29078499999999996], [0.261604, 0.879124, 0.290599]], "48d707fa-87fb-42c1-9609-20eb7bdd48dd": [[-1.039823, 0.0, -0.518114], [1.039823, 0.750826, 0.518115]], "4dfe6574-1e4f-4150-9fb7-f42f2b0a88d1": [[-1.16816, 7.62939e-09, -0.39407400000000004], [1.16816, 0.8847280000000001, 0.39407400000000004]], "1668af72-ceb3-4359-8fc0-1397bcbf41d5": [[-0.446688, -0.0005171080000000001, -0.46192900000000003], [0.446218, 0.985871, 0.46236400000000005]], "d33f4cbf-bb69-48cd-94b7-334d0ea644ba": [[-0.234952, 8.6169e-18, -0.179404], [0.234952, 1.44804, 0.179404]], "f75bb347-d890-4648-ab08-31b682f0c995": [[-0.275042, -1.01073e-17, -0.214575], [0.275042, 0.629553, 0.21464099999999997]], "81930823-adb6-4cc4-a70b-03ee05d3308b": [[-0.225093, 0.0, -0.225093], [0.225093, 0.46627899999999994, 0.225093]], "84ae0a43-d7e9-4ef2-93c0-b56eceb530c7": [[-0.201125, -4.41162e-18, -0.201403], [0.201431, 0.549763, 0.201089]], "f70d01ca-f3d6-4437-a841-d93a8e7b1228": [[-1.56651, -0.0, -1.062648], [1.56651, 0.908343, 1.062648]], "4d8698c7-e4c5-4eb1-aac4-d8b39139d1b3": [[-0.146249, -1.14441e-08, -0.146249], [0.146249, 0.9999389999999999, 0.146249]], "6e4f9e97-8e87-42dd-b78c-2d630a3b445c": [[-1.20715, -0.0006454400000000001, -1.1928], [1.20715, 0.80985, 1.19386]], "25996fe5-5445-3aaf-8d55-6c728b2847d4": [[-39.5196, 0.0, -39.5196], [39.5196, 109.0105, 39.5196]], "a29fb22c-8b0e-41bf-9211-774c1b1f5946": [[-0.20278400000000002, 0.000304, -0.24218599999999998], [0.20278400000000002, 0.759451, 0.242318]], "1db58710-b23b-452f-a817-1e170fb12a08": [[-0.7, -2.23325e-08, -0.213319], [0.7, 0.9, 0.213319]], "1cd5a0b2-8876-4f25-ba64-a6268edb3e64": [[-0.39636099999999996, -0.00018818600000000002, -0.216952], [0.395945, 1.10179, 0.217415]], "708a1e91-8d63-4426-a6ef-d64218fb4bf0": [[-0.6920000000000001, 0.000365797, -0.26655999999999996], [0.6920000000000001, 2.35339, 0.266325]], "24131b69-5206-4722-a8e6-b6fc2e6785f9": [[-0.9193370000000001, -0.000978609, -0.211774], [0.9192870000000001, 1.3423500000000002, 0.21177900000000002]], "a860b888-024e-4b83-b289-9c1bde1225d4": [[-0.341079, 5.7e-05, -0.262268], [0.341089, 0.42459600000000003, 0.262264]], "a3a2abd1-a36d-4658-b179-3c28e4fd88c3": [[-0.426914, -0.00067111, -0.38474400000000003], [0.426875, 0.7454770000000001, 0.38493499999999997]], "b9818aa0-fb95-4a9d-b4c6-c33dc37ec16c": [[-0.248153, 3.9781299999999994e-08, -0.163091], [0.24815500000000001, 0.7531990000000001, 0.163094]], "189c8998-ae86-4b0a-841d-d8fd6818f8e2": [[-0.618155, 0.0, -0.5471820000000001], [0.615892, 1.361332, 0.545755]], "6cd5fb63-2f8e-40c5-8106-94a112d791d2": [[-0.528066, -8.178629999999999e-05, -0.528799], [0.526909, 0.7502200000000001, 0.52683]], "15a91839-7cff-4cdf-83d6-0d2d5b44035a": [[-0.600004, -7.03104e-18, -0.15], [0.600002, 0.586364, 0.15]], "00d8b611-0950-4bf4-8087-89d472c9aa9f": [[-0.48890999999999996, 0.000145, -0.449185], [0.48902, 0.830957, 0.44941600000000004]], "27fa631e-8f81-4712-9f20-2e2eac0b1168": [[-1.13434, -2.39211e-17, -0.471606], [1.13445, 0.845227, 0.47194200000000003]], "b669c249-8016-499f-b389-d9f3f42a3a63": [[-0.307498, 3.05176e-08, -0.220002], [0.307498, 0.660891, 0.220047]], "21e4ddc9-0c60-4b02-b152-211700f96343": [[-0.28166599999999997, 0.0, -0.24343900000000002], [0.28166599999999997, 0.825447, 0.243448]], "1a4f65d9-b743-47e9-bc5f-74e5af9b1d68": [[-0.65, 0.0, -0.106501], [0.65, 0.6, 0.106501]], "9f7fb75c-51da-4885-8a41-e0d8be78bce1": [[-0.250012, -1.32422e-05, -0.179363], [0.250012, 0.564556, 0.179285]], "81c18b1e-9503-457d-958b-123c0607f588": [[-0.808736, -3.05176e-08, -1.02563], [0.808736, 1.30823, 1.02563]], "e5ff3f38-b4f1-4329-9d77-228f971113a1": [[-0.404435, 2.3e-05, -0.444112], [0.404445, 0.943798, 0.443704]], "d831e1b1-8194-4b80-bccf-2d4174c7180a": [[-0.44992899999999997, 0.0, -0.21759599999999998], [0.44992899999999997, 2.460909, 0.21759599999999998]], "55e14772-c606-4a9a-8b08-e07189804e8f": [[-0.19544799999999998, -3.63798e-15, -0.222576], [0.19546500000000003, 0.7371859999999999, 0.222577]], "4fa524ac-8e67-44f6-b225-fb1345de6b37": [[-0.40096, 0.0, -0.586729], [0.40096, 0.44998699999999997, 0.586729]], "1b53087b-d704-4e2c-b8e4-b842c04b5124": [[-0.8532559999999999, -6.94747e-17, -1.13461], [0.8532559999999999, 1.0979999999999999, 1.13461]], "c97da9c9-c3c8-418e-a401-d62b21059dea": [[-0.39207000000000003, -0.0, -0.392021], [0.392012, 0.639957, 0.39207000000000003]], "2476d7c4-b428-3e8e-aa11-997c2bd9fe53": [[-53.1377, 0.0, -53.1931], [53.5423, 73.66, 53.4869]], "999da3e6-3125-48f1-bc1f-b542a789ecbc": [[-0.269105, -7.04268e-18, -0.269105], [0.269105, 0.60102, 0.269105]], "2e25c455-7a42-48f4-8dd9-4ea6a19c6ec4": [[-0.372191, 0.000297, -0.443889], [0.37258800000000003, 0.935672, 0.443889]], "b33deb5a-4a01-4e2b-be82-3f4a5ea98fac": [[-0.279159, 0.000239, -0.328817], [0.279189, 0.797071, 0.328562]], "4bef5bc5-e8b7-4af6-8bad-1f674f0651c3": [[-0.287727, 2.9999999999999997e-06, -0.287738], [0.287727, 0.45230200000000004, 0.287739]], "42d9f16c-6c0f-3b05-886e-1e04ca9d46f7": [[-39.5196, 0.0, -39.5196], [39.5196, 109.0105, 39.5196]], "a41c6a6d-d023-42bb-8583-9805ea427c10": [[-0.34063299999999996, 7.62939e-09, -0.36471], [0.340135, 0.272666, 0.364037]], "1ade0286-c9ac-43e4-9011-c9c83edf4b3e": [[-0.250001, 3.61219e-06, -0.20000199999999999], [0.250002, 1.8, 0.20000099999999998]], "9bf5ab80-3c43-4147-b2ea-d792e42c6e0d": [[-0.363809, 0.0, -0.318126], [0.363817, 0.719179, 0.318258]], "7f695a66-fd55-310b-90c7-58ca4843f8be": [[-0.34643799999999997, -0.0012720000000000001, -0.448109], [0.362832, 0.7254470000000001, 0.287639]], "4b8f03ed-5a96-4d50-8c44-20d3e5a399b1": [[-1.021315, 0.001, -1.112834], [1.022873, 1.359949, 1.112353]], "ec3697e0-ba56-4291-aef8-3cb4beff1355": [[-0.117144, 0.0, -0.10350899999999999], [0.117144, 0.186803, 0.10350899999999999]], "4391f854-89ed-41a5-aa3d-c77447b63b9b": [[-1.07496, -0.00044340499999999996, -1.09275], [1.07459, 1.5484200000000001, 1.09363]], "8365ddd3-3838-3b9b-8f7d-a1b41bfc6a46": [[-0.24, -0.0013830000000000001, -0.32799], [0.24, 0.9960410000000001, 0.326254]], "2b7dae6b-46a4-41de-a2c5-3e2c557eaf2a": [[-1.382604, -0.0, -0.5508299999999999], [1.382604, 0.921719, 0.5508299999999999]], "98e10094-bd8d-49b7-a01f-c5050f7ddf4d": [[-0.888024, -0.000217877, -1.10193], [0.884989, 1.70678, 1.10345]], "f783bc85-89dd-465f-bc92-6bfb7c2f83c7": [[-0.258477, 0.0, -0.301338], [0.258477, 0.805406, 0.301338]], "bcc47f55-1dce-4693-a652-ac106f8d72dd": [[-0.275, -1.4158e-17, -0.25], [0.275, 0.660968, 0.25]], "80192f3b-4d5e-4263-8544-a0fe51c6796f": [[-0.8309449999999999, -7.46643e-05, -1.04256], [0.8309449999999999, 1.2161, 1.04294]], "3f8d4d32-8376-447f-9980-4b6fc0dc3778": [[-0.672385, 0.0, -0.672384], [0.672385, 1.05721, 0.672384]], "75eceabc-943e-4a75-aaab-83d6fbf65397": [[-0.771136, 5.69107e-17, -0.9445699999999999], [0.771136, 1.21631, 0.9445699999999999]], "2d7ec2d0-fcd6-4943-9037-97a8e5ce3d6e": [[-0.568628, -6.34367e-17, -1.055], [0.567643, 1.12, 1.055]], "2e47f4e8-246c-40e3-b093-4e6f254d816d": [[-0.246228, -0.000604611, -0.117661], [0.246234, 0.360276, 0.117197]], "64e0707e-bb25-4e19-a116-e689cda5c883": [[-0.835538, -5.37109e-06, -1.0712300000000001], [0.83552, 1.44905, 1.07243]], "cba2bd19-4283-4bad-99b0-1408ba521ac3": [[-0.7957850000000001, 1.52588e-08, -0.23262799999999997], [0.7957850000000001, 0.796592, 0.23262799999999997]], "2aae5836-eca9-45f8-aa3f-f95dd9b57458": [[-0.48985, -2.74426e-05, -0.194346], [0.48985, 0.65835, 0.194346]], "19035101-21a1-4495-ae95-90d8d1ccd108": [[-0.5160750000000001, 6.8833800000000004e-18, -0.241816], [0.515993, 2.11435, 0.240851]], "2913731c-740b-4f22-adb2-c94660c4189e": [[-1.64145, -9.20217e-18, -0.22532699999999997], [1.64145, 2.44, 0.225326]], "40d203c0-5ea0-46ab-9213-a073aafb192b": [[-1.45192, 0.00133881, -1.28994], [1.4524700000000001, 2.02279, 1.2919800000000001]], "5a070537-1a46-4dc1-924f-ea06ba1e4719": [[-0.24431899999999998, -2.0415199999999997e-05, -0.259021], [0.245652, 0.9687990000000001, 0.258872]], "9ee40a01-165f-4aaa-abef-ee0d21b0b445": [[-0.160433, -0.000180778, -0.130475], [0.16011299999999998, 1.8578800000000002, 0.130669]], "d0318902-bb35-4407-9dc6-1447baa38a3b": [[-0.23401700000000003, 2.8e-05, -0.282468], [0.233904, 1.027539, 0.282498]], "2673eb72-13e3-4bda-8566-52e037399053": [[-1.57093, -5.64888e-09, -0.41489800000000004], [1.57149, 0.915415, 0.41387300000000005]], "c159a208-6146-410d-afcd-3558f491e235": [[-0.585342, -0.00280195, -0.301074], [0.5853670000000001, 0.956386, 0.302948]], "47d2bec4-7605-41c1-a316-2c1206ea383d": [[-1.20343, 1.10353e-08, -0.48568600000000006], [1.20319, 0.742322, 0.48629600000000006]], "6ad4145e-3017-4519-8089-a5b0f6605de5": [[-1.250982, 0.0, -0.48456899999999997], [1.251363, 0.8576630000000001, 0.48465400000000003]], "5c226f2b-aad3-4371-a3f9-ea2ee9a63327": [[-0.852809, 0.0, -0.35757599999999995], [0.852809, 0.596784, 0.35757599999999995]], "4cbdaa10-169b-441b-bab5-732300455dab": [[-0.588043, 0.0, -0.17088699999999998], [0.588043, 0.367076, 0.17088699999999998]], "cecfc2e1-fef1-414d-8935-bfb897271a61": [[-0.239774, 0.0, -0.235982], [0.239936, 0.860481, 0.235982]], "11c56326-9348-4bda-8732-380e10832e95": [[-0.8675, -9.14817e-16, -0.3], [0.8675, 2.5, 0.3]], "818ff115-688a-4b02-ad78-9a30539eb018": [[-0.36572000000000005, -0.0, -0.395013], [0.36572499999999997, 0.974377, 0.39479]], "0c7dc4b5-592d-4041-b3b9-8f4cdf2b30ea": [[-1.010909, 0.000369, -0.36464399999999997], [1.010647, 0.706991, 0.364904]], "b7cc9510-0174-4c4f-8b64-f0a5d0eb4e4b": [[-1.2387000000000001, -0.000110092, -0.460835], [1.23848, 0.8059069999999999, 0.46082500000000004]], "68a4cb7b-21d7-3027-b884-e154df99ad1e": [[-134.8327, 0.0, -57.0843], [134.8327, 77.0244, 57.0843]], "05101287-941c-4442-af2e-0eef69f136b6": [[-0.600332, 1.46611e-08, -0.210891], [0.600333, 0.762721, 0.21089]], "71324789-d08c-4cd2-9916-8d97913b0944": [[-0.815085, 0.0, -0.496997], [0.815085, 0.773981, 0.497415]], "b83731c6-687a-4642-89a3-05d625bf3023": [[-0.9274809999999999, -1.12343e-17, -0.634516], [0.9274809999999999, 0.415003, 0.634516]], "125e34c0-0d27-3f7b-80a0-80709f652073": [[-0.7414919999999999, 0.0, -0.303405], [0.7414919999999999, 0.793305, 0.303405]], "1d74aa06-804f-47a8-9ca6-e2eb5f10a33e": [[-0.398307, 0.0, -0.41942799999999997], [0.398307, 0.32845199999999997, 0.41942799999999997]], "536e8106-0fc5-4e2b-92b8-1760eccdeb48": [[-0.323994, -1.65072e-05, -0.32541200000000003], [0.323992, 0.628655, 0.325708]], "34e5b695-1212-4cf3-9d9e-50314061a036": [[-0.307026, 0.0, -0.179647], [0.307026, 0.630439, 0.179647]], "719c921d-a006-3c51-abe7-cead867a78c9": [[-0.65, 0.0, -0.65], [0.65, 0.743264, 0.65]], "d8633416-c410-435e-8816-d96e548473bb": [[-0.20038799999999998, -0.000832378, -0.200401], [0.200456, 0.484965, 0.20041499999999998]], "8244237b-0c1a-3f11-8254-087c78d7476d": [[-0.276289, 0.0, -0.213669], [0.282949, 0.8763169999999999, 0.256657]], "57bc51d9-1f14-472e-8e5e-d4d3254e703e": [[-0.22298600000000002, -1.2124099999999999e-17, -0.207333], [0.22298600000000002, 0.37513199999999997, 0.207333]], "05291d86-5851-4077-b7a5-7ce7130e7306": [[-1.2951499999999998, 1.14209e-17, -0.450642], [1.2953700000000001, 0.782305, 0.45126399999999994]], "7fb52d24-368d-4597-86df-902cf60fa10a": [[-0.604867, 0.0, -0.20396699999999998], [0.604867, 0.624846, 0.20396699999999998]], "5600e7a8-3772-4e17-8ad8-a5d8b2a01e88": [[-0.283488, 0.0, -0.283488], [0.283488, 0.302108, 0.283488]], "4899225c-21f3-4c8b-b907-7bb878d6a8bc": [[-1.53655, -0.000202145, -0.49144799999999994], [1.5369, 0.858747, 0.491722]], "113b1fbf-cc94-48a2-b387-9d82c30442c6": [[-1.030176, 0.0, -1.172405], [1.029421, 1.0624200000000001, 1.172083]], "9c617ad9-d176-4b62-bd29-383e6a4e5d6b": [[-1.3479599999999998, -3.8147e-09, -0.498898], [1.34846, 0.7522960000000001, 0.499516]], "c39289a4-8aed-40e9-945b-8069554c9ae7": [[-0.30347799999999997, 0.0, -0.17566800000000002], [0.30347799999999997, 0.540798, 0.17566800000000002]], "76dbde4a-37f6-45b8-8f2a-f9aa8c444fe5": [[-0.777046, -1.94346e-17, -0.33442], [0.777046, 0.948961, 0.33442]], "5bb155d6-fc68-423c-b648-f8eb130dc8bf": [[-0.9203319999999999, 0.0, -0.22231], [0.9203319999999999, 0.505, 0.22231]], "2755cd11-37b7-4dec-abd1-c6efa2dcd921": [[-1.154566, 0.00063, -1.3435230000000002], [1.154566, 1.1867130000000001, 1.342841]], "e28b25af-1d80-4663-a87e-05ea59e2f0c1": [[-0.727965, 0.0, -0.319493], [0.727965, 0.435927, 0.319493]], "d2232ce3-668a-4511-826d-36d66dacc98c": [[-0.1609, 0.0, -0.1609], [0.160935, 0.355084, 0.160935]], "063aa0bf-75fb-37f3-8b1c-6c977c9bfcef": [[-0.425, 0.0, -0.39448700000000003], [0.425, 0.7478, 0.44713299999999995]], "7af7cef7-e503-4893-92c2-fc54783227d4": [[-0.33149999999999996, -1.52588e-08, -0.309709], [0.33149999999999996, 0.73541, 0.309709]], "44103553-6112-42df-a6c2-cd94399a76db": [[-1.17078, 2.5558899999999997e-17, -0.483039], [1.17134, 0.7305800000000001, 0.482866]], "33b96ac5-0fe4-4ffb-b5ee-f34d756cfb7a": [[-0.304788, 0.0, -0.304788], [0.304788, 2.2686930000000003, 0.304788]], "fe8c3645-20c5-45d2-9195-3b0e8e699f3f": [[-0.859459, -1.35472e-17, -0.22499400000000003], [0.859459, 0.842993, 0.22479700000000002]], "14368243-4ce3-3bdb-98fa-5a352f19edb4": [[-0.318932, -0.0, -0.32021299999999997], [0.318932, 1.023718, 0.32021299999999997]], "5e3ffccf-f26c-4396-b15e-1c23134e4021": [[-0.948333, 4.80863e-08, -1.16008], [0.948333, 0.7928350000000001, 1.16008]], "cb8ef374-1462-4eb5-ae5e-689da0abec7d": [[-0.7567889999999999, 0.0, -0.443635], [0.7567889999999999, 0.735153, 0.443635]], "65cd365c-f230-4a70-916f-b9ef5265c202": [[-0.950878, 5e-06, -0.22725], [0.950878, 2.159456, 0.226914]], "dc1eff7b-2541-4296-aac8-f28e0c190dc1": [[-0.348444, -6.644890000000001e-16, -0.249676], [0.348444, 1.18616, 0.249676]], "1f52b97b-2ce8-452c-a9cf-3e4729fa9a46": [[-0.614313, -1.93184e-08, -0.26203499999999996], [0.614256, 0.859166, 0.262077]], "ee7b15ba-d172-4a32-b1d3-ec7aefc8fee6": [[-0.46966700000000006, -1.6567599999999998e-17, -0.319988], [0.469497, 0.8839109999999999, 0.32140500000000005]], "7c2916f5-3c12-437f-ac90-371206e5d1a1": [[-0.2, -1.1205500000000001e-17, -0.2], [0.2, 0.40118200000000004, 0.2]], "999f5c03-73ad-411c-881a-64f005bc2758": [[-0.276293, 0.0, -0.199358], [0.276293, 0.797867, 0.199358]], "3fd7dec6-20b3-4b6d-8115-49a0472944e1": [[-0.322479, -4.935989999999999e-06, -0.32250500000000004], [0.322412, 0.832781, 0.322657]], "9ec55a76-eae9-42af-a24d-9df9e232548e": [[-0.650424, 0.0, -0.300187], [0.650424, 0.46043300000000004, 0.300187]], "c27448bb-7736-4549-9a5e-2b0031bac8de": [[-1.0575, -9.14466e-05, -0.467211], [1.05758, 0.8464149999999999, 0.467313]], "508cfb78-bc03-4bed-8564-32f1ea20d67f": [[-0.277289, -1.3200400000000001e-17, -0.277289], [0.277289, 0.555, 0.277289]], "d4973a02-0ea5-47a5-987a-7ab6bc2b2ed9": [[-0.34325000000000006, -1.76506e-17, -0.343048], [0.343025, 0.329114, 0.343493]], "6a4f622c-95f0-46e6-9e22-2d5ef711b27b": [[-1.155, -1.07156e-17, -0.175], [1.155, 2.6, 0.175]], "6d0a625e-2493-4451-96ab-8e4d6076dc58": [[-1.348975, 0.0, -0.461952], [1.348985, 0.98021, 0.46178600000000003]], "a521de03-ea95-4865-85ed-9b041eba1702": [[-0.252201, 2.33053e-05, -0.228476], [0.252327, 0.91685, 0.228994]], "951da582-852c-4702-85c8-f2435a5e47b3": [[-0.800104, -1.00708e-06, -0.200136], [0.800104, 0.8500749999999999, 0.200136]], "7549a14b-833b-48ea-89a5-8893f67e1daa": [[-0.392069, 0.0, -0.39638199999999996], [0.392069, 0.942062, 0.39629800000000004]], "12c01371-0ab7-4bf1-939a-461982b78e83": [[-0.834107, 0.0, -0.450866], [0.834107, 0.803265, 0.450866]], "64a5a791-bcca-4a49-9abf-1a1d5d854a64": [[-1.17086, -0.230461, -1.25997], [1.16879, 0.898484, 1.25893]], "c83adaa6-3842-4a61-94b2-3e9841166c40": [[-0.795, -0.0, -0.445641], [0.795, 0.74684, 0.445641]], "10d00a2a-0161-41d4-b24c-4864b7d1ee39": [[-0.32445, 9.25145e-05, -0.274229], [0.324449, 0.394339, 0.27422799999999997]], "0a876e37-2979-3a9e-8dba-e307462fdda7": [[-1.269842, -0.000305, -0.507842], [1.269842, 0.751535, 0.507842]], "058428d6-526e-3a63-a65e-fb646465e38e": [[-1.200001, 0.0, -0.525308], [1.200001, 0.6627719999999999, 0.524696]], "644d8471-a5f9-431d-bee4-96cd759572a4": [[-0.253515, -1.68156e-05, -0.24118099999999998], [0.253496, 0.699376, 0.241183]], "7de631e3-2403-4577-8bae-85e5854da1ea": [[-0.900488, 0.0, -0.1751], [0.900488, 0.525029, 0.1751]], "17e28885-225b-4e7b-9acc-0e49d88544fc": [[-1.005, -6.103520000000001e-07, -0.5575], [1.005, 1.9373500000000001, 0.5575]], "70540c4f-9d4d-44f4-bc4d-fc835d5dca2c": [[-1.134229, 0.0, -1.1287099999999999], [1.133651, 1.330001, 1.1287099999999999]], "eb056d82-3318-44f6-96f6-6e49090468a0": [[-0.351939, 0.0, -0.32911], [0.351939, 0.971966, 0.328984]], "f467e918-afe5-45af-b778-2dfcd88680c5": [[-1.1048, -0.000670654, -1.0486199999999999], [1.1074, 1.42221, 1.0486199999999999]], "c80c5280-12fd-4220-896b-db6f372f4b96": [[-0.60808, 0.0, -0.479437], [0.60808, 0.40624299999999997, 0.479437]], "7fb021fa-9d67-4193-9b65-e6895d1dc071": [[-0.8801640000000001, 0.00021700000000000002, -0.40303199999999995], [0.8801640000000001, 0.8131900000000001, 0.40303199999999995]], "19df9f15-e923-3992-a5fc-c3465d41c978": [[-1.12233, -0.000446, -0.512017], [1.121272, 0.9722270000000001, 0.512858]], "434d9ee3-b04a-43c9-a15a-fcc62b716419": [[-0.324212, 0.0, -0.32346800000000003], [0.324211, 0.555242, 0.32346800000000003]], "1ed56a08-924c-4d20-9633-12cbcd5dc4e3": [[-1.050181, 0.000443, -1.113908], [1.05087, 1.149343, 1.114282]], "15992c1d-4e77-43c2-8064-73a2e9cfb394": [[-0.352842, 0.0, -0.34110599999999996], [0.352526, 0.782501, 0.340843]], "0af3aeed-328b-4883-96fb-446c97974756": [[-1.3631, -0.0003039, -0.5164880000000001], [1.3640199999999998, 1.05752, 0.516262]], "93892797-9bb9-4d18-923e-717ece0ccf86": [[-0.307442, -1.83697e-17, -0.307379], [0.307442, 0.10099999999999999, 0.307379]], "f884ca26-efa8-4977-82f9-dc2b199b22f5": [[-1.0046599999999999, 1.3285e-17, -0.276831], [1.0046599999999999, 2.34271, 0.27674]], "0e8384f8-476a-4985-9c32-4867b4b0c9a8": [[-0.591648, 0.0, -0.332491], [0.591648, 0.530789, 0.33415500000000004]], "42721523-257d-40ce-abc1-27122725187e": [[-0.236491, 0.0, -0.226808], [0.236491, 0.43379100000000004, 0.226808]], "a73b0ce6-2c73-46e1-93d5-4ac85d63ba89": [[-1.222323, 0.000579, -0.452197], [1.222323, 0.869546, 0.451529]], "4fb25fd7-4354-416d-a5d5-d8bb28d2f2c1": [[-0.675, -1.71757e-17, -0.3005], [0.675, 2.04, 0.3005]], "5dc37eca-0a23-42a8-9a2e-f8296d125977": [[-1.66008, -0.00127046, -1.3033000000000001], [1.6577099999999998, 0.7957, 1.30261]], "464e7480-0261-3b67-aeb2-e45bc695d601": [[-0.444434, -0.00021799999999999999, -0.384684], [0.438365, 0.8400029999999999, 0.395882]], "0aa5431c-5410-436c-a7ca-a332d1379ee7": [[-0.336173, 0.0, -0.359525], [0.336173, 0.792564, 0.35952599999999996]], "0c4f330c-787d-4fd9-b36a-a1308bfce2e8": [[-0.353791, 0.0, -0.319749], [0.353791, 0.870972, 0.319749]], "7400940b-2129-43d9-ab09-74c3d83adc97": [[-0.5571459999999999, 0.0, -0.531574], [0.5571459999999999, 0.719191, 0.531574]], "64eff51e-441e-4ce6-8a73-55c2b80ca3b2": [[-0.294313, 0.0, -0.246524], [0.294313, 0.761205, 0.246524]], "456639d9-585d-4595-8ca3-90724e6c088a": [[-0.405586, 0.0, -0.515757], [0.405586, 0.8675400000000001, 0.516192]], "28de5ed1-2567-3bb5-bb7b-7fb8c41ca50e": [[-117.2912, 0.0, -54.3563], [117.2911, 77.0084, 54.3563]], "65131084-9406-474d-a15f-4ee23a2ba1c5": [[-0.9, 0.0, -0.304875], [0.9, 2.72, 0.304875]], "1fc51a9b-ef9d-3acb-bb6d-9abd155cf3aa": [[-1.1799819999999999, -0.0008010000000000001, -0.6477299999999999], [1.179981, 0.840201, 0.501054]], "8e87bddb-4980-4393-aef9-a4475c6a7d84": [[-0.210276, 0.0, -0.182972], [0.21052600000000002, 0.771241, 0.182972]], "3acedaa8-64a2-4307-b8ae-c5d64d79098d": [[-0.399831, 0.0, -0.20638600000000001], [0.399831, 0.9816039999999999, 0.20638600000000001]], "ea5bc5fe-3697-4469-bc82-8bd7af443037": [[-0.400991, -3.9788199999999996e-08, -0.403033], [0.400991, 0.896414, 0.40285200000000004]], "80fb06af-fab1-3df5-9a9f-d871b73e5429": [[-30.5138, 0.0, -35.6232], [30.504, 63.9346, 34.9689]], "e22beaba-5023-486c-9dc3-b98cc67a9e42": [[-0.5268619999999999, -1.69164e-17, -0.526997], [0.52695, 0.49841599999999997, 0.527038]], "078faa0a-a8d6-49e6-a4c6-51866dc5580c": [[-1.221031, -0.0, -0.488626], [1.221174, 0.69978, 0.48879199999999995]], "837a74ef-0df3-42b7-9777-086c06d5476d": [[-0.67, -1.88738e-17, -0.3124], [0.67, 1.932, 0.3124]], "4551d472-b45f-4136-9b48-52c357db2994": [[-0.566615, -4.4044800000000004e-08, -0.264655], [0.566615, 0.572885, 0.264655]], "77dcc4f8-98ae-43aa-994b-c1874f9a00b7": [[-0.279698, 0.0, -0.306979], [0.279698, 0.81202, 0.307222]], "03c5b770-04d1-421c-960e-ff46a9f3a8cd": [[-0.501138, 0.0, -0.311394], [0.501138, 0.411206, 0.311394]], "fe662b9d-7948-4c39-ac66-ff477cac0f2b": [[-0.286858, 0.0, -0.28684899999999997], [0.28678000000000003, 0.371511, 0.28684899999999997]], "867cd75a-2644-489b-8820-90e85fbd97d4": [[-0.512404, -1.9463499999999998e-05, -0.539372], [0.51245, 0.8023560000000001, 0.539455]], "c2f78b47-9870-4d18-b408-61b1521b5c0c": [[-0.720098, -0.0009491180000000001, -0.32630000000000003], [0.7201569999999999, 2.26247, 0.325137]], "0f17b0de-610d-4ed6-accc-e19c9ac0a900": [[-0.09500030000000001, -5.245350000000001e-09, -0.0875], [0.0949512, 1.28269, 0.0875]], "434e4279-64df-488b-ba7e-c9398fd7633e": [[-1.025833, 0.0, -1.073306], [1.025627, 1.2818109999999998, 1.07311]], "689463e0-f435-424a-bf21-9f7d8c876632": [[-1.26467, -0.000282793, -0.541146], [1.26452, 0.917626, 0.540906]], "28d53c9e-4f9f-48c4-9b88-3238876f7ad8": [[-0.23326, 0.0, -0.264471], [0.233827, 0.8519589999999999, 0.264471]], "7e599b3f-60f2-4e3a-aaf5-dbedfda52c8f": [[-0.552172, 0.0, -0.5162789999999999], [0.5521119999999999, 1.089496, 0.516161]], "c6293606-b642-455e-890d-525a4744f8f3": [[-0.316458, -4.862140000000001e-07, -0.2419], [0.316458, 0.55, 0.2419]], "a2270562-ddf0-44c8-8e20-2351a22be3e6": [[-0.2915, -1.78607e-17, -0.29168700000000003], [0.2915, 0.13, 0.29168700000000003]], "60dcfc90-0a76-4046-8e79-c1ca6a592f8a": [[-0.930154, -1.06545e-17, -0.18617], [0.930154, 0.409987, 0.186289]], "168702d8-2dbd-4cf0-9061-2db9a739b0ae": [[-0.216298, -6.36696e-14, -0.190338], [0.216298, 0.671074, 0.19031900000000002]], "2a9d64f4-5ec9-4bab-8e99-0d50bf648451": [[-0.75493, -7.1890300000000005e-06, -0.7547799999999999], [0.754872, 0.752689, 0.7547799999999999]], "1ea9df85-c974-4cb8-abaf-276b423dc390": [[-1.551004, 0.00026599999999999996, -1.342597], [1.548044, 0.817382, 1.343453]], "d1506e67-9729-4377-94a3-ab8e3dd6e929": [[-0.589405, -0.000348797, -0.5892219999999999], [0.5892459999999999, 0.44365099999999996, 0.5892219999999999]], "475448af-59ea-4c2f-aa3b-9461a10f54d9": [[-0.172394, 0.000132523, -0.172262], [0.17235399999999998, 1.0623399999999998, 0.17235299999999998]], "a8cd2277-de84-417f-a03e-bd017ad4e7e4": [[-0.288992, 0.0, -0.284572], [0.288992, 0.8829730000000001, 0.284572]], "3960d4eb-0cce-45b6-9072-38be678779fd": [[-0.356081, 0.0, -0.367419], [0.355901, 0.315957, 0.36737299999999995]], "560da735-af01-4a65-a3b3-af77ad54726f": [[-0.25, -1.1899499999999999e-17, -0.20248100000000002], [0.25, 0.49702399999999997, 0.20248100000000002]], "4235984b-4f59-441c-bf4e-8775f3057db7": [[-0.21378599999999998, -0.000110426, -0.265587], [0.21394200000000002, 1.07337, 0.26568200000000003]], "3b63f9b1-e683-45b8-b6c4-cb6cc1a0b444": [[-0.23419399999999999, 0.000327, -0.24157], [0.23419399999999999, 0.64616, 0.241861]], "d028ddfa-e149-4ed5-87c4-cd9e31d1265c": [[-0.344893, -1.25542e-05, -0.259392], [0.344893, 0.593683, 0.259397]], "c9024d8d-f420-4f3d-a4f7-780786ceb014": [[-0.9129999999999999, -1.62266e-17, -0.3], [0.9129999999999999, 2.17067, 0.3]], "2c98bcbe-0286-4264-8ae7-4a4d33d00dfc": [[-0.244029, 0.0, -0.280901], [0.244029, 0.792463, 0.28085699999999997]], "54f59f79-4925-457b-827c-dc7ed7605a53": [[-0.8900060000000001, 0.0, -0.40430999999999995], [0.8903650000000001, 0.785345, 0.4047]], "9629284f-c53d-40cd-8820-37402aaad8b6": [[-0.815284, -1.1959e-17, -0.250309], [0.815284, 0.450542, 0.250309]], "67d97e73-4eac-4ae9-9ff2-db1127dd5d03": [[-1.12135, -0.0007426760000000001, -0.508724], [1.12078, 1.10222, 0.508042]], "3dc72ce1-1c86-325d-9192-5ec0eb7d6979": [[-0.9906, 0.0, -0.4826], [0.9906, 0.7365999999999999, 0.4826]], "476ecc07-d410-4841-adbb-78c357e13bca": [[-0.209569, -1.0457500000000002e-17, -0.209622], [0.209355, 0.411275, 0.20946]], "0922ac3b-a69c-472a-91d9-e07b48b68f4f": [[-1.18749, 1.14441e-08, -0.403027], [1.18751, 0.916948, 0.402663]], "e30d1e6b-d98e-4048-905d-d454ce3e97f2": [[-0.519023, -0.000753099, -0.523384], [0.519455, 0.798304, 0.5234369999999999]], "f0ad269b-e9cf-46dd-97f9-e0f139dfe0fc": [[-0.46002499999999996, -0.000157166, -0.41829900000000003], [0.459917, 0.9325230000000001, 0.417736]], "a8de5349-12e9-4609-b389-6c07f75ed760": [[-0.163917, -0.0, -0.167774], [0.163917, 0.9006740000000001, 0.167774]], "13802fb0-a0e6-495f-a0e8-0280a83902c1": [[-0.312205, 0.0, -0.38500700000000004], [0.312085, 0.876992, 0.385038]], "060eba93-a0cb-4382-b2bc-a25e606a97e3": [[-0.64, 1.53658e-17, -0.253776], [0.64, 1.07033, 0.253778]], "5d445b8d-6756-4aaf-8c66-8b1ed942576d": [[-1.093943, 0.0, -0.195275], [1.093943, 0.68, 0.19601500000000002]], "e37ac22a-cd47-422c-b725-70fb09d8fffd": [[-0.825, -1.06237e-17, -0.18150200000000002], [0.825, 0.5, 0.18150200000000002]], "6c1e192e-2ab0-4f7f-a619-1b78de97c002": [[-0.426581, 0.0008449950000000001, -0.121434], [0.426933, 0.8516330000000001, 0.121606]], "48a657af-018e-4b42-8555-0d70bb947aba": [[-0.866174, 0.0, -0.8110259999999999], [0.866856, 0.51062, 0.8110259999999999]], "3dba4e85-3c36-4cf3-a7c8-8e3f1235bf0f": [[-1.229432, 0.000222, -0.42372], [1.228702, 0.9239109999999999, 0.42365]], "0acc4e96-4730-4daf-be8c-3f15552ee820": [[-0.582304, 9.1877e-08, -0.207379], [0.582299, 1.36586, 0.20738]], "022e3919-207c-437a-b4ae-e56359c0ea5a": [[-1.107051, -0.0, -0.203991], [1.106563, 0.774712, 0.20380600000000001]], "049384d5-21d4-40ee-83dc-376df57034f7": [[-1.07595, -0.00166034, -0.45439300000000005], [1.07512, 1.05198, 0.45247]], "6c5ef170-3b11-4e6c-b20a-1b7cfedee2c9": [[-0.775346, -0.0005718, -0.38969099999999995], [0.775528, 0.480853, 0.389432]], "b560803f-3cd9-40b5-b972-add3667d8ee3": [[-0.45, -1.50019e-17, -0.25], [0.45, 1.0759999999999998, 0.25]], "edba419d-3616-46fc-9917-ec26f246da54": [[-0.35989, 2.58167e-07, -0.437262], [0.360417, 0.857173, 0.437257]], "20eeba56-cf65-4738-8d1b-76cc473cb018": [[-1.17686, -5.72205e-09, -0.40457099999999996], [1.177, 0.821679, 0.404204]], "1eaf6625-0487-4378-8532-79b77a856b50": [[-0.350733, -1.1971800000000001e-17, -0.232164], [0.350733, 0.446136, 0.232164]], "e848dc0c-ca5a-4d63-8020-bdc6da04f801": [[-0.291925, 5.7e-05, -0.300539], [0.291906, 0.822409, 0.300539]], "443263b3-8955-4cee-b6e6-7396116a9222": [[-0.7015689999999999, 0.0, -0.412885], [0.7015689999999999, 0.44286299999999995, 0.412885]], "de339f05-f202-3267-a2c8-2804d97abb24": [[-0.277889, 0.0, -0.230292], [0.277889, 0.45567500000000005, 0.230292]], "f3cff390-f52f-4646-ae59-bf9a8d32f5d1": [[-0.312592, -1.91462e-17, -0.312681], [0.312592, 0.08, 0.312681]], "fff45ef4-fbc8-46be-8fa7-42b7fc847e86": [[-0.297323, -0.00012468699999999998, -0.305653], [0.297351, 0.79793, 0.306831]], "10a98c06-5475-4882-920d-740de5ad1167": [[-1.11458, 5.548940000000001e-10, -0.8084560000000001], [1.11463, 0.671574, 0.808407]], "5ce0dd83-b7da-420d-b419-a70a64a8f675": [[-0.19034500000000001, -0.00011325099999999999, -0.19034500000000001], [0.19034500000000001, 0.239431, 0.19034500000000001]], "65e6859e-b3f9-332b-bcc8-c712feb808c0": [[-0.306894, 0.000397, -0.394692], [0.306894, 0.8001999999999999, 0.394692]], "530c3dbc-ae01-3b03-a52d-7d9e61fe4f7f": [[-36.4923, 0.0, -34.4355], [36.4923, 81.1473, 35.854]], "0b233069-9e14-48d1-9c13-1c80311b8e24": [[-0.785331, -1.18308e-17, -0.20921900000000002], [0.785331, 1.2, 0.20921900000000002]], "529ef555-71af-4a18-9c5a-a6a831e6d319": [[-0.08181509999999999, -3.21758e-05, -0.08169309999999999], [0.08150589999999999, 0.5287489999999999, 0.0817658]], "71b110a5-4ea0-42b5-afc8-5446c6e28d83": [[-0.25546399999999997, 4.62029e-05, -0.25534300000000004], [0.255275, 1.00041, 0.25527]], "3c163dbf-1558-4a9e-8690-f3c7126d1f29": [[-0.315938, -0.000448764, -0.302866], [0.315789, 0.760578, 0.30267900000000003]], "7cb039d7-8f68-4c6e-b812-515ae850f6d1": [[-0.384097, 0.0, -0.414338], [0.384091, 1.157929, 0.414456]], "c446ead2-1d5b-4726-950e-47d01f4ba7c1": [[-0.27148, -6.91645e-05, -0.27240200000000003], [0.27148, 0.512995, 0.272413]], "c58ab69f-d138-44ed-a9de-9aeff0c8c836": [[-1.41584, -0.000291097, -0.409921], [1.4158199999999999, 0.9205200000000001, 0.409808]], "c136c05d-c189-40ab-b35a-a392102c3737": [[-0.43963500000000005, -4.56726e-05, -0.45231299999999997], [0.439647, 0.933805, 0.45222]], "b20ae8b0-0d97-4823-961f-32c74db9c231": [[-0.7914319999999999, 0.0005, -0.772933], [0.7914319999999999, 0.607146, 0.772933]], "22bc64cb-8240-4092-a2c4-5953181517a2": [[-1.5080699999999998, -0.000134547, -0.563025], [1.50785, 0.6949679999999999, 0.562496]], "56441da5-3a13-47b8-ad95-50df8613d6dd": [[-0.230872, 0.0, -0.312956], [0.230872, 0.8795780000000001, 0.313531]], "5a04bc49-3476-4d7e-9538-d000162fa449": [[-0.400274, 0.0, -0.160482], [0.400274, 1.52148, 0.160482]], "ccc359b9-be61-4af7-a2e2-0596636a3d38": [[-0.612034, -1.31201e-05, -0.2], [0.612073, 0.800077, 0.2]], "bb7d33c1-b375-405d-856d-f2c29beb2464": [[-0.844925, 0.0, -0.40461199999999997], [0.844925, 0.667457, 0.40461199999999997]], "57f7e7c0-8ca3-4eee-b127-5a44c76a9a61": [[-1.029266, 7.8e-05, -0.32494300000000004], [1.029266, 2.39078, 0.324937]], "78ccd091-a276-44ad-b87f-ed984d24caba": [[-0.9, -1.83697e-17, -0.3], [0.9, 2.4, 0.3]], "643832f7-01af-463a-b30a-262090ff1d8c": [[-1.39679, 5.201230000000001e-06, -1.0703], [1.39809, 0.92716, 1.06977]], "3d9950f3-d678-4705-9544-5a48c3cb5e6a": [[-0.9274460000000001, 0.000440918, -0.191494], [0.9274460000000001, 1.32016, 0.191486]], "004a97c2-124f-4dd2-97da-900af7ad6ca8": [[-0.597634, -1.59904e-05, -0.490042], [0.597599, 0.766862, 0.489711]], "6ae66fb5-1231-4217-8326-10ccc372098b": [[-0.7597029999999999, 1.0904400000000001e-07, -1.1630500000000001], [0.7597029999999999, 1.0826099999999999, 1.16384]], "51dee0aa-9250-4770-ac00-85c12db9233d": [[-0.22241499999999997, -9.676759999999999e-18, -0.2], [0.22241499999999997, 0.597534, 0.2]], "fc948084-5412-40fc-9309-d889f45e8c62": [[-0.24560400000000002, 0.0, -0.25413399999999997], [0.24560400000000002, 0.774979, 0.25413399999999997]], "14dabc5f-d720-4651-b0c6-9366f1e56360": [[-0.290358, 0.0, -0.290358], [0.290358, 1.082563, 0.290358]], "0ce8692e-8050-4fcd-a86c-ebe8e32db354": [[-0.39386000000000004, 4.3e-05, -0.327048], [0.39372500000000005, 0.782912, 0.326986]], "01839053-f5e1-4165-b492-85836be84194": [[-0.45531999999999995, 0.0, -0.400678], [0.45531999999999995, 0.729153, 0.400653]], "17c203fc-33ef-3c53-8e15-da86e53d3fdc": [[-103.6523, -0.011, -49.9147], [103.0375, 65.9897, 45.9931]], "f50dada9-bd80-4461-a2b9-4cc55cd5d0b6": [[-0.512429, -0.00011866700000000001, -0.512435], [0.512371, 1.27123, 0.512585]], "04714e6c-2095-4bd0-9158-bbfd92db067d": [[-0.223262, 0.000167, -0.220906], [0.223262, 0.774868, 0.22098700000000002]], "cca8222a-eff6-4142-9907-f57c15554033": [[-1.09602, -3.05176e-08, -0.45338999999999996], [1.09588, 0.9682769999999999, 0.453086]], "25cdf056-9a35-4777-a309-bb8b9473bca3": [[-0.391923, 0.000225, -0.391923], [0.391923, 0.47518099999999996, 0.391923]], "7564abda-4eec-4595-8545-003d483d29dd": [[-0.227319, 0.0, -0.227319], [0.227319, 0.550331, 0.227319]], "6b7a05c2-49b8-4610-babb-85bc2dc549fe": [[-0.446373, -0.000357778, -0.46378], [0.446373, 0.774524, 0.46378]], "77a87475-7ea9-48cc-9dbd-6ddeea06364c": [[-0.768605, 0.0, -1.096643], [0.768602, 1.03355, 1.096274]], "b5c0dfbc-7118-48e6-9168-df0c173029f2": [[-1.30379, 1.52588e-08, -0.509617], [1.30291, 0.826116, 0.5097619999999999]], "9270ae91-dd5b-452e-ad61-03b5760bf025": [[-0.293334, -0.0013933499999999998, -0.129115], [0.293334, 1.14762, 0.130206]], "293a53e3-09ac-4041-881c-49f0f751ddf4": [[-0.20439, 0.0, -0.228547], [0.20439, 0.859185, 0.228547]], "5d8f1711-260e-3487-b4a3-9956a5b5c29a": [[-184.168, -0.0, -66.7597], [180.591, 112.1531, 66.7597]], "620b0c30-77f4-3362-8a72-c02be814ba4f": [[-0.9144, 0.0, -0.46028199999999997], [0.914399, 0.762, 0.46028199999999997]], "53899cdb-44a9-4bfd-b231-1c6a27c8bad4": [[-0.750037, -1.55122e-07, -0.269182], [0.7500960000000001, 1.03, 0.269002]], "72366b16-480d-4a80-ad7b-e70801f44b0d": [[-0.522316, -1.44496e-17, -0.268215], [0.522316, 0.873176, 0.268215]], "1a258aa9-1d34-4a88-a801-3c94adefd3fd": [[-1.29881, -2.74896e-17, -0.522398], [1.2990199999999998, 1.0891, 0.522741]], "eb0f2ec5-10d5-42a4-bd5b-e5ebf8d7aae1": [[-0.26824200000000004, 2.57707e-05, -0.266915], [0.268274, 1.01837, 0.266835]], "cb57c543-0cfd-4446-bd7d-7f3c27f00c37": [[-0.22627, 2.98916e-18, -0.076867], [0.22627, 1.04721, 0.076867]], "c894d593-ad87-445a-b795-9a1a7e4294b3": [[-0.481153, 0.0, -0.464302], [0.480404, 1.1526990000000001, 0.465211]], "f2f19a8b-743d-4796-b630-7999af80fc82": [[-1.06885, -9.89986e-05, -0.508889], [1.06881, 0.7634059999999999, 0.5097809999999999]], "90193267-035f-446f-abb5-bada9547d0f0": [[-0.361773, -2.8421700000000003e-17, -0.3615], [0.361773, 0.790258, 0.3615]], "4f29377b-3127-4aa2-a082-89df9245f564": [[-0.431642, 4.55212e-08, -0.212503], [0.431643, 0.3188, 0.21259699999999998]], "90863d56-f498-4eb4-96dc-ff39996bedea": [[-1.124122, 0.0, -0.41007899999999997], [1.124122, 0.730877, 0.410067]], "0f5b3d0c-9eb7-4de8-ba59-ec3b7a3e426c": [[-1.31, 0.0, -0.289285], [1.31, 2.5, 0.289285]], "137a8b0c-4428-443d-84f2-b2115ee93a37": [[-0.943064, 0.0, -1.099002], [0.943064, 1.153283, 1.098953]], "9ec3b578-c1f6-46c3-8fc4-08aeb8749fac": [[-0.724524, -7.63487e-06, -0.32589100000000004], [0.724521, 0.8796550000000001, 0.32591299999999995]], "700e09db-0606-3f27-a61d-acdd563cb2f2": [[-72.4046, -0.0515, -72.7897], [72.4046, 71.3911, 72.7897]], "841d4712-38d9-450b-8d58-7a93a9045a3b": [[-1.534073, 0.0, -0.5258550000000001], [1.534073, 0.7826380000000001, 0.5258550000000001]], "66351e96-10d3-42fa-9edd-85ddb41f6467": [[-0.97702, 0.0, -0.271692], [0.97702, 0.621403, 0.271692]], "62893e33-8821-4942-9272-3dca43765835": [[-0.11256000000000001, -2.1902e-06, -0.112522], [0.11251699999999999, 0.918955, 0.112522]], "bbd64595-79a3-4f53-8a2e-a0e40fe98879": [[-0.430207, 0.0, -0.412834], [0.430207, 0.495833, 0.41253500000000004]], "b9679ee0-bafa-4198-b63a-4063b53d4f26": [[-0.22034700000000002, 0.0, -0.22034700000000002], [0.22034700000000002, 0.5713940000000001, 0.22034700000000002]], "29079d9c-88dc-4b71-98ff-8cbfdd8fbc75": [[-1.07614, 6.66134e-17, -1.1376600000000001], [1.07631, 1.5482, 1.1376300000000001]], "936c6cb9-129e-4bb0-9d86-6587ca83b952": [[-0.531256, -0.000372034, -0.135869], [0.531303, 0.8536839999999999, 0.135079]], "18a160ad-e189-431b-9191-365f62084a5b": [[-0.0842041, -0.000141689, -0.0847089], [0.0846269, 0.6374989999999999, 0.08448399999999999]], "5a0f0f5e-56be-4e2d-a2aa-74e1a280a6d8": [[-2.15585, 1.5258800000000002e-07, -0.598745], [2.15529, 0.833432, 0.598008]], "8164e0ef-5dba-4ca0-888b-54706c212df0": [[-0.200162, 2.61979e-09, -0.200162], [0.200162, 0.391315, 0.200162]], "0c7b7a60-8ad6-4c27-a962-eb31072c8c42": [[-1.079414, 0.0, -0.400245], [1.079719, 0.66875, 0.400245]], "78d8e3dc-8305-30e4-9d9d-e61eb78cb75a": [[-0.498938, -0.000103, -0.21014600000000003], [0.498938, 0.8632899999999999, 0.207296]], "5fee4e63-1120-44d3-a690-c256b2b17edf": [[-0.596992, -3.4776399999999996e-17, -0.596324], [0.597228, 0.378607, 0.5962189999999999]], "5fd25280-aba1-3b3b-b8b6-3caf08d22ee2": [[-0.524458, 0.0, -0.241859], [0.524458, 0.529157, 0.241859]], "71507924-b2b4-4cf7-ad97-7c442f8d58af": [[-0.19209099999999998, 1.0321899999999999e-17, -0.191223], [0.193071, 0.985294, 0.192588]], "1032767b-b1ee-46e7-b0c2-813b4f9ce2d4": [[-1.011279, 0.0, -0.37205], [1.01128, 0.8127150000000001, 0.371888]], "642db79d-aeba-4071-a9cf-08980d606e18": [[-0.82904, -1.09797e-17, -0.200688], [0.82904, 0.880252, 0.200688]], "325efbab-7eb5-4f8e-bdf8-b16b7a0b2aeb": [[-0.444283, -0.0, -0.44319699999999995], [0.444283, 0.9840099999999999, 0.443198]], "8e2509fd-0407-4aea-af54-eb1e13e83737": [[-0.713565, -0.00038237100000000006, -0.235262], [0.713596, 2.22602, 0.23537299999999997]], "42220d5b-dc49-47ae-9620-43f91a99a530": [[-0.480734, 0.00045900000000000004, -0.486821], [0.48033099999999995, 0.990229, 0.48586599999999996]], "0fc3e54d-03cd-4621-87e5-013f36c3092a": [[-0.2, 0.0, -0.2], [0.2, 0.617571, 0.2]], "1d553200-d05c-403d-8781-9741e12caf32": [[-0.327843, -1.10282e-08, -0.252819], [0.327843, 0.533651, 0.252819]], "f0f29d03-6100-461e-80f9-0549e3ffa991": [[-0.20060199999999997, -1.06581e-17, -0.17700700000000003], [0.200607, 0.374728, 0.177002]], "cc9b9e89-c910-41a1-b630-8e9ca0e43a51": [[-0.66865, 1.7635500000000002e-23, -0.319129], [0.66865, 0.449646, 0.319129]], "4cee1e8f-b159-3f73-a9b2-a5683eddabd1": [[-0.273232, -1e-05, -0.273439], [0.273232, 0.837817, 0.272096]], "706c1543-1bd3-41ff-9c6c-6a00ccc30163": [[-0.22307200000000002, 0.0, -0.22307200000000002], [0.22307200000000002, 0.5707990000000001, 0.22307200000000002]], "588a688f-0e80-4258-bd27-2a3ade531984": [[-0.24855799999999997, -2.4164699999999996e-10, -0.255609], [0.24852900000000003, 1.03513, 0.255877]], "5157b498-3cdf-4513-bd97-237358b1979e": [[-0.269548, 0.0, -0.290472], [0.269548, 0.78146, 0.290582]], "faaf7e8d-5c83-4427-870b-4022238f5a98": [[-0.819502, -2.28882e-08, -0.256905], [0.819502, 2.35458, 0.256905]], "07d2b86d-bf97-4893-8427-13e2a61f1fc5": [[-0.32354999999999995, 0.000113, -0.382328], [0.32354999999999995, 1.1189149999999999, 0.382516]], "803d2fa0-6380-4436-a548-604a0a70f2d7": [[-0.459521, 0.000302, -0.467632], [0.459504, 0.9642310000000001, 0.467632]], "67edc3fa-0342-46fa-b7bc-73c4b64bc004": [[-0.33942900000000004, -6.0214300000000004e-05, -0.34342599999999995], [0.3393, 0.8053539999999999, 0.343432]], "5e77e909-a5ac-4ab7-90c8-5c5187dc3309": [[-0.548238, 0.0317532, -0.549514], [0.55079, 5.61017, 0.549514]], "0c409bce-5f41-4d5c-8b74-1577e843d604": [[-0.261937, 0.0, -0.269345], [0.26196200000000003, 0.8463249999999999, 0.269345]], "efdb0067-0e99-4db1-802b-8f4694fa3cb9": [[-0.862528, -0.000462452, -1.1258299999999999], [0.862483, 1.5307300000000001, 1.1268099999999999]], "fbbb2bdc-5e66-4173-8cd3-3702e0037bb7": [[-0.295363, -0.000445549, -0.18939399999999998], [0.2955, 0.650433, 0.188584]], "5f5c6f4b-c7bf-4ea8-a287-112d4d843ad2": [[-1.66579, 0.0, -1.07881], [1.6658099999999998, 0.858825, 1.07921]], "81f45f40-f24a-4973-aac5-6a91e0799c89": [[-0.960405, -2.8557600000000003e-05, -1.13549], [0.960405, 2.22015, 1.13323]], "06c15b5e-2354-43f0-bef4-82ec94ee9ee2": [[-0.35484699999999997, 0.000343, -0.34338700000000005], [0.354849, 1.066311, 0.34263]], "5dd30134-a823-4250-ab37-85b66bf4f598": [[-1.02885, -5.61541e-17, -1.15554], [1.02881, 0.818326, 1.1559]], "2be2d0ea-23f7-4955-a433-e3d2c6a4c55b": [[-0.275, -1.18201e-17, -0.206963], [0.275, 0.55, 0.206963]], "02048b39-096a-454b-82d8-26a1c323b8ac": [[-0.40212899999999996, 0.0, -0.34025], [0.402322, 0.922579, 0.33975]], "763ea3ee-03bb-4897-80e8-fc27824f1615": [[-0.602405, 0.0, -0.341548], [0.602406, 0.363898, 0.341092]], "4b8300cf-8a81-4be9-a54f-b2984d867636": [[-1.0, 0.005, -0.300001], [0.9990000000000001, 0.783027, 0.300001]], "6c7bf8e0-37a2-4661-a554-3af2b1e242d6": [[-0.952262, -0.000917535, -1.11602], [0.9524330000000001, 1.1083, 1.1139400000000002]], "5eaf887c-3046-49b3-9210-721c372385a1": [[-0.915788, 0.0, -0.242416], [0.915788, 0.50823, 0.242416]], "cd5dfd5c-f75a-4f11-aab8-882d848c7f7d": [[-0.34624499999999997, -1.3060200000000001e-17, -0.239473], [0.34624499999999997, 0.485713, 0.239473]], "7c9597fd-ca94-409d-a788-4268a4fa9096": [[-1.0253700000000001, 0.0, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "4baafa04-a9f3-453b-8c8b-5633de41435e": [[-0.9, -2.4376300000000002e-17, -0.4], [0.9, 0.7402639999999999, 0.4]], "592fe7a9-4678-4145-aaae-6c98ebc9bddd": [[-0.930154, -1.05563e-17, -0.186085], [0.930154, 0.44416100000000003, 0.186204]], "dcda2b87-93fa-4056-95e7-f7844785e187": [[-1.17856, -5.0544700000000004e-08, -0.526697], [1.17866, 0.867496, 0.526701]], "77c8d965-9d21-4ac6-9213-7a20ea56b3fb": [[-0.8911560000000001, 0.0, -0.309218], [0.8911560000000001, 2.6751, 0.308873]], "0c2ffcbe-eb69-4531-b4ae-05be4830a2ee": [[-0.773211, -0.000469935, -1.23596], [0.773189, 1.04957, 1.23594]], "3f79ba42-44ea-4720-939b-541221ccb4d6": [[-0.82, 5.69033e-09, -0.254924], [0.82, 0.890001, 0.256054]], "4cfc5497-ba87-4e22-96e2-8537044e336b": [[-0.106141, 0.0, -0.117979], [0.106141, 0.7714799999999999, 0.117979]], "7f3277c2-9e5c-40c2-8b45-c4436fc147e6": [[-1.04173, 2.13491e-07, -1.05319], [1.04173, 1.64246, 1.05315]], "0eac6b3d-dc20-4937-9005-40fa478b1d60": [[-0.740304, 0.000222, -0.770691], [0.7401789999999999, 0.9318040000000001, 0.770883]], "7f602f0c-f8f4-4e2c-92aa-054652d17993": [[-0.240572, -1.6566700000000002e-05, -0.228781], [0.240572, 0.8445569999999999, 0.228805]], "51012e0a-9506-41b4-a2f9-460968e5f04f": [[-0.243495, 8.2e-05, -0.243347], [0.243495, 0.621074, 0.243347]], "b3d5c356-4f91-4d01-a8b6-f76b5c7c289a": [[-1.0875, 1.20582e-07, -0.200033], [1.0875, 2.375, 0.200033]], "ab48c542-dfb3-4617-96de-478ba09d1e29": [[-1.05871, -0.000242409, -1.04331], [1.0579, 1.21414, 1.04294]], "29570056-ebce-4b38-b9f6-550b3253cd67": [[-1.245256, 0.0, -0.432871], [1.245256, 0.7944110000000001, 0.432856]], "7db135d1-496d-4bae-924c-54e6e6d945ac": [[-0.7878350000000001, -9.68264e-05, -0.566066], [0.7878350000000001, 0.750312, 0.566136]], "09fab2ad-8561-3fa8-a512-d1737f573b3d": [[-68.7649, 0.0, -43.8597], [68.6155, 73.385, 44.5197]], "067772b4-1484-4d66-9ccc-2d2513ee93f8": [[-1.55769, -0.0010442700000000001, -1.09694], [1.55824, 0.921678, 1.09554]], "52ec24b9-9cf2-4ad6-ae45-cdf976f006f4": [[-0.387456, 0.0, -0.234634], [0.387456, 0.310442, 0.234634]], "24fd57d5-c579-434b-b67f-49e0661d8660": [[-0.55, -1.6594e-17, -0.275], [0.55, 1.9806700000000002, 0.275]], "d4f7f73e-4017-421c-86de-e67cbfef6740": [[-0.675826, 0.000153, -0.294014], [0.674851, 0.6184080000000001, 0.293897]], "747d8698-8c32-460e-911c-3dc8a1d3c988": [[-0.222323, -0.00021758799999999998, -0.222323], [0.222323, 0.741457, 0.222323]], "35fdd39d-c6cb-4896-b8e3-735d836b725f": [[-0.30470600000000003, 0.000111, -0.293739], [0.30447, 0.8863890000000001, 0.293739]], "0b433747-5a83-348f-a967-68c0af86d75e": [[-0.373702, 0.0, -0.171696], [0.388298, 0.8127960000000001, 0.183906]], "70f49095-cc81-45e0-8892-a3a246502fde": [[-0.55814, -1.38805e-17, -0.260882], [0.55814, 1.4032200000000001, 0.260894]], "242fc996-7aa9-4e3e-9570-2b0373d86602": [[-1.8943199999999998, -3.79722e-05, -1.21166], [1.89421, 1.04516, 1.21048]], "6592885d-d992-3520-99af-68938059d874": [[-33.8623, 0.0, -31.4304], [35.7658, 79.3736, 37.2192]], "553f8389-1d95-4507-b5a6-7bf5c94cb691": [[-0.217932, 0.0, -0.217932], [0.217932, 0.48810699999999996, 0.217932]], "faba8295-aa0d-421c-8f92-3f1b65b82693": [[-0.26610700000000004, 0.0, -0.26610700000000004], [0.26610700000000004, 0.44107199999999996, 0.26610700000000004]], "849584a3-0a9f-4e53-9859-3faf71d6ee2b": [[-1.16705, 2.22045e-17, -0.481843], [1.1676600000000001, 0.785959, 0.48448]], "5b2d6f6d-789f-4b24-a907-93fc6a026bcb": [[-0.561323, 0.0, -0.383123], [0.561323, 0.333758, 0.383123]], "1f7e9f56-c6ea-441a-816d-a4546230b783": [[-0.95473, 0.0, -0.188888], [0.95473, 0.7328990000000001, 0.188888]], "83af51b1-b177-4316-9d14-a3e44bb0b4e2": [[-0.37494999999999995, 0.00016199999999999998, -0.420364], [0.374408, 0.912273, 0.420157]], "c3d71b27-489a-46e0-bdda-4ea285d1cefe": [[-0.6352920000000001, 5.99846e-08, -0.183269], [0.6352920000000001, 0.906482, 0.183269]], "409ae7cf-1cbe-4d88-8936-80d192c168b5": [[-0.27555399999999997, -2.41966e-06, -0.268017], [0.27548300000000003, 0.852915, 0.267578]], "c2e49cf1-7c5d-4979-ae7f-837bfb79acd6": [[-0.31160499999999997, -1.7654499999999998e-17, -0.313302], [0.31160499999999997, 0.666036, 0.313302]], "4556a7a9-3cd9-4660-81fe-09edba88ad46": [[-0.421717, 0.0, -0.545943], [0.421717, 0.9832110000000001, 0.545935]], "2489336f-43ec-4e9b-85f6-b7615bbea9c6": [[-1.06595, -0.00144729, -0.45807499999999995], [1.06598, 1.26392, 0.457408]], "1b0d1b9f-918b-4423-bf26-71b1ad2dd5b3": [[-0.252626, 0.0, -0.264086], [0.252626, 0.120321, 0.264086]], "65444aca-6dc7-46bb-b572-655ff682ac96": [[-0.081501, 0.0, -0.024193], [0.08152100000000001, 1.374643, 0.02419]], "05ddba2d-6a8a-47d0-a8fc-90ebf5df2871": [[-0.368827, -1.86695e-17, -0.307356], [0.368827, 2.27443, 0.307356]], "058581dc-2c4f-46b6-8648-7637dec10d07": [[-0.365478, 0.0, -0.40252499999999997], [0.36578200000000005, 0.96505, 0.40252499999999997]], "83db09d8-0c4c-4b13-8909-404bdf4ea3ec": [[-1.17997, -2.38338e-07, -1.36314], [1.1791200000000002, 1.2776, 1.3618199999999998]], "661e51fd-f842-4ae8-b22b-81b9cf9b264b": [[-0.327813, 0.0, -0.29084], [0.327813, 0.6892929999999999, 0.29084]], "070c3dec-0acd-3e75-ad61-8ef2ff3972a1": [[-0.326536, 0.0035759999999999998, -0.512142], [0.326536, 0.792087, 0.528413]], "0a4431a4-7214-32eb-88ff-6954da29a2da": [[-38.2994, 0.0, -33.9281], [38.2994, 75.9244, 33.9281]], "408eb682-fb58-4be8-ae03-4ef613f8699d": [[-1.25265, -9.2733e-05, -0.520176], [1.25277, 0.7799200000000001, 0.517471]], "72025cdb-7e0f-4e71-b5f8-d040817c25ec": [[-0.40177399999999996, -0.00040864600000000003, -0.418858], [0.401721, 0.7424769999999999, 0.418653]], "0d3745eb-68c4-4252-802d-0c91c2e7b2f3": [[-1.1709699999999998, -0.141473, -1.12939], [1.17197, 1.29856, 1.14357]], "52207c6e-798a-4bdb-b662-fd21b1de678f": [[-0.7699079999999999, -0.00064432, -0.194193], [0.769995, 0.345167, 0.194151]], "7809e75f-4cb5-4490-9029-3c67e635ab5b": [[-0.270541, 0.0, -0.288746], [0.270541, 0.925928, 0.288746]], "4b584db8-5099-4709-a7da-7be121ca2892": [[-0.5642739999999999, 0.0, -0.49340000000000006], [0.56393, 1.0008190000000001, 0.494196]], "42e02828-636f-46e6-97d9-a0ba6f97354f": [[-0.31758600000000003, -0.000153967, -0.37856900000000004], [0.31747800000000004, 0.9022870000000001, 0.37908299999999995]], "bfcc6663-f67a-499d-b5f6-ad7b9d075fb1": [[-0.64556, 0.000279, -0.5795790000000001], [0.64604, 0.688595, 0.579602]], "adf75fe7-4869-4bea-967a-4f1c6404c7ba": [[-0.7, -2.14939e-15, -0.177815], [0.7, 1.1364400000000001, 0.177815]], "a04ed588-e991-47a8-aeb8-0346001bcbbf": [[-0.595827, 0.0, -0.201645], [0.59587, 0.83179, 0.201645]], "f9829fcd-7995-4c6b-b035-124e26f87e80": [[-0.706778, 0.0, -1.177247], [0.707086, 0.829958, 1.177248]], "6e78d98d-b928-4c02-a97a-9ace2b032589": [[-1.94263, -0.000315972, -0.880214], [1.9423300000000001, 0.810106, 0.880627]], "8f4eb5e2-337c-45f5-8b64-803c6ecdc760": [[-0.362267, -0.000190875, -0.418868], [0.361877, 0.902475, 0.418718]], "e1c0a9d5-4193-4878-9a36-989e45094713": [[-0.364499, -5.1321300000000006e-05, -0.375043], [0.36424300000000004, 0.760518, 0.375186]], "59f44afe-59ca-4281-9a2e-753322f2542e": [[-0.20476299999999997, -1.1358700000000001e-17, -0.20810800000000002], [0.20476299999999997, 0.388328, 0.20810800000000002]], "9cc4cbf6-c2d6-4c20-93a5-f7603c8cd6a4": [[-0.26776900000000003, 2.9999999999999997e-06, -0.268604], [0.267785, 0.8213280000000001, 0.268416]], "5dd34946-e294-4dd4-90fb-715417f123ff": [[-1.1546720000000001, 0.000879, -0.44337200000000004], [1.154456, 0.895521, 0.443089]], "006f9cee-42d9-49ae-bd2c-b790f96a404a": [[-0.41834400000000005, -1.6804299999999998e-05, -0.45899999999999996], [0.41834400000000005, 1.4557200000000001, 0.459034]], "a2c446e8-02f3-418b-9f39-0c645379f13a": [[-0.790538, -7.62939e-09, -0.202972], [0.790538, 0.9307380000000001, 0.202972]], "011a0370-fe70-404e-b61c-15057a3a98c5": [[-0.6227750000000001, -1.76375e-17, -0.312082], [0.6227750000000001, 2.29863, 0.312082]], "2f001052-5298-4548-bcc8-27aa9282b3ab": [[-0.24043299999999998, 0.0, -0.24043299999999998], [0.24043299999999998, 0.45191499999999996, 0.24043299999999998]], "1f103dc9-48e6-4eb2-8b37-0124b68e5401": [[-1.048632, 0.0, -0.40726999999999997], [1.048632, 0.971727, 0.407265]], "ce26b666-e786-417d-8261-cd5b1b6dbb15": [[-0.622278, 0.0, -0.622309], [0.6222829999999999, 1.248091, 0.622189]], "80d36ff8-de60-4fd9-8f2e-1cca84d4ebbf": [[-0.6633209999999999, 0.0, -0.26569], [0.6633209999999999, 1.9662979999999999, 0.26569]], "65854cf3-25d9-4c26-b102-65b72a2464c2": [[-0.6, -2.20698e-07, -0.21076799999999998], [0.6, 0.87, 0.21077200000000001]], "35621d9e-0f8b-402c-815c-3b2606ed7d44": [[-0.304876, 0.0, -0.305078], [0.304876, 0.494271, 0.305078]], "61bbf21a-9491-4f0c-a82c-2f55def9ed95": [[-0.42241599999999996, 0.0, -0.403437], [0.42241599999999996, 0.855212, 0.403437]], "00c0ed18-9131-41f1-976e-52a8be0a0a21": [[-1.0401099999999999, 1.81387e-17, -0.296229], [1.0401099999999999, 2.40998, 0.295989]], "3a30caab-dd06-31f6-a81a-3162024f4c20": [[-84.6495, 0.0, -42.8265], [84.6495, 84.4519, 42.8265]], "d7d77585-2064-4254-8c65-2c46c13167ff": [[-1.1545699999999999, 7.62939e-09, -1.34375], [1.1545699999999999, 1.1868699999999999, 1.3442599999999998]], "90a46fc3-e6e9-4d41-847e-dd93cee3aa26": [[-1.11694, -2.10968e-17, -0.416967], [1.1169799999999999, 0.71211, 0.41759799999999997]], "24256cdd-d004-4eda-aea6-3eb94dbb4326": [[-1.44256, -1.69083e-06, -0.556666], [1.4425299999999999, 0.829963, 0.558515]], "05929327-fc23-4b20-9741-b94c24c2932a": [[-0.401004, -0.0007579329999999999, -0.42661499999999997], [0.40118000000000004, 0.896805, 0.427458]], "7da4a468-6552-4afc-baac-ba9a4e6c5a7a": [[-1.00475, -1.15465e-17, -0.254477], [1.00475, 0.569737, 0.254477]], "dc80ab4f-570f-435b-9357-46efc09077ef": [[-0.747247, -2.84983e-09, -0.751654], [0.747246, 0.282775, 0.751654]], "1a3f15e5-0c08-4975-a4ea-c2f993b84b92": [[-0.970669, 0.0, -0.446467], [0.970668, 0.746532, 0.446453]], "b2e16c0c-b9e4-4eba-b911-cc53c2d697fd": [[-0.8344459999999999, 0.0, -0.662362], [0.8344459999999999, 1.12403, 0.662362]], "a8715d51-381f-4fd5-b744-ba8d96a60497": [[-1.10991, -0.000199342, -0.46764000000000006], [1.10996, 0.854569, 0.468067]], "c4b7ea85-4dfe-4588-93a0-7a7b6eefeaae": [[-0.20998, -4.64707e-18, -0.0764868], [0.209981, 0.938275, 0.0763507]], "b7868906-f9a9-4e0a-9ae9-d60e12f41afc": [[-0.34325000000000006, -1.76506e-17, -0.343336], [0.34340600000000004, 0.580165, 0.34396299999999996]], "e8e73a11-88b5-4ea2-8709-7844b49e1922": [[-0.516523, -0.000369164, -0.516523], [0.516523, 0.499, 0.516523]], "187f9f51-4778-42bb-959f-47e4f71636fc": [[-0.58893, 9.4369e-18, -0.201755], [0.58893, 1.42924, 0.201719]], "1ca9ff35-404f-4276-a4a0-ac2800f7aab2": [[-0.834098, 0.0, -0.25023], [0.834098, 0.7560389999999999, 0.25023]], "1a236d41-577e-48b3-a4b4-2f20e58c4f30": [[-0.432252, 0.0007340000000000001, -0.330254], [0.432252, 0.933764, 0.330255]], "e5ba5a74-2b9d-4d05-b8a9-453769db2ac2": [[-0.157871, 0.0, -0.121173], [0.157871, 0.705773, 0.121173]], "9506dff6-1503-4de3-a62a-95ad958b5751": [[-0.8437220000000001, -9.70544e-05, -0.28207699999999997], [0.8437220000000001, 2.45567, 0.282515]], "121967de-6952-4d51-96a3-2b2a07ca4097": [[-0.27436499999999997, -8.379679999999999e-18, -0.192773], [0.27435, 0.7024320000000001, 0.19278099999999998]], "de6fb1e8-9a21-498e-86fb-7cc34ec24229": [[-0.4104, 3.0442199999999998e-05, -0.43636800000000003], [0.410437, 0.941554, 0.437122]], "0444c7ff-18b8-4829-89c0-a4f8002184c9": [[-1.16017, -1.65279e-17, -0.33008000000000004], [1.16017, 2.51756, 0.330095]], "ee523542-4af9-49a6-b48c-30b58308f414": [[-0.172338, 3.0895399999999997e-18, -0.180242], [0.172317, 1.6984000000000001, 0.180247]], "e6c859db-475c-4257-abf3-8f4f379737d9": [[-0.8976080000000001, 0.0, -0.16888899999999998], [0.8976080000000001, 2.281828, 0.16855599999999998]], "0876978e-762f-3ffe-ac4d-aab1fd65d033": [[-0.243387, -0.0, -0.274547], [0.23555800000000002, 0.8468519999999999, 0.258979]], "4b3beea9-a1a6-4a4e-9350-5f4b729bc531": [[-0.769289, -1.8613600000000002e-07, -1.06931], [0.769286, 1.13348, 1.06931]], "5fa958c9-2026-4366-aff4-db59257d0427": [[-0.659602, 0.0, -1.099896], [0.659297, 1.129896, 1.1000020000000001]], "d0ab249c-830c-4f5e-aa0f-3fa975c93c95": [[-0.55, -3.8147e-09, -0.32], [0.55, 0.45, 0.32]], "6e441326-6f24-41f2-b3f0-add6576fc4ab": [[-1.13022, 5.98995e-17, -1.1182299999999998], [1.13143, 1.20387, 1.1183100000000001]], "4811c0a9-2a43-4517-8900-316af368302f": [[-0.856743, 0.0, -0.197911], [0.856743, 0.671909, 0.19791]], "11b006e5-9697-4146-808f-e1e73aa76fc4": [[-0.838509, -5.2294600000000005e-17, -0.955127], [0.839574, 1.11648, 0.9555830000000001]], "57a048b0-eea3-4c8f-8681-b4fe938e0185": [[-0.412377, 0.000113, -0.387926], [0.412305, 0.929232, 0.38750799999999996]], "75c62a2c-4f6e-46a8-b11f-5d718ce86132": [[-0.20601199999999997, 0.0, -0.20601199999999997], [0.20601199999999997, 0.30563, 0.20601199999999997]], "a6bb7b34-43ec-489a-9a92-e9eff5c4eca2": [[-0.305541, -3.26648e-07, -0.230638], [0.305541, 0.48338299999999995, 0.230634]], "5dc5fe32-51c4-4b43-8424-fdd26b72df6c": [[-1.1362999999999999, -0.000118605, -0.525265], [1.13674, 0.879533, 0.524122]], "280cd02b-0197-4b0c-b572-effb80d8a9f2": [[-1.1340000000000001, -0.000211456, -0.450961], [1.1343699999999999, 0.653369, 0.451327]], "51495151-f01a-4e69-8d06-b62b3cc5ef00": [[-1.012043, 8.099999999999999e-05, -1.163173], [1.011898, 0.990131, 1.162921]], "016514ec-7131-4828-b090-22429ed678d2": [[-1.26625, 6.10352e-08, -0.334534], [1.26625, 2.15712, 0.334233]], "39cffdb6-c2c5-49f3-b987-6d4d09718bfc": [[-0.49428400000000006, 2.7000000000000002e-05, -0.388231], [0.49422499999999997, 0.623985, 0.388641]], "6e527916-62b3-4934-b4ea-eba5d4c7242c": [[-1.19747, -0.00016498100000000003, -0.40255899999999994], [1.19838, 0.773485, 0.403042]], "58b85ba6-023b-4698-b9b9-6f62ccedba23": [[-0.28569500000000003, -0.000626085, -0.276585], [0.28559, 0.49924999999999997, 0.276323]], "80a8ba4e-893d-48e3-a696-04493ddddafa": [[-0.16859400000000002, -5.467319999999999e-07, -0.201602], [0.168431, 0.44994500000000004, 0.201279]], "29dce16b-6716-44b9-8aad-2bb55db63dea": [[-0.415685, 0.0, -0.012771999999999999], [0.415685, 0.9474779999999999, 0.012771999999999999]], "1b99f254-0d54-437f-a715-8d8351d99afa": [[-1.09954, -0.000391609, -0.5857439999999999], [1.0990600000000001, 1.51872, 0.585237]], "4874d831-e295-4d5d-a427-88e7414698a2": [[-0.30141100000000004, 0.00117615, -0.301389], [0.30141100000000004, 1.0999299999999999, 0.301433]], "8bbc5728-2827-4bc9-971a-ba23ae82e170": [[-0.9674670000000001, 0.000215, -1.0957080000000001], [0.968331, 1.156468, 1.095709]], "64b3d693-e48a-3452-921c-2e3ebf5e6969": [[-117.2912, 0.0, -54.3563], [117.2911, 77.0084, 54.3563]], "0154b34b-cbbc-4ed4-8eec-04468a0f7e05": [[-1.0, -1.66227e-17, -0.32853099999999996], [1.0, 2.364, 0.328542]], "478b4688-875b-4dd9-872a-bcf208426ab7": [[-0.0660492, -9.6732e-09, -0.0660492], [0.0660492, 0.6670619999999999, 0.0660492]], "50282c8f-43c3-31ff-9cd5-bd7c8b11677d": [[-0.381853, 0.000446, -0.421208], [0.381732, 1.0654080000000001, 0.440626]], "6e3f4735-16d4-469c-bfe2-f37dfe776aba": [[-0.991721, 0.0, -0.249133], [0.991721, 0.942345, 0.249133]], "25b62afd-aed1-3633-a457-a65e37a3d6ce": [[-0.6057939999999999, 0.001257, -0.23917100000000002], [0.6057939999999999, 0.837821, 0.260807]], "f92b65d2-a2d3-4430-a5cb-34a7b5bce7f3": [[-0.9892340000000001, -1.19016e-05, -0.26479800000000003], [0.9892340000000001, 2.0718, 0.264998]], "77298766-32e5-3e79-970a-35fbed132ccd": [[-63.0, 0.0, -33.454], [63.0, 76.3262, 33.0361]], "6c91c05b-d2c9-4281-91d2-47d4baead8ac": [[-0.2854, -0.000124637, -0.276159], [0.285143, 0.499149, 0.275853]], "171e6880-ee7d-42e4-9dc4-5ef59e42656b": [[-0.262146, 2.88313e-05, -0.271242], [0.262151, 0.827465, 0.271242]], "6aadf8da-aae1-47b3-a738-b1bf0f7a773b": [[-0.839037, -7.54012e-05, -1.2532299999999998], [0.839036, 1.07117, 1.25285]], "c449f264-f242-43c0-b747-1c007eb2ce41": [[-0.41693600000000003, -7.99874e-18, -0.275], [0.41693600000000003, 2.0533099999999997, 0.275]], "9f6f8c41-b485-4201-96dd-5c44368d6bf5": [[-0.276015, 0.0, -0.234058], [0.276015, 0.656517, 0.234058]], "a9b4fcd0-3343-4a36-88dc-f9e9cd9ce0e0": [[-0.29069, 2.2000000000000003e-05, -0.223752], [0.290804, 0.563435, 0.223741]], "60ea772c-6686-4692-bfd6-3870bb49f079": [[-0.872962, 0.000256, -0.397084], [0.8729819999999999, 0.766164, 0.397084]], "6dd3a9bf-612b-44e6-85bf-cfc02a55c377": [[-1.27551, -0.000690023, -0.42399299999999995], [1.27543, 0.723773, 0.424321]], "bedc24b3-00e4-44dc-b102-d642b4677895": [[-1.4799, -0.000146582, -0.60073], [1.4799, 0.919278, 0.60073]], "aef4f90c-6ee3-493e-8b08-6f64a94986e4": [[-0.27623000000000003, 7.84578e-05, -0.275422], [0.276526, 0.335413, 0.27505199999999996]], "e78b5220-37e4-49e0-abe9-851704b0a8bd": [[-0.39278100000000005, -0.0, -0.40428400000000003], [0.392778, 0.910921, 0.40428400000000003]], "2503a513-954d-458b-9714-4744ba64cccc": [[-1.18821, -0.000377387, -1.09256], [1.18696, 1.20878, 1.09267]], "e8798eef-1d0a-4bb4-8f20-da38b09ec561": [[-0.112698, -3.23382e-06, -0.112699], [0.11270300000000001, 0.8701720000000001, 0.11270300000000001]], "8ae20f2f-2c44-4bb8-854e-11b4387350ed": [[-0.221478, -5.1958399999999996e-17, -0.222137], [0.22142299999999998, 0.405154, 0.22239699999999998]], "5e6fda22-246b-4d43-9690-36cc3b44576f": [[-0.35001800000000005, -2.6581999999999997e-05, -0.25], [0.35001800000000005, 1.10018, 0.25]], "42061aa6-19bd-44f8-95db-e91d3fc90d54": [[-0.253555, -0.000426618, -0.284196], [0.253713, 0.920888, 0.28413299999999997]], "ec2537ec-6180-4fb9-b3bc-2b34202e4ff0": [[-0.175715, -3.01644e-05, -0.175824], [0.175714, 1.9869999999999999, 0.17580400000000002]], "606c7d0c-75f9-4969-a524-b2dd9f71e2ba": [[-0.9125650000000001, -3.05976e-06, -1.05919], [0.9126059999999999, 1.2384, 1.05934]], "c4bcf25e-e3a7-4e06-8dfa-17e3636a2968": [[-0.414659, 2.8999999999999997e-05, -0.426811], [0.414638, 1.039028, 0.426753]], "fb17ffa2-7ee0-4c65-a86f-c3c9b6c61c2c": [[-0.273993, -0.000513155, -0.0501903], [0.273993, 0.6765059999999999, 0.0501903]], "5cbdcd47-3cda-439a-86b8-e39203612d71": [[-0.589523, 3.027e-08, -0.532142], [0.590395, 0.7970529999999999, 0.530839]], "01dd14a2-922a-4f8f-b762-81a29e2de200": [[-0.24563400000000002, 1.88284e-18, -0.246045], [0.24563400000000002, 0.86623, 0.246045]], "a5614b6b-248c-4121-8003-0e2a58244a94": [[-0.394024, 4e-05, -0.424339], [0.39411999999999997, 0.415224, 0.424339]], "799afe9e-984a-40e4-8997-f953a55044e3": [[-0.850012, -2.67029e-08, -0.303103], [0.850009, 2.0, 0.30454899999999996]], "278bc115-a727-4ff8-abfb-647e45bdab46": [[-0.235701, -6.22696e-07, -0.235687], [0.23569299999999999, 0.562771, 0.235723]], "9df1ad87-bcd6-4fda-ab1e-cc67eece0880": [[-0.203304, -0.000265602, -0.203429], [0.20343, 1.22055, 0.203078]], "cca277c5-6a69-42d1-9e28-3bcec3a78ff5": [[-0.783843, -0.00018698699999999998, -1.02583], [0.784247, 1.3421399999999999, 1.02651]], "fe76837c-7750-32e2-881f-037298bb327a": [[-0.510072, 0.0, -0.508329], [0.510072, 0.358, 0.508329]], "9b872898-f8a3-4e4a-bf1e-98b1c4fa0d3c": [[-0.247121, 0.0, -0.276068], [0.247121, 0.811532, 0.27607]], "cc2046fe-59a9-4d17-87de-2f3e727473e3": [[-0.8272660000000001, -9.69826e-18, -0.171374], [0.8272660000000001, 0.7332139999999999, 0.171374]], "cca105b8-df2a-48f9-bc10-7935eb5b82a1": [[-0.5840339999999999, 0.0, -0.194938], [0.5840339999999999, 0.7719849999999999, 0.194938]], "7876eda1-1c08-4c67-98e1-a4285a844787": [[-0.502817, 0.0, -0.657636], [0.502817, 0.44746400000000003, 0.657636]], "469905c1-4977-4700-9e7e-bd931f8cfecd": [[-0.9125, -1.52794e-07, -1.02001], [0.9125, 1.1393, 1.02]], "9c4424b3-ed58-4cf8-b1b5-7c75dcf54286": [[-0.32772100000000004, 1.2304600000000002e-17, -0.23492000000000002], [0.32772100000000004, 0.571702, 0.23492000000000002]], "596e232c-b534-4af4-9c70-3d4182df3bb5": [[-0.600714, 1.04696e-17, -0.171981], [0.600714, 0.566027, 0.171981]], "8cbc55e2-b535-4fef-99a1-c03e792948fd": [[-0.635699, 0.0, -0.323403], [0.635699, 0.43212000000000006, 0.323403]], "1af90188-a986-4823-ba28-98ea51939a60": [[-0.625191, -0.0004996099999999999, -0.6250990000000001], [0.62543, 0.587849, 0.625477]], "0fce5e23-b2c2-49a2-8712-ea6a1af88dc6": [[-1.4758600000000002, -0.000666986, -0.9016719999999999], [1.47519, 0.6789499999999999, 0.9016240000000001]], "c60a4fd7-6abc-429e-86fb-cc2b5010773c": [[-0.273234, -7.829e-05, -0.276024], [0.273213, 0.52837, 0.275891]], "1f6d1921-414a-48bb-b69e-20ff6d8066e5": [[-0.9193000000000001, 0.000123, -1.2466490000000001], [0.917041, 2.4161420000000002, 1.2466490000000001]], "0c90d1fa-20dc-4aa9-bad9-78550f373d62": [[-0.24, 0.0, -0.24], [0.24, 0.489405, 0.24]], "3daa45c8-b9c7-4d7c-9d03-2f1c9d1c85c0": [[-0.307747, -0.00013696, -0.298053], [0.307747, 0.80194, 0.298053]], "42ae9c73-6930-43b5-be00-51232949d22f": [[-0.568329, 0.0, -0.568431], [0.568431, 0.856105, 0.568431]], "01005129-1184-48a3-9aa3-aa6d83793a0a": [[-0.945457, -0.000912088, -1.15848], [1.06548, 1.26839, 1.15937]], "4f7ee4d9-92b0-4e9d-a651-10b63805cddc": [[-0.890978, 0.0, -1.047742], [0.893054, 1.372894, 1.047742]], "7f01f41c-15df-3ba7-aebc-d404ad8583dd": [[-0.234729, 0.0058779999999999995, -0.272366], [0.234729, 0.9983240000000001, 0.272366]], "539fe43a-a9ca-47b7-817f-b2603adcf3a8": [[-1.21735, -6.56915e-18, -0.185304], [1.21735, 2.53192, 0.185304]], "2dc16a6b-7c28-42b6-a5e7-b664a3480a45": [[-0.32079799999999997, 0.00028199999999999997, -0.24479399999999998], [0.32079799999999997, 0.569137, 0.24479399999999998]], "e50ffc76-6993-44ac-ad07-978a9d03f6df": [[-0.36024, -6.55684e-18, -0.107081], [0.36024, 0.42278, 0.107081]], "a9a780db-eac7-43c6-b937-e051cea23684": [[-0.309237, 0.0, -0.465334], [0.308709, 0.8704930000000001, 0.46496200000000004]], "a0334ce1-f75a-4a4e-9b71-9a1dd0172d58": [[-0.378932, 1.89996e-08, -0.201915], [0.377919, 0.814797, 0.201916]], "49270dd7-7db1-496f-a619-1124e638d37f": [[-1.416755, 0.000363, -1.159821], [1.417158, 2.48084, 1.160706]], "e92f5a93-5706-41ba-b778-cc5c2654ec28": [[-0.374634, 0.0, -0.411511], [0.374237, 0.8043720000000001, 0.41134]], "de87ceae-9b3d-4794-a5ed-4e5652166fde": [[-0.450978, -5.5904300000000006e-05, -0.312552], [0.45097499999999996, 0.6496939999999999, 0.31259]], "fd364135-ccd2-41d8-8905-aebfc30735cb": [[-0.835145, 1.52588e-08, -0.245358], [0.83512, 0.8478660000000001, 0.245443]], "9a65c8d9-21a4-49a3-9852-d0c78bcd8ec0": [[-0.860852, 0.0, -0.244528], [0.860852, 0.481113, 0.244528]], "e1e8fb58-c8d2-40fe-8686-b669bc013059": [[-0.674869, 0.0, -0.674869], [0.674869, 0.6999, 0.674869]], "c979d04f-1a34-4f91-b18a-34ec9f3e8154": [[-0.24692499999999998, 0.0, -0.248634], [0.24692499999999998, 1.084948, 0.248634]], "5e4e9a80-2bc9-4212-ad61-dee93d3332f5": [[-1.3074000000000001, 4.26784e-17, -0.722917], [1.30683, 1.9914599999999998, 0.722916]], "6b640ae9-f645-4231-a7d5-a40680a9ede7": [[-1.60002, 4.2829799999999996e-08, -0.139763], [1.60005, 2.2760599999999998, 0.139782]], "d559efac-6999-4439-ba44-88bf0e973544": [[-0.77077, 0.0, -0.342817], [0.77077, 0.548383, 0.342817]], "0dad7f30-4de1-4052-b592-e01344818bb9": [[-0.475064, 0.0, -0.440779], [0.47497100000000003, 0.755591, 0.44087600000000005]], "2c3f7110-59e6-4915-86f2-7b7e89cce084": [[-0.263988, 0.0, -0.28699600000000003], [0.263988, 1.013963, 0.28699600000000003]], "0c51740b-7fd0-4b11-91fe-fb35553d6b4e": [[-0.281516, 0.0, -0.281516], [0.281516, 0.367871, 0.281516]], "1adb3607-0e2b-4f35-8a7f-9c5018c0d2bb": [[-0.957424, 0.0, -0.468531], [0.957424, 0.700839, 0.46837]], "c3e9bea3-dc25-4b23-a26f-793bfa8310d0": [[-0.271346, -0.0, -0.245379], [0.27159, 1.4867160000000001, 0.245136]], "9a352498-e18f-43aa-a9b2-93b680fed9f9": [[-0.841228, -0.000164833, -0.578722], [0.8410639999999999, 0.72758, 0.579175]], "6701a9ea-119b-41c8-a8cb-99cb7e76777b": [[-0.398739, 0.0, -0.178713], [0.398722, 1.788287, 0.178712]], "5e54293a-6a97-3c7e-97df-c488ad146e6f": [[-1.0816729999999999, 1.3e-05, -0.443566], [1.11899, 0.8503189999999999, 0.496764]], "0a3d54c6-c030-444a-aa33-4ba6db9110f6": [[-1.8014400000000002, 0.000246504, -0.883466], [1.8012899999999998, 0.885681, 0.8819750000000001]], "98c8eeb5-c58b-4885-841c-dbc7bc89f187": [[-0.240043, 0.0, -0.145283], [0.240043, 0.22686399999999998, 0.145283]], "47c219c4-c2e4-472c-86c6-ea3f00b28fa0": [[-0.48489699999999997, 0.000119, -0.450542], [0.48563, 1.0583719999999999, 0.45023]], "a816872f-79cb-4c4c-bc79-e316d9e0a032": [[-0.7024779999999999, -1.0532e-17, -0.175], [0.7024779999999999, 0.716899, 0.175]], "f4c89ec6-3ecf-45e2-a6f9-1b7591f4c57e": [[-1.309622, 0.0, -0.610231], [1.309622, 1.156796, 0.6105619999999999]], "6c6d7462-349a-4ef1-b50d-b1fa13038c21": [[-0.877608, -0.000250762, -0.499213], [0.8784529999999999, 0.922, 0.5]], "3d98430c-9006-4e79-984c-f2a131d99333": [[-1.12431, -5.88817e-09, -0.44402200000000003], [1.1247, 0.88893, 0.443798]], "03c297d3-c451-3ae2-b310-cf4d493a6a3a": [[-40.9156, 0.0, -42.101], [39.6469, 87.126, 42.4861]], "5f06224d-307a-4d16-8a1d-9e893b2bb87b": [[-0.405387, 0.0, -0.35014], [0.40598300000000004, 0.842725, 0.35015799999999997]], "b4d96243-b31f-4b44-a194-a159627cc37a": [[-0.218436, 3.8147e-09, -0.424917], [0.218425, 0.45221200000000006, 0.424919]], "1d9f5493-9722-3e65-b82e-445148100577": [[-0.20478100000000002, 0.0, -0.18632], [0.20478100000000002, 0.897111, 0.225991]], "53eaf7fe-a4f0-47b8-8e8d-8892794398bf": [[-0.324913, 0.00045192, -0.266779], [0.324913, 0.525961, 0.266779]], "ec548a59-d27f-4917-906f-7548d9747a90": [[-0.45, 0.0, -0.263294], [0.45, 0.463369, 0.263263]], "fa471522-2ec3-4925-aa44-2a0129cd6b3b": [[-0.558973, -7.62939e-09, -0.215806], [0.220716, 1.19973, 0.215806]], "4d471e2d-7195-4646-8628-f9ce4e8448e4": [[-0.3, 7.42897e-18, -0.3], [0.3, 0.13750099999999998, 0.3]], "c889966b-a66c-4484-9a10-12e521c1555c": [[-0.15160500000000002, 1.3e-05, -0.151594], [0.151599, 0.173124, 0.151586]], "91458a75-fa85-4a0e-9224-1347216cf4ab": [[-1.0645099999999998, -5.79336e-17, -0.990127], [1.0633299999999999, 1.45119, 0.9899899999999999]], "7fb2cca9-2458-47a1-b8e8-994852bcd479": [[-0.40411499999999995, 6.6185e-05, -0.41708300000000004], [0.40411499999999995, 0.9946510000000001, 0.41708300000000004]], "224ec44b-d2f9-43a0-9db5-0e6336eafb76": [[-1.13182, 1.9672599999999998e-07, -0.381932], [1.13182, 2.38348, 0.381932]], "096802aa-59cf-36bd-adcb-9c730e3bdb9c": [[-1.302466, 0.003822, -0.6024660000000001], [1.305951, 0.9117700000000001, 0.598957]], "fd67e3f0-cead-47e4-b402-8449afa1764f": [[-0.800881, 0.0, -0.40063200000000004], [0.800881, 0.7526900000000001, 0.40063200000000004]], "72eafb54-7c4a-4b8d-922c-7a0418d43570": [[-0.217971, -4.7123399999999997e-07, -0.156355], [0.217971, 0.531273, 0.156355]], "2d1906f1-628a-4b9a-8607-47a215e6e671": [[-1.948897, 0.0, -0.5131640000000001], [1.948897, 0.9967570000000001, 0.512899]], "2cb84b41-9cbd-4224-b7e8-acb34573d020": [[-0.8358, -0.000399556, -1.02596], [0.836399, 1.641, 1.02672]], "578ca58a-dffd-3c7b-91cd-11321e6a21a3": [[-0.304857, -0.003424, -0.36853499999999995], [0.304856, 0.8513729999999999, 0.36519399999999996]], "5a21b67d-bac9-4e48-82ea-23a4ef265378": [[-0.450585, 0.0, -0.20179200000000003], [0.450585, 0.9999290000000001, 0.20179200000000003]], "f3f2b1f4-1aab-4142-80ce-8ae78a399e58": [[-0.700001, 0.0, -0.275003], [0.700001, 0.7950010000000001, 0.275003]], "6958e562-68ca-48b8-8e74-2a678f22c8f7": [[-0.277246, 0.0, -0.343124], [0.277246, 0.886651, 0.343124]], "7144f0b0-660e-4451-887d-da8f2285c28b": [[-0.504973, 0.0, -0.555102], [0.50485, 0.7953220000000001, 0.555102]], "d571e838-c39b-4c1c-b008-f3d9c7a78420": [[-0.24310400000000001, 0.0, -0.24174800000000002], [0.24313600000000002, 0.453277, 0.241999]], "a29a17dc-2c53-4206-bbc7-08fa4c4e30b5": [[-0.241932, -0.00029037400000000004, -0.241924], [0.241934, 0.919351, 0.241998]], "017e5119-b882-45b6-8d38-c412c441c328": [[-1.004145, 0.0, -0.45360700000000004], [1.004145, 0.700136, 0.45360700000000004]], "1dad86b2-b916-45cf-8c43-4bedd5469c40": [[-0.293688, 0.0, -0.330833], [0.293689, 0.9301619999999999, 0.33083399999999996]], "4167131b-293a-4c3a-bea1-7c59d3a5a6a0": [[-0.464776, -4.70032e-05, -0.29887], [0.465056, 0.7374269999999999, 0.298841]], "5b48c451-3840-4051-9c78-100ed7fd4164": [[-0.9775, -1.3405899999999999e-17, -0.23800000000000002], [0.9775, 0.721318, 0.23800000000000002]], "2e5ed04f-68fb-4145-a4b6-d284756b6baa": [[-1.286851, 0.0, -0.466018], [1.2861930000000001, 0.835121, 0.466018]], "11c1a971-b8ae-4fa0-b939-fabe5d7e33d7": [[-0.328702, -2.86102e-09, -0.244942], [0.328702, 1.10791, 0.244725]], "d70fba9e-d546-407c-b1d3-67b4cb0d24dc": [[-1.289347, 0.0, -0.427465], [1.289347, 0.949001, 0.427669]], "7522d886-08c1-3c92-a18c-66767a454a85": [[-0.569983, 0.0, -0.436848], [0.569983, 1.227775, 0.436575]], "dac57b28-ac2e-48bf-a7fe-a2848bbe0804": [[-1.439451, 8.9e-05, -0.46658099999999997], [1.439451, 0.784739, 0.466441]], "744af784-3b62-4cb4-bba9-87d5e3650fdf": [[-1.88289, -0.000168311, -0.281483], [1.88262, 2.5166, 0.281269]], "e5fc4a48-5120-48c7-9f72-b59f53a5c34e": [[-0.2464, 0.0, -0.26449100000000003], [0.2464, 0.8148029999999999, 0.26449100000000003]], "db18b256-bdf0-3625-94b4-531d21ba3ff9": [[-0.287827, 0.0, -0.275345], [0.287827, 0.799048, 0.275345]], "55ba0859-3d39-4a04-a1f8-e934087ab599": [[-0.401414, -1.91908e-17, -0.32514499999999996], [0.401414, 0.73005, 0.32514499999999996]], "bfe62151-9b1c-42de-8dbb-67ad5a356beb": [[-0.40384, -4.2137800000000004e-18, -0.104254], [0.40363, 0.944295, 0.104297]], "b24e5a05-9b37-49c9-be80-866e18368a15": [[-0.35, -2.14313e-17, -0.35], [0.35, 0.12072699999999999, 0.35]], "fc806b71-f117-4e7f-8259-4501dabf706c": [[-0.306623, 4.43411e-07, -0.23266799999999999], [0.306624, 0.347571, 0.23264700000000002]], "81b888c5-1b37-4ed3-abec-e67cc3b03156": [[-0.252572, 0.0, -0.310987], [0.252534, 0.8833669999999999, 0.31095]], "0a0558b1-8c4f-4cb9-97e9-c1c3f08a3997": [[-1.08294, -3.47633e-11, -0.227853], [1.08294, 2.13906, 0.227989]], "78ce05ce-c420-44b6-b7de-b9ab6c17622c": [[-1.08267, -0.00118534, -0.319198], [1.08298, 0.6508379999999999, 0.319292]], "dcec4382-3c0e-421a-ab8c-5f353f343213": [[-1.5366, -1.52588e-08, -0.223734], [1.5366, 1.45, 0.22373300000000002]], "2db9e7c7-c7b0-40fa-954f-3e077645fe8d": [[-1.1495600000000001, -0.00264357, -0.449125], [1.14997, 0.8349070000000001, 0.449819]], "e0e7bf64-ebbe-4fa1-9fa0-e7e28788ce7d": [[-0.100326, -6.327379999999999e-05, -0.100326], [0.100326, 1.01072, 0.10032400000000001]], "61afa1c4-5ea0-3a76-a919-bceb388265ea": [[-1.4938470000000001, 0.0, -0.543739], [1.4938470000000001, 0.911691, 0.543739]], "488bb246-4b78-4a4e-9b7e-27ae5380d0d2": [[-0.35204300000000005, 0.0, -0.395658], [0.351419, 0.9304479999999999, 0.395742]], "557f5058-ddf9-4273-b6ca-bd7fffb9d456": [[-0.9369620000000001, 1.80021e-17, -0.303997], [0.9369620000000001, 2.66367, 0.303997]], "0a52cf6f-5039-4606-bf33-cb9057f26fb9": [[-1.01489, -0.000313428, -0.357813], [1.01522, 0.65747, 0.358233]], "53173a08-901c-4486-8eba-b9ed7b9ae6ae": [[-1.32936, 0.000121349, -0.5315059999999999], [1.3296000000000001, 0.945172, 0.532554]], "68243d9c-465c-44d7-89d6-1e9cefca30cf": [[-0.8669, -5.1741e-06, -1.06047], [0.866884, 1.33296, 1.05993]], "18a304d5-8a63-4709-8c0d-65e2a50fe179": [[-0.352842, 0.0, -0.34110599999999996], [0.352526, 0.782501, 0.340843]], "4fa42038-9ef5-4910-ad4b-2cd474bdcba5": [[-1.0424, -0.00107149, -1.04748], [1.04237, 1.0942, 1.04823]], "68f5f5b2-6d6f-438f-9f3d-661881db6ceb": [[-1.0456, 0.0, -1.0462390000000001], [1.0462390000000001, 0.8158620000000001, 1.046102]], "19ab83d2-3378-479d-94ac-ba2930d6874d": [[-0.250026, -0.00015897600000000002, -0.250026], [0.250026, 0.52313, 0.250026]], "6ccfb48d-0b71-4483-93ea-fb4be2cc2367": [[-0.40173499999999995, 3.5281099999999995e-18, -0.105532], [0.40173499999999995, 0.713359, 0.105532]], "44b4655d-55ac-41b9-857d-a51255447f70": [[-0.6631950000000001, 6.76396e-09, -0.981596], [0.6631950000000001, 1.25884, 0.981596]], "7a9e335b-ff78-4965-88a1-9c2c78bed199": [[-0.8797320000000001, -6.728040000000001e-17, -1.1006799999999999], [0.8797320000000001, 1.2677100000000001, 1.1006799999999999]], "c40d9eb6-2a60-4738-9d5b-3ffa4410ab54": [[-0.537586, 9.32591e-18, -0.155924], [0.5375719999999999, 0.394949, 0.155969]], "0a5a346c-cc3b-4280-b358-ccd1c4d8a865": [[-0.46401899999999996, 0.0, -0.37608199999999997], [0.464028, 1.045603, 0.376353]], "0cc9c249-9b8a-4f43-8999-3f0336cb1e77": [[-0.41518, -3.05176e-08, -0.21101199999999998], [0.41518, 1.05711, 0.21101199999999998]], "65ff7ed7-5a6e-40d5-a30a-ec9c346d56c7": [[-0.3, 2.28882e-08, -0.1185], [0.3, 1.2912100000000002, 0.1185]], "1f99f669-6844-4e5b-8a21-1b10b4f154c0": [[-0.398568, 0.0, -0.6500020000000001], [0.398568, 0.7350249999999999, 0.6500020000000001]], "60c22b15-4d9b-4783-a069-1e8cab3d2bb2": [[-0.936546, -1.05712e-09, -0.315471], [0.936546, 2.34, 0.315471]], "c8ba1d71-85a8-4166-84f0-d2c0ba323899": [[-0.250465, 0.0, -0.250213], [0.250465, 0.603328, 0.250213]], "68f7b11e-55bb-4869-bc6a-2081cd575f93": [[-0.992992, 1.52588e-08, -0.555489], [1.0253100000000002, 0.870603, 0.555509]], "91241816-4526-4352-a559-44c06aac505d": [[-0.265675, 0.00028773199999999996, -0.259076], [0.266032, 0.9956579999999999, 0.25934]], "56a54578-a4cb-4a0a-ad61-39f9f89e1270": [[-0.564638, 3.05176e-08, -0.135346], [0.564638, 1.2268000000000001, 0.135539]], "3ca48e55-e0f5-4630-abd3-4c9aad11194b": [[-0.305283, 4.768370000000001e-10, -0.305283], [0.305283, 0.18357600000000002, 0.305283]], "68e36e87-90f0-4ec8-97aa-4d018ddd3118": [[-0.728041, -3.8147e-09, -0.19152000000000002], [0.728041, 0.7008570000000001, 0.19152000000000002]], "d51e0c97-4cf0-4a3d-9020-f86996cea4ce": [[-0.9418340000000001, -0.00021234, -0.191516], [0.9418340000000001, 0.808644, 0.192567]], "b332d456-bfbc-43b3-86f7-52a64d482262": [[-1.08606, -1.47008e-17, -0.240082], [1.08606, 0.8692740000000001, 0.240082]], "2c8e4321-b9ca-4d71-9168-15c85f860667": [[-0.298585, -1.1241e-17, -0.18442799999999998], [0.298585, 0.7132299999999999, 0.18442799999999998]], "018bc154-9b1d-4095-b59a-3748266f54d7": [[-1.01803, -0.000912036, -1.18608], [1.01861, 1.08103, 1.18578]], "81c0f1b5-e03f-4524-b001-76217aa6bff5": [[-0.309437, 0.0, -0.309437], [0.309437, 0.22669899999999998, 0.309437]], "0d7d3df7-1775-4969-afa7-9459777a7b88": [[-0.8487300000000001, -0.000562802, -1.06465], [0.8487300000000001, 1.2271299999999998, 1.06428]], "7495d339-f90a-4773-9fd0-3e4b857ce9b3": [[-0.8817119999999999, 3.5040099999999998e-09, -1.09827], [0.8827240000000001, 1.31264, 1.09827]], "dd7b660c-2613-4620-8318-13b5678232d9": [[-0.323936, -0.0010354399999999999, -0.303026], [0.323693, 0.40901699999999996, 0.302491]], "7190b61b-985f-455b-91d9-cfba4fd7c2f3": [[-0.214221, -1.69541e-05, -0.22333999999999998], [0.214238, 0.973311, 0.223357]], "3ff22edd-9433-457c-b482-5a77ad21fd94": [[-0.44951, -6.637990000000001e-18, -0.18151], [0.44891800000000004, 0.780462, 0.18154800000000001]], "ab7d1c55-e0de-4126-9dae-cba840c4439c": [[-0.245482, 3.9e-05, -0.30772], [0.245545, 0.846068, 0.307766]], "14330155-30eb-460b-ab15-58fe6fca5d5b": [[-1.16154, -7.39094e-07, -1.1096], [1.16084, 1.2776, 1.1097]], "dfd8be29-da49-414a-9338-88eaf643ae83": [[-0.184891, 7.62939e-09, -0.151788], [0.184891, 0.410687, 0.151788]], "2502bec1-6813-4048-afa7-7d84dd95cbbe": [[-0.992423, 0.0, -0.42119700000000004], [0.992177, 0.7866219999999999, 0.421201]], "7ef1aa26-a6ef-487f-bc25-4c263ddaf672": [[-1.17031, -5.8283600000000006e-05, -0.45590200000000003], [1.17127, 0.984008, 0.455009]], "a466bb96-f98b-4d1e-8c6b-466b057b65f4": [[-0.592083, 0.0, -0.176637], [0.592083, 0.45591000000000004, 0.176637]], "6fffb1d4-2373-4eb4-86e5-33236fc05b2e": [[-0.240689, -0.0, -0.21305800000000003], [0.240689, 0.478376, 0.21305800000000003]], "9439bfd4-9d1a-430a-9c5f-acc038e13823": [[-0.349207, -1.21409e-17, -0.350008], [0.349207, 0.38722999999999996, 0.350008]], "48b31960-ad7e-4a99-b890-f1ffe19d48a8": [[-0.9637359999999999, -1.49012e-08, -1.06616], [0.9645050000000001, 1.09886, 1.06616]], "021a2836-75da-4cee-8496-4f5d82317be9": [[-0.49999899999999997, 0.0, -0.8998480000000001], [0.499848, 1.370643, 0.8998480000000001]], "a9926762-1690-441c-b11d-c47181f309df": [[-0.9061920000000001, -1.32478e-07, -1.13085], [0.905931, 1.00293, 1.1312900000000001]], "cc00eba9-17d5-4b1c-ba26-04036b471f8c": [[-0.990188, 0.0, -0.459933], [0.990188, 0.842316, 0.459933]], "cd8080b9-0e90-43bc-9c54-e4392acc80ee": [[-1.10256, 1.97966e-07, -0.424966], [1.10326, 0.721304, 0.426366]], "338d750e-56e8-40f9-a2ea-9a819ee4de78": [[-1.139003, 0.0, -0.45434800000000003], [1.13937, 0.882324, 0.45436]], "536ca8fe-8e90-4d9b-ab8f-a797f3974a45": [[-0.40076300000000004, -4.97144e-05, -0.31600300000000003], [0.400665, 0.831154, 0.315135]], "6f150d3f-ca23-4811-9d23-49eb7c67106d": [[-0.482068, 1.52588e-08, -0.48714399999999997], [0.481958, 0.534855, 0.486999]], "96f2f1f6-8dfd-402e-af95-4f6e6af203c8": [[-0.273548, 1.5916799999999999e-07, -0.177014], [0.273553, 0.55372, 0.177014]], "7fe87256-e9b8-4599-982b-61e732d9226c": [[-0.8000010000000001, 0.0, -0.40381500000000004], [0.8000010000000001, 0.747074, 0.40381500000000004]], "5966378d-25e5-3b81-86df-f7114040c134": [[-1.4988, 0.0, -0.007014], [1.883406, 2.259729, 0.630803]], "43fc8d6b-65b5-457c-b6ea-13575b4ff1bf": [[-1.0471599999999999, -0.000107995, -0.402944], [1.04668, 0.693409, 0.40402099999999996]], "6904414d-2cca-37d8-98e9-71eecd9f6928": [[-1.389004, 0.003327, -0.537635], [1.378982, 0.760941, 0.549677]], "fe00d134-1b91-48a0-9efd-888cad7c7383": [[-0.295658, -2.43006e-15, -0.295956], [0.295658, 0.8831319999999999, 0.295956]], "344d4b32-b60c-4ae2-b170-6dc33fee094b": [[-0.710725, 0.000202, -0.160167], [0.710725, 1.1651690000000001, 0.160167]], "68c271cc-f65f-48b6-8ec2-4dc624a62e53": [[-0.241949, 0.0, -0.213488], [0.241949, 0.565014, 0.213488]], "f50c5818-540d-4067-b2f4-79c25c9fbd9c": [[-1.20055, -2.62643e-17, -0.478254], [1.2006000000000001, 0.816067, 0.478655]], "aec2a17b-33d6-486a-8ebe-f1d573e6932b": [[-0.5491429999999999, -3.24312e-05, -0.549146], [0.549142, 0.459996, 0.549146]], "e6807698-c57c-45e8-a2b8-7ee12fa8345a": [[-1.37, -2.4983e-17, -0.508003], [1.37, 0.787, 0.508003]], "59f5603a-1c04-4c4d-a274-35b705e36038": [[-0.27798300000000004, 0.0, -0.279408], [0.277984, 0.466095, 0.279458]], "f551e961-dce8-4f30-bef5-a66758439490": [[-0.6642180000000001, 1.1000000000000001e-05, -0.352263], [0.6642180000000001, 0.386649, 0.352234]], "2b858658-1f3c-43da-b428-cabae22c8db0": [[-0.845127, -0.000253696, -0.310078], [0.8448690000000001, 0.665578, 0.311403]], "83227860-e5d5-4da1-9a00-1521b2bffa5e": [[-0.47820300000000004, 0.000139, -0.47186], [0.478202, 0.9679810000000001, 0.472097]], "002c9b8e-f05e-4ecd-8d35-0e5a4b1a0ad4": [[-1.47851, -0.000360909, -0.49042], [1.47789, 0.889453, 0.490582]], "321bbcbf-4e4e-4920-af76-14544b24df9c": [[-0.249923, 0.0, -0.247519], [0.249924, 0.7791049999999999, 0.247519]], "771db944-ff6d-4f3a-a105-b6109575d476": [[-0.9596420000000001, -0.000145716, -0.346562], [0.9599949999999999, 0.606039, 0.34671100000000005]], "419f8d5a-7d1e-4762-ad3e-abd968f868be": [[-0.561363, 0.0, -0.37369399999999997], [0.561363, 0.35359699999999994, 0.37369399999999997]], "088f5988-b113-47fb-b2a3-48897de957d9": [[-0.241571, 0.0, -0.316528], [0.241571, 1.0280289999999999, 0.316528]], "827ed0b7-67ef-41fe-b8c4-91e8a36abcba": [[-1.048402, 0.0, -1.14997], [1.045717, 0.998618, 1.149486]], "8726ddab-39b7-4547-bfe1-25d0e21c1ddb": [[-0.405211, 0.0, -0.204946], [0.405211, 1.089062, 0.204946]], "c6e032a3-cd3d-4bb2-b4f9-caab2f27a9d0": [[-0.391198, -0.0007907319999999999, -0.24712199999999998], [0.38998, 1.56217, 0.24651900000000002]], "4ef5670d-67a8-4216-bb08-93e97d3677b8": [[-1.65295, -9.849e-05, -0.504616], [1.65326, 0.909037, 0.5048619999999999]], "0dc269d5-6c25-4165-ba61-87c35149af5e": [[-0.934362, -8.2679e-05, -0.268144], [0.934953, 2.33007, 0.268023]], "84d98403-de64-4376-b7c3-df693c816af6": [[-0.223108, 0.0, -0.243988], [0.223178, 0.799829, 0.243988]], "40799068-9192-4e25-8744-6ce5f388930c": [[-1.00001, -2.8754e-07, -0.307635], [1.00001, 2.20009, 0.307635]], "547bd93e-18e2-4f22-9399-37ffc466d9bf": [[-0.310201, 0.0, -0.312368], [0.310201, 0.788055, 0.312368]], "4d571177-0b55-498c-9457-6bd8f600973a": [[-0.9713890000000001, 6.280490000000001e-08, -0.185582], [0.971388, 0.751721, 0.185582]], "5b85e8ec-9aea-344d-8766-32f741f170a1": [[-0.70123, -0.000151, -0.3675], [0.700284, 0.755848, 0.3675]], "054ae257-bd69-4e8c-b8aa-70430ee6a3d8": [[-0.550013, 0.0, -0.367303], [0.550013, 0.375635, 0.367303]], "ab94bb57-2f95-4090-8eeb-f9dea82e3289": [[-0.793457, -8.66078e-18, -0.197332], [0.793457, 0.670475, 0.197332]], "b22c6b14-354a-4014-b3f9-b1081bc7d6be": [[-0.24996600000000002, 0.0, -0.24996600000000002], [0.24996600000000002, 0.525, 0.24996600000000002]], "645b08b3-d3cf-4948-906e-2e1ce721977a": [[-0.987519, -0.00040715099999999996, -0.40177799999999997], [0.985555, 0.778069, 0.40191699999999997]], "359b4dcc-8937-492e-b7b9-1049780b7357": [[-1.2, -1.4969200000000002e-10, -0.20000099999999998], [1.2, 2.8, 0.20000099999999998]], "7b44b535-cb30-472a-8b6e-df6fd31c848c": [[-0.24901099999999998, -0.000308304, -0.248876], [0.249025, 1.26271, 0.24924600000000002]], "478d0b2c-e927-4f15-a868-3024c1e1b2e9": [[-0.344106, 0.0, -0.47761699999999996], [0.344106, 0.955963, 0.47761699999999996]], "13875681-782a-434a-9aa7-29209a362925": [[-0.264063, 0.00014800000000000002, -0.213394], [0.264173, 0.488486, 0.213394]], "00050a71-6a99-31ff-a778-4dbeddf50586": [[-0.68131, -0.003777, -0.330263], [0.6813089999999999, 2.339509, 0.330263]], "68b71f89-0b42-4e75-ac75-a3f3f5588bbe": [[-0.35267499999999996, -0.000465177, -0.34399599999999997], [0.35298, 1.0245600000000001, 0.34332]], "02057cc8-a1d0-43bf-b8b8-3e1a8aacfe95": [[-0.27284600000000003, -5.55112e-19, -0.180979], [0.27284600000000003, 0.8794, 0.180979]], "0311b280-2ba9-47ff-a09a-af573deb74ab": [[-0.618491, 0.0, -0.5925860000000001], [0.618491, 1.604681, 0.5925860000000001]], "6bc9a4cc-08e4-34ae-904d-f5e7c8867566": [[-0.9700700000000001, 0.0, -0.393583], [0.969448, 0.8265600000000001, 0.393101]], "5ea0d5e2-5215-404d-a42d-92699853d5ac": [[-0.26397200000000004, -0.000100219, -0.20396599999999998], [0.263999, 0.38352400000000003, 0.20401]], "61dc295c-de0f-4947-aff7-14b9e095f011": [[-1.17559, 3.31406e-05, -0.520722], [1.17561, 0.8784839999999999, 0.520867]], "b6fce482-1137-422e-b44b-69c6037a6022": [[-0.262924, -2.02169e-10, -0.207199], [0.262923, 0.824843, 0.20741199999999999]], "c992fdb2-074c-4d31-bf93-e015f6b43c76": [[-0.420702, -3.22226e-09, -0.42095799999999994], [0.420702, 0.365156, 0.42095799999999994]], "189b4c48-c93e-31ac-be11-087e861f5b86": [[-40.0, -0.0192, -40.0], [40.0, 82.8993, 40.0]], "09a8c6e2-eb7f-4ead-bc31-9422d45e47dc": [[-0.609797, -0.0017714599999999999, -0.258097], [0.60974, 0.932397, 0.257822]], "ad798efb-579a-4768-8f2d-13a96a0303d1": [[-0.336346, 4.1e-05, -0.43607599999999996], [0.336346, 0.9500109999999999, 0.43607599999999996]], "dfd2e443-212e-47a0-a4e0-06486e20b564": [[-0.624977, 1e-05, -0.484331], [0.624841, 0.977923, 0.484331]], "03c65523-3de4-4b8e-ba15-129462e9be78": [[-1.08278, -0.000496625, -0.319108], [1.08282, 0.651579, 0.3195]], "65818d86-b869-4830-817a-49fa9fffa682": [[-0.35993699999999995, 0.0, -0.39299500000000004], [0.359808, 1.069327, 0.392973]], "8bfd9a3a-4609-40bb-93bd-1b833e08d950": [[-0.22, 0.0, -0.3825], [0.22, 0.32, 0.3825]], "4d5da561-8adc-4c16-8eac-593740646701": [[-0.985737, -9.503649999999999e-07, -1.10415], [0.985737, 0.93806, 1.10416]], "6eac64cf-aa74-4d5c-b0ab-bbfca75e06c6": [[-1.1022100000000001, 1.80021e-17, -0.303997], [1.1022100000000001, 2.66367, 0.303997]], "7ff61f65-2460-37db-bb55-4da380a92de1": [[-72.7532, 0.0, -62.8792], [74.2652, 77.9185, 65.3205]], "0891e3b3-7ec5-4366-940c-94b9a2381d87": [[-0.660527, 0.0, -0.312148], [0.660527, 1.180146, 0.312148]], "423d39b0-732a-4f88-9f77-8945f91a0746": [[-0.335248, 0.000222, -0.196209], [0.335248, 0.282548, 0.196209]], "becff4be-21e4-4e56-9e84-c0974488d21b": [[-0.659641, -0.000713917, -0.419657], [0.659641, 0.552238, 0.41966000000000003]], "216e2aa6-cf42-3fdb-a955-0b18ca2802dc": [[-43.2473, 0.0, -38.2403], [43.2473, 77.5224, 37.9947]], "0af6a867-3a3b-4c88-b641-1d94cf0bef37": [[-0.959734, 0.0, -0.678477], [0.959734, 0.369097, 0.678477]], "698c968f-43b4-3538-81ab-db75e337dc39": [[-0.7946040000000001, 0.000114, -0.23905], [0.7946040000000001, 0.789165, 0.23905]], "bce2c4a0-01d2-4705-aa38-1612c193008c": [[-0.708704, 4.72678e-18, -0.0918036], [0.708704, 1.08914, 0.0924051]], "cb14810f-5a60-4565-b45d-6ff4fdba6155": [[-1.3986500000000002, -0.000396334, -1.33422], [1.3986699999999999, 0.83146, 1.33434]], "2bcd3a77-71d3-4353-9812-7ade8d6ca625": [[-0.446064, 0.0, -0.5969019999999999], [0.446064, 0.9226810000000001, 0.596954]], "b0f5ab15-ffb5-492f-9241-387546931dd5": [[-0.41470399999999996, -0.000684728, -0.414792], [0.414658, 0.6736679999999999, 0.414714]], "43065d31-4404-4eb9-95e9-85bf6f5d4522": [[-0.31133099999999997, -1.95399e-17, -0.322805], [0.31133099999999997, 1.723, 0.322814]], "567b90ca-3733-4dc1-8968-3c4ed4ffeba4": [[-0.281542, -5.1594900000000005e-06, -0.27004100000000003], [0.281531, 1.04658, 0.27118200000000003]], "81a9c898-8bf3-47e2-bc0c-5dab4b1fdb9d": [[-1.33643, -0.000381272, -0.537454], [1.3350499999999998, 0.942209, 0.535956]], "d55c9a2c-d5ec-4045-ae76-b3e1f69e770b": [[-0.648058, -5.37109e-05, -0.21117799999999998], [0.648188, 1.5396, 0.21117799999999998]], "ac5060c2-1a15-410e-9eef-3762533d120e": [[-0.6809879999999999, 8e-06, -0.244838], [0.6809879999999999, 0.522067, 0.24477000000000002]], "d3518738-2a88-45af-9701-784a6cd49d35": [[-0.21089200000000002, 5.72205e-09, -0.21062899999999998], [0.210642, 0.423542, 0.21062899999999998]], "32adb74e-d807-4c90-848f-d11bc719687e": [[-0.262461, -0.0, -0.298435], [0.262461, 0.998463, 0.298435]], "48b6a0f4-8455-4c28-9144-2d90b08711b2": [[-1.510273, 0.0, -0.35682899999999995], [1.510293, 1.080699, 0.35686]], "7acfbb6e-80c7-4af9-a0fc-993f608909bf": [[-0.289014, -1.08633e-05, -0.28908100000000003], [0.28903199999999996, 0.675732, 0.288615]], "2fd5c449-667b-418e-b53d-3596f954eab7": [[-0.103409, -5.39817e-18, -0.0895447], [0.10340500000000001, 0.283508, 0.0895447]], "6c746334-5d9f-3e7d-8f7e-1951b47c91e8": [[-0.279009, 0.0, -0.34976], [0.279009, 0.64, 0.35027]], "b4739673-d393-452c-97f3-40f858bc4460": [[-1.31894, -0.000228117, -0.56892], [1.31893, 0.944377, 0.5682670000000001]], "70837ab0-1aea-43da-a7cc-f67f3d9727b0": [[-0.406066, 0.0, -0.351576], [0.406026, 0.776725, 0.35234099999999996]], "9a466557-20da-4b73-aae7-4b1102e30d17": [[-0.226672, 5.150369999999999e-05, -0.22652999999999998], [0.226523, 0.650998, 0.226891]], "1c4de6f8-1017-3dd0-b98e-fbefff1778ff": [[-0.356619, -0.0, -0.319502], [0.352571, 0.890819, 0.362813]], "3d751664-e48a-4742-9557-6c3d19cd241c": [[-0.633316, 0.0, -0.268215], [0.633316, 0.430161, 0.268215]], "701e2092-2089-46f3-81cc-2a0997ac0d8e": [[-1.265658, 0.00030900000000000003, -0.533929], [1.265658, 0.996069, 0.533934]], "63770650-a553-37a5-be08-99960d7d6ee5": [[-37.3284, -0.0818, -36.157], [37.3284, 72.7903, 38.0091]], "6747b64d-5360-46ed-a9ed-fa6de85ff7a2": [[-0.408668, -2.2898699999999998e-05, -0.23963], [0.40866, 0.8608969999999999, 0.23985499999999998]], "5f717106-c3f5-385b-b706-2d004cf17eb7": [[-1.023915, 0.0, -0.529436], [1.023916, 0.6789749999999999, 0.529435]], "45a08422-657e-4626-bcbe-c845e74ec809": [[-0.528352, 0.0, -0.574202], [0.528608, 0.7245, 0.573993]], "0555093c-514c-4558-88a7-e069f5eb0d43": [[-0.477501, -0.00048457, -0.268263], [0.47761899999999996, 1.2123, 0.269406]], "d86f40f4-2945-42e0-9d11-5620a72358fc": [[-0.290842, -2.2418e-05, -0.27720500000000003], [0.290852, 0.7641849999999999, 0.277237]], "00775a07-b5c9-4020-94c7-2cd698d668f6": [[-0.2183, 7.5758e-18, -0.23833100000000002], [0.2183, 0.9157420000000001, 0.23833100000000002]], "10406246-0e6e-4156-bbab-74649aac88fb": [[-0.35965800000000003, 1.52588e-08, -0.365619], [0.35984099999999997, 0.721793, 0.36605899999999997]], "55e07144-49b1-43c8-b3b4-21a60c362f2e": [[-0.81, 0.0, -0.21296299999999999], [0.81, 0.7676080000000001, 0.21296299999999999]], "951c6806-3556-4116-887d-6d185b3d84b0": [[-0.8852119999999999, 0.0, -0.455312], [0.8852760000000001, 0.9247, 0.454766]], "2059a952-2259-4ce0-a10c-e55e6bac44b4": [[-0.684775, 0.0, -0.35794400000000004], [0.684775, 0.647644, 0.35794400000000004]], "f741c7dc-be51-4e60-b173-31c982c7f18c": [[-0.358459, 0.0, -0.257392], [0.358257, 0.428238, 0.25735600000000003]], "44674565-5d1d-4773-b12a-27f4d366ebf0": [[-0.8266469999999999, 0.0, -0.275396], [0.8266469999999999, 0.321524, 0.275396]], "eb95db5a-76f3-49af-957c-b82056cff8f5": [[-0.369915, 7.2e-05, -0.42326300000000006], [0.369879, 0.8326340000000001, 0.42310499999999995]], "aa976de0-2cf8-4a8a-b86d-eec52e402ea6": [[-0.213187, 0.000293, -0.21364899999999998], [0.21363900000000002, 0.39475099999999996, 0.21364799999999998]], "77edb23b-2a5f-4a4c-b6ed-8f96f5531a8e": [[-0.708777, -0.00185631, -1.17821], [0.7087220000000001, 1.64124, 1.17921]], "fe9c89a9-7464-4aed-80c0-b0ec07c57f91": [[-1.1, -6.06198e-18, -0.1], [1.1, 2.0, 0.1]], "5d4278dc-d238-4b95-89ca-87582b59c149": [[-0.401414, -1.44832e-17, -0.316664], [0.401414, 0.72969, 0.316664]], "579e331c-f5a0-308f-9c70-af9da3dd37ac": [[-0.21543199999999998, 0.001256, -0.254189], [0.215392, 1.0221989999999999, 0.257793]], "4e4638cb-159e-3d49-a622-fbac394102e5": [[-0.852089, -9.499999999999999e-05, -0.504162], [0.852088, 1.0167220000000001, 0.504162]], "19cbc224-ed8f-42d4-b03d-d6ecdb715946": [[-0.23, -6.1201599999999995e-18, -0.160965], [0.23, 0.725788, 0.16033999999999998]], "23ad5b5a-ecde-343d-a266-0faaf1ddec2c": [[-39.5196, 0.0, -39.5196], [39.5196, 109.0105, 39.5196]], "6f7cb7c3-350e-4ca5-b245-b2005612005e": [[-0.425082, 2.9999999999999997e-06, -0.17505099999999998], [0.425082, 1.800538, 0.17505099999999998]], "d96542a6-0e17-4076-948f-b09f0891ea60": [[-0.32619, 0.0, -0.348254], [0.32619, 0.794623, 0.348206]], "f8a8bba8-970a-44f3-aa1c-4a6bbeac6c77": [[-1.06042, -0.00012686299999999998, -0.438037], [1.06066, 0.7501789999999999, 0.438334]], "4319af27-28cd-477b-826c-58049e6871ea": [[-1.1988750000000001, 0.0, -0.428292], [1.198575, 0.720724, 0.428311]], "54268bbc-8c70-42b8-97c4-3c0d2229528c": [[-0.369194, -0.000342152, -0.369021], [0.36945, 0.6784680000000001, 0.36940399999999995]], "7e79e5f8-d94b-4807-9676-4eb0e4e142aa": [[-0.8, 1.33699e-07, -0.5], [0.8, 0.77, 0.500006]], "f8715e49-72b3-42ce-9e46-86c1f99db085": [[-0.364487, 0.0, -0.384094], [0.36394799999999994, 0.83501, 0.38388300000000003]], "32000c95-20b9-4e41-8747-4f404a806056": [[-0.895264, 0.0, -0.116134], [0.895264, 1.425508, 0.116134]], "0ac24c3f-9d22-4585-8101-5fb158a5425e": [[-0.269689, 0.0, -0.31976099999999996], [0.269619, 0.6905840000000001, 0.31958]], "94b412c3-6cbe-4dc3-848a-08b1be142d45": [[-0.91, -2.82989e-06, -0.48], [0.91, 0.7615120000000001, 0.48]], "0b5d4f2c-e5c9-4844-bde6-d11f41cb6df6": [[-0.93, -1.80961e-07, -1.09444], [0.93, 0.624122, 1.09444]], "0353b780-27c1-42eb-8544-212c32c1afb3": [[-0.405279, -2.17597e-17, -0.405279], [0.405279, 0.914014, 0.405279]], "0de40914-8d92-4168-96ca-3f2a5a9d9100": [[-0.307925, 0.0, -0.307829], [0.307923, 0.14553000000000002, 0.307829]], "2b875285-b3a9-49eb-a3ab-f0f3c0c7179b": [[-0.37176699999999996, 0.0, -0.372249], [0.37176699999999996, 0.903496, 0.372249]], "de2bbb3c-d07a-4384-86e2-e09a35484fde": [[-0.946445, -1.83063e-17, -0.301035], [0.946445, 2.42346, 0.301035]], "b2bae768-95fe-4fc3-8ac5-f79e6297bc3b": [[-0.23396899999999998, 3.05176e-08, -0.157177], [0.23396899999999998, 0.5931649999999999, 0.157177]], "dabce2fe-9fdd-40d4-b028-b010b4252a91": [[-1.228439, 0.0, -0.44404699999999997], [1.228439, 0.83143, 0.44395]], "1722b7a2-8d14-476e-8a48-ed1ff5bd8e50": [[-0.658105, -2.20827e-17, -0.361641], [0.658105, 0.273643, 0.361641]], "3ef54983-da3a-437f-8404-b3cab19a01e8": [[-0.283698, -4.96032e-08, -0.283698], [0.283698, 0.190149, 0.283698]], "d91fe08a-8df0-42fa-8902-3fcc781af206": [[-1.03148, 1.19382e-17, -0.231377], [1.03148, 2.0291, 0.231377]], "1e71562b-34e3-44ac-b28e-d17589060ad0": [[-1.4604400000000002, -1.5542299999999998e-07, -0.931422], [1.46017, 0.9108660000000001, 0.93176]], "04b6ce7d-3ec0-4b8f-977b-feffd8198bcc": [[-1.125, -5.09337e-07, -0.315101], [1.125, 2.5, 0.31533100000000003]], "092693c4-8bf7-4fc6-8908-48aa4e27e0f3": [[-0.26144300000000004, -4.636e-05, -0.264167], [0.26144300000000004, 1.00001, 0.26547899999999997]], "0a955739-4d2f-45e4-b3af-43456bbf9bca": [[-1.39, -1.77574e-17, -0.29], [1.39, 2.5, 0.29]], "09c19175-7135-4bda-ac94-2fe6b4b80279": [[-0.385918, 0.0, -0.414812], [0.385797, 0.883967, 0.414782]], "1cef5e59-b64f-4de6-a54d-a7b38832bfa4": [[-0.364086, 0.0, -0.408219], [0.364086, 1.225195, 0.408219]], "1fbe850a-8237-428a-86e0-c9a903c67364": [[-1.5045, -5.4231100000000006e-18, -0.903887], [1.5045, 1.77077, 0.903887]], "0b6862e2-476a-487c-8b31-d2943ad94d66": [[-0.714897, 1.1782999999999999e-05, -0.409695], [0.7149949999999999, 0.7425109999999999, 0.409812]], "79816d11-8b88-45fc-9994-45f1b10838b1": [[-0.886188, -1.2360299999999999e-06, -0.46315199999999995], [0.886138, 0.740674, 0.462968]], "064159ad-2984-3042-a961-7ec585e55ee9": [[-0.28264500000000004, 0.0, -0.271159], [0.28264500000000004, 0.7843789999999999, 0.271159]], "6f6fa6cb-11d1-4213-8a1e-3d6bb602f82e": [[-0.29946, 1.49804e-17, -0.288002], [0.299347, 0.7738849999999999, 0.288002]], "3ebc47f7-2d1b-446f-8a08-849562610bac": [[-1.185912, 0.0, -1.0428870000000001], [1.185912, 1.009386, 1.042364]], "95275663-5ea5-46b1-ac8c-68b13405ff1a": [[-0.410605, -7.73747e-10, -0.71325], [0.410605, 1.01935, 0.71325]], "c714e112-5112-4db2-a0d1-1a795fbbc2df": [[-1.95, -1.0409500000000002e-17, -0.17000099999999999], [1.95, 2.5, 0.17000099999999999]], "cd16c6e6-5ff2-4a5b-a3e6-e4b9c39b6389": [[-0.24310400000000001, 0.0, -0.24310400000000001], [0.24310400000000001, 0.410881, 0.24310400000000001]], "f563f18b-e429-47f9-b61c-eeba5726fce4": [[-1.34797, -1.59866e-17, -0.28102699999999997], [1.34797, 2.4002600000000003, 0.28322800000000004]], "be2c296c-01bd-4438-ad09-4dec13f769ea": [[-0.207097, 1.22446e-17, -0.218111], [0.207392, 0.9647960000000001, 0.218295]], "004cb907-b124-423f-9062-163bf992693a": [[-1.27627, 0.0, -0.47586100000000003], [1.277976, 0.9175610000000001, 0.475831]], "4096d027-c7b6-419d-86b1-c5b22943871e": [[-0.8184359999999999, 0.001379, -0.548047], [0.819822, 0.759854, 0.54621]], "28746bea-d522-4135-bef3-14fadc523f40": [[-0.754666, 1.9846899999999998e-05, -0.225304], [0.754666, 0.8203860000000001, 0.22531600000000002]], "42bbbf89-145b-4b03-ae28-b9e0c5335b33": [[-0.587237, -0.00012975499999999998, -0.983292], [0.586781, 0.9433849999999999, 0.983318]], "269b409e-c8bb-4737-8546-0a47ae202cf0": [[-0.9999979999999999, 0.0, -0.305976], [0.9999979999999999, 2.5, 0.305975]], "7ce5ff71-61c4-4099-ab85-2dfa674e933f": [[-0.246128, -2.11968e-05, -0.24634899999999998], [0.246259, 0.0993797, 0.246282]], "6ad1eaaa-4724-45c6-8ed6-24d85ec20bb5": [[-0.303324, 0.0, -0.327953], [0.30316299999999996, 0.7955629999999999, 0.328149]], "18992c9e-25a6-301d-8be8-95b7494e010f": [[-0.36694000000000004, -0.000521, -0.421454], [0.36694000000000004, 0.924687, 0.421454]], "6b59000a-6589-478f-ad1c-ac4814479953": [[-0.828717, -0.00136119, -1.1721599999999999], [0.828694, 1.10003, 1.17306]], "1a2d4f9e-9c8e-4efe-a7b9-8f8d8bdffb64": [[-1.833485, 0.000101, -1.125366], [1.833485, 0.973586, 1.125366]], "1be824c7-f2d5-44d1-8916-c88ec9a70468": [[-1.9971700000000001, 1.72678e-07, -0.580984], [1.99685, 0.698704, 0.581108]], "2aee7bfa-1696-44be-bf4f-36b2872e95b8": [[-0.244413, -7.795879999999999e-18, -0.19031700000000001], [0.244413, 0.6430929999999999, 0.19031700000000001]], "c0756420-7f61-4f93-83ca-b44e99075bef": [[-0.255369, -0.0, -0.255401], [0.255369, 0.522505, 0.255469]], "6a0c7b88-98b3-4d9c-b40b-f951731e7c21": [[-0.451517, 0.0, -0.305077], [0.451517, 1.164815, 0.305077]], "d11619c4-4477-465d-bb03-1f07dc51acfb": [[-0.48466000000000004, 0.0, -0.615953], [0.48466000000000004, 1.041048, 0.6171690000000001]], "1538bd72-9cf8-375a-8e30-e38608ec9b6d": [[-0.635, 0.0, -0.1905], [0.635, 0.9144, 0.191951]], "4b916923-9e2b-4f6a-b3bf-28e5f421151c": [[-0.55, -3.05176e-08, -0.184998], [0.55, 1.51844, 0.184991]], "a474c86d-ab78-46c9-ae20-8693a48fb396": [[-1.002927, 0.0, -0.238934], [1.002927, 0.563121, 0.238934]], "6d9ca14e-8ade-4133-8b5e-878335cfc722": [[-0.252906, -5.93286e-09, -0.251854], [0.252906, 0.560172, 0.251854]], "1cb16b64-2b98-4ed9-b4f8-f698f8cb9aec": [[-0.8136610000000001, -0.000521967, -1.0], [0.813549, 1.43389, 1.0]], "04bb0dd5-b86a-42bf-93c9-b5710faa9e57": [[-1.1484999999999999, 0.0, -0.844944], [1.1484999999999999, 1.8849930000000001, 0.844572]], "cb1d9a17-aa2b-4f71-a3b2-97e2dc0ccf2a": [[-1.53227, -0.000269453, -0.826112], [1.53225, 0.779361, 0.825433]], "6748f033-7e07-4ea8-8daf-ffb155b65067": [[-0.738437, -0.000488699, -1.02666], [0.738437, 0.980007, 1.0269]], "18b0e90b-ac4f-47f6-9afd-85a6641c0d4a": [[-0.936963, 1.80021e-17, -0.303997], [0.936963, 2.66367, 0.303997]], "c3762ae3-8847-4cc1-8e39-0ff3e09c47e4": [[-0.331383, -0.000237872, -0.330584], [0.33220799999999995, 0.556181, 0.33048]], "c7ef1cf9-d0e3-4fab-971a-887a37f020e3": [[-0.847337, -8.538959999999999e-08, -0.407357], [0.845901, 0.768275, 0.406766]], "61203351-d5cd-4c2d-946d-b331a552136e": [[-0.942923, -6.8521299999999996e-06, -1.04568], [0.942941, 1.2500799999999999, 1.04525]], "ac8f189e-d127-4f83-8377-d985c405c082": [[-0.198155, -3.62052e-05, -0.130787], [0.198155, 0.747867, 0.130785]], "404b6c7e-5c72-4167-bcb9-3dc347997552": [[-0.479477, -3.05173e-08, -0.479494], [0.47947, 1.44583, 0.479494]], "2e49a855-3789-3437-8164-f1398ed0b715": [[-49.7155, 0.0, -27.0276], [49.7155, 78.7274, 27.0276]], "a19e8164-e90b-4166-ae26-fb714efaf18b": [[-1.277039, 0.0008100000000000001, -0.476404], [1.277039, 0.888698, 0.476405]], "69a9bf61-ab9d-492a-b621-524a37dc6986": [[-1.17077, -1.93155e-17, -0.35875100000000004], [1.17077, 2.47499, 0.35875100000000004]], "105e7d2a-0dee-4970-b963-7e2fa121660c": [[-0.863216, 0.0, -0.200121], [0.863227, 0.47622, 0.200121]], "6b26027d-6e4f-4a17-8337-202d697be15f": [[-0.250889, 3.35858e-06, -0.258899], [0.250809, 0.618683, 0.25892]], "85b6f2c0-968a-489e-b37e-4c3a13daf790": [[-0.14840899999999999, -0.00027143299999999996, -0.0691466], [0.148407, 1.42583, 0.069123]], "22c239f7-1cd5-4e8d-a792-9a6d6bad3bf0": [[-0.42564500000000005, -0.00222615, -0.42564500000000005], [0.425798, 0.8300660000000001, 0.42562199999999994]], "29887be5-7b0e-4a29-98bd-b5fee65ad1b6": [[-0.48138, -4.48425e-06, -0.24631699999999998], [0.48137300000000005, 1.14558, 0.246429]], "1f0c1597-17de-4bc7-8da5-d596fcc8ebed": [[-0.942188, -0.000919267, -1.08043], [0.940686, 1.2804, 1.08175]], "50b78c96-34b2-42f5-bc6d-2ab24913e1b5": [[-0.438131, -3.69549e-09, -0.42924500000000004], [0.438131, 0.842279, 0.429092]], "91e1294f-04d6-4c01-b542-34125a347d3d": [[-0.2925, -1.2076799999999999e-17, -0.25], [0.2925, 0.649662, 0.25]], "bad6453a-6bd6-4036-bbee-f93077af4341": [[-0.39386899999999997, 2.6e-05, -0.411443], [0.393651, 0.48052500000000004, 0.41139600000000004]], "52eaf45c-77a5-40b3-8d96-321164fe7d5b": [[-0.613865, 0.0, -0.234599], [0.613865, 1.672226, 0.23468]], "862649d7-4054-4f87-a4ef-4256dfc058bc": [[-0.640728, 0.0, -0.640728], [0.640728, 0.28153300000000003, 0.640728]], "64c569df-a604-3c7f-9082-4a3cbc808261": [[-1.020502, -0.000755, -0.521606], [1.020502, 0.8543609999999999, 0.521606]], "229a9614-f7bd-4e78-ae14-5b36c827cf88": [[-0.340009, 0.0, -0.216057], [0.340009, 0.906628, 0.216057]], "8bfd9298-bc42-43e8-a93b-6f1eedb99971": [[-0.5625180000000001, -0.000953547, -0.562466], [0.562513, 1.08847, 0.562433]], "1a887d22-b5eb-4de8-975e-c4d0be888537": [[-0.38435, 0.0, -0.292046], [0.38435, 1.056198, 0.292046]], "22877321-a17c-4e5c-a741-0b17ad75d3d4": [[-0.37341500000000005, -0.0, -0.479134], [0.373333, 0.8872960000000001, 0.479134]], "1f163505-239b-4791-9d8d-83f756a74d61": [[-0.245182, 0.0, -0.290511], [0.245182, 0.984576, 0.290511]], "556cbad3-e56d-40c5-9a39-590beb82be7a": [[-0.791982, 0.000131, -0.534363], [0.7921009999999999, 0.423866, 0.535045]], "9005bfd5-ff7b-43da-9530-c2d3568d2875": [[-0.380998, -1.46276e-05, -0.42493000000000003], [0.381099, 0.795025, 0.424804]], "8cc6e458-7470-45d0-93e9-7663c4f9719f": [[-1.49252, 2.7475e-06, -0.6048089999999999], [1.4914599999999998, 0.6917369999999999, 0.604959]], "5357ee78-a830-436d-b36e-d83b088788dd": [[-0.515783, -1.00343e-05, -0.489942], [0.515783, 0.9698869999999999, 0.489942]], "acd94a9b-a0d2-4f53-a734-b1a431ffd5f7": [[-0.287769, 0.0, -0.287769], [0.287769, 0.543037, 0.287769]], "a61d62b3-f40c-4099-b55f-0ca94c30e1aa": [[-1.014784, 9.900000000000001e-05, -1.099429], [1.014292, 1.014909, 1.098181]], "f6962e45-f344-44b1-bfea-15f3cd9dbb34": [[-0.990858, -1.8222699999999998e-17, -0.312402], [0.990858, 2.6, 0.312402]], "779bf8aa-ffe3-4ccd-a9f0-2cf4ebfbf0a9": [[-1.71833, -2.92969e-05, -1.20252], [1.71857, 0.889014, 1.20255]], "bd30f23a-e2c7-4704-b1bf-b9e7278f5b55": [[-0.319992, -7.79281e-18, -0.225725], [0.319992, 0.388044, 0.225725]], "7cfd281b-f3d9-4caf-9252-71f2d71026f6": [[-1.024568, 0.0, -0.528193], [1.024568, 0.8843179999999999, 0.528192]], "599b4170-24b9-455b-86cc-5e9e7007472b": [[-0.841242, 3.5320099999999997e-06, -1.0449599999999999], [0.8412569999999999, 1.19374, 1.04494]], "3804111f-592c-4b84-aa3c-5e1f47ee4ff9": [[-0.7406579999999999, -1.17542e-17, -0.21], [0.7406579999999999, 0.797579, 0.21]], "58abd93d-8641-4af9-bfb6-b46881feb4a9": [[-1.17643, -1.26361e-17, -0.248121], [1.17643, 2.99596, 0.248735]], "ca1f9be7-a10f-4ff3-b4c2-5e16f3946502": [[-0.756183, -9.67353e-09, -0.21181799999999998], [0.756183, 1.02431, 0.211817]], "64708a5f-4d9a-49c9-9725-2cf1f6a96cfb": [[-0.62792, 1.52588e-08, -0.301652], [0.627923, 1.99938, 0.301645]], "22c6b203-3c28-4716-8d62-e15004acd8cd": [[-0.659165, 0.0, -0.659164], [0.659165, 0.6955589999999999, 0.659165]], "f066bff4-b33c-4af9-ae6b-0f854e90a36b": [[-0.605, -1.13849e-17, -0.205], [0.605, 0.804552, 0.205]], "9e3fb0f9-1462-4d5f-8338-0b2c44364f36": [[-0.10400000000000001, 0.0, -0.104001], [0.10400000000000001, 1.040662, 0.104001]], "70844e01-8244-405c-a237-ca0da1dfa2c1": [[-0.32336, 0.0, -0.32336], [0.32336, 0.374509, 0.32336]], "cb120641-dd18-450e-bbe1-93496e7e5a7a": [[-0.34769599999999995, 0.0, -0.34769599999999995], [0.34769599999999995, 0.50466, 0.34769599999999995]], "70865842-b9d4-4b18-96b0-0cb8776b6f71": [[-0.301888, 0.0, -0.275707], [0.301892, 0.7444289999999999, 0.275641]], "60999d08-1e04-41cb-a830-f909d0f61ae4": [[-1.286653, 0.000582, -0.47600299999999995], [1.286195, 0.704354, 0.47685299999999997]], "08eb8501-2902-468e-b3a6-6e31e423edc2": [[-0.9115300000000001, -1.53772e-05, -0.409851], [0.9115829999999999, 0.8718290000000001, 0.40985]], "2fb6e466-5020-36b4-825a-7c11d1a2ff90": [[-27.7827, 0.0, -27.9401], [27.7827, 87.6048, 31.2247]], "d7b7be7a-5ed6-419e-8d47-cfa909735db7": [[-0.8142090000000001, 0.0, -0.7589790000000001], [0.8142090000000001, 0.518003, 0.7589790000000001]], "1a4af735-398a-483b-ad94-68baeb0517bd": [[-0.7, -8.359060000000001e-07, -0.175], [0.7, 0.48170699999999994, 0.175]], "e1e408a3-7668-40fb-a008-776cefdc30ef": [[-0.64057, 0.0, -0.227723], [0.6405679999999999, 0.7126309999999999, 0.227725]], "29d1a4fb-d9df-4d30-ab0e-1e635b9a2850": [[-0.8720680000000001, 0.0, -0.48168999999999995], [0.8720680000000001, 0.936949, 0.48168999999999995]], "5cecef46-561b-4a67-9f1b-87ca3d049cb1": [[-0.44467, -2.4832999999999998e-05, -0.989576], [0.44467199999999996, 0.736226, 0.9901000000000001]], "1b2bf67d-8d28-488d-9550-2e61d050a2de": [[-0.95, -0.000111649, -0.95], [0.95, 0.7651290000000001, 0.95]], "e00349c0-02d1-4d62-9299-1b32299dcc35": [[-0.40631799999999996, -3.05176e-08, -0.406325], [0.40632199999999996, 0.8014199999999999, 0.40631999999999996]], "54dede58-1168-4a6a-9059-5791f1917b21": [[-0.16071000000000002, 0.0, -0.160734], [0.16071000000000002, 0.390659, 0.160734]], "c0ab0567-80cd-49df-9bf3-625b82753d96": [[-1.20545, -0.0008588, -0.403883], [1.2055, 0.763496, 0.404088]], "713059bb-b8b8-408a-9374-038df1deb3e2": [[-0.6863009999999999, -1.17347e-17, -0.22652799999999998], [0.686225, 0.525747, 0.22656099999999998]], "48b5ee7a-e3a5-4701-b27b-e2850f43d558": [[-1.69695, -6.90428e-05, -0.48823], [1.69733, 0.920236, 0.487865]], "15526c77-9da9-4acc-ad27-cfb674723db1": [[-0.248733, -1.39893e-17, -0.255697], [0.248659, 1.03513, 0.255675]], "fb2ecc58-2c2c-4110-8418-b0291667704a": [[-0.2, 0.0, -0.2], [0.2, 0.9746469999999999, 0.2]], "e2f556f9-8591-4dc2-a847-49fb1b8f2709": [[-0.415796, -1.11022e-17, -0.216416], [0.415796, 1.18961, 0.216414]], "8ef8c764-2b68-42b7-8624-71381d87f14b": [[-1.583477, 0.0, -0.5968760000000001], [1.583477, 1.063018, 0.5968760000000001]], "6f5fb822-333e-4ee2-ad9f-694d76de8e16": [[-0.450134, 0.0, -0.20041499999999998], [0.450134, 0.875329, 0.20041499999999998]], "275b8925-2179-4431-aa28-ee370564b793": [[-0.925245, 0.00034500000000000004, -1.0753220000000001], [0.925245, 0.904759, 1.074752]], "7b929eeb-1969-4942-8287-d92eef727467": [[-0.6921339999999999, 0.0, -0.6946850000000001], [0.6920350000000001, 0.36493000000000003, 0.694549]], "926e9042-fe14-449d-bce0-764617826477": [[-1.0989499999999999, -0.0009463929999999999, -0.404138], [1.09878, 0.763334, 0.40417200000000003]], "43d85f7d-19d1-4a0c-90b9-ff054351a284": [[-0.680016, 6.483440000000001e-17, -1.08077], [0.679632, 0.848834, 1.08161]], "1923bd0a-8b61-498e-a42c-249418ed5551": [[-1.44637, 0.0, -0.5253479999999999], [1.44637, 0.890163, 0.5253479999999999]], "a4906939-5cb0-4d38-9bff-2c3d68da34c8": [[-0.299971, -1.79502e-08, -0.237838], [0.299971, 0.601282, 0.237838]], "839333ef-96a2-406f-95bc-14564d340d5d": [[-0.259341, -2.77912e-05, -0.266157], [0.258733, 0.968044, 0.266217]], "79eb8c8f-7b78-4d0c-87f1-75367ef7141a": [[-1.168963, 0.0, -0.43152900000000005], [1.169367, 0.808997, 0.43178400000000006]], "cee9eff2-0f3c-4968-9c8b-ea34f976c0e3": [[-1.20055, 1.5008e-07, -0.481175], [1.20056, 0.819152, 0.48236199999999996]], "2ac67c87-c768-470d-91d6-cc018259f6fc": [[-0.47, -2.60915e-08, -0.253513], [0.47, 2.15126, 0.253819]], "597a845a-5754-4abb-955f-2e292c89b2c5": [[-0.811854, 0.0, -0.498791], [0.811878, 0.461648, 0.49855200000000005]], "f6351876-1a12-4fc2-bdb8-853ed360f007": [[-0.113903, -2.8585400000000002e-05, -0.11406599999999999], [0.114003, 0.6444970000000001, 0.11414999999999999]], "ba4fda30-970c-4538-8527-b39b4c1bed60": [[-0.347194, -2.08207e-17, -0.34769599999999995], [0.347194, 0.13, 0.34769599999999995]], "27aaa3c4-1650-4c38-8875-140cd587b1c7": [[-0.9222450000000001, 0.00018141299999999998, -1.11292], [0.9218160000000001, 1.0802500000000002, 1.11412]], "3f9e87db-3d14-471f-8b95-bc0d9751b540": [[-0.329187, 9.49086e-06, -0.84965], [0.329186, 0.8970990000000001, 0.849973]], "408772b5-e55b-4514-9718-10cd5de2c44b": [[-0.284132, 0.0, -0.284132], [0.284132, 0.6072919999999999, 0.284132]], "444ee0b1-1ca6-4861-9b4b-208337ed27ab": [[-0.23000900000000002, 5.95732e-09, -0.231519], [0.23000900000000002, 0.479028, 0.231519]], "72f5dd06-06c1-4b7f-8d4b-ad557641b619": [[-1.086612, 0.0, -1.1252339999999998], [1.0825, 1.639662, 1.124362]], "102210bd-29ab-4876-a687-93434f4a863b": [[-0.7006709999999999, -0.000116692, -0.266848], [0.7006709999999999, 1.1005200000000002, 0.267727]], "59986133-548d-4bf9-b2be-9f36eb125d45": [[-0.479281, -0.00164944, -0.835598], [0.480543, 1.03154, 0.8369070000000001]], "448eeb65-841d-4c9f-9893-3f5b87d3bad0": [[-1.12677, -1.2284e-17, -0.228159], [1.12677, 0.41201, 0.22816099999999997]], "7794eebb-1fe1-4ded-b5d8-245c4b688189": [[-2.361879, 0.0, -0.200342], [2.361879, 0.8901300000000001, 0.200342]], "21bf59a1-ff5f-40a5-8700-df838dfb2cb9": [[-0.83738, 0.0, -0.425147], [0.83738, 0.797436, 0.425147]], "97f12f67-508b-4cdb-8e0c-ea0e20cc0805": [[-0.330669, 0.0, -0.330669], [0.330472, 1.007174, 0.330472]], "8919ebe7-e126-4793-a7e9-31599c77c826": [[-0.339617, 0.0, -0.390249], [0.339653, 0.639412, 0.390117]], "21af7203-f97e-32e4-b0a1-3ed957f2edb0": [[-0.22915400000000002, -0.001795, -0.248723], [0.22915400000000002, 1.110023, 0.248723]], "07624dbf-6451-4973-bfce-3a343cb80f38": [[-0.818168, -0.0, -0.818168], [0.818168, 0.855521, 0.818168]], "4c20cd40-f3fe-4284-937c-202f3243a3b8": [[-0.219609, -0.0005425979999999999, -0.19509100000000001], [0.219609, 0.579643, 0.19509100000000001]], "f8ce32dc-cae4-407f-b0f3-c69a9a16ee2b": [[-0.693113, 6.88497e-18, -0.42321800000000004], [0.693113, 0.338052, 0.42321800000000004]], "d34cb48c-4668-4253-982e-3136f7df22f6": [[-0.680993, 0.0, -0.47829900000000003], [0.680993, 0.526466, 0.47829900000000003]], "78b438ea-7c24-44db-a45b-1918cdc4a191": [[-0.570039, -2.95233e-05, -0.570844], [0.570074, 0.46964799999999995, 0.570844]], "4dcd088e-8ddd-487e-9217-6a86e68f4bbf": [[-0.9151279999999999, -0.000146992, -0.22665500000000002], [0.9148390000000001, 2.1805600000000003, 0.22672]], "5bd0661c-1e5a-48ac-9419-90da4d9b01e7": [[-0.613302, 0.0, -0.42314100000000004], [0.613302, 0.565603, 0.42292900000000005]], "29c28662-2840-4446-88f6-bdec3d2ce944": [[-0.495, 4.8021400000000005e-09, -0.257501], [0.495, 0.7340059999999999, 0.257501]], "d4765df3-c7cb-4161-b00a-1652af698cc2": [[-0.21606999999999998, 2.23691e-08, -0.227555], [0.21606999999999998, 1.26373, 0.227555]], "8057e124-bcdd-420c-a33c-b1a07497fa68": [[-0.323503, 1.3e-05, -0.28063], [0.32368699999999995, 0.697231, 0.280902]], "6f2cc2ba-6d8d-4a20-8707-4b2d12edf23c": [[-1.0913, -0.000583573, -0.7622180000000001], [1.0913, 1.92494, 0.7622180000000001]], "7c358cdd-5a8e-33be-a949-b288eb5ca080": [[-0.241605, -0.0, -0.25249900000000003], [0.241605, 1.029525, 0.252498]], "56052a97-8088-4273-b77a-dc9202eb5124": [[-0.947303, 0.0, -0.204647], [0.947303, 0.610282, 0.204646]], "0be706f6-4326-4279-8e09-7ad7177b9c3c": [[-0.949433, 1.8857699999999998e-17, -0.40214300000000003], [0.9507800000000001, 0.724572, 0.401743]], "01c32920-6010-4661-b8a1-745eef81e225": [[-0.870673, -0.000333928, -0.237427], [0.870757, 0.954074, 0.23733100000000001]], "e20992e8-7b0b-4367-996e-e88375f37a9b": [[-0.75, -9.18488e-18, -0.40000100000000005], [0.75, 0.35, 0.40000100000000005]], "18ee440f-369f-4783-9d84-e299f6aee62f": [[-0.207847, -7.62939e-09, -0.207847], [0.207847, 0.398065, 0.207847]], "4413da86-d22a-4168-8423-65c09dadf568": [[-0.46424, -0.0, -0.46424], [0.46424, 0.40490000000000004, 0.46424]], "9553f42e-253a-40f1-9148-30f7f71937de": [[-0.41185000000000005, 1.3e-05, -0.38101300000000005], [0.412053, 0.823356, 0.381401]], "2249b4a3-59aa-4dd8-98b5-97c09d22cb08": [[-0.935188, -1.77178e-17, -0.320901], [0.935188, 2.18383, 0.320901]], "32b2c762-ee42-46da-bc23-eaeaaf60496e": [[-0.430351, 8.800000000000001e-05, -0.390828], [0.430633, 0.87524, 0.390828]], "21da9347-2b4a-4847-9c0d-d7142a4b9ac6": [[-1.02072, -1.78762e-17, -0.30806], [1.02072, 2.4, 0.308097]], "2f7b4bc0-2293-4f31-9812-472c0486a300": [[-0.8608540000000001, -4.98305e-17, -0.9911660000000001], [0.860796, 1.20272, 0.9906919999999999]], "8a9c4084-e0ea-4c68-9963-1fba95bfeecb": [[-1.6247829999999999, 0.000887, -1.262694], [1.6245939999999999, 1.011045, 1.262643]], "4db035bd-3603-3ae3-98e3-b3e8c61dbda7": [[-37.3284, -0.0818, -36.157], [37.3284, 72.7903, 38.0091]], "7f74594e-2d69-4195-b163-668b0c8e6dbf": [[-0.480873, -8.409710000000001e-05, -0.43731000000000003], [0.481342, 1.1127200000000002, 0.436901]], "32c069ba-2719-443e-913e-57c5bedd7990": [[-0.248919, -0.000308624, -0.257128], [0.24860800000000002, 0.762664, 0.257089]], "4486a0c5-0c5c-4788-a77f-3c9bdc3204a7": [[-1.6787200000000002, 3.05176e-08, -1.01391], [1.6787200000000002, 1.02704, 1.0135399999999999]], "d2268667-5751-449b-8f06-67017c7e82d8": [[-0.34252299999999997, -0.000223069, -0.375775], [0.342059, 1.14631, 0.37581200000000003]], "fb337533-20ff-4930-9b4a-e6486c275f4f": [[-0.307467, 0.0006450469999999999, -0.30948899999999996], [0.308402, 0.406952, 0.308081]], "10cc5317-ba78-4a28-98f9-78ed4d1a2195": [[-0.494297, 0.0, -0.354334], [0.494297, 0.39514000000000005, 0.354334]], "d942c7b1-fb0d-4f76-a45c-1a3c1f1b8498": [[-0.519216, -0.000128296, -0.47948], [0.518879, 0.775158, 0.47918]], "b21aac6b-bee4-49ae-bc59-f8aea8bbaa90": [[-1.452464, 0.0, -0.59942], [1.45168, 1.04048, 0.59942]], "f6b31c8f-c0fa-34db-b9d1-4594003e28bf": [[-0.451656, 0.0, -0.451861], [0.451656, 0.705414, 0.451861]], "c37f4c52-c520-4455-a790-54c70f533a07": [[-1.3, -1.21021e-17, -0.3], [1.3, 0.650082, 0.3]], "9fd8f2c1-293e-4ebd-9376-294ae52f3f58": [[-0.391681, 4.7644e-08, -0.38972], [0.391055, 0.767872, 0.39079099999999994]], "b09c05f7-b254-4ef7-8b7c-0aa06d0e45c0": [[-0.231495, -0.000148859, -0.261063], [0.231496, 0.824029, 0.261269]], "76c55e1b-71ca-3af4-9eaf-4c040567ce02": [[-0.8803350000000001, -6.9e-05, -0.389893], [0.8803350000000001, 0.7637139999999999, 0.389893]], "6bfecc53-56aa-444f-8787-4bb5c1da3edb": [[-0.4473, -0.0, -0.277121], [0.4473, 0.650257, 0.277121]], "66e4e6f3-a058-4043-8838-8b1b25ef1d03": [[-0.9496899999999999, 0.000328, -1.084827], [0.949854, 0.65189, 1.084711]], "a367a17b-7784-4292-bd63-6875e7a85dad": [[-0.914058, 0.0, -0.41702300000000003], [0.914057, 0.721609, 0.41702300000000003]], "3e67257f-bef6-4e45-b1b2-0fc945d8ebf4": [[-1.8848099999999999, -6.67137e-08, -1.49292], [1.8847200000000002, 0.889956, 1.49351]], "020238c3-1401-433f-91dc-4bd1936a4cc4": [[-0.282692, 0.0, -0.271222], [0.282692, 0.542345, 0.271222]], "2dffed35-f6e7-4c4d-ae43-5a3a2fdb82d3": [[-0.886027, -1.14441e-08, -0.40823099999999996], [0.886332, 0.812748, 0.408514]], "3fd377e5-28ce-429c-a142-c429c1b85461": [[-0.32865, -1.8212700000000002e-17, -0.34558700000000003], [0.32865, 0.714036, 0.34558700000000003]], "7ae9b2cc-5d63-4435-9f77-98115610e2dd": [[-0.259755, 1.1678400000000001e-17, -0.262803], [0.259755, 0.479514, 0.262803]], "808d18b1-8d1b-401a-9304-22239bfed4a4": [[-0.27469, -1.21455e-17, -0.199774], [0.27469, 0.49943600000000005, 0.199774]], "3ed8b0f2-68be-402f-a320-4996be9abeb4": [[-0.7, -9.123619999999999e-18, -0.15], [0.7, 0.84, 0.15]], "a2aa11ef-50e1-425c-94d6-960c19ad382a": [[-1.5969900000000001, -8.82854e-18, -0.5989180000000001], [1.5969900000000001, 0.819551, 0.599576]], "3ee919ad-3774-4d02-9cc0-9f687808eda9": [[-0.8977769999999999, 0.0, -0.4], [0.8977769999999999, 1.068819, 0.4]], "cfc2e43c-5237-41c9-bd74-eeae1610dca7": [[-0.35186, -0.00225294, -0.35192], [0.351838, 0.8739279999999999, 0.351977]], "3968ef34-111b-447c-b194-a1ce0281fd45": [[-0.520683, 0.0, -0.43851300000000004], [0.520691, 0.38803, 0.43851399999999996]], "1eeb4740-0ba6-4470-a3e8-39a927b4dccd": [[-1.08248, -4.72015e-17, -1.09779], [1.08239, 1.02857, 1.09767]], "1170314b-4908-33b1-adf5-73a2a39a2309": [[-0.4572, 0.0, -0.376149], [0.4572, 1.361682, 0.376149]], "05faf43b-c747-468c-a863-4a00b8761b9d": [[-0.25598, 0.0, -0.247728], [0.25598, 0.5395989999999999, 0.247727]], "1e8c9540-406d-415b-ae7c-47743f6c92ac": [[-1.267069, 0.0, -0.413712], [1.267069, 0.865596, 0.413653]], "8782ea26-ad64-4b2b-90e5-73d9ab0341f1": [[-0.535775, 0.0, -0.21048999999999998], [0.535767, 2.659299, 0.210459]], "fabb0be9-069d-4b67-a08f-bb18dcf0d63b": [[-1.3188229999999999, 0.0, -0.446669], [1.3184030000000002, 0.881724, 0.447261]], "6952d5d7-d3f2-4607-8013-59dd3821c711": [[-1.3024930000000001, 0.0, -0.405135], [1.3024930000000001, 0.63611, 0.40511699999999995]], "de710e3b-882d-48a8-a40b-2947631e71d2": [[-0.726255, -0.0, -0.575342], [0.726255, 0.402899, 0.575342]], "1e44aa33-9566-44c1-ae03-8f83a5aa282c": [[-0.6505970000000001, -2.7501199999999997e-17, -0.575561], [0.6490130000000001, 0.88676, 0.5763389999999999]], "1abe6277-1847-457b-a3fd-5e7d3c1dc031": [[-0.424082, 0.0, -0.680561], [0.424082, 0.802818, 0.680621]], "aa9527e0-f808-45ba-bd47-76c8fab68431": [[-0.69, -2.08247e-17, -0.39515500000000003], [0.69, 0.341568, 0.39515500000000003]], "d8e16811-27c8-4f9a-8983-3f39aba223ad": [[-0.834783, -9.6426e-18, -0.29043399999999997], [0.834783, 1.10931, 0.289009]], "aad4dcfa-287f-44e3-8f53-ac8856e8e6ac": [[-0.24849900000000003, -0.00244357, -0.248388], [0.250001, 0.31585, 0.248738]], "4d37c80a-2fe5-409b-a3b9-13f6aa68aa41": [[-1.09264, 1.9611900000000002e-08, -0.4401], [1.09284, 0.7316400000000001, 0.441762]], "47d7e740-92fd-4687-8977-c1baa6cea843": [[-0.795931, 1.58922e-17, -0.30741599999999997], [0.796176, 0.8054819999999999, 0.30741599999999997]], "f06419b0-bd4a-4a2b-9d44-7e5314ab8f3e": [[-0.36729599999999996, -0.000119718, -0.40752099999999997], [0.366697, 1.07011, 0.406739]], "ff87fbf2-41d2-496c-a471-23551c33c118": [[-0.31998899999999997, 0.0, -0.359923], [0.319983, 0.5335730000000001, 0.359923]], "758c9eee-955f-3382-911d-d06c53807c63": [[-0.608785, 0.0, -0.605449], [0.608784, 0.7365999999999999, 0.60545]], "95c574a9-21c9-4f4b-b750-fc752e3e29c2": [[-0.55852, -1.16297e-06, -0.49018999999999996], [0.558933, 0.7581610000000001, 0.49024500000000004]], "1bd84ea4-b626-43c0-a80e-ecd2d607a75b": [[-0.967836, 1.52588e-08, -1.26404], [0.967646, 1.69208, 1.2645]], "3937d481-c22e-44e7-8497-ef226bbc402b": [[-0.248628, -0.00033146, -0.250992], [0.248968, 0.47124699999999997, 0.25157399999999996]], "2399c8cb-b40b-3800-9c2b-58cf368d2cd5": [[-0.315792, -1e-06, -0.298022], [0.315792, 0.947303, 0.298022]], "de1b45a9-899a-4757-8142-bf5425b32cfc": [[-0.524656, 0.0, -0.524656], [0.524621, 0.494507, 0.524656]], "467633ae-39d1-476c-81b9-ca40078ed3d2": [[-0.341412, -3.50441e-05, -0.34152], [0.341346, 0.413733, 0.341424]], "04c00959-e681-40f3-9da4-159a4e298b09": [[-2.33954, -0.00190444, -0.920264], [2.3407400000000003, 0.9507340000000001, 0.921516]], "46068f55-d219-4e02-8abb-94c837757fd2": [[-2.054926, 0.0, -1.602635], [2.054926, 0.8839440000000001, 1.602635]], "3aec0b0f-c2a3-4093-809f-e344527530f4": [[-0.424769, -0.000166733, -0.119957], [0.42440300000000003, 1.00934, 0.11995499999999999]], "5d0e2d10-8378-4c09-9b7c-36b0a3332808": [[-1.2067400000000001, 8.42285e-06, -1.1794], [1.2067400000000001, 1.6306299999999998, 1.17926]], "5b3455ac-d245-4f1c-89f1-8f8f6502e642": [[-1.37887, -1.2434399999999999e-05, -0.567152], [1.37871, 0.906293, 0.567831]], "a6740956-d396-4a32-8339-60d811de1a53": [[-0.301252, -7.55198e-06, -0.28668299999999997], [0.30125399999999997, 0.7809130000000001, 0.286881]], "4cc48f0e-27c3-4a5c-b98b-ee0c85fa9f53": [[-0.7, 0.0, -0.220579], [0.7, 0.951284, 0.22049600000000003]], "27b5f180-3819-487a-af72-880c4e2fb3ce": [[-0.43636600000000003, -1.59872e-17, -0.435395], [0.436286, 0.856981, 0.435841]], "19eec75a-b4ea-4a8e-b835-ec7016e119d1": [[-0.444283, -0.0, -0.44319699999999995], [0.444283, 0.9849469999999999, 0.44319699999999995]], "6e49b3d8-7161-4ef1-8d6d-bc3c8301dee2": [[-0.351409, -1.69105e-05, -0.35076599999999997], [0.351468, 0.930105, 0.35074800000000006]], "38fa85aa-6bda-465f-8e51-b582e2616067": [[-0.627556, -0.000577255, -0.556121], [0.6275569999999999, 0.467042, 0.555321]], "d3cd293b-736c-4336-908d-3bf63837719f": [[-0.7209399999999999, -8.3348e-05, -0.22376200000000002], [0.720939, 2.26933, 0.22376100000000002]], "02ee277f-5c0e-42d9-8174-34a6205a3ef5": [[-0.7750060000000001, -1.82094e-06, -0.18340599999999999], [0.7750060000000001, 0.575003, 0.18341200000000002]], "6bb50c30-efd9-4082-b152-4786c36de318": [[-0.8595619999999999, 0.0, -0.19540400000000002], [0.8595619999999999, 0.555342, 0.195126]], "8e67a62d-5b88-45c2-9c5f-9c262f5b5c97": [[-1.0734000000000001, 9.18868e-05, -1.16738], [1.07195, 0.910691, 1.16784]], "16d4b23d-4170-467c-8e48-9d35c8d740b4": [[-0.205536, -1.32421e-05, -0.20711300000000002], [0.20556999999999997, 0.342541, 0.20660499999999998]], "4ef6afe4-115c-40e2-821c-dbaa37785467": [[-0.956222, 0.001333, -0.40405599999999997], [0.956092, 0.798321, 0.403955]], "8a61f12e-eb69-46ef-a427-b22216cc5aed": [[-0.772364, 0.0, -0.48648899999999995], [0.7723990000000001, 0.7345529999999999, 0.48648899999999995]], "a333e75d-cf32-4d75-810b-882701bec2d1": [[-0.257985, 0.0, -0.281592], [0.257985, 0.881852, 0.281592]], "f9c3dafd-79ea-46fa-92a1-9bf3f876ea49": [[-0.6890219999999999, 3.8147e-09, -0.643884], [0.6890219999999999, 0.365691, 0.643884]], "73b31642-d004-451f-9286-9ad5a26554f2": [[-1.07, 2.95379e-08, -0.17106200000000002], [1.07, 2.5011799999999997, 0.17106300000000002]], "bb2a7096-97dc-4182-887a-d1fc7a2e3e52": [[-1.09822, -1.61696e-05, -0.573528], [1.09825, 0.7281369999999999, 0.573612]], "1ee229b7-e7a8-48a2-96b5-a3ca063327e3": [[-0.909752, -1.249e-17, -0.201587], [0.909749, 0.845862, 0.201599]], "2ce80ba2-bac8-424d-a0c0-a94af01496aa": [[-1.07774, -2.46648e-06, -0.464671], [1.07772, 0.699902, 0.46541499999999997]], "c671f37a-6907-43f0-a2ab-4f5da0686b3b": [[-0.306543, 0.000606853, -0.307834], [0.30680399999999997, 0.32289999999999996, 0.306626]], "4a591643-75ab-4372-9de5-0bb152618fa7": [[-1.0253700000000001, 0.0, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "6591a032-de6b-4f47-ad67-7ca28584e65e": [[-0.59, -4.95896e-08, -0.360558], [0.59, 2.12062, 0.360559]], "ab7d73b7-00ad-44e4-bd83-8113c6d61985": [[-0.451881, 1.14441e-08, -0.451881], [0.451881, 0.61423, 0.451881]], "bcfc7aa7-555f-4b9f-b242-2b78b4e6bd7e": [[-0.9003619999999999, -2.91149e-05, -0.439017], [0.900389, 0.837856, 0.439428]], "501c775c-f2b5-4145-b5ae-3bb35f9e6bf6": [[-0.931335, -6.17328e-18, -0.205001], [0.931335, 0.587403, 0.205001]], "640a587b-4533-4a0d-be0c-cf220447e947": [[-0.285655, -0.0, -0.285655], [0.285555, 0.616374, 0.285555]], "f4bd26a5-6b6b-4c70-9cf9-09b8310c4454": [[-0.542688, -0.000307357, -0.10453699999999999], [0.543286, 1.04718, 0.104396]], "5acb2e1a-52a3-4c48-b1e8-cff8a8629fbd": [[-0.760208, 8.68072e-18, -0.18185300000000001], [0.760208, 0.374739, 0.18199200000000001]], "3f6764c2-a9d4-4cf0-9be7-0ceb1689ca4d": [[-1.02152, -0.000440418, -1.13151], [1.0220799999999999, 1.56602, 1.13106]], "54201f14-8563-4ddd-b7e6-6247c53ec731": [[-0.99789, -0.00014363600000000002, -0.483171], [0.9977809999999999, 0.921087, 0.483644]], "6909b251-4795-4514-abe9-52499e6211be": [[-1.409608, 0.002, -0.44496600000000003], [1.409608, 0.759248, 0.444154]], "8270e7a4-5580-4994-b894-42821f5b7f87": [[-0.9010009999999999, -2.27649e-17, -0.21486899999999998], [0.9010009999999999, 2.8, 0.21488]], "8c9586a4-6dce-49c7-a3f8-415e3eebf113": [[-0.7999250000000001, 2.7731999999999998e-05, -1.06088], [0.800091, 0.747843, 1.0604500000000001]], "b0729f86-70c2-45bd-85c4-2f32914835d5": [[-0.19658799999999998, 0.0, -0.191748], [0.19658799999999998, 0.604588, 0.191642]], "5e0b6ac4-1465-3e95-a275-b92c4447bc18": [[-0.240095, 0.00030700000000000004, -0.334921], [0.32168399999999997, 0.819139, 0.314937]], "51db0597-5ed1-4529-93e6-fa6386be744f": [[-0.30510000000000004, 0.0, -0.27440000000000003], [0.30510000000000004, 0.62283, 0.27440000000000003]], "3dc8b61d-d325-3e75-95fe-11d53c60386b": [[-0.608785, 0.0, -0.605449], [0.608784, 0.7365999999999999, 0.60545]], "825d5591-8b48-4f21-9edc-98c0f33d6e0c": [[-1.20004, 3.05176e-08, -1.18115], [1.20004, 1.2671299999999999, 1.18115]], "937e614a-58a2-42fa-aace-802ca23d7b67": [[-0.6512779999999999, -7.25822e-08, -0.254963], [0.6512779999999999, 1.2, 0.255039]], "6fbc8e89-ab8c-4a6d-8a84-0846b46d2da0": [[-1.32752, -1.14441e-08, -0.50612], [1.3271100000000002, 0.960414, 0.504505]], "0a183ba7-03e7-4ff1-b82c-25fb0f6836d0": [[-0.6824250000000001, -5.33609e-06, -0.267706], [0.6824250000000001, 0.9455119999999999, 0.267706]], "0f57a6d3-b79d-4005-b67f-3818637e8c0f": [[-0.806545, -1.16028e-08, -0.979838], [0.806533, 0.982809, 0.979838]], "188665f0-d79b-4324-a29b-11dc27cff384": [[-0.300026, -3.8147e-09, -0.05], [0.300025, 1.0893000000000002, 0.05]], "13527984-eff9-4dc5-b53c-3a0d615d0c78": [[-1.10758, -6.15207e-17, -1.162], [1.10717, 1.20025, 1.16252]], "4efa29ba-9633-4dfa-bae3-76dde466850c": [[-1.011, 5.992000000000001e-17, -1.17857], [1.01118, 0.979762, 1.17932]], "04b7beca-998e-4249-9aa2-8179e547f7fe": [[-0.287101, -0.000409162, -0.263722], [0.28662299999999996, 0.615245, 0.263893]], "1b8736b6-b495-4a46-b9a0-ba8a7e23c861": [[-0.298878, 0.0, -0.298878], [0.298878, 0.518003, 0.298878]], "75de60a8-2a5a-4f2d-8aac-844e130ce7eb": [[-0.597396, 0.0, -0.586377], [0.597396, 0.353825, 0.586377]], "0d759977-35da-3037-b200-cdf9746e63fc": [[-0.900657, 0.0, -0.595427], [0.900657, 0.738022, 0.595427]], "56c10802-e905-4c8a-af4e-39229cce0a9b": [[-0.8232389999999999, -7.62939e-09, -0.9055540000000001], [0.8232389999999999, 1.48988, 0.9055540000000001]], "b30c3638-8f73-4b0c-b7ce-39d682058a88": [[-0.451556, -3.952e-05, -0.123557], [0.451556, 0.769562, 0.123557]], "45015f90-242f-3ce0-a78b-37b3fee5df9c": [[-53.1377, 0.0, -53.1931], [53.5423, 73.66, 53.4869]], "3cb2af3d-0728-47d2-beb2-1c442e3f1d2a": [[-0.603232, -0.0, -0.18666], [0.603232, 0.7968540000000001, 0.18666]], "23b9a85f-8b12-4a5e-b764-6188b9052c66": [[-1.099018, 0.0, -0.5996710000000001], [1.099018, 0.752602, 0.599675]], "a36e6305-8ddd-49e2-994b-8aa4cb3cd46b": [[-0.8477849999999999, 1.52588e-08, -0.224268], [0.8477849999999999, 0.6245280000000001, 0.224269]], "352da9da-884c-4f16-a532-b74e0907f216": [[-0.255785, 0.0, -0.233413], [0.255776, 0.671648, 0.233367]], "c3d4dc00-ce19-440a-b2e9-6bd71dddd189": [[-0.9, -1.02984e-17, -0.20004999999999998], [0.9, 0.535016, 0.20004999999999998]], "a1dfeb31-6a7d-499a-a652-16d55bb90aa8": [[-0.750001, 0.0, -0.499801], [0.75, 0.956301, 0.499801]], "ebdea042-022e-454c-bd82-c538063e710a": [[-0.477626, -5.36678e-05, -0.47751699999999997], [0.477528, 1.08825, 0.477626]], "a6d45771-8bf5-4c80-b7d5-df3f3231069a": [[-2.0, 4.57764e-08, -0.225001], [2.0, 2.6217200000000003, 0.225001]], "077eab93-6117-36bd-8747-3c82cd8ae69e": [[-0.220642, 0.0, -0.284443], [0.220642, 0.9580970000000001, 0.284443]], "43cb86ce-5ccb-468a-afd1-0b901fc858c8": [[-0.285701, 3.05176e-08, -0.196251], [0.285701, 0.797536, 0.19625199999999998]], "138024d2-847c-45fd-b173-7ce070d4b2de": [[-0.238969, 0.0, -0.23370100000000002], [0.23894300000000002, 0.606847, 0.233688]], "4d638e18-d7a9-42a6-bcf0-a171a2dc733b": [[-1.53648, -0.00019790599999999997, -0.49139000000000005], [1.53726, 0.857873, 0.491432]], "d8b554ad-633b-4dd4-91dc-f73d862c33a2": [[-0.43687, -1.0003200000000001e-17, -0.436008], [0.43687, 0.9203910000000001, 0.436008]], "0e46f349-afe4-4970-ba3c-48ac7665d8f2": [[-0.753371, 8.999999999999999e-05, -0.34543], [0.753371, 0.58094, 0.345477]], "45b0b83a-234f-4d95-869c-1b84eaae4371": [[-0.448232, -3.37508e-17, -0.217], [0.448232, 1.64185, 0.217]], "4bef95bd-6393-3a83-8168-ccf37034bf4f": [[-0.32646200000000003, -2.9999999999999997e-06, -0.34768099999999996], [0.32646200000000003, 0.867649, 0.346859]], "60d1e421-af4e-4c72-8207-818d3216dd98": [[-0.772957, 0.0, -1.153394], [0.771689, 0.7816110000000001, 1.15523]], "6f9912cf-7212-48a3-8660-88e21cd9952a": [[-1.58936, 2.31028e-17, -0.430105], [1.5896199999999998, 0.9065340000000001, 0.429531]], "619637f9-6ab3-4635-9c16-8b0e53bc7e14": [[-1.34065, -4.75496e-08, -0.31961300000000004], [1.34065, 2.1, 0.319606]], "5f647e91-185e-4daa-819b-4de676e55627": [[-0.301126, -7.899460000000001e-05, -0.23171], [0.30116499999999996, 0.63818, 0.23189]], "86c99c80-ffde-3e4a-b530-716ea61ea8dd": [[-0.249538, 0.0, -0.247373], [0.249538, 0.860711, 0.247373]], "a32b0fc2-b052-451f-a741-7f3af815f1d6": [[-0.369372, -0.0015607099999999999, -0.37683500000000003], [0.369641, 0.405873, 0.378408]], "8dd376c8-f393-4eee-98cb-2c61d559a139": [[-1.00291, -3.16919e-17, -0.7135469999999999], [1.00288, 1.7348500000000002, 0.7135469999999999]], "f357a38b-c67f-4f52-8989-5f48f06fee1c": [[-0.935706, -0.000609305, -0.282937], [0.935099, 0.501554, 0.282874]], "2c06c345-24a6-39a1-985b-92f65f107790": [[-0.21224, 0.001207, -0.21124300000000001], [0.21224, 0.614243, 0.21124300000000001]], "24277836-46fc-4e83-9372-d43f8d2c8387": [[-0.7641849999999999, 0.0, -0.317764], [0.7641849999999999, 0.662025, 0.317629]], "5e45fbb8-da62-4d69-a204-0a6821cec957": [[-0.898724, -1.61773e-17, -0.4964], [0.898742, 0.738935, 0.49678199999999995]], "295d2e22-8732-4a2f-9c71-b6300ac0a416": [[-0.27521, 3.8147e-07, -0.275527], [0.275108, 0.47942100000000004, 0.27535]], "6cbc5509-607f-4ae1-bee0-897c3e12c435": [[-0.515122, 1.4873e-07, -0.16010100000000002], [0.515122, 1.28382, 0.16010200000000002]], "95625d50-3350-480b-add8-dd1001fdd612": [[-1.02231, -3.48066e-17, -0.6422410000000001], [1.02231, 1.83862, 0.6422410000000001]], "52820d95-f870-4970-88a1-de260adb2f1f": [[-1.26001, 8.226440000000001e-08, -0.740938], [1.25943, 1.8943100000000002, 0.740874]], "112faa66-051e-360e-9d2e-4f7b09c74b67": [[-59.4835, 0.0, -58.342], [58.6416, 71.6196, 58.4571]], "04c2b45f-2148-45c9-a597-65f5e295cd0b": [[-0.46955800000000003, -0.00261992, -0.492868], [0.469482, 1.34611, 0.49268300000000004]], "71049fce-e754-474e-9e88-7e0c5eb5fc50": [[-0.9524389999999999, -3.43392e-05, -1.14727], [0.9516070000000001, 0.832787, 1.14713]], "8bce5a0f-7695-4b4e-9cd1-98529f41c16a": [[-1.021392, 3.5000000000000004e-05, -1.11114], [1.021063, 1.172941, 1.111141]], "02bfd47f-1ca7-4ae4-b430-58caf73cc4a3": [[-0.30109400000000003, 1.79637e-18, -0.296935], [0.301423, 0.43149, 0.29666]], "f0e405d5-66e9-40b4-b1e7-54e1bf5ae757": [[-0.265117, 0.0, -0.265117], [0.265117, 0.511485, 0.265117]], "99a900fe-8fad-4b3d-bfba-183c1840d4cd": [[-0.409124, -0.00105208, -0.40875300000000003], [0.409259, 0.6498149999999999, 0.40944600000000003]], "895d8a11-aa16-45b9-8228-696c6ee54b32": [[-1.37713, -4.58062e-17, -0.806092], [1.37491, 0.765378, 0.8062600000000001]], "05a94943-152e-49fb-bcf3-2ffd258f2ba6": [[-1.4162299999999999, -0.00177057, -0.522105], [1.4162299999999999, 0.934482, 0.521923]], "41e1128e-175d-4d87-b8df-5e387411c05e": [[-0.417838, -4.76837e-09, -0.18663799999999997], [0.417838, 0.879924, 0.186456]], "1d8597b7-314a-4630-981e-5774da17e202": [[-1.359129, 0.002, -0.523327], [1.359129, 0.945371, 0.523327]], "b84ecd71-d3a3-4693-8b67-b29dc33eaf07": [[-0.990269, -5.63266e-17, -1.00624], [0.9874679999999999, 1.04128, 1.0056]], "5d59c748-ed7f-4809-ba97-f82f2005961e": [[-0.250819, 2e-06, -0.30666699999999997], [0.25025600000000003, 1.000577, 0.307269]], "3ff6eaaa-c772-4bf2-a6a3-98c1e611d1de": [[-0.6839390000000001, 0.0, -0.391928], [0.6839379999999999, 0.358812, 0.391928]], "2c4ecb63-70e5-4499-b5e3-be20da1d43ec": [[-0.490219, 7.564959999999999e-06, -0.185777], [0.490088, 1.2584, 0.18600000000000003]], "8f4810fb-e4cc-419b-85c3-6f1b6e7cd88e": [[-0.383887, 0.0, -0.429648], [0.383887, 0.968508, 0.42955]], "3124954e-9fdd-4935-8cba-c4c3c2790dac": [[-1.686926, 0.000273, -0.753763], [1.687259, 1.2903200000000001, 0.753763]], "faa6f628-cd9f-439a-9dc2-c483c9c3854f": [[-0.340388, 1.14441e-08, -0.340387], [0.340388, 0.96367, 0.340387]], "1f29a03d-3975-4852-9b5e-5f845d52aa4e": [[-0.339188, 2.91249e-23, -0.307201], [0.339373, 0.603752, 0.306791]], "0ad6bfc2-37db-4427-8e3a-f61b6b402f41": [[-0.301443, -0.00178907, -0.076488], [0.301779, 0.56959, 0.0765345]], "286d18bd-dfd1-4713-ba8c-9bb470c06e8e": [[-0.485896, 0.0, -0.4707], [0.485896, 0.380799, 0.471013]], "f39d1c67-f0ce-40f1-90ff-11c27760bfbf": [[-1.267069, 0.0, -0.413686], [1.267069, 0.865596, 0.413653]], "4b638089-b181-47a2-97b3-5d395a887857": [[-0.8887609999999999, -0.00321121, -0.306326], [0.8892230000000001, 0.7392409999999999, 0.307576]], "2ae5cf29-90c3-4e7d-b704-f677de8de74c": [[-1.00223, 1.52588e-08, -0.454914], [1.0022199999999999, 0.749517, 0.45488300000000004]], "9be47561-99e8-4b41-9859-21c991ddd63e": [[-0.8, 5.72205e-08, -0.21956199999999998], [0.8, 2.306, 0.21956199999999998]], "57a4a270-d34f-4d32-8d61-56d2cbc63b9f": [[-0.37006100000000003, 0.0, -0.351225], [0.37006100000000003, 0.9045380000000001, 0.351225]], "5913fcd8-15f7-436c-a45e-996b40679eed": [[-1.1452689999999999, 0.0, -0.52512], [1.14524, 0.847356, 0.524385]], "4f141b35-3f86-4ab4-acff-38ca3a5ba6cc": [[-0.541868, 0.0, -0.297635], [0.541851, 0.423265, 0.297628]], "9c8f17d1-6051-3122-8c64-dff9ec99726f": [[-0.6, 0.0, -0.6], [0.6, 0.436056, 0.6]], "28822bac-780b-4505-bb68-a071c356ce46": [[-1.262006, 1e-06, -0.6452030000000001], [1.261936, 1.830354, 0.645205]], "101fa2fc-b9c5-4f99-9512-d30bd184c5c6": [[-0.502401, -0.00121918, -0.28647], [0.502401, 0.867985, 0.28647]], "06509395-ad6d-4511-a033-99cb87b77406": [[-0.258018, 0.0, -0.18666799999999997], [0.258018, 1.279649, 0.18666799999999997]], "1a44b604-fd57-4736-809b-744950970253": [[-1.221441, 5e-06, -1.112749], [1.218526, 1.3066820000000001, 1.112749]], "05f33669-6a06-4415-9a37-9fcff31c7469": [[-0.294332, -1.69683e-17, -0.294332], [0.294332, 0.0505292, 0.294332]], "61844206-d82e-480b-9f49-98c5177310ef": [[-0.353964, 1.16089e-17, -0.32976], [0.353964, 0.8438859999999999, 0.329429]], "71cab17f-bef2-45d9-834c-f83ded9a78ba": [[-0.232868, -8.64203e-18, -0.146671], [0.232868, 0.47919199999999995, 0.146809]], "85bfe4c6-a82e-4aed-ad08-874a33a164f1": [[-0.798417, -6.405359999999999e-17, -1.0587], [0.798417, 0.871156, 1.0587]], "1db5db4e-9e78-4fa2-938f-88c840b8e229": [[-1.152173, 0.0, -0.249402], [1.152173, 0.60526, 0.249402]], "1867ae96-cd59-4900-aa1e-79aaa5686ad6": [[-0.9, -9.1382e-18, -0.170762], [0.9, 2.0, 0.17075500000000002]], "2992f7f6-b4d4-433a-8056-9568a080b7aa": [[-2.22577, 4.38041e-17, -0.951502], [2.22577, 1.13613, 0.9521769999999999]], "62319141-32fa-4353-b2ff-ec31ca232e3e": [[-0.243186, 0.0, -0.24246099999999998], [0.243149, 0.607177, 0.242097]], "e4c41bb4-dbc8-460a-8f45-a4c63b06774b": [[-0.326804, 1.1000000000000001e-05, -0.419161], [0.326804, 1.075837, 0.41879]], "61244c9f-3151-46b9-a8ff-6dd8b2e290a8": [[-0.289854, -1.7532e-17, -0.286319], [0.289854, 0.129157, 0.286319]], "0bf7ae83-317a-4484-9028-7378ce1d6a02": [[-0.75, -0.00010192400000000001, -0.258928], [0.75, 0.9, 0.259038]], "fece5db1-0118-497a-a482-6b817243ff2c": [[-1.16927, -0.000992275, -0.48593899999999995], [1.16887, 0.9489190000000001, 0.48639200000000005]], "53f68f1f-4bcd-3cc9-a2c6-9c47aeccc09e": [[-0.915784, -0.000114, -0.915784], [0.915784, 0.77, 0.915784]], "4896b67d-8d64-4a67-b5aa-7703288dcbad": [[-1.0184600000000001, -5.50622e-08, -0.33719499999999997], [1.0184600000000001, 2.36388, 0.33719499999999997]], "473a97ec-e818-4b43-8510-88a00eccc52b": [[-1.01833, -0.000816865, -1.18736], [1.01864, 1.08083, 1.1858]], "43a92e5c-88da-407b-8c29-c5b4938f7e7f": [[-0.716442, 4.89453e-07, -1.03931], [0.7155459999999999, 1.29339, 1.03863]], "04c3af22-bdb4-410d-b328-a59eb263d750": [[-0.34446, 0.0, -0.31846800000000003], [0.344452, 0.80159, 0.318434]], "dd430ed4-f896-4083-bc3f-6b97b143e22e": [[-0.788292, 0.0, -0.250388], [0.788292, 2.323576, 0.250388]], "8ae27420-3ab5-4648-8e67-749b6c1a2cfb": [[-0.16866499999999998, 0.0, -0.18622599999999997], [0.16866499999999998, 0.45798099999999997, 0.18622599999999997]], "0076eaf7-105e-4df1-b6d0-d0d5fd15f576": [[-1.1532, -9.059909999999999e-09, -0.429878], [1.15615, 0.777223, 0.42960299999999996]], "6ced1032-d38c-4f35-bd6b-1db28ee2b8b2": [[-0.254039, -0.000212653, -0.262454], [0.254207, 0.508844, 0.262636]], "0bfee146-32dc-4288-a80b-f25738dc419d": [[-0.335251, 0.0, -0.35879], [0.335251, 1.03712, 0.359033]], "846b84f0-cdf2-478b-a9b1-61258c4fcf5a": [[-0.970592, 0.0, -0.48428], [0.973235, 1.116588, 0.482863]], "e122455b-d067-40c3-b28d-2b4f8505098a": [[-0.259745, -1.62222e-05, -0.280576], [0.259704, 0.845178, 0.28060199999999996]], "28e8b0f4-18df-4205-90ee-4464a317eb89": [[-0.558874, -1.2827e-17, -0.265362], [0.558874, 0.840437, 0.265362]], "2c97ef89-5aba-4f59-a58b-2347df3d783b": [[-0.348153, 0.0, -0.56508], [0.348153, 0.42166400000000004, 0.565223]], "7c1e5c1b-7961-4fc0-96b7-f5d0a6c533af": [[-0.28831, 0.0, -0.270242], [0.28831, 0.46055799999999997, 0.270242]], "c0701cd0-dbd5-4401-aaa7-f1087ef77b64": [[-0.40091, 2.47061e-08, -0.291912], [0.401004, 0.488351, 0.29184699999999997]], "0d521015-9097-4339-8960-ae1a366d1a65": [[-0.268086, 0.0, -0.19268999999999997], [0.268086, 0.547855, 0.19268999999999997]], "a24df003-cf54-4ce0-b098-0ed4a2e75ee2": [[-0.360766, 0.0, -0.34820799999999996], [0.360766, 0.61519, 0.34820799999999996]], "1153ed50-e6fa-4de0-8bb3-f87c7eddfcb1": [[-1.11826, -6.71846e-05, -0.44471400000000005], [1.11826, 0.7948439999999999, 0.44501399999999997]], "fd3fa0d2-6621-4379-9d2a-046bf6b25e62": [[-0.287476, 0.0, -0.28133199999999997], [0.287421, 0.648914, 0.28133199999999997]], "252b7771-54c8-4e82-ae60-f5cd28ae2432": [[-1.06361, -2.06802e-08, -0.732992], [1.06361, 1.83651, 0.732359]], "64c32b95-8784-4cef-b87a-91e37a3d9561": [[-0.244676, 0.0, -0.309418], [0.244895, 0.9270879999999999, 0.309406]], "43627085-4737-4395-bfbd-04aac285c338": [[-0.7651319999999999, 1.52588e-08, -0.400862], [0.764174, 0.49136899999999994, 0.400871]], "71685264-4807-49f5-9108-1d5a5e2bacec": [[-1.06882, -6.85621e-17, -1.14938], [1.0684099999999999, 1.0480200000000002, 1.1502299999999999]], "c1ec8df3-e322-4f39-a807-ac5d91808915": [[-0.9926210000000001, 0.0, -0.39415799999999995], [0.9926210000000001, 0.7978109999999999, 0.39415799999999995]], "8358b15a-1a44-3670-a93f-02d45ed2a5c1": [[-0.239778, 0.0, -0.277549], [0.239778, 0.891096, 0.277549]], "43b7ae4e-cd9e-43e8-aff5-ec0213828902": [[-0.3875, -9.16256e-06, -0.2375], [0.387499, 1.06897, 0.2375]], "780d5b90-9cd4-4ccb-9b91-90d333a01a60": [[-1.07898, -0.00020672599999999999, -1.05795], [1.07842, 1.6028200000000001, 1.05874]], "7f2b4539-f05b-336d-9489-19c6f70823f1": [[-0.279388, -4.6e-05, -0.264216], [0.279388, 0.806557, 0.264216]], "81c1c1f1-e65f-4d39-924f-ae77b420e904": [[-0.36517200000000005, -4.88153e-05, -0.340805], [0.36412100000000003, 0.439559, 0.339876]], "7a5f2dc8-4afc-4533-b62d-6f5d5d418663": [[-0.23106200000000002, -6.6549700000000004e-18, -0.180532], [0.23106200000000002, 0.48645000000000005, 0.180531]], "26eec936-848b-4896-a686-e4fd2928bd4c": [[-0.895638, 0.000637939, -0.8988710000000001], [0.895638, 1.49921, 0.8988710000000001]], "6379e340-fa69-4f51-bf10-2a9620ab9895": [[-1.55621, -1.52762e-17, -0.308094], [1.55621, 0.522922, 0.308094]], "a9c7820c-0454-40ba-8de0-fb47fbe3e230": [[-0.344478, 0.0, -0.319118], [0.344422, 0.829896, 0.31902]], "ee62edd2-bf12-49cb-805f-c3be34e30bdf": [[-1.4733, 0.000577665, -0.836837], [1.47322, 0.815414, 0.836167]], "0cfd7b6f-d676-4625-8296-cf8bf990c7d3": [[-0.253824, -6.4900600000000005e-06, -0.294867], [0.25392499999999996, 0.828995, 0.294812]], "771f29ec-7a0a-4593-9f1a-6a31d281fbd0": [[-0.11479400000000001, -0.000148748, -0.11491], [0.115164, 0.977048, 0.114928]], "02ca8be6-bd56-4978-8d94-a49dc559d60f": [[-0.20590399999999998, 0.0, -0.20590399999999998], [0.20590399999999998, 0.617785, 0.20590399999999998]], "70a7ba8f-0dfb-4690-8915-efb66271c776": [[-1.008699, 0.000496, -1.18153], [1.008949, 1.189093, 1.18144]], "c4218547-84cc-4753-a767-2dff65d5ca5b": [[-0.545377, 0.0, -0.484792], [0.5447339999999999, 0.833035, 0.484863]], "49328e15-1016-48dc-9bd3-51d5af2b8edc": [[-0.294157, 0.0, -0.351021], [0.294157, 0.95503, 0.351021]], "2804d5ab-87ac-4aa7-b13f-e6e85bb7f7f6": [[-0.908967, 0.0, -0.37254800000000005], [0.908967, 0.724538, 0.37254800000000005]], "1887ddcc-00c2-4e95-8813-b57c6cba8d9e": [[-0.257506, 0.0, -0.257506], [0.257506, 0.446064, 0.257506]], "6763c31f-255b-490b-b9ae-8e710f68d78c": [[-0.9561700000000001, -0.00014064, -0.386637], [0.9554259999999999, 0.816724, 0.386861]], "bfac22d6-69bc-4439-9d68-f341f17b8858": [[-0.36646900000000004, 0.0, -0.36646900000000004], [0.36646900000000004, 0.636313, 0.36646900000000004]], "2903d674-c7d8-47f2-bd7e-a802c5b15c65": [[-0.840038, -5.2706999999999995e-05, -0.25154699999999997], [0.8393510000000001, 1.24869, 0.252429]], "c37fbe8d-cac6-4be0-b61f-3fe38d39cb31": [[-0.745171, 0.0, -0.7451720000000001], [0.745171, 0.45636899999999997, 0.7451720000000001]], "054cfcec-e51e-4764-b0e7-0804b251644c": [[-0.692346, 0.0, -0.596871], [0.69231, 1.716017, 0.596881]], "27460e0c-af6e-49bc-8737-a8049a14759d": [[-0.41452300000000003, -0.00041056500000000005, -0.409758], [0.41434600000000005, 0.705771, 0.409659]], "3765256c-e8e7-48ce-aeee-86718cb18aea": [[-0.231574, 0.0, -0.251077], [0.231574, 0.558794, 0.251077]], "4f91cb82-0031-41d6-b592-c20c21826dcb": [[-0.684152, -1.07124e-17, -0.20136800000000002], [0.684152, 0.827181, 0.20136800000000002]], "42b587ce-612c-481f-8234-ccf35b6ab1bf": [[-0.196131, -9.30638e-18, -0.196131], [0.196131, 0.5996710000000001, 0.196131]], "26a519d3-8191-4536-9ba5-1b18e2a04aba": [[-0.6657299999999999, 0.0, -0.46293799999999996], [0.6657299999999999, 0.39913600000000005, 0.46293799999999996]], "7c733b95-5fb5-418d-b622-b3d72514d1eb": [[-0.601742, -3.2369999999999996e-17, -0.62289], [0.601723, 0.41, 0.622923]], "8616658e-3dd5-4215-9940-f540664634e8": [[-0.811704, 3.8147e-09, -0.256905], [0.811704, 2.35237, 0.256905]], "18fb275b-e855-46fe-b6bf-b8a69a2de2af": [[-1.2659799999999999, -1.83697e-17, -0.300001], [1.2659799999999999, 2.9, 0.300001]], "f91f6539-4cc0-42a0-ab17-751b26e5b886": [[-0.700061, -2.0057900000000002e-17, -0.35098], [0.700061, 0.65996, 0.35098]], "278e81be-6b75-453a-b282-1968caf19808": [[-0.478057, 0.0, -0.549245], [0.478036, 1.027674, 0.549288]], "8e1d0985-a787-43c7-8d93-fc8687f765b6": [[-0.717638, 0.0, -0.215928], [0.717638, 0.7376659999999999, 0.215928]], "4285f421-d8a2-4d05-99ac-3d6e504e10b1": [[-0.321787, -1.18481e-08, -0.38033], [0.320744, 0.7392059999999999, 0.380113]], "57cb58f7-2362-4141-b971-d084b8775a7e": [[-0.479334, -1.3838500000000002e-08, -0.41511600000000004], [0.479334, 0.707951, 0.41511600000000004]], "b2b201d2-a252-4dad-b4c6-26fc50f70e3f": [[-0.225589, -2.03607e-05, -0.225595], [0.22560199999999997, 1.2123, 0.225596]], "76c5a6b2-0a6c-3a28-b627-0c2babaaf934": [[-0.40055300000000005, 0.0, -0.40055300000000005], [0.40055300000000005, 0.716168, 0.40055300000000005]], "2138ef44-a995-43ae-a69e-89c68b79c10d": [[-1.1168259999999999, -0.0, -0.5171520000000001], [1.1168259999999999, 0.958197, 0.5171520000000001]], "abf4d68b-4155-43b7-871d-60d43d918c80": [[-0.724267, 0.0, -0.5475829999999999], [0.724267, 0.519732, 0.5475829999999999]], "3336af2e-3b1f-4ac6-9f77-5531f7a4a761": [[-0.27491499999999996, 0.0, -0.266901], [0.274898, 0.852684, 0.26701]], "0eb16b14-8984-4734-a882-9299abc06b12": [[-0.364184, 0.00015800000000000002, -0.331885], [0.364184, 0.792905, 0.331875]], "175c3581-d44b-432d-b417-2202780ecd17": [[-0.526984, 0.0, -0.251597], [0.526984, 0.260847, 0.251597]], "569036c4-ebff-4415-aa05-8540e90b6889": [[-1.30971, -0.00012502, -0.504711], [1.31019, 0.813438, 0.504486]], "5ab1f8b6-8f67-4792-be0c-1e447e205492": [[-0.645254, -0.00101441, -1.12351], [0.646216, 0.954423, 1.1235]], "dce6c138-1b81-4a6a-bfa6-2565313c784b": [[-0.483728, 5.999999999999999e-06, -0.43194000000000005], [0.48401200000000005, 0.8093429999999999, 0.431874]], "08105e17-9e57-354d-b6e2-22c2ffd287ae": [[-40.0, 0.0, -39.9999], [40.0, 80.0561, 40.0]], "4b511d2d-2604-47d4-9b8b-ee9cc5981502": [[-0.375415, 0.0, -0.430773], [0.375255, 1.022248, 0.430773]], "fb6685eb-c59c-4eb6-ac2c-e18075d272b0": [[-0.275035, -1.74664e-06, -0.225019], [0.275047, 0.45830800000000005, 0.225024]], "ad930160-d122-4a7c-aaa3-c3e1b1892052": [[-1.03005, -1.40162e-17, -0.238872], [1.03005, 0.34962899999999997, 0.238872]], "7734a9f8-3617-4962-9e92-2314c9feebe5": [[-0.47029699999999997, 1.77383e-17, -0.30663799999999997], [0.47029499999999996, 2.0, 0.30663799999999997]], "c6d8d8a6-e89e-4daf-af35-ff9222d74e99": [[-0.335194, 0.0, -0.33163699999999996], [0.335194, 0.6579200000000001, 0.33135]], "0d6dc583-09ed-4fa1-a45e-b30e82c94a2e": [[-0.599764, 0.0, -0.310761], [0.599764, 0.624748, 0.310761]], "42ea9018-cefd-485d-a09d-90898cba02e6": [[-1.03281, -6.332209999999999e-17, -1.0688], [1.03271, 1.10671, 1.0688]], "0510dcc8-b034-4af5-870d-37f4a3294f19": [[-0.273834, -3.1770700000000004e-05, -0.28748799999999997], [0.274858, 0.760888, 0.287352]], "757958e8-0ae3-4fdb-8d86-cae4961534b0": [[-0.21433700000000003, 0.0, -0.21444500000000002], [0.21444500000000002, 0.551385, 0.21433700000000003]], "4b632dc2-95c8-46ea-9301-4083ced7edd0": [[-0.356777, 0.0, -0.348737], [0.356777, 0.605976, 0.348737]], "041a916a-a746-4f7d-a07a-ac58c5aaed19": [[-0.7892, 0.0, -0.478036], [0.7892, 0.376538, 0.478037]], "1856bb7a-3a5c-4d2f-a0d6-63c050256865": [[-0.7790590000000001, 7.62939e-09, -0.260287], [0.7790590000000001, 0.738068, 0.260195]], "0e622d86-7b3a-457e-bdcd-5df230e8f700": [[-1.51, -6.88863e-18, -0.1125], [1.51, 2.5, 0.1125]], "dd6632d8-6a8a-452b-b5a7-05aa1caaa67b": [[-0.264204, 0.0, -0.232327], [0.26369, 0.69907, 0.232327]], "4e797c9e-3b19-4ecd-af03-50b04806d079": [[-1.20577, -4.1389399999999996e-08, -0.829805], [1.20577, 2.08136, 0.830766]], "56ec8ff8-b055-4681-b9b2-7f2f50159d0d": [[-0.753229, -1.04607e-06, -0.244722], [0.753229, 0.69267, 0.244722]], "6e66039a-10d4-4ed5-8195-5a0a39e5708f": [[-0.470073, -0.000248623, -0.470083], [0.470068, 0.854641, 0.47007899999999997]], "368126ad-e669-3651-b160-d01180b3a422": [[-0.5461, 0.0, -0.20670000000000002], [0.5461, 0.8128, 0.20670000000000002]], "0f3ad2d0-9f46-4fa4-999b-bcdced69f8e9": [[-0.7700870000000001, 0.0, -0.528369], [0.7700870000000001, 0.227458, 0.528368]], "0415abaa-67b5-4554-aee0-cce2041c377e": [[-0.33710900000000005, 7e-06, -0.41456200000000004], [0.33710799999999996, 1.175349, 0.41462499999999997]], "7c776785-d4c2-4679-afd8-362191042eb5": [[-0.446265, 0.0, -0.32567500000000005], [0.44626600000000005, 0.361207, 0.32567500000000005]], "779996fd-864f-4920-aeab-dec65d8156d9": [[-0.509177, 0.0, -0.459685], [0.510001, 0.7418689999999999, 0.459704]], "08f57e4c-2eba-41c0-b9e0-c4a2202d4d6f": [[-0.416643, 2.2000000000000003e-05, -0.44420699999999996], [0.41651000000000005, 0.878391, 0.444284]], "bdfa3934-5614-4e78-b514-1422e72145c2": [[-0.321263, -2.3619e-08, -0.38015], [0.32165900000000003, 0.739207, 0.38009099999999996]], "0a43b5a1-84f0-43d7-a083-0be70bca5b29": [[-0.520497, 0.0, -0.43825000000000003], [0.520497, 0.289555, 0.43825000000000003]], "3677859c-a5ac-44c3-ad0a-53116d53edd8": [[-1.05484, 6.675720000000001e-09, -0.458494], [1.05484, 0.717402, 0.458671]], "bfb8335a-f5d0-4107-a140-6abd684b5193": [[-0.321316, -1.96006e-17, -0.321316], [0.321316, 0.689631, 0.321316]], "94d07fac-1f98-45a8-8433-a4ee5a71881d": [[-0.179608, 7.62939e-09, -0.170077], [0.179608, 0.471688, 0.170077]], "5b297cf4-b136-4d5d-8300-ea0afafb5ea9": [[-0.9849899999999999, -0.000147817, -0.43452399999999997], [0.984429, 0.896612, 0.43626600000000004]], "78f9ba88-446e-4ab0-ac9d-304862f86879": [[-0.513417, 0.0, -0.0932846], [0.513606, 1.24847, 0.092811]], "64daf139-bf01-3270-8280-81f9a4c63b97": [[-0.220649, 0.0, -0.28248999999999996], [0.22490400000000002, 0.944563, 0.262282]], "4ca6e261-d6c9-4bc8-aba7-570a7c5c477c": [[-0.839036, -1.7183100000000003e-07, -1.06318], [0.839036, 1.0707, 1.06374]], "b56e73a9-f2f3-4316-be1e-01ebcded12a8": [[-0.275, -1.17345e-17, -0.20741700000000002], [0.275, 0.569638, 0.20741700000000002]], "1effa5b9-0e7b-497a-9900-f05599eb0603": [[-0.128755, 2.99369e-18, -0.130744], [0.12902, 0.934867, 0.130016]], "8ed56745-059f-4c36-a608-eddb0147b361": [[-0.153742, -0.000141001, -0.153894], [0.153785, 0.949833, 0.153857]], "8f395a56-5523-4a6f-b1d6-867aa2e5f8cb": [[-1.01801, -1.1634099999999999e-17, -0.20000099999999998], [1.01801, 0.44, 0.20000099999999998]], "0883d358-904d-4e6b-9bac-66ad28c5621e": [[-0.24909900000000001, -2.77402e-06, -0.163423], [0.24908999999999998, 0.510999, 0.163603]], "e97af3b0-8c3f-4624-867c-f2750c724c08": [[-0.694813, -1.21778e-17, -0.23041899999999998], [0.694813, 1.5902500000000002, 0.23041899999999998]], "68cc0244-6327-422b-8dcc-fbe6373df0ed": [[-1.494139, 0.0, -0.545452], [1.494632, 0.911125, 0.545452]], "d423f212-4f99-42ea-b58b-96bd3fcce983": [[-0.289617, -7.09868e-06, -0.31605], [0.289617, 0.634058, 0.31605]], "743d8e1d-69b5-4b6a-9fd6-03a1352f5e51": [[-0.732092, 3.6659599999999996e-07, -1.01611], [0.731826, 1.5876400000000002, 1.0161]], "3d5ed2e0-dfc4-445b-954e-ba743d5d0608": [[-0.557639, 0.0, -0.41040999999999994], [0.55785, 0.78598, 0.41071599999999997]], "d4b6dacb-ad36-4b38-a196-be4a82a19cd3": [[-0.25, -1.52588e-08, -0.235181], [0.25, 0.9692780000000001, 0.235181]], "3d73cf6d-ccd3-4adb-8227-5639bcaa5a30": [[-0.255664, 0.0, -0.24785000000000001], [0.25569400000000003, 0.7665609999999999, 0.247912]], "d6b60794-13f9-4838-a8ba-42728549a252": [[-1.43121, 0.0, -0.527345], [1.430583, 0.9686, 0.5269469999999999]], "dcd12165-add5-4fac-997c-64d13ccdf2dc": [[-0.700851, 0.0, -0.43117300000000003], [0.700869, 0.786381, 0.43117]], "62c0ecae-e88b-424c-b2ce-fddf154f6e94": [[-1.5393000000000001, -2.65898e-17, -0.583805], [1.5395500000000002, 0.766974, 0.585901]], "1192c99e-03bf-4e1d-beae-1f1137b36474": [[-0.8442310000000001, 1.21506e-05, -1.0901399999999999], [0.84438, 1.0726900000000001, 1.09009]], "52773855-35bf-486a-86e1-8da6f2b0f949": [[-0.909437, -6.28213e-17, -1.0356999999999998], [0.909084, 1.02032, 1.0355800000000002]], "74334eea-8e8d-435e-884b-90aa58af8dfb": [[-0.332866, -2.88758e-05, -0.316359], [0.33264499999999997, 0.8692529999999999, 0.316222]], "5a94927e-6e62-4ecf-b7d4-bb05a6e49881": [[-0.6453279999999999, 0.0, -0.309271], [0.6453279999999999, 1.018982, 0.30927]], "10fc4efb-3a91-4608-ae31-99be4b1994b9": [[-0.579929, -0.0, -0.32443399999999994], [0.579929, 0.374187, 0.32447899999999996]], "70b2249c-626f-4ff1-8622-8a373079fb90": [[-0.344338, 0.0, -0.384507], [0.344338, 0.8472280000000001, 0.384507]], "79b16006-afa9-49d4-b921-25edaac4123c": [[-0.680361, 0.0, -0.680361], [0.680361, 0.794409, 0.680361]], "5bc98dcc-616f-428c-9e01-f3cdfd559b74": [[-0.85508, 6.0491299999999995e-05, -0.973515], [0.85508, 1.11867, 0.974412]], "1da4d744-9c9c-4173-a98a-fa71b5ebd6d0": [[-1.02072, -1.64379e-17, -0.31155], [1.02072, 2.4, 0.311677]], "7f76342f-ff02-477f-aba0-5f7ca235f177": [[-1.1022100000000001, 1.80021e-17, -0.303997], [1.1022100000000001, 2.66367, 0.303997]], "1e323e71-b339-4f5a-9d20-f073f8b7b946": [[-1.1502, 2.4332299999999998e-17, -0.576055], [1.1502299999999999, 0.858738, 0.576055]], "6b07fdf9-3353-4f71-b919-12d9b6e725c4": [[-1.07672, -6.80938e-14, -0.300001], [1.07672, 2.4, 0.300001]], "fad585b9-df56-4b87-8a82-5130d5273c9b": [[-0.285445, 4.05312e-09, -0.29967900000000003], [0.285109, 0.7759579999999999, 0.300088]], "437c76a9-0f16-326c-af73-1416f584c018": [[-0.722616, 0.001099, -0.356943], [0.722637, 0.76047, 0.363003]], "449c28c5-9a78-4c1a-a56c-c01b129b7b1d": [[-0.9850639999999999, 0.00045, -1.070351], [0.985405, 1.0305849999999999, 1.068898]], "5f76aa30-b920-4c2d-a9fd-d12b8faadb57": [[-0.369839, 0.0, -0.365464], [0.36979399999999996, 0.8048770000000001, 0.365464]], "513b0848-dae4-421e-9a3d-b0354e49867a": [[-0.88503, 0.0, -0.469334], [0.8850979999999999, 0.935173, 0.469334]], "6ee12c70-d29e-408b-999e-19c015833ed6": [[-1.101436, 6e-05, -0.468594], [1.101434, 1.066017, 0.468119]], "eda3f823-4d9d-47ef-9a7a-554d1d286f1a": [[-0.21628699999999998, 0.0, -0.166748], [0.21628699999999998, 0.183053, 0.166748]], "29e6f9a9-27ad-4fcb-a6fe-5bf122e70de5": [[-0.251224, 0.0, -0.251477], [0.251224, 0.503902, 0.251477]], "e11b5f53-d9d3-4358-a54a-db8d8e1c906d": [[-0.264347, -4.79379e-05, -0.302065], [0.264399, 0.778806, 0.30179]], "23757bb2-04af-4895-93fe-821f08b9621a": [[-0.6031110000000001, -1.3777200000000001e-17, -0.228277], [0.603218, 1.07134, 0.228173]], "ba97a2e9-12d3-4e3b-899e-d2ba3600401e": [[-0.351685, 0.0, -0.33624899999999996], [0.351685, 0.915304, 0.33634099999999995]], "6f69a3c8-d4b8-3a77-a61a-5457d9919af8": [[-0.235784, -0.00086, -0.307761], [0.232788, 0.992372, 0.305241]], "9582f63c-7e72-44c6-9373-3e229f9ff7ef": [[-0.239293, 2.6e-05, -0.23910299999999998], [0.238522, 0.44756700000000005, 0.23910299999999998]], "19d684d8-49e5-43d2-9b51-95a328b10038": [[-0.8423569999999999, -4.1659499999999996e-05, -0.341936], [0.8423569999999999, 0.593244, 0.341936]], "a3dc6693-247c-402b-bde6-088b41e2b943": [[-0.525892, 0.0, -0.175174], [0.525892, 0.85, 0.174877]], "5892dc93-a5af-433b-8577-593dbc1daf43": [[-1.6606899999999998, -0.000463904, -0.995171], [1.66056, 0.928982, 0.995434]], "520db020-41a5-4b08-8bfe-fba186025995": [[-1.2, 1.03116e-08, -0.55], [1.2, 0.7492719999999999, 0.55]], "5f05cfda-4d85-4688-a70b-3baa33dc2673": [[-0.587744, -4.3847499999999997e-05, -0.58707], [0.587426, 1.1655200000000001, 0.587422]], "dcc0d9be-f097-4c42-9ad9-ce7289cb2a00": [[-0.214281, 0.0, -0.21991700000000003], [0.214281, 0.566432, 0.219918]], "0d76011d-07e9-46a9-bb68-58c9817c073f": [[-0.75592, 0.0, -0.6176429999999999], [0.75592, 0.498681, 0.617532]], "38a0eb5c-4858-47c2-88aa-aeae16a613cf": [[-1.123238, 0.0, -0.476703], [1.123421, 0.786952, 0.476703]], "f7fbaf28-7bf3-4ecb-a0aa-8ac142d49d4c": [[-0.6, -7.92226e-18, -0.17241199999999998], [0.6, 0.820005, 0.172435]], "8396f9e8-020d-3f12-aed8-f3c03f1afc25": [[-75.0983, -0.0656, -58.9207], [73.2354, 74.0968, 67.5716]], "3f3730f5-9ebd-409b-9802-310dcbe14ef9": [[-0.14046, -1.84665e-05, -0.142236], [0.14046, 0.310012, 0.142235]], "297a6458-cfda-40cd-a626-6e400865e88f": [[-0.22253, 5.1178400000000005e-05, -0.22903300000000001], [0.22254000000000002, 0.7171599999999999, 0.229606]], "72a765a8-ebb5-4b01-898b-95dbf84dfc15": [[-1.03467, -7.79467e-18, -0.14195], [1.03467, 1.92319, 0.14196899999999998]], "8647d988-aee5-43dc-8581-5f1a88ca548e": [[-0.652, -1.87983e-17, -0.307], [0.652, 1.885, 0.307]], "0decf86f-3a22-41aa-85f8-0d8935fad2ee": [[-1.53709, -0.000182725, -0.491108], [1.53702, 0.858514, 0.491698]], "7a01b7bf-3e97-4fa8-be61-da5d161ace85": [[-0.188573, 0.0, -0.118772], [0.188573, 0.507224, 0.118772]], "82dd1526-b4bd-4002-98db-40d4ef2f0d24": [[-0.407123, 0.0, -0.510791], [0.40706000000000003, 1.186146, 0.510768]], "d42a8632-a9dd-4fb5-b5f9-8d779738b806": [[-0.290194, 2.3999999999999997e-05, -0.334758], [0.290195, 0.71237, 0.335327]], "cd296bb5-3632-448b-a311-219981c3abc8": [[-0.242223, 0.0, -0.242223], [0.242223, 0.6481709999999999, 0.242223]], "9d02356e-4491-44c2-ab71-3a1d2dd51364": [[-0.4, -7.160219999999999e-06, -0.225001], [0.40000300000000005, 0.265012, 0.225001]], "be16ce5b-3558-49aa-9e10-ffd10cb2666d": [[-0.155783, -9.9319e-18, -0.16220099999999998], [0.155783, 0.739967, 0.16220099999999998]], "280daff8-2fa7-4043-a7ea-b56785a535c3": [[-0.17550000000000002, 0.0, -0.17074999999999999], [0.17550000000000002, 0.961778, 0.170751]], "28dc7820-e90c-43fe-9ffa-b7b55df0d268": [[-1.5, -1.58286e-17, -0.2905], [1.5, 0.7863720000000001, 0.2905]], "6ccf5881-8519-4b21-9c35-942f95925282": [[-0.659172, 8.58307e-09, -0.52386], [0.659244, 0.520167, 0.523838]], "81ddf074-b7a6-4240-a931-f755a2e77efb": [[-0.19616499999999998, 0.0, -0.19616399999999998], [0.19616499999999998, 0.299028, 0.19616399999999998]], "5ce0286c-a161-4473-82c0-febd82bc2233": [[-1.03886, -2.93099e-17, -0.561329], [1.03886, 0.907908, 0.561329]], "18593675-46e1-43e9-bd4b-1a6a7c7a0d9b": [[-0.181332, 0.0, -0.16910799999999998], [0.181332, 0.79011, 0.16910799999999998]], "6e5e0d45-da25-4d79-ac67-894e0f0c4343": [[-0.6662649999999999, 0.000854586, -0.47509599999999996], [0.6667350000000001, 1.25925, 0.47484699999999996]], "9b316b03-aa55-4c1a-9275-39ac09cd4c28": [[-0.194709, 0.0, -0.198125], [0.194709, 0.6816949999999999, 0.198125]], "42c1d0f7-4208-4a87-82c8-c3efdbfb006c": [[-1.5307499999999998, -7.50789e-08, -0.435606], [1.53173, 0.993316, 0.43638800000000005]], "94757edc-09ee-40f3-8d90-5d22cf8c90a4": [[-0.493565, 9.1849e-05, -0.44232999999999995], [0.493344, 0.7972790000000001, 0.44248800000000005]], "01ed86b1-ced4-4912-ad00-bc6f577b0d2f": [[-0.292966, 0.000376937, -0.29296700000000003], [0.292966, 0.44826900000000003, 0.29296700000000003]], "66e40b29-af8f-49c9-aab8-7e77a886fb2c": [[-0.32002, -0.000245637, -0.325004], [0.32000100000000004, 0.550402, 0.32500100000000004]], "19efa364-5660-4da9-91b2-4914cfbeed6e": [[-0.18110099999999998, 1.14441e-08, -0.187177], [0.18110099999999998, 0.804431, 0.187177]], "0ac76760-7f74-45ce-8c78-761c131f5b19": [[-0.48627499999999996, -0.00053827, -0.431601], [0.486475, 0.528898, 0.431644]], "6a4e1071-4421-44ad-8e16-f9c059c8a2eb": [[-0.7492409999999999, -2.7061800000000002e-17, -0.44962], [0.749281, 0.767943, 0.449621]], "1dd88270-c9f5-4c73-8c74-5193053cf0f6": [[-0.7003189999999999, -8.14924e-05, -0.495505], [0.700247, 0.759212, 0.495575]], "8bc6081c-33fe-4d27-a977-2ab8c98475f8": [[-0.509675, -0.000323446, -0.563106], [0.509266, 0.991394, 0.562761]], "4617e73f-7689-4152-9126-4e187e734209": [[-0.440293, -6.675720000000001e-09, -0.330747], [0.440038, 0.43227699999999997, 0.330747]], "cd470226-4ae8-4473-bc68-7bcf5b856abf": [[-0.313938, 0.0, -0.288962], [0.313938, 0.5740460000000001, 0.289037]], "22c1b237-0364-4c1d-b9cf-83296265aaf9": [[-0.75, -1.04348e-08, -0.2], [0.75, 0.55, 0.2]], "18306d26-ed26-4b58-9e29-40257519686b": [[-0.388245, 1.8e-05, -0.369199], [0.388245, 0.7169070000000001, 0.369365]], "172c35ee-d2c1-4176-8201-67b94892bc3f": [[-1.48072, -0.0005107029999999999, -0.879187], [1.4806700000000002, 0.8094070000000001, 0.878931]], "52223d6f-5f03-4b70-9a49-92805098c2b4": [[-0.288956, 1.9e-05, -0.273383], [0.288994, 0.797507, 0.27351400000000003]], "21f3e30f-6168-4172-85b6-7d23174aa582": [[-1.133518, 0.0, -0.6433920000000001], [1.133518, 0.955923, 0.646057]], "3bd29e63-e999-48e4-b6be-2e40c7ab8d01": [[-0.285508, -3.8147e-09, -0.15942399999999998], [0.285508, 0.892529, 0.15942299999999998]], "24bc76e9-7b52-48ea-92d5-e7cf72b9cf43": [[-0.460929, 0.0007599999999999999, -0.5445920000000001], [0.460929, 0.989774, 0.544437]], "0bdedce1-da4c-403c-be4c-187376bf9b01": [[-1.0, -1.2025699999999999e-17, -0.252605], [1.0, 1.4, 0.252605]], "4cd64da7-df8c-43c9-9ed1-38422b88391e": [[-1.00744, -1.52588e-08, -0.42239800000000005], [1.00705, 0.775624, 0.42331]], "30f9385f-e431-44ac-8735-056448902493": [[-0.293311, 6.515309999999999e-08, -0.293157], [0.293286, 0.7556470000000001, 0.293157]], "f4415c22-7722-4616-9bb0-71ca2ab788f4": [[-0.3275, 2.6822099999999996e-09, -0.3275], [0.3275, 0.212558, 0.3275]], "2873696b-47ed-40b6-a998-67ac58c20aac": [[-1.27969, -0.000589605, -0.766791], [1.27982, 1.86711, 0.7668]], "b50df533-8bcf-440d-8591-e0767ead1c45": [[-0.836706, -2.98604e-06, -0.401415], [0.8367, 0.947426, 0.400116]], "2972c0ae-70fd-443e-9a29-1cad1c1678b1": [[-1.024161, 0.0, -0.41903199999999996], [1.024173, 0.765547, 0.418968]], "706d0a67-d418-42a1-af06-922c47841a31": [[-0.958643, -2.3669199999999997e-17, -0.432832], [0.958686, 0.787038, 0.432832]], "312ab765-8b7a-4f21-9c80-a8ee820e8c29": [[-0.47578200000000004, -0.00278648, -0.475846], [0.47584400000000004, 0.845467, 0.47584699999999996]], "35258d4e-b8b4-4c1a-a15a-98f08d4db444": [[-1.01987, -1.23584e-17, -0.201828], [1.01987, 2.4, 0.201828]], "40eb7172-370e-36d8-a79d-5485e3df0da0": [[-0.762, 0.0, -0.48239800000000005], [0.762, 0.9144, 0.482802]], "487ef439-405e-49f6-a67d-b9a38ec99088": [[-0.461998, 1e-06, -0.499252], [0.461967, 0.7095560000000001, 0.498673]], "336fad5c-9843-433e-accc-7c98a17c6e9d": [[-0.139529, 0.000242, -0.154814], [0.139529, 0.724559, 0.154814]], "49be972d-8cd9-3b6f-b3b5-6dce58777e2c": [[-0.283732, 0.0, -0.239808], [0.283732, 0.798213, 0.239808]], "39057a21-0a68-3494-8522-2e473dd6a38f": [[-117.2775, 0.0, -117.2775], [117.2775, 73.8126, 117.2775]], "5807cc9e-d971-44ea-a0e6-a304e3228e1e": [[-0.286506, 3.88868e-06, -0.287346], [0.286429, 0.84608, 0.286688]], "1daf21ae-dcd0-4c8c-b657-521574440b4e": [[-1.349322, 0.0, -1.226504], [1.3506790000000002, 2.233139, 1.226504]], "7ac4043c-003f-4589-a01f-6f2e7cfece4b": [[-0.349611, 0.0, -0.383149], [0.349611, 0.9276009999999999, 0.383212]], "4ec6e318-cd8c-49e0-b102-0c5c5cb8b42b": [[-1.43616, -1.39622e-07, -0.5456179999999999], [1.43616, 0.905256, 0.545595]], "206f88c4-68b7-4ecf-ba15-8bf296209515": [[-0.525539, -4.3953500000000004e-08, -0.25837299999999996], [0.525539, 1.72547, 0.258374]], "420d3333-253b-3794-be1f-fc8e257ef4dc": [[-0.249088, -0.0, -0.230624], [0.249088, 0.883594, 0.230624]], "7a1f4069-0253-46b2-8be8-a93ad0a09355": [[-0.218217, -4.55e-06, -0.25], [0.218137, 0.7199939999999999, 0.25]], "c587a72d-3210-4024-baa1-7db05714cd15": [[-0.53142, -0.000117721, -0.633004], [0.530667, 1.2884, 0.632607]], "c4d463e5-67a1-4e2e-ac3a-464660039dd5": [[-1.34022, -0.0015218999999999999, -0.397416], [1.34046, 1.0061799999999999, 0.398864]], "0484c891-8b77-4ffc-9488-0fb020589d7c": [[-0.312479, -1.39888e-17, -0.243339], [0.312479, 0.677945, 0.24373999999999998]], "4846be13-d6b0-44ea-a65a-b6d58f7ba3be": [[-0.341471, -0.000973564, -0.36509199999999997], [0.341768, 0.9676279999999999, 0.36588099999999996]], "0a9746e7-e3d6-439d-a8b1-9800effe330b": [[-1.2067400000000001, 8.42285e-06, -1.1794], [1.2067400000000001, 1.6306299999999998, 1.17926]], "5ef07e46-a04c-4c68-a7b0-0fe373068a0e": [[-0.6, -1.2674799999999998e-06, -0.238413], [0.6, 1.4513399999999999, 0.238444]], "8b6f639d-8b97-46df-9612-88ef535bc191": [[-0.704121, 0.0, -0.517104], [0.704121, 0.7995950000000001, 0.517104]], "47d829d9-4d88-4c03-a07f-0c86a1e9777e": [[-0.181159, -7.3415899999999994e-06, -0.181159], [0.181159, 0.385069, 0.181159]], "98bd39e2-1e03-4140-b223-0637679ceab3": [[-1.1055, 0.000543, -0.43146], [1.1055, 0.8938320000000001, 0.43034100000000003]], "18e2be8c-ecb1-4a9d-a177-3b543f5c3c0c": [[-0.9015000000000001, 7.62939e-09, -1.05026], [0.9015000000000001, 1.39342, 1.0487900000000001]], "f7a37f58-7612-4c4f-b24e-15165d788663": [[-0.25, 0.000200928, -0.25], [0.25, 0.6554800000000001, 0.25]], "deef724e-97ff-4e08-bb11-b2ccd3c6f86a": [[-0.3, -3.6107799999999997e-06, -0.25], [0.3, 0.6465219999999999, 0.25]], "d52bdd98-ee0c-45aa-8af9-647a9ac37faa": [[-0.37884700000000004, 0.0, -0.434953], [0.378548, 0.795864, 0.43540799999999996]], "842dd2a1-f34c-4411-9bf4-8887fa5ac8aa": [[-1.297011, 0.0, -0.47324800000000006], [1.297011, 0.853036, 0.473093]], "eabf16b3-31a0-401f-9538-55fadad9e166": [[-0.302023, -3.26614e-05, -0.302312], [0.302006, 0.916195, 0.301984]], "fecd2ca0-c1a0-4029-b8b1-48cd4857dc72": [[-1.15482, -1.71177e-05, -0.598373], [1.15467, 0.739978, 0.5983080000000001]], "2bc8e31d-bc22-41eb-bfa1-645f5a99e76d": [[-1.44858, -1.12274e-17, -0.33022599999999996], [1.44858, 2.14263, 0.330227]], "4f8af693-6ae1-4f10-974e-0a6c6494c24a": [[-1.05047, 0.00022535199999999998, -0.358399], [1.05178, 0.749277, 0.358408]], "e767be05-ec88-49a9-acbd-9281759d0545": [[-0.21977799999999997, 0.0, -0.21977799999999997], [0.21977799999999997, 0.463162, 0.219613]], "6ff0a5d1-3f0f-420a-a580-65f04cf7f3df": [[-1.022224, 0.0, -0.7548999999999999], [1.0220829999999999, 1.982738, 0.754277]], "4d48203c-9e9b-4765-b44c-9f8387932370": [[-0.34454799999999997, 0.0, -0.258415], [0.34454799999999997, 0.444844, 0.258417]], "f17561cd-0ed6-4bda-85ed-b2360990e04f": [[-0.7, -1.78273e-17, -0.308858], [0.7, 2.64, 0.308858]], "82545c5e-ab4d-4a95-9942-9cf0bf65e00f": [[-1.3296199999999998, -0.00021318299999999998, -0.7977], [1.32846, 0.8195520000000001, 0.797718]], "eb58d595-0923-4e20-9320-4e5bc141dee8": [[-1.18659, -0.00123012, -0.8262940000000001], [1.18655, 0.7870180000000001, 0.824945]], "1a1dbb8b-d272-49a9-b74f-73b3bf99b094": [[-0.234678, -3.4547799999999995e-08, -0.197591], [0.234711, 1.19115, 0.19759000000000002]], "53cfd3bb-3df5-4726-a8e8-41507bc87881": [[-0.21486799999999998, 4.27642e-08, -0.21393399999999999], [0.215091, 0.965018, 0.21392]], "e44cc071-e02d-445a-bcba-3246883a3a6b": [[-0.850001, 3.05176e-08, -0.10200100000000001], [0.850001, 1.75, 0.10200100000000001]], "a0f4720c-c9ea-48f0-a4c3-8e9786d01589": [[-0.774564, 3.01228e-07, -0.5766], [0.774562, 1.5747399999999998, 0.5766]], "7e400cb0-57a1-4f3b-a328-c3dade29b927": [[-0.176832, -0.0, -0.18587900000000002], [0.176832, 0.461151, 0.18587900000000002]], "938d0d56-f9f2-46c2-8744-0ef2fe8af5b9": [[-2.09708, -2.33472e-14, -0.17850200000000002], [2.09708, 2.55057, 0.17850100000000002]], "496400ff-4540-4911-a1c8-a5ace630cf89": [[-0.248296, -1.0498e-05, -0.267986], [0.248247, 0.8090999999999999, 0.268017]], "00d778e1-69ff-4165-b026-ba56d74b46ac": [[-1.63635, -0.00018273999999999997, -1.31623], [1.63706, 0.945177, 1.31772]], "565c1660-66a9-40b3-836f-69247918a221": [[-1.3946100000000001, -1.48945e-17, -0.597395], [1.39459, 0.75, 0.597381]], "a8affecd-7ecb-49ac-998a-fad79a84fd5f": [[-0.256902, -0.0005292560000000001, -0.21519300000000002], [0.256794, 0.7978400000000001, 0.215544]], "65939fd7-81fe-41be-ad82-ac1b2e306560": [[-0.192427, 0.0, -0.19500399999999998], [0.192102, 0.447273, 0.195077]], "90510de5-90ed-4cf2-b81a-f0d8295f2a1c": [[-0.61624, -0.000302537, -0.140071], [0.6163190000000001, 0.954267, 0.140342]], "e597e9f5-8599-4fd3-8818-bb3839f07519": [[-0.148406, -0.00017877, -0.0689878], [0.148404, 1.42583, 0.0692201]], "fa93acac-e20d-4beb-b574-7ec840ffdc08": [[-0.279954, 6.13794e-08, -0.29997599999999996], [0.279954, 0.0700009, 0.29997599999999996]], "7ced9cbb-76b5-4ddc-bae4-51b91148addf": [[-0.65146, 3.4127800000000005e-07, -1.05045], [0.651002, 1.1946299999999999, 1.05043]], "4067e2aa-b63f-45b2-b339-d8a8a0f2fc91": [[-1.260922, 0.0, -0.49717300000000003], [1.260922, 0.858024, 0.49701799999999996]], "aa975b88-c7ff-4818-815a-818d7620e6f5": [[-0.30593800000000004, 0.0, -0.23802800000000002], [0.30593800000000004, 0.5109819999999999, 0.23802800000000002]], "e9d87768-d768-4d5e-80e2-a8278b1b338b": [[-1.44737, -1.52588e-08, -0.966623], [1.4468100000000002, 0.8120959999999999, 0.966768]], "42e54e32-06be-4ff7-9a9e-0b9704a63b23": [[-0.308641, 9.287999999999999e-05, -0.298896], [0.30866, 0.34568, 0.298895]], "c25a8a68-cb4b-46f4-b8bb-93564dbb4168": [[-1.479362, 0.0, -0.435925], [1.479362, 0.8854420000000001, 0.435925]], "ffdfd7be-01aa-4445-9ece-546494e97983": [[-0.500031, 0.0, -0.269775], [0.500022, 1.923182, 0.269775]], "5a26b424-c0a0-4bd5-9f01-6167e9e9655f": [[-1.31, 7.62939e-09, -0.39000100000000004], [1.31, 2.56, 0.39000100000000004]], "ceb60e18-07b9-4ba5-a95d-cdfc5d7ad36b": [[-0.336588, -2.05366e-06, -0.336588], [0.336588, 0.774278, 0.336588]], "acdef222-48cf-47e8-a7ae-9b23568651a2": [[-0.274188, 0.0, -0.274188], [0.274188, 0.48257, 0.274188]], "41905139-7ced-4868-bdc5-2320eb3cf9d7": [[-1.0253700000000001, 0.0, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "0ab0164f-ae57-4896-886d-b44e0976c33a": [[-1.109539, 0.0, -1.130722], [1.109212, 1.228032, 1.129939]], "44e44923-2a1a-41ac-ace1-e8d67966e2e0": [[-0.575758, -3.21882e-08, -0.273742], [0.575758, 0.892633, 0.273742]], "e1b8cf75-8dbd-47e5-801f-224c9eacff96": [[-0.838566, 0.0, -0.206584], [0.838566, 0.625931, 0.206584]], "6687199f-1e37-4eb7-bd46-35aa03c37795": [[-1.11347, 0.0, -1.27667], [1.1135599999999999, 0.933138, 1.275428]], "1aff9ddb-f43a-41b2-a311-2c04b14f80e4": [[-1.19126, -4.05443e-08, -0.50562], [1.19151, 1.03509, 0.505534]], "496b7e7d-2798-41ca-ab19-1ac9c5701ad2": [[-0.335833, 5.6156399999999995e-06, -0.304358], [0.335777, 0.46751, 0.304413]], "20fb1c4b-96da-4f80-bfa7-4c37339a7b9d": [[-0.54321, -3.22987e-05, -0.21], [0.54321, 0.9918729999999999, 0.21007]], "1573812c-d11d-33e0-bfa5-2ba29b32f55f": [[-0.717252, 0.0034939999999999997, -0.355683], [0.728978, 0.7282940000000001, 0.364317]], "8693a47d-21a4-4b98-a1b4-5e901f379b8f": [[-0.619026, 0.0, -0.11378], [0.619026, 1.329725, 0.11378]], "044d36af-6260-47b1-b5ed-5fbe749c9c55": [[-0.842008, 0.0, -0.19620200000000002], [0.842008, 0.573504, 0.19620200000000002]], "5a26dcc3-f0bf-406c-b6c7-cc52e2154e0c": [[-0.357839, -2.75633e-05, -0.381219], [0.357839, 0.648818, 0.381021]], "d9da9766-187e-4fde-941c-fafe1c7c1e32": [[-0.541361, 3.55271e-18, -0.269044], [0.541361, 0.8168340000000001, 0.269042]], "459a2ea4-6c35-4a2d-b0df-bc4aa237b957": [[-0.558766, -2.68536e-06, -0.292732], [0.558767, 0.786608, 0.292732]], "57cd5fa8-de34-40f9-a614-c36e1fb9cddf": [[-0.8641249999999999, -2.6378399999999998e-08, -0.20550100000000002], [0.8641249999999999, 0.449687, 0.20550100000000002]], "a73611c9-2e6c-4a93-ba67-11d95c482710": [[-0.7107899999999999, 2.21882e-06, -0.20380700000000002], [0.710779, 0.898425, 0.20380700000000002]], "055bc151-65bb-4ffa-88b1-8d33de4bf6f4": [[-0.834349, -0.000418169, -0.20165], [0.834349, 0.900833, 0.20165]], "4a997e08-109d-3e9b-839e-143cdb7dcdf0": [[-0.402121, -0.000568, -0.350428], [0.40152299999999996, 0.728982, 0.47112299999999996]], "a349bffe-efeb-4c23-96b0-b729b5aa9f41": [[-0.161432, -9.85569e-18, -0.161395], [0.161432, 0.387453, 0.161395]], "7f7f4e36-ed2c-4b97-93ed-53e9d90c5f27": [[-0.829652, -0.00018255500000000002, -0.44534999999999997], [0.8303919999999999, 0.8086409999999999, 0.44455300000000003]], "98c3a8dc-12b0-451b-90b7-2da5e794de2f": [[-0.740234, 0.0, -0.383626], [0.740234, 0.782712, 0.38351100000000005]], "1dcd2467-e18d-4b63-abf9-353e0fd8e102": [[-0.373421, 0.0, -0.412015], [0.373159, 0.9935269999999999, 0.412034]], "abd30bc0-35e4-48a4-9b37-9a8ac45dff0b": [[-0.424668, 0.0, -0.382185], [0.424668, 0.521871, 0.382087]], "1e22825d-bea5-45dd-8daa-84bf1ed41974": [[-0.772632, -0.000121462, -0.446003], [0.772578, 0.821796, 0.445919]], "fd14e55c-9ed5-44ed-82b9-a006356d4d1a": [[-0.265599, -1.16778e-07, -0.268292], [0.265601, 0.807967, 0.268341]], "5a574d57-03b8-4a9c-b48a-b83bc69c93de": [[-1.364194, 0.0, -0.444009], [1.3634680000000001, 1.084203, 0.443636]], "0e011eab-116b-48ed-bff3-217dd74134ea": [[-0.387456, 0.0, -0.234634], [0.387456, 0.355972, 0.234634]], "ad639c04-ae87-4546-b52f-6a8dd4267007": [[-1.4765450000000002, 1.1999999999999999e-05, -0.5246179999999999], [1.476761, 0.9789910000000001, 0.524309]], "66dc3538-e02c-46d3-aa7e-f486dc97d406": [[-1.14241, 1.52588e-08, -0.493149], [1.14376, 0.816638, 0.49439]], "5f7696c4-4fb0-371c-804d-0894fbec0cdd": [[-0.470161, 1.1999999999999999e-05, -0.508925], [0.472643, 0.8503189999999999, 0.431404]], "064bdaa9-b5a4-4c51-a8a5-bf56e37e61d8": [[-0.483728, 5.999999999999999e-06, -0.43194000000000005], [0.48401200000000005, 0.8093429999999999, 0.431874]], "1960f978-47fb-4612-bbdb-a6f81922d0d2": [[-0.31672999999999996, 0.0, -0.283971], [0.31672999999999996, 0.528505, 0.28378]], "15b1eb53-47d5-4fd8-9862-99654a5b3b4a": [[-1.9010900000000002, -2.78954e-08, -0.159957], [1.9010900000000002, 2.40014, 0.159958]], "bda4a699-2966-41f0-a12d-fe49a330eef4": [[-0.378601, 1.00194e-05, -0.37935], [0.378601, 0.28644200000000003, 0.37935]], "6a9a400d-10eb-450b-a120-37b5eb1dd19a": [[-0.400674, -0.00028531600000000003, -0.315535], [0.401406, 0.830592, 0.315676]], "e55b9d48-5b48-47b2-a75c-79e3d1de19fe": [[-0.660337, -0.00066714, -0.313266], [0.66025, 2.1644, 0.314292]], "2902cac3-e9e9-31de-843a-dc2f0e4c3c00": [[-1.2076850000000001, -0.001933, -0.421725], [1.218339, 0.712541, 0.423111]], "5a0f473a-5b91-4f8e-91e8-a9429d0fef72": [[-0.788808, 5.4000000000000005e-05, -0.319574], [0.7886279999999999, 0.6434829999999999, 0.319267]], "b6162b5a-e518-4d46-9320-d6779eba51c3": [[-0.324523, -4.1131099999999997e-05, -0.205723], [0.324523, 0.746414, 0.205723]], "05940431-6b68-4a02-8d56-f4aa23e5d98b": [[-0.45362499999999994, 8.36258e-18, -0.1784], [0.45362499999999994, 1.99054, 0.1784]], "094c8e50-1e26-40a7-940a-531170f0692d": [[-0.361033, 0.0, -0.319147], [0.361033, 0.611863, 0.319147]], "129a993b-1a2b-4a1d-9a4d-fb1a014a34f1": [[-1.27174, -0.000380777, -0.7395050000000001], [1.2717100000000001, 1.90179, 0.741182]], "1bb1325f-22f8-448b-9308-76c2e30d269e": [[-0.40949399999999997, 6.4133e-08, -0.409493], [0.40949399999999997, 0.9326819999999999, 0.409493]], "50ca90b4-ca3f-4b10-8754-18d0d0fcdbf0": [[-0.7069289999999999, -0.000910895, -0.427732], [0.7069070000000001, 0.816648, 0.427639]], "6e6776a3-cd00-4733-b409-646607dcceee": [[-0.416643, 9.8e-05, -0.44420699999999996], [0.41651000000000005, 0.8795820000000001, 0.444312]], "452a269a-8731-4498-aa51-106e03b841a6": [[-0.993417, 0.0, -1.052988], [0.993417, 1.039934, 1.052988]], "ea720506-d8df-408c-a127-61b20b1a44b1": [[-1.6495199999999999, 1.46446e-07, -0.705255], [1.65, 0.634261, 0.7061329999999999]], "21fe6489-540f-475f-b7f9-7047569dcd75": [[-0.29672, -0.000326699, -0.296613], [0.297211, 0.641954, 0.29703]], "22b6a9a3-4b18-34a8-87aa-ebf44e79a249": [[-0.273868, 7.2e-05, -0.292177], [0.27378399999999997, 0.9810639999999999, 0.294057]], "10242084-1eda-4e21-a12e-16649a5c2ac3": [[-0.381928, 0.0, -0.36851500000000004], [0.381928, 0.7380410000000001, 0.368186]], "2b585876-e920-40e9-82d5-21e3bff39664": [[-1.6045429999999998, 0.0, -0.20433199999999999], [1.605186, 0.905071, 0.204263]], "74c0a336-7cd7-4d7f-b89d-015ae3914880": [[-0.456453, 0.0, -0.5197959999999999], [0.45609900000000003, 0.975386, 0.5187039999999999]], "1d0d50dd-ff75-33ad-ba7d-e69012ca79e1": [[-0.23180399999999998, -0.000739, -0.258202], [0.23180399999999998, 0.800404, 0.2615]], "0e3e91f0-6e44-43bd-bf9e-cc73e5e5e5dc": [[-1.117349, 0.000496, -0.402314], [1.117327, 0.858548, 0.402373]], "1d64bc46-4760-44e9-a8b6-7d999058127c": [[-0.654202, 0.0, -0.654249], [0.654202, 0.612429, 0.654249]], "8506c3c8-5d05-464b-b1d0-f416b5a2b2a4": [[-1.07735, 8.010770000000001e-09, -0.464625], [1.07737, 0.700828, 0.465495]], "1079ffc4-4203-42cd-a881-9c36137d6e9b": [[-1.06755, -0.000562297, -1.20974], [1.06714, 1.1100400000000001, 1.20966]], "27d683f3-1218-4742-9551-7706cb869e3b": [[-1.04471, -1.0563499999999999e-07, -0.205478], [1.04471, 0.44911999999999996, 0.205478]], "ea9f8fc0-4564-40d4-b994-e192a9280bad": [[-0.041141300000000006, -1.24732e-06, -0.041141300000000006], [0.041141300000000006, 1.37756, 0.041141300000000006]], "0e62bdf5-42b7-4d1e-8acf-791daba32178": [[-2.00751, -0.000592814, -0.7399089999999999], [2.00677, 0.919206, 0.741219]], "6d9b2c0d-0aab-4a55-9ca5-24b8f6d87eda": [[-1.059247, 0.0, -0.462512], [1.057888, 0.8412860000000001, 0.462675]], "291af851-0bc1-4801-946c-8d812302a558": [[-0.22490200000000002, 0.0, -0.225382], [0.225382, 0.9988030000000001, 0.225382]], "eed30d6b-2e8d-43ae-ac1c-191bf6d8d17e": [[-0.36530999999999997, 5.85763e-05, -0.354608], [0.36571, 0.810201, 0.35501699999999997]], "2c5e2e87-080f-47e6-872a-701278ad629e": [[-0.744649, 5.2882599999999996e-17, -0.911481], [0.744649, 0.939112, 0.911481]], "77348b64-e8f9-421c-8986-e3dbede8b470": [[-0.68, -5.27313e-08, -0.335], [0.68, 2.00007, 0.33500100000000005]], "76ea1494-a5ad-46a8-ad29-fbde851b263e": [[-1.27663, -7.62939e-09, -1.07268], [1.27709, 0.982116, 1.07268]], "0c453fd9-b14b-4c52-b8eb-42c06d5f3833": [[-1.5594700000000001, 7.62939e-09, -0.966227], [1.5590799999999998, 0.906834, 0.9659449999999999]], "25f9860f-0f9c-4c6a-b01a-bce9cf82d97e": [[-1.27423, -0.000234976, -0.751779], [1.27482, 0.827135, 0.748536]], "784b0ec8-c1ab-4273-80fd-906adfad3321": [[-1.223117, 0.0, -0.505001], [1.223117, 0.804521, 0.505001]], "6b81fda0-ac94-4196-a7fd-0d831297937b": [[-0.302023, -3.26614e-05, -0.302312], [0.302006, 0.916195, 0.301984]], "9506fdca-4311-4cd4-aff2-2ae7f32235c1": [[-1.18988, -0.00016836, -0.44473199999999996], [1.18987, 0.795171, 0.445188]], "75532394-98ff-4727-b030-4ed24099e593": [[-0.7754859999999999, -0.00015465299999999998, -1.19389], [0.77536, 0.935043, 1.19289]], "c82a33c2-0925-462c-a6d6-1a1ab4b50611": [[-0.9, -0.000432146, -0.46076300000000003], [0.9, 0.784988, 0.46076300000000003]], "72ef43f5-ea82-43b4-81c9-11f713843d8e": [[-0.730646, -2.1918099999999998e-06, -0.634259], [0.730646, 0.907717, 0.634251]], "925a2ab4-6002-45fe-847e-68db1ffed28b": [[-0.46639200000000003, -8.69371e-05, -0.51494], [0.46639200000000003, 0.276375, 0.51494]], "ad0f7d81-bf19-4dc5-a7b9-81fac28c84d1": [[-0.135566, -1.7129300000000002e-05, -0.135566], [0.135566, 0.571953, 0.135566]], "db17de9f-ed6b-4774-aad6-c34f69a4c1a6": [[-0.372947, 0.000257, -0.394447], [0.37270800000000004, 0.94325, 0.394447]], "ece88c15-2270-42a9-8d97-e56296100ff1": [[-0.170437, 0.0, -0.165825], [0.170437, 0.90901, 0.165825]], "d9047545-2d36-41a5-83a6-58b152bcd786": [[-1.03159, -2.6033199999999998e-17, -0.55867], [1.03177, 1.03067, 0.559311]], "08857c2f-2242-4178-82e2-c2a96d735fd3": [[-0.191886, 2.3179600000000002e-07, -0.19189699999999998], [0.191845, 0.443209, 0.191921]], "361d8d34-5dae-4e60-b153-d6580ec7373a": [[-0.95, 1.1999999999999999e-05, -0.45003], [0.95, 0.657153, 0.45004600000000006]], "99b09c57-c42b-4288-98a6-6ad2e01d6708": [[-0.269789, 0.0, -0.269789], [0.269789, 0.498757, 0.269789]], "154c23ee-080b-3989-9278-68a26c379389": [[-0.775625, -0.004536, -0.53561], [0.7746930000000001, 0.9115430000000001, 0.534219]], "97164129-a744-462c-99da-22590c4631d3": [[-0.314122, 8.7e-05, -0.319434], [0.313576, 0.827262, 0.319648]], "4a011462-bbfe-4430-b9e7-b3629bc87395": [[-1.39276, -2.08961e-05, -0.647753], [1.3940199999999998, 0.769562, 0.6482009999999999]], "47570843-03a5-4f5b-93cd-4a98057eb81e": [[-0.415681, 0.000272, -0.413195], [0.41518900000000003, 0.8416830000000001, 0.413096]], "6f53aa4e-429d-3eb3-ba2b-1256fba47a6e": [[-1.4987409999999999, 0.0, -1.178337], [1.498742, 0.840404, 1.178336]], "66683da3-98de-4437-beee-bb96ec7cc901": [[-0.843836, -9.13304e-18, -0.173882], [0.8438370000000001, 0.558555, 0.173883]], "6395bdba-e5f5-4975-899e-57f3a1687414": [[-0.694707, -0.000269028, -0.964021], [0.694707, 0.7968500000000001, 0.964021]], "6bd7abcd-2722-40b8-88cd-6ec6150a983e": [[-0.3, -9.184910000000001e-18, -0.3], [0.3, 0.725, 0.3]], "e41fca1b-02a9-4ac0-a7b6-3d01d931347e": [[-1.2449, -1.34232e-06, -0.920921], [1.2449599999999998, 0.842023, 0.922636]], "a5e064f6-2ea1-4465-9fac-5d694f3a7176": [[-0.043739, 0.0, -0.043739], [0.043739, 0.7895749999999999, 0.043739]], "819fc8f0-2803-4508-afb9-66654a847e49": [[-1.4430500000000002, 1.09188e-17, -0.178321], [1.4430500000000002, 2.42519, 0.178321]], "9c04ecc1-8cb3-4203-af0a-e155d61ae70b": [[-0.36024900000000004, 0.0, -0.421869], [0.36011299999999996, 1.039858, 0.421869]], "45295e19-b9fe-48e7-b819-70a393fd4818": [[-1.209076, 0.000319, -1.341269], [1.208778, 0.976098, 1.34166]], "d69b137f-b3e6-44af-b25f-a1f4f6e57696": [[-1.09692, -0.0030968099999999998, -0.448546], [1.0975700000000002, 0.799961, 0.449679]], "03ed697f-5668-4abc-bb3a-d9d0accb92bf": [[-0.213, 0.0, -0.20388799999999999], [0.213, 0.4, 0.20388799999999999]], "593d94f0-4802-428c-9bd9-eb8b1f3776c5": [[-1.234597, 0.000298, -1.235176], [1.233835, 2.32875, 1.235176]], "e32a2140-d6fa-48ea-b01d-d3b8254252c2": [[-0.618244, 1.28317e-17, -0.251363], [0.618244, 0.746179, 0.251363]], "46258671-33a4-44ae-b45a-49e0de548077": [[-1.0, -4.7524e-06, -0.221], [1.0, 0.581638, 0.221]], "9ebebacb-1565-4e04-98e4-6fd15dcfcd30": [[-0.270075, -0.0, -0.28079], [0.270227, 0.461662, 0.28079699999999996]], "aa02a1ea-984d-4c53-a1d9-feff7820f41f": [[-0.938438, 2.28882e-08, -1.11599], [0.938438, 1.2776, 1.11631]], "50033605-c925-4572-a44d-db05a8b08f85": [[-0.213357, -6.76813e-05, -0.22802299999999998], [0.213357, 0.90137, 0.228547]], "48461d6a-32f7-4d20-9e35-b817ef0f1478": [[-1.4275, 4.29851e-17, -0.725], [1.4276499999999999, 1.85352, 0.725]], "22496d43-4610-477a-98d9-fe6e97ede751": [[-1.47594, -0.00010839700000000001, -0.501787], [1.47577, 0.933579, 0.502354]], "aa2ab0cc-d62f-4508-bc1b-93345ed0a53b": [[-0.613278, 0.0, -0.168494], [0.613029, 0.41470999999999997, 0.168675]], "85c9f502-4deb-496e-9bdc-ae8a4f0a632e": [[-1.83557, -1.05957e-10, -1.2788899999999999], [1.83471, 0.9345699999999999, 1.27885]], "beead7bc-e52f-4375-a43b-77d48355716f": [[-0.902522, -4.31923e-18, -0.0790903], [0.902522, 1.2118200000000001, 0.0790903]], "0ec7fc7d-8e05-3f6f-832c-f2ad1b4b1769": [[-0.241375, -0.00058, -0.258399], [0.240975, 0.726721, 0.260519]], "01fe3767-6f21-49cf-b8da-e16b53267dc8": [[-0.241016, -1.6925e-17, -0.28522200000000003], [0.241016, 0.84, 0.28553]], "6e937d33-357b-49d3-83f2-dd92ba11162a": [[-0.75, 1.39937e-08, -0.75], [0.75, 0.74141, 0.75]], "1049ad25-2919-41ea-8e6e-d23555ca6d41": [[-0.36090200000000006, -6.59988e-05, -0.36090200000000006], [0.36090200000000006, 0.133301, 0.36090200000000006]], "de61b6bd-123c-41e4-b59e-da89bb2f200c": [[-0.686864, 0.0, -0.443247], [0.685376, 0.48831, 0.443266]], "0e73b8cc-6265-4b2a-9e5f-834cc20bf791": [[-0.660133, -3.08609e-17, -0.678997], [0.660133, 0.363002, 0.678997]], "03b036e6-e967-4525-8802-8fb57cb2dbc4": [[-0.33344700000000005, -2.16035e-05, -0.351634], [0.333383, 1.08487, 0.351961]], "abd45eac-f9c1-4244-be7c-9771da5b4e65": [[-0.247045, 0.0, -0.247045], [0.247045, 0.646407, 0.247045]], "9b42d6ed-1749-4fc6-b1a5-9086a9cea6b4": [[-0.246432, 0.0, -0.260448], [0.246432, 0.928321, 0.260448]], "127ef446-1121-32e2-8081-2ec383c635d3": [[-0.224788, -0.00027, -0.270993], [0.23696799999999998, 0.927658, 0.214758]], "00d8b27e-4e05-47a8-b191-519aaed28575": [[-1.9705690000000002, -0.0, -0.5653], [1.970728, 1.034604, 0.5652900000000001]], "1de3cbb7-6196-4948-b452-c3f6c54a0bb5": [[-1.289265, 0.0, -0.457008], [1.289314, 1.144867, 0.457008]], "e3cd71a4-5bf1-4e46-8370-bf7427d31f80": [[-1.313433, 0.0, -0.45944], [1.314085, 0.881866, 0.45978700000000006]], "57621dfe-6be2-3055-9131-df8c062bfaee": [[-0.760545, -0.0024779999999999997, -0.333729], [0.79012, 0.797637, 0.30159400000000003]], "65242094-0077-4a9d-9057-d6e67eb54760": [[-0.514066, 0.000800018, -0.514066], [0.514066, 1.23414, 0.514066]], "808b1d95-02b6-4bf1-ad31-28b4b946baa3": [[-0.9020589999999999, 0.0, -0.425], [0.9021819999999999, 0.747098, 0.425]], "172f65bb-736d-47e5-8b8f-6ded1d701a44": [[-0.438934, -8.34898e-18, -0.20476], [0.438941, 2.484, 0.205045]], "2213c5f8-7a10-4029-8d4c-1cd44559a5a0": [[-0.32884, 0.0, -0.385326], [0.328416, 0.852816, 0.385135]], "42320ae3-53af-4d30-a965-4208aed12fb5": [[-0.6991160000000001, 1.63662e-17, -0.293835], [0.699117, 1.22153, 0.29383400000000004]], "0fa76181-70c5-3a77-be66-eeb7e2368fad": [[-124.6072, 0.0, -47.0183], [124.6072, 84.922, 46.0387]], "ea33993c-e458-452e-8193-1afcac00d836": [[-0.405, -1.52588e-08, -0.25316], [0.405, 0.71, 0.25316]], "f9ed40f0-ee1a-4f71-a41b-ad79e76cdff0": [[-0.7645489999999999, 0.0, -0.402692], [0.764729, 0.777522, 0.40285400000000005]], "12579879-7c06-48e3-8018-c8a038984c66": [[-0.6864199999999999, -1.38375e-17, -0.6864199999999999], [0.6865680000000001, 0.732538, 0.686429]], "0d2a0949-3f36-49bc-ac19-5fac830c592f": [[-0.7047289999999999, 0.0, -0.591496], [0.7047289999999999, 0.45048499999999997, 0.590568]], "23552c13-9419-4d5d-8b55-104407293459": [[-0.33228700000000005, -0.000439821, -0.33163899999999996], [0.33179699999999995, 0.7463160000000001, 0.33173499999999995]], "26ceb30c-01a5-448f-9714-85759b08abd4": [[-0.6, -0.000120759, -0.201721], [0.6, 1.91017, 0.201721]], "7974e6ec-65d7-401c-bad2-ed9fb20fe367": [[-1.161424, 0.0, -1.149461], [1.161416, 1.465608, 1.149461]], "e8a4a08d-0fe7-47a1-acfa-33f33dbf5a84": [[-0.9269240000000001, -1.90735e-09, -0.406854], [0.9272849999999999, 0.7952379999999999, 0.40719099999999997]], "863eecdd-fefa-45cc-9a3b-467b4bd81d3d": [[-1.04163, -1.9073500000000002e-08, -1.19956], [1.04097, 1.5571100000000002, 1.19924]], "16a6651d-6f38-483d-9c97-80349e1ecf7b": [[-0.45078, 0.0, -0.300001], [0.45078, 1.999266, 0.300001]], "8672958d-cd54-44cb-a4cb-133c50eb9f00": [[-1.35581, -0.000529796, -1.0370300000000001], [1.35656, 1.98031, 1.03694]], "63082f75-e273-4a2a-b361-e19b3215d20e": [[-0.5530919999999999, 0.0010481, -0.254403], [0.552742, 1.70637, 0.25285799999999997]], "93d1c732-ba8f-49e1-abe8-8bbe87bc41bd": [[-0.0935742, 3.05176e-08, -0.0935742], [0.0935742, 1.1450799999999999, 0.0935742]], "4b443401-cc13-4d2e-b7bb-2aeea7eabe04": [[-0.729926, 0.0, -0.218664], [0.729926, 0.935582, 0.218664]], "20256e43-e58d-42d6-8f21-0810936def36": [[-0.229127, -0.0017430300000000002, -0.22912600000000002], [0.229876, 0.5735669999999999, 0.22912600000000002]], "b5c1b81b-1ea1-4ba4-be62-d0b54b70432b": [[-0.275293, -1.0773199999999999e-08, -0.259932], [0.275293, 0.827288, 0.259954]], "953caf23-93ac-433a-b9f9-6f197b9c0b48": [[-0.727965, 0.0, -0.31919000000000003], [0.727965, 0.6778360000000001, 0.319493]], "7ce3cd02-6734-456b-b13f-88a4a553252b": [[-1.03135, -0.000792479, -1.05842], [1.0306600000000001, 1.53253, 1.04744]], "23000814-7305-4ce2-bcdf-1be89f68fb57": [[-0.275327, 0.0, -0.192054], [0.275327, 0.424197, 0.192052]], "ee877136-4de7-4e39-8e32-33df9475f084": [[-0.9443300000000001, -1.70593e-05, -0.335959], [0.9435760000000001, 2.3156499999999998, 0.33631300000000003]], "8278e3b6-bc7e-4c62-bbda-5017a4ce5ac7": [[-0.449999, -3.0598e-08, -0.175], [0.449999, 0.9, 0.175]], "abde719b-87c9-4c6c-a7d1-f09dc5de0c0e": [[-0.22507200000000002, -0.0, -0.224465], [0.225147, 0.41490499999999997, 0.224499]], "845058b0-62be-4742-8643-de78ef916a6a": [[-0.41772, 0.000381098, -0.41277], [0.41772, 0.593932, 0.41277]], "e4eac65b-d96e-455e-b717-972b0adf1793": [[-0.212866, 4.46115e-07, -0.21682600000000002], [0.212866, 0.374921, 0.216785]], "8282f517-02b0-450d-8d9e-078212d52b72": [[-0.427179, 0.0, -0.530385], [0.427122, 1.046164, 0.53077]], "3b432937-2152-4148-af17-b800b0fda5f8": [[-0.240006, -2.61958e-08, -0.20563700000000001], [0.24022500000000002, 0.9631399999999999, 0.20563700000000001]], "9fb1f9ad-1375-431a-a65c-8cf467dfa968": [[-0.7637520000000001, 0.0, -0.217822], [0.7637520000000001, 0.72882, 0.217822]], "3f455611-b7ae-4d29-b5c7-249ae7f4b424": [[-0.257642, -0.000513067, -0.262999], [0.257781, 0.512547, 0.263187]], "2bd1dfa7-2747-4628-b83e-288d3d81946a": [[-0.839497, -0.000155044, -1.02216], [0.83963, 1.0735299999999999, 1.02044]], "1e762459-504b-4746-86c4-16a75fee0c5a": [[-0.2, -4.07248e-10, -0.2], [0.2, 0.444998, 0.2]], "11a35e5d-f69e-4663-b164-b99492419929": [[-0.0700001, -4.28626e-18, -0.07], [0.0700001, 0.987967, 0.07]], "43726e35-a3f2-4e71-aa6a-317396a40be5": [[-1.55455, 8.88478e-08, -0.536963], [1.5546799999999998, 0.8623460000000001, 0.537808]], "10821dd8-229a-480c-b6fd-68b4d7d20bc0": [[-0.23998999999999998, -2.30025e-06, -0.188199], [0.23998999999999998, 0.478371, 0.188199]], "3e923a32-8ec9-338e-9699-fd7ea37777f8": [[-0.8, 0.0, -0.8], [0.8, 0.8593930000000001, 0.8]], "28d3a35a-0ccd-42a8-9052-24322cd7b8ed": [[-0.244, 8.29896e-19, -0.252877], [0.244, 0.096, 0.252877]], "5e0662ef-fc73-49b0-8824-b8dfb5504dfc": [[-1.22742, -9.618709999999999e-07, -0.420637], [1.22695, 0.816512, 0.420719]], "8b3ba12f-8453-416e-8cb8-64e092478004": [[-0.246793, -3.246e-08, -0.256725], [0.24629, 1.7597900000000002, 0.257311]], "4715ca99-094f-4b4b-b99a-8c7202e53eba": [[-0.975755, -7.62939e-09, -0.24449200000000001], [0.975755, 0.66863, 0.24449200000000001]], "080c1050-98fd-422f-b525-25d9f8ec8b64": [[-0.882736, 6.10352e-08, -0.175], [0.882736, 2.07919, 0.175]], "308fb003-2d83-47ae-b75f-f0eb1f0ff228": [[-1.0021769999999999, 0.0, -0.388632], [1.002178, 0.813356, 0.388415]], "1364c692-6365-4fdd-9bb2-dc250d0a82da": [[-0.310369, 4.2e-05, -0.295433], [0.310369, 0.907074, 0.295433]], "5ce26ffd-0868-445a-b5b0-23ecfaaed8f8": [[-1.09079, -7.62939e-09, -1.15955], [1.09042, 1.17603, 1.15895]], "d659fa13-00cd-4d3f-aaa3-8f903ebcefab": [[-0.318349, 0.0, -0.318349], [0.318349, 0.584091, 0.318349]], "67f465f4-220c-4f6f-8c7f-0bd2d8b1401d": [[-0.307323, 0.0, -0.307371], [0.307323, 0.5151830000000001, 0.307371]], "559ff846-1bbc-45e4-88a5-c2b973653d56": [[-0.958406, 0.0, -0.958406], [0.958406, 0.7919370000000001, 0.958406]], "4e7c13bd-1179-47f4-984c-26dcb4aaefab": [[-1.52589, 0.0, -0.570469], [1.52589, 0.829793, 0.570469]], "18b9bc0d-1148-44e4-ae39-62a502a90ff9": [[-0.891027, 0.0, -0.9400390000000001], [0.891027, 1.0691330000000001, 0.9399599999999999]], "0b8f9a08-7f2e-4167-9f91-8058c8955b81": [[-0.469871, 0.0, -0.60238], [0.469871, 0.429785, 0.60238]], "5e528f5b-7bcb-4c29-b721-817f652a73ef": [[-0.360176, -0.000821621, -0.359766], [0.35998199999999997, 0.428423, 0.35978299999999996]], "8b16c3e8-2613-4ba6-ad12-816d47379b64": [[-1.0341200000000002, -0.000531053, -1.16402], [1.0341200000000002, 1.25267, 1.16372]], "7caffde9-5096-4053-bd6c-d2437e15f09b": [[-1.045397, 0.0, -0.525179], [1.045397, 1.044044, 0.525178]], "295e9bbf-a1d8-4fe7-8727-68e97c8da4ec": [[-0.504746, -2.93553e-08, -0.344889], [0.504746, 0.364531, 0.344889]], "dfdf7878-6443-4611-b0b1-3ec086e6e56d": [[-0.237559, 0.0, -0.247469], [0.237559, 0.475005, 0.247469]], "903fbd71-c8d1-4994-bd77-c7ab3384c10f": [[-0.585342, -0.00229207, -0.302059], [0.5853670000000001, 0.956386, 0.302948]], "5ce0fea7-afe8-4836-be0e-948f041aaa83": [[-1.00001, -1.90735e-09, -0.25], [1.00001, 0.57, 0.25]], "217bf2c3-d489-4916-aa42-a361a63b8682": [[-0.353868, -1.56601e-17, -0.264466], [0.353868, 0.727736, 0.264466]], "7a5089b3-6631-4b2c-9ad9-a819d57bacdb": [[-0.903887, 1.8e-05, -0.510597], [0.9061279999999999, 0.884764, 0.510597]], "af64b95f-8309-4ea3-ba49-e144dfeb86c7": [[-0.2774, 0.000489, -0.25766100000000003], [0.277294, 0.90654, 0.257268]], "709e101f-390e-4bd0-9f43-fd1689c834fd": [[-1.55848, -0.000614785, -0.5256219999999999], [1.55917, 0.811123, 0.5252300000000001]], "18b82049-d1d2-4285-ac7c-18f452592b0f": [[-0.640497, -1.3562500000000002e-17, -0.253313], [0.640497, 0.825659, 0.253313]], "94f69cc1-d4a1-45f0-bfae-672cfbd57fac": [[-0.255527, 0.0, -0.255527], [0.255527, 0.504044, 0.255527]], "7cee09b5-a07e-4538-b050-9b728eac946e": [[-1.27894, -1.28746e-08, -0.523501], [1.27894, 0.9688460000000001, 0.523116]], "38b5da6e-ebf3-48b6-b73a-728afc770b6a": [[-0.32779400000000003, 2.00633e-17, -0.381417], [0.32779400000000003, 1.13664, 0.381417]], "52161fec-d4a8-4456-9687-fbe15c82216a": [[-1.459718, 0.0, -0.49930599999999997], [1.459388, 0.8246939999999999, 0.500007]], "646cc2d8-cf72-4d53-ac0c-ca11f20af175": [[-0.8, 1.52588e-08, -0.20054], [0.8, 0.637729, 0.20054]], "69d929c0-b3bc-4df1-933f-944af1e59160": [[-1.421704, 0.0, -0.5981960000000001], [1.421704, 1.193121, 0.5981960000000001]], "1f489655-9024-402b-9541-788a543cc972": [[-0.499994, -2.6213500000000002e-05, -0.47552799999999995], [0.499996, 0.0906001, 0.475526]], "1b42f74d-6456-4ddd-87cb-80e8b4eec53a": [[-0.507447, -0.0011791899999999999, -0.525621], [0.5070790000000001, 1.20509, 0.525616]], "3241f1fe-5d13-4283-a443-b6ecee0bb225": [[-0.260122, 1.14441e-08, -0.20999199999999998], [0.260162, 0.519826, 0.21004799999999998]], "0118e76e-26d6-402b-8d37-6aa00b1138c8": [[-0.8847010000000001, 1.52588e-08, -0.0661682], [0.884252, 0.939918, 0.0661037]], "ea552054-6599-47ba-84a7-a9c5416a764f": [[-0.303215, 0.000956, -0.321299], [0.303184, 0.823194, 0.320274]], "23a484e2-ef9f-4262-a41c-c37f2a683340": [[-1.347552, 0.0, -0.454604], [1.347552, 0.9066970000000001, 0.454519]], "075506a7-2ab4-4905-b156-fb1d93069fcc": [[-0.8176779999999999, -1.3582e-17, -0.244867], [0.8176779999999999, 0.65, 0.245001]], "a3162ce6-b1ef-4f8e-8184-47d5014b2369": [[-0.44199599999999994, 0.0, -0.443029], [0.441963, 0.7811450000000001, 0.4429]], "5fccc4b3-2c62-4edd-ac5f-f6a44d6b491c": [[-0.426572, 1.52588e-08, -0.526219], [0.42706000000000005, 1.00132, 0.525553]], "567783b3-7da1-40f0-80ee-4c3ba42ff025": [[-0.0778857, -0.000298187, -0.0775795], [0.07746940000000001, 0.6709229999999999, 0.0776513]], "ee268e40-c509-410a-a647-df22e8c4ccf6": [[-1.6169900000000001, 5.74821e-09, -0.788099], [1.6170099999999998, 0.80786, 0.7881239999999999]], "ba3ce2e7-aaf4-4d83-862d-ca6fde419f35": [[-0.41624099999999997, -0.00021797199999999998, -0.41476999999999997], [0.41624099999999997, 0.801251, 0.41476999999999997]], "a03b986c-4ea3-4f79-852f-6ba401fb0528": [[-0.568184, -0.0005535960000000001, -0.16713799999999998], [0.568255, 0.632339, 0.16713799999999998]], "e8a58568-fec1-4527-9c69-b64213490a8b": [[-0.275331, 0.0, -0.198136], [0.275331, 0.488399, 0.198136]], "d118f879-f936-47fd-b194-bef86d67ecd3": [[-0.40674999999999994, 1.43499e-18, -0.419294], [0.407038, 1.16064, 0.41903]], "52c05357-cec5-4c75-ab77-7cf030cb64d3": [[-0.342318, -0.0, -0.078444], [0.342318, 0.5688880000000001, 0.078444]], "7ec7761b-f803-4062-ac46-05d7eb771020": [[-0.720253, 0.0, -0.208001], [0.720253, 0.485679, 0.208001]], "05f3ad13-7ced-42f9-baa0-340bbac7f98d": [[-1.66439, -5.72205e-09, -0.423805], [1.66428, 0.8284699999999999, 0.42401000000000005]], "fdc1d46c-5602-437f-8181-68ad883e635d": [[-0.4, -1.00121e-17, -0.2], [0.4, 1.0, 0.2]], "0a237bbe-d40d-4689-8747-d4fc2afa6da0": [[-1.19876, 2.84636e-07, -0.442107], [1.1985299999999999, 0.754568, 0.44264600000000004]], "06d581b5-5fb7-42e7-8903-2406d513d1c7": [[-0.316458, -3.48119e-07, -0.2419], [0.316458, 0.55, 0.2419]], "14723db0-4389-45db-9420-f02b9d226c2a": [[-0.265285, 2.04141e-05, -0.24049800000000002], [0.265332, 0.7759229999999999, 0.240258]], "e513e631-e8df-4812-9f01-480e8dc7b2a6": [[-0.170694, 0.0, -0.17103200000000002], [0.170694, 1.518008, 0.17103200000000002]], "f302f87c-7732-48ae-ae7e-dd119a8c1ef0": [[-0.596189, -1.05197e-05, -0.357742], [0.595942, 1.52846, 0.3576]], "22b5726c-451b-42e6-8825-b90cd1cdbc35": [[-0.343174, 1.1797599999999999e-06, -0.355969], [0.34301099999999995, 0.735963, 0.355923]], "0afa8ea8-d8d9-4e55-8e6c-f47362e6e2ac": [[-0.8300700000000001, -0.00033065, -0.367803], [0.8302320000000001, 0.797903, 0.368296]], "2d44f089-53d2-4eca-ac1e-9416e654e47c": [[-0.637653, -6.340820000000001e-17, -1.05553], [0.6379, 0.84076, 1.05553]], "fe39a502-4349-4ab9-a8f8-471557d3dc29": [[-0.9412820000000001, 0.000698, -0.417147], [0.941283, 0.777976, 0.41714]], "737200e6-f598-4510-811c-a15d6246b3cd": [[-1.3600800000000002, -1.13279e-17, -0.285001], [1.36001, 2.29008, 0.285001]], "e21c9912-e107-407c-b9ed-7f723e887c92": [[-0.661567, 0.0, -0.44326], [0.661568, 0.473948, 0.443265]], "115678d8-847c-46c8-9fd4-f8801c65082a": [[-0.225271, 0.0, -0.180078], [0.225271, 0.5502429999999999, 0.180078]], "aceb3c1e-f44e-4cb2-a333-bbca53405db2": [[-1.8858000000000001, -9.857309999999999e-18, -0.16098400000000002], [1.8858000000000001, 1.24798, 0.16098400000000002]], "30504ed1-078e-463a-b67d-29a311e6a81c": [[-1.180795, 0.0, -0.396174], [1.180795, 0.87968, 0.39572]], "5120acba-1895-3e27-9959-aee731cd666f": [[-0.30734100000000003, 4.4999999999999996e-05, -0.274364], [0.306796, 0.731294, 0.28284]], "ed6b7f1a-345d-4d23-869d-3ee34716a759": [[-0.287226, 0.0, -0.287226], [0.287226, 0.59231, 0.287226]], "c0c595fc-888b-4e96-9a9c-5118a2ffa254": [[-0.40549599999999997, 0.0, -0.40549599999999997], [0.40549599999999997, 0.405815, 0.40549599999999997]], "639d5abd-8307-44b1-b054-885caa95c256": [[-1.16405, -1.89644e-07, -1.1441], [1.1642000000000001, 0.753057, 1.1441]], "835f1b5d-cb60-4164-a1cd-927bad7f3dbd": [[-0.450436, 0.0, -0.28041], [0.450436, 2.000359, 0.28041]], "66408964-3a02-4782-8916-3e3809798e1b": [[-1.38571, -0.000788207, -0.52623], [1.38596, 0.7511570000000001, 0.527227]], "246f667f-ed18-4a87-9751-bd6b078a7ed2": [[-1.33225, -0.00016127699999999998, -0.563446], [1.33085, 0.8323569999999999, 0.561248]], "579ae452-3a55-4dcb-8104-251e99423153": [[-0.525544, 0.0, -0.298904], [0.525544, 0.34590400000000004, 0.298904]], "001dcec1-201e-446c-91d1-d349be1a42f3": [[-0.161879, -0.0, -0.158139], [0.161879, 0.812978, 0.158139]], "4a2a6bb3-4789-4816-aaaa-3e77244a8da5": [[-0.24138500000000002, 2.3e-05, -0.319415], [0.24138500000000002, 0.878586, 0.319415]], "03061344-a456-45b8-995a-123bacfbeb33": [[-0.607576, 0.0, -1.514433], [0.607576, 1.085818, 1.514433]], "03e769ca-8083-4bc3-bd90-f0f793b5aff8": [[-0.855775, 0.0, -0.460754], [0.855775, 0.8385750000000001, 0.460754]], "60b50da6-5098-497a-9392-073e5747c08c": [[-0.23177299999999998, 2.14326e-08, -0.23007000000000002], [0.230973, 1.2662, 0.23022700000000001]], "67bd6ac1-a8d4-47d3-90d8-acb96ffe7867": [[-1.309622, 0.0, -0.610456], [1.309622, 1.156796, 0.6105619999999999]], "c3568155-50a2-4953-8bef-7f1dc248f359": [[-0.21281199999999997, -0.0, -0.20718499999999998], [0.21281199999999997, 0.377177, 0.20718499999999998]], "69f9b1dd-3822-4daf-be8c-43fc964801a3": [[-1.2065000000000001, 1.14441e-08, -0.47106299999999995], [1.20713, 0.716884, 0.47111]], "2badbe2f-1835-4480-bffb-87db504b5357": [[-0.867957, -3.4390299999999998e-15, -0.262755], [0.867957, 0.616244, 0.26276900000000003]], "28ef3e6f-d5b0-4354-804b-b84cdaf687f8": [[-0.299165, -5.13413e-18, -0.299165], [0.299165, 0.428466, 0.299165]], "a283755d-c3e6-4c69-ac07-9fe7ff6d3f6f": [[-0.318648, -0.000366475, -0.318639], [0.318381, 0.611432, 0.318454]], "433123cb-172e-49ed-be20-24ca9159b0e4": [[-0.9435370000000001, 5.993500000000001e-17, -1.1169499999999999], [0.94326, 1.4022999999999999, 1.1166800000000001]], "df95ad28-aa55-4529-a62d-66d04e654fd9": [[-0.585, -1.17256e-17, -0.218507], [0.585, 1.5137399999999999, 0.21857500000000002]], "858870cd-37da-4834-9cc4-fe6ab812bb97": [[-1.12318, -0.00474465, -1.14416], [1.12212, 0.781357, 1.14446]], "d771112a-29d3-47c2-b8b4-0856af6fb2b4": [[-0.20179200000000003, -3.37646e-16, -0.202345], [0.201727, 0.140419, 0.202395]], "36932e04-26c0-370a-8771-60ab821e4a63": [[-135.0845, -0.0007, -66.7597], [135.0845, 79.5285, 66.7597]], "77e57983-3a6d-4348-a8a3-1472b129f338": [[-0.310452, -2.33527e-05, -0.05916299999999999], [0.310328, 0.816084, 0.059127599999999995]], "06d5595f-679e-423c-b011-9619edaaac60": [[-0.6585179999999999, 6.10352e-08, -0.16142600000000001], [0.6585179999999999, 2.4, 0.16142600000000001]], "80eaadb1-6f24-4dfe-8922-7c9432871c53": [[-0.837847, 0.000861, -0.446653], [0.837847, 0.79342, 0.446665]], "225c9976-2a7b-4546-ab0a-c2f2a6b5de8c": [[-0.231864, 0.0, -0.276673], [0.231873, 0.744256, 0.276753]], "69d407b8-a0d6-42ff-9e89-5593eeadf394": [[-1.169487, 0.000329, -1.139976], [1.171191, 1.0477049999999999, 1.139828]], "2c71c8c2-04ff-46e8-bfa5-698b8ae0de0f": [[-0.349608, 0.0, -0.378901], [0.349608, 0.8031100000000001, 0.378842]], "df5706b1-53b9-43af-ba30-76c6401fd327": [[-0.529493, -0.000255474, -0.517091], [0.531067, 0.7943000000000001, 0.516277]], "559f97f2-e1a8-4edd-aab3-a74b7eae1fe2": [[-2.21898, -7.97378e-05, -0.600838], [2.21841, 0.8654540000000001, 0.599856]], "fd1551fb-5b7b-4d10-8e60-9a734269875b": [[-0.30674399999999996, 0.0, -0.30674399999999996], [0.30674399999999996, 0.540026, 0.30674399999999996]], "9bc20594-9766-4179-8010-33ef09465095": [[-0.114335, 0.0, -0.055736], [0.114335, 0.060638, 0.055736]], "af457c93-97ea-4067-9281-ec2fe19b8b83": [[-0.8292440000000001, -9.01391e-10, -0.48569], [0.8292440000000001, 0.421955, 0.48569]], "3fd00270-5536-4b3d-be5a-3a1e298cbd91": [[-0.708081, 7.62939e-09, -0.9081130000000001], [0.708081, 1.16351, 0.9081130000000001]], "5b41309d-6818-490e-ae38-ff695263ad2d": [[-0.9150360000000001, -1.03397e-08, -0.404793], [0.91574, 0.656291, 0.40488199999999996]], "2c33a1bd-778f-4ad0-9439-e65bae1a9784": [[-0.411306, -0.000152316, -0.396397], [0.410606, 0.953749, 0.396136]], "12481123-c376-4990-bb29-547c55eeaf26": [[-0.687539, -1.9371800000000002e-08, -0.6875910000000001], [0.68672, 1.38096, 0.687411]], "d1ea81df-39ff-4d50-b2af-f9141239c16b": [[-0.8361029999999999, 0.0, -0.492501], [0.8361029999999999, 0.75, 0.492501]], "1b27d33e-4bad-4df5-91f9-9ccf2447f823": [[-0.199681, -8.2294e-05, -0.211094], [0.199683, 0.577309, 0.21087599999999998]], "5af3529d-3170-441c-a361-159fc821f962": [[-0.45219499999999996, -1.7476900000000002e-05, -0.178409], [0.45217599999999997, 1.12904, 0.17863199999999999]], "52659618-5e84-424d-9d5e-7a6b04296eb1": [[-1.307834, 5.999999999999999e-06, -1.116637], [1.307834, 1.210292, 1.115262]], "53cad1d0-9969-4258-9889-900d8967430a": [[-0.45215200000000005, -0.0, -0.44095300000000004], [0.451533, 0.940111, 0.44087200000000004]], "d66a74c9-7109-4bc4-89c8-2d6888ac7622": [[-0.144182, 2.00452e-18, -0.0795962], [0.144182, 0.6133379999999999, 0.0795961]], "7ce4c47b-1839-4e85-a803-c11403de14aa": [[-0.701853, 0.0, -0.220456], [0.701853, 0.751706, 0.220456]], "5e4c8a81-79dd-43c2-a117-f3b9bda9e560": [[-0.235208, 0.0, -0.235208], [0.235208, 0.562769, 0.235208]], "aaea6776-7dd7-45fd-aa85-41b9b40da6fc": [[-0.7262179999999999, 0.0, -0.726186], [0.726186, 0.7866289999999999, 0.726337]], "12682f54-bdc8-36e6-9174-15cb1c54dfa3": [[-0.237802, 0.0, -0.261469], [0.237802, 0.841652, 0.261469]], "11dc0f11-0b3e-42fb-badb-2a7b64d11d89": [[-1.7032509999999998, 0.0, -0.6434489999999999], [1.7034809999999998, 0.895421, 0.643218]], "7eb59a31-260c-4137-91b9-52a8cc478b58": [[-0.233434, 0.0, -0.233434], [0.233434, 0.529929, 0.233434]], "3501c287-5c95-47b6-a25d-ba20f12bd6e8": [[-0.245, -4.90121e-05, -0.2], [0.245, 0.5, 0.2]], "7f50c600-5ed8-4bcf-afac-c29763638a96": [[-0.282692, -3.85624e-08, -0.19799399999999998], [0.282692, 0.451563, 0.19799399999999998]], "fac3bb02-0072-4c73-9ba3-87453bd5477b": [[-0.7709520000000001, -1.81899e-15, -0.30563300000000004], [0.7707940000000001, 0.739376, 0.30563199999999996]], "7c32c0ff-bd2d-4bf5-ad69-1b7055229d53": [[-0.995507, 1.75374e-17, -0.286408], [0.995507, 2.38674, 0.286408]], "8920cf8d-0867-4593-af5c-aa83ac6aba0e": [[-0.461529, -0.000581714, -0.6966899999999999], [0.46149, 0.463026, 0.696473]], "226745c3-3118-4501-b90c-8f7f8a89331a": [[-1.81137, -7.62939e-09, -1.29172], [1.81262, 0.759173, 1.29174]], "328026c4-f745-40a8-ab1d-8433330ec839": [[-0.374485, -0.000138939, -0.35815800000000003], [0.37477499999999997, 0.125732, 0.357757]], "2e49bd3f-02c6-4010-95b9-a7e7375dd992": [[-0.240811, -2.0530700000000003e-05, -0.254855], [0.24111000000000002, 0.8146899999999999, 0.255063]], "68b5092e-274b-429f-9527-4ffdb446a0fb": [[-0.21099, 0.0, -0.21118099999999998], [0.21099, 0.5358080000000001, 0.21118099999999998]], "75af436e-7aad-4128-b5db-f7b9ce91346b": [[-0.450912, -6.74891e-05, -0.500468], [0.45088900000000004, 0.30046, 0.5004959999999999]], "cf3ceb32-0e02-4139-bb56-12249f4ca6c8": [[-0.23616299999999998, 0.0, -0.23383199999999998], [0.23616299999999998, 0.34091, 0.23383199999999998]], "3407b527-0a61-4360-b4b0-917d905f82aa": [[-0.411379, -5.10622e-08, -0.442042], [0.41091500000000003, 0.849877, 0.44205300000000003]], "3a63507a-37b9-4306-a70f-23397ad6ff72": [[-0.464343, 0.0007059999999999999, -0.46499899999999994], [0.464343, 1.191127, 0.464343]], "615fd1fc-cf8d-4f30-bccb-b049c977e80d": [[-1.20457, 1.8119800000000002e-08, -1.26439], [1.20485, 1.4343299999999999, 1.26167]], "9f3034dd-984c-4621-b10f-87e77e5a1020": [[-1.7212100000000001, -0.000995494, -0.601616], [1.72082, 1.20827, 0.602275]], "16b696a0-c570-4796-b43b-a8eae0892ab2": [[-0.368553, 0.0, -0.418866], [0.36855400000000005, 0.9558880000000001, 0.419727]], "af727019-da70-40fb-87c4-97870423fd65": [[-0.751314, 0.0, -0.262109], [0.751314, 0.459466, 0.262109]], "1e5df219-dc2d-45ac-aeb3-0023b628bf14": [[-1.093, -0.000255644, -0.461542], [1.09264, 0.7306570000000001, 0.462134]], "6ee570c3-4435-4b68-b1fd-65e6d34375f9": [[-1.10251, -0.00114693, -0.629593], [1.1028799999999999, 0.952153, 0.629115]], "e7173cfd-6168-41e6-b031-c05d40e3bd98": [[-0.869474, -0.00020449200000000002, -1.12163], [0.868, 1.38144, 1.12214]], "1a754a4f-7933-4e45-92cb-9e8075f180f5": [[-1.27454, -0.0006584669999999999, -0.748155], [1.2745900000000001, 0.827585, 0.748566]], "213f605a-eec9-4832-85b6-8a4cde08c4cd": [[-1.383, 0.0, -1.145904], [1.383, 1.228, 1.145894]], "0ad4b786-da76-4971-88dd-a46d52d8a5b4": [[-0.638724, -0.000686227, -0.368039], [0.638868, 1.21176, 0.368581]], "3f308c49-1bfb-4770-8571-a147581f65cc": [[-0.32334, -8.99873e-05, -0.309124], [0.32332700000000003, 0.507252, 0.308959]], "0809c20d-3204-448d-92e8-4ad9165c23dd": [[-1.0253700000000001, 0.0, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "2d60ca8e-19c3-4a11-a397-53609c3eed67": [[-0.8, -1.14029e-17, -0.213276], [0.8, 0.82, 0.213276]], "7152d3d7-463f-4e37-8419-ac72418e3de2": [[-1.3122900000000002, -8.2734e-06, -0.457668], [1.31185, 0.7322230000000001, 0.458403]], "3cc05e45-1d67-425a-a99c-3e8cfe4f533a": [[-0.946131, -0.00018132100000000002, -1.025], [0.94499, 0.9154059999999999, 1.025]], "44d5eada-7a86-40b2-9861-3e2f38e162a1": [[-1.400154, 0.0, -0.548645], [1.3990479999999998, 0.949088, 0.548645]], "18dccc4d-b6b2-44af-8af1-5bc573ce276d": [[-1.268239, 0.0, -0.45779400000000003], [1.268239, 0.8524299999999999, 0.45779400000000003]], "7ec19d9e-19ca-31b2-a4f4-93fb12a9f27b": [[-0.6988420000000001, 0.001019, -0.47212699999999996], [0.6999169999999999, 1.016478, 0.47343]], "d336b50f-5524-484c-a8c5-c914a20f8064": [[-0.52177, 1.28746e-08, -0.439766], [0.521602, 0.897747, 0.440942]], "e8377393-7872-423f-a4b7-286b5489a3d7": [[-0.247955, 0.0, -0.247955], [0.247955, 0.549291, 0.247955]], "207129c6-8b86-3fa7-bc82-54444f33d2ff": [[-1.7170079999999999, 2.8e-05, -0.499112], [1.127065, 0.750747, 0.498172]], "4cca747a-135a-4c62-863c-60104538be9b": [[-0.40037999999999996, -3.34005e-05, -0.37473599999999996], [0.400148, 0.753343, 0.374422]], "1ad3fb75-881f-4b3f-acf0-1478cb752a37": [[-0.27402, 0.0, -0.32674], [0.27402, 0.745912, 0.32674]], "6b4eb72e-14ae-454b-a916-4b94f8cc11d4": [[-0.7458410000000001, -7.62939e-09, -0.8645140000000001], [0.7458410000000001, 0.899966, 0.8645140000000001]], "c9e4290d-934c-4295-8b59-289a71437e85": [[-1.0629680000000001, 0.0, -0.282947], [1.0629680000000001, 0.675266, 0.282829]], "59ad3fdf-2984-46d1-a07e-236b33a80b84": [[-0.28132, -9.761310000000001e-05, -0.281313], [0.28127800000000003, 0.618435, 0.281236]], "1a5f7399-0e69-4e94-8546-8fb228d8d73c": [[-0.9665219999999999, 6.05399e-17, -1.03134], [0.9665219999999999, 1.1292499999999999, 1.03134]], "5dfb0fb3-8196-49c9-a629-3f2fe339a061": [[-0.164832, -0.0, -0.164832], [0.164832, 0.789877, 0.164832]], "b70c7a16-9310-439a-9b7a-de07e03a21d6": [[-1.98411, -0.000188533, -1.1619599999999999], [1.9844, 0.840685, 1.16043]], "2a17cf5f-ec24-4ee6-87fa-a504712a45f6": [[-0.408047, -2.91038e-12, -0.398224], [0.408492, 0.796917, 0.397939]], "122e2399-d839-416b-b50a-4eedf8b98510": [[-0.810928, -0.0008677219999999999, -0.44370600000000004], [0.8109310000000001, 0.850009, 0.443155]], "8f9a5eac-4837-4868-86fc-06a92fafab8d": [[-0.9851860000000001, -9.52503e-18, -0.16592600000000002], [0.9851860000000001, 2.8, 0.16592600000000002]], "04066588-9ccb-4324-89af-110210697471": [[-0.7528100000000001, 0.0, -0.49680599999999997], [0.7528100000000001, 0.463941, 0.49680599999999997]], "f51cfecb-1a80-49bc-8312-dcd2c5a15e0d": [[-1.2649299999999999, -9.36584e-05, -0.40657200000000004], [1.26497, 0.9935649999999999, 0.406702]], "c28de481-41bc-4957-809f-251d66997a31": [[-0.800105, 0.0, -0.200136], [0.800105, 0.8500749999999999, 0.200136]], "4c62cc59-5d3b-4c36-b7df-d6dff418073a": [[-1.23829, -0.000460553, -0.405463], [1.23751, 0.6422599999999999, 0.40542700000000004]], "443da456-d458-4d43-aa07-639f5076448a": [[-0.08063100000000001, 0.0, -0.080639], [0.08057399999999999, 0.775634, 0.08057399999999999]], "38cbe8ea-c0f1-4459-9c0f-3fc276d0388c": [[-0.745519, 0.0, -0.17972200000000002], [0.745519, 0.39089599999999997, 0.17972200000000002]], "7d9ee706-7c45-4b22-a4d2-1b33c6ccd9e8": [[-0.287151, 0.0, -0.285804], [0.28715, 0.524136, 0.285804]], "952ee445-cf1d-4427-b69b-4c11bb08fb06": [[-0.7496250000000001, 0.0, -0.198813], [0.7496250000000001, 0.43255099999999996, 0.198813]], "28092c40-271a-40ab-9cfb-b96f1ce214fb": [[-0.24766300000000002, 0.0, -0.246232], [0.247579, 0.734686, 0.246232]], "a08373a6-e9bc-44c1-877f-1c078a9eb841": [[-0.0953245, -1.0292599999999999e-05, -0.105114], [0.09532600000000001, 1.08588, 0.105041]], "ae5c4052-3b3b-484e-ba9c-6ece4f52d544": [[-0.40284, -1.45251e-17, -0.24637399999999998], [0.40284, 1.9016499999999998, 0.24637399999999998]], "cd3609d2-da15-4417-a128-d16f80ad087d": [[-0.242254, -0.00020267400000000002, -0.292898], [0.24207, 0.837345, 0.293122]], "7469de80-fe4a-4443-a742-a01607de8471": [[-0.289244, -1.03093e-17, -0.17860199999999998], [0.289244, 0.893543, 0.178983]], "99199859-6258-4202-b97a-99a8bfa8d02e": [[-0.823881, -0.000137855, -0.37377000000000005], [0.823881, 0.720823, 0.39348500000000003]], "d9b14683-501d-4690-9232-f1e59aca3b7c": [[-1.0304900000000001, -0.00038040299999999997, -0.280072], [1.03075, 0.650929, 0.281212]], "6b07985c-cee9-4e95-a59f-0e74e788e8af": [[-1.18115, 1.08229e-08, -0.47089], [1.18129, 0.72954, 0.471448]], "9486a91b-c306-40fd-9ea8-5aaf950d21cf": [[-1.3290190000000002, 0.000181, -1.3532499999999998], [1.328394, 0.9253910000000001, 1.353662]], "24b06198-c68a-4100-a797-0d54d42457b0": [[-0.249044, 0.0, -0.249044], [0.249044, 0.615372, 0.249044]], "63791e3c-0b3a-4f0e-8cc6-b4b06a653f7f": [[-0.284111, -0.00046895199999999996, -0.284111], [0.284111, 0.932889, 0.284111]], "499b11ea-37e5-4435-800c-f9c4091e079b": [[-2.19862, 5.48396e-09, -0.221493], [2.19862, 3.4000299999999997, 0.221492]], "10b936ba-4406-45cd-ad4e-5db603105cbf": [[-0.6120909999999999, -0.00016092700000000003, -0.956746], [0.6120909999999999, 0.910714, 0.956151]], "2b214c3d-bab2-4bed-b285-8c0d11df2ba7": [[-0.741738, 2.04215e-07, -0.378915], [0.741738, 2.16743, 0.379998]], "71088ccb-a42d-49e2-afc4-d7640c5941fc": [[-0.251004, -0.000141758, -0.251004], [0.250751, 0.316479, 0.251004]], "f87a36da-776b-4265-86cb-984d3f6f8e8d": [[-0.373622, -2.13361e-17, -0.35031999999999996], [0.373622, 0.083, 0.35031999999999996]], "7d7b40e7-740f-4b1e-904c-fb62fe18d0d8": [[-0.57016, 2.75309e-09, -0.130579], [0.57016, 0.37337899999999996, 0.130579]], "7bb1794d-3a37-4455-a801-abe31de2ce8c": [[-0.45040199999999997, -8.48879e-09, -0.203482], [0.45040199999999997, 1.0748900000000001, 0.203481]], "01b981b1-82ce-45cc-8602-a49569ec8e0e": [[-1.17799, -0.000284432, -0.5387339999999999], [1.17868, 0.8983920000000001, 0.539155]], "acf6e944-1e6c-417d-a882-01e3b6727b21": [[-1.1264619999999999, 0.0, -0.419527], [1.1264619999999999, 0.760077, 0.419527]], "fd76a1f0-0d77-4315-9d88-46be1f9b5b82": [[-0.28145600000000004, -3.3875e-07, -0.194632], [0.281453, 0.668263, 0.195061]], "afadee10-c5f3-4e7b-a598-a7e30ed5458a": [[-0.39819000000000004, 0.0, -0.436351], [0.399056, 0.950597, 0.436376]], "7694f6ff-467e-4bf0-92b2-161cfdb13118": [[-0.201013, 0.0, -0.19625599999999999], [0.201013, 0.7311409999999999, 0.19625599999999999]], "7a2608fc-73a6-4cc1-84eb-bef1abf8f933": [[-1.58821, 1.11902e-06, -0.569246], [1.58853, 0.9365340000000001, 0.569306]], "6cefa84c-81f8-424a-8da2-9965c1cc742d": [[-0.23, 0.0, -0.275], [0.23, 0.7999299999999999, 0.275]], "641098e6-4b56-4a6e-932c-17e7b7a3832e": [[-0.499088, -1.29126e-17, -0.262332], [0.499088, 0.797358, 0.262332]], "f6e9071f-09fd-4603-ad76-028356d07024": [[-0.247404, 0.0, -0.21279800000000001], [0.247404, 0.523378, 0.21279800000000001]], "6a51033f-8e6c-406f-ae43-44a9a83327df": [[-0.294931, 0.0, -0.25576699999999997], [0.294931, 0.489114, 0.25576699999999997]], "2a644df8-d8ec-40c9-9f42-f207c98c685a": [[-0.279279, 0.0, -0.276345], [0.279279, 0.554108, 0.276345]], "281aa29d-1370-492f-801f-382ef4ef66f4": [[-1.49, -1.2185199999999999e-17, -0.245001], [1.49, 0.46, 0.245001]], "830d1555-50e6-4e35-bed3-dd81d60b8705": [[-0.7642570000000001, -1.14441e-08, -0.20017], [0.7642570000000001, 0.778807, 0.20017]], "783d1153-f3cc-44f2-ac55-87f91edad828": [[-0.9, -6.20027e-17, -1.02], [0.9, 1.27884, 1.02]], "777eea80-8e7c-47f7-ba9c-32086a92bf51": [[-1.72326, -0.0016537499999999998, -1.18757], [1.72377, 0.79801, 1.1898]], "8bb1ebe5-3b40-36b4-b46e-6ae0b3ad6836": [[-0.609728, 0.0, -0.363725], [0.609727, 0.508, 0.363724]], "a1c93b90-1672-4892-87b7-84aab0d640c3": [[-1.12642, -0.000156504, -0.43347700000000006], [1.1272799999999998, 0.822465, 0.433998]], "7a733d8e-b383-37d2-841a-f77137a5389f": [[-41.9109, -0.086, -47.5048], [41.9109, 105.2689, 47.5048]], "6a6a6e04-7ca9-47b2-aacc-e6452da4e8db": [[-0.352465, -2.80326e-06, -0.352465], [0.352465, 0.7078230000000001, 0.352465]], "714aa1d0-fda6-38fe-8971-2bf341bd9481": [[-0.608785, 0.0, -0.605449], [0.608784, 0.7365999999999999, 0.60545]], "cef4a05c-0eb0-47b4-8df3-57824eca7969": [[-0.411186, -1.86398e-18, -0.18316], [0.411186, 0.70978, 0.18316]], "e961b6cc-44ed-4525-b3bf-d7a45cdaf9e9": [[-0.310025, 0.0, -0.365227], [0.310025, 0.8087909999999999, 0.365227]], "be3cd1f4-7f81-494a-8c30-6a2d1120ca5c": [[-0.481897, 0.00021431599999999999, -0.445256], [0.48182899999999995, 0.915, 0.445662]], "023dd6cc-ca41-4f4c-82f8-67737acd2675": [[-0.8872150000000001, -4.0615900000000005e-05, -0.36683], [0.888078, 0.794409, 0.36682699999999996]], "0df8ebe6-1dc4-45d6-83fb-fd5150a54bf8": [[-0.8450449999999999, -4.16063e-08, -0.181497], [0.8450449999999999, 2.37488, 0.181362]], "d2ba99ec-0858-4bb2-97a8-907dab7827fc": [[-0.269497, -1.52589e-08, -0.285232], [0.269497, 0.7823829999999999, 0.285601]], "841327aa-856f-49f0-8d0e-3644370c3df9": [[-1.681583, 0.0, -0.6462730000000001], [1.681535, 0.989123, 0.646339]], "6934dea0-1d66-49c4-82c6-4d54d41f9707": [[-0.279751, 0.0, -0.273523], [0.279751, 0.966549, 0.273504]], "045d681b-c15f-4e25-b86d-9a759766af24": [[-1.006434, 0.0, -0.445388], [1.006434, 0.472195, 0.445388]], "2b8843f6-a232-4e01-9514-1929e1a0073e": [[-1.05005, 0.000272412, -1.21793], [1.04962, 1.07499, 1.21767]], "5bd2ff09-4b68-48a4-b91b-4325eb14e2db": [[-0.474777, -4.08626e-17, -0.6779519999999999], [0.474777, 0.365933, 0.6779519999999999]], "595044f4-bda8-4262-8de7-fb9119dd679b": [[-1.004515, 0.00022700000000000002, -0.340387], [1.0044790000000001, 0.831927, 0.340387]], "8140c6f6-ebb8-4dcd-9e2e-1a1c63965e7e": [[-0.7, 0.0, -0.4], [0.7, 0.402, 0.4]], "88980778-45de-433a-8266-31daf7295686": [[-0.241963, 0.0, -0.261045], [0.241939, 0.845204, 0.26102000000000003]], "64548939-41e3-425b-b358-0d0e916a516d": [[-0.260626, 0.0, -0.281297], [0.260596, 0.418114, 0.281297]], "a6836878-bae7-4da6-ae1f-d8fc6cda4703": [[-0.537799, 0.0, -0.505266], [0.537799, 0.35, 0.505266]], "559c6191-5328-489f-bd2b-29f7f80d979d": [[-0.882787, 0.000424523, -0.527527], [0.883514, 0.807895, 0.5273100000000001]], "94813526-a5f9-48b1-b6c8-f03a45f6e84e": [[-0.189513, -1.56868e-05, -0.189378], [0.189269, 1.0454999999999999, 0.189386]], "155f41cd-8704-44de-9d8a-423ca954ac23": [[-1.09044, -0.0006741750000000001, -1.0682], [1.08852, 1.43327, 1.06822]], "1c552409-3f35-3cf3-8a44-5ff38204d644": [[-0.8766370000000001, 0.0, -0.43764000000000003], [0.8766370000000001, 0.835184, 0.43764000000000003]], "1ddf606e-c12d-4b00-8970-61863c774519": [[-0.9, -1.83697e-17, -0.3], [0.9, 2.4, 0.3]], "2b7b13d1-acee-3331-8263-7244d9d47902": [[-1.1936740000000001, 5.999999999999999e-06, -0.466448], [1.195425, 0.741179, 0.49213700000000005]], "b837e50b-2a7d-4b3c-b321-495f261acd2d": [[-1.249218, 0.0, -0.48123800000000005], [1.249218, 0.8932810000000001, 0.48123800000000005]], "6863834d-718a-4e93-be23-aa2fb45b6b51": [[-0.40083599999999997, -0.0008286330000000001, -0.397941], [0.400713, 0.505664, 0.39724699999999996]], "e7c3f96b-6622-4736-94dd-090abeb5d842": [[-0.43435, -1.82704e-06, -0.451753], [0.433406, 1.1035, 0.46192900000000003]], "a99959a8-7d64-4433-968d-34e923fdf1c2": [[-0.9001680000000001, 0.0, -0.330242], [0.899865, 0.497596, 0.330242]], "59944dd7-228a-46b3-ad62-8337f836d527": [[-0.7937390000000001, -2.3880400000000003e-05, -0.332548], [0.795671, 0.620167, 0.332076]], "839272b7-6b95-4798-bee2-070b10e41f61": [[-0.556252, -5.95539e-09, -0.5554760000000001], [0.556233, 0.215, 0.555571]], "7a435d3a-94da-481b-93d9-dd724616b2c3": [[-1.1991800000000001, -6.75471e-08, -0.49798499999999996], [1.19917, 0.829846, 0.498992]], "52fba740-b148-4e7d-a837-23b7570e11c8": [[-0.212864, 0.0, -0.19366499999999998], [0.212864, 0.5, 0.19366499999999998]], "2c416f50-6360-499b-adc7-f0f7b6099982": [[-0.213822, -7.3893600000000005e-06, -0.213081], [0.213826, 0.460128, 0.21308]], "510d41a1-4327-4f49-ac6b-2c738b4a026e": [[-0.24415299999999998, 8.20862e-19, -0.253025], [0.24415299999999998, 0.096, 0.253025]], "691b49fe-42a4-40cd-a784-c38df5ea9d15": [[-0.23003900000000002, 0.000200191, -0.239545], [0.23003900000000002, 1.0703799999999999, 0.23954]], "dd577dff-09c1-472c-a578-8415767e983f": [[-0.600098, -9.53674e-09, -0.175], [0.600098, 1.1000400000000001, 0.175]], "2623d1b0-2250-4199-8d6d-493e34bc5fa3": [[-0.9975660000000001, 0.0, -1.0203069999999999], [0.996732, 1.462191, 1.02017]], "bfb1a81f-0ba4-416f-9d72-dd9f511604e9": [[-0.417695, -2.0947e-05, -0.312488], [0.417192, 0.600031, 0.312932]], "4e0171bf-e343-4963-921d-86022ad4a063": [[-1.3512600000000001, -9.085059999999999e-18, -0.24275400000000003], [1.3512600000000001, 2.5308, 0.24265799999999998]], "d3822e74-0975-40e8-afcd-941b36163c1c": [[-0.913415, 2e-06, -0.539015], [0.913415, 0.7554479999999999, 0.539015]], "22678585-1ef7-43c9-86cf-5b312e86afd4": [[-1.057018, 5.3e-05, -0.225401], [1.057008, 0.61144, 0.22541]], "3fc86cd0-23ad-46a4-893f-df1659c566e8": [[-0.321245, 0.0, -0.312733], [0.321245, 0.631014, 0.312848]], "1471b8e8-b619-469d-8fb4-4cf167f7f90a": [[-1.050188, 0.0, -1.124269], [1.050188, 1.156129, 1.124036]], "6d0fc0f4-a9f5-4d24-afd7-f6059045db75": [[-0.359159, -7.31465e-18, -0.132764], [0.359159, 1.26735, 0.132764]], "efee4898-cecb-4ed5-938f-239931c5886c": [[-0.603104, 0.0, -0.24699200000000002], [0.603104, 0.750001, 0.24699200000000002]], "19581a7b-6f35-4527-a931-0504111a95c6": [[-0.874971, 5.68462e-08, -0.185959], [0.874971, 0.5716749999999999, 0.185959]], "52f2b488-ac2a-4273-9ee8-4b8c17537536": [[-1.065, -0.000495139, -0.52], [1.065, 0.77, 0.52]], "2cd827c3-ea0b-3714-a639-3e348b3da3c1": [[-0.513684, 0.002856, -0.444651], [0.513863, 0.776087, 0.462316]], "7889e751-e61a-4527-89e7-dc3eec39c738": [[-1.0253700000000001, 0.0, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "6c936c38-a3a4-4363-ace4-d61eba858d7e": [[-0.612146, 5.30944e-07, -0.9892759999999999], [0.610376, 1.03915, 0.989165]], "08dcb9d0-8a66-3edc-874b-3f437cc45742": [[-0.45864499999999997, 0.0, -0.45847299999999996], [0.45864600000000005, 0.7198350000000001, 0.45847299999999996]], "b0575de4-7b5c-4de2-821c-c2828cdec47c": [[-0.6351209999999999, 1.45466e-17, -0.277534], [0.6351209999999999, 1.2461799999999998, 0.278445]], "7f5c54b7-fa80-3d2d-b420-2f1fe3702427": [[-91.2359, 0.0, -40.6105], [91.2359, 226.0904, 40.6105]], "549d4454-e558-4b77-a003-f5b3568fddf5": [[-0.41509, -2.85832e-17, -0.467359], [0.41509, 0.083, 0.467359]], "3dd4bce8-4f46-4947-8783-e85fbde6a487": [[-1.110403, 8.4e-05, -0.45399500000000004], [1.10884, 1.279697, 0.45395800000000003]], "bbf6a85c-16e6-42ac-8754-f74d51bc17ce": [[-0.306039, 0.0, -0.220745], [0.306039, 0.6790689999999999, 0.220745]], "67607957-ec4d-4eab-a76d-857d725f835f": [[-0.577503, -0.00110276, -0.56259], [0.577503, 1.14846, 0.562882]], "e3560eb3-d4e1-4add-8b51-b3dd5ec6943b": [[-1.043791, 0.0, -1.048441], [1.043791, 0.944233, 1.048441]], "52cb84a2-cea8-4f0b-b918-e3e428d4e61b": [[-0.6, 3.8147e-09, -0.6], [0.6, 0.370013, 0.6]], "020186ad-8a54-3b21-9fca-ac8e5cd18b67": [[-0.228352, -0.000337, -0.20271], [0.22514, 0.805265, 0.20271]], "77896d2e-0865-4117-928a-93d6a04659a1": [[-1.185, -2.38719e-17, -0.423265], [1.18546, 0.843718, 0.42273099999999997]], "300c9220-a845-47b7-8050-207265fb44c5": [[-0.85502, 0.000442, -0.158925], [0.854939, 2.68956, 0.159367]], "91d60046-262d-42e3-9a28-373088e204c4": [[-1.23678, -0.00116269, -0.465811], [1.23731, 0.86027, 0.466746]], "ebf99b54-5dc6-423e-a9a9-f957c9124cc0": [[-1.2405, -7.62939e-09, -0.43012900000000004], [1.24037, 0.760084, 0.430715]], "000ffb60-6414-41b2-80cc-e38879db8fe8": [[-1.148942, 0.0, -0.5028], [1.148942, 0.898249, 0.502049]], "d951b096-e345-4ecf-9ec0-e9d5229a193c": [[-0.683086, 0.0, -0.19782699999999998], [0.6851600000000001, 0.9743580000000001, 0.19777799999999998]], "0b8fd0fd-4f20-4d3a-bf70-e20f52b13c12": [[-0.285601, 0.0, -0.26245999999999997], [0.285601, 0.673505, 0.26245999999999997]], "00fbb26f-13cf-4916-a8b0-f6241482abb4": [[-1.098694, 0.0, -0.448543], [1.098693, 0.7795380000000001, 0.44827]], "905a38be-aa93-4a91-aaef-83b38ee3ff79": [[-0.42473999999999995, 0.000292, -0.535756], [0.42473999999999995, 0.8461660000000001, 0.535818]], "662f2103-0631-4618-8aa1-8afbce4968ca": [[-0.8595539999999999, 3.25906e-07, -1.05858], [0.8595539999999999, 0.978652, 1.05858]], "3b56b94c-8a65-4e1f-b869-734db1c158ec": [[-0.30108599999999996, 0.0, -0.213669], [0.30108599999999996, 0.44527900000000004, 0.213669]], "76e7c3a9-8667-4095-89b7-0f6092343c65": [[-0.0975698, -1.15893e-06, -0.09755280000000001], [0.09754310000000001, 0.888591, 0.09757009999999999]], "460d03f4-c8f8-3416-91eb-7d3690ec353c": [[-64.6019, 0.0, -74.7442], [64.6721, 76.6552, 61.2142]], "159a35f3-5a01-467b-a08c-2597bab7c3d6": [[-1.20537, -0.000170822, -1.08861], [1.20462, 1.09518, 1.08858]], "8f023476-c786-4183-b745-6844ed4626b7": [[-0.6107309999999999, 0.0, -0.411087], [0.610742, 0.399544, 0.411087]], "6661478f-db0e-424e-a8a4-588790106bb0": [[-0.256751, -5.8593800000000005e-06, -0.249252], [0.257422, 0.6886239999999999, 0.249252]], "ebd9448c-1f2c-4ecf-bec9-0b0fac31b951": [[-0.626524, -3.6952e-18, -0.23061199999999998], [0.626524, 0.703117, 0.23061199999999998]], "5f167060-de78-4a9a-bd89-9f9fac511460": [[-1.1902, -5.11847e-06, -0.595732], [1.1902599999999999, 0.7001529999999999, 0.595708]], "127ff985-e915-41a2-9090-71b572c679ba": [[-0.310007, 0.0, -0.304506], [0.309798, 0.6735949999999999, 0.30476600000000004]], "23da5e52-d5df-4007-b419-27cf43cd8644": [[-0.6401399999999999, -0.00011312799999999999, -0.560676], [0.64004, 0.842082, 0.561041]], "f389f433-428d-4c44-b0fe-a25c81f7ec64": [[-0.811887, -0.00101825, -0.285938], [0.811884, 2.26272, 0.285178]], "7b4a43cc-9ac2-49e7-9058-32ec8d9793f0": [[-0.920667, 3.67277e-17, -0.781888], [0.920667, 1.10209, 0.781803]], "3de9f23c-16f1-3880-aec0-197dd4a42a74": [[-0.40622, 0.009346, -0.402173], [0.40622, 0.7244700000000001, 0.40206400000000003]], "0aa4cb1f-6b1d-4f9b-ba8b-f7c6d35bba71": [[-1.135, -1.3113400000000001e-08, -0.1575], [1.135, 2.99, 0.1575]], "2859e48f-0e8d-4df7-aa65-2087688ae123": [[-0.6750010000000001, 6.16858e-08, -0.30205], [0.6750010000000001, 2.16547, 0.30211]], "1ceec1be-2c14-4d19-afac-de93a03321c2": [[-1.059361, 0.0, -0.464009], [1.059361, 0.8480150000000001, 0.465145]], "1a261afc-a62c-4181-93ac-510d460247ba": [[-0.16865, 9.45544e-09, -0.127994], [0.16865, 0.744583, 0.127994]], "117a0036-5723-461d-8fff-fda45b0a4a23": [[-1.2207599999999998, -1.51018e-17, -0.306491], [1.22074, 0.790784, 0.30739]], "6832992f-56ea-4eaa-a7a8-a97ce55d59bc": [[-0.500939, 0.0, -0.7280070000000001], [0.500939, 0.526131, 0.7280070000000001]], "edf66837-14bc-417f-a8cf-e48635eaadc7": [[-0.39998399999999995, -7.07961e-07, -0.21136600000000003], [0.39998399999999995, 1.09997, 0.21178899999999998]], "c554f156-0d92-4fd7-9c6c-f18978a9e3fe": [[-0.9, -1.20628e-17, -0.20000099999999998], [0.9, 2.0, 0.20000099999999998]], "b3f39468-d393-471f-b877-d18f885877fb": [[-0.540536, 1e-06, -0.5552360000000001], [0.540536, 0.44390500000000005, 0.5552360000000001]], "cae0a133-5779-471f-ba3e-e06b47d57971": [[-1.7858699999999998, -1.3869100000000001e-17, -0.23390699999999998], [1.7845900000000001, 2.45, 0.237044]], "591f9a2d-fc46-4d12-867d-00ef9e7728e6": [[-1.86955, -0.0, -0.5501659999999999], [1.86955, 1.0821939999999999, 0.5496099999999999]], "956a28f5-436a-4098-b436-bb430a04b67a": [[-0.9667669999999999, 0.0, -0.927668], [0.9667669999999999, 1.69062, 0.927668]], "4219c88c-a6be-4c0d-813c-dbaf934dab46": [[-0.249664, -1.6209300000000002e-17, -0.200629], [0.249664, 0.479401, 0.200629]], "6f09d6a0-dcd6-472a-9793-bafc17a8486f": [[-0.347207, 0.0, -0.34789499999999995], [0.347207, 0.9638930000000001, 0.34781300000000004]], "0911a656-0d84-43fc-b176-cf2085ec0ca0": [[-1.16543, 3.14831e-17, -0.5958829999999999], [1.16551, 1.1143, 0.595437]], "aef907c4-fff9-4101-a633-8f834f6f55cb": [[-1.0395999999999999, 1.52219e-07, -1.15126], [1.03993, 1.41993, 1.15108]], "a9e66980-644d-4c3b-acb4-e9331d5326c3": [[-1.337433, 1.3e-05, -0.469736], [1.337592, 0.827378, 0.46983400000000003]], "5b7b119c-68ee-4e0c-957e-0d92a4125f6d": [[-1.09122, -0.00024077700000000002, -0.37308199999999997], [1.09083, 0.6303110000000001, 0.372526]], "8c2777f7-45f2-4d64-bc33-c0cd6c23c096": [[-0.52, 9.504500000000001e-09, -0.16982], [0.52, 1.3375, 0.169821]], "878fce18-92d4-4a8d-9d79-0b117591168e": [[-0.35137599999999997, -6.4006e-05, -0.30229], [0.35117600000000004, 0.854914, 0.301989]], "bb429488-2de8-441b-88c6-91c8f562a60f": [[-0.562864, 0.0, -0.240279], [0.562864, 0.829422, 0.240279]], "274f5f8b-70a7-4961-8f2a-9ab9d119efcf": [[-0.20515999999999998, 0.00025829499999999997, -0.21207], [0.205123, 0.916694, 0.212071]], "a717108e-362d-4b90-823f-1b590b3e1638": [[-1.00938, 6.51097e-09, -0.430689], [1.00923, 0.791964, 0.431024]], "2c918c67-03a6-4451-94a0-d643d1abd95c": [[-1.14686, -4.29802e-09, -1.11262], [1.1462999999999999, 1.75574, 1.11244]], "8f7ac9ce-7610-4367-a8c7-5645bb4fbd1a": [[-0.292732, 0.0, -0.26875], [0.292732, 0.5473319999999999, 0.26838]], "6b12c1ae-f3aa-4a27-918b-8016f32f6264": [[-0.243915, 4.768370000000001e-10, -0.22926], [0.24339300000000003, 0.32878999999999997, 0.228838]], "51f2b957-074e-34a6-80a5-a2d1ff3f8ad5": [[-0.65, -1.1000000000000001e-05, -0.65], [0.650001, 0.732448, 0.649999]], "0518c9eb-cc6e-477a-b1c9-0381ae26e3ac": [[-0.7933969999999999, 0.0, -0.41316600000000003], [0.793396, 0.515775, 0.413173]], "81a4c66f-fdf7-4190-990e-53086ad8d83d": [[-0.619661, -1.69964e-17, -0.302164], [0.619661, 1.9609200000000002, 0.302164]], "52dd96c9-570b-4d08-9ff7-896e4798d7c0": [[-1.06882, -6.85621e-17, -1.15002], [1.0684, 1.048, 1.14993]], "fb84f58c-6029-4f37-bd73-6705c29617a1": [[-0.277559, 1.34223e-17, -0.265932], [0.277559, 0.649589, 0.265931]], "692bf4d9-dee4-4bf1-9e6b-7377cc37434b": [[-0.49999899999999997, -5.66881e-06, -0.250302], [0.500007, 1.01222, 0.250174]], "e26c147c-e231-4351-96ac-d73eaeebf873": [[-0.725337, 0.0, -0.272821], [0.725337, 0.9314060000000001, 0.272821]], "4c7852d8-a55d-466b-ac5b-8ad9dd1aa242": [[-0.839001, -1.18239e-17, -0.228445], [0.839001, 2.10354, 0.228445]], "4331d6ff-401c-4188-acf8-bd44b96d5529": [[-0.040819999999999995, 0.0, -0.046824000000000005], [0.040819999999999995, 0.194922, 0.046824000000000005]], "00da6e71-e633-480c-9102-5e1f5423cf5d": [[-0.134052, -4.62771e-07, -0.134344], [0.13422, 1.5949700000000002, 0.134086]], "7d41e08a-829d-41e4-a116-5ff0256c8e0c": [[-0.604428, 1.52588e-08, -0.883343], [0.596295, 0.8342849999999999, 0.883348]], "40c2b1f8-58c8-4ae5-8ec7-b07ffe2cf899": [[-0.638538, -5.82208e-17, -0.993195], [0.638538, 0.821797, 0.993194]], "79a43b72-d1db-4873-8eb1-09a7e93d5842": [[-1.4624000000000001, -0.000526517, -0.49432499999999996], [1.4617099999999998, 0.860481, 0.49366]], "67b0aedc-8931-428a-9f6e-e697034e1265": [[-1.09943, -7.83653e-08, -0.848819], [1.09894, 0.81349, 0.849863]], "cbf28f30-1aa8-46d3-bdf3-8c96d8134bac": [[-0.36090200000000006, -6.59988e-05, -0.36090200000000006], [0.36090200000000006, 0.133301, 0.36090200000000006]], "be5b3d10-d630-4c86-ae25-6a79d5fc9c09": [[-0.437631, -4.44118e-05, -0.45636299999999996], [0.43715000000000004, 0.97485, 0.45624000000000003]], "a3f6781b-630a-4326-b176-f666cc2eecdb": [[-1.28464, -0.000452656, -1.3821], [1.2831000000000001, 0.889715, 1.3818000000000001]], "6e4ad416-6cef-4933-8cfc-74f2fab1b9ae": [[-0.969953, 1.25581e-17, -0.2051], [0.969953, 2.4385, 0.20603100000000002]], "6754730c-4b90-34e2-9705-ea406543a88c": [[-0.650001, 0.0, -0.4], [0.650001, 1.100103, 0.4]], "f5750fe5-bc61-4f62-b086-d41d6abfab96": [[-0.486201, 0.0, -0.39406199999999997], [0.486201, 0.620739, 0.39432]], "2ad51dfc-9e9e-492b-b053-6e6373a9a2aa": [[-0.245, 5.6631e-06, -0.20816500000000002], [0.245, 0.577393, 0.20810800000000002]], "e6731970-b449-4537-ae45-98ca4baa2ec3": [[-0.360501, 0.0, -0.35788899999999996], [0.360501, 0.719264, 0.3575]], "0a58acac-b026-49eb-8d09-042cdb30abbd": [[-0.141725, -0.000113378, -0.142876], [0.141197, 1.00235, 0.143029]], "983fc7f4-335b-4f95-a6d4-abbb97265c9c": [[-0.31961300000000004, 0.000131836, -0.19393899999999997], [0.319722, 1.2647, 0.19393899999999997]], "1774cce7-da69-43e8-8e68-595bc305ebe0": [[-0.6779510000000001, -2.84747e-17, -0.474777], [0.6779510000000001, 0.365933, 0.474777]], "a74a6616-45c2-4a17-8387-c221ab63a721": [[-0.349634, 0.0, -0.349758], [0.349634, 0.8682840000000001, 0.34970399999999996]], "7e71549a-0591-4491-8a05-8e03487a0de0": [[-1.20728, -2.88049e-17, -0.502834], [1.20728, 0.76253, 0.502834]], "4ebaa2e6-fad7-4746-8494-a3721b5d5df4": [[-1.1618300000000001, 0.00047620299999999997, -1.10388], [1.16197, 1.3862700000000001, 1.1038]], "71cae2e2-a584-4adc-88da-e0d67c85ca60": [[-0.33027999999999996, -0.000474161, -0.329959], [0.33027700000000004, 0.686165, 0.33029000000000003]], "7d6b5e50-68f5-47aa-b0b7-1b5604f2904b": [[-0.254674, -0.0005628310000000001, -0.24921], [0.25467300000000004, 0.780463, 0.249148]], "10a4329d-93a7-43e5-879e-facdfc5146f1": [[-0.43518, -9.85711e-18, -0.164787], [0.43518, 1.6332300000000002, 0.164787]], "957eeddc-24c0-4d57-b8e4-7a5ab3d7bd85": [[-1.346986, 0.0, -0.48315800000000003], [1.346986, 0.788882, 0.48315800000000003]], "7e0db7d4-cbf1-4c7f-9787-048cccf32d8e": [[-0.964349, 7.16576e-05, -1.0492400000000002], [0.9643309999999999, 1.26021, 1.04875]], "4948b9f9-bc22-4682-99f1-5703fbc9b458": [[-0.8673489999999999, -5.189390000000001e-06, -1.06032], [0.867322, 1.33296, 1.06111]], "f4b692d2-0c69-4ed5-b7d6-624e30d5dac1": [[-0.261171, -3.78295e-05, -0.260835], [0.26123999999999997, 0.524763, 0.260871]], "ec9190d1-cc42-4a85-bb1e-730ed7642f51": [[-0.549936, 0.001547, -0.403375], [0.550898, 1.361215, 0.403925]], "14f0f3b1-24cd-422d-8f10-84f7eb0f87a3": [[-0.43516, 0.0, -0.481184], [0.43516, 0.924188, 0.481184]], "a5835152-20a1-48c4-8104-3e9b924f1729": [[-0.308609, -1.19903e-17, -0.298987], [0.308421, 0.814156, 0.298664]], "3eb21f09-daf2-4060-8de8-23b61957ea90": [[-0.880899, -2.1594500000000002e-08, -0.974229], [0.880899, 1.02815, 0.974229]], "cdee58c4-c2cb-4533-86ff-96331d5e0374": [[-1.03654, -1.56085e-07, -0.35957500000000003], [1.03654, 0.6654909999999999, 0.359743]], "bb9598e5-69bc-46e9-90c6-c6fb93f96ed1": [[-0.20000099999999998, -8.14329e-18, -0.16109400000000001], [0.20000099999999998, 0.55, 0.16102]], "5756e055-7ba6-4db6-91f9-35a208d8ff5e": [[-0.8299550000000001, -0.0015828700000000001, -1.09236], [0.829659, 1.3617, 1.09229]], "6940c2c0-6685-4a46-a941-d8e9bfe160d4": [[-0.875843, -0.0, -0.875744], [0.875744, 0.887869, 0.875744]], "7f340c08-c1a5-43c8-915c-364ae43458ed": [[-1.390163, 0.0, -0.509385], [1.390163, 1.087953, 0.509589]], "1e6d01bd-08ed-4dbd-9914-2e24169bf842": [[-0.53, -0.000911854, -0.267749], [0.53, 2.16521, 0.267749]], "2f63796a-cf73-4578-b8be-8bd47f335acf": [[-0.38263800000000003, 0.0015010000000000002, -0.351468], [0.38263800000000003, 1.493452, 0.351468]], "f0f8b2c8-b7ce-45e2-9f30-2ebc7f69753d": [[-0.613962, -2.41307e-17, -0.449148], [0.614131, 0.529234, 0.449309]], "0207d0ca-ddda-3740-a866-8031de2f2ad8": [[-1.170641, 0.0, -0.696081], [0.8105589999999999, 0.762, 0.370719]], "1e0e0370-5307-4cc4-8765-7394f10ffe78": [[-0.22078299999999998, -9.875719999999999e-05, -0.235031], [0.220804, 0.9109959999999999, 0.235273]], "d80a82cc-19ac-46a7-95b9-9a51b07018a6": [[-0.294628, 1.17279e-07, -0.256624], [0.294628, 0.523012, 0.256624]], "2869c66c-5c15-3266-84ea-5743335e155e": [[-0.533068, -0.000531, -0.200873], [0.576932, 0.909645, 0.199127]], "5045c2af-930c-44cf-a24d-1fc5afcf4444": [[-0.272165, 1e-06, -0.284879], [0.27217199999999997, 0.5827300000000001, 0.28491099999999997]], "5ee43159-6e09-412c-b300-032c119e651f": [[-1.08924, 2.44141e-07, -1.0583799999999999], [1.08972, 0.915646, 1.05883]], "002cd3a1-78b2-4a2e-aa01-5947dbe994f8": [[-0.340213, 0.0, -0.393418], [0.340213, 1.042914, 0.393418]], "6148ff4e-94a8-4e28-a167-c3c6985fea6e": [[-0.282804, -1.5736400000000002e-17, -0.282804], [0.282804, 0.12854100000000002, 0.282804]], "06044eb3-2670-43da-ac45-f8db75729698": [[-0.763034, -5.82367e-17, -1.07835], [0.762355, 1.11388, 1.07945]], "46244e8e-fb9e-4a3d-9448-4f1c3bb5b159": [[-1.315993, 0.0, -0.581886], [1.316626, 1.064788, 0.582117]], "3e18af7a-f84c-41d0-8e7f-691e6db4cc55": [[-1.00906, -1.52588e-08, -1.1183400000000001], [1.00907, 0.7882210000000001, 1.11835]], "03950c96-b39a-4440-a8de-846923c8a84d": [[-0.42930999999999997, -0.0, -0.398455], [0.42934300000000003, 0.892675, 0.398455]], "03ca78e6-7f5a-47d5-b956-b8ae08730b2f": [[-0.900008, -7.9094e-06, -0.201778], [0.9, 0.48192999999999997, 0.201778]], "7cd595b9-9f90-477b-b2a6-3bca846609fc": [[-1.264419, 0.0, -1.176733], [1.264419, 1.1337220000000001, 1.176733]], "841cef2e-5841-4b34-aea1-088603507aa8": [[-0.81, -1.0807600000000001e-17, -0.177501], [0.81, 0.42899099999999996, 0.177501]], "24e0fbde-6fb9-4312-8e48-2b01531e46c2": [[-0.350516, -1.44384e-17, -0.14571199999999998], [0.37719499999999995, 0.6950320000000001, 0.282376]], "aa5d6f54-98dd-4204-8350-a80b6f218df8": [[-0.351423, 2e-06, -0.41918999999999995], [0.351423, 0.87559, 0.41918999999999995]], "e88490b3-d3ad-4e0c-aa4c-3eaf9d45834b": [[-0.846999, -9.44308e-08, -0.33020099999999997], [0.8465309999999999, 0.948201, 0.32954]], "663606ea-7234-49aa-a361-a0e2d5555675": [[-0.44571, 0.000999, -0.44571800000000006], [0.44570099999999996, 0.812258, 0.44548299999999996]], "621d2f3f-b474-473f-a994-13f3de8a9769": [[-0.864201, -0.000210983, -0.37473500000000004], [0.864201, 0.6345620000000001, 0.375648]], "cbcdcac7-0bd7-4068-a94b-6c5fb52639b7": [[-0.325976, 3.8147e-09, -0.249206], [0.325976, 0.278275, 0.249206]], "62dd931f-1d9d-456f-bb9a-e3898482d24f": [[-0.8782420000000001, 0.0, -0.420469], [0.8780830000000001, 0.85757, 0.42013399999999995]], "4cd4b03e-f857-4576-ae81-68d42d4f6500": [[-0.8881910000000001, -1.87909e-07, -1.13813], [0.8881910000000001, 0.866538, 1.13813]], "ec53081b-d6e4-49cf-b448-9f97b3fbea7a": [[-0.25799900000000003, 1.5e-05, -0.248837], [0.25791000000000003, 0.41646500000000003, 0.24881799999999998]], "3ed53c66-59e5-3aa0-8f2f-293a1573a4ec": [[-0.255069, 5.1000000000000006e-05, -0.324565], [0.255069, 0.7973, 0.27531300000000003]], "06fa510a-de04-45f5-b54b-d1ddacc27a4b": [[-2.18817, -1.0991999999999999e-09, -0.33198500000000003], [2.18817, 2.55606, 0.33198500000000003]], "5c7191b4-297f-41bf-a280-0bf54a42fc2c": [[-0.272251, -1.1231100000000002e-05, -0.29576], [0.272293, 0.670618, 0.29564]], "042badc0-128e-4abe-8ce8-5fe3e538b4fc": [[-0.336804, 0.0, -0.223033], [0.336804, 0.058671, 0.223033]], "51bb6c7b-2377-4f89-898d-8cddbe1b17ae": [[-0.262007, 6.10352e-08, -0.268657], [0.262007, 0.547303, 0.268657]], "6f9bca5c-2c5f-4c9c-8898-bf3a1786e90e": [[-0.389017, 0.00031099999999999997, -0.36963700000000005], [0.38901800000000003, 0.749837, 0.369576]], "0ec37814-fac1-4cdb-b945-b890f1310a7e": [[-0.310201, 0.0, -0.312368], [0.310201, 0.788055, 0.312368]], "1269b743-a5e4-4367-8d62-3e9f1d894ce4": [[-0.22345700000000002, -3.03229e-05, -0.182234], [0.22346, 0.704372, 0.182638]], "27e7b15e-4823-370c-acf3-e3260a16c00f": [[-40.0, -0.0192, -40.0], [40.0, 82.8993, 40.0]], "61fe95b1-4049-4279-b235-6d9f659959ac": [[-1.25072, -1.00767e-05, -0.525432], [1.25073, 0.750151, 0.525432]], "0af130ac-34bd-4ea2-8460-6f1820ca2578": [[-0.39209299999999997, 0.0, -0.36584000000000005], [0.392264, 0.8843510000000001, 0.36578000000000005]], "4567b936-bbf3-4158-b683-ba74c5348930": [[-0.434859, 0.00010999999999999999, -0.219285], [0.43487200000000004, 0.36652999999999997, 0.21928799999999998]], "53ea4e17-1e00-457a-9035-81b375eb9056": [[-0.17789100000000002, -1.19742e-17, -0.230001], [0.17786200000000002, 0.699866, 0.230001]], "80a21ce9-e036-4005-8039-927a719e8e86": [[-0.247156, -1.82126e-05, -0.133935], [0.246872, 0.50836, 0.134022]], "458140b8-8552-498d-9fe6-0cdbd22acced": [[-1.2426300000000001, -1.52588e-08, -0.530777], [1.24265, 1.9455, 1.37314]], "a5b6a7ad-9bbc-4d55-95ab-5d2123b3d6a5": [[-0.300032, -4.82077e-05, -0.210033], [0.300033, 0.660189, 0.210032]], "3062da49-9d90-3894-8c6a-207b131a7f1f": [[-0.4075, 0.0, -0.403314], [0.4075, 0.780851, 0.403314]], "5949e07c-612d-4f06-826f-5150b5435890": [[-1.32776, -4.61853e-17, -0.49542700000000006], [1.32776, 0.7493470000000001, 0.495436]], "367b06b8-46d4-45f1-bfae-ff42ce3de9a7": [[-0.900013, -3.93312e-05, -0.201778], [0.900139, 0.758816, 0.201778]], "27d32b81-fead-492a-9d13-bfb88f9b8196": [[-1.05001, -5.096340000000001e-09, -0.21502400000000002], [1.05001, 0.7517400000000001, 0.21502600000000002]], "4307324d-e6fa-4d7a-b235-2d334ea77e58": [[-0.75, -1.83697e-17, -0.3], [0.75, 2.24996, 0.3]], "443a14f4-44ba-4e1b-a73b-c8fa77e92e21": [[-2.067336, 0.0007520000000000001, -0.990355], [2.067773, 0.9709, 0.989859]], "282a4ac9-94ce-48dd-a17c-8bb119febd1d": [[-0.552691, -2.85987e-17, -0.469932], [0.551648, 0.897269, 0.469381]], "cca35343-7ce0-46a9-b7ae-0bbf59af899a": [[-0.182335, 2.43187e-07, -0.126128], [0.182318, 1.48615, 0.126152]], "37c1c3e6-600a-45bb-9ae6-9c8a8845745d": [[-0.391858, 0.0, -0.46759300000000004], [0.391858, 0.49373100000000003, 0.467517]], "644682b4-3cde-331d-93fe-b78c90291396": [[-132.3572, 0.0, -37.7299], [132.3572, 80.1079, 36.2701]], "6d8b1aae-c4f8-3b6e-93e5-d5df230ab180": [[-0.7953709999999999, -0.0, -0.297424], [0.7953709999999999, 1.784035, 0.297424]], "b2866c73-2d5d-4ad7-b1d7-a8e5285b3d70": [[-0.2491, 0.0, -0.2491], [0.2491, 0.651486, 0.2491]], "69125da6-5049-4fb2-af85-abf17c898757": [[-0.24924, -0.000434769, -0.306963], [0.249597, 0.890412, 0.307368]], "8d47cb7b-eff9-46e1-924c-2e33eed6f20c": [[-0.280277, 3.4e-05, -0.311214], [0.280277, 1.076718, 0.310132]], "b2110fad-744b-4297-90b9-093fe5482d7c": [[-0.7941280000000001, -7.324e-08, -0.447797], [0.794091, 0.7392230000000001, 0.447797]], "552404dc-9ac1-46b7-91ef-3b8bd642dc79": [[-0.667516, -1.0344600000000001e-17, -0.208173], [0.667516, 0.6094120000000001, 0.20823899999999998]], "5748daed-f471-419f-b5e3-5a24a3d8f3c6": [[-1.0708499999999999, -0.0027761, -0.43571], [1.07108, 0.8036329999999999, 0.43473999999999996]], "817a0809-f94f-43cd-9915-2b9e2d58b7d5": [[-0.600998, 3.5977499999999995e-17, -0.61004], [0.600998, 0.413924, 0.61004]], "16bee8d2-7d9f-48c7-9f2c-4b71c4d7081a": [[-1.335787, 0.0, -0.304247], [1.335787, 0.529934, 0.304247]], "abc27de3-9f43-441a-a6a6-ec16ef13c6af": [[-0.292347, 0.0, -0.287948], [0.292278, 1.547148, 0.287948]], "45714d27-1778-4275-badf-6c375d65191c": [[-0.336082, 0.0, -0.325942], [0.336082, 0.591136, 0.325942]], "6fd4889d-a78e-44eb-954a-87ab758da765": [[-1.15421, -0.0011948599999999998, -0.42733699999999997], [1.15383, 0.920682, 0.42733699999999997]], "e83eaa01-64ec-4396-a51b-a1ce74aba294": [[-0.469887, -0.000235278, -0.40224600000000005], [0.470075, 0.826752, 0.402764]], "47660e99-46b6-4d97-9f59-76f59dd36618": [[-0.8305629999999999, -2.9126999999999997e-05, -1.10257], [0.8308880000000001, 1.4403299999999999, 1.10243]], "d477981b-fe72-4dd7-9516-cebce140b0fc": [[-0.884829, 0.0, -0.346484], [0.884576, 0.688373, 0.34646]], "83b7820e-3e39-4eb2-99cf-37c91a6dc56d": [[-1.370356, 0.0, -0.441553], [1.370356, 0.794403, 0.441553]], "0acb42d5-724e-4505-b9da-7549a4cfe6d6": [[-0.516932, -2.84781e-17, -0.516933], [0.516932, 0.48314300000000004, 0.516933]], "99dacb40-80f2-4572-9806-c2a9c8692d0e": [[-0.578012, -1.01038e-17, -0.184992], [0.578012, 2.2, 0.184992]], "5029425c-701f-4cbd-bd71-2db071fcd19f": [[-0.656016, 9.400000000000001e-05, -0.12], [0.656016, 1.679557, 0.12]], "4dcd3e15-c879-4fba-b6bf-763bc3ae89a0": [[-1.4012, -0.00105712, -0.543383], [1.4009200000000002, 0.871147, 0.542674]], "831cb998-98b7-4fa6-a643-e6e365d45825": [[-0.405267, 0.0, -0.48099800000000004], [0.405267, 0.8384, 0.48099800000000004]], "b1567391-408d-4a83-a339-8c169782e740": [[-0.731823, -0.000769093, -0.724139], [0.731792, 1.5085300000000001, 0.724173]], "a6f12011-4a57-4471-8640-a4b22ed24be8": [[-0.344949, 1.28746e-08, -0.42198399999999997], [0.34488300000000005, 0.678555, 0.422035]], "1efe3f03-84b3-4e74-9dd6-ed3c6f42cbdd": [[-0.724961, 2.2377e-17, -0.44197400000000003], [0.7249599999999999, 0.52, 0.44197400000000003]], "4cbf7115-025b-4337-b827-067d6440f57c": [[-0.283349, 1.52588e-08, -0.28321799999999997], [0.283319, 1.0369, 0.28336]], "6e9e1e84-ca99-4ae0-b082-9feb3f962879": [[-0.210868, 0.0, -0.237792], [0.210868, 0.5194449999999999, 0.237792]], "485fa040-ac8e-4396-a3d1-36de9eefef8f": [[-0.561943, -6.43167e-05, -0.162468], [0.561943, 1.62744, 0.16190100000000002]], "1a4303b5-a796-3f42-95f8-f1d881d3b7d6": [[-42.0316, 0.0, -32.4273], [42.822, 79.9638, 33.7432]], "8c348ce1-8f68-4126-8fdc-022843ba0bb8": [[-0.401415, 0.0, -0.33480600000000005], [0.401415, 0.912718, 0.33704]], "843c016f-50c2-4c00-bb13-6aba0f124ae5": [[-0.24269100000000002, -0.000398281, -0.246201], [0.242935, 0.7227290000000001, 0.245985]], "bdac1ce4-9007-4922-9d36-e878b80bdb04": [[-1.15918, -0.000368944, -0.438981], [1.1586400000000001, 0.898895, 0.438911]], "34a3949d-ee04-4eb4-a003-b74c2c91c4a2": [[-0.25, 6.45583e-07, -0.25], [0.25, 0.6554800000000001, 0.25]], "a1dfce55-6eeb-4713-b0e1-3e1f0d6e784e": [[-0.186571, -3.2889e-18, -0.186571], [0.186571, 0.45661900000000005, 0.186571]], "8d7d501a-ff75-4c7e-b453-85cf15b05279": [[-0.446182, 2.18353e-05, -0.250002], [0.446182, 0.334377, 0.249506]], "26c90452-a6f2-38fc-9052-499b4b1d3e63": [[-0.7364790000000001, 0.0, -0.303116], [0.7364790000000001, 1.3952449999999998, 0.303116]], "767fb808-cc4d-43ab-aadb-54a324570ecd": [[-0.411361, 0.0, -0.7475809999999999], [0.41267899999999996, 1.058547, 0.750305]], "3866379b-9add-4643-b39f-f09284254c85": [[-1.21713, 1.6e-05, -0.465675], [1.21713, 0.8310939999999999, 0.465675]], "cbe54d15-8b76-4269-8970-5a384b91d170": [[-0.266127, 1.77918e-05, -0.171879], [0.26615500000000003, 0.358463, 0.17191099999999998]], "6374bd7c-53f1-47e9-9c41-297e0f7bbb64": [[-1.2453100000000001, -0.000304711, -0.605305], [1.24535, 0.957843, 0.6056170000000001]], "8c08edb3-513d-497c-8380-43e75f0e7ac3": [[-0.393782, 0.0, -0.375197], [0.39378100000000005, 0.727572, 0.375197]], "43bd0910-1dd1-4b1e-9ba2-e9801e6b5761": [[-1.111361, 0.0, -0.47761899999999996], [1.11135, 0.9286190000000001, 0.47706000000000004]], "16d3031e-f056-4bfa-a9fd-3624b43d7e32": [[-0.9114369999999999, -7.88264e-05, -0.149787], [0.911288, 1.59743, 0.1499]], "32bac62d-d3dc-4e53-aa41-80abb3c5aa03": [[-0.687411, 0.0, -0.377335], [0.6873650000000001, 0.7340000000000001, 0.377318]], "470c931b-30d9-4817-8040-4bca427ee2aa": [[-0.389378, -0.000258584, -0.389388], [0.38958, 1.0103499999999999, 0.389387]], "1250ec24-c010-4578-9fee-d6852135bed1": [[-1.3067900000000001, -0.00045250199999999997, -0.462429], [1.3066300000000002, 0.872764, 0.463816]], "04d7bef7-8628-48c5-a62f-3762e54f7914": [[-0.32845399999999997, -0.000101208, -0.30562], [0.32893300000000003, 0.857133, 0.305521]], "6f671575-096f-493d-899d-c990b38db2a1": [[-1.462, -1.90735e-09, -0.48501600000000006], [1.4621799999999998, 0.886129, 0.48513]], "f0f37b4a-dc08-4539-9adc-4e4e1e54f667": [[-0.906876, 0.0, -0.39787100000000003], [0.906758, 0.7545869999999999, 0.39787100000000003]], "02f7c147-a104-47a2-b8a0-438231c0a254": [[-0.533555, 0.0, -0.226083], [0.533555, 0.351351, 0.226083]], "6b302e11-00f1-498b-9041-3e8c5102251f": [[-1.3378, -9.39161e-05, -0.428342], [1.33706, 0.74163, 0.427741]], "a050e2f8-e020-413e-8555-3aa1c675f11c": [[-0.432299, 3.05176e-08, -0.0869702], [0.43233199999999994, 0.75651, 0.08697609999999999]], "1b1c2e2b-8d32-4768-8af3-0e7b82a148b7": [[-0.369077, 0.0, -0.37122700000000003], [0.369077, 1.027816, 0.37122700000000003]], "24ac0705-9227-4780-88d9-c1d9426935c0": [[-1.5659239999999999, 0.001093, -1.230305], [1.56565, 0.908361, 1.229788]], "1eddf36f-868c-3d18-9308-fd184b18fbc3": [[-0.399122, 0.0, -0.460461], [0.399122, 0.8896040000000001, 0.282231]], "ffc06c81-eb80-4c1a-8163-2416861f4265": [[-0.604506, 0.0, -0.512977], [0.608377, 0.479553, 0.512978]], "d741142f-53e8-4b53-8e21-cb05db7981bd": [[-0.30707799999999996, -0.000285482, -0.33676900000000004], [0.306987, 1.11551, 0.33665599999999996]], "c4c25221-2bc0-444b-a41e-6b19a5065324": [[-1.0220099999999999, 1.10143e-17, -0.179877], [1.0220099999999999, 0.355723, 0.179877]], "fd192377-d3ab-4d7d-8855-aa4bd3b8c47e": [[-1.28489, -4.06788e-05, -0.507917], [1.2846600000000001, 0.744617, 0.508022]], "97c76356-1d93-4887-ab6e-0e9334e6cf3e": [[-0.460917, 0.0, -0.433781], [0.460917, 0.38197499999999995, 0.433781]], "3dbe6fbe-7993-4eee-a8e3-34b69bf94299": [[-1.20103, -2.01056e-06, -0.551519], [1.20103, 0.7306440000000001, 0.551519]], "4da192f1-bd83-4705-9b64-d28b51914450": [[-0.199967, 3.00632e-09, -0.23041], [0.199967, 0.06900339999999999, 0.23041]], "bd4870eb-112f-4668-8a75-ff14db286664": [[-0.610468, 0.0, -0.606598], [0.610366, 0.4, 0.606598]], "662b55b1-28bc-40cd-be4b-e4eac270c160": [[-0.492461, 1.5261699999999998e-08, -0.199874], [0.49245199999999995, 0.8038209999999999, 0.200373]], "6bdcb84a-76d5-40f0-96a7-21e4552c585c": [[-1.0299500000000001, -1.7829e-05, -1.03699], [1.0298399999999999, 0.963506, 1.0369199999999998]], "79dd4777-c925-4a73-933f-5016c353ca6a": [[-0.460521, 0.0, -0.748026], [0.460521, 0.753159, 0.748026]], "924b6afc-0779-4789-8824-fd3cd5151a08": [[-0.3, -1.00476e-17, -0.241925], [0.3, 0.497341, 0.24201799999999998]], "e86c03d0-53b1-49df-918f-ad6cc1c437c0": [[-0.879837, 0.0, -0.567051], [0.879837, 0.390532, 0.567051]], "1cfe1c8d-271a-46cd-b982-9bc91beb0c62": [[-0.9544370000000001, -0.0006679259999999999, -1.16508], [0.9535389999999999, 1.00879, 1.16537]], "c2dc341d-e8c5-48c2-afcb-791cd99bcc9e": [[-0.7327849999999999, -4.74194e-05, -0.509727], [0.732794, 0.36127499999999996, 0.5097200000000001]], "446a1b2b-d522-4302-9735-ad2791c07f69": [[-0.36877899999999997, 7.62939e-09, -0.357661], [0.36877899999999997, 0.6840949999999999, 0.357661]], "44e1a843-75e9-4214-b376-c04b97d5a014": [[-0.38648899999999997, -4.24227e-05, -0.42282899999999995], [0.38555100000000003, 0.7875, 0.42302799999999996]], "061829aa-2d59-4e63-9a3a-6867e08a558e": [[-1.16665, -7.62939e-09, -0.260274], [1.16665, 0.6037939999999999, 0.260274]], "e3ab95a5-68cc-4ff7-980a-233e4ed13281": [[-1.1467, -0.000864582, -0.502421], [1.14685, 1.04342, 0.50453]], "5259596d-6451-45e1-ae62-fc2b5d883101": [[-0.5956560000000001, -6.03368e-17, -1.06263], [0.5956560000000001, 0.970868, 1.06263]], "c15020e3-9e39-4da3-9a97-00679203579c": [[-0.603701, -1.52588e-08, -0.21479099999999998], [0.603702, 0.666326, 0.21479099999999998]], "0e0ec6a8-3792-4bd7-8100-2f81f80c15ea": [[-0.810056, 0.0, -0.444174], [0.8121970000000001, 0.929825, 0.443183]], "7bb8104c-3d57-4514-a0b1-a1a0fd209e9b": [[-0.587445, 3.05176e-08, -0.151476], [0.587445, 0.6378240000000001, 0.151476]], "eb3e7ea0-e2de-48ef-8c0a-8953b51399bf": [[-0.57284, -1.7530800000000002e-17, -0.44737499999999997], [0.57284, 0.32169800000000004, 0.44737499999999997]], "f5becbc2-b8f3-4689-92ac-8aecc4a1bcea": [[-1.21414, -3.54581e-05, -0.480464], [1.21417, 0.822062, 0.48029299999999997]], "276c2a64-9fae-4a44-881f-f81b457c8c28": [[-1.00569, 1.14441e-08, -0.549138], [1.00597, 0.8540779999999999, 0.549255]], "297588ce-9fcc-4909-bfcc-1aebe79126ce": [[-1.0825960000000001, 0.0, -1.0847369999999998], [1.0825960000000001, 1.420482, 1.083929]], "4d079123-d24f-41f0-822c-b2140ea44fac": [[-0.618393, 0.0, -0.320693], [0.6183919999999999, 0.759872, 0.320693]], "4e4a697b-e59d-4ca3-880d-cb6ed4f60237": [[-0.905368, 1.52588e-08, -0.250775], [0.905368, 0.658686, 0.250775]], "45f33ced-73b7-4345-bd21-09f4356398bb": [[-0.823258, 4.47345e-08, -0.131821], [0.823258, 0.668891, 0.131821]], "1c56ac9b-0c64-4ee6-a735-1899f97854e1": [[-0.963797, 1.63732e-06, -1.075], [0.965637, 1.15421, 1.07605]], "db75393f-2248-44c5-9cb3-16a451a5941f": [[-0.315138, -1.15389e-17, -0.21135500000000002], [0.315138, 0.553408, 0.21135500000000002]], "af903b3e-9ecc-4184-9b2d-75a1af7492c6": [[-0.367834, 0.000357, -0.37485], [0.367834, 0.7886369999999999, 0.374628]], "4f76efdb-4fbf-4c4c-a8e9-d139ca6e4eec": [[-1.0505, 0.0, -0.1255], [1.0505, 0.851, 0.1255]], "51ba8bd8-7a6e-410d-a4e4-60ffb569ff27": [[-1.5724600000000002, -2.68099e-07, -0.562111], [1.5716999999999999, 0.8968170000000001, 0.5627219999999999]], "8d0fbbfd-a898-4d51-bdbf-fde2b361e54e": [[-0.432844, -9.059909999999999e-09, -0.39010399999999995], [0.4329, 0.7769320000000001, 0.390376]], "7ffe52d3-e4c0-4785-8afa-76c012e022a2": [[-1.190247, 0.0, -0.40875999999999996], [1.190403, 0.8420399999999999, 0.408485]], "80a2a2a7-bf33-40c6-a4ea-10636436e704": [[-1.08133, 8.11818e-09, -0.6731440000000001], [1.0820999999999998, 2.0323599999999997, 0.673752]], "50dabcf3-56e2-4b5d-af13-e25e7af0325f": [[-0.570214, 1.13e-17, -0.24837399999999998], [0.570214, 1.51644, 0.248305]], "2708c786-c710-4230-a351-77b7234a89a9": [[-0.507715, -0.0006318980000000001, -0.253737], [0.507209, 1.59821, 0.254698]], "57f2a1f3-ea70-4960-9445-24042158a0a7": [[-1.673985, 1e-06, -0.7373000000000001], [1.673215, 0.8733710000000001, 0.7367520000000001]], "3bd069b8-ba0a-492e-bf82-e00aa91d0bf9": [[-0.33047, 0.0, -0.36017299999999997], [0.330518, 0.860247, 0.36007300000000003]], "70208dde-87e2-499c-9ee3-454a5ce97d2a": [[-1.745087, 0.000222, -0.9217489999999999], [1.745087, 0.815919, 0.921768]], "1cd52ada-14af-4897-83dc-7ddf5a7a6cd9": [[-0.8092659999999999, 0.0, -0.472881], [0.8092659999999999, 0.7316400000000001, 0.472881]], "1aa5dca6-9194-4508-a846-d6e198aa8823": [[-0.555876, 1.52588e-08, -0.139317], [0.555876, 0.9502970000000001, 0.139312]], "505b7b5c-4aa5-4fc9-8a23-1dbe4cdbb07b": [[-0.6151760000000001, 0.0, -0.440518], [0.6151760000000001, 0.43991, 0.440597]], "2ee03aff-a2b7-4069-ad5c-dc7e5c75461a": [[-1.05, 0.0, -0.225], [1.05, 0.51, 0.225]], "78fd469e-dd0c-40d3-8272-41b4e5468615": [[-0.75531, 0.0, -0.75531], [0.75531, 0.748069, 0.7558410000000001]], "181e3bce-9add-419a-b843-b32114d94915": [[-0.5496070000000001, 0.0, -0.568794], [0.5496070000000001, 0.300329, 0.568794]], "6785fcc1-27e6-4fe7-a609-df015e5bfd05": [[-0.396669, -0.00107239, -0.39846400000000004], [0.39624699999999996, 0.799596, 0.397827]], "0ecff51f-5f8e-4ac7-b28a-d98d19446ff2": [[-0.32393099999999997, -1.0944400000000002e-17, -0.225], [0.32393099999999997, 0.449626, 0.225]], "0fd96a1b-25fc-4ca8-8fda-703a6cb456fc": [[-0.310312, 0.00101901, -0.309834], [0.31006, 0.40730299999999997, 0.312732]], "2719902f-d804-489f-bd0d-f4666cbc922b": [[-0.743536, 0.0, -0.25569400000000003], [0.743536, 1.017274, 0.255723]], "08b50ec7-f8ce-4859-afca-24e840343dad": [[-0.199343, -1.27898e-16, -0.198991], [0.199343, 0.169589, 0.198991]], "563df485-3708-44c6-9415-04623d0713db": [[-0.867491, -4.00131e-05, -0.379619], [0.868279, 0.770312, 0.37961]], "0e2693d3-9009-48eb-ab59-f2b2f239f00f": [[-1.2836400000000001, 0.0, -1.217542], [1.282673, 0.853879, 1.217713]], "a653beec-e5d5-4390-8463-bf3940006bd3": [[-0.30329999999999996, 0.0, -0.32801], [0.303331, 0.795921, 0.32840600000000003]], "137b2dda-9f69-4e1a-a576-ea00e62ed75e": [[-1.17381, -4.13768e-09, -1.28237], [1.17645, 1.14745, 1.28182]], "79b95088-5c33-493c-8bdf-63d5666da947": [[-1.0248, -1.42755e-17, -0.251723], [1.0248, 2.4, 0.251723]], "e37c33f8-068c-47ea-9df3-fe257c8a93db": [[-1.22004, 1.06812e-07, -1.12982], [1.21969, 1.19601, 1.1303400000000001]], "645a27ec-5dc3-46d6-bbe6-be6d8cd53c85": [[-0.430415, -0.000714973, -0.8655719999999999], [0.430415, 0.768352, 0.865655]], "219bf1c4-c574-3082-9628-55a6c6ba81e0": [[-0.235784, -0.00086, -0.307761], [0.232788, 0.992372, 0.305241]], "dba3e1bf-4e94-4497-bafe-d27fe3563d59": [[-0.097193, 0.0, -0.097193], [0.097193, 1.675304, 0.097193]], "3e834a1d-5eb1-4355-97a2-e4ed18588c32": [[-0.76789, -1.7818199999999998e-05, -0.21717199999999998], [0.76789, 0.8506440000000001, 0.21717199999999998]], "17bf58ed-fe25-43a4-aac0-b0600e07625a": [[-0.472885, -6.40416e-15, -0.31657599999999997], [0.472885, 1.8126900000000001, 0.31657599999999997]], "553d4b43-1517-346b-9ba0-14efa2c68d14": [[-0.550726, 0.0, -0.54938], [0.550726, 0.5304, 0.54938]], "3feda997-0e98-427f-8f0e-897b36dabdab": [[-1.214002, 0.0, -1.143936], [1.2109940000000001, 1.1384569999999998, 1.142799]], "f2904fa2-ff2f-4b50-a136-c9a5dd8496c6": [[-0.5997, 0.0, -0.471995], [0.5997, 0.34840200000000004, 0.471995]], "dc910936-b670-4b12-9c25-213833940f11": [[-0.3, 0.0, -0.3], [0.3, 0.5270859999999999, 0.3]], "46daaca5-c7fa-4db3-a2cc-74e891e98030": [[-0.389221, -1.50708e-09, -0.378661], [0.390276, 0.849233, 0.37891800000000003]], "20315f14-fb14-4ad3-90d3-1911c0a98510": [[-0.765398, 0.0, -0.783468], [0.7654430000000001, 0.433977, 0.783468]], "6a3affc1-5644-4dc4-b697-a4222603f26f": [[-0.35466299999999995, 0.0, -0.362827], [0.35466299999999995, 0.747269, 0.362645]], "35582533-0bd2-4ade-998b-0fa0a73587b4": [[-0.337997, 0.0, -0.301239], [0.337997, 0.919008, 0.301239]], "65d15d52-b6f5-4ecc-bdd7-bd044ae3a95e": [[-1.1022100000000001, 1.80021e-17, -0.303997], [1.1022100000000001, 2.66367, 0.303997]], "9bebce2e-7159-4bf2-8b42-05e4b68cd2d6": [[-0.263, 3.11838e-08, -0.258], [0.263, 0.499146, 0.258]], "22aa4051-ddfa-4bd5-a093-e11b5831faf8": [[-0.34938600000000003, 0.0, -0.40509700000000004], [0.34902500000000003, 0.718877, 0.404914]], "a6b7b3b9-c061-4c3a-be8f-e380b93694ca": [[-0.7153019999999999, 0.0, -0.258496], [0.7153019999999999, 0.705719, 0.258496]], "68538729-95b8-31e9-8888-9179cd2a87ef": [[-0.19915500000000003, -0.00075, -0.19915500000000003], [0.19915500000000003, 0.680373, 0.19915500000000003]], "82574b5b-0ef6-3f42-b0d2-b0b135f78ed1": [[-0.22406500000000001, 0.00025299999999999997, -0.295455], [0.23769200000000001, 1.098225, 0.190296]], "3b9774a3-8dcc-46de-b58d-50d2baffde5f": [[-1.75, 1.42924e-23, -0.15002100000000002], [1.75, 2.6269, 0.15]], "5d66657b-1cf5-4607-8c8c-32330701b595": [[-1.00821, -6.68333e-07, -0.32945099999999994], [1.00821, 0.781661, 0.32981299999999997]], "49d42ed1-8516-4228-9c3b-1331fac12715": [[-0.258699, 0.0, -0.25918199999999997], [0.258699, 0.541276, 0.25918199999999997]], "0efe2b4e-2b9e-4890-b8f5-12351aebbd85": [[-1.05411, -1.38215e-17, -0.302945], [1.05411, 2.30091, 0.302945]], "650fec0d-8577-4afd-b42a-47bf8132e31c": [[-0.901237, -0.000797223, -0.492173], [0.9012359999999999, 0.944131, 0.491633]], "56a135e4-e4c5-429e-912e-ee4542a24450": [[-1.1105800000000001, 0.000213, -0.537487], [1.1104559999999999, 0.7083379999999999, 0.537599]], "936f6bd4-d0bf-4aef-b724-7232665437fa": [[-0.7603690000000001, -2.67696e-09, -0.0882485], [0.7603690000000001, 1.18478, 0.0904597]], "4808dc50-1f16-4a33-91e8-a93c1c9f2881": [[-0.533112, 4.7999999999999994e-05, -0.480126], [0.533115, 0.39187600000000006, 0.480026]], "76d0a744-becf-4852-83c8-25d793d438c5": [[-0.479771, 0.0, -0.482717], [0.479771, 0.981721, 0.482467]], "5d7599de-9aa0-45f8-aea1-2d492aac6bcb": [[-0.46821199999999996, 1.52588e-08, -0.128688], [0.46821199999999996, 1.49828, 0.128688]], "ee70905c-37a8-4661-93cc-92f23e9453a5": [[-0.29, -7.472699999999999e-08, -0.221222], [0.29, 0.660256, 0.22100799999999998]], "4a067383-06a2-48aa-89cc-4bcde8e93a9e": [[-0.59862, 0.0, -0.5247890000000001], [0.59862, 0.42255000000000004, 0.5247890000000001]], "7ebd0efc-86b4-4466-b6c3-a1284df00a2f": [[-1.4172, -0.0026630900000000003, -0.522014], [1.4172200000000001, 0.933275, 0.5218820000000001]], "24ed8c8d-11e0-48ba-afe6-d0619025772c": [[-0.760045, -0.0019993, -0.760045], [0.761524, 0.757101, 0.761507]], "1f1d040c-a1d7-41d2-ae34-0b236d374997": [[-0.614949, 0.0, -0.32730600000000004], [0.614949, 0.449878, 0.32724800000000004]], "2d2782b8-f8ff-41bb-b580-1e4ba93bb841": [[-0.9904080000000001, -1.2993200000000001e-05, -0.3735], [0.99036, 1.1358199999999998, 0.373658]], "c4329aeb-ffad-489b-b3ad-55b317787c77": [[-0.6999850000000001, -0.000135351, -0.214191], [0.69999, 1.13753, 0.214191]], "d32b7720-0288-4da5-bc3c-5412364b36d0": [[-0.9280750000000001, -0.0, -0.170518], [0.9280750000000001, 1.126449, 0.171647]], "c95ec7f0-08ca-4a71-998f-b2fdf0dc329b": [[-0.406076, 0.0, -0.406076], [0.406076, 0.611773, 0.406076]], "d19afa9b-9b7f-4ebe-bbb6-c8217f7de797": [[-0.279951, 1e-06, -0.23707899999999998], [0.24543099999999998, 0.830081, 0.237242]], "e6157ec0-3a08-44c9-bfb4-0fd3d19ca60c": [[-0.27701, -6.3543e-05, -0.256097], [0.276991, 0.7699079999999999, 0.25604099999999996]], "07fdcaa4-2167-4629-a27e-710f4bec5f11": [[-0.598406, 0.0, -1.197136], [0.598406, 0.7896040000000001, 1.197136]], "5407bb09-6234-4026-86f1-da39bc57affe": [[-1.0, 0.0, -0.25160499999999997], [1.0, 1.4, 0.25257999999999997]], "3182c059-d339-4ac0-87f1-bfbccfb3a9ed": [[-0.30589099999999997, -1.4194e-17, -0.24896200000000002], [0.30589099999999997, 0.7054389999999999, 0.248979]], "31d26191-80f6-42ad-b334-cfc1ac9d371c": [[-0.380781, 5.55568e-07, -0.412099], [0.38075499999999995, 0.882937, 0.41292900000000005]], "5d05b0d2-afaa-3e9e-9410-34237bb98eff": [[-1.030381, 0.0, -0.529435], [1.0303820000000001, 0.7086709999999999, 0.529436]], "cbea2557-48ef-476a-8d8f-ba22d41c9bb6": [[-0.206368, -0.000324539, -0.20335599999999998], [0.205941, 0.372652, 0.20304200000000003]], "fad62cfc-96a2-4d10-bb5c-02b29ab5068e": [[-0.610276, -0.000125939, -0.169238], [0.61104, 1.03349, 0.169177]], "2cb959b1-87ff-4b6b-b6fb-ea3a8d1dab36": [[-0.607451, 7.62939e-09, -0.23318999999999998], [0.607451, 0.615, 0.23318999999999998]], "80abf09b-8c3e-4025-8c1e-5e518eb11594": [[-1.1258, 9.973379999999999e-18, -0.234315], [1.1258, 0.50292, 0.234315]], "66ab43b1-1944-49e9-9f46-7ebc80066f39": [[-1.0253700000000001, 0.0, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "e446e818-363d-4bf5-b7dd-7e70bfca0b87": [[-0.42472099999999996, 0.0, -0.42472099999999996], [0.42472099999999996, 0.874477, 0.42472099999999996]], "453a46b9-48f5-41ff-9b6c-464abbc84886": [[-1.3722800000000002, -0.000681406, -1.19933], [1.3725399999999999, 1.1746699999999999, 1.19855]], "f25f7759-4878-4e5b-b3fd-83b8f912e28f": [[-0.9526009999999999, 0.0, -0.235442], [0.9526009999999999, 0.426728, 0.235442]], "0b2fe64b-e114-4f82-be7d-136d07e82e6d": [[-0.45366700000000004, 0.0, -0.45366700000000004], [0.45366700000000004, 0.11982699999999999, 0.45366700000000004]], "6d4168f7-f54c-3625-81b9-32f72637ed0d": [[-0.469142, -0.00017600000000000002, -0.451472], [0.469142, 0.992586, 0.451341]], "3d8da11d-054d-4cbf-91a9-812db32b061e": [[-0.862756, 7.000000000000001e-05, -0.20478300000000002], [0.862756, 0.5224340000000001, 0.205585]], "aa56886c-8f6f-42bf-ab86-f2a99e086d89": [[-0.23369299999999998, -0.0, -0.263741], [0.23378900000000002, 0.8519589999999999, 0.264471]], "0f88e643-7fe6-4023-bfbd-bad4415393a4": [[-1.27505, -9.62614e-05, -0.44809], [1.27505, 0.936849, 0.447905]], "5c6d5e5c-b26a-42b7-8050-2041f105c7b7": [[-1.853902, 0.0, -0.807895], [1.854158, 1.033576, 0.8072050000000001]], "8d6f86e0-429b-4137-bfcf-361b610433ee": [[-0.6169749999999999, 0.0, -0.465246], [0.6169749999999999, 0.300923, 0.465246]], "dd17e4d3-7038-41d9-85e4-5742cc82986e": [[-0.824285, 0.0, -0.528899], [0.824285, 0.44, 0.528899]], "65d7e9e1-9278-41af-bd9a-f0e23eb97d79": [[-0.50098, 0.0, -0.175001], [0.50098, 2.390841, 0.175001]], "d9333ede-6d96-4f36-b8e2-9c13c6798645": [[-0.462348, -7.6087e-18, -0.130289], [0.462297, 1.08254, 0.130312]], "0d8ad8d3-d1d5-45b1-a7fc-71c3bc5eaaf1": [[-1.10675, -2.90403e-05, -0.489352], [1.10636, 0.906329, 0.489958]], "6bdb4906-8320-445b-a3cf-c0b35c7c2c96": [[-0.16698899999999997, 0.000341536, -0.16698899999999997], [0.16698899999999997, 0.331072, 0.16698899999999997]], "b315e0cf-2c07-443e-a874-ce3c7095f9b7": [[-0.381182, -3.75688e-06, -0.35519599999999996], [0.3814, 0.73235, 0.355536]], "e1ffad37-d420-4a79-a034-0a8e2ac787cd": [[-0.556226, -1.04986e-17, -0.175197], [0.556226, 0.8493170000000001, 0.175197]], "68ab2927-a20c-4ec0-ad4b-ef2e2b357b47": [[-0.43778, 0.0, -0.438617], [0.437778, 0.943285, 0.43843699999999997]], "b1aac511-8300-4ce2-9c10-f3225aa3b259": [[-1.11994, -1.22465e-17, -0.2], [1.11994, 0.39975, 0.2]], "52630675-9772-469c-b368-01b96270a6a6": [[-0.267403, 0.0, -0.2783], [0.267403, 0.8798229999999999, 0.278315]], "473ae7f8-58da-4941-a1bf-f79dacfbdde2": [[-1.5944589999999998, 2.9999999999999997e-06, -0.49341], [1.5944589999999998, 0.886413, 0.49341]], "2cc3bbad-581f-420e-bb37-87a6c1954a7b": [[-1.2883600000000002, 0.0, -0.514962], [1.2883600000000002, 0.89759, 0.514962]], "4203fc13-d392-46d0-8196-d8bf21b1fd9a": [[-1.49755, -0.000219974, -1.02908], [1.49636, 0.8547110000000001, 1.02885]], "9188a5fc-0d33-4e95-9c23-598c93f8a514": [[-0.209962, -0.00045302, -0.212957], [0.210065, 0.934932, 0.212768]], "64f9de49-a714-43e5-9e0c-30d9dc4c1189": [[-1.038842, 0.0, -0.451179], [1.038842, 0.9573180000000001, 0.451567]], "12308367-3578-4bc8-8c65-d54688e5e301": [[-1.207655, 1e-06, -0.438424], [1.207655, 0.725015, 0.437813]], "098262d7-13a8-4e32-b4de-2d021a770029": [[-0.498974, 1.5258800000000002e-07, -0.127823], [0.498988, 0.49476, 0.128027]], "43ea5d5b-8896-432b-b71d-2dc2bbd36704": [[-0.45701300000000006, -2.92013e-05, -0.285692], [0.457084, 0.558314, 0.285581]], "3a5ede7d-a24f-4a13-b44e-83914fb4c796": [[-0.277468, 9.05311e-05, -0.274822], [0.27753, 0.268731, 0.275681]], "532dbabc-dbd8-4a60-ae68-5ecbe9cca78f": [[-0.9433410000000001, 6.48006e-17, -1.07313], [0.943081, 1.19681, 1.07585]], "ece1a176-fc8b-450f-96d6-57ed267bde7b": [[-0.369116, 3.8147e-09, -0.37981499999999996], [0.36863100000000004, 0.39620199999999994, 0.379905]], "53f70c7e-f3a8-4a7c-9b23-b697e78fd125": [[-0.599932, -0.000258517, -0.23049299999999998], [0.599932, 0.8450230000000001, 0.23118]], "63db5e82-d12b-4f22-9f4d-cb6ef9da58c2": [[-0.464283, 3.8147e-09, -0.105514], [0.464283, 0.392061, 0.10551500000000001]], "40893a52-bd55-48ba-a4b8-9cb51f43fa1d": [[-1.28697, -0.000634407, -0.7302620000000001], [1.2863300000000002, 0.783275, 0.732093]], "01e2dd49-dbbd-3bc4-84f2-ebeef1447f55": [[-39.5196, 0.0, -39.5196], [39.5196, 109.0105, 39.5196]], "b14fe1f0-f408-47f2-918e-1716703fe03c": [[-0.278282, 5.999999999999999e-06, -0.287385], [0.278282, 0.61501, 0.287252]], "6e8af18c-b56f-4c9c-94e7-bc876f8372d5": [[-0.278886, -3.84224e-05, -0.24320799999999998], [0.278887, 0.8480589999999999, 0.243209]], "6067197c-1eb5-4288-9d8a-848445079944": [[-0.673567, -3.73881e-17, -0.7884260000000001], [0.673567, 0.49054400000000004, 0.7884260000000001]], "1822e73c-3839-40ac-8928-9e4a2f19e9e8": [[-0.775648, -1.7378000000000001e-06, -0.308874], [0.7743829999999999, 1.89846, 0.308942]], "940f50a6-b09d-41eb-9b38-073a64530373": [[-0.300169, -1.35889e-17, -0.228877], [0.300169, 0.462267, 0.228877]], "8369890a-2ea4-4adf-9306-90c1aac6eaca": [[-0.299161, -4.599000000000001e-18, -0.298107], [0.299161, 0.243946, 0.298107]], "2220bef3-61ba-42d6-881e-2f3df67f83a3": [[-1.12986, -0.00015613200000000002, -0.451911], [1.12987, 0.8695959999999999, 0.452434]], "944d689b-db92-447d-98a8-2efb6a44d111": [[-0.30129100000000003, -1.20015e-17, -0.225], [0.30129100000000003, 1.21, 0.225]], "1d92408e-c218-3627-bce8-0a372883a817": [[-0.460608, 0.0008640000000000001, -0.481361], [0.472585, 0.8382970000000001, 0.485239]], "60742bea-912a-4cde-93eb-0d7ddf459fa1": [[-0.508572, 2.6669799999999997e-17, -0.533324], [0.508572, 1.28111, 0.53425]], "87cc9c66-81e8-4a2c-bce2-1f6001d6f7f4": [[-0.605273, 0.0, -0.358187], [0.605273, 0.55924, 0.358187]], "56bed37a-c205-40b0-97c2-ffd5c47b1b6c": [[-0.784514, -4.22864e-09, -1.09982], [0.784513, 1.10944, 1.09982]], "81022e80-4eb9-3b60-b002-d2e54aeba9c9": [[-1.138484, 0.0, -0.508888], [1.138484, 0.677034, 0.510382]], "abaae793-c856-48ee-aa6f-ef7196b622ad": [[-0.450041, 0.0, -0.20224499999999998], [0.450041, 0.8000799999999999, 0.20224499999999998]], "c60d884a-e722-460c-8cde-d1b1f54dae49": [[-0.379878, 0.0, -0.211996], [0.379878, 0.673997, 0.211996]], "3fc6a3f3-2f14-46b3-b06b-ce80ec5c7742": [[-0.204495, 0.0, -0.216678], [0.20455500000000001, 0.833711, 0.216737]], "f943f45c-8818-4bfd-a291-e3bd8b358d9b": [[-0.889383, -8.21565e-18, -0.125168], [0.889383, 1.2873599999999998, 0.125168]], "e16fce0c-4ed7-412b-816b-f5afef2f0922": [[-0.282833, -0.0007613540000000001, -0.282788], [0.282991, 0.6261249999999999, 0.282779]], "10a3296c-fcb7-303f-bec9-1928ff902025": [[-0.9503929999999999, 0.0, -0.465161], [0.9503929999999999, 0.814161, 0.461843]], "22b3c7ae-7661-49e1-91e0-6dd3b1a06fb6": [[-0.381391, 7.3e-05, -0.294112], [0.381391, 0.624593, 0.294107]], "6be90f6d-308c-4f57-abcf-536c0170d658": [[-1.85406, -8.03945e-06, -1.3574199999999998], [1.8537299999999999, 0.853073, 1.3576300000000001]], "f5c8c735-859a-43a7-9c11-00da41d2e73d": [[-1.074447, 0.000168, -0.44339], [1.074447, 0.85345, 0.443352]], "79ee00ce-77da-4fa1-965b-1f10aa38304f": [[-1.49037, -1.09603e-09, -0.536652], [1.49181, 0.867654, 0.536162]], "58808826-073f-4cc6-9060-920f50b9a403": [[-0.565164, 0.0, -0.348153], [0.56508, 0.422132, 0.348097]], "2f67162f-e536-43aa-a81d-3b764b653def": [[-0.535572, -0.000930732, -0.496572], [0.535317, 0.809701, 0.49656500000000003]], "1cb20780-66d7-442a-a013-4e5e2f99caad": [[-0.47793599999999997, 0.000234072, -0.38833599999999996], [0.47794899999999996, 1.23401, 0.388278]], "ea30661d-7921-40b0-965c-3a0715440ab9": [[-0.3, 0.0, -0.3], [0.3, 0.55, 0.3]], "754a45df-a7d6-4cf3-89f4-750841b3868c": [[-0.298936, 0.0, -0.33663], [0.298936, 1.048978, 0.336357]], "c1a6195f-e42e-45bd-8fd1-57e451e36fe1": [[-1.171034, 9.1e-05, -0.44016800000000006], [1.170996, 0.905195, 0.440584]], "61e7a2b9-98a2-3502-834c-38450d198544": [[-0.4635, -0.0002, -0.47909999999999997], [0.4635, 1.0756999999999999, 0.47909999999999997]], "bcb9884d-d032-40df-b2e1-c2bb467a02e8": [[-1.364329, 0.0, -1.048152], [1.364329, 0.94461, 1.047851]], "3f8ecaf2-c627-4f59-a521-24923db172c9": [[-0.385036, 0.0, -0.385037], [0.385036, 0.591974, 0.385037]], "79b5982a-1302-4080-9cab-306c8e3e337e": [[-0.956845, 0.0, -0.253847], [0.957095, 0.6290250000000001, 0.253847]], "d3902c3d-06e1-46d4-8f86-d9475dedf1c9": [[-0.240166, 2.2750300000000002e-07, -0.252006], [0.240166, 0.797342, 0.25204699999999997]], "08033850-ac78-475d-a588-54a9ae21d711": [[-0.6285799999999999, 0.0, -0.278], [0.628514, 2.017937, 0.277867]], "11f4aa43-c1e0-47e9-b69b-55f052d1a317": [[-0.7426309999999999, -1.5153900000000002e-07, -0.28083600000000003], [0.741699, 2.00806, 0.28083600000000003]], "b684d542-d55c-4751-bc9d-9c3a971cdd5c": [[-0.600445, -9.108310000000001e-18, -0.15125], [0.600445, 2.0, 0.151254]], "5cbc3982-865e-4d61-97f1-564c0497ac43": [[-0.28432999999999997, 0.0, -0.19707999999999998], [0.28432999999999997, 0.350906, 0.19707999999999998]], "10339a05-cf66-4693-8114-b8610b3b8f32": [[-0.16521, 1.52588e-08, -0.16415], [0.164148, 0.986098, 0.16415]], "4dd99418-d4cb-4b1a-affe-d022495cd4b1": [[-0.698254, 1.7e-05, -0.381633], [0.698254, 0.608097, 0.381633]], "852cb1eb-6ddc-4f8a-b254-46204f9ea685": [[-0.440799, -0.000192692, -0.432057], [0.44088099999999997, 0.832581, 0.431996]], "4048fcf9-1937-4a23-af7d-6982626ec2f1": [[-0.922939, 0.000182852, -1.23771], [0.922556, 1.23891, 1.23562]], "5c2b4502-8d34-47cc-ac50-22589b794c7e": [[-0.862509, -2.9786e-14, -0.244285], [0.862509, 1.90256, 0.244285]], "0b745b71-47a0-43b3-8f1d-c7310031c965": [[-0.499967, 8e-06, -1.004926], [0.499967, 1.040297, 1.0054720000000001]], "6f8434c2-757d-4bef-9e1a-3f2c05e5dbde": [[-0.635605, -4.77589e-08, -0.27315], [0.635605, 2.03, 0.27315]], "4aa3f413-6a35-4866-8094-9757eeaafc66": [[-1.03389, 1.1212800000000001e-07, -0.25194700000000003], [1.03389, 0.555003, 0.25194500000000003]], "055f37b8-af39-4baa-8c31-ea11a449be94": [[-1.10761, 2.95461e-17, -0.523], [1.10761, 0.75579, 0.523]], "12da781d-21d7-4f02-964b-23d5b47497e2": [[-0.9669570000000001, 0.0, -1.053941], [0.9669570000000001, 1.149781, 1.053365]], "9fe45e19-303b-4d1b-992d-d26451eefee2": [[-0.49359200000000003, 0.000960908, -0.492816], [0.493585, 0.9085639999999999, 0.493562]], "81f43633-75e5-3daf-97c8-36519a17237f": [[-1.421343, 0.0, -0.431031], [1.421338, 0.768228, 0.431031]], "ecde40bf-2179-4bc9-8a58-1a5d666f0944": [[-2.17002, -0.0008489530000000001, -0.266744], [2.17002, 2.5023400000000002, 0.26804]], "06ccac96-3ca8-4bd0-aee2-64f1b495f485": [[-1.4731999999999998, -2.44475e-07, -1.69696], [1.47565, 1.7959200000000002, 1.6996700000000002]], "1e877dfb-d2c9-4cee-81fa-9fec903be9a0": [[-0.404736, 9.900000000000001e-05, -0.462668], [0.40395400000000004, 1.114593, 0.462668]], "0b37f8ab-97fc-4fee-8303-18445e8b1825": [[-0.974782, 0.000142, -0.44426299999999996], [0.9747870000000001, 0.8005140000000001, 0.444223]], "e4523470-d2fc-4e14-9e94-413100f9a059": [[-1.087391, 0.0, -0.43463500000000005], [1.088182, 0.9290470000000001, 0.43463500000000005]], "963bdd73-7b4f-413b-a914-c9289955fc0e": [[-0.292809, 6.3e-05, -0.27872], [0.292669, 0.8825020000000001, 0.27871]], "55215e42-70db-4b34-a41d-fe813fb648cd": [[-0.26881900000000003, 7.79501e-06, -0.24569500000000002], [0.267531, 0.26416, 0.245565]], "51ef1baf-47f2-4be4-9186-fffff7d5f2a9": [[-0.356994, -8.58975e-18, -0.16037800000000002], [0.356994, 1.93717, 0.16037800000000002]], "e575394e-287b-4d1a-b631-75b0a7f7c2a2": [[-0.35164, -0.000754391, -0.35172600000000004], [0.351648, 0.9102419999999999, 0.351695]], "eb8adc45-62a2-46ae-b880-bc79208f4b5c": [[-0.0749964, -9.9982e-06, -0.0749942], [0.0749958, 0.908443, 0.074993]], "5f75f67e-b806-48c8-b324-27703dbb013e": [[-1.0, -1.47985e-05, -0.45], [1.0, 0.74, 0.45]], "c0400f98-e68c-47f2-84ee-c760323486ec": [[-1.809895, 0.00020299999999999997, -0.761411], [1.8098679999999998, 0.843274, 0.761099]], "20f9153c-a7ab-4d56-a8ab-b39daaa0ba7e": [[-0.761924, -0.00035994, -0.312404], [0.7622190000000001, 0.6797669999999999, 0.312497]], "153d3ca2-02ed-460a-bc48-c5a5f472d5c1": [[-0.7826470000000001, 0.0, -1.006502], [0.7826470000000001, 0.899991, 1.006502]], "4f24ec89-511a-43ec-a3a2-bdc5c98f0175": [[-0.38146, -0.000300904, -0.40647300000000003], [0.381462, 0.7255280000000001, 0.406503]], "5ad2308d-0033-433e-a061-830b28f61ede": [[-0.475092, -5.72205e-09, -0.438696], [0.47516800000000003, 1.14425, 0.438735]], "bd736985-025a-4d60-865f-d8cab731280b": [[-0.399192, 0.0, -0.418061], [0.399192, 1.129741, 0.41793199999999997]], "677a320d-f001-3eda-92f2-0fe761cf630b": [[-1.494, 0.0, -0.428361], [1.493999, 0.8432999999999999, 0.43209200000000003]], "15d9cd02-9336-412e-a078-c5c0cea63527": [[-0.42526899999999995, -0.00023639199999999998, -0.424799], [0.428375, 0.8430610000000001, 0.424529]], "75d8aa6c-9965-41b2-976d-6c4b0ca99c9b": [[-0.8589199999999999, -1.97106e-08, -0.198754], [0.8589199999999999, 0.7831199999999999, 0.198754]], "a1bfa6b1-8575-4da3-a91e-8c45288432ea": [[-1.3303550000000002, 0.000285, -0.448198], [1.3303550000000002, 0.903776, 0.448346]], "734721b2-0891-452d-b982-51d62f9d7714": [[-0.718123, 0.0, -0.18081399999999997], [0.718123, 0.48289000000000004, 0.18081399999999997]], "205c1d74-d507-4a4a-9a58-5a026f2e2931": [[-1.31162, -1.9249400000000002e-17, -0.584633], [1.31162, 1.82031, 0.584633]], "240ab78e-b247-423c-9dea-8e784afc655d": [[-0.7946939999999999, 0.0, -0.495261], [0.7946939999999999, 0.865681, 0.495171]], "44318f57-0e37-49cc-9a8e-1f07abf75fb2": [[-0.423485, -0.000138876, -0.38144], [0.423705, 0.736121, 0.381047]], "0e34359c-ce52-449e-98da-216b3d344dd3": [[-1.0180639999999999, 0.0, -1.001195], [1.0178, 0.967464, 1.001195]], "614ebd4c-9540-4ab0-85ff-0998020ce928": [[-0.772632, -0.000352324, -0.44595999999999997], [0.772578, 0.820961, 0.44595599999999996]], "7a36f8ed-14f7-3c35-b080-30c2721f938a": [[-0.338913, 0.0, -0.486935], [0.338913, 0.769987, 0.486935]], "4d9b7a7e-b102-3458-a112-033dc1cffd7b": [[-0.279249, -0.000516, -0.391426], [0.269337, 1.027497, 0.296929]], "778e16b9-d807-374d-b7bf-d4312a62764d": [[-0.222994, -0.00124, -0.22354600000000002], [0.23027799999999998, 0.816042, 0.26782900000000004]], "55393b72-abf5-4e46-9450-9ec5113137e9": [[-0.37107500000000004, 0.000184, -0.31461500000000003], [0.37099499999999996, 0.220589, 0.314629]], "218cb5eb-18fc-486f-857a-53007f719f67": [[-0.590164, 0.0, -0.590164], [0.590164, 0.420622, 0.590164]], "4dbe1f83-38f7-4370-bd61-cac43a016126": [[-1.16055, -0.000273668, -0.41957500000000003], [1.1603400000000001, 0.9664969999999999, 0.420122]], "89e435d5-f2eb-4554-a6fb-e48a5001d09b": [[-0.203207, -1.01228e-17, -0.209021], [0.203207, 1.76802, 0.209021]], "474c188f-38d0-4a68-afd1-6c62e6645bc1": [[-0.905936, -1.69597e-05, -0.183309], [0.905936, 0.5818220000000001, 0.183309]], "4c0f8629-a4e6-4a9e-b8d6-7012f3ad4c69": [[-1.30566, -0.000600968, -0.452148], [1.30436, 0.859097, 0.45217100000000005]], "1b0269b1-902d-455d-8960-367009395233": [[-0.684606, -1.2605599999999998e-06, -0.250731], [0.6844929999999999, 1.99818, 0.250634]], "7e05411c-6d0c-4067-be31-75e2567527f1": [[-1.04, -2.5325099999999998e-17, -0.56], [1.04, 0.7599800000000001, 0.56]], "447de5e7-d1f0-407c-b740-53371c59e590": [[-0.725434, -9.353389999999999e-18, -0.175], [0.725434, 0.61012, 0.175]], "a04ece76-2aac-46b9-9915-9f822867c630": [[-0.32106900000000005, 2.62487e-08, -0.33779400000000004], [0.32137, 0.785632, 0.337742]], "0f5b963e-e3db-41b9-b753-fbd783b1ce41": [[-0.446749, 0.0, -0.365298], [0.446749, 0.7835599999999999, 0.365298]], "2db5d8c4-5f06-40fa-bce8-7ed3561d3d12": [[-0.297447, -1.5541000000000002e-05, -0.295798], [0.297447, 0.472973, 0.295798]], "2abc7203-96f0-4323-9c68-b329de367474": [[-1.02836, -0.00019892300000000002, -0.37415], [1.0283, 0.7017789999999999, 0.37306399999999995]], "cde8a26c-1ec9-4444-9f89-f0ed2156f6b8": [[-0.790063, -6.83261e-05, -0.19572900000000001], [0.790063, 1.0177500000000002, 0.19566299999999998]], "5fd76c43-8738-4938-9c27-3f7dddd1ac96": [[-0.319604, -1.5933e-17, -0.33529899999999996], [0.319266, 0.817896, 0.334838]], "0f010d09-cd9b-3ec4-be50-93299471651e": [[-0.4635, -0.0002, -0.47909999999999997], [0.4635, 1.0756999999999999, 0.47909999999999997]], "275957cf-dbf6-4d3e-b139-5f14b653bab0": [[-0.373127, 0.0, -0.720373], [0.373127, 0.811291, 0.720487]], "aba17e44-719f-41c9-83a7-dd2ba2980e97": [[-0.316323, -1.56529e-05, -0.351393], [0.316566, 0.6728660000000001, 0.351248]], "fe5ddc95-f552-4b06-af45-2c7a55da94e9": [[-0.7, -2.28093e-17, -0.4], [0.7, 0.47, 0.4]], "5eb72ccf-45cc-4ddc-a12d-83555fe07e41": [[-0.349694, -1.93351e-08, -0.250132], [0.349694, 1.14006, 0.250319]], "733c019e-783f-40dc-a080-b7fca7ed34c5": [[-0.8, -1.3143200000000002e-06, -0.18961099999999997], [0.8, 0.5, 0.189698]], "de91c842-f703-4d14-a095-8a5c3f570fc2": [[-0.304005, -1.1627e-05, -0.303984], [0.303994, 0.131, 0.303985]], "78a99a80-1866-4677-bde8-2234c7025024": [[-0.315299, 0.0, -0.17881699999999998], [0.315299, 1.7055019999999999, 0.17881699999999998]], "860e8155-3bdb-470d-b373-d6df09805a15": [[-0.242935, -1.52588e-08, -0.16623200000000002], [0.242935, 0.590105, 0.16623200000000002]], "8114c27f-5daa-322a-8a49-dee253a81e60": [[-0.800148, -0.0, -0.800145], [0.800143, 0.725984, 0.800145]], "6486b048-5518-4561-a3df-5449b3dae62b": [[-1.15191, -0.0006983720000000001, -0.49004], [1.15194, 0.813607, 0.490164]], "5a50e751-cfb5-4ce1-9900-181cbf8e7898": [[-0.380473, -0.00012090399999999999, -0.366867], [0.380503, 0.980125, 0.36688899999999997]], "215f41e9-f851-40f1-b2a2-d9daacaae1b9": [[-0.299883, 0.0, -0.251751], [0.299883, 0.79637, 0.251751]], "4c1bc225-0287-481b-80b3-c5f30c6d6ed9": [[-0.595565, -0.00011699599999999999, -0.21546099999999999], [0.595565, 1.99959, 0.21540600000000001]], "1518a63b-608c-4cc2-bd2c-37529837db95": [[-0.374461, 0.0, -0.384146], [0.374178, 0.675026, 0.384293]], "84ad8cbf-d1bc-4d19-b96f-d9e89652e3cd": [[-0.39108699999999996, 7.8e-05, -0.414872], [0.39108699999999996, 0.83092, 0.414285]], "734b51e5-c646-492b-abaa-98b11e792333": [[-0.91, 0.0, -0.297232], [0.91, 2.12425, 0.297232]], "77c82341-db5e-4734-8723-40ae9d3dedf9": [[-0.871684, -0.0, -0.301805], [0.871684, 0.516631, 0.30175]], "0d032759-bb24-4a3e-98c2-74e139ae56a9": [[-1.113623, 0.0, -0.476511], [1.1126909999999999, 0.734141, 0.47698999999999997]], "0a544415-f0ff-4f8f-b0f5-7e43312807ec": [[-0.255867, 0.0, -0.255867], [0.255867, 0.21374500000000002, 0.255867]], "93e8be7d-0f5d-423f-be8d-3e54cf1fbaed": [[-0.239048, 3.8375000000000004e-05, -0.122515], [0.23896799999999999, 0.6800839999999999, 0.122515]], "7f4a635f-ac2d-403e-bf22-6b8f8d7e0dbe": [[-1.00333, -6.58534e-17, -1.10727], [1.00318, 1.64093, 1.1069]], "5bb0539e-b47c-436f-b27d-ddcccaef1fbd": [[-0.231757, 0.0, -0.194007], [0.231757, 0.485222, 0.19395900000000002]], "0da850e4-3dac-469c-b3c2-dee8713c3e5b": [[-0.348932, 0.0, -0.438913], [0.34895899999999996, 1.1438679999999999, 0.439273]], "fa43582d-90f7-4b53-8c0f-9d9a8ef6e264": [[-0.309254, 0.0, -0.29914], [0.309254, 0.657671, 0.29914]], "2736e048-b4e5-3ccc-a642-4da04847d417": [[-0.26580200000000004, 0.0, -0.27591899999999997], [0.26580200000000004, 0.8085460000000001, 0.27591899999999997]], "0bc7d4f6-629c-46df-af54-4907fedc12b3": [[-0.726508, 0.0, -0.49967500000000004], [0.726508, 0.320013, 0.49967500000000004]], "b969f128-d6ab-4df4-93c3-ce842b5667ff": [[-0.47222200000000003, -2.83628e-17, -0.46319899999999997], [0.47222200000000003, 0.365933, 0.46319899999999997]], "28e2e0f8-3e31-4322-bb50-08f846fb3731": [[-0.912039, -1.13807e-17, -0.261571], [0.912039, 0.765632, 0.261571]], "299c8af2-92ce-4efb-9788-7f97555643d1": [[-0.399869, -3.5148300000000004e-05, -0.314097], [0.399873, 1.06645, 0.31378]], "8800ce18-adb2-40c0-aead-6e3ac8b42a4b": [[-0.412374, 0.0, -0.365784], [0.412374, 0.701773, 0.365784]], "afba1a29-9cd3-4f7d-8771-1d78883ca7d5": [[-1.2875800000000002, -0.00207365, -0.43284500000000004], [1.2868199999999999, 0.7834340000000001, 0.433676]], "874869e9-91a6-49bf-b2d3-d216948e4639": [[-0.34401499999999996, -1.52588e-08, -0.410327], [0.344287, 0.9732219999999999, 0.41009999999999996]], "35b9551e-9267-4297-b42d-1f8dd1cab089": [[-1.0473350000000001, 0.0, -0.544562], [1.0473350000000001, 0.8921129999999999, 0.5427810000000001]], "333a6624-7745-402f-886c-24661b60a126": [[-0.18779, -9.633540000000001e-18, -0.18779], [0.18779, 0.389725, 0.18779]], "e287c8cc-ba68-4787-972a-008f36f39000": [[-0.9002290000000001, 0.0, -0.20005099999999998], [0.900417, 0.850779, 0.20005099999999998]], "cce1fd70-24b6-479e-b26f-aabc32036838": [[-0.251435, 4.01001e-05, -0.26113], [0.25106100000000003, 0.829503, 0.261096]], "3c3a0879-ed80-4d2a-8d4a-1f6ddc81df1c": [[-1.1229900000000002, -1.7926400000000002e-05, -0.486794], [1.1230200000000001, 0.8590949999999999, 0.48738]], "2217e43f-b40f-40d9-9c08-84ccfb4c2c0a": [[-0.9, 0.0, -0.9], [0.9, 0.730612, 0.9]], "533c5084-bb73-4a6a-aa4d-8ff6b7b009bd": [[-0.453459, 0.0, -0.431244], [0.453496, 0.9366110000000001, 0.431322]], "7732876a-fcd1-3e50-9506-81fc3d367f6f": [[-0.35405200000000003, 0.004204, -0.303792], [0.354058, 0.665725, 0.303757]], "c7a3446b-aa05-45e7-836b-b2dfdd598f94": [[-0.405224, -1.52588e-08, -0.458292], [0.403871, 0.976986, 0.457843]], "5296434e-6680-4e95-8dc8-4aa6db80d6ea": [[-0.41741999999999996, 3.42708e-08, -0.22242699999999999], [0.41741999999999996, 1.32579, 0.22242699999999999]], "fe996e0c-1969-48fa-8bdd-73659d85bd50": [[-2.7743759999999997, 0.0, -0.22839099999999998], [2.7743759999999997, 2.7152800000000004, 0.22839099999999998]], "c1987240-9020-4576-8050-bf4790baeb25": [[-1.099022, 0.0, -0.470794], [1.099022, 0.805691, 0.470794]], "9a967b96-b40c-486a-ba68-e6183fd07575": [[-0.932897, 0.0, -1.067766], [0.933206, 2.260485, 1.06745]], "777433e0-25b6-4270-843e-c929aa5a8797": [[-0.30396, -2.0122400000000002e-05, -0.303997], [0.303819, 0.880238, 0.303908]], "411a9753-038b-43c9-96fe-d580ee23e23c": [[-0.32634, 2e-05, -0.32562800000000003], [0.32634, 0.483472, 0.32553400000000005]], "b37d957b-ec73-42a9-97ee-acf99ba55acd": [[-0.300159, -0.000152811, -0.185933], [0.300159, 1.09003, 0.185933]], "19cc37f8-9549-48b2-b4a2-612eb1053a4d": [[-0.7726430000000001, -1.29289e-17, -0.22039], [0.7726430000000001, 0.736179, 0.22039]], "3664dd1d-7fd1-49b2-b5d4-8b9c613c1fcd": [[-0.21, -4.03274e-06, -0.220345], [0.21, 0.497931, 0.21967199999999998]], "b3bfc536-ab31-4bf5-a556-8542e26c39c7": [[-0.195669, 0.0, -0.18180800000000003], [0.195669, 0.621453, 0.182014]], "c93a298c-e769-446c-bb8e-83ed98320181": [[-1.76071, -1.09813e-17, -0.240001], [1.76071, 1.9155000000000002, 0.24]], "27ddc96d-8bae-4b03-8fc7-619880bc563c": [[-0.290404, 0.0, -0.29075], [0.290404, 0.580399, 0.29075]], "4cb91f59-3349-4336-9cbf-c0222380de18": [[-0.936959, 1.80021e-17, -0.303997], [0.936959, 2.66367, 0.303997]], "810a0a22-4282-3538-a687-470dd3c4fd91": [[-0.223413, 0.000131, -0.242676], [0.190874, 0.8385809999999999, 0.251028]], "6208ede8-20e8-486e-8548-1a8171ce31eb": [[-0.809601, 1.08099e-17, -0.20271799999999998], [0.809601, 0.8531, 0.20271799999999998]], "5eea8819-77a2-46e9-9a98-8c9bfaf6e4c7": [[-0.436865, 8.51957e-18, -0.200047], [0.436865, 2.84246, 0.200047]], "7aa60c7c-a8e7-42e8-8235-7c0bf0572eb4": [[-0.968223, -1.9183e-17, -0.352718], [0.968223, 2.2641, 0.352718]], "25323205-d327-4d38-b703-059a4cee72dc": [[-1.178453, 0.0, -0.460255], [1.178453, 0.9423229999999999, 0.46055399999999996]], "24360a57-5ce1-33fc-aac6-085f5c9619ad": [[-0.42173900000000003, 0.002817, -0.40641], [0.42173900000000003, 0.769456, 0.40641]], "0c082461-ad71-4823-abcd-426acf1d88bc": [[-1.7553999999999998, -6.32353e-17, -1.13975], [1.75529, 0.8343170000000001, 1.14]], "32c85da7-b64c-4fb7-b890-d3f94268e16c": [[-0.251, 1.1920899999999999e-10, -0.251], [0.251, 0.1321, 0.251]], "7540d720-2d60-4ad1-a0f8-69b006f2e9e8": [[-0.313935, 1.02698e-07, -0.315187], [0.313935, 0.8336239999999999, 0.315187]], "8d1d5369-b537-4585-ab85-55d77804a5a2": [[-0.12191, 0.0, -0.12191], [0.12205, 1.211215, 0.12205]], "77786f4d-dfba-4523-9572-eb8cd01ce9b9": [[-1.28446, -0.000295383, -0.486588], [1.2836500000000002, 0.7839079999999999, 0.486653]], "d10e01de-1a0c-4ab9-977b-6a551fdcb78b": [[-0.24878699999999998, 0.0, -0.24878699999999998], [0.24878699999999998, 0.929405, 0.24878699999999998]], "3f49fec0-eafb-3470-972a-400468a42ed7": [[-0.213279, 0.0, -0.265569], [0.213279, 1.173004, 0.254]], "eb1589a6-9137-4c9b-bc13-6d4db395bec2": [[-1.05056, -2.9690600000000004e-17, -0.49], [1.05053, 0.739997, 0.49]], "5cdc256c-2cd5-446d-8214-3cc5a014ce03": [[-1.3559, -0.000941912, -0.461652], [1.35652, 0.845245, 0.463083]], "663dcac3-9c51-4108-ba87-673e54f44637": [[-1.13044, 9.89523e-18, -0.19067499999999998], [1.13044, 1.22471, 0.19081900000000002]], "3a62779a-2c7e-402b-a097-8d379a23adaf": [[-0.397509, -0.0007865410000000001, -0.430606], [0.39748300000000003, 0.690851, 0.43025399999999997]], "ca5bf760-7a4a-4452-a69c-21a2f48bdc81": [[-0.186203, 0.0, -0.17197500000000002], [0.186343, 0.516646, 0.17211500000000002]], "1bac3fe5-bd4c-415f-8944-e43b8ddfd219": [[-1.2478, -1.52289e-17, -0.495901], [1.2478, 0.6782640000000001, 0.495901]], "572e6ad5-062a-4044-be27-aaf5956e16bd": [[-1.0829600000000001, -8.345740000000001e-05, -1.19505], [1.0829600000000001, 1.40492, 1.19407]], "7b0a184b-7cc9-459d-800b-37c270bfd62d": [[-0.366926, -0.00046932, -0.251755], [0.366926, 0.846049, 0.251755]], "36ddb62a-cab7-40cd-8299-253129271d07": [[-0.29742999999999997, -3.19166e-05, -0.29760200000000003], [0.296899, 0.06413, 0.297668]], "2c250bde-e75c-3738-b84f-d5f06337a04f": [[-44.0602, 0.0, -45.337], [44.1304, 77.7375, 50.1089]], "bdce4e90-651c-4f9e-9ce8-2851b5d904f7": [[-0.06854160000000001, -5.49612e-06, -0.0688075], [0.0688216, 1.01024, 0.06882049999999999]], "eb603ea3-2ff2-49e4-ac13-62ec51df98a6": [[-0.21055700000000002, 0.0, -0.21055700000000002], [0.21055700000000002, 1.340413, 0.21055700000000002]], "2c3d633b-547f-34a9-b5a9-dda475e1cb00": [[-0.39953000000000005, 0.0, -0.208845], [0.39953000000000005, 1.830661, 0.208845]], "ebcb383f-0a48-4714-9dac-b39e05a6a903": [[-0.191833, 0.0, -0.191833], [0.191833, 0.5217499999999999, 0.192]], "605eeaba-408d-4040-a1a9-e94b438592f3": [[-1.63836, 1.80021e-17, -0.303997], [1.63836, 2.66367, 0.303997]], "a0f9ef23-e4ef-43bd-be1c-6589f3770210": [[-0.43765, 2.49065e-05, -0.418408], [0.43788, 0.884744, 0.41804]], "5461a290-6357-41fc-96a6-a7f4c31cea83": [[-0.6016239999999999, 0.000789, -0.353281], [0.601888, 0.5255380000000001, 0.353321]], "4b064dbd-3cb5-3f5a-a32d-15e0fb5adc4f": [[-0.33578800000000003, -9.7e-05, -0.367976], [0.33578800000000003, 0.7411669999999999, 0.367494]], "a660ccb3-645b-4f12-843c-55a221a88433": [[-0.588391, 0.000265, -0.195501], [0.588126, 0.7903709999999999, 0.19531300000000001]], "c743b38f-6719-494d-a6ed-c078ba11845d": [[-0.41357999999999995, -4.673e-08, -0.39029200000000003], [0.413551, 0.6615219999999999, 0.39039999999999997]], "4efeef4a-24a8-406e-a81f-e3b4557df07c": [[-0.227755, -1.51974e-05, -0.272878], [0.227993, 0.758026, 0.272887]], "6c4bcbcf-da1e-4d66-8cef-3d3941a55f56": [[-1.1, -1.03281e-17, -0.23133099999999998], [1.1, 2.51533, 0.215639]], "478e021b-a2a5-4051-85b5-c2f6c8bfc677": [[-0.356736, 9.857820000000001e-08, -0.610213], [0.35694200000000004, 0.790688, 0.610467]], "bb14e327-3e81-413c-a6f0-dc0e27319436": [[-1.24811, -0.00203218, -0.475302], [1.2481, 1.00306, 0.47421399999999997]], "42aa16a7-4d7f-43c0-a163-825e10197c1c": [[-0.758014, -0.0014078699999999999, -0.31138], [0.758014, 2.20149, 0.31133500000000003]], "4d5ff861-d5ce-4f10-90c2-c064b1845199": [[-0.275295, -3.6872900000000004e-05, -0.202941], [0.277576, 0.466849, 0.202941]], "8d2d36b5-5ac0-4822-b4d4-43f172341359": [[-0.22859300000000002, -0.000430158, -0.229237], [0.22883900000000001, 0.45014400000000004, 0.22942099999999999]], "6a4defbf-b627-4c5a-a73b-c03cf6f28adc": [[-0.365121, 0.0, -0.372988], [0.365913, 0.8466459999999999, 0.372937]], "10afccb9-a865-4e26-910b-e47d647ee823": [[-0.38675800000000005, -1.33671e-17, -0.269782], [0.38675800000000005, 0.595878, 0.269677]], "0327502e-993e-42f4-a9d3-85593c561ae7": [[-0.305, -1.05185e-17, -0.26322], [0.305, 0.625, 0.263223]], "097dcce8-78a6-4dc8-90c9-ef8395e75ec1": [[-0.98236, 1.85661e-07, -1.10841], [0.982725, 1.7400200000000001, 1.1061]], "eeec8ccc-2909-407b-bd92-7e6c560baaff": [[-0.281177, -4.84454e-06, -0.216801], [0.281177, 0.510251, 0.216801]], "0a90b536-0604-4488-be8e-61f4d38014c5": [[-0.6681529999999999, 1.08193e-06, -0.49585999999999997], [0.668137, 0.45177700000000004, 0.49585999999999997]], "ad4fabfb-d26e-447d-8088-7ae71ae6552e": [[-0.332789, 0.0, -0.246946], [0.332789, 0.632653, 0.246946]], "50e0460a-4b18-42b5-8eb9-e58953177b61": [[-1.51007, -0.00017971899999999998, -0.510113], [1.51008, 0.805154, 0.511537]], "69fdce7d-9c39-314e-b3f8-7c2786482be5": [[-0.97419, 1.1999999999999999e-05, -0.443566], [0.979603, 0.8503189999999999, 0.49676299999999995]], "bd68e830-18a3-4b11-bab5-0065a5531d83": [[-0.38, -3.23567e-06, -0.182], [0.38, 0.612, 0.182039]], "b50f317e-90f0-4c62-81fb-d41f426b94e5": [[-1.4184299999999999, -2.62358e-17, -0.518433], [1.4184299999999999, 0.7278570000000001, 0.518433]], "4d1ea991-1d26-40f3-bf8e-f813bbf2fed2": [[-0.28293399999999996, -1.2482600000000002e-17, -0.263674], [0.280408, 1.9694900000000002, 0.26114899999999996]], "0e8540a3-85cc-4717-9d64-a4069e67a76d": [[-1.04769, 2.77484e-06, -1.2011], [1.04769, 1.19374, 1.2011]], "5017c427-aea3-4865-ada2-aea099dd0fb7": [[-0.959477, -1.4217599999999999e-09, -0.24956299999999998], [0.959476, 1.27904, 0.24956299999999998]], "9c16c6ec-f124-4c8d-a3c3-694b1b8a2244": [[-1.6, -1.12164e-17, -0.25698699999999997], [1.6, 0.46, 0.25698699999999997]], "5e645c37-6d4d-4790-9f59-dc0f2ffebb98": [[-0.6361760000000001, -0.0, -0.470935], [0.6361760000000001, 0.266038, 0.470935]], "87fb9f00-c2f8-4d16-8f75-ad56e1e3412c": [[-0.635699, 0.0, -0.323403], [0.635699, 0.43212000000000006, 0.323403]], "f4b1c97b-ea2d-4911-8fe4-a8368e426781": [[-0.905123, 0.0, -0.484222], [0.905123, 0.248114, 0.484222]], "a1bcd80e-5fa3-4bf0-b306-b032aec5dafa": [[-0.428744, 0.0, -0.508845], [0.428744, 1.054672, 0.5086849999999999]], "1e61bd48-974c-468d-a78c-88f43095bc39": [[-0.848368, 0.0, -0.21415199999999998], [0.848368, 0.47741900000000004, 0.214105]], "0b0bf50f-da8a-4de0-af9b-1260ea7682c7": [[-0.42225900000000005, -0.00106756, -0.532511], [0.422387, 0.841514, 0.531808]], "55a8be79-e081-41ed-a9b8-2254f8e69ace": [[-0.7271169999999999, -1.42109e-16, -0.17600000000000002], [0.7271169999999999, 0.38471299999999997, 0.17600000000000002]], "36df9d95-c1a4-47e7-8e68-7d1e4b9ea4ca": [[-0.3265, -1.42109e-17, -0.23591499999999999], [0.3265, 0.57853, 0.23591499999999999]], "4dce6ef6-b2dc-44fd-b930-e0fff8dbfe8f": [[-1.36632, -0.0009693359999999999, -0.821593], [1.36689, 0.78842, 0.821577]], "173eb984-a4e8-4907-9353-4ecc1977237f": [[-0.03999, 0.0, -0.03999], [0.03999, 0.777957, 0.03999]], "019688cb-a0fa-4dbd-8a67-e5dde192e8cf": [[-0.250017, 3.13185e-12, -0.20819], [0.250007, 0.628603, 0.20819]], "68bd1ed3-c256-4d0b-9fd9-b46370b41df0": [[-0.767279, -0.00045744199999999996, -0.849727], [0.768189, 1.62613, 0.8490800000000001]], "32693fc0-0411-49da-9a62-81c74251be96": [[-1.27443, -4.73616e-05, -0.46397], [1.27398, 0.862572, 0.46443100000000004]], "733121d8-f413-3a27-8b33-6b2732527389": [[-0.482823, 0.000958, 8e-06], [0.482823, 1.4759579999999999, 0.423071]], "5d133cfc-f99f-4fc0-b5c8-a45a212e1de6": [[-0.298187, 4.0464099999999996e-08, -0.29957], [0.298187, 0.57812, 0.29957]], "4340c3d3-08fc-45bd-8d50-9ab443fa9fe5": [[-0.33662, 0.0, -0.33744], [0.33662, 0.857292, 0.33744]], "62cede8c-b7ef-441c-a04b-9ea21df139c9": [[-1.13609, -5.487930000000001e-07, -0.21202100000000002], [1.13609, 0.609537, 0.21202100000000002]], "193b7a5f-6c0d-4605-afda-19bcfb341ece": [[-0.937633, 0.0, -1.157616], [0.937923, 1.254732, 1.153075]], "6dd08dda-261f-4b00-be86-363d926a0aa2": [[-0.335221, 1.53195e-17, -0.318851], [0.335863, 0.618517, 0.318802]], "3d52bbd4-b771-41aa-8b06-407b40c35479": [[-0.400445, 0.0, -0.20045400000000002], [0.400445, 0.8601829999999999, 0.20045400000000002]], "653efc24-a5c5-4f94-86d9-1256dcf4bc28": [[-1.051445, 0.0, -0.434471], [1.051445, 0.7932389999999999, 0.43418799999999996]], "2ca4791e-bc7c-46db-936e-8a20a48234d9": [[-0.377166, 3.3e-05, -0.410535], [0.377342, 1.263867, 0.410543]], "fab1da51-e341-41d5-9f7c-453a80e9daa4": [[-0.485492, 0.0, -0.485492], [0.485492, 0.744957, 0.485492]], "70e6bdde-3c7e-4561-b775-c0fdf72d837d": [[-0.390447, -0.000819654, -0.49750700000000003], [0.38995399999999997, 0.673957, 0.49748800000000004]], "0ec74252-7b40-4da1-873b-ce6d11db99de": [[-0.347364, -0.427266, -0.34915999999999997], [0.347404, 0.427286, 0.349088]], "68e45537-a212-4fe7-b43d-109d43437eda": [[-1.1123, -2.04537e-17, -0.46709], [1.1123, 0.777722, 0.467303]], "57f418d5-60db-43a0-8c50-dd9ad661f322": [[-0.705475, 2.08808e-08, -0.570228], [0.705564, 1.2411, 0.569647]], "58d54c95-c306-4d51-ab1d-90edad0644a4": [[-1.275411, -0.0, -0.5001530000000001], [1.2764119999999999, 0.7699389999999999, 0.500124]], "ca52f083-d5d8-435b-8cc9-c1ebc84bc3bf": [[-0.281263, 6.7e-05, -0.243288], [0.281262, 0.73887, 0.243356]], "40db4732-2f69-3b1a-ab17-63cb5fd2f099": [[-43.2473, 0.0, -38.2403], [43.2473, 77.6515, 37.9947]], "1d4497dc-d858-4ef9-a807-3fa7b10a23b7": [[-0.885204, 1.62483e-09, -0.22052600000000003], [0.885205, 0.81657, 0.220565]], "fedb10c6-a980-47f8-96cd-d6fbb53013a2": [[-0.48345, 0.0, -0.121359], [0.48343800000000003, 1.13853, 0.12001300000000001]], "5e2799b7-1241-42d2-83fc-402f7cfdb871": [[-0.7035809999999999, -1.52588e-08, -1.07649], [0.703595, 1.14944, 1.07649]], "27ab6afe-7800-4a28-afda-77a8492ff9f5": [[-1.298529, 0.0, -0.472353], [1.2994370000000002, 0.952379, 0.472352]], "9525e352-eb5d-4461-9fee-c9a43d3c31ae": [[-0.406858, 1.7786199999999998e-07, -0.46366300000000005], [0.406858, 0.7813720000000001, 0.46366300000000005]], "61631b16-afe9-426b-9351-c753acbf0731": [[-1.7649000000000001, -1.52588e-08, -1.11553], [1.76479, 0.834413, 1.11557]], "36927868-054e-43b8-990d-50d8918cc357": [[-0.460826, -1.96082e-07, -0.460837], [0.460845, 0.305674, 0.460828]], "db02d51d-99d7-4d62-818c-d70cce2e7f31": [[-0.427176, 6.667e-05, -0.449246], [0.427183, 0.964037, 0.449521]], "61825154-0b83-3b9a-acf9-2b4d7e1e9096": [[-0.22908, 0.0, -0.250072], [0.22908, 0.7791119999999999, 0.250072]], "74a0cfdf-797f-454f-8027-971a92c13711": [[-1.5393199999999998, -2.65898e-17, -0.583805], [1.5395500000000002, 0.766974, 0.585901]], "22711cb5-56ae-4dac-82b9-85af32a8d0ea": [[-0.511753, -0.000301668, -0.511754], [0.511753, 0.766227, 0.511754]], "697a1396-5e87-4761-b8b0-844b64c87a4b": [[-0.6960259999999999, -4.43216e-05, -0.51591], [0.696284, 0.430259, 0.516624]], "a331f264-48f8-4304-a9c6-f5426f5aa51b": [[-0.6898779999999999, -4.66959e-06, -0.197999], [0.6898779999999999, 0.879081, 0.197999]], "07056bdb-8cab-347a-b55f-cfafaceec5c3": [[-0.362176, -0.001055, -0.39184800000000003], [0.36012, 0.632238, 0.39370499999999997]], "f2eb0d6e-85da-4511-abf6-68f3079665d3": [[-0.420221, -8.06625e-05, -0.420221], [0.420221, 0.756858, 0.420222]], "066db2c2-ff15-40d2-9da6-651eaa28e31a": [[-0.482566, 0.0, -0.248319], [0.482579, 0.902213, 0.24833200000000002]], "17b67419-54f1-4d14-ad37-b1ada00f4d4c": [[-1.37557, 4.21189e-05, -0.459757], [1.37563, 0.7277410000000001, 0.45780299999999996]], "0e4809e1-40c1-429d-8515-6f96c3327775": [[-1.02072, -2.41305e-10, -0.338157], [1.02072, 2.4, 0.33841099999999996]], "232df588-db56-4982-a81e-ea9de8aa3606": [[-1.1, -9.536740000000001e-10, -0.259578], [1.1, 0.78, 0.259585]], "76283d41-6726-4b7c-85d1-9779741c8539": [[-0.424492, 2.5136300000000002e-18, -0.424398], [0.424583, 0.362897, 0.424398]], "53355018-a7cc-4b39-a674-35c57be57f52": [[-0.537419, 0.0, -0.537747], [0.537419, 0.34757599999999994, 0.537747]], "2072fbfa-9db4-4815-87eb-81db29ba7480": [[-0.5109049999999999, -0.00010768099999999999, -0.207283], [0.510806, 2.0, 0.207224]], "5546cfbc-bf92-453e-b8c7-9bcf9489e458": [[-0.574662, -0.000161672, -0.396218], [0.5748570000000001, 0.47, 0.39618899999999996]], "5acb3f1e-90cb-483f-aeff-80b9cb3c2bea": [[-0.32148899999999997, -1.05626e-17, -0.1775], [0.32148899999999997, 1.19063, 0.1775]], "6e19fa01-fce3-4a62-a8ca-898221e82479": [[-0.656622, -2.7240799999999998e-17, -0.447862], [0.656622, 0.344478, 0.44786299999999996]], "7a2a6bd5-9ed1-48ba-8ec0-acc33d1e9bb5": [[-0.695925, 0.0, -1.161913], [0.695925, 1.153815, 1.1619110000000001]], "7e3b3636-76a6-433f-bddd-07d6355b2d7d": [[-1.1, 1.28577e-08, -0.24], [1.1, 0.890401, 0.24]], "f9bbdb50-7cde-48a2-91b7-0f61668c136c": [[-1.55, -1.96042e-06, -0.15435000000000001], [1.55, 2.50055, 0.153752]], "e581cc9c-21d1-4d16-85ff-782583e8399d": [[-0.6648130000000001, -1.09668e-17, -0.18493500000000002], [0.6648130000000001, 0.7507590000000001, 0.18493500000000002]], "9b15b6dd-779a-44bd-9d88-1bc6f2e31311": [[-0.17052299999999998, -0.00017402399999999997, -0.187049], [0.170527, 0.63852, 0.187025]], "9f409aed-6fb4-4b8d-9abf-fa22fe1a8533": [[-0.249953, -0.000320552, -0.317869], [0.249953, 0.7623779999999999, 0.31827]], "0ee27c3f-b278-3996-a241-daf238b70a5c": [[-135.7949, 0.0, -70.6054], [132.6248, 106.782, 70.0983]], "12b75af7-2b2e-4c36-85fa-2713dbe75f63": [[-1.483384, 0.0, -0.48128], [1.483454, 0.955176, 0.48117]], "64ff9c08-80e7-4d0e-9456-105230bd2de1": [[-0.971593, 0.0, -1.057679], [0.971593, 0.9653870000000001, 1.057679]], "21ebb733-0355-4299-8f7a-52865417b8a3": [[-0.435755, 0.0, -0.42729300000000003], [0.435755, 0.884902, 0.42729300000000003]], "1422901f-c991-47ab-a20a-abcf2bc2b164": [[-0.6787009999999999, -2.93411e-17, -0.484815], [0.6787009999999999, 0.36603600000000003, 0.484815]], "e1c89c2d-3d5e-4a13-ba37-18c01c002e4f": [[-0.32277900000000004, -9.932619999999999e-05, -0.344837], [0.322825, 0.892043, 0.344893]], "4386c8db-55c1-4e04-a713-f11315eabbff": [[-0.561971, -2.0142199999999997e-17, -0.38699], [0.561971, 0.329795, 0.38699]], "a7ec3e75-6508-4d4d-a467-1db6bbf6410a": [[-0.979526, 3.22222e-07, -0.993853], [0.979526, 1.14769, 0.9938420000000001]], "4dfddeed-17ba-4893-a7c3-9e2db2623bb5": [[-0.485694, 0.000817993, -0.48161000000000004], [0.486012, 1.11612, 0.48161000000000004]], "1434ad5c-71fa-4f80-a4aa-23fcef90437d": [[-0.649725, -3.83517e-07, -1.00124], [0.649558, 0.909915, 1.001]], "2316c0a7-6caa-4410-b452-379903e35664": [[-0.6911020000000001, 0.000124, -0.477154], [0.6914960000000001, 0.403379, 0.47785299999999997]], "dcb08327-326a-44d6-b926-f1c5c1af72e9": [[-1.6446399999999999, -8.93756e-18, -0.176159], [1.6449600000000002, 3.5401299999999996, 0.22051300000000001]], "0319e2eb-8b39-40e6-81cf-4b8e4cde6fa7": [[-0.27895600000000004, -4.47527e-08, -0.25702200000000003], [0.27895600000000004, 0.436935, 0.25702200000000003]], "e03bd3e5-8600-4495-80e2-bf2671c5973d": [[-0.426576, -0.000119165, -0.408323], [0.426558, 1.02372, 0.408273]], "4577aaff-6511-40f1-b574-ae8f24e5e832": [[-0.41125999999999996, 0.0, -0.433952], [0.411811, 0.992169, 0.434034]], "409933ac-acd9-4763-804f-247cb96197fe": [[-0.477682, 3.01214e-06, -0.170055], [0.477682, 0.8044169999999999, 0.170055]], "00ac04ff-59b1-40f1-a95a-f1f6e61a6de6": [[-0.9698220000000001, -0.00055282, -1.26167], [0.9695, 1.06724, 1.26319]], "28aac113-f859-4e71-8ea8-63e7c18cdaaa": [[-1.1235, -9.27231e-17, -1.53671], [1.12385, 1.86222, 1.5368199999999999]], "27d2fbe3-91c3-4521-a2bb-3386e7fba42a": [[-0.558771, -0.000287081, -0.255], [0.559024, 0.9400109999999999, 0.25594]], "7b34a8cf-fb97-435a-9094-85f31e00a485": [[-1.0148000000000001, -0.00010378, -0.427586], [1.01478, 0.741708, 0.42778]], "ecae9940-3a4f-40f8-9e10-8e497cded15c": [[-0.259242, -1.49403e-17, -0.259191], [0.259191, 0.512073, 0.259191]], "6647b4a6-af32-4a93-b652-3d5fc4e1e9b8": [[-0.279131, -2.85653e-05, -0.161301], [0.279131, 0.476245, 0.16130299999999997]], "bbe81028-38da-4ca2-b6a9-7afc0a6eb6d1": [[-1.07366, -4.42177e-05, -0.49886600000000003], [1.07365, 0.9242440000000001, 0.499138]], "116fbc36-50e9-468f-8821-c4e3ea4b0bae": [[-0.8496339999999999, -4.79616e-17, -0.226506], [0.8496339999999999, 0.804151, 0.22667400000000001]], "a9bd67e4-1b36-4a61-9e47-8ec18b57ecf7": [[-0.21452000000000002, 0.0, -0.21452000000000002], [0.21452000000000002, 0.48674500000000004, 0.21452000000000002]], "02ec9206-7267-45c2-9fa7-2f738586542f": [[-0.569075, -2.5574999999999998e-17, -0.456196], [0.569181, 0.39685000000000004, 0.45643900000000004]], "bfde1b09-45f4-479f-aaee-9f513cbf4ead": [[-1.989785, 0.001333, -1.41398], [1.990097, 1.028194, 1.413597]], "4f96b0ad-88df-4180-8068-1909732d1dbd": [[-0.28, -2.82658e-07, -0.21327200000000002], [0.28, 0.527739, 0.213389]], "55fc377c-1a14-46f2-988e-4ea2a8763421": [[-0.37957500000000005, -8.35916e-06, -0.700001], [0.378861, 1.0097, 0.699533]], "06076098-db10-3e24-a871-ead183510996": [[-1.1140940000000001, -0.0, -0.450879], [1.107704, 0.8933230000000001, 0.461763]], "0f83ce4d-dec5-4a5e-8b6b-fc00455ab9cd": [[-0.372918, -1.0951100000000001e-05, -0.41037799999999997], [0.37296999999999997, 0.802885, 0.409912]], "827a7bf0-21fe-342d-ba2a-a29246d30d43": [[-72.1241, 0.0, -33.878], [58.4981, 78.5, 39.522]], "55b617c1-72e9-43c6-8781-2f2589be6de3": [[-1.02351, 8.72803e-06, -1.3784299999999998], [1.02325, 1.31408, 1.37744]], "4dad37c9-8260-34bd-90e0-30badeb18b98": [[-0.308608, 0.0, -0.297136], [0.307822, 0.775, 0.300863]], "3c399aec-1df8-49d4-845d-62de44e4951c": [[-0.0499854, -1.7145e-18, -0.049988000000000005], [0.05, 1.19614, 0.05]], "624203b2-cda9-4405-b89f-7877676728a4": [[-0.381871, 0.0, -0.368622], [0.381871, 0.950412, 0.367811]], "c384f3e2-08d2-43e3-935e-3929028b2ff7": [[-0.248876, -0.00043339, -0.249009], [0.249008, 1.2627, 0.24884399999999998]], "69e41e39-4b12-4ac1-a5d2-40c7e633aa9a": [[-0.600017, -4.37132e-08, -0.294989], [0.600017, 1.97, 0.29499]], "4dd15ac0-c18b-43d7-81d4-44ec40d8ea3c": [[-0.261897, -5.934840000000001e-06, -0.261758], [0.261822, 1.96719, 0.261763]], "04ab3ea0-3b99-4b0f-bf4b-dee0ccd0e740": [[-0.232261, 0.0, -0.214932], [0.23244700000000001, 0.76397, 0.215001]], "5c09b659-0639-4f3f-8a0c-ba51839a8bdb": [[-0.470927, -1.6986e-17, -0.46741999999999995], [0.470927, 0.870916, 0.46741999999999995]], "e31f0e4c-5ca4-408b-9e5b-8671a5a17635": [[-0.437134, -2.23122e-17, -0.43748800000000004], [0.43748800000000004, 0.116587, 0.43748800000000004]], "6db0b801-cb63-4490-b937-0d94825fe7e7": [[-0.781443, -5.68684e-17, -1.1158299999999999], [0.7831969999999999, 0.9064679999999999, 1.11498]], "ca401fa0-7da7-4985-9231-60d43a9510f5": [[-0.567531, 0.0, -0.17], [0.567531, 2.8, 0.17]], "7fcb751e-bbf3-4300-9f87-60ae4d83b35b": [[-0.861437, 0.00023199999999999997, -0.26001799999999997], [0.86118, 0.391511, 0.259935]], "2ba16f0f-5837-4f04-9526-227e5aa6fc1b": [[-0.34216500000000005, -0.000552523, -0.34104300000000004], [0.34226500000000004, 0.392509, 0.341756]], "4d82ea89-c529-4b3c-940c-4acb045844de": [[-0.255013, 3.4e-05, -0.24468], [0.255177, 0.919404, 0.24468]], "808eee53-1193-4903-a12b-6cd9ad837af7": [[-0.252425, 0.0, -0.252425], [0.252425, 0.5161370000000001, 0.252425]], "5c376d24-8a36-43c5-966b-f29afcc3c30f": [[-0.310331, -2.97587e-07, -0.228936], [0.310332, 0.6384150000000001, 0.228937]], "6eeef0a6-13c0-49d7-99df-f7d835f9970a": [[-0.21014500000000003, 0.0, -0.223686], [0.21014500000000003, 0.8096429999999999, 0.223686]], "8144364e-1962-3d26-b299-25776a022746": [[-0.753135, 0.0, -0.420091], [0.7531359999999999, 0.857048, 0.420091]], "7a0ff9f9-85e9-4bde-93ca-c2c929233258": [[-0.90962, 0.0, -0.195901], [0.90962, 0.501958, 0.195901]], "354ce96d-d417-4228-9488-ed38d22d3167": [[-1.011165, 0.0, -0.299135], [1.011165, 0.877919, 0.299135]], "133b3428-3227-46e7-8a5e-b58e44edddee": [[-0.65, -7.56323e-06, -0.65], [0.65, 0.752577, 0.65]], "0e874d17-37e5-372a-9be9-5ca5a3b1aa00": [[-0.21119900000000003, -7.5e-05, -0.273482], [0.21119900000000003, 0.782509, 0.224388]], "e6557158-fa0d-49da-a4e1-4be5b4315239": [[-0.653361, -1.6684e-08, -0.45661999999999997], [0.653361, 2.24477, 0.45718200000000003]], "088a3089-2875-459f-b5d4-031f0323e559": [[-1.55488, -2.04025e-17, -0.362851], [1.55488, 2.23153, 0.362851]], "196b2b95-2b39-4fb1-8fd4-14b5a2ab5ff8": [[-1.1, -1.47692e-15, -0.317073], [1.1, 2.4, 0.317122]], "9304828e-e551-4297-a092-4320771ecf80": [[-0.671177, 0.010341, -0.45016300000000004], [0.671715, 1.124759, 0.45016300000000004]], "38fe9241-6c23-4751-9224-390028b99cb6": [[-0.40765, 9.599999999999999e-05, -0.36206099999999997], [0.40765, 0.605317, 0.36186999999999997]], "0eb3a2f2-f3d9-4d99-a22f-44929f0419ee": [[-0.71016, 1.1550599999999999e-08, -0.716976], [0.7101609999999999, 0.74788, 0.716975]], "14a59f46-d88f-4fed-a250-02e26253a889": [[-1.18028, -2.22045e-17, -0.22503299999999998], [1.18028, 0.823877, 0.22503299999999998]], "63d29efc-3f22-49f0-be38-0cf4235ebfb5": [[-0.208824, -0.000422274, -0.210036], [0.208869, 0.707047, 0.20892]], "06d0beb2-9724-4e98-929d-80b23a31775a": [[-0.25005099999999997, 4.9321800000000006e-08, -0.250025], [0.250035, 0.55, 0.250025]], "4b82d587-f110-41ab-a8cf-49e33db9bd37": [[-0.9367570000000001, 0.0, -0.21877], [0.9367570000000001, 0.815721, 0.21877]], "9f6b862e-83ac-493d-9213-fd09c1ef21ae": [[-0.559357, 0.0, -0.488699], [0.559287, 0.32311700000000004, 0.488697]], "78895eac-5333-4dc5-88bc-cd67dc86826f": [[-0.43687, -1.0003200000000001e-17, -0.436008], [0.43687, 0.7768980000000001, 0.436008]], "2e7fa383-83e4-4a05-9b65-3b03d2758346": [[-0.396003, 1e-06, -0.419649], [0.395951, 0.735631, 0.41963500000000004]], "5a475ced-bb47-4c14-aaf9-55f665dd5468": [[-0.332668, 0.0, -0.341524], [0.332769, 0.849175, 0.341177]], "0f01a988-ab48-456d-b60b-ea35beb99dce": [[-1.20732, 4.60641e-08, -0.333498], [1.2071800000000001, 2.59952, 0.333376]], "843c5437-480a-30a5-a059-c643fa9375c7": [[-0.762, -0.000241, -0.4572], [0.762, 0.722767, 0.4572]], "4315bea0-1527-3e13-97f3-7101ee1d7b7c": [[-98.736, 0.0, -36.686], [98.736, 48.0, 36.6861]], "48102934-dbec-4278-b8d6-d4e3f85abc28": [[-0.362693, 0.0, -0.362693], [0.362693, 0.211285, 0.362693]], "5bf8b0e3-5def-4829-86f7-cbc168274dc0": [[-1.30109, -1.58174e-17, -0.316232], [1.3011000000000001, 2.7879899999999997, 0.315908]], "d8997d66-b900-48d6-9503-8629dddfd847": [[-0.512284, -4.4146599999999996e-18, -0.0720969], [0.512284, 0.74152, 0.0720969]], "256e7cf1-9533-371f-b5d8-fef1ce0959bb": [[-105.0, -0.0, -105.0], [105.0, 69.3072, 104.9999]], "3e9258d3-83d8-426f-b9d3-24dc9acedfad": [[-1.06544, 1.52588e-08, -0.295402], [1.06544, 0.880482, 0.295402]], "2b4bb1fc-31bf-4977-a112-a89e905eb075": [[-1.0824, -1.89253e-07, -0.162497], [1.0824, 2.45, 0.162578]], "09667226-fd11-43c5-a32d-1d860da10e36": [[-0.39063499999999995, 3.9e-05, -0.41895699999999997], [0.390348, 1.112597, 0.41915399999999997]], "e2138007-7c5f-41de-b6f2-c1428afc3978": [[-0.440651, -0.000163856, -0.19122599999999998], [0.440945, 0.519597, 0.19043600000000002]], "18d02c7b-f561-43bb-933a-d788af8d90eb": [[-0.370042, 0.0, -0.339794], [0.370042, 0.908504, 0.339771]], "a6e1d36a-03e8-4613-9fd5-26ff77f10bb1": [[-0.260436, 2.5e-05, -0.27093], [0.26047, 0.7968040000000001, 0.270999]], "58194c8d-803b-49a0-8a36-6347afe7bbbc": [[-0.224163, 0.0, -0.224163], [0.224163, 0.580758, 0.224163]], "6d9a20ba-6bca-4875-8581-5ddde17c215f": [[-0.962368, 0.0, -0.399148], [0.962368, 0.681864, 0.39886099999999997]], "490c7957-69d7-4e48-9c98-c253e79fdf0c": [[-0.404376, -8.81634e-05, -0.404482], [0.40442, 0.950057, 0.404707]], "196b04c7-206b-4d72-bc1b-85cfb21420f6": [[-1.01502, -0.000339326, -0.39844], [1.01432, 0.7884019999999999, 0.399099]], "5e7c487b-1d01-3020-86b6-d776a24c87cd": [[-42.4264, 0.0, -42.4264], [42.4264, 75.2907, 42.4264]], "5e88e192-4d7e-4881-9565-7ad8da152462": [[-1.153636, 0.0, -0.787141], [1.153636, 0.926371, 0.787626]], "ee4974b2-4257-4c5e-b162-e02359f4bee2": [[-0.599925, 0.0, -0.19880199999999998], [0.599925, 0.800536, 0.19880199999999998]], "8962bdd6-ad30-4d05-aeef-9878951c6c5e": [[-0.567968, -0.000214064, -0.232517], [0.567967, 1.5371299999999999, 0.232517]], "447bbfc6-8987-48c2-8c0f-19e222f14704": [[-0.298639, 0.0, -0.277504], [0.29879300000000003, 0.729281, 0.277579]], "13536180-222e-4f51-bc29-9e2aae52a6c1": [[-0.316935, 3.65358e-06, -0.333975], [0.316934, 0.673886, 0.334125]], "f19b9d22-37fd-41b8-9b97-4079aaad89d2": [[-0.310185, 0.0, -0.38686], [0.310184, 1.062794, 0.386678]], "2b08bc6a-924c-3e45-bd91-2ba5543fa3d1": [[-0.359279, -0.0, -0.464498], [0.36100499999999996, 0.992798, 0.464498]], "1d41d5c6-5dde-4107-b309-702dd140f95a": [[-1.04, 6.0794600000000004e-09, -0.225], [1.04, 0.40979999999999994, 0.225]], "0d31ae10-6f44-4861-8ab2-cff00ae96159": [[-0.136412, 0.0, -0.136412], [0.136412, 0.35001, 0.136412]], "8c8693e6-6073-48bd-870b-a683fca6013c": [[-0.254668, 0.0, -0.162958], [0.254668, 0.509832, 0.162958]], "4b59eaaa-cca4-4152-b20e-6792257721ff": [[-0.636413, -3.05176e-08, -0.273805], [0.636413, 1.33887, 0.273805]], "56067f71-a8f6-3b86-a473-f3ebc13947a2": [[-167.6584, -0.0, -75.9825], [167.6584, 72.2887, 75.9825]], "650ee22d-6dd8-4505-8e1a-77e7968c94b6": [[-0.5247890000000001, -1.8668099999999998e-07, -0.5247890000000001], [0.5247890000000001, 0.78, 0.524798]], "118a46ee-7a10-4fd5-838a-e4bdb9939a38": [[-0.35, -7.50191e-05, -0.37569], [0.350008, 0.8070780000000001, 0.375205]], "77d0cb2f-157a-4e7b-a3ba-9d1fdaa125d2": [[-0.242206, -0.000208616, -0.163717], [0.242206, 0.505563, 0.163717]], "4f49c405-43d7-4efa-ba57-17f6c1914dc5": [[-0.758513, -1.07298e-05, -0.225], [0.758513, 0.9, 0.225]], "7323940a-859f-42f8-9747-f70107614c63": [[-0.36044600000000004, 0.0, -0.421556], [0.35971899999999996, 1.039858, 0.42076500000000006]], "6ea8f314-d956-4d96-b263-a688ad5d9f74": [[-1.21575, 1.84806e-17, -0.343972], [1.21575, 2.6005700000000003, 0.343862]], "2d8e7040-14d8-4aba-84ee-356a1eae11e8": [[-1.107341, 0.0, -0.486463], [1.107341, 0.9059539999999999, 0.486463]], "2c0792d2-d775-4b6b-b941-731fb4c295db": [[-0.800024, -1.0562499999999999e-17, -0.201574], [0.800024, 0.5, 0.201574]], "461b31ac-0d06-3ee4-b371-9d31a3ab0b39": [[-0.285306, -0.001051, -0.293966], [0.262868, 0.8326749999999999, 0.24853999999999998]], "6cfad637-9ad5-4ddd-971e-a1777bfb4218": [[-0.718597, 4.96282e-08, -0.42864800000000003], [0.7209310000000001, 0.733259, 0.42713999999999996]], "c2d0bceb-84a6-4fcc-9d24-ef7e34a6666d": [[-1.1877760000000002, 0.0, -1.23326], [1.187502, 0.880004, 1.233219]], "134a9a15-b3a3-4bdc-a4d5-bd9eaba14313": [[-1.942271, 0.0, -0.268526], [1.942271, 1.3467390000000001, 0.268526]], "520e9e37-b5bf-4209-8ec7-a3748a4e9f5f": [[-0.920183, -8.838030000000001e-18, -0.19092900000000002], [0.920183, 0.5720000000000001, 0.19092900000000002]], "02dabe94-29fe-4f44-a7b0-8d12b6281806": [[-0.684769, -8.22021e-06, -1.05828], [0.683954, 1.1538899999999999, 1.0578100000000001]], "286aa3ce-1c17-4e86-9feb-08d7828b08ac": [[-0.979735, 1.27138e-17, -0.208369], [0.979735, 0.514528, 0.208369]], "5f18331d-da45-45be-99f1-c079cebf3091": [[-0.16280899999999998, -2.01089e-06, -0.162413], [0.16254000000000002, 0.690898, 0.16238399999999997]], "4a479b61-34aa-489a-9b59-d373d26da7fd": [[-0.539528, 0.0, -0.39675600000000005], [0.539528, 0.483962, 0.39675600000000005]], "b130163c-7c15-4f9b-9294-5c81fd23e968": [[-0.974953, 0.0, -0.426678], [0.974953, 0.8692, 0.426678]], "06791438-cfa8-4e29-95cc-4ff8107e3456": [[-0.540032, 0.0, -0.31924399999999997], [0.540032, 0.174252, 0.31924399999999997]], "1d225c81-9e90-35a6-8358-e9f50115e0f8": [[-27.7827, 0.0, -27.9401], [27.7827, 87.6048, 31.2247]], "9781ed2c-7818-4b52-b522-39a482301131": [[-0.268473, -9.608880000000001e-05, -0.262469], [0.268472, 0.6907840000000001, 0.262474]], "5dcdeebd-5b85-4d01-abb9-dc1b38c7a778": [[-0.345204, -0.000254144, -0.37040100000000004], [0.346226, 0.8092929999999999, 0.370976]], "cc95cd08-d35d-47be-b810-4846d63f7a00": [[-0.212866, -3.4531900000000004e-06, -0.213171], [0.212866, 0.40134099999999995, 0.213171]], "efe46ff1-005c-4e59-be0b-f830180b2105": [[-0.275, -9.460400000000001e-18, -0.275], [0.275, 0.55, 0.275]], "43bffb6b-321c-415a-8522-43525dcb624b": [[-1.32823, -7.68213e-05, -0.549514], [1.32905, 0.9377880000000001, 0.548613]], "01dbfbe9-8648-49bc-9e9c-edb5e631c566": [[-0.230581, 0.0, -0.27703700000000003], [0.230581, 0.786584, 0.276984]], "84e979f3-e295-424a-bff8-4d7ccc938352": [[-1.0239, -2.58557e-05, -0.7746500000000001], [1.02476, 0.93512, 0.7737430000000001]], "fb81032a-9509-49da-a443-c58846129372": [[-0.287902, 0.0, -0.305828], [0.2879, 0.9701179999999999, 0.306503]], "a4bba0cc-7609-4813-a235-1489a681d0e9": [[-0.49878, 0.000533, -0.25296199999999996], [0.49878, 2.336366, 0.25254]], "0ef90eac-08b0-419f-8351-4d88af4315c7": [[-0.25258800000000003, -0.000116902, -0.21436], [0.25285399999999997, 1.04544, 0.214155]], "03e621f2-6970-4256-8264-92e514d7068c": [[-0.791421, 0.0, -1.254158], [0.791421, 0.778922, 1.254158]], "e81dc459-9b32-4753-a0bb-09ef0c64f0f7": [[-1.1965999999999999, -0.0005106630000000001, -0.484004], [1.19641, 0.8350310000000001, 0.484906]], "76a4e349-e557-4568-a4b3-b9af6467b3e3": [[-1.00182, 7.62939e-09, -1.08474], [1.00182, 0.977052, 1.08474]], "6497a976-e87a-47a7-90bb-e69b45620131": [[-1.1663299999999999, -1.2680800000000001e-17, -0.211844], [1.1663299999999999, 2.41609, 0.211832]], "ba810144-5a50-4463-b6ef-b32c8b442107": [[-0.641996, 3.8147e-09, -1.0501800000000001], [0.641345, 1.29257, 1.05007]], "96f13154-07cf-4a08-bef4-da8a0d77953a": [[-1.38246, -0.00069363, -0.509192], [1.3824, 0.922705, 0.510706]], "e476d639-209f-46fe-b90a-1a04eed8409f": [[-0.34638800000000003, -4.44672e-06, -0.363653], [0.345743, 0.893102, 0.36414]], "485d233b-2a47-451a-8a47-67c9d5e4de83": [[-0.5, -9.16495e-05, -0.0579407], [0.5, 0.912945, 0.05794]], "75bf62b4-3a67-44ca-aa9c-72944e3817a0": [[-1.18979, 0.00298322, -1.0334699999999999], [1.18761, 0.941792, 1.03189]], "26afb29f-d893-44dc-b311-53fdf34cf832": [[-1.8427600000000002, -2.58932e-06, -0.27572199999999997], [1.8426099999999999, 2.3721799999999997, 0.276039]], "720e59cc-7787-4b35-a6cd-deb78a73cc99": [[-1.03116, -0.00028861399999999997, -1.06044], [1.0310599999999999, 1.53253, 1.04882]], "2f9faa0f-1e3e-4bdb-a37f-43e669615d8b": [[-0.312495, 0.0, -0.276553], [0.312495, 0.814354, 0.276553]], "1e7b5aee-dd43-4066-b9e7-c00b435c17bf": [[-0.6598510000000001, -1.33055e-17, -0.24393499999999999], [0.6598510000000001, 0.805087, 0.244172]], "b31cc2af-6549-4422-8f96-ec5cd8f0f92c": [[-0.951478, 0.0, -0.34917099999999995], [0.951478, 0.729747, 0.34917099999999995]], "33660f10-c70a-465e-90d5-8cbcb83b10e4": [[-0.285061, -0.00038941000000000003, -0.264148], [0.285051, 0.20069800000000002, 0.26462199999999997]], "2b227d1c-bcfc-4abc-aa9b-ffaf9de2051d": [[-0.353214, -3.39943e-06, -0.266808], [0.353134, 0.449803, 0.266802]], "b46ddea5-fe2a-4699-b0c3-e50683375999": [[-0.28270700000000004, 0.0, -0.282711], [0.2827, 0.576653, 0.282711]], "08c37d84-bbff-4589-8467-98a0e206a177": [[-1.25787, -3.04265e-17, -0.502572], [1.25787, 2.0000299999999998, 0.502566]], "7fd826d0-57f3-4230-8508-d548824c740d": [[-0.247228, 0.0, -0.249331], [0.247228, 0.850351, 0.249331]], "6ddcaa37-e965-473f-aca5-d5ce218e757a": [[-0.275, -1.1902699999999999e-17, -0.20476], [0.275, 0.5, 0.20476]], "7db50e68-5fe8-4b53-b32e-09c1bb9828ff": [[-1.12214, -0.00013296, -0.23372099999999998], [1.1221299999999998, 0.566595, 0.23372099999999998]], "ff88f589-1b08-408c-a61b-5b860dbf512f": [[-2.38027, -6.54137e-18, -0.17951499999999998], [2.38027, 2.8, 0.179224]], "11e193ab-00b3-493d-8008-9f15c1d3d224": [[-1.5294560000000001, 0.00030900000000000003, -0.6254339999999999], [1.5294759999999998, 1.018061, 0.6254959999999999]], "41f50a22-81b4-4274-9ce4-0cb6e2c0841f": [[-0.43637, -0.0008299869999999999, -0.451181], [0.436462, 1.03702, 0.450995]], "ca9d967b-0cec-4090-83e8-295203afe190": [[-0.9, -1.0533400000000001e-17, -0.21797699999999998], [0.9, 0.9, 0.21795799999999999]], "7c5d0663-d9bc-461d-b8d9-eae52ed09b66": [[-0.16204000000000002, 1e-06, -0.157956], [0.162105, 0.934356, 0.158032]], "0bc23ca1-4d02-4b82-9982-89174544f170": [[-0.191025, -0.0, -0.191025], [0.191025, 0.43914499999999995, 0.191025]], "768c0f66-5062-4bbc-9140-d8fbd2346c63": [[-0.263918, 0.0, -0.26743500000000003], [0.263918, 0.806592, 0.26743500000000003]], "0e998b52-072c-41b6-abb0-d8a66a39e004": [[-0.382478, 6.48499e-08, -0.42092399999999996], [0.38249, 0.957114, 0.42048]], "9fd58502-e7f8-4d8d-aa3b-c7eb513648bf": [[-0.32801499999999995, 0.0, -0.373536], [0.32801499999999995, 0.8272799999999999, 0.373536]], "5afbe4c1-3cb0-460f-a7c1-14ca60bb2407": [[-0.734294, 0.0, -0.45055100000000003], [0.734294, 0.347492, 0.45055100000000003]], "2bcec827-4fb0-4861-a75a-17d1ac733de2": [[-0.8726130000000001, 0.0, -0.238934], [0.8726130000000001, 0.563121, 0.238934]], "6217e2ce-c016-4f05-bf2d-430a1108ccd9": [[-1.0253700000000001, 0.0, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "18005d32-1e3f-49b0-88eb-dd3081433cf3": [[-0.7709010000000001, 6.35601e-07, -0.20763500000000001], [0.7709010000000001, 0.941407, 0.20763500000000001]], "5989c278-074e-3d9c-979c-05d6a4bcd3de": [[-222.3956, 0.0, -112.4943], [175.6201, 78.0543, 147.8816]], "7f00ef33-2c75-4e4d-8d47-1a434524dfaf": [[-1.16017, -1.65279e-17, -0.33008000000000004], [1.16017, 2.51756, 0.330095]], "5a8d8098-cf8c-4109-89b8-39e1e937e8ca": [[-0.27654, 0.0, -0.248525], [0.2763, 0.563637, 0.248473]], "0d26f7ab-13d4-4233-9c98-348b70d8fc47": [[-0.257314, 0.0, -0.257314], [0.257314, 0.597969, 0.257314]], "5ae0d9c7-b509-458c-ac58-8a91322deb8b": [[-0.730242, 0.0, -0.254119], [0.730242, 0.750766, 0.254119]], "5f1ff483-ad10-4b63-8c35-75702d6c4b03": [[-0.303, 0.0007890239999999999, -0.30312100000000003], [0.30305, 0.569832, 0.303067]], "f63b0dbf-ce94-4ab5-92fd-a2a1abca4298": [[-1.03009, 0.0, -0.364004], [1.03074, 0.5163880000000001, 0.36396700000000004]], "e688027c-7050-4a9c-a935-c58a5b9b8255": [[-0.4, -2.44317e-17, -0.4], [0.4, 0.394126, 0.4]], "7e60ef1e-7c99-4b1a-8508-e86a54139c5e": [[-0.427639, 5.15806e-07, -0.169554], [0.427639, 0.927977, 0.16982]], "ac605485-baa7-4f0e-a988-8712daf16959": [[-0.752778, 0.0, -0.419472], [0.752778, 0.753489, 0.419472]], "73dfcc36-ab85-45e8-9063-bc1c4bba7aac": [[-0.275, -7.42235e-06, -0.275], [0.275, 0.133159, 0.275]], "678de75a-d639-4f18-832c-c02253eba82f": [[-0.34436100000000003, 4.77657e-06, -0.345166], [0.34436100000000003, 0.39199399999999995, 0.345166]], "793ed9e8-4760-4d4e-ae58-82fd1b8d92ab": [[-0.897636, -0.00013346, -0.33583799999999997], [0.8976900000000001, 0.665333, 0.335132]], "e2fbdb1e-a6ee-4f0e-aa52-bb294b8ac3b0": [[-0.4119, -0.000163055, -0.38778], [0.411765, 1.02728, 0.387397]], "437fb0e4-9eda-4313-9311-37c3c286049b": [[-1.7643799999999998, -1.49447e-17, -0.25593499999999997], [1.7643799999999998, 2.67, 0.25593499999999997]], "ab431a58-4ea3-4e08-9bcb-7de8e8046bec": [[-0.23325600000000002, -8.452920000000001e-07, -0.23348400000000002], [0.23324, 0.527735, 0.23324999999999999]], "1d424467-b46d-415f-b9cb-c5151fba71f1": [[-0.408, -5.1682300000000005e-05, -0.110313], [0.408, 0.87479, 0.11033899999999999]], "48fe0333-9c9a-47d2-938a-b093a29af8d1": [[-0.293914, -4.90873e-05, -0.29290700000000003], [0.293888, 1.08241, 0.292906]], "27b4ca36-2df0-42bd-8f52-b12efe735536": [[-0.383544, -0.000209309, -0.383617], [0.38316, 0.8293269999999999, 0.382477]], "0ed07f15-7663-45aa-bf80-070a15f452e3": [[-1.058784, 0.0, -0.44241100000000005], [1.0591490000000001, 0.91872, 0.442417]], "f08e6d50-fdb1-47db-a243-e05a308a3d92": [[-1.3105799999999999, 0.000581, -1.2484250000000001], [1.3105799999999999, 1.204585, 1.249259]], "4076cbe9-73a1-4f18-a941-21851fdf1962": [[-0.376845, 0.00021760100000000002, -0.38298699999999997], [0.377299, 0.448155, 0.382444]], "4ef5fe00-5ab4-47dd-b25b-ee7bdb0ac349": [[-0.29267, 1.52588e-08, -0.255033], [0.29267, 0.584395, 0.255033]], "6cad26f4-7d64-44e8-96a6-431f00e039ad": [[-0.734376, -7.62939e-09, -0.608217], [0.7343160000000001, 0.811827, 0.608159]], "68a38341-eee4-3b17-ba1e-9096451d74a8": [[-0.963363, 0.001344, -0.354638], [0.962766, 0.8094830000000001, 0.354638]], "2250c149-cae7-47b1-b2f6-061f171b3198": [[-0.34902700000000003, -5.7617199999999994e-05, -0.130665], [0.34902700000000003, 1.9301300000000001, 0.130664]], "7ea9aaf2-ed80-4b8a-a174-a7c6b7685e2d": [[-0.49652700000000005, 1.91396e-17, -0.54701], [0.49665, 1.06521, 0.546728]], "7e6da177-e9cc-4631-a07b-40aef2265b16": [[-0.300134, -1.99368e-06, -0.300134], [0.300134, 0.24178999999999998, 0.300134]], "2dfdc0ca-0f0e-4b0a-8314-aa90d6544e0f": [[-0.905368, -1.52868e-17, -0.250653], [0.9053669999999999, 0.802311, 0.250653]], "83c1a434-7611-4cf7-8009-51728755daff": [[-0.38338900000000004, -0.000411164, -0.359062], [0.38335500000000006, 0.6833710000000001, 0.359225]], "7d4713d9-c632-4b6f-8c3d-cf1c7b16113d": [[-0.421248, 4.22255e-09, -0.42147], [0.422273, 1.32204, 0.42175199999999996]], "f20aad4d-cd84-4f99-8768-5c31baf49465": [[-0.25309899999999996, 0.0, -0.256517], [0.253425, 0.499374, 0.256517]], "dc82b2cf-008c-4055-baec-efff0040f3ae": [[-0.41604399999999997, 0.0, -0.433919], [0.416107, 0.984328, 0.433906]], "d352b145-e384-4090-91e6-f01b13bfb99f": [[-1.04432, 0.0, -0.45671799999999996], [1.044343, 0.7466379999999999, 0.45670900000000003]], "4b8f4ab6-ef15-4338-a6ec-7419db16382f": [[-0.37905, 0.0, -0.393553], [0.37905, 0.787891, 0.39392699999999997]], "2b9c7121-51cb-4cb2-9475-ae93cc049313": [[-0.75, -6.92343e-05, -0.161742], [0.75, 0.405, 0.161743]], "04b815c0-e6a9-431d-8a48-a6e06e97573f": [[-0.21343199999999998, 0.0, -0.213931], [0.21343199999999998, 0.735976, 0.213931]], "fc948a2c-b0e1-427a-992a-9eba96f5903e": [[-0.330439, -4.8573000000000004e-05, -0.33041], [0.33043500000000003, 0.908606, 0.33045]], "0924c010-395e-40b7-8bd7-23d6db5ed269": [[-0.517753, 0.0, -0.880551], [0.517752, 0.514546, 0.8801739999999999]], "de36c11d-4ca3-4819-8940-78de5eb81e6d": [[-0.25437899999999997, 9.8e-05, -0.24909199999999998], [0.255149, 0.435073, 0.249368]], "8a43b8a9-2146-4ca9-958f-4e560173c04e": [[-0.268637, -1.66615e-17, -0.287107], [0.268637, 0.7804340000000001, 0.287194]], "a4632de8-8892-4f16-8100-82edb8b2fb40": [[-0.39132599999999995, -3.05176e-08, -0.275566], [0.39132599999999995, 1.22471, 0.275982]], "418b9718-f234-49e4-aaee-7a78e0ff1ea8": [[-0.750109, 0.0, -0.20000800000000002], [0.750109, 0.450102, 0.200007]], "64961d48-fcc4-4b5c-9c18-642969959afd": [[-0.497854, 3.8147e-09, -0.24135], [0.497854, 1.24611, 0.241351]], "a0a9f9d8-de26-4768-beec-cf31ff07c272": [[-0.29581, 0.000165, -0.38008200000000003], [0.29581, 0.588498, 0.380608]], "4c54b216-fa90-4f66-8a03-ea59ee2be6ae": [[-0.244461, 0.0, -0.225577], [0.244461, 0.950933, 0.225577]], "43e00824-21bd-45c1-a0bc-458da0df8981": [[-1.19602, -0.000520092, -1.21844], [1.196, 1.15088, 1.21858]], "064b6e1b-aa14-4eb0-8021-f3eb81a58c01": [[-0.139411, -1.3113e-09, -0.139411], [0.139388, 1.08342, 0.139411]], "64e15b3e-dc58-40cd-81fb-9c1804efba9d": [[-0.895498, -0.000279831, -0.863901], [0.895498, 0.935104, 0.86387]], "0ae1ba4a-ec57-4f83-a95d-d18d129f9a34": [[-0.21231100000000003, 0.0, -0.211839], [0.212319, 0.42186799999999997, 0.211839]], "3aed8cb0-da5d-4f31-ae74-4b68faaa29be": [[-0.306411, -1.29965e-08, -0.31645], [0.306411, 0.150049, 0.31645]], "7929523d-e948-4525-b56f-c483577208bc": [[-0.7845869999999999, 0.0, -0.159736], [0.7845869999999999, 1.127432, 0.159736]], "7aecc515-4898-4fbd-9694-dd28845ad8aa": [[-0.261476, -6.41251e-06, -0.277378], [0.261477, 1.05157, 0.27752]], "0654977c-00ef-4c03-bc5b-084d98f88612": [[-0.24245899999999998, 5.72205e-09, -0.24245899999999998], [0.24245899999999998, 0.2917, 0.24245899999999998]], "9a8d260e-259e-4aa3-9972-7e987f0a5240": [[-0.316884, -1.51009e-17, -0.264407], [0.316884, 0.522425, 0.264407]], "296d4178-4861-4866-8fe3-fc93a00f55f6": [[-0.169424, 0.0, -0.150842], [0.169424, 1.054161, 0.150842]], "3e71de39-8a26-4124-a3b9-f3a13c7c8512": [[-1.168997, 0.00043799999999999997, -0.554218], [1.1689990000000001, 0.942919, 0.5536249999999999]], "630555c7-4b0e-3718-993b-24796d0fc0cd": [[-0.7002240000000001, -0.003135, -0.250005], [0.7002240000000001, 0.7317319999999999, 0.250005]], "0b35e9ce-25e2-4996-9307-53472bf36c61": [[-0.313577, -0.0, -0.23206600000000002], [0.313577, 0.394596, 0.23206600000000002]], "b91b536c-c861-4412-a452-9c6e18f0a0ea": [[-0.22368200000000002, 0.0, -0.222975], [0.223916, 0.38457299999999994, 0.222975]], "70fb47a9-3173-4d04-9d7d-f79da172a999": [[-0.345379, 1.21085e-07, -0.22063400000000002], [0.345379, 1.11081, 0.22050799999999998]], "eb39a6b3-8db4-455a-9259-549c5d7e8385": [[-0.270233, -0.000343139, -0.08193669999999999], [0.26956800000000003, 0.878258, 0.08216369999999999]], "1ca7efee-b4dc-4337-8868-ce8a0e69143b": [[-0.99175, -7.05195e-18, -0.130936], [0.99175, 2.01654, 0.130936]], "6f2d5042-57cf-4114-a847-0139b8503816": [[-0.85, -1.2055199999999999e-17, -0.24369], [0.85, 0.6222249999999999, 0.24369]], "47c031ec-2445-4f3a-a582-4d0c34c394fc": [[-0.2, 0.0, -0.2], [0.2, 0.47955800000000004, 0.2]], "f5619c81-fc74-4a08-92bb-333c5fd27866": [[-0.570569, 0.0, -0.526228], [0.570569, 0.3505, 0.526228]], "771e1e7a-b1e6-4e9d-a17e-a4bfb9b81e4e": [[-0.08165649999999999, -1.52588e-08, -0.08165649999999999], [0.08165649999999999, 0.8998919999999999, 0.08165649999999999]], "addbadb3-a140-4a0c-91c1-eeffd6ab005b": [[-0.747057, 0.0, -0.265213], [0.747057, 1.270433, 0.265213]], "7130b8ad-e98d-438b-bc75-a81ad004d4bf": [[-1.53654, -7.080839999999999e-05, -0.49170499999999995], [1.53647, 0.8587649999999999, 0.491554]], "340f5f1b-d35d-4f81-8d3b-f315382a9562": [[-0.922402, 0.0, -0.273003], [0.922471, 0.536432, 0.273003]], "805e747c-fec2-44b8-a831-3ae3da3db3d3": [[-0.4523, -1.2512599999999999e-17, -0.232261], [0.4523, 0.7561279999999999, 0.232261]], "fadafd96-5405-47db-bbf2-201fd3a9ccb0": [[-0.502372, -0.00247978, -0.411428], [0.502281, 0.828608, 0.41307000000000005]], "79e1f797-c5a9-48d2-84fa-c8abc35643cf": [[-1.0582470000000002, 0.0, -1.063309], [1.058246, 1.393324, 1.062602]], "3d90ac60-0a44-3fbe-85f0-b445b07ab3f0": [[-0.251647, 0.0, -0.284008], [0.251647, 0.8282219999999999, 0.284008]], "140096c7-ce2a-410b-a8fd-b2f771a540c2": [[-1.2941900000000002, -1.52588e-08, -0.487958], [1.2941900000000002, 0.9202509999999999, 0.487844]], "61934241-50cf-4435-8842-e2a4aadd800f": [[-0.9021339999999999, 0.0, -0.5929249999999999], [0.902357, 0.615085, 0.592703]], "dd8c5173-8275-4139-8022-6509d4c8aae1": [[-1.2065430000000001, 0.0, -0.47468000000000005], [1.2074420000000001, 0.7635609999999999, 0.475514]], "6c6f53d0-c27e-497a-8f82-fac9d2ac4b25": [[-0.44511, -1.52588e-08, -0.261524], [0.44511, 1.86988, 0.261573]], "55993a8a-c095-49d0-8a87-a78dd4d9a4d7": [[-0.283887, -6.237390000000001e-18, -0.284137], [0.283887, 1.04029, 0.284137]], "fe8f3664-81a2-4378-8125-b7ec392315d2": [[-0.37160499999999996, -0.000601994, -0.422643], [0.37160499999999996, 1.1979600000000001, 0.42200299999999996]], "9b69e3d4-bfcc-4e59-bf6b-7e7cc052eac0": [[-0.48152500000000004, 1.52588e-08, -0.150402], [0.48152500000000004, 0.773924, 0.150402]], "42d8ad99-1c6e-45d6-862a-7c7b6792daf3": [[-1.12338, 1.47104e-06, -0.5532520000000001], [1.12318, 0.922515, 0.553641]], "d80a50be-8a31-45b1-a661-649089f050bc": [[-0.268692, 0.0, -0.264419], [0.26857, 0.325672, 0.264419]], "29f29f33-8395-44a1-a3ae-6d5049482b36": [[-0.872207, 3.2e-05, -0.439324], [0.871944, 0.825582, 0.43967100000000003]], "4bf63403-5701-4d34-b5aa-07de863aad0e": [[-0.557219, 0.0, -0.241416], [0.557219, 1.060691, 0.241765]], "cb278d7a-eaf0-47f4-9242-5528fff569b4": [[-0.18556699999999998, -4.53346e-05, -0.18556699999999998], [0.18556699999999998, 0.412288, 0.18556699999999998]], "4d8853b3-95cb-49e8-ab8a-0b670a80a506": [[-1.176583, 0.0, -0.434633], [1.176616, 0.884615, 0.434274]], "78504e19-ad46-4e9e-8d53-a5cc90d8e2f2": [[-0.594738, -5.07829e-17, -0.6447350000000001], [0.5945900000000001, 1.2219, 0.644625]], "0130438f-1e1c-429e-8cad-b3a16eb00c96": [[-1.26459, -0.00016896600000000002, -0.445375], [1.26459, 0.7295090000000001, 0.446236]], "29863aa8-d674-49c2-b3c9-9c4a1d8b01c7": [[-0.527239, -0.000286012, -0.554056], [0.526288, 0.750679, 0.554671]], "7dd86832-5c85-40f4-828f-a457a24ef17b": [[-0.435, 0.0, -0.31], [0.435, 2.45, 0.31]], "862dfaf1-0b67-42d8-a8fc-ef8c978a9195": [[-1.05555, -3.28626e-17, -0.546945], [1.05555, 1.82666, 0.546945]], "5259bd25-a96d-43b6-a04a-f23614b1f07c": [[-1.818, 7.62939e-09, -0.33150100000000005], [1.818, 1.94, 0.33150100000000005]], "0e17cf94-36d4-3216-9901-05dee759dfab": [[-0.8985, 0.0, -0.348499], [0.8985, 0.7, 0.348499]], "6170b3c0-e6ca-45e0-a539-11c6dd063672": [[-0.31775, -4.5299500000000005e-09, -0.253852], [0.31775, 0.44595, 0.253852]], "a5c38131-14a7-41d9-878f-916383285f23": [[-0.38378, 7.62939e-09, -0.42552599999999996], [0.38170099999999996, 1.06739, 0.426968]], "5521b2ea-22eb-4fa0-97e7-b3321da969a4": [[-0.286313, -4.71667e-06, -0.28651], [0.28658300000000003, 0.695741, 0.286595]], "fdea2986-6f48-4d4b-b041-c7b91911b07c": [[-2.36611, -1.69572e-07, -1.3946100000000001], [2.3660300000000003, 0.85367, 1.3947]], "c1221b18-80ba-42ad-af16-0abf3eef03b8": [[-0.326695, -0.00017191100000000001, -0.262328], [0.326683, 0.617332, 0.26234999999999997]], "11c84801-6a2d-4662-845c-11663ebcb49b": [[-0.260117, 0.0, -0.315925], [0.260065, 0.746736, 0.315755]], "e6bd21d3-4e04-4288-82cd-e14e74d3371f": [[-1.2067400000000001, -9.70546e-18, -0.179498], [1.2067400000000001, 0.67, 0.179498]], "f7809159-cac3-402c-8bb9-cc1d7bf11a97": [[-0.798083, 0.0, -0.312218], [0.798083, 0.444, 0.312218]], "04110701-f3d8-4dd6-9ef3-95fa6c10ee94": [[-0.950082, -9.71956e-08, -0.215752], [0.950082, 0.642226, 0.215752]], "5360e716-65d2-4272-88db-aa1bcc3b4b65": [[-0.544503, 1.52588e-08, -0.9586969999999999], [0.5449269999999999, 1.35704, 0.9586589999999999]], "bb9242fc-b626-468e-b849-2f0b93c683e6": [[-0.512766, -0.0, -0.16639099999999998], [0.512766, 0.623, 0.16639099999999998]], "4b45f81f-09e3-4a25-8d6a-0cf08002db93": [[-0.390115, 2.04582e-07, -0.37952199999999997], [0.390058, 0.849137, 0.380231]], "c1ceaf47-6898-4699-95b1-7aa9a48d5cdc": [[-1.541239, 0.0, -0.220177], [1.541239, 0.271979, 0.220177]], "04c289ae-17fc-4c4a-a3b4-c5ecae294da8": [[-0.29204, -1.5767800000000002e-05, -0.24508600000000003], [0.29204, 0.390877, 0.245088]], "7954392f-8208-42d1-8659-06e080c8fe50": [[-0.381435, -2.3239200000000003e-05, -0.458323], [0.381435, 1.06316, 0.458388]], "a1935b55-efd5-4231-9e10-0aa97d13dfee": [[-0.32224400000000003, -1.2375599999999999e-17, -0.240627], [0.32224400000000003, 0.523846, 0.240627]], "1ff36fb5-8aca-3bf7-8683-44606e1e2142": [[-0.658612, 0.0, -0.658495], [0.658612, 0.7198350000000001, 0.658495]], "234e038d-ef07-4f9f-966e-cb4ba1413eb2": [[-0.40375700000000003, -1.5452e-17, -0.46949199999999996], [0.40375700000000003, 0.34057200000000004, 0.46949199999999996]], "10e00ea3-2ad5-4fb1-a887-4b76d81b40b5": [[-1.20291, -6.09735e-08, -0.348728], [1.20291, 2.60971, 0.348729]], "7a7032d9-bd16-45cb-b815-3c23bfb97c14": [[-0.112745, -1.31501e-05, -0.09836650000000001], [0.113056, 0.703078, 0.09867509999999999]], "bef42425-94cf-4583-9b0e-7d71e8137ca8": [[-0.281748, 0.0, -0.04399600000000001], [0.281748, 0.47757599999999995, 0.04399600000000001]], "d72b7ee3-e39b-42e7-b796-e7ec9d23fbd7": [[-0.195992, 0.0, -0.22212900000000002], [0.195992, 0.822966, 0.22212900000000002]], "7245092f-2809-4805-8aca-44ab393c3c86": [[-0.452947, -2.72442e-17, -0.4686], [0.453021, 0.394427, 0.46864100000000003]], "02cc7cc5-6e9e-4516-89fa-e9028570531d": [[-1.24784, 4.97893e-05, -0.510204], [1.24798, 0.9164230000000001, 0.509232]], "1e527594-16ee-4d5e-97b3-3aa6930d03f5": [[-0.378172, 0.0, -0.378152], [0.378172, 0.355879, 0.378152]], "436914ed-ce9d-48a8-8de2-89c3e4e1d83c": [[-0.9214709999999999, 0.0001, -1.1005150000000001], [0.921626, 1.250571, 1.100783]], "e9b47622-2f29-417b-9bd4-617acb720633": [[-0.385445, -0.000564524, -0.38204], [0.385321, 0.34617600000000004, 0.381862]], "4df73dcd-8406-4c85-951f-3f6b9c41deb9": [[-0.198749, 1.7036e-08, -0.16310300000000003], [0.198749, 0.474574, 0.16310300000000003]], "57c14c3b-71ba-440f-a2f1-a46aa6821c4b": [[-1.3159800000000001, 1.11455e-07, -0.325], [1.3159800000000001, 2.11313, 0.325]], "f38eafe7-dd04-4bd5-97c3-d62f615b7339": [[-0.47411299999999995, 0.0, -0.435911], [0.47448799999999997, 1.014312, 0.436342]], "c995be32-e10d-4d5a-a2df-5860163faddc": [[-0.33662, 0.0, -0.33744], [0.33662, 0.857292, 0.33744]], "5ce37013-bdca-48e7-99bc-7ea3dad0fcae": [[-0.45, -1.50019e-17, -0.25], [0.45, 1.3169499999999998, 0.25]], "f9c823da-9899-4ccc-bbf1-2e936e150228": [[-0.15235300000000002, 0.0, -0.15235300000000002], [0.15235300000000002, 0.40983400000000003, 0.15235300000000002]], "13f80249-f81e-4e97-8c91-a175125e1b46": [[-1.1655929999999999, 0.0004, -0.47387300000000004], [1.1651479999999999, 0.867591, 0.473379]], "fcaf5f7f-7ee5-4e12-92ba-afd64c6e9fc2": [[-0.9376390000000001, 0.0, -0.466567], [0.9379559999999999, 1.136206, 0.465201]], "0872d011-e245-30dd-9fb9-3a8051093361": [[-1.261495, 0.0, -0.5321359999999999], [1.261495, 0.8246939999999999, 0.532164]], "022752c5-25f8-4cd4-af6d-c593465f8ad9": [[-0.40281599999999995, 1.41158e-07, -0.40281599999999995], [0.40281599999999995, 0.344082, 0.40281599999999995]], "66c2705e-1e29-4cc1-984a-06e9888d8237": [[-0.142497, -5.49931e-07, -0.120243], [0.14258200000000001, 0.49463500000000005, 0.120287]], "82f5db42-ab72-4b68-a7db-de5be6a14cf7": [[-1.1, -1.6992e-17, -0.3025], [1.1, 2.8, 0.3025]], "04ec5533-0048-46c0-b52d-2950d9abf323": [[-0.6462350000000001, 0.0, -0.11135999999999999], [0.6462350000000001, 2.3015600000000003, 0.11135999999999999]], "f6356a64-118f-49aa-98aa-b603e813737f": [[-1.15584, 8.19742e-18, -0.135413], [1.15584, 1.92473, 0.135411]], "7b0dee9b-06ef-3032-8c07-53fe471aa410": [[-63.0, 0.0, -33.454], [63.0, 76.3262, 33.0361]], "be5d7ab4-33ab-47d6-9649-31185682579c": [[-0.140931, -3.01655e-16, -0.0939461], [0.140931, 0.691884, 0.0939461]], "c1406df0-2c65-4fbe-813f-8d613877cd4a": [[-1.27711, -3.8147e-09, -0.493519], [1.27729, 0.888579, 0.49290999999999996]], "647d9600-d011-409f-af3a-68afe22dd8cd": [[-1.2006350000000001, 0.0, -1.0239260000000001], [1.191791, 1.205954, 1.02446]], "852b7cd6-5f0c-4505-89b4-56db3ae7fa28": [[-0.289317, 0.000837, -0.271275], [0.289317, 0.764288, 0.271275]], "f846faa9-017d-4f8a-81fe-e326b7e8b537": [[-0.755786, 0.0, -1.1425], [0.755786, 2.2, 1.1425]], "7a65282e-f111-4b67-ab6b-48785b7a6f1e": [[-0.826125, 1.0015399999999998e-17, -0.2005], [0.826125, 0.450312, 0.200505]], "71927f8d-990d-4fb0-a1a9-861d97bc4d67": [[-0.45929400000000004, -1.07148e-17, -0.20804099999999998], [0.459264, 1.78072, 0.208156]], "013b91c9-b8d8-3ba2-9663-1912fbb240c3": [[-53.1377, 0.0, -53.1931], [53.5423, 73.66, 53.4869]], "45c28bfb-f639-44f6-bd10-895774536533": [[-0.985, 0.0, -0.319425], [0.985001, 2.5459899999999998, 0.30813]], "19d7dbf3-695c-46da-b6bf-e5b67a3e470a": [[-0.685038, -2.4816300000000002e-08, -1.05222], [0.684184, 1.0900100000000001, 1.05236]], "49de7550-9378-4f68-81f3-de1dbd7281a0": [[-0.473994, -1.06581e-17, -0.171179], [0.473994, 0.499495, 0.171179]], "4851ae45-045c-3918-afa9-3bc1387423e7": [[-169.8661, 0.0, -90.9669], [172.8426, 74.3474, 89.6562]], "7437b7b3-dae3-4e6b-9c23-aafe85beda87": [[-1.63429, -1.30678e-07, -0.831917], [1.63393, 0.8467100000000001, 0.8306990000000001]], "178bca0a-e0a6-4cd6-be0c-f0e2f020d5cb": [[-0.294765, -2.35255e-06, -0.295628], [0.29478000000000004, 0.9525140000000001, 0.295518]], "489e32eb-2e28-46a4-b2ff-a1688a83333f": [[-0.20633700000000002, -1.7404e-18, -0.028540100000000002], [0.20633700000000002, 0.905311, 0.028540100000000002]], "0af6dbe0-0b1e-37e6-8bf4-12931ca32a7b": [[-0.238859, -3.6e-05, -0.275615], [0.238859, 0.975927, 0.27564]], "4e85e2a2-fbdd-4cf2-b72e-ecd4f25d26e6": [[-1.2067400000000001, -0.00040477399999999994, -1.1794], [1.2067400000000001, 1.631, 1.17957]], "b405af47-a5cd-45d4-a558-fca13d9dac59": [[-0.24695, 0.0, -0.236548], [0.24695, 0.570257, 0.236548]], "38ab0c3e-aea1-4ad9-9bcd-be2b37263b39": [[-1.10111, -1.60895e-13, -0.493351], [1.10111, 0.7399460000000001, 0.493351]], "a2b4213e-fa5e-4e7b-bf5f-e0767a6bef2c": [[-1.26324, 0.000125, -0.470819], [1.263243, 0.8473909999999999, 0.47084899999999996]], "8142ffc9-be64-44b6-8d23-267c54f41bbb": [[-0.829666, -0.000743842, -1.0923399999999999], [0.829664, 1.3618000000000001, 1.09199]], "581e044d-dc9a-474c-add8-27bbeca85a56": [[-0.301498, -6.10352e-08, -0.17787], [0.301188, 1.68239, 0.17757699999999998]], "8e787ff9-dc42-4a9d-afd5-783cbd642924": [[-1.87035, 0.0, -1.3224289999999999], [1.87035, 1.021325, 1.3224289999999999]], "90897b06-d85d-4e46-ad10-77a8f6eb7f64": [[-0.512429, -1.8336e-05, -0.67989], [0.512166, 0.94, 0.67989]], "642ad370-bbb4-4543-b0ed-882b6797c974": [[-0.80645, 2.96516e-07, -1.16354], [0.8071250000000001, 0.544248, 1.16462]], "70ff871c-77af-4e48-974e-6fb4244a943e": [[-0.39966500000000005, 0.0, -0.350901], [0.399838, 0.699499, 0.350901]], "28249cf6-59be-495c-a98a-8c23d29dbdaf": [[-1.1633499999999999, -4.1938399999999997e-08, -0.283545], [1.1633499999999999, 0.720442, 0.283545]], "258a8e6f-8aeb-44f4-817d-5de493bb21a9": [[-0.400324, 0.000101, -0.370647], [0.400324, 0.943849, 0.370647]], "cecbfc82-19fb-4272-a055-c3fd1d04c9b0": [[-0.40415300000000004, 0.0, -0.402592], [0.40415300000000004, 0.739632, 0.402592]], "6962e1e3-f7d1-4419-b114-a0b2ac91e195": [[-0.280842, 0.0, -0.32449599999999995], [0.280939, 0.960128, 0.32455199999999995]], "4a9b3bbb-1910-4c91-aedf-bf035b9f8f2e": [[-0.501999, 3.05176e-08, -0.132], [0.501999, 0.702038, 0.132]], "16254d03-ba33-4370-abe3-9ee27a774fc6": [[-0.340837, -0.000982486, -0.34214500000000003], [0.340837, 0.243859, 0.34214500000000003]], "50818967-83c2-3033-9a60-f4416d197a96": [[-0.40798900000000005, 0.00369, -0.376182], [0.41091700000000003, 0.6858660000000001, 0.375991]], "592abfe3-905a-4d5b-98e7-f8d27568b531": [[-0.368921, -0.00081417, -0.367345], [0.368531, 0.283621, 0.367948]], "3b4a90cb-65d9-4299-addd-2367c86dd6d2": [[-0.37493099999999996, -4.67678e-08, -0.386923], [0.37504800000000005, 0.809627, 0.386792]], "e314cd3c-e309-4614-98d2-13f99208ced8": [[-1.25316, -1.87065e-17, -0.3075], [1.25316, 2.0, 0.3075]], "19eb06c7-b5c7-4efc-94c8-7602b5a23a3a": [[-1.53966, -1.62818e-17, -0.33966], [1.53966, 2.30028, 0.33966]], "54a99429-d19e-44d8-9222-3d6c5080e8ff": [[-0.34503700000000004, -1.81771e-05, -0.34503700000000004], [0.34503700000000004, 0.279836, 0.34503700000000004]], "cab119c6-8cbc-41b8-81e5-6432ce86c1ca": [[-0.430295, -0.00057275, -0.423409], [0.430295, 0.64495, 0.423409]], "70b0dd2d-79b3-416e-88e2-49f2eda5a75f": [[-0.33547699999999997, 3.10338e-06, -0.352603], [0.33555500000000005, 0.8102339999999999, 0.352607]], "cd5a2339-68f2-4b0e-8e6e-babeb9a96816": [[-0.366318, 0.0, -0.349435], [0.36660400000000004, 0.736145, 0.349887]], "12ebe333-23d5-4c8b-b704-d22f82491577": [[-1.05936, 1.5037200000000002e-07, -0.9081220000000001], [1.05967, 1.16363, 0.9081140000000001]], "4644c440-8fd7-4044-9909-e848c3af29ba": [[-0.372881, 0.0, -0.404611], [0.37247100000000005, 1.074427, 0.404611]], "ba495ebb-9dee-48a8-b5b4-348693728588": [[-0.237513, 0.0, -0.237334], [0.23747800000000002, 0.229182, 0.237265]], "32f14e25-b2c7-45e9-976f-4743ae0efd30": [[-0.24889299999999998, 0.0, -0.24889299999999998], [0.24889299999999998, 0.576676, 0.24889299999999998]], "b9b0c8a3-d8dc-4503-a4c2-2606d71cb0a9": [[-1.087406, 0.0, -0.440287], [1.087406, 0.961357, 0.440287]], "83e16fdc-a0bf-40aa-946c-e4008f063904": [[-0.576244, -0.000127108, -0.235066], [0.577304, 1.5789900000000001, 0.235205]], "5935de3b-36df-4797-a022-e53ff4703095": [[-1.229388, 8.4e-05, -1.156139], [1.231167, 1.146701, 1.155785]], "3e47bbd6-1e7b-47cf-88e3-80d2735119cf": [[-1.17149, 0.0, -1.3001660000000002], [1.173426, 1.367987, 1.2980090000000002]], "6bc00099-da47-4411-b73d-b9845ecb4631": [[-0.271165, -1.37091e-08, -0.25326699999999996], [0.271165, 0.860357, 0.25326699999999996]], "7197b946-9549-4df7-a0fd-5b89f1cc09f4": [[-0.258772, 0.0, -0.27880099999999997], [0.258772, 0.940444, 0.27880099999999997]], "5bead3a8-0491-43a1-a5e3-8b9b94b74451": [[-1.681583, 0.0, -0.6462730000000001], [1.681535, 0.989123, 0.646339]], "6e6d995c-f911-4f64-9fd0-60a21fb507ff": [[-1.224512, 0.0, -0.443132], [1.224512, 1.022732, 0.443132]], "7b6cd127-844d-451f-bf48-f2e5b18508cb": [[-0.8835339999999999, 1.52588e-08, -0.2], [0.8835339999999999, 0.6437470000000001, 0.2]], "860976a3-3b54-4409-b197-6b2cb3a0eed2": [[-0.316218, 0.0, -0.316218], [0.316218, 0.53478, 0.316218]], "1d1d342c-71b9-4598-8fbb-d1b1d4c6caf7": [[-1.04382, -6.719099999999999e-17, -1.10727], [1.04358, 1.22628, 1.1081100000000002]], "527c0abe-71d3-4129-9521-d7a618f172ca": [[-0.7693049999999999, 0.0, -0.400439], [0.7693049999999999, 0.850796, 0.400439]], "6914e291-6567-3b2d-b451-1ff145aa58dc": [[-1.100001, -0.0, -0.675], [1.1, 0.7302, 0.6750050000000001]], "609953ec-e335-4f4f-8132-59baf2430518": [[-0.840025, 0.0, -0.4581], [0.839334, 0.933439, 0.45834800000000003]], "52368432-6240-4269-8237-4dd464b4a23d": [[-0.28874099999999997, 0.0, -0.307763], [0.288702, 0.8892570000000001, 0.307602]], "1baf5b9e-f889-45c7-99a8-6dd0e5a2c899": [[-1.11021, -2.36183e-17, -0.44872500000000004], [1.10958, 0.819576, 0.44912799999999997]], "0aa3def2-8331-4898-a417-3d59a71de16b": [[-0.28466400000000003, -2.5010099999999997e-07, -0.21], [0.284663, 0.450548, 0.21]], "76e0d12a-1643-4c91-974b-c52cb70ef876": [[-0.7236020000000001, 6.10352e-08, -0.306511], [0.723986, 2.09906, 0.30670400000000003]], "f1cb64aa-3841-4fd3-9e5d-7fa0fd691b53": [[-0.234791, -6.523679999999999e-18, -0.10654], [0.235014, 1.5086000000000002, 0.10654]], "7a3abc50-ea28-4742-9cbe-f2b26cd7f599": [[-0.20350400000000002, 0.0, -0.210059], [0.204145, 0.5117860000000001, 0.21009]], "73e0bfc9-ccc7-435a-bf6b-c456799853c6": [[-1.3724, 7.62939e-09, -0.486581], [1.37313, 0.8929250000000001, 0.486581]], "8b622586-023a-4858-a402-9e7d0b12bc4c": [[-0.28197099999999997, 0.00020299999999999997, -0.299469], [0.281995, 0.810757, 0.299771]], "0911df1e-413c-4f2c-81e3-9660926c10fc": [[-1.37382, 0.0018640000000000002, -0.47633200000000003], [1.37382, 1.047941, 0.476496]], "53ce7c36-6831-4913-b826-e6723794bf49": [[-0.390057, -0.000233998, -0.244224], [0.390269, 2.05159, 0.24314]], "1fa4b862-ed44-4523-a3cc-67956eb18bd0": [[-0.33911499999999994, 0.0, -0.40645899999999996], [0.33911499999999994, 1.0299120000000002, 0.406434]], "29cff787-58ac-4d20-b1ae-20fca436d301": [[-0.7858839999999999, 0.0, -0.355023], [0.7858839999999999, 0.787534, 0.35535200000000006]], "230f9123-ded5-4ec9-989e-2cee7f07354b": [[-0.475088, -0.000190991, -0.22960999999999998], [0.475087, 1.29943, 0.229146]], "6e98b8e8-6feb-479a-a122-5523b9620819": [[-0.303974, 7.000000000000001e-05, -0.347985], [0.303719, 0.847837, 0.348244]], "e9986da3-b386-4446-81cb-fe9828d3c37f": [[-0.886963, 0.0, -0.363309], [0.886963, 0.38209000000000004, 0.363309]], "1ac4e478-601c-49d7-9cb5-122a8916cb58": [[-0.303698, 0.0, -0.302174], [0.303698, 0.8821439999999999, 0.302174]], "02f82ac8-f8a3-4220-831e-f6d231cd3dfb": [[-1.12802, -4.6528700000000003e-07, -1.2322499999999998], [1.12802, 1.45911, 1.23315]], "434a4bd0-52fe-43b4-8a1b-d4b141bd8fea": [[-0.466768, 0.0, -0.48304], [0.466808, 1.2598260000000001, 0.482604]], "ca08dab6-2ce0-47ad-a597-c3c69ab03c6e": [[-1.072553, 0.0, -0.234622], [1.072553, 0.6528480000000001, 0.234622]], "adc5fb68-cf1e-4017-aead-49ba64734db9": [[-0.835838, 0.0, -0.13519899999999999], [0.835838, 1.6716749999999998, 0.13519899999999999]], "8e7862c4-2a9f-4e9e-ba9b-04c7503695d0": [[-0.45, -0.000636911, -0.0667305], [0.45, 0.86075, 0.0666012]], "58c7887b-bf99-4978-aaf1-21bdc9295cbf": [[-0.5971029999999999, -0.00018639800000000003, -0.30298200000000003], [0.597117, 0.8502230000000001, 0.303203]], "51145439-b400-412a-b8e0-d67e653a4c59": [[-0.691546, 0.0, -0.307834], [0.691546, 0.599831, 0.307834]], "4c9ac6a1-2643-4484-952c-395892f5bee8": [[-1.144247, 0.000556, -0.47696800000000006], [1.1431959999999999, 1.086218, 0.477416]], "0ebe26b5-633f-42dc-b503-e1ac377674f1": [[-0.24965299999999999, 0.0, -0.270629], [0.24965299999999999, 0.6230340000000001, 0.270629]], "89cf2277-36bb-4b2c-a47a-9f06b98b3b34": [[-1.0197150000000001, 0.0, -0.46455199999999996], [1.019704, 0.7480889999999999, 0.464482]], "62a4bcd0-a0c9-4ded-ab61-62c06063cef7": [[-0.9530270000000001, 3.05176e-08, -1.1064100000000001], [0.952966, 1.73841, 1.1061]], "36611c52-2573-4f86-bf71-b9f175cfeb65": [[-0.629127, -8.31575e-10, -0.6738890000000001], [0.629127, 0.362541, 0.6738890000000001]], "a38a5aef-c889-4690-af9a-77f40f6547f8": [[-0.939785, 0.0, -0.939785], [0.939785, 0.731597, 0.939785]], "016bc42e-c044-3a36-8bbf-5db79d89585b": [[-0.18947199999999997, -4.9e-05, -0.201235], [0.17439, 0.766568, 0.20037500000000003]], "c50fbcbc-3aff-49a6-8af9-c7b9993f3040": [[-0.268919, 0.000111, -0.26890000000000003], [0.26891200000000004, 0.823026, 0.268873]], "431f10e9-12ee-43df-98af-7d5b0f280e07": [[-0.46177, 0.00037, -0.48119799999999996], [0.461739, 1.047949, 0.481232]], "14ec6485-34e8-45a8-af29-cee7aa38b610": [[-1.1287099999999999, -7.66808e-18, -0.148338], [1.1287099999999999, 1.8559200000000002, 0.148338]], "4ad52267-7560-4dda-ae80-05468dbe8d41": [[-0.28522, 2.9999999999999997e-06, -0.284563], [0.28522, 0.6074499999999999, 0.284563]], "2c12b4a1-a364-4653-aee1-fe96c466a98c": [[-1.07926, -0.000395009, -0.493403], [1.0797700000000001, 0.912897, 0.490253]], "6c6c6dbb-63e9-4b2e-9657-2612c77e7c11": [[-0.24745999999999999, 1.17435e-05, -0.192497], [0.24744700000000003, 0.9347799999999999, 0.19241499999999997]], "53003092-9c15-415e-af7f-d1d8c3b0661a": [[-0.31525, -0.000154059, -0.315745], [0.31525, 0.378671, 0.31525]], "11c78d8a-818f-4c50-b006-c0d51dc4f454": [[-0.192961, 0.0, -0.193051], [0.192961, 0.46871899999999994, 0.193051]], "d6e0fa89-7f3e-4bfa-9483-37f705320910": [[-0.46449399999999996, -0.0, -0.465194], [0.465195, 1.153425, 0.465194]], "5812b1d9-ebf3-4915-9a39-e37920945199": [[-1.305352, 0.0, -0.493895], [1.305401, 0.739622, 0.49400799999999995]], "54dfefa8-fa6f-46fa-b3bb-c8a9ef848196": [[-0.0400894, 2.8062699999999997e-06, -0.0400946], [0.0400894, 1.08898, 0.0400894]], "3e1c35f5-c1f9-4dad-8cd1-1649e72f182e": [[-0.40286299999999997, 7.400000000000001e-05, -0.39496000000000003], [0.40287, 0.902345, 0.394841]], "8b9ae842-02ce-42c3-828f-3c540741f1dd": [[-0.391553, 0.0, -0.32303], [0.391553, 0.509534, 0.32303]], "24397ff7-b6b2-4692-b506-71db97a6d81a": [[-0.847139, 5.85099e-05, -1.39836], [0.846973, 0.983984, 1.39859]], "79b54dd6-6816-3533-a026-d031e0cb3f1e": [[-0.832299, 0.006232, -0.269281], [0.7510439999999999, 0.859112, 0.23815999999999998]], "52ff57fd-1934-41e9-913a-ee6443dd8f3f": [[-0.24979500000000002, -9.8499e-07, -0.24979500000000002], [0.24979500000000002, 0.5278, 0.24979500000000002]], "5f2bc214-dc50-4d8d-8c24-16843cedf370": [[-1.0152299999999999, 1.74113e-17, -0.303781], [1.0152299999999999, 2.22989, 0.303948]], "60b85459-1e82-4cad-a03a-71ec484b5e31": [[-0.259704, -6.433530000000001e-09, -0.272982], [0.259704, 0.638435, 0.272967]], "0a79b3eb-03c5-3df4-9a60-b4b99c443d87": [[-0.279219, -0.0, -0.295016], [0.279218, 0.78582, 0.295019]], "a7903e58-7858-4418-a957-2ce88806de53": [[-0.7, 0.0, -0.4], [0.7, 0.402, 0.4]], "9546ee09-dc87-45f4-8fa3-a09a57981b1f": [[-0.24718, 0.0, -0.273657], [0.24712, 0.868845, 0.273551]], "2b4823c1-5447-4df5-b997-4dddc8f0fa93": [[-0.7363689999999999, 0.0, -0.19173600000000002], [0.7363689999999999, 0.938213, 0.19173500000000002]], "a97c79e2-8e09-4670-ad86-c5f6e2a5610c": [[-0.583286, 0.0, -0.32723399999999997], [0.583286, 0.90104, 0.32723399999999997]], "76be547c-a31c-4bca-814c-472f02826df8": [[-0.654652, -7.49977e-13, -0.29075500000000004], [0.6546510000000001, 2.19985, 0.290802]], "020e7a6d-d655-449f-b048-9054d00d0994": [[-1.3490700000000002, -0.001665, -0.622752], [1.3472, 0.865723, 0.623258]], "08e37873-2f0b-43df-8e56-e823a206882f": [[-0.53757, 0.0, -0.537569], [0.53757, 0.467415, 0.537569]], "2bbc46d5-bbf7-40a0-87ac-bbcdb96d890e": [[-0.821408, 1.16984e-08, -0.18027], [0.821408, 0.9146810000000001, 0.180412]], "7cd6945d-1587-4694-866c-fc03869da71a": [[-0.6490659999999999, 0.00013, -0.6490659999999999], [0.6490659999999999, 0.355474, 0.6490659999999999]], "1a9c2d94-d577-4246-9829-75e26ad1cfe3": [[-1.52917, 2.35751e-17, -0.386434], [1.52917, 2.5574600000000003, 0.38581000000000004]], "27828aed-1c0b-4dfa-8579-5dbe67eeebee": [[-1.162074, 0.0, -0.463036], [1.162074, 0.910741, 0.46336700000000003]], "3cbf6b15-deea-4901-81c7-649f8ff8cef1": [[-0.335248, 0.0, -0.196209], [0.335248, 0.282548, 0.196209]], "8bcfbbc3-fb54-46d6-b9f6-8029c2fbb3b1": [[-0.291033, 0.0, -0.22440000000000002], [0.291033, 0.502989, 0.224379]], "8da3c057-f472-49e7-a607-811d2b3dc90d": [[-0.49713700000000005, -7.62939e-09, -0.160325], [0.49713700000000005, 0.796628, 0.160325]], "856ee26a-be78-4965-b889-5e09d2f7cc30": [[-1.3144200000000001, -2.48197e-17, -0.49097499999999994], [1.31506, 0.763733, 0.49133299999999996]], "36cafc17-ca62-4340-a6e7-16ed28a052f2": [[-0.59011, 1.14441e-08, -0.532081], [0.589968, 0.793078, 0.531127]], "13256e16-3b76-4fa3-ad28-3f476ad0e338": [[-1.0, -1.09673e-08, -0.22998000000000002], [1.0, 0.797501, 0.22998000000000002]], "1d2430da-2222-4e2f-ae23-37a31ef7cb1c": [[-0.996154, -0.000685403, -0.280258], [0.996847, 2.30171, 0.279246]], "f6ce13a4-03f3-4ca2-ac18-f5be26e0909c": [[-0.903498, -1.4468799999999998e-17, -0.241526], [0.903498, 0.626481, 0.241526]], "022cf426-77dd-4300-8fef-3d256991ad61": [[-1.21066, -5.58044e-08, -0.517587], [1.21059, 0.782329, 0.51776]], "de5fba1c-ae08-4f68-8edc-79b97b3919de": [[-0.246667, 0.0, -0.245806], [0.246667, 0.751025, 0.245806]], "0ceb22a3-8edb-4957-b619-7bf1bf858ae4": [[-0.258973, 0.0, -0.258359], [0.258973, 0.18429099999999998, 0.258359]], "087ab7ae-de84-47fd-b420-3dfa3ddd9bc4": [[-1.586722, 0.000536, -0.589699], [1.586286, 0.973167, 0.590575]], "6f2fd9fa-4696-4420-9cf0-386347ef1515": [[-1.01012, -1.14262e-17, -0.239331], [1.01012, 2.0680899999999998, 0.239331]], "fb10bf23-573b-480c-82b5-fdbe28d21e03": [[-0.30067699999999997, -2.95126e-05, -0.33935699999999996], [0.30079999999999996, 0.915961, 0.33903]], "712b4d3c-cabb-4c5c-90d2-6222563786e8": [[-0.626468, -0.000216046, -0.287899], [0.626468, 0.695735, 0.287899]], "652fadac-5ee4-4a5f-afad-b3df8568f6b4": [[-0.293018, 4.2e-05, -0.27056], [0.292987, 0.904692, 0.27054300000000003]], "321ae24c-7dbf-49cd-a771-a6ceeff98950": [[-0.6010840000000001, -1.73233e-05, -0.600973], [0.601085, 0.7696580000000001, 0.600974]], "5d20f0b7-b24d-4d1a-894b-0c3899a3ba23": [[-1.020362, 0.000263, -1.042636], [1.019239, 1.284916, 1.0422719999999999]], "5247667b-b7f5-499c-9190-b4e1b98c4ea4": [[-0.366869, -0.00035815399999999996, -0.366714], [0.366969, 0.7233329999999999, 0.3675]], "25e4c2af-eeac-4b43-833a-ffe17c770801": [[-0.8773829999999999, -0.000548448, -1.04249], [0.87732, 1.4369399999999999, 1.04434]], "0631186c-1f4b-48fe-9285-52f5214af737": [[-1.2861799999999999, 0.000248, -0.43504800000000005], [1.2860059999999998, 0.851652, 0.435198]], "c67af1ea-fdbf-4fbe-9099-4962a781b43c": [[-0.18, 0.0, -0.18], [0.18, 0.427367, 0.18]], "5a066efb-314d-3f13-98b4-0fa4ec7c32ad": [[-0.226721, -0.0, -0.226613], [0.226721, 0.445663, 0.226613]], "25df26c7-e799-45fd-91bb-fd208d6bdf0d": [[-0.32601199999999997, -8.49107e-05, -0.306106], [0.32622, 1.03765, 0.305935]], "26b41b0a-b94f-48ad-ad4b-2940ff9e845a": [[-1.70624, 6.10352e-08, -0.30013], [1.70624, 2.3, 0.30013]], "97dc9747-7cf6-4b10-a4fe-887e99d0fa0b": [[-0.22370400000000001, 0.0, -0.223775], [0.223776, 0.37560299999999996, 0.223812]], "3ea31264-a880-4b28-adc9-f9dc1a5420da": [[-0.31907, -0.0, -0.290967], [0.318922, 0.763815, 0.290967]], "0fdf5edd-bb94-4ebf-b724-87ea1fc17ccb": [[-0.31568999999999997, 0.00043799999999999997, -0.286235], [0.31568999999999997, 0.556639, 0.28628]], "7b119cc7-1fcb-4aac-8d5f-d832e1cfe208": [[-0.73, -1.50168e-17, -0.319634], [0.73, 1.87001, 0.319634]], "a7b66abb-0483-4c36-a27f-d0c23946d411": [[-0.38204, -2.13265e-05, -0.382087], [0.38156599999999996, 0.524407, 0.381663]], "78b0ba9c-b76e-49f0-88e9-118e59ab1914": [[-0.33, 0.0, -0.235], [0.33, 0.5, 0.235]], "b7fbba57-73b9-46ce-9847-6074568aea0e": [[-0.21746500000000002, 8.63774e-08, -0.194361], [0.21746500000000002, 0.751111, 0.19405]], "14db6149-925c-47ce-abb7-3683296e3252": [[-0.629994, -1.19568e-09, -0.318146], [0.629994, 0.458813, 0.318146]], "282893d8-f308-4bd4-a6da-a1d1a4a792e6": [[-1.145719, 0.0, -0.47773699999999997], [1.14578, 0.70733, 0.477434]], "14ffd310-f562-381c-b6c0-9931deb76c1e": [[-62.3874, -0.0003, -37.7214], [62.3874, 84.933, 43.9784]], "508aa612-8dda-4528-aee2-62712203ae48": [[-1.42191, -0.000100383, -0.723622], [1.4224, 0.9239409999999999, 0.724032]], "b5211b91-9b43-4c02-bed9-16b2d9966ad7": [[-1.050393, 0.0, -1.160639], [1.041858, 1.372404, 1.1586830000000001]], "76c01e5e-cd9a-4766-929a-9a9ce2012de0": [[-0.533374, -2.08246e-06, -0.35942100000000005], [0.533374, 0.5781499999999999, 0.359476]], "4a6aea75-8b07-426e-aaef-8f4a1841d513": [[-0.717623, -1.17639e-17, -0.204856], [0.717582, 1.02457, 0.204875]], "85c5d5f9-3461-37ba-afa1-b0799dce0139": [[-0.30734100000000003, 4.4999999999999996e-05, -0.274364], [0.306796, 0.731294, 0.28284]], "52471580-07f9-4ed6-b6ae-7e3030f9b3ad": [[-0.515946, -0.000435488, -0.257993], [0.515918, 1.15916, 0.258109]], "277ccdab-ecc1-4e27-bb04-e971e7d538c7": [[-0.9, -6.57124e-05, -0.226238], [0.9, 0.779355, 0.22602]], "50553870-3759-30b2-809a-52345b7059ea": [[-0.9678709999999999, 0.0, -0.451665], [0.9678709999999999, 0.76783, 0.43324199999999996]], "ce911e6f-91e2-4d7b-a40a-3f8a8bec9a23": [[-0.507585, 0.0, -0.522701], [0.507585, 1.127237, 0.522701]], "b9851d90-ce96-4001-9090-8184d4cb3bb1": [[-0.280633, -1.7265299999999999e-06, -0.212404], [0.280422, 0.447573, 0.21237999999999999]], "6340af53-5094-4570-93d6-63ddbc0c6cc0": [[-0.21447500000000003, -0.000184665, -0.257396], [0.2145, 1.04544, 0.256942]], "47466fe3-2588-407b-a387-781df7bade38": [[-1.20753, -5.50559e-05, -0.9273309999999999], [1.20668, 1.98523, 0.8000039999999999]], "12491fd8-0e23-4f2a-bd9a-d1ec4b203565": [[-1.1433499999999999, -3.27826e-09, -0.482248], [1.14313, 0.773498, 0.483122]], "956a804b-0348-4722-a693-7fb3c42ca627": [[-0.476959, 4.7000000000000004e-05, -0.4568], [0.477031, 1.003919, 0.456993]], "4d247ca2-c74d-482e-a8ef-b840c309422e": [[-0.6, -2.53796e-07, -0.211931], [0.6, 1.37168, 0.211202]], "22791c11-c190-46f8-996f-a7e5583c3056": [[-0.5, -1.20016e-17, -0.4], [0.5, 0.42, 0.4]], "3cb67131-d5d1-4c81-8b75-572572ef8cf6": [[-0.633191, 0.0, -0.37454], [0.633191, 0.998297, 0.37454]], "bdc36c2b-f121-4455-8bfa-2c35871dfc6f": [[-0.27970300000000003, 4.3357499999999996e-08, -0.27970300000000003], [0.27970300000000003, 0.6411870000000001, 0.27970300000000003]], "4455bd93-dcda-4175-9b21-f278e4e9ffeb": [[-1.171811, 0.0, -0.570212], [1.171812, 1.055032, 0.570212]], "002740ba-6fca-4258-b631-cf031c2adbdc": [[-0.599907, -1.25462e-09, -0.599907], [0.599907, 0.745722, 0.599907]], "57de3ee5-806d-4850-8508-ecb98356e126": [[-0.32755, -4.768370000000001e-10, -0.32755], [0.32755, 0.21243099999999998, 0.32755]], "c9a6c043-b4ed-4589-b46a-e2f6cbe1e260": [[-0.767278, -0.00041248399999999996, -0.8506570000000001], [0.767278, 1.6261400000000001, 0.8490800000000001]], "52824459-a268-4a34-8416-6478f7c2aded": [[-1.25018, -0.00011624600000000001, -0.487125], [1.25015, 0.9445319999999999, 0.486919]], "f42becb7-8aed-411c-9968-43b350e658f4": [[-0.388635, 6.10352e-08, -0.383994], [0.388635, 0.799481, 0.383994]], "18c7d01a-28b0-44e8-829d-272efb815b9a": [[-0.458892, 8.38777e-18, -0.136983], [0.458892, 1.15979, 0.136983]], "7c9e0c69-073a-45bc-9ed7-178822c878bd": [[-1.12964, -1.11136e-07, -0.290546], [1.12964, 0.658099, 0.290546]], "81bfea92-9a56-38eb-8bb2-ffa5b572fbc1": [[-63.0, 0.0, -33.454], [63.0, 76.3262, 33.0361]], "e12f66cb-4bf5-4f9e-92dd-1cc9407f85c8": [[-0.58, -1.0842e-17, -0.206483], [0.58, 0.84, 0.206543]], "54275b58-a2f9-4e32-9106-ca09282b9c52": [[-0.21110199999999998, -0.00020918699999999997, -0.274464], [0.21141400000000002, 0.7514409999999999, 0.273766]], "814056ef-5c62-4274-8dab-8523a82493a9": [[-0.790988, 3.38749e-07, -1.07772], [0.7909529999999999, 0.895906, 1.078]], "9f2e7ad8-d19f-42a7-bf3d-5d8e2033e1f4": [[-0.321549, 0.000239959, -0.35876800000000003], [0.321128, 0.9486159999999999, 0.35830599999999996]], "dd1ac041-341f-4993-a696-e5b9a78dba67": [[-0.17458500000000002, -6.454490000000001e-18, -0.17458500000000002], [0.17458500000000002, 0.500026, 0.17458500000000002]], "05a5e69e-bab7-4b3a-b89c-fbc54f63c3ca": [[-0.349122, 0.0, -0.451399], [0.349122, 0.819895, 0.451046]], "bcd6a9a4-acfd-4bf0-8344-ad4cbfe0b189": [[-0.305, -5.9504600000000006e-09, -0.241311], [0.305, 0.5760000000000001, 0.24101299999999998]], "718d3c86-4d20-4376-ae91-c497e482c722": [[-0.7759610000000001, -0.0007594199999999999, -1.05613], [0.7759610000000001, 1.1512900000000001, 1.05613]], "f6564ed3-2f2c-492b-b0b1-6c78cb9d66eb": [[-0.340321, -1.4456e-17, -0.309729], [0.340321, 0.8015380000000001, 0.309653]], "949a5f40-e2fe-4c6d-8a50-8decaa4ecd37": [[-1.27504, -0.000846247, -0.469743], [1.2751000000000001, 0.839925, 0.469611]], "74b4bce8-b46d-4bfa-8604-844a5a1bca3b": [[-1.3839599999999999, -1.46958e-17, -0.310338], [1.3839599999999999, 2.4, 0.31]], "56b9a175-9c88-36d6-a030-e1b948fdd102": [[-40.9268, -0.0003, -41.5354], [40.9268, 93.3087, 41.5247]], "d83e0878-03b4-43f3-8035-0507eb7bb62f": [[-2.38997, 2.44141e-07, -0.273431], [2.38997, 5.31, 0.276574]], "79b58fc0-c0df-3405-ad20-8c3d51581bb6": [[-111.0, 0.0, -35.0], [111.0, 93.3, 35.0]], "6670bd30-fccd-448d-b540-61dd538832fa": [[-0.19697099999999998, 0.0, -0.19697099999999998], [0.19697099999999998, 0.5355, 0.19697099999999998]], "122b69db-88d0-4927-ba01-15dc17194c78": [[-0.328932, -7.69105e-05, -0.328696], [0.328934, 1.17969, 0.328695]], "0ba987fb-1ff8-4bcd-9e6b-637a1ec78201": [[-0.9865269999999999, -7.05229e-17, -1.16036], [0.986432, 1.4237700000000002, 1.16036]], "04dbb0ae-ef47-4138-9d8d-46dc6057b289": [[-0.891699, 2.40936e-08, -0.238372], [0.891699, 0.8222499999999999, 0.238372]], "3b9a993f-7c09-45a7-b501-b453a8df31ab": [[-0.229625, 0.0, -0.23065000000000002], [0.229685, 0.942063, 0.230596]], "e467fb5e-c833-4fe3-8f81-b3be50ce7176": [[-0.145893, 0.00010999999999999999, -0.147873], [0.145837, 0.473387, 0.14768]], "6e1cdf60-ccad-4a28-a688-2d6ffc9c0e50": [[-0.352842, 0.0, -0.34110599999999996], [0.352526, 0.782501, 0.340843]], "cede2c1a-8176-438d-84e8-7952434327b7": [[-0.27660599999999996, 0.0, -0.22128499999999998], [0.27660599999999996, 0.47287199999999996, 0.22128499999999998]], "2054aeaa-9ba8-43e9-b88a-a571d7adbbaa": [[-0.20350400000000002, 0.0, -0.20992], [0.204073, 0.511817, 0.20997900000000003]], "5ef10029-a87b-4fc5-8b53-99f05731fc00": [[-0.7, -1.8316899999999998e-17, -0.3], [0.7, 0.732, 0.3]], "7a55553d-97b2-337d-b244-00599c86a5e3": [[-0.613035, 0.010188999999999998, -0.348794], [0.618051, 2.160956, 0.339931]], "2b9049ed-ce3c-4e7c-993d-bdaac379c5f9": [[-1.2959100000000001, 6.10352e-08, -0.512417], [1.2959100000000001, 0.9784139999999999, 0.512488]], "7b0b621b-5e2f-4452-b2ef-937b593ae499": [[-0.617102, 0.0, -0.219134], [0.617043, 0.36428, 0.21912500000000001]], "86205f15-d65f-4dd7-af0f-08b77a32097c": [[-1.073285, 0.0, -0.419434], [1.0732840000000001, 1.460765, 0.419434]], "4159b181-95ea-3f6a-b68b-8131e75c755e": [[-59.3273, 0.0, -47.3643], [57.8415, 122.612, 53.6647]], "72f09fc2-7f0e-44b6-9c60-f5bd9161696c": [[-0.21675899999999998, 0.0, -0.255409], [0.21676700000000002, 1.288781, 0.255417]], "e392266c-978a-411d-8197-5b2049423ba3": [[-0.245398, 5.2e-05, -0.262096], [0.24541000000000002, 0.748008, 0.262096]], "b147a1aa-4943-4798-b043-9cb1274e9aa6": [[-1.0155, -0.000234434, -0.40183599999999997], [1.01503, 0.906053, 0.402276]], "cdb53cce-9109-4b96-94f9-155fdafc489d": [[-0.6005590000000001, -1.10013e-08, -0.302601], [0.6005590000000001, 0.7470829999999999, 0.30279]], "bbd7e529-c0ff-4fe7-93cc-ff5f4c35ac9f": [[-0.8793859999999999, -0.00070481, -1.074], [0.879767, 1.3478800000000002, 1.07496]], "260f79ca-41d4-44c8-bbe2-118978128685": [[-0.6883929999999999, -1.4886700000000001e-05, -0.154888], [0.6883929999999999, 0.363453, 0.154888]], "5fc28ad6-07f0-4863-8f84-621a0ffe376c": [[-0.5078900000000001, -5.9604599999999995e-09, -0.229832], [0.507901, 1.2254399999999999, 0.230032]], "27c36a2c-9a12-462a-83e8-0bb0e4505de6": [[-1.40048, -5.5621699999999996e-05, -0.49045900000000003], [1.4011099999999999, 0.921656, 0.48887300000000006]], "c038d3cf-722c-45d9-88db-45ede34c5cb9": [[-0.273199, -3.33986e-05, -0.154217], [0.2732, 0.786002, 0.154106]], "d1d091e1-69eb-4610-a62b-5179c70ed525": [[-0.519966, -3.05176e-08, -0.254999], [0.519966, 1.3968, 0.254999]], "13c94d6f-45a8-48f9-ae54-9fef107efa86": [[-0.250066, 0.000126861, -0.24973299999999998], [0.250198, 0.431603, 0.249883]], "ee987d00-75c6-4f8a-838b-9b41c35059d4": [[-1.16629, -2.88127e-17, -0.481439], [1.16718, 0.8479399999999999, 0.481795]], "f82ae6f4-adae-44e2-bfe3-ed875eb9fff9": [[-1.30633, -4.49027e-18, -0.27367], [1.30633, 2.6959199999999996, 0.253982]], "4ba17651-93d0-4b32-bb3a-d6de5b761da9": [[-0.599994, -1.18828e-08, -0.599994], [0.599994, 0.72, 0.599994]], "81aec6cd-34d7-4619-81e6-56bd1cdc1265": [[-1.1857309999999999, 0.000882, -1.237053], [1.186352, 1.087124, 1.237053]], "51f88f6e-27b1-4cff-94a0-1d64dfac3172": [[-0.8000010000000001, 1.24769e-17, -0.20738600000000001], [0.8, 1.29602, 0.207334]], "5bebb1eb-9efe-46f1-a995-fb381e4a7a62": [[-0.829984, 4.6118599999999996e-05, -1.0268300000000001], [0.830044, 1.07813, 1.0268300000000001]], "dc93f346-4ca0-4f35-b362-0af393421fb1": [[-0.313675, 0.0, -0.289368], [0.313675, 0.596971, 0.289368]], "d793d985-c1ae-4844-9b17-3f87ce2af7ea": [[-0.865438, 0.0, -0.295455], [0.8653660000000001, 1.9199359999999999, 0.29570399999999997]], "b398bd45-5fed-471b-ae00-02d7b698adb1": [[-1.35797, 6.10352e-08, -0.479064], [1.35793, 0.8616750000000001, 0.479081]], "90daab82-8a2e-4d46-8fff-1bf44f6723bf": [[-0.169719, 0.0, -0.16989], [0.169719, 0.446397, 0.16989]], "e7509d44-ff5a-4033-9ed0-6d4f73a43282": [[-0.245718, -1.0240499999999999e-17, -0.210757], [0.245718, 0.41605899999999996, 0.210757]], "29237075-e095-4f0a-a8ec-a0dd24b5882d": [[-0.640953, 3.8147e-09, -1.04926], [0.64229, 1.2925399999999998, 1.04944]], "68501be9-0dcb-44b6-988b-ac1677cb2a35": [[-1.00177, -2.12877e-17, -0.600632], [1.00177, 0.712576, 0.600632]], "c49a5bcf-1419-4b1d-90e8-71335389e550": [[-0.611385, -1.4034e-17, -0.305693], [0.611385, 0.30773, 0.305693]], "5ad97bd1-0f41-4d4d-b6f0-c8580a8353c9": [[-0.6, 0.0, -0.325], [0.6, 0.42, 0.325]], "40860cf0-4d90-409e-92dc-14e57ee94d70": [[-0.48338000000000003, -0.0, -0.49017299999999997], [0.48338000000000003, 0.482028, 0.49017299999999997]], "0fc7452c-650b-4ae1-9190-11949e669499": [[-0.48938200000000004, 0.0, -0.225049], [0.48928499999999997, 0.452579, 0.225049]], "0b856bfd-24ad-4fda-aea6-508cbe8b4db4": [[-0.436059, 3.6e-05, -0.388395], [0.436059, 0.915348, 0.388395]], "a7ec7080-7972-4dfd-9ae4-9f29e5d2a4f1": [[-1.3204, 6.86645e-08, -0.584799], [1.3205, 0.9339400000000001, 0.584929]], "4779bf60-ffdb-40ad-9933-6ea65b0be9de": [[-0.789705, 0.0, -0.42522], [0.789705, 0.522203, 0.42522]], "d53ffa68-36ce-4241-b9c6-760d132e8a5d": [[-0.24366700000000002, 5.999999999999999e-06, -0.277279], [0.24366700000000002, 0.679203, 0.277279]], "4f5aef43-e6fc-40e3-bdd2-6fc1a5c1b9ee": [[-0.937016, -7.62939e-09, -0.225], [0.937016, 0.73336, 0.225]], "056303ba-d344-4923-87ab-74fb7b33681c": [[-0.5360199999999999, -6.0281e-07, -0.577116], [0.5366620000000001, 2.01315, 0.577577]], "ce99aab4-dc1a-4e62-aadc-63b0ab6af869": [[-0.296889, 0.0, -0.26542899999999997], [0.296889, 0.6399900000000001, 0.26542899999999997]], "6a3ccc14-0ed6-435f-9182-bc6b1b8b3ca8": [[-0.404544, -0.00033408399999999995, -0.401075], [0.40452899999999997, 0.934482, 0.40049399999999996]], "6a5d45c5-bb91-3677-b053-d2a70c8657e8": [[-0.425993, 0.0, -0.468275], [0.425993, 1.069852, 0.462455]], "b01f6b57-e48d-472b-9a4b-ab600a06e0e0": [[-0.279381, 0.0, -0.289925], [0.279381, 0.854306, 0.289925]], "34253a57-677e-4c85-b5ab-569405827135": [[-1.31, 2.4979599999999998e-08, -0.169603], [1.31, 2.45, 0.169604]], "1ea566c6-6d1f-4aaf-b2b3-d1c8301ef13d": [[-1.1802599999999999, -2.66454e-17, -0.440955], [1.1803400000000002, 0.953274, 0.44165999999999994]], "7d6e3444-30d1-4b74-90e9-d4ed96a0970a": [[-0.308067, 0.0, -0.334518], [0.308067, 0.569639, 0.334518]], "b532ba4b-ccd6-481f-a097-69247e5f196f": [[-0.277559, 0.0, -0.265932], [0.277559, 0.649589, 0.26587099999999997]], "79094606-e53a-4d6d-9ddf-e1c67ea69e8a": [[-0.376533, 0.0, -0.5287660000000001], [0.376533, 0.385031, 0.5287660000000001]], "73f747d5-d635-4d0b-a098-03ce859c54ce": [[-0.696447, -0.0008516400000000001, -1.07835], [0.696033, 1.18523, 1.07948]], "3bbdb668-3515-4435-bfa8-620333eca50c": [[-0.16276700000000002, 0.0, -0.16290400000000002], [0.162903, 0.912035, 0.16276800000000002]], "0e1517db-dfa3-485f-9ccb-45a2088b011a": [[-0.935717, -1.38927e-07, -0.653438], [0.9357040000000001, 2.21696, 0.653438]], "b0e7e16a-35fe-402c-864f-5c96d6889cde": [[-0.514752, -0.00140609, -0.498487], [0.514755, 0.768403, 0.498487]], "a1e3cde8-6ddb-4e6a-897c-ecf4819761f5": [[-0.47780700000000004, -0.000466698, -0.466904], [0.478193, 0.928951, 0.46730499999999997]], "7775e100-2d18-40c7-97e7-67cb93aa0512": [[-0.273238, 0.0, -0.37247399999999997], [0.273238, 0.386004, 0.372508]], "e0505826-d306-4ab4-b521-882523c917d8": [[-0.700222, 0.0, -0.20003], [0.700221, 0.800077, 0.20003]], "80511050-1b90-38d2-9e8f-d10526a79ab2": [[-31.5941, 0.0, -35.6232], [29.4236, 63.9346, 34.9689]], "d96a5f99-7e09-4018-bf92-36669d13681a": [[-0.24664999999999998, -0.00034601399999999996, -0.0116464], [0.24665900000000002, 0.281015, 0.011651]], "2b34acc5-526b-4a6f-a4a7-ea1bea9bfbe2": [[-0.605079, -3.59642e-08, -0.273369], [0.605079, 0.86, 0.273369]], "a3d017a0-f180-45c9-b402-4abf214e0b4f": [[-0.334919, 1e-06, -0.335077], [0.334861, 0.788961, 0.334919]], "2bc4fa22-52e1-4ff9-b1fd-cfb74c5925d6": [[-0.32319000000000003, 3.8623e-09, -0.346192], [0.323933, 0.7279370000000001, 0.345346]], "2626645d-4970-4f5c-9cb3-e4b7b9e7790c": [[-0.45000100000000004, 0.0, -0.33928600000000003], [0.45000100000000004, 0.41, 0.339285]], "67205d22-8f31-4c83-88d3-783aff8721a3": [[-1.1598600000000001, -4.96166e-06, -0.535734], [1.15988, 0.824032, 0.536385]], "1adda571-cb85-4eb8-aee5-a30a010d70e2": [[-0.702919, 0.00021, -0.445463], [0.702919, 0.554123, 0.445463]], "a2ac585a-4a8e-442a-8824-bf759e6ccdbb": [[-0.6, 0.0, -0.32], [0.6, 0.748442, 0.32]], "3901466f-6f27-481a-8013-80fa6e1719e0": [[-1.59328, -1.1205500000000001e-17, -0.185], [1.59328, 2.46215, 0.185]], "d0a80bab-3684-4a5e-8c9d-d2d406a12f98": [[-0.683215, 0.0, -0.508867], [0.683215, 0.29950299999999996, 0.508868]], "41355b4d-e87a-4d7e-a0c5-a67340963ccc": [[-0.959972, 0.00046199999999999995, -0.496706], [0.959972, 0.887875, 0.49682299999999996]], "09397f3e-1b54-4056-b03e-00e174c639bf": [[-0.32451300000000005, 0.0, -0.32451300000000005], [0.32451300000000005, 0.5696289999999999, 0.32451300000000005]], "4999e7f3-520c-46e9-aa15-2104cc9bfec5": [[-1.099758, 0.0, -0.449694], [1.099752, 0.7795380000000001, 0.44933599999999996]], "684c4288-c5e1-4cce-8937-cf4234b6d426": [[-0.221346, -7.27896e-06, -0.221346], [0.221346, 0.729919, 0.221346]], "55ecdc0c-0965-4c1e-9047-195a695cb4bf": [[-0.9583750000000001, -0.000244371, -0.313967], [0.956558, 0.6596080000000001, 0.314122]], "63312500-4559-4afb-ac52-53e06ca52b57": [[-0.296093, 0.0, -0.248891], [0.296093, 0.572083, 0.248891]], "10d96d14-cea0-4da7-bd6c-c6974cadc5e3": [[-1.09509, -0.000271101, -0.37939100000000003], [1.0951, 0.737024, 0.380668]], "2f636488-0952-4ed4-b339-ebcb181aaff1": [[-0.36024, -6.962339999999999e-10, -0.107081], [0.36024, 0.42278, 0.107081]], "0daf8303-95ae-426a-bc31-efd3fb007b79": [[-1.233796, 0.0, -0.43239], [1.2336719999999999, 0.84174, 0.432345]], "9e576e17-1234-4813-8b05-1b8e0f12636a": [[-0.369746, 5.9e-05, -0.329588], [0.369747, 0.78227, 0.32959099999999997]], "20c06fcb-1f85-4e6a-b4da-99683659d821": [[-1.25876, -0.00048453200000000003, -0.517336], [1.25918, 0.824533, 0.5178119999999999]], "1c4b5e84-7607-4ec3-ac8f-c255134cc977": [[-0.598737, -2.23587e-17, -0.38790199999999997], [0.598737, 0.41, 0.38790199999999997]], "8fc39ef3-d803-441a-b1fd-b824399dcb25": [[-0.525544, 0.0, -0.298904], [0.525544, 0.34590400000000004, 0.298904]], "1c314ed8-9380-4bfe-a588-b802b51fc121": [[-1.3727269999999998, 0.0, -0.265181], [1.3727269999999998, 0.5561659999999999, 0.265181]], "86e0752a-97b8-4c8f-827d-a3f9f58a8945": [[-1.2209699999999999, -3.1832300000000003e-15, -0.17754899999999998], [1.2209699999999999, 2.59719, 0.17754799999999998]], "e2e1cf45-ef0b-4f5f-9383-114324ebe919": [[-0.405466, 0.0, -0.399009], [0.405396, 0.787035, 0.399009]], "f366b9ef-9127-405e-b263-58db5a986fcd": [[-0.283968, -1.30451e-17, -0.21696000000000001], [0.283968, 0.703511, 0.217138]], "05984bcb-a6bb-4fd4-ab8c-780edab8aa2f": [[-1.3193799999999998, -2.4522e-17, -0.424756], [1.3193799999999998, 0.869654, 0.42479799999999995]], "0b06d9e9-5850-42b8-9d41-298cb70fe366": [[-0.319867, -0.000143008, -0.261668], [0.319867, 0.5896159999999999, 0.261515]], "0328c7a4-560f-416b-8207-3bd7519659e0": [[-1.173023, -0.0, -0.518075], [1.173023, 1.022218, 0.5177109999999999]], "77cfb369-499c-3f0e-93a8-5c1da9dc380f": [[-1.387245, 1e-05, -0.542538], [1.388727, 0.723089, 0.538308]], "55b9b7e6-5a72-4276-b76d-35cb7bae88b3": [[-0.308562, 5.6662e-18, -0.128423], [0.332062, 0.576462, 0.248897]], "ef917afd-ad81-4e88-99e3-519f71937dff": [[-0.607137, -3.312e-05, -0.897247], [0.607149, 0.6828, 0.897248]], "5486f184-3f77-4176-8b75-ded62cb0a9d1": [[-2.133511, 0.0, -0.345347], [2.133512, 2.5, 0.34463299999999997]], "08f9fbbc-8ecf-4654-b510-ceb8c39c2c27": [[-0.22299600000000003, -0.0006932090000000001, -0.222253], [0.22296600000000003, 0.86973, 0.221945]], "7065774c-2898-4b09-96dd-9e687a716b01": [[-0.903851, 0.0, -0.39012], [0.903851, 0.860603, 0.39012]], "37e97473-18ba-37ba-990f-d2eef9332ac8": [[-0.453082, -0.0, -0.453083], [0.453082, 0.250346, 0.453083]], "28a8fde0-22ef-4175-9370-12ba922348aa": [[-0.18843800000000002, 2.42249e-09, -0.151423], [0.18843800000000002, 0.43744500000000003, 0.151423]], "03802a6e-f815-4eb7-b494-3cc108ffbbfe": [[-0.754016, 0.0, -0.4], [0.754016, 0.944813, 0.4]], "2e29c31c-f6e6-4771-b636-7fe1a03ad42d": [[-0.470002, 0.0, -0.17001999999999998], [0.470002, 1.2, 0.17001999999999998]], "aad4424d-e7f3-4559-a380-27eabcda4112": [[-1.15, 1.39888e-17, -0.51], [1.15, 0.785, 0.51]], "5ac05fe8-b550-4786-8e8c-c5a43c30d112": [[-1.420399, 0.0, -0.5981960000000001], [1.421704, 1.1932429999999998, 0.598132]], "d5c0c871-92d7-4424-9540-3493b7d66356": [[-0.340694, -3.07303e-05, -0.35438400000000003], [0.34088999999999997, 1.02544, 0.35471800000000003]], "72436392-4e6c-3a01-952a-eae941071c98": [[-1.375016, -0.0024790000000000003, -0.864435], [1.4153460000000002, 0.8194450000000001, 0.819889]], "4f1f16ff-9913-4445-b162-5ad73576b89f": [[-1.0432890000000001, 0.0, -0.322893], [1.04387, 0.748523, 0.322843]], "8ce582b4-4274-41e9-bd92-87922a3ef3cd": [[-0.4819, -6.666589999999999e-07, -0.4819], [0.4819, 1.46429, 0.4819]], "4be08e4f-77ec-4d01-83ba-68c002e24fff": [[-0.87983, -1.6434199999999998e-17, -0.308627], [0.879829, 2.66252, 0.308627]], "e3380b73-0f85-4e24-ba8e-66855eae3e5b": [[-0.48938299999999996, 0.0, -0.225049], [0.48938299999999996, 0.452579, 0.225049]], "0f4227d2-88a2-4c39-bfd1-6d8603c9f0eb": [[-0.194998, -0.0006506789999999999, -0.195959], [0.19598600000000002, 1.4289500000000002, 0.19480599999999998]], "cba6fc64-e773-407f-9389-a3a56ab24663": [[-0.238516, -9.10952e-18, -0.23834499999999997], [0.23846399999999998, 0.356663, 0.23832599999999998]], "dfc77c59-b8b3-4592-9f75-8e5e3b722779": [[-1.11486, -9.40719e-06, -0.46090800000000004], [1.11493, 0.919675, 0.460809]], "74ab6d93-2184-4365-bcef-c54ad1201a2b": [[-0.9094209999999999, 3.60613e-17, -1.08696], [0.91141, 1.56731, 1.08691]], "00ceae85-1f3b-471d-87ab-60672115b82f": [[-0.47952599999999995, -0.000474152, -0.485426], [0.479508, 0.8956430000000001, 0.485422]], "1bc49dd2-fbac-3c84-b674-18e33520100e": [[-0.899193, 0.0, -0.32534399999999997], [0.899193, 0.67548, 0.32534399999999997]], "0533cf8e-77a2-483e-8fce-543bd63adb18": [[-0.5975, -1.35629e-17, -0.2625], [0.5975, 0.981623, 0.2625]], "234d0e19-e0ba-457b-b01b-304a7029c324": [[-0.582075, 0.0, -0.61905], [0.582075, 0.493262, 0.61905]], "0f8fbd4d-6aa6-4f53-92e1-7fc5bb28eaf2": [[-0.342162, -0.000419571, -0.342346], [0.342532, 0.39262300000000006, 0.34152299999999997]], "2a3a8ec9-05b7-4174-9aa4-dc8fcbf167ab": [[-0.25213599999999997, -7.685230000000001e-06, -0.255695], [0.251962, 0.529212, 0.255542]], "f857549a-57d7-4026-96f5-3b3d60b48c9a": [[-0.303293, -5.33564e-05, -0.303258], [0.303293, 0.293375, 0.303219]], "4a45a893-ed0c-4f36-9941-31fad9d03e53": [[-1.05444, -0.000356661, -0.448505], [1.0544499999999999, 0.8220010000000001, 0.44783]], "9395899b-6f65-4fcd-b352-8dd64d5098a2": [[-0.42934300000000003, 0.0, -0.398196], [0.42934300000000003, 0.8934780000000001, 0.39826999999999996]], "9603344b-99b8-43db-abf0-73c7eaf0ea5f": [[-0.310743, -1.65833e-17, -0.29996300000000004], [0.310743, 0.548509, 0.29996300000000004]], "be381670-e762-4b0e-b825-9095c8aee519": [[-0.305943, -0.000221652, -0.30304], [0.306207, 0.6021350000000001, 0.302653]], "8271423a-cb03-4186-a475-1817bd9af3fc": [[-0.7845869999999999, 1.52588e-08, -0.159736], [0.7845869999999999, 1.12743, 0.159736]], "58693e2b-da27-47ff-94a7-bcaa8e3ba207": [[-0.24311800000000003, 1.14672e-17, -0.24099], [0.242521, 0.41566899999999996, 0.241088]], "6132dd65-21cf-3e28-9ab3-4ea659d11be5": [[-0.722616, 0.001099, -0.356943], [0.722637, 0.76047, 0.363003]], "d0050550-ab70-4a0e-b334-4b6358cf97a3": [[-0.6580370000000001, 1.33514e-08, -0.220666], [0.6580370000000001, 0.7262000000000001, 0.220665]], "de94c62f-4352-4853-84c6-63e2e94185e5": [[-0.8785980000000001, 6.23168e-17, -1.0608899999999999], [0.8785980000000001, 0.9398019999999999, 1.0608899999999999]], "932caad9-022d-4a6d-a5e9-32145b16833d": [[-0.325925, 0.0, -0.354792], [0.325925, 0.9712390000000001, 0.354792]], "0034935b-20a0-45e6-b2a5-9bff89a94198": [[-1.240697, 0.0, -0.399191], [1.240275, 0.817842, 0.398779]], "2363c335-d0b1-42cc-9c21-20e9b21341dc": [[-1.04978, 0.00047472599999999997, -0.74995], [1.0493899999999998, 0.6988949999999999, 0.749879]], "2c7d302b-d750-48cd-97c9-e13f6da9c783": [[-0.255071, 0.0, -0.306424], [0.25512, 0.870248, 0.306504]], "211afccd-ca29-3845-958d-2325f600929e": [[-45.675, 0.0, -45.675], [45.675, 81.9237, 45.675]], "e95f8ddc-4c2c-4c4f-9c7b-8c812b5eded3": [[-0.26117, 0.0, -0.26117], [0.26117, 0.552202, 0.26117]], "7204b5f7-8e5c-3109-b2d7-3ab9ad647463": [[-0.408648, 0.0, -0.408648], [0.408648, 0.8507009999999999, 0.408648]], "df67f0bf-1b5d-4413-96d3-b90ec572ba26": [[-1.3032499999999998, -3.12927e-12, -0.481584], [1.3032499999999998, 0.75184, 0.481584]], "a155a902-6ffc-4f61-9429-59d0717c754e": [[-0.103909, -4.82402e-10, -0.109828], [0.103902, 0.63906, 0.109903]], "c2aa13c4-04be-4bb3-bdbc-b118feeef460": [[-0.315, -9.71395e-18, -0.19635999999999998], [0.315, 0.513, 0.19635999999999998]], "44abbdf4-9e92-46b7-92da-7c60e35d6d59": [[-0.976725, -0.000162514, -0.581442], [0.976965, 0.854214, 0.583174]], "c69c92e1-0ab4-4878-8b22-c9ac54103928": [[-0.9934860000000001, 0.0, -0.20000199999999999], [0.9934860000000001, 0.9, 0.20000199999999999]], "20849fea-97d7-47f2-bb5e-7d3819482b9a": [[-0.841413, 2.86719e-08, -1.15775], [0.841413, 1.63994, 1.15775]], "4a09b8a2-dce7-4912-9f95-a52d411de7f7": [[-1.077537, 0.0, -0.44995399999999997], [1.076647, 0.925611, 0.45048900000000003]], "cfa158a1-24a3-4f00-a999-ef7c64aa4f44": [[-0.760387, 1.07018e-17, -0.21704], [0.760387, 0.845312, 0.21704]], "bf92a921-f72d-4399-82a3-b63a171f8a88": [[-0.277468, 9.05311e-05, -0.274822], [0.27753, 0.268731, 0.275681]], "50148ba9-5ba4-42d7-8670-6983802c1996": [[-0.5, 0.0, -0.15], [0.5, 1.1054789999999999, 0.15]], "238d3e68-90aa-49b0-a361-06ad72932347": [[-0.654999, -1.00732e-08, -0.281808], [0.654999, 0.899704, 0.281808]], "6ec8a921-13c3-4240-a817-efbf3a671ffd": [[-0.628741, -8.421359999999999e-05, -0.261901], [0.630178, 1.9155600000000002, 0.262525]], "72cddb5d-d8bb-4e45-b86f-dbb44374319b": [[-1.62879, -0.000471545, -0.890535], [1.6286600000000002, 0.931508, 0.8893070000000001]], "63739ec5-4027-4ed8-8083-4f121afca0b4": [[-0.735884, -8.58307e-09, -0.222164], [0.735884, 0.849924, 0.222164]], "f7dce3bd-31e7-44ac-ba84-c5098c46f6fb": [[-0.339616, 0.000104, -0.337551], [0.339959, 0.8038989999999999, 0.33757800000000004]], "2c43c760-2340-4151-becf-27ca4fb194f4": [[-0.24968800000000002, 0.0, -0.247955], [0.246222, 0.637527, 0.247955]], "82ce3056-03b2-4ff8-9ba2-f4afb9456e45": [[-0.626088, 1.2207e-07, -0.285598], [0.626088, 0.752393, 0.286088]], "732f3a72-7536-446d-b765-e96d99ac8e94": [[-0.56, 0.0, -0.559985], [0.56, 0.767107, 0.56]], "3e601900-792a-4a63-afd5-4087b7c02d0f": [[-0.39989800000000003, 0.000771, -0.39989800000000003], [0.399973, 0.40700000000000003, 0.39989800000000003]], "83f72371-11c5-4edd-89b9-95b2388888d0": [[-1.47476, 0.0, -0.361264], [1.47476, 2.3777500000000003, 0.362032]], "f5411f08-a573-4f9a-8c06-323e91a49997": [[-1.27888, 1.52588e-08, -0.29354600000000003], [1.27888, 0.6760280000000001, 0.29354600000000003]], "192febf7-cfa8-4325-8c0d-e020e92dea63": [[-1.0162900000000001, -5.50879e-17, -1.0011400000000001], [1.01792, 0.893236, 1.00113]], "899b2af9-a84b-479e-ad12-1696f554a53b": [[-0.25867, -7.62939e-09, -0.25867], [0.25867, 0.5473490000000001, 0.25867]], "4d14baeb-0b49-4522-8792-b403a7ab67a1": [[-2.0162, 9.81621e-18, -0.160314], [2.0162, 2.5, 0.160314]], "62a3ffef-5a0d-427b-8885-a151656dca2e": [[-0.7772169999999999, 0.000201, -0.87062], [0.77727, 0.9435380000000001, 0.871977]], "f19829e2-601b-4118-a179-4e65ccca8279": [[-0.39655799999999997, -0.000225052, -0.395185], [0.396633, 0.921944, 0.395989]], "08c0e449-6678-48bb-b508-fdcec173f893": [[-1.057088, 0.0, -1.203163], [1.0563120000000001, 1.34711, 1.203163]], "7a7aee1a-5865-4048-bd88-b878cfbeaa92": [[-0.9721639999999999, 0.0, -1.159651], [0.972167, 1.268513, 1.1594039999999999]], "de92ce2e-84e1-44cd-961e-3f981171de6f": [[-0.476516, -9.53351e-05, -0.441882], [0.47686100000000003, 0.8382850000000001, 0.441912]], "ae511bec-d70d-4347-b7d0-9836d9a37f60": [[-0.9, -1.83697e-17, -0.3], [0.9, 2.4, 0.3]], "81340393-8e2e-47a0-9ea9-0d09de2fcc83": [[-0.65, -1.64996e-07, -0.395745], [0.65, 0.434175, 0.395745]], "ef925bf6-7316-44c2-a1bc-d4c9affee562": [[-0.371567, 7.62939e-09, -0.228301], [0.37158, 0.601295, 0.228301]], "c2585426-1d3d-4772-bd27-dd0e4e74e61d": [[-1.256921, 0.0, -0.328219], [1.257008, 1.501576, 0.32813200000000003]], "5648b80e-7b48-44d8-bb34-e47b44d98e67": [[-0.965011, -1.18884e-17, -0.232635], [0.965011, 0.46564999999999995, 0.232635]], "a752d0d3-e753-4196-bd26-e028de65ae9d": [[-0.147591, 0.0, -0.112904], [0.147591, 0.37912399999999996, 0.112904]], "22b56773-8cd2-4da9-94bc-baeda184a00f": [[-0.8488519999999999, -1.9115000000000002e-06, -0.928292], [0.8488509999999999, 1.2244599999999999, 0.928285]], "497cd032-1332-4d2f-8d96-9bbcf4ff1657": [[-0.850605, -1.27777e-08, -0.44432699999999997], [0.851501, 0.796404, 0.442019]], "ed26c82d-abad-4b7d-85ac-13aa5d333d20": [[-0.914384, -0.00179791, -1.09178], [0.913734, 1.14179, 1.09313]], "f359bfc0-b006-43c6-95b8-49980a14f14a": [[-1.22616, -2.3037100000000002e-17, -0.47098999999999996], [1.22664, 0.8966970000000001, 0.47113]], "8afe5eda-388d-4853-abde-4d86d0ec3fa3": [[-1.10204, -4.14041e-17, -0.7590819999999999], [1.10204, 1.90517, 0.758821]], "4a18e45d-05a1-4d21-9fb3-b53996157b14": [[-0.21799700000000002, 7.10543e-18, -0.225032], [0.217827, 0.970159, 0.225049]], "03d02fff-4997-4176-98a7-4880126e1957": [[-0.523512, -0.000251309, -0.294259], [0.5231819999999999, 0.242169, 0.29431]], "4379f5d9-10e6-4a37-8195-b6ca38ee5dd9": [[-0.496098, 0.0, -0.150379], [0.496098, 1.23872, 0.150379]], "4208bb28-b006-4701-affa-c5df5f1f2f86": [[-1.26827, -0.0010015, -0.492364], [1.26832, 0.8821040000000001, 0.492095]], "37eb8e2d-319f-4c1a-88b3-c12978eb4d95": [[-0.6121909999999999, 1.59872e-17, -0.607127], [0.611695, 1.86572, 0.606651]], "2721a924-1b5b-4e8c-9d7b-fe3aa4a5fc5f": [[-0.930191, -0.000500047, -0.318199], [0.9293290000000001, 0.662455, 0.317634]], "eb8ce439-cb02-4f7d-984b-9393cbe0822e": [[-1.58101, -4.50156e-06, -0.355002], [1.5805799999999999, 2.38902, 0.35499899999999995]], "c1e3919a-f707-4bc7-9b0b-e7c13c315bf9": [[-1.3082079999999998, 0.0, -0.524568], [1.3082079999999998, 0.7245820000000001, 0.524537]], "36a8ee08-14c3-4380-ae0e-1a66525aa7f5": [[-0.454326, 8.38777e-18, -0.136983], [0.454326, 1.15979, 0.136983]], "06a02e7c-af9d-42b9-a112-b0c7357c1bd7": [[-0.261427, 0.0, -0.279347], [0.261438, 0.922152, 0.279397]], "70f3d11d-a240-43cc-afe6-8b641a6d9823": [[-0.7509999999999999, -1.54144e-17, -0.327611], [0.7509999999999999, 2.3609999999999998, 0.327611]], "1125b207-30eb-41f8-9164-05630e87f80d": [[-0.193836, 0.0, -0.160834], [0.193836, 0.389661, 0.160834]], "2a13ae2d-b9fb-4dfe-9679-762afdee3bde": [[-0.918132, 1e-06, -0.398864], [0.918014, 0.748935, 0.398864]], "1cd2e61b-9fa2-4942-95b6-b6d90a65d605": [[-1.0269599999999999, 1.80021e-17, -0.303997], [1.0269599999999999, 2.66367, 0.303997]], "126908c4-e8aa-456b-b459-7b3b0527de6f": [[-1.40006, 2.3189e-06, -0.5500079999999999], [1.4016300000000002, 0.771227, 0.551666]], "183b00de-007d-411b-b412-19ada1b691c6": [[-0.35263599999999995, 0.000223, -0.358029], [0.35263599999999995, 0.890826, 0.358078]], "c6977084-5f7b-4560-90ca-8caf45f04db1": [[-0.586749, -1.87255e-17, -0.587005], [0.586594, 0.746066, 0.5866669999999999]], "24297c29-b236-4136-8787-8913d95802e3": [[-0.85301, -0.00019627700000000002, -1.16674], [0.852354, 1.09867, 1.1673499999999999]], "54d8c952-1a99-4fbc-9105-7249eea8f2a0": [[-0.641656, -1.5131700000000001e-05, -0.351231], [0.6413559999999999, 0.394966, 0.351836]], "1fd55b49-a16a-46b1-a196-e6d00b4ec179": [[-0.34057499999999996, -3.7871499999999996e-08, -0.341625], [0.340006, 0.747565, 0.341513]], "652a02e8-1f3d-473a-8385-0aba748e75e8": [[-0.6786270000000001, -1.21546e-17, -0.2005], [0.6786270000000001, 0.579893, 0.2005]], "a4fdd504-6829-400c-a5e2-4a0cf82d84e3": [[-0.304242, 0.0, -0.304531], [0.304257, 0.779347, 0.304454]], "3b0f16c1-2e0f-4c52-ba9c-3c69c50e3ec4": [[-0.905368, -1.0264599999999999e-17, -0.255722], [0.905368, 0.7353459999999999, 0.255722]], "1f3cd790-4f0d-4cef-ba58-d33e43451637": [[-1.1, 5.14352e-18, -0.115], [1.1, 2.0, 0.115]], "1ebb42d5-c360-4b6e-814b-a80e00972e90": [[-0.508412, -0.000116362, -0.283501], [0.5081, 1.23066, 0.28380500000000003]], "1cd5ab9f-8b14-4894-8d4d-319cba4cb0ca": [[-0.65, -7.593010000000001e-18, -0.225], [0.65, 1.1715900000000001, 0.225043]], "de2a27c9-aa87-4ca4-b1e4-6f3e814a093f": [[-0.17495999999999998, 0.0, -0.208535], [0.17495999999999998, 0.8143290000000001, 0.208535]], "7a57580e-5d17-4f91-9c3e-d5a1d332e630": [[-0.899326, 0.0, -0.19502300000000003], [0.899326, 0.709573, 0.19502300000000003]], "c34c0997-0288-4a02-be98-a94112a28a93": [[-0.6679309999999999, 2.5272399999999998e-08, -0.311692], [0.6679309999999999, 1.92626, 0.311692]], "fc466ee8-f68c-45ea-9915-54230f765f68": [[-0.25, -1.07234e-18, -0.216507], [0.25, 0.450017, 0.216507]], "125aaaa9-d959-4a02-b5b1-371419b0af97": [[-1.25834, -2.9754000000000004e-17, -0.45801400000000003], [1.25824, 0.96356, 0.45856499999999994]], "43ba505f-1e4e-41ce-aabe-b45823c6b350": [[-0.804625, -1.94829e-09, -0.225147], [0.804625, 0.536142, 0.225147]], "8075c656-aa3e-4341-ad25-c0bc88206cee": [[-0.457961, 0.0, -0.725823], [0.457961, 0.27856400000000003, 0.725583]], "5fa11d54-53f7-4b9e-9d8f-07012eba4e90": [[-0.276136, 0.0, -0.267429], [0.276136, 0.860719, 0.267429]], "4815c3ab-4ef7-4985-a354-c8a7fcb14576": [[-1.38242, 0.0005853950000000001, -0.52737], [1.38242, 0.8013429999999999, 0.52692]], "7c562d19-717f-4b7e-a961-4b04d042a224": [[-1.10142, -1.4748199999999999e-05, -0.47984000000000004], [1.10082, 0.911853, 0.479751]], "436dca96-2efc-467a-b04e-485a835adcfc": [[-0.5841470000000001, -0.0, -1.0776810000000001], [0.585608, 0.948849, 1.0776810000000001]], "76a2be55-eb07-4665-8a5a-19c03aa2f6c6": [[-0.49738, 0.0, -0.464395], [0.49738, 0.705813, 0.464395]], "281043c7-4430-4b31-91b0-3c24f1bc13e6": [[-1.6042500000000002, -0.00124931, -1.00135], [1.6043, 0.86911, 1.00184]], "2e0c52c6-5abd-4c76-87a2-8112e3fc7e14": [[-0.515563, 6e-05, -0.43462], [0.515563, 1.064854, 0.434881]], "f3275068-93d6-4943-af4e-65bb45d29f16": [[-0.214145, -8.76555e-06, -0.214145], [0.214145, 0.763468, 0.214145]], "753be339-69a9-44e1-92cd-e7471161a7d0": [[-0.5045689999999999, -1.74547e-08, -0.5045689999999999], [0.5045689999999999, 0.44033, 0.5045689999999999]], "0737c1e0-1376-4a7c-867b-d2cc813922fd": [[-1.25, 0.0, -0.523336], [1.25, 0.7509999999999999, 0.523336]], "83d2c5b4-36cd-3e91-a48c-fb86c3d9a46b": [[-0.97919, -0.0, -0.479402], [0.97919, 0.8500270000000001, 0.479402]], "b420cdd1-cdc3-4e18-83cd-b22b4a1cad39": [[-1.019928, 0.000736, -1.1806050000000001], [1.023663, 0.9549970000000001, 1.180283]], "571fa98c-fe27-4f4b-a653-12a1517a646f": [[-0.24190799999999998, 1.3e-05, -0.287153], [0.24190799999999998, 0.543307, 0.287153]], "ac903435-733a-450a-9353-70e135c4db1f": [[-0.8636780000000001, -0.0036325000000000003, -0.452631], [0.8639140000000001, 0.9471219999999999, 0.45191200000000004]], "191559fc-ad20-40b5-8390-2dd8b9b00466": [[-1.60605, 0.0, -0.508792], [1.6046500000000001, 0.783611, 0.5097039999999999]], "ce6be30d-2b99-4813-9257-b7c9803b62ce": [[-0.751257, -3.13066e-05, -0.358315], [0.751109, 2.1101, 0.358315]], "47b832c2-ca3c-444f-a7cb-0130dbfb8270": [[-0.20001000000000002, -1.55786e-06, -0.199958], [0.20023, 0.6875230000000001, 0.199929]], "bb0a025a-2bee-4a6e-96d3-9559d8a56e3e": [[-0.542284, 1.31998e-17, -0.234363], [0.542284, 2.46536, 0.234363]], "6e6ae029-62ff-4f0c-8f8c-42a1db699b45": [[-0.41213099999999997, 0.0, -0.38398000000000004], [0.41213099999999997, 1.142234, 0.38421799999999995]], "e94bb5c7-9122-47c3-8b30-0c6bc52041bc": [[-0.380432, -0.000127598, -0.426599], [0.38027099999999997, 1.0442799999999999, 0.426697]], "2caa7fad-b64f-490d-9bdf-8dc93d3ce262": [[-1.1022100000000001, 1.80021e-17, -0.303997], [1.1022100000000001, 2.66367, 0.303997]], "b89365d5-59dc-41d2-9480-4e042b284d1c": [[-1.073232, 0.0, -0.472291], [1.074088, 0.803275, 0.472444]], "41d9f67d-7064-4a54-9181-83ea2403dc63": [[-1.0253700000000001, 0.0, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "1f7ba0ff-95b7-4fb1-8a39-412568de4b1b": [[-1.079019, 0.000364, -1.249947], [1.0793300000000001, 1.1449850000000001, 1.249947]], "0827d723-3b66-4db4-954f-f586aa59fba7": [[-1.4675399999999998, 6.10352e-08, -0.20883600000000002], [1.4662600000000001, 2.4578100000000003, 0.20883600000000002]], "549eba4e-2479-34ae-9f50-1f8a09e64d7c": [[-0.235, 0.007332999999999999, -0.260757], [0.235, 0.927384, 0.22604600000000002]], "23aeb441-8914-3497-b5f5-3d834a0d45d2": [[-0.34716500000000006, -0.000236, -0.314133], [0.34694, 0.689927, 0.32752200000000004]], "54e9a71e-d4eb-43e2-bede-5b4c406894ea": [[-0.8548180000000001, -3.4506e-08, -0.197352], [0.8548180000000001, 0.84273, 0.197352]], "2ef39c4c-d2ff-4378-907a-a26fff4ab1a2": [[-0.35, -2.14313e-17, -0.35], [0.35, 0.120728, 0.35]], "7fabb243-e90c-4dbb-bca1-03a94462bde9": [[-0.760596, 0.0, -0.498401], [0.760596, 0.735526, 0.498401]], "c921d3bd-0674-4632-be66-52e5639a030f": [[-0.728005, -1.9195299999999998e-17, -0.430428], [0.728005, 0.744437, 0.430428]], "7210071b-c7e0-4d28-b920-fc6f1631c97e": [[-1.08413, -1.52588e-08, -1.17478], [1.08413, 1.44239, 1.17434]], "6b87c6c5-29c9-3843-8c07-764439a6dbf1": [[-109.0304, -0.0002, -56.4164], [109.0304, 91.2372, 73.704]], "29ed0e9c-02ae-4404-a8dd-f6f178dc79b4": [[-0.649998, 1.52588e-08, -0.225501], [0.6500440000000001, 0.86, 0.225521]], "c7c94aee-60db-4f9a-a071-3e26387438bd": [[-1.353524, 0.00024400000000000002, -1.358254], [1.3534800000000002, 1.662338, 1.358255]], "054692bc-e025-4cae-8661-b9eab6e9ccfd": [[-0.472667, -0.0005284339999999999, -0.5149320000000001], [0.472633, 1.42032, 0.514991]], "b270023c-c898-43c1-b58d-967e1c5f2e70": [[-0.28741700000000003, -0.000280685, -0.232546], [0.28741700000000003, 0.48796700000000004, 0.232546]], "78200e82-89bf-4ae4-a2fe-7f3449c48fdd": [[-0.906834, 1.31536e-07, -0.252043], [0.906558, 0.44990600000000003, 0.25192]], "85c6562f-1e32-4dbe-a2f4-f2e7ad32ab02": [[-0.402, -1.32091e-17, -0.275279], [0.402, 1.38673, 0.275279]], "2033c954-5a48-46d7-a20f-907d39171d1e": [[-0.564434, -2.31702e-09, -0.5346150000000001], [0.564434, 0.383001, 0.5346150000000001]], "65b5062b-666a-3c3c-a465-bb43291d0e66": [[-0.27514900000000003, 0.000221, -0.267341], [0.27514900000000003, 0.7402500000000001, 0.245159]], "35e16327-efbe-4dde-93f8-42c88b501659": [[-0.401746, -0.0009372610000000001, -0.24402100000000002], [0.40131500000000003, 1.47984, 0.243723]], "d1d0b72d-4100-4d07-8f06-4475aa215bb8": [[-0.686712, 8.2e-05, -0.435372], [0.68663, 0.343356, 0.435372]], "e9dfeb99-970f-42cc-9e7a-786d2119b27a": [[-0.22724799999999998, 0.0, -0.20424499999999998], [0.22724799999999998, 1.0140470000000001, 0.20424499999999998]], "2b6ddc8c-780c-4b2b-9195-609279aad321": [[-1.04615, -0.0010502, -0.319384], [1.04612, 0.8644339999999999, 0.31942]], "ce7e520b-1804-4ebc-841e-0877a18e35c9": [[-0.2125, -8.256640000000001e-06, -0.2125], [0.2125, 0.540345, 0.2125]], "544b5284-24ab-4085-9527-62325c3915d2": [[-1.3687, -0.005869760000000001, -0.550922], [1.3713399999999998, 1.12297, 0.550507]], "0c26f980-9c40-4bcf-969d-d315c9715ab8": [[-1.5225030000000002, 0.0, -0.463653], [1.5225030000000002, 0.796882, 0.463653]], "243552ad-7103-4b1f-a281-9fdf787fd344": [[-1.790001, 0.0, -0.20388799999999999], [1.790001, 2.44, 0.20383800000000002]], "3f4d9136-8cc9-4b63-a04b-98e2141f964f": [[-1.3, -4.7104800000000005e-09, -0.300001], [1.3, 0.650082, 0.300001]], "3a76e18c-eb81-42dc-a9aa-7cb1ef63cbae": [[-1.1297249999999999, 0.0, -0.41944699999999996], [1.130101, 1.013314, 0.419456]], "7b7d71f8-cba8-4a7c-8708-f22ceb478460": [[-0.34244199999999997, 5.77687e-08, -0.34061300000000005], [0.342175, 0.984325, 0.340615]], "6a75a795-2595-4710-95ce-a069b0bb3546": [[-0.308571, 0.0, -0.363089], [0.308571, 0.8450620000000001, 0.363078]], "e8172cc1-fa04-49c8-aaf6-50874a0bc0f6": [[-0.805061, -6.04556e-17, -0.998656], [0.8052790000000001, 0.980133, 0.997572]], "23716c11-4f82-4534-b744-e9e11e9912ec": [[-0.43548200000000004, -0.000139975, -0.39509099999999997], [0.43678400000000006, 0.912478, 0.39500399999999997]], "cdd80b05-133b-45bb-9d17-61398161370d": [[-0.302493, -1.35533e-17, -0.226658], [0.302493, 0.722561, 0.226658]], "fc03ac5e-d92d-4476-96f0-a0359927e831": [[-0.24090299999999998, -8.30265e-18, -0.273954], [0.24090299999999998, 0.678642, 0.273954]], "de9d6511-cfcc-4894-82f9-8fe2f6d062d3": [[-0.996824, -0.0, -0.557929], [0.995539, 0.931867, 0.558255]], "5be3a969-b044-4c4c-ac85-561247dac9d0": [[-0.9976949999999999, 8.4e-05, -1.145659], [0.998147, 1.6308189999999998, 1.144103]], "6983d098-d395-4c4e-9fd5-8f7daac89b8a": [[-0.5187890000000001, 0.0, -0.5187890000000001], [0.518175, 1.092188, 0.5187890000000001]], "d06b6e1c-3a51-4dd3-b7d6-d877f9d1c046": [[-0.865438, -1.2459e-17, -0.29645499999999997], [0.865438, 1.91994, 0.295705]], "23ffc5e8-5b6a-415f-835d-db3e65d23501": [[-0.312487, -2.38419e-10, -0.312487], [0.312487, 0.212571, 0.312487]], "6e50c51a-0156-4028-be70-5c307953fde5": [[-0.348396, -0.000258048, -0.339186], [0.348471, 0.981746, 0.338503]], "2364f982-e6ae-4752-bd43-d683b666975b": [[-1.1048, -0.00067066, -1.0486199999999999], [1.1074, 1.42221, 1.0486199999999999]], "0eca2caa-1ed2-40f9-a54b-57f613faa655": [[-0.23325600000000002, -8.452920000000001e-07, -0.23348400000000002], [0.23324, 0.527735, 0.23324999999999999]], "62d258bc-0648-4605-8b0e-5c14d162ba33": [[-1.1819790000000001, 0.0, -0.449133], [1.1819790000000001, 0.800797, 0.448763]], "69e270b3-9354-4f92-a397-08099b189d3e": [[-0.17187000000000002, 0.0, -0.17782900000000001], [0.17187000000000002, 0.486773, 0.17782900000000001]], "e6f49a2f-b414-40a0-a998-d5eaaa790734": [[-1.0583, 6.18284e-17, -1.13844], [1.05836, 1.15036, 1.1375]], "15a04335-6294-4394-bc92-77e716e64226": [[-0.50881, 0.0, -0.494726], [0.50881, 0.895821, 0.494726]], "ba8913a7-2cc5-4a48-a4e2-dbcaf2e35b84": [[-0.269676, -0.000307591, -0.294812], [0.270277, 0.278253, 0.295078]], "72bfeae7-61de-4129-b9ef-1f23b912ab5d": [[-0.6100059999999999, -9.01197e-11, -0.610002], [0.610002, 0.352503, 0.610002]], "dbacecbb-f5a7-430e-8244-b1af523a6684": [[-0.237713, 0.0, -0.247985], [0.23771, 0.9417650000000001, 0.247849]], "1cba05cf-7cce-4578-9f7f-856442eb8762": [[-0.6139, 0.0, -0.42139000000000004], [0.6139, 0.37920099999999995, 0.42139000000000004]], "43781675-a00c-427a-a7aa-255f4225e69c": [[-1.31225, -0.0, -1.432733], [1.31225, 1.396981, 1.432]], "085bcfd8-4f84-46a6-a5cf-43884364d41b": [[-0.304258, 1.1205800000000001e-07, -0.29678], [0.304258, 0.830299, 0.296821]], "19356d45-e02b-4597-9493-fcf990392566": [[-1.3510400000000002, -9.70275e-08, -1.29208], [1.3510400000000002, 2.23302, 1.2913999999999999]], "3fb65cf5-f329-46f5-b12b-31ee1cccdada": [[-1.025371, 0.0, -1.060482], [1.025371, 0.969729, 1.060482]], "522af54c-7156-4289-a59f-aef8cb000d83": [[-0.84979, -1.58829e-07, -0.28014500000000003], [0.8497910000000001, 1.92358, 0.28052900000000003]], "e4f40540-ab9f-44eb-8373-27beb51d7641": [[-0.275, -1.24216e-17, -0.217472], [0.275, 0.5, 0.217472]], "18cf9b28-c807-4b3d-8bc9-c18890235426": [[-0.75, -1.00727e-17, -0.2], [0.75, 0.4, 0.2]], "0fd58d11-12ed-421e-ae1b-9efaf355257c": [[-0.9265479999999999, -0.00023531, -0.37804099999999996], [0.9265479999999999, 0.8458199999999999, 0.37707799999999997]], "262bcf58-f0c2-4a7a-bd98-aafac3be14a8": [[-1.12646, -0.000922808, -0.547907], [1.12653, 0.602269, 0.547647]], "67df8de8-fe77-35e0-a7d4-b54552e0e36b": [[-0.612374, 0.010029, -0.612374], [0.612374, 0.76402, 0.612374]], "0de60f95-775b-3a78-bd06-e2b04a309c4f": [[-0.26135200000000003, -0.00010899999999999999, -0.276297], [0.26135200000000003, 0.7762690000000001, 0.281854]], "db7e29f1-359b-4cd3-8372-d51484da8a6f": [[-0.494335, 0.0012839999999999998, -0.207972], [0.495008, 0.784799, 0.207269]], "3c6a5d71-fb59-4e09-8e30-73ad7d5120a7": [[-0.366453, -0.0010534000000000001, -0.366453], [0.366453, 0.669516, 0.366453]], "43b586c5-37b3-4c9b-bf51-7bcde22b28b7": [[-1.31204, -4.7142e-05, -0.485811], [1.31195, 0.8616779999999999, 0.486239]], "0fc358f1-924a-41b9-9c09-5b9ec0f71029": [[-1.06335, 2.4301600000000003e-08, -1.05914], [1.06335, 1.31291, 1.05933]], "46eb0d2f-72a0-430c-bafc-06cc63a9afea": [[-1.0, 7.62939e-09, -0.218], [1.0, 0.53, 0.218]], "2d30236d-a98b-48b4-9610-bd309395a465": [[-0.6714319999999999, 0.0, -0.534694], [0.6714319999999999, 0.463431, 0.534694]], "3ab2e104-be5b-4617-a849-306ccb29c0ac": [[-0.33439599999999997, 4e-06, -0.28074], [0.334416, 0.76708, 0.28089600000000003]], "608751a3-c396-44d2-b44e-a3148b724c4b": [[-1.386396, 0.001495, -0.7393569999999999], [1.38799, 0.801991, 0.739341]], "f21f4e6b-7167-46c0-bd00-cf7c50c8713e": [[-0.268765, 0.0, -0.268765], [0.268765, 0.5555939999999999, 0.268765]], "9cba2ff3-4b9f-49ed-b5f7-c526ad7a4e24": [[-0.077912, -0.0, -0.077912], [0.078618, 0.617297, 0.078618]], "23bf7255-9658-37c7-9440-bdf470dee94d": [[-0.9, 0.0, -0.220597], [0.9, 0.721234, 0.220597]], "d04d672b-5908-40b4-bdce-28b236ab9e09": [[-0.34370199999999995, 8.800000000000001e-05, -0.376629], [0.343756, 0.7582450000000001, 0.376729]], "606790c1-d7bd-44e9-9382-54f00b25e1ac": [[-0.40659999999999996, -2.8147699999999998e-05, -0.242929], [0.40659999999999996, 0.9144549999999999, 0.243015]], "dc54f630-fefc-4f14-869c-7c6795273c0b": [[-0.480157, 0.0001889, -0.44321699999999997], [0.479664, 0.914992, 0.444351]], "66c09795-3451-408c-8f0d-67fa7e078a1e": [[-0.24032399999999998, -1.4837399999999998e-17, -0.225], [0.24032399999999998, 0.499127, 0.225]], "0c71a9d6-a637-4f1a-aff1-83940165a85e": [[-0.800822, 1.57785e-08, -0.964451], [0.7999550000000001, 1.05299, 0.9641639999999999]], "5746f841-ebfc-4485-b85e-55d930150297": [[-0.17302099999999998, 0.0, -0.17302099999999998], [0.17302099999999998, 0.36957700000000004, 0.17302099999999998]], "be4c05d1-de37-4dad-99f6-5024ab8a61e4": [[-0.764219, -1.61617e-17, -0.316093], [0.764219, 0.9658289999999999, 0.316104]], "1d3db9f7-0a1b-487b-b6d3-a70db74e1349": [[-0.25920000000000004, -1.61229e-17, -0.300624], [0.25920000000000004, 0.88385, 0.300309]], "4ca6eb5f-1320-3853-ae9d-b38eab97dfdf": [[-43.2473, 0.0, -38.2403], [43.2473, 77.5224, 37.9947]], "1f21d52e-7b78-43ca-aef8-d5dd939f3e35": [[-0.189513, -1.56868e-05, -0.189378], [0.189269, 1.0454999999999999, 0.189386]], "ec527f87-44b7-4f2a-9176-9d07576fe204": [[-0.226903, -0.0, -0.228961], [0.226903, 0.624373, 0.228961]], "114169a4-522a-44db-8c6a-0c1ab6822e94": [[-0.32361199999999996, 0.0, -0.28522200000000003], [0.323765, 0.7911969999999999, 0.285263]], "02190a8e-1841-4b11-80b0-c9c5e6e6ca01": [[-0.7553, -1.33514e-08, -1.0837], [0.7553, 0.875466, 1.0837]], "802a349d-e90e-4ae2-b5ce-18ea92d00578": [[-0.08999599999999999, 0.0, -0.092501], [0.08999599999999999, 0.6411450000000001, 0.092501]], "0e52b4f2-06df-4339-bb20-5772d740ed82": [[-1.65649, -6.97287e-17, -1.25645], [1.6565299999999998, 0.8457779999999999, 1.25624]], "197139e1-54f0-4875-a1fa-d28622dfa36c": [[-0.7169490000000001, -0.000197856, -0.136061], [0.7169490000000001, 0.47111, 0.136061]], "5fe741d1-be2e-494d-b2ae-7127f84a50e0": [[-1.05003, -0.000290695, -1.4282400000000002], [1.05003, 1.15963, 1.42742]], "2bba3e93-a195-4af7-949d-ab8b3e9c64c9": [[-1.12852, -6.3634e-17, -1.12616], [1.12789, 1.3650499999999999, 1.12653]], "0223c3f7-887d-4093-bb72-7547fc7fccac": [[-0.750547, 0.0, -0.208342], [0.750548, 0.9138930000000001, 0.208526]], "6f3927bf-aa7b-4bd3-baa2-784f69f2080c": [[-1.327339, 0.001964, -0.53821], [1.3273380000000001, 0.942896, 0.53821]], "6cb10f32-1a3d-4356-be5a-6ac50d1e268b": [[-1.18722, 1.77425e-17, -1.1956499999999999], [1.1878, 1.60021, 1.1956499999999999]], "4d0e2ae4-4ff5-45db-a651-4f376890b6c0": [[-0.982331, 5.12796e-07, -1.07378], [0.98234, 1.5796199999999998, 1.07378]], "1cc42bb7-32eb-49a4-94a4-91ca5717be33": [[-1.075148, 0.00043799999999999997, -1.249947], [1.079405, 1.1449850000000001, 1.249947]], "0075c272-7659-4f43-89f5-8589d2036930": [[-0.937919, 0.0, -1.152076], [0.938381, 1.4726169999999998, 1.150914]], "41601bc0-d767-47b3-9a12-dc591cceef5f": [[-0.356069, -0.000273407, -0.286106], [0.35641399999999995, 0.697314, 0.286107]], "7d19fc57-09a2-493f-9f78-09867463380f": [[-0.6000030000000001, -0.000338336, -0.600028], [0.600053, 0.39996899999999996, 0.600011]], "4dd5b2de-3ec3-4e13-9d5f-b374bbeaf6de": [[-1.13228, -4.882920000000001e-09, -1.13211], [1.13207, 1.2, 1.13211]], "7111004b-23cb-41f1-bf0e-0f8aee195967": [[-0.36451500000000003, 1.2664800000000002e-06, -0.361777], [0.365837, 0.7423829999999999, 0.361366]], "4d0d25d1-8d56-4ab1-8d05-02aad0a6d985": [[-0.713545, 1.18103e-09, -0.20387], [0.713545, 0.825673, 0.20387]], "c2e796eb-2640-463f-9873-f09822a372a9": [[-0.16154800000000002, 4.3960599999999995e-18, -0.0982297], [0.161005, 0.364572, 0.0982057]], "0ea463c5-c7b3-4a8d-93b4-dbc6b0f356eb": [[-0.32006300000000004, -1.1367199999999999e-05, -0.11183], [0.320268, 0.735084, 0.11204]], "00c43d91-9332-434c-8170-1ad77f5f2051": [[-0.53089, 0.0, -0.758067], [0.53089, 0.46000300000000005, 0.758067]], "03949e26-c747-4b71-8fb1-2799a07171b5": [[-1.56409, -3.05176e-08, -0.616329], [1.5626900000000001, 1.11029, 0.616584]], "368e235c-d28f-4c7e-968e-1dc3fe6a09b5": [[-1.4068100000000001, -9.91465e-08, -0.547643], [1.4076, 0.915638, 0.548897]], "107eb290-6555-4fb2-91d5-837f1d6001d9": [[-0.251, 1.1920899999999999e-10, -0.251], [0.251, 0.1321, 0.251]], "28ad3cc1-41a3-3cf9-81ba-b242b75e06a6": [[-1.1883270000000001, 0.0, -0.492187], [1.1711610000000001, 0.809025, 0.501445]], "2483eae7-22c7-40e5-a0eb-56dece52afac": [[-0.25314800000000004, -0.000107515, -0.276217], [0.253158, 1.04275, 0.27612400000000004]], "57623643-7105-4f0a-8f13-fed9c8723972": [[-1.14225, -2.6234e-17, -0.455526], [1.14225, 1.05457, 0.454824]], "b0497bbe-cdf7-4ab0-8b5c-714ea8a3abb9": [[-0.313164, -0.00106945, -0.28026], [0.313471, 0.814913, 0.280263]], "ddd58ee7-a0af-4054-9a0a-82a2c8d67ada": [[-0.163385, 0.0, -0.21073899999999998], [0.163385, 0.336294, 0.21073899999999998]], "ea5e16e9-4e2a-4110-9f71-4dc8334e6d4e": [[-0.5792280000000001, 0.0, -0.043418], [0.5792280000000001, 0.94627, 0.043418]], "68c8a024-dfb2-4afb-9744-c057bf9e09a9": [[-0.27514299999999997, 0.0, -0.27514299999999997], [0.275017, 0.565468, 0.275017]], "cdd5c579-ca66-47af-980f-2b3b302e25fd": [[-0.253344, -5.38843e-19, -0.0460078], [0.253344, 0.5680660000000001, 0.0460078]], "5567ff78-eec3-4c32-a1f1-bd34a7cd4a51": [[-1.62316, -5.45134e-17, -1.32927], [1.62316, 0.922278, 1.32927]], "caade42f-867c-4937-b11d-93d6b5f0f481": [[-0.21014, 0.0, -0.203766], [0.21014, 0.5760179999999999, 0.203766]], "3b77b35d-4040-4808-9c66-9f5afcf9ebd6": [[-1.2584600000000001, -0.00043381999999999996, -0.41847700000000004], [1.25833, 0.719954, 0.418115]], "dfb42b02-33c5-4f43-bc91-a34c0a09e9bf": [[-0.43119300000000005, -0.000292694, -0.43119], [0.431244, 0.822105, 0.43121699999999996]], "d4fa7384-8d3a-4651-b9ec-b91f8fb8db53": [[-0.20382899999999998, 3.4e-05, -0.201986], [0.20382899999999998, 0.46232399999999996, 0.202117]], "2be802d9-22cb-467d-a1e3-d463b7a839e6": [[-1.24518, -3.8147e-09, -0.44833599999999996], [1.2449599999999998, 0.923213, 0.4474]], "85c56fb2-ff7a-47d4-84a2-199e61d6159f": [[-0.363672, -0.000121428, -0.37026200000000004], [0.363643, 0.749384, 0.369921]], "0ddf813d-223a-3cd9-88eb-a97bf6a0b796": [[-0.42173900000000003, 0.002817, -0.40641], [0.42173900000000003, 0.769456, 0.40641]], "40837289-6d12-427a-a450-18b2f9af3784": [[-0.390589, 1.5030600000000001e-05, -0.391606], [0.390589, 0.8576170000000001, 0.39036000000000004]], "5865dd7f-5634-4df3-acd8-6eb5f62a6381": [[-1.5681399999999999, -1.30203e-05, -1.02214], [1.56803, 0.8588169999999999, 1.02295]], "6d865182-4747-470e-811e-de741b7d077b": [[-0.677581, 1.55191e-17, -0.313097], [0.677581, 1.90579, 0.313097]], "5407c841-c45c-46d3-9442-be979f5eb0ba": [[-0.315, -9.71395e-18, -0.19635999999999998], [0.315, 0.513, 0.19635999999999998]], "8fe935cc-88c0-402e-b419-021f7dab656e": [[-0.41253100000000004, 6.33606e-08, -0.41192100000000004], [0.41260800000000003, 0.518598, 0.411924]], "1b660f02-4918-4cf2-a056-6ecf7c45952b": [[-0.29895900000000003, 0.0, -0.29895900000000003], [0.29895900000000003, 0.34499899999999994, 0.29895900000000003]], "67a9ff47-2bb9-478a-87ba-04d5482ed67c": [[-0.286112, -0.00021470099999999998, -0.315626], [0.28579, 0.812273, 0.315485]], "54888c26-b8c1-4c6c-b4d9-1f8b081c7202": [[-1.07412, -8.88774e-05, -1.05622], [1.07412, 1.26346, 1.0560800000000001]], "1ead30d0-b899-4318-b72e-9aedfaffe9f7": [[-0.6955410000000001, 0.0, -0.37032], [0.6955410000000001, 0.7264400000000001, 0.37032]], "45ee620d-f213-4f6a-a1c9-89f1a738c8fa": [[-0.982317, 1.75536e-17, -0.303059], [0.982317, 1.8752600000000001, 0.303059]], "673a0ec0-5d59-39ed-929e-1ab36f6a320c": [[-0.290061, -0.001699, -0.304913], [0.290061, 0.683045, 0.268409]], "7d40c231-5f93-4fc8-9e74-7925b593a1c3": [[-0.250024, -4.88572e-19, -0.260317], [0.250024, 0.435006, 0.260482]], "7e42325b-eaed-4929-9002-84cdac7f1d9a": [[-0.5883379999999999, 6.5e-05, -0.42935], [0.5883379999999999, 0.427655, 0.42935]], "c02373ba-90a3-4030-b4bb-3e1ca0000956": [[-0.260562, 0.0, -0.260562], [0.260562, 0.61339, 0.260562]], "ef24b984-f2e6-4afc-bfa6-08fad526699a": [[-0.6686679999999999, 0.0, -0.484075], [0.6686679999999999, 0.43463799999999997, 0.484075]], "47c7dbf8-9e99-4707-a03a-b089fa0a5949": [[-1.13796, -8.82024e-05, -0.44399900000000003], [1.13738, 0.711074, 0.443349]], "fdd65db5-a110-43d3-a9a8-2805169bd572": [[-0.197898, 0.0, -0.198747], [0.197898, 0.577203, 0.198747]], "56b60334-ea1f-33da-af12-467c40f09de1": [[-0.49998800000000004, 0.0, -0.41165799999999997], [0.49998800000000004, 0.793886, 0.411659]], "fb15b296-cd83-438f-8260-7fa4161de9f7": [[-0.267389, 1.52588e-08, -0.265434], [0.267389, 0.16018000000000002, 0.265434]], "38d649b0-6766-4253-b975-31f6750e34a5": [[-0.927034, -7.62939e-09, -0.44504600000000005], [0.9270090000000001, 0.71723, 0.44498800000000005]], "7d44ca1b-9422-378f-938a-02b60eb59953": [[-0.8355929999999999, 0.000142, -0.48719], [0.8355929999999999, 1.023417, 0.5295000000000001]], "9874b942-70b0-40d3-915f-a015dc9bf489": [[-0.780457, 0.0, -0.37261099999999997], [0.780457, 0.712774, 0.37261099999999997]], "c6e3b4ec-23f3-43ab-989f-4bddbc0ae02e": [[-0.201727, -1.23879e-17, -0.202309], [0.201727, 0.140419, 0.202309]], "0a0f0cf2-3a34-4ba2-b24f-34f361c36b3e": [[-0.949117, -1.1647799999999999e-17, -0.207777], [0.949117, 0.708596, 0.207778]], "728b2ef4-01aa-30e0-83e8-571e4ea6cc8a": [[-50.8, -0.0, -50.8], [50.8, 71.8365, 50.8]], "1c9f791a-a92f-4727-91c9-4474946e63d8": [[-0.352743, -1.2033299999999999e-17, -0.236284], [0.353034, 0.587839, 0.236027]], "83572250-288d-39d3-b336-463672cf3d97": [[-0.239778, 0.0, -0.277549], [0.239778, 0.891096, 0.277549]], "82b311cc-e33e-4402-b631-e951740e998a": [[-0.24753, -0.000133265, -0.24750699999999998], [0.24749300000000002, 0.7490779999999999, 0.2475]], "c2989bf8-2122-4204-9fa0-5cfe7a054777": [[-0.301833, -2.84874e-06, -0.33432], [0.30186399999999997, 0.79581, 0.33442700000000003]], "e2524211-121f-4c50-ad6c-aaa9005e9f27": [[-0.39184800000000003, 0.00010200000000000001, -0.388405], [0.392063, 0.793694, 0.388517]], "02b5ff73-9a6d-4aa9-994c-1355acce88d2": [[-0.329974, 0.0, -0.329973], [0.329974, 0.6017600000000001, 0.329973]], "c043997b-4487-4e03-9c29-8299829a0d5e": [[-1.1561700000000001, 0.000898924, -0.38427500000000003], [1.15612, 0.696204, 0.383986]], "c7e2a95c-d603-4f46-9f41-3ff22fdf3f01": [[-0.36090200000000006, -6.59988e-05, -0.36090200000000006], [0.36090200000000006, 0.133301, 0.36090200000000006]], "1c0e5450-b180-4a7c-9aed-fd2b16ca1763": [[-0.911498, 0.0, -0.247808], [0.911498, 0.807761, 0.247806]], "ee5804f4-45c4-4a99-8443-76842171ecc7": [[-0.325845, -6.73532e-09, -0.325902], [0.32585000000000003, 0.306634, 0.325881]], "0db6e62d-bc8e-4768-8548-f0ebbec2f9d1": [[-0.540171, 0.0, -0.363234], [0.540171, 0.409865, 0.363234]], "0b093afc-dbad-47aa-ad4d-2afd0c16a49a": [[-1.2067400000000001, 8.42285e-06, -1.1794], [1.2067400000000001, 1.6306299999999998, 1.17926]], "719b6e52-d85e-4e4e-ae53-cafedfd2ab15": [[-1.4309749999999999, 7.2e-05, -0.678673], [1.4312790000000002, 0.928091, 0.678458]], "2bf29b69-4835-4a5f-a994-871fd7327628": [[-1.147578, 0.000607, -1.084354], [1.147578, 1.0873650000000001, 1.084354]], "542495cc-d00e-3712-86fd-c2fe6e103e66": [[-1.1883270000000001, 0.0, -0.492187], [1.1711610000000001, 0.809025, 0.501445]], "0ff9e550-d0a3-49ef-b996-471107204b5e": [[-0.661811, 1.90735e-09, -0.262436], [0.661553, 0.35745899999999997, 0.263802]], "ca051e8c-0402-4400-b02e-6aa3fc6b89f9": [[-0.80849, -1.62901e-17, -0.323253], [0.80849, 0.804039, 0.323253]], "49a279d9-c02c-4477-b7b3-abfbdbf25316": [[-0.35351, 0.0, -0.35351], [0.35351, 0.7022539999999999, 0.35351]], "42ad62cf-f771-4ce2-b7c8-fdd0dea7c70c": [[-0.7971729999999999, 0.000127197, -1.0043], [0.797118, 1.5198099999999999, 1.0043]], "393d978f-75f7-4715-b890-83fcb1ddd843": [[-0.249499, 0.0, -0.249499], [0.249499, 0.5546650000000001, 0.249499]], "5279c5f2-dd43-48e8-a4d2-b8d90770c961": [[-0.893194, 1.6337800000000002e-07, -1.11195], [0.892904, 1.18717, 1.11266]], "987bec46-496e-4970-bfb5-cff89e88a541": [[-0.327335, 0.000189667, -0.0815828], [0.327286, 0.708641, 0.0817851]], "21f34649-749e-4481-aef4-abf73263c950": [[-1.05824, -0.000669821, -1.04704], [1.05914, 0.870511, 1.04765]], "5f9dfca2-ce3d-4165-9514-a8fe50396996": [[-0.45170499999999997, -2.29838e-17, -0.389443], [0.45170499999999997, 0.296925, 0.389443]], "c4a12796-d8c3-43b8-a7c3-659520f2c1c6": [[-1.155156, 0.0, -0.525314], [1.155156, 0.7909529999999999, 0.525314]], "c8bae597-b6ba-453f-a34d-39ce4eb82d2a": [[-0.481489, -8.325320000000001e-05, -0.242649], [0.481526, 1.4279, 0.24272200000000002]], "eceec9a5-be0c-47a9-a168-a541a3eee215": [[-0.555627, 0.00014800000000000002, -0.280683], [0.555528, 0.912992, 0.280471]], "da34f6fe-6160-4df4-9bd1-8ee0d309a396": [[-0.574598, 0.0, -0.10976599999999999], [0.574598, 1.0592350000000001, 0.10976599999999999]], "58deda98-46e2-44ef-b2c9-13b0239ce627": [[-0.291422, 0.0, -0.291422], [0.291422, 0.585056, 0.291422]], "4c95658c-d590-4e4a-8605-bd422615de68": [[-0.6879900000000001, 9.290339999999999e-05, -1.05072], [0.688132, 1.2166, 1.05107]], "ac5cfaed-83b7-4fc1-9390-e9b1b6f88bc7": [[-0.859175, 0.0, -0.42174799999999996], [0.859175, 0.97013, 0.42174799999999996]], "aefd2c9d-0ccc-4d3f-871e-365fbb0bfec0": [[-0.599935, -1.56621e-17, -0.296162], [0.599935, 0.37372900000000003, 0.296162]], "7d33f5a0-593a-36dd-8574-e85c1e592b4b": [[-0.93285, 5.999999999999999e-06, -0.48161099999999996], [0.764804, 0.738082, 0.477716]], "8ef74600-39f7-43b4-9950-4766a8ec2abf": [[-0.23060199999999997, -4.41294e-06, -0.212008], [0.23060199999999997, 0.495131, 0.21200500000000003]], "4c86f547-da68-4e15-9419-c34fb96e4660": [[-0.85, 3.05176e-08, -0.246409], [0.85, 1.54997, 0.24665199999999998]], "58e1a4f2-2285-4124-ae08-00e68d4df70c": [[-0.66, -3.1974399999999997e-16, -0.423508], [0.66, 0.943025, 0.42345999999999995]], "b0f50473-fa44-3a42-b398-597cba88f3fa": [[-0.34962000000000004, -0.0, -0.34962000000000004], [0.34962000000000004, 0.7108580000000001, 0.34962000000000004]], "15b75afd-fa5a-4ac6-8561-bfae9c454a68": [[-0.702501, 0.0, -0.468989], [0.702501, 0.355776, 0.468989]], "15694ac0-e537-3cb2-b372-53793868d198": [[-0.351045, 0.0, -0.350997], [0.351045, 0.529987, 0.350997]], "75f44c81-4e41-41f3-bdd6-fd244239b5d0": [[-1.195, 0.000276045, -0.9334260000000001], [1.195, 1.9193600000000002, 0.9334260000000001]], "81cb331f-7f1c-3506-b245-a71d9b609a06": [[-1.030381, 0.0, -0.529435], [1.0303820000000001, 0.7086709999999999, 0.529436]], "22e5f69a-dba4-4d48-b4f4-8459b5fd799c": [[-0.331724, -0.000180645, -0.331724], [0.331724, 0.511023, 0.331724]], "5052f549-d8bc-4230-b8fe-b98846154a60": [[-0.20308800000000002, 1.26436e-06, -0.203247], [0.203138, 0.47027, 0.203177]], "801e10dd-f1ba-4e75-8d22-d5766ab90147": [[-0.384127, -4.25587e-05, -0.36719700000000005], [0.382463, 0.7458459999999999, 0.366]], "c6773b91-36bd-4441-bea2-e1b5a1ce6527": [[-0.268454, -9.5455e-18, -0.190699], [0.268454, 0.515688, 0.190699]], "1b01158d-dc45-4a53-ad31-e246b04c2cce": [[-0.635261, -2.0981499999999998e-08, -0.13], [0.635261, 1.0, 0.13]], "6fc88555-621a-4163-ba73-1207b5f6dad0": [[-0.75958, -3.8069000000000004e-05, -0.996947], [0.759517, 1.45773, 0.996947]], "76d0d420-8127-4ac8-9917-a75923cc5ee9": [[-0.8674379999999999, 1.52588e-08, -1.2918399999999999], [0.8687990000000001, 1.1, 1.29111]], "5d953b94-1e87-37d6-afca-dc497dacf7b3": [[-1.431114, -0.0, -0.822624], [1.251119, 0.8798659999999999, 0.969019]], "0679c9e0-e5f1-4644-934b-28b8b9be3ec0": [[-0.607356, -4.86726e-06, -0.2], [0.607356, 0.6678419999999999, 0.2]], "11532ebf-98d0-4dc1-80d3-2909f4aca485": [[-0.5297149999999999, -4.84615e-06, -0.332161], [0.529506, 0.382639, 0.332161]], "138916bf-5068-4922-bddf-455be830b853": [[-1.1399599999999999, -1.24314e-17, -0.370901], [1.14245, 2.03735, 0.37248]], "b59850b2-7a94-45db-b8f5-629c069fe5fb": [[-0.40008200000000005, -1.02079e-17, -0.196477], [0.40014000000000005, 1.22498, 0.196433]], "770657a5-d868-4912-ae84-454daaa16b9a": [[-0.50029, -0.00062295, -0.585648], [0.499984, 1.2799500000000001, 0.58557]], "ce74e7fc-0485-4bbc-ba5d-f2efc5fca354": [[-0.291425, 0.0, -0.279563], [0.291425, 0.708656, 0.279563]], "2ffb99c9-a11e-46be-900c-9f20f24602ca": [[-0.7905289999999999, 0.0, -0.7905289999999999], [0.7905289999999999, 0.463148, 0.7905289999999999]], "c82bc4f7-4d60-44fe-812b-b6bebcff3d4b": [[-0.22656099999999998, -1.3284e-05, -0.18509599999999998], [0.226551, 0.44707500000000006, 0.18509599999999998]], "45bb8a3c-4935-414e-8204-94631efefb9c": [[-0.983823, 2.81417e-17, -0.48045000000000004], [0.968542, 0.8255440000000001, 0.482956]], "2ba069ff-2472-499d-860b-4965de105205": [[-1.9175, -1.83697e-17, -0.3], [1.9175, 2.8, 0.3]], "18d54650-68ae-4d4b-8079-1f050b267153": [[-0.9197759999999999, 0.0, -0.215002], [0.9197759999999999, 0.42105400000000004, 0.215002]], "0d77423a-c141-4b0e-9132-ce397a826db6": [[-0.358727, 1.9072600000000003e-09, -0.358748], [0.358727, 0.250375, 0.358749]], "4268d448-ac98-4084-9c3f-df8ebda787d3": [[-1.18262, 2.48701e-17, -0.46630299999999997], [1.18828, 0.916417, 0.47013800000000006]], "fd051811-ca26-48ab-80ad-78a8a1ca7822": [[-1.1048499999999999, 0.000242692, -0.488904], [1.1053600000000001, 0.8224509999999999, 0.48937800000000004]], "11e193ec-f8a7-356a-b077-9a46bd80289c": [[-1.100028, 0.0, -0.251174], [1.100019, 0.76993, 0.251174]], "8a31d51c-2306-439f-90c6-650be7284975": [[-0.6, -2.53796e-07, -0.211931], [0.6, 1.37168, 0.211202]], "79ad3205-54ff-4795-a414-fd8da6e112dc": [[-0.296476, -0.00235095, -0.296068], [0.296476, 0.292847, 0.295971]], "dbcaee52-cb35-46b0-a220-c9bd9dcc8c9e": [[-1.10144, 7.3e-05, -0.512464], [1.101505, 0.7628440000000001, 0.512468]], "2c822a1b-0173-45ec-a4be-205892a08072": [[-0.214982, 2.0824299999999997e-06, -0.214547], [0.214748, 0.40608299999999997, 0.214578]], "b81e75ee-2ea2-4b8a-b5b3-690211e1424b": [[-0.45992, 0.0, -0.477879], [0.460977, 0.635345, 0.476822]], "036f162a-6fbc-4fd5-837e-74341b8cb980": [[-0.307467, -0.000220319, -0.30804200000000004], [0.308402, 0.406955, 0.308247]], "f08a44ff-5840-4d58-ae07-f21e80e1194c": [[-1.15191, -0.000432116, -0.45433], [1.15116, 0.81482, 0.45543]], "52052edb-9113-475b-bc2d-e0eba1629052": [[-2.17844, -4.4556200000000005e-05, -1.0705], [2.17846, 0.948477, 1.06982]], "250d5f66-17e6-4470-85f5-201a4d4263bf": [[-0.955287, -4.27246e-07, -0.46846], [0.954856, 0.831442, 0.468921]], "7b3232a2-1f5d-400a-bcd9-daec4da68410": [[-0.45198900000000003, -0.000530262, -0.476754], [0.451983, 0.691118, 0.47675199999999995]], "2eb772de-68d9-4437-8ba9-124989fbd7ce": [[-0.188841, 0.0, -0.187807], [0.188841, 0.49367300000000003, 0.187807]], "70f67b2d-4baa-43c8-82cf-1165a00973c7": [[-1.58968, -0.000546581, -0.837219], [1.58971, 0.802333, 0.8378669999999999]], "0c71044a-3672-44cf-84f8-796b5c45d93a": [[-0.0648881, -3.05176e-08, -0.0648881], [0.0648881, 1.67229, 0.0648881]], "0fd3efcf-72b5-4552-bbaf-6913e8f3c352": [[-0.274055, 2.7000000000000002e-05, -0.31333500000000003], [0.27408899999999997, 0.7812600000000001, 0.313265]], "79e5cd95-d841-48f3-98ae-2e71e2089896": [[-0.229601, 0.000105, -0.253823], [0.229606, 0.648412, 0.253824]], "5d404b9a-aabc-3202-aa45-342c79b88647": [[-41.6708, 0.0, -40.2523], [41.6708, 89.6558, 40.2523]], "7ecdc7a6-6153-4a17-80e8-080c6055d7a0": [[-0.6651269999999999, -6.4294e-17, -1.05], [0.6660720000000001, 1.06481, 1.05]], "1f286ffd-7bb7-47a3-b722-d2b30098782d": [[-2.09396, -2.3841900000000002e-09, -0.9165779999999999], [2.09502, 0.877913, 0.917026]], "07f2aa32-9aca-4c21-8b80-9393b4439c53": [[-0.267436, 3.18584e-07, -0.287575], [0.26737500000000003, 0.8110200000000001, 0.287705]], "3bea8450-fd9d-4acc-a21c-b52319a3d4ca": [[-0.2, 0.0, -0.2], [0.2, 0.075, 0.2]], "664c64ea-765e-4be2-bc16-9713e6ba276c": [[-0.678338, -2.5520299999999997e-05, -0.250306], [0.6785420000000001, 1.6791399999999999, 0.24416000000000002]], "7fdd4112-7d50-4793-a18c-23c6920b7306": [[-1.31, 0.0, -0.28931999999999997], [1.31, 2.5, 0.28931999999999997]], "148d2b3e-8b52-4610-9ad2-a583ddd41735": [[-0.730594, 0.0, -0.37817500000000004], [0.730595, 0.834669, 0.37818399999999996]], "abacccd6-abbf-4001-8323-0d8a9cb3cdc1": [[-1.7642099999999998, -0.00126449, -1.50813], [1.7660200000000001, 0.941475, 1.50827]], "725b5283-33c2-44c2-a0f8-628e3621e9a0": [[-0.752797, 0.0, -0.752797], [0.752797, 0.7780400000000001, 0.752797]], "170ddd27-66a6-4772-8f5b-5c301b58a330": [[-0.48554200000000003, 0.0, -0.492678], [0.485404, 0.7699509999999999, 0.49286700000000006]], "8ce53b55-e134-4a6a-950c-99ac6e14e6bc": [[-0.24989899999999998, 1.5e-05, -0.289964], [0.24980799999999997, 0.9601609999999999, 0.289957]], "436dded5-ebdb-4dfa-8210-89d137b4005d": [[-0.358944, -5.18371e-07, -0.36213], [0.358944, 0.86285, 0.36213]], "4ed16fe5-6e95-49f8-bf35-f536f10d34a9": [[-1.1809699999999999, 1.1386e-05, -0.46692500000000003], [1.18091, 0.871318, 0.467046]], "63bfa1e7-b2c5-4413-aacf-c61bc9022e65": [[-0.489504, 0.0, -0.472003], [0.489844, 0.881755, 0.47240000000000004]], "6932c8c3-92b8-4e89-a8bf-b8ce932ef574": [[-1.10927, 1.2207e-07, -1.0834300000000001], [1.10927, 1.29392, 1.08306]], "74859a50-43a7-4e9b-8050-4d8cb7292dd5": [[-0.773175, -2.54413e-05, -0.979339], [0.773094, 1.23732, 0.9798439999999999]], "32bc0998-c218-34a1-8954-f608c47fa7b8": [[-91.7984, 0.0, -91.7984], [91.7984, 72.9886, 91.7984]], "22890a64-ec71-32a8-bec1-6ca045052c36": [[-0.275198, -0.008346, -0.292157], [0.254317, 0.8395050000000001, 0.257856]], "fa26a0cb-d334-4947-8717-5556fc5d28f7": [[-0.734189, 0.0, -0.6084689999999999], [0.734679, 0.8115439999999999, 0.608183]], "6a4e8023-740e-40e6-8cde-823b0485177c": [[-0.23238499999999998, -0.0, -0.232105], [0.232377, 0.554723, 0.232065]], "9c460ed2-4d9e-4e3e-b48c-63ddf08bd2ae": [[-0.417507, -2.3326000000000003e-05, -0.39541600000000005], [0.41701900000000003, 0.6283610000000001, 0.39542900000000003]], "23ce18cc-557b-44c4-9b4c-5fa1f1ef3c0b": [[-0.9, 0.0, -0.225], [0.9, 0.51, 0.225]], "0c075bb6-83b9-464d-9220-820e67274c05": [[-1.106929, 0.0, -0.207465], [1.106929, 0.46075000000000005, 0.207465]], "761dea3b-2580-4828-b3b7-51636b1d1c4a": [[-0.250085, -1.9118100000000003e-17, -0.20697], [0.25008400000000003, 0.479867, 0.20707599999999998]], "fb233056-1437-486f-9b10-05c6ce9e6e56": [[-0.265465, 0.0, -0.25977900000000004], [0.265845, 0.374609, 0.25995999999999997]], "209e7adb-6943-4e65-9eac-9f23306690d1": [[-1.73536, -0.00353217, -1.38952], [1.73502, 0.78621, 1.38946]], "35065fb7-ade6-40f9-bbdd-eb68357dad73": [[-0.319377, 0.0, -0.344249], [0.319377, 0.9790760000000001, 0.34397300000000003]], "cc58573b-1981-48f1-8be9-02e330d4aef0": [[-0.23011299999999998, 0.0, -0.230903], [0.23011299999999998, 0.61, 0.230903]], "1c5e4480-dfc6-444e-9aab-b8075b0127a3": [[-1.13311, 1.1455600000000001e-17, -0.245463], [1.13311, 0.43331899999999995, 0.24554099999999998]], "1a3e0459-1d1f-43b9-9c9a-ae074c422e21": [[-0.245062, 0.0, -0.272892], [0.245062, 0.9030370000000001, 0.272604]], "dc85e2fa-3da0-4e20-adf1-af35fa088bf3": [[-1.135742, 0.0, -0.543778], [1.135742, 0.951382, 0.5434519999999999]], "631ce87e-431f-39d3-8bec-a090b03a1298": [[-46.575, 0.0, -46.575], [46.575, 79.2031, 46.575]], "00f5aa82-1cc6-4049-96fd-903492344e38": [[-0.40997799999999995, -0.0007416409999999999, -0.40901400000000004], [0.40997799999999995, 0.09428639999999999, 0.40901400000000004]], "5ff30d43-0c5d-4a9b-8da4-6b22f9520354": [[-0.899008, 0.0, -0.465323], [0.8995529999999999, 0.818287, 0.465323]], "766c7432-9c33-4a3a-9fe6-2dd330847cf1": [[-0.140227, 0.0, -0.144098], [0.140227, 0.920702, 0.144098]], "b19cee34-19d4-494a-8ae9-ee8c5db216fa": [[-0.399878, 0.0, -0.38220999999999994], [0.399878, 2.112114, 0.38220999999999994]], "ffc2d6b6-17a4-43ef-a7e2-e85e63e74a1d": [[-0.24568500000000001, 0.0, -0.237807], [0.24568500000000001, 0.7175889999999999, 0.237523]], "192fb546-8be8-44ca-97ea-b9549db58f0a": [[-0.271148, -0.000131348, -0.269225], [0.27085899999999996, 1.2124, 0.269227]], "ec54569c-c758-3d66-971b-e6f14a16c7e2": [[-0.530366, 0.0, -0.285582], [0.530366, 1.703339, 0.285582]], "555563e5-ed86-4c02-80d7-2b5d9bb74851": [[-0.309747, 1e-06, -0.35837600000000003], [0.309636, 0.748422, 0.35873600000000005]], "ff62d9c3-1813-406a-88c2-427eaaee4578": [[-0.900278, 0.0, -0.320041], [0.900278, 2.100371, 0.320041]], "e465837d-ff86-44e0-9f51-592910107e4f": [[-0.683442, 0.0, -0.465408], [0.683442, 0.350167, 0.465408]], "6fcf49d0-f5c8-4eb0-b136-60be2ea1b217": [[-0.9273699999999999, 7.47814e-05, -1.1873], [0.9276049999999999, 0.8996949999999999, 1.1875499999999999]], "3d375ba6-b294-44ec-afa8-b28694d06615": [[-0.75, -7.998140000000001e-18, -0.171], [0.75, 0.45, 0.171]], "7e84460c-8b11-4647-ba30-e509f1ee5447": [[-1.31659, -0.00107179, -0.518209], [1.3166399999999998, 0.919795, 0.518281]], "ef6d279a-a87e-49d7-9a37-bdc97835c735": [[-0.396742, -1.01573e-05, -0.39901000000000003], [0.396742, 0.947487, 0.399322]], "b1ff08ad-36a5-4e40-9ff6-fc8b2a7531a7": [[-0.0590452, -2.37363e-05, -0.0487941], [0.0590602, 0.211555, 0.049012200000000006]], "e6f4ba87-3b03-4c86-80aa-db75c552980d": [[-0.45859099999999997, 1.52588e-08, -0.514915], [0.457729, 0.990147, 0.51546]], "455a2d55-06a7-426c-8b52-0427bdc4d1d6": [[-0.254606, 1.52588e-08, -0.192496], [0.254606, 0.6320669999999999, 0.192496]], "7f77ac09-9e9f-4754-9ce0-72fcdc9b54fc": [[-0.677774, -0.000372322, -1.02389], [0.678402, 0.8502500000000001, 1.02356]], "20316a10-7760-403b-a9eb-6dd72c936d39": [[-1.383, 0.0, -1.145904], [1.383, 1.228, 1.145904]], "0348af16-8e33-4673-9f88-a1bbf652b3cf": [[-1.0962, -6.49111e-05, -0.48265099999999994], [1.0958700000000001, 0.7937059999999999, 0.482736]], "3dd71ead-91dd-4b8e-80e1-35e676c5255e": [[-1.25, -3.36114e-17, -0.551085], [1.25, 0.822335, 0.551085]], "0d643ce3-0a98-4663-8d8f-69b201266375": [[-0.329483, 1e-06, -0.32807400000000003], [0.32945599999999997, 1.7355639999999999, 0.328109]], "254b1e17-3b4b-403d-af3d-7e7767932249": [[-0.357657, 1.6e-05, -0.402731], [0.35780700000000004, 1.03853, 0.40277700000000005]], "790e4964-6e12-4e23-b44d-19df9a2fe4b7": [[-0.41882199999999997, -1.41389e-06, -0.40341], [0.419124, 0.9134610000000001, 0.402885]], "c073fddb-cca6-4a1e-b864-b4fdb4d12b29": [[-0.28488399999999997, -1.50952e-17, -0.246649], [0.28488399999999997, 0.718363, 0.246649]], "91ff0272-bd21-4915-8fa9-21dcc3088268": [[-0.633702, 0.0, -0.623838], [0.633702, 0.7034619999999999, 0.623838]], "7019359b-8402-3c92-8256-f9c2e68edd9e": [[-1.490242, 0.000936, -0.546094], [1.490242, 0.74, 0.544525]], "75fef869-56cf-41f3-b9c2-08a54d61acf0": [[-0.390052, -0.000449277, -0.22606400000000001], [0.389679, 2.24548, 0.225868]], "9c86d068-7a48-4bde-a551-ae176c26f263": [[-1.0660800000000001, -1.72546e-05, -0.308367], [1.0660800000000001, 2.12368, 0.308467]], "eb611801-95d7-4fa6-8e12-56cc473e319d": [[-1.40413, -3.8147e-09, -0.564874], [1.40561, 0.810504, 0.565199]], "fec67886-6bb1-43d3-a044-b99255ab4f45": [[-0.240423, 0.0, -0.200061], [0.240423, 1.3501679999999998, 0.200061]], "5afb9006-256c-4e28-9c3f-8eeb10cc2994": [[-1.27639, -1.41091e-08, -0.547617], [1.27639, 0.842841, 0.5467609999999999]], "05c3feb9-8e55-4a23-beb7-bd8698791e2c": [[-0.774397, -6.78923e-17, -1.119], [0.774034, 1.55596, 1.119]], "8696652d-9dea-4e56-8094-656a0e02bcff": [[-0.207703, -6.777239999999999e-18, -0.207703], [0.207703, 0.465017, 0.207703]], "67fc00fe-d22d-4dc9-bcf6-9dcf1fe5395d": [[-1.053468, 0.0, -0.460105], [1.053102, 0.920183, 0.460032]], "4fc39672-368c-4411-afc3-01da2544827e": [[-1.1022100000000001, 1.80021e-17, -0.303997], [1.1022100000000001, 2.66367, 0.303997]], "8434c415-de9f-463d-b7a1-fa4e080c3531": [[-1.067634, 0.0, -0.234316], [1.067634, 0.50292, 0.234316]], "5a1642b0-2865-4705-83cb-a50901ac3b49": [[-0.8272660000000001, -9.69827e-18, -0.171374], [0.8272660000000001, 0.7332139999999999, 0.171374]], "6e9b0617-2c4a-43c5-91d7-87e985624e88": [[-0.237117, 0.0, -0.2726], [0.237317, 0.907471, 0.271806]], "c5e4d7da-3b81-4642-96b0-c2db55ac4c02": [[-0.55, 1.33227e-18, -0.0492552], [0.55, 0.27331700000000003, 0.0494134]], "42e0b61a-ccf0-412a-8f41-7fb9afc98b8e": [[-0.81727, 7.62939e-09, -0.197633], [0.817269, 0.6440699999999999, 0.197605]], "98ba3852-91b5-4d51-b29a-8e0253b4dcad": [[-0.24517399999999998, 3.0517600000000003e-07, -0.244607], [0.24529900000000002, 1.0492700000000001, 0.24501699999999998]], "c757c32e-17fe-4776-8ff9-ba828726297d": [[-1.238607, 0.0004, -0.42690399999999995], [1.238371, 0.838857, 0.426781]], "02c42ff4-8c7b-4eb1-97e2-b40ed18b02eb": [[-1.55488, -2.04025e-17, -0.362851], [1.55488, 2.23153, 0.362851]], "2d80e658-07ad-4f4d-8101-02f2192d0c3d": [[-1.0354, 9.39109e-09, -1.18388], [1.0354999999999999, 0.975875, 1.18202]], "d819ad2b-4b47-400d-8e33-fcc741df85e6": [[-1.19292, -4.24488e-06, -0.402433], [1.19211, 0.728604, 0.403042]], "0491bf21-8fda-4e70-9bf1-87bd2987ad10": [[-0.75, -9.18485e-18, -0.4], [0.75, 0.35, 0.4]], "d4f653c0-790c-41c0-817f-fa62dbd3a75d": [[-0.709469, -2.9412000000000002e-05, -0.26], [0.709469, 0.86, 0.260001]], "afb47456-1325-4e40-9d0a-df10b9596f5f": [[-0.300743, -0.0, -0.30358799999999997], [0.300743, 0.47938699999999995, 0.30358799999999997]], "ecb51f39-b6ff-442d-8b81-dda39f6a4bc1": [[-0.357117, -7.75887e-05, -0.0745073], [0.357117, 0.844183, 0.07466840000000001]], "3e545b9b-5d2e-476b-934c-7e7e58b8e3ae": [[-0.700521, 0.0, -0.30122], [0.700521, 0.717422, 0.30122]], "448ed8cb-405e-3673-857c-bcc03de9c8ae": [[-0.667781, 1.6e-05, -0.45027], [0.666864, 0.739201, 0.45027]], "562aeaf7-0ce8-46e8-9e66-bdef4446468a": [[-1.24643, -4.2425099999999995e-05, -0.449478], [1.24638, 0.823968, 0.449572]], "6a12b8a5-27d3-43de-b6be-6bec42b4c532": [[-1.6323500000000002, -3.5253099999999996e-05, -0.804379], [1.63295, 0.8667959999999999, 0.8040949999999999]], "50bcae1c-3ddc-4bd1-ad19-6df738e9a1a7": [[-0.477716, -0.000911098, -0.505152], [0.47716000000000003, 0.75764, 0.505152]], "88433761-5eb0-4d1e-bb75-1fe1eecf319b": [[-0.46652299999999997, 0.0, -0.23444299999999998], [0.466524, 0.42439, 0.234501]], "5c8ae2ec-70ee-3975-b722-e30e7174c3c6": [[-1.0327039999999998, 0.000472, -0.38541200000000003], [1.032811, 0.723747, 0.386255]], "4723d4fb-efed-4532-bd14-5c1d92887349": [[-1.28016, 6.520129999999999e-17, -1.0648600000000001], [1.28016, 1.75459, 1.0648600000000001]], "5e15b4b1-3160-4c80-bde3-e53322a72fa0": [[-0.255611, -2.00251e-06, -0.21993600000000002], [0.255611, 0.6493720000000001, 0.21993500000000002]], "167d7f1a-cd1a-435f-966d-d99f5ab982fc": [[-0.896448, -0.0, -0.339712], [0.896448, 0.700773, 0.339527]], "5bf59af8-b08b-4f04-aad2-08db505f1418": [[-0.240346, -0.000232084, -0.24055900000000002], [0.241178, 0.259875, 0.240724]], "3ebd0665-940a-4367-905a-80de34f71036": [[-0.321065, 0.0, -0.369655], [0.321065, 0.348293, 0.369655]], "7642699b-893e-4988-a7d9-73daa2f8f83a": [[-0.304788, -2.15401e-05, -0.285272], [0.30482600000000004, 0.8889440000000001, 0.28538399999999997]], "58995980-0d81-4c5d-95d5-e78f16e18964": [[-0.6591119999999999, 0.00033, -0.42784999999999995], [0.6591119999999999, 0.21090499999999998, 0.42784999999999995]], "2c7cd7d2-3d14-43f7-bd18-cf10271606bf": [[-0.300863, -8.58442e-18, -0.179832], [0.300863, 1.12479, 0.179832]], "d9f24b25-58aa-4bf2-9810-37a02046abc4": [[-0.210242, -7.3027e-18, -0.1505], [0.210075, 1.05381, 0.150502]], "99e4f9ed-44d7-472d-a8da-70de37187238": [[-0.363667, -1.48152e-05, -0.36432200000000003], [0.363643, 0.293844, 0.36439900000000003]], "edd9e55f-879e-4fc5-8f35-8c6e20a80e34": [[-0.24062999999999998, 0.0, -0.149998], [0.24062999999999998, 0.07028050000000001, 0.149998]], "2d639df1-9103-4773-b963-04feb4122f51": [[-0.410519, 4.85137e-06, -0.437189], [0.41035299999999997, 0.9414589999999999, 0.436993]], "147ab68a-6da7-4420-a6e4-a42e379a661b": [[-0.909441, -0.000228358, -0.33744799999999997], [0.9092600000000001, 0.8063429999999999, 0.33781100000000003]], "e68b1384-ad17-41d5-9e5a-d3c998b209a6": [[-0.275, -1.30054e-17, -0.215], [0.275, 0.47515, 0.215]], "5085dd07-d57c-419b-81d6-b7f6415be780": [[-0.12356299999999999, -5.00716e-18, -0.08694089999999999], [0.12356400000000001, 0.340199, 0.0869446]], "5c942af5-0b68-4ed8-85cf-40ff509b52f0": [[-0.297838, -0.0, -0.34053400000000006], [0.297838, 0.8589230000000001, 0.340317]], "77fc10da-e8c1-41a5-8335-72253865e7bb": [[-0.7325, -4.52534e-08, -0.257315], [0.7325, 0.899744, 0.257541]], "8366363e-ed57-47c2-9362-f4dc82c11b69": [[-0.802477, 5.6486799999999996e-05, -0.9051309999999999], [0.8026800000000001, 1.06381, 0.904829]], "0e699251-a38f-4a93-8ddd-e465504cdaf7": [[-1.3737139999999999, -0.0, -0.48234499999999997], [1.3737139999999999, 0.8900539999999999, 0.48202100000000003]], "0414d081-c8b8-4c29-b861-c92d0970b7ac": [[-0.30899699999999997, -0.0, -0.33678199999999997], [0.30890799999999996, 0.842221, 0.33668]], "ac01113e-abde-48db-853e-eaa22e9e0ee2": [[-1.4873699999999999, -7.7905e-08, -0.485558], [1.48804, 0.925313, 0.486008]], "bac83e55-32c4-4c64-bc32-0f880f4ec0b4": [[-1.17512, -4.57764e-08, -0.291161], [1.17512, 2.138, 0.291161]], "6becdf72-2674-43de-b10d-ea8492bbe90c": [[-0.472387, -0.0007169780000000001, -0.42763100000000004], [0.472494, 0.8682139999999999, 0.427734]], "3d1978d2-e10b-4989-af91-8fafb5931f04": [[-0.27142099999999997, -6.05276e-05, -0.20693899999999998], [0.27170500000000003, 0.617658, 0.20693899999999998]], "74dec72e-277b-44a2-86ca-abf22b6ce41d": [[-1.162, 2.04086e-17, -0.34130699999999997], [1.162, 2.25007, 0.341138]], "65b0bd9f-389a-4ff6-a7da-7f66c1291f16": [[-0.7641849999999999, 0.0, -0.317764], [0.7641849999999999, 0.662025, 0.317629]], "8617e472-10f1-49c7-9273-8e394349d7e9": [[-0.500001, -8.8045e-08, -0.31017], [0.500001, 2.13, 0.31017]], "5d0af923-e92d-3e8a-8c1f-60e85c4b4575": [[-1.078262, 0.0, -0.486992], [1.078262, 0.893539, 0.482706]], "4b03142e-9b61-4118-a49a-e19409d1bda2": [[-1.0253700000000001, 0.0, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "6d2b4039-8a5e-42f7-94c5-2600d6e2925b": [[-1.182595, 0.000107, -1.113007], [1.182131, 1.608766, 1.113007]], "06cf411f-a021-4bf1-b417-26ca819591f7": [[-1.144247, 0.000556, -0.47696800000000006], [1.1431959999999999, 1.086218, 0.477416]], "8443fddd-96e9-4b7a-84bd-10768d7f3843": [[-0.6470659999999999, 0.0, -0.6470659999999999], [0.6470659999999999, 0.6056900000000001, 0.6470659999999999]], "38575091-b358-4201-b610-a91f60014398": [[-1.435, 1.52588e-08, -0.1505], [1.435, 1.47, 0.1505]], "23d376d3-407e-3a9a-99c3-52ba88a76767": [[-1.0, 0.00214, -0.45], [1.0, 0.72, 0.45]], "14b73ed1-f8e8-40ea-9ea6-b6004b06ce52": [[-0.453459, 0.0, -0.431022], [0.453352, 0.909621, 0.431123]], "5a3371b8-4e41-4097-9398-a14355ab3df7": [[-1.05297, -2.0967500000000002e-05, -0.442334], [1.05488, 0.7818649999999999, 0.442928]], "3460c7c1-5bad-4b6c-bc46-990f43d8b539": [[-0.259174, -9.54953e-05, -0.261559], [0.259174, 0.822085, 0.26159099999999996]], "bb397616-a53b-4731-a171-b365d572bafe": [[-0.9967950000000001, 0.0, -1.132494], [0.9963110000000001, 0.890154, 1.132417]], "754fd5e2-a3d0-4ce7-921e-9ac29558a03e": [[-0.577346, 0.0, -0.21001999999999998], [0.577346, 0.5720000000000001, 0.21001999999999998]], "6421e7af-f99c-47e5-ac20-1c6b1b68ead0": [[-0.277653, 0.0, -0.27763899999999997], [0.27765799999999996, 0.552704, 0.27765799999999996]], "30706b0e-77ce-46db-807b-35a9ece03c4a": [[-0.349924, -0.0, -0.507489], [0.349924, 0.419771, 0.507489]], "0ff2235c-d954-4b07-935a-5e4dd2c583a2": [[-0.649999, -7.48392e-18, -0.18977900000000003], [0.649999, 0.9920019999999999, 0.19159500000000002]], "4bb51eec-1131-490d-a3be-c8da00bd57a0": [[-0.33662, 0.00054, -0.33744], [0.33662, 0.857291, 0.33744]], "d10e4af9-745c-4e53-bd61-a39b49097bff": [[-0.343923, -3.4501699999999995e-05, -0.25290199999999996], [0.343923, 1.12063, 0.253176]], "6aaca249-a267-46c4-90d8-13e0e3654b83": [[-0.43542000000000003, 0.000181, -0.404401], [0.43542000000000003, 0.943035, 0.40403100000000003]], "8f699cfd-5905-474e-aab1-7fbbc40ef7a9": [[-0.238738, 2.63751e-09, -0.216408], [0.238738, 0.44808, 0.216408]], "9f7d8df8-5f33-4a45-95b2-03c8692847c2": [[-0.225372, -0.000591761, -0.221881], [0.22548300000000002, 0.955986, 0.221819]], "4e64a24a-10d1-49d4-abd5-0300653c8126": [[-1.21597, -0.000861831, -0.511162], [1.21534, 1.1759300000000001, 0.51324]], "877f70a2-3537-4a71-95c4-2d087bcbe727": [[-0.357117, -6.20641e-05, -0.07450470000000001], [0.35711, 0.844183, 0.0746614]], "8e6d72dc-379b-48f1-943e-868bd94d1121": [[-0.505729, -3.03605e-17, -0.507491], [0.505729, 0.459812, 0.507491]], "36a408f4-6c1f-4628-bbae-24cc5fc811ce": [[-0.555642, 0.0, -0.555642], [0.555642, 0.501595, 0.555642]], "63778055-ee13-44e5-9c83-14c26e15210d": [[-0.414801, 0.0, -0.403434], [0.414801, 0.36219700000000005, 0.403434]], "808a77bc-0791-4e58-9c8a-3fd1efde0678": [[-0.16527899999999998, -3.87659e-05, -0.159575], [0.16558499999999998, 0.273918, 0.159811]], "c82426a8-b300-4082-8be3-fae454dbd511": [[-0.706801, 0.001193, -0.6676860000000001], [0.707777, 1.029385, 0.667777]], "90e003d8-6ee9-4d13-b19e-436de0c09d82": [[-0.17800000000000002, -6.8305199999999995e-18, -0.144449], [0.17800000000000002, 0.447968, 0.144449]], "4e1f8c18-bedf-43e0-a74f-bb2588be2c9d": [[-0.47, 0.0, -0.24], [0.47, 1.9702430000000002, 0.24]], "5f784fa2-9336-4233-85f4-25746ce810c3": [[-0.787968, -6.32168e-17, -1.03241], [0.787968, 1.1103100000000001, 1.03241]], "97b2d0a5-9187-4374-afee-a6486cc78679": [[-0.650179, 0.0, -0.375312], [0.650179, 0.35, 0.375312]], "395703a4-ba72-4f9b-a0de-9d9fcfb17159": [[-0.558641, -2.87479e-08, -0.185582], [0.558641, 0.751724, 0.185582]], "b07444ff-5d5d-4493-8616-c1eabe6a840b": [[-0.208599, 6.10352e-08, -0.17199], [0.208599, 0.44352800000000003, 0.17198799999999997]], "1ea4a9a2-e029-4cb1-9fcd-fb7a8f0edce5": [[-0.402223, 0.0, -0.36318399999999995], [0.402222, 0.904216, 0.363196]], "f3c77c13-9f3e-4a54-9197-064daebcc21f": [[-0.560982, 8.99895e-08, -0.279395], [0.560982, 2.05993, 0.279395]], "c1945e48-2eaa-4691-a77a-89eaf1179df7": [[-0.442935, -9.76996e-18, -0.212803], [0.443567, 1.85635, 0.212922]], "9e37d19a-249b-4bc4-b4d1-4de254c70897": [[-0.326751, 2.1898299999999998e-06, -0.6671349999999999], [0.326741, 0.884979, 0.6670860000000001]], "14e15ab7-0601-4f17-8cde-e249c2038048": [[-0.648721, -0.00017179400000000002, -0.546827], [0.648721, 0.7826529999999999, 0.546698]], "7eab7c89-fcc1-4529-bc32-353cfa917a02": [[-1.09494, -2.0803e-17, -0.44490900000000005], [1.09461, 0.736462, 0.44486600000000004]], "779b8e4d-5888-4f5e-879a-0e072d6d9791": [[-1.236343, 0.0, -0.41434], [1.23574, 0.877663, 0.41448799999999997]], "1d5e6679-71c8-4604-b554-db30f29cd5e8": [[-0.32394300000000004, -0.0, -0.402234], [0.323913, 0.8271850000000001, 0.402234]], "e1810cba-0bcf-4460-b3ed-39e741d12c40": [[-0.399587, 0.0, -0.35068800000000006], [0.39957299999999996, 0.699499, 0.35058500000000004]], "ffe83218-6f39-4093-a9b9-19f81465972f": [[-0.34072800000000003, 0.0, -0.34761200000000003], [0.340659, 0.6727960000000001, 0.34773000000000004]], "5b2418d9-2792-4f72-83d7-d7688a6dd643": [[-1.10222, 1.80021e-17, -0.303997], [1.10222, 2.66367, 0.303997]], "eb42fd74-2ca7-44fa-bcb6-6b9982145489": [[-2.495, -1.83697e-17, -0.300001], [2.495, 2.52, 0.300001]], "31c78caa-3c39-4449-a382-7fc65c640120": [[-0.344338, 0.0, -0.384507], [0.344338, 0.8472280000000001, 0.384507]], "0f803c4c-86a4-4bc5-a73c-d37175b60235": [[-0.48883299999999996, -1.60717e-17, -0.294929], [0.48883299999999996, 2.02446, 0.29476199999999997]], "2857ed67-fc07-44de-910d-82a5b0e6678a": [[-0.7306919999999999, -2.2177700000000002e-17, -1.09246], [0.730693, 0.8980429999999999, 1.09254]], "788e3060-1ec6-4b92-aefa-b8a645728156": [[-1.09442, -0.000456808, -1.20664], [1.09564, 1.4096000000000002, 1.20877]], "f47a5037-f22c-4447-9389-069ec32b7fe3": [[-1.112556, 3.1e-05, -0.467234], [1.112227, 0.891285, 0.46733199999999997]], "07a1f3b6-920f-478a-b9f6-fee53fcb4bee": [[-0.788579, -0.000501556, -1.1484699999999999], [0.786651, 1.24027, 1.14926]], "d9de4102-4c74-4ee1-b6ac-c8f315acad2d": [[-0.985747, -0.0005182359999999999, -1.12746], [0.985784, 1.2323300000000001, 1.12737]], "a2683395-3f61-49c9-8d11-5ff89a9f7f7a": [[-0.87125, -7.32112e-08, -0.47909], [0.87125, 2.46, 0.479251]], "14a8635b-e6ef-4561-88d9-6c21f09eda27": [[-1.248, 1.52588e-08, -0.198315], [1.248, 0.748, 0.19832]], "0090501f-8484-44b8-9f53-9f6ecbbe73a4": [[-0.460273, -0.000161142, -0.41814599999999996], [0.45998199999999995, 0.9327249999999999, 0.417663]], "46620ff2-f52f-4d9e-8da0-50b3f698b3b8": [[-1.02812, -1.3471099999999999e-17, -0.23000199999999998], [1.02812, 0.349628, 0.23000199999999998]], "efc0ad60-ff78-43c4-b824-f347c3f2cbad": [[-0.30518, 0.0, -0.300972], [0.30494499999999997, 0.992201, 0.300859]], "defc6191-1764-4503-9f0a-1e903af490d8": [[-0.749721, 0.0, -0.509679], [0.749721, 0.7109359999999999, 0.509679]], "cb62c10c-ccf5-41fb-a165-45f62d8e08df": [[-0.29734, 0.0, -0.285339], [0.29709199999999997, 0.8503879999999999, 0.285397]], "19a342d4-6317-4946-8b99-53e50f0c9a85": [[-1.089559, -0.0, -0.504393], [1.0899809999999999, 0.8946890000000001, 0.504173]], "10be3edd-3cd5-4183-bd60-622b4fe379ef": [[-0.277995, 0.0, -0.202714], [0.278039, 0.405627, 0.202714]], "484680bb-f5f9-4dc9-b40e-22844b32c83f": [[-0.28415199999999996, 7.8e-05, -0.302561], [0.28415199999999996, 0.837926, 0.302561]], "b6da73c3-f57b-49d9-926d-b4165ca4fd25": [[-0.34025, -3.1371099999999995e-05, -0.364257], [0.340544, 0.438213, 0.364809]], "7c58c5a2-ca12-4b62-a4f0-012ffb0aaa55": [[-0.894293, 4.3993999999999996e-17, -0.8729340000000001], [0.894649, 1.12958, 0.872919]], "064b7591-f01f-4520-8690-ead009ce8b7d": [[-1.162363, 0.00040500000000000003, -1.153709], [1.161717, 0.997474, 1.1531069999999999]], "94f9004e-46c6-49e8-9cdf-2beb6f96af8a": [[-0.420368, 0.0, -0.450899], [0.420368, 0.807542, 0.450999]], "4742c7be-149a-4663-8f55-25e06476d50f": [[-0.80208, -3.05176e-08, -0.22093800000000002], [0.80208, 1.08, 0.22093800000000002]], "f4059cd2-a7ee-49f9-bcad-1654dc165ab1": [[-1.05369, 0.0, -0.448301], [1.05367, 0.7662730000000001, 0.448546]], "baa3522b-8136-47e2-b401-b413906edeb0": [[-0.29440500000000003, 0.0, -0.305662], [0.29440500000000003, 0.847839, 0.305598]], "0e3d3074-b81c-4177-8778-62d2610213d6": [[-0.26014, 0.0, -0.259758], [0.26014, 0.220864, 0.259758]], "53e5d386-7766-44d4-9583-d5aa33b8f1b4": [[-0.30744900000000003, 0.0, -0.22674499999999997], [0.307465, 0.43016800000000005, 0.22674499999999997]], "23c21d6f-f275-47af-a8d8-a64910fcbcef": [[-1.0717700000000001, -0.00440389, -0.44760300000000003], [1.07173, 0.911016, 0.44757199999999997]], "fe98de65-9939-4488-af3f-a6c6de4e471c": [[-1.15001, -2.9261800000000003e-06, -0.5750139999999999], [1.15002, 0.740185, 0.575]], "fa453f15-8251-498d-bdcd-0e7884bc84ba": [[-0.472114, -0.000130272, -0.466294], [0.472012, 0.751414, 0.466434]], "4cef0011-b611-4309-825c-d644af9667c7": [[-1.153189, 0.0, -0.18133], [1.153189, 0.272005, 0.18133]], "10afddc0-0b42-335d-8459-c8c6442aac7a": [[-0.510137, -0.0, -0.505223], [0.510137, 0.43992800000000004, 0.505223]], "65bf39ff-f2bc-43c8-be15-05cc37d78c2c": [[-0.120693, -1.3687e-05, -0.120259], [0.120693, 0.10068099999999999, 0.120259]], "0faa46fd-636a-411a-8a90-2022666271c2": [[-0.888232, -8.286409999999999e-05, -0.502849], [0.8883669999999999, 0.750315, 0.502854]], "1bb4fda2-3438-4c26-8aec-a9190705fa44": [[-0.5251480000000001, -0.000817282, -0.17022400000000001], [0.525298, 0.956201, 0.170339]], "04f692c5-b4da-44ae-a74a-1d95b8f264d5": [[-0.447935, 0.0, -0.447935], [0.447935, 0.526, 0.447935]], "c310fcb6-b6fe-4f92-a7c5-9537bbf04d4e": [[-0.391553, 0.0, -0.32303], [0.391553, 0.681436, 0.32303]], "8ec2922b-57b1-48ae-b220-9372e31fd4dc": [[-2.1847, -2.8289000000000003e-08, -0.19354600000000002], [2.1847, 2.45, 0.19354500000000002]], "111226c4-e22a-4cea-9675-7d460a020ff3": [[-0.9, -0.00010661199999999999, -0.2], [0.9, 0.400067, 0.2]], "10ca3772-1dbe-4359-abe9-a133352a72fb": [[-1.229432, 0.000222, -0.42372], [1.228702, 0.9239109999999999, 0.42365]], "2d6429e7-a25c-397b-aae8-abb949c84eca": [[-1.13778, -0.0, -0.515621], [1.137811, 0.900706, 0.515422]], "52d45e8d-127b-4bd8-b1fc-d5217856af3b": [[-0.5702, -1.06604e-17, -0.234651], [0.5702, 2.49572, 0.234651]], "9c1a14d3-690d-4206-8286-ed1bb27bad97": [[-0.26931499999999997, 0.00019099999999999998, -0.26049700000000003], [0.269355, 0.822147, 0.260551]], "19b8f3f9-961f-4fae-8540-ad5dd5600e04": [[-0.247228, 0.0, -0.249331], [0.247228, 0.47003500000000004, 0.249331]], "14acad2c-8b8a-4ed8-a083-718cbeb4d72e": [[-1.13357, 3.7887e-05, -0.42513100000000004], [1.13402, 0.778857, 0.425065]], "9fe7e3db-4713-48b0-8d3b-ad182529efce": [[-0.783767, -0.00011764200000000001, -0.4411], [0.783699, 0.801575, 0.44089500000000004]], "7da5f5d1-a16b-4920-ae03-526d1213414b": [[-0.47178, -0.000176336, -0.446451], [0.47178, 0.778884, 0.446451]], "447072e6-0d0a-3366-acce-9e3c604499f5": [[-0.443754, 0.0, -0.39256], [0.444856, 1.0525790000000002, 0.39256]], "4c9e5d2b-9976-337c-94cb-bb1d7597885d": [[-0.395663, -0.0006410000000000001, -0.411628], [0.395663, 0.750968, 0.39608600000000005]], "60233f09-25ec-47aa-848e-6ce2b9400224": [[-0.452316, 6.2e-05, -0.452316], [0.452316, 1.084181, 0.452144]], "0946ef29-2944-4a75-8636-560ce566bc8f": [[-0.661438, -1.39531e-06, -0.209999], [0.661438, 0.483, 0.209999]], "2fffc6f3-74fc-328e-aab4-942f37112f89": [[-46.3971, -0.0171, -34.3196], [46.3971, 77.6515, 43.2132]], "096ad075-29cd-40c1-8f16-ea04aad52844": [[-0.407057, 0.0, -0.405778], [0.405778, 1.287759, 0.405778]], "a743edde-1868-4368-86b7-c98dddecf265": [[-0.476372, 0.0, -0.441796], [0.476616, 0.854332, 0.44219299999999995]], "61a961c5-804b-4ac7-852a-add6313315cc": [[-0.40206800000000004, -1.00121e-17, -0.2], [0.40206800000000004, 1.0, 0.2]], "d7dbc1d7-3c46-4658-8ef1-c57610426886": [[-0.224823, 1.19736e-07, -0.224823], [0.224823, 1.5705799999999999, 0.224823]], "2b0148ac-6174-4e59-a40f-935c0c98c2bf": [[-0.902893, 4.77293e-07, -1.0995], [0.9032420000000001, 1.23381, 1.1003]], "d3432a5f-a305-4599-b377-ae1006e7cf55": [[-0.289274, 0.0, -0.266351], [0.289274, 0.619939, 0.266351]], "777d4706-f9bb-4d30-b1af-3be93ed9f5e5": [[-0.36896, -0.000218567, -0.38262700000000005], [0.36894799999999994, 0.853171, 0.382463]], "7ae86203-21a7-451f-bfe6-ae2fde2f1207": [[-0.82, -1.8369100000000002e-17, -0.30001], [0.82, 2.1, 0.30001]], "7c9fe3f0-ee1a-4dca-8ffc-0659c6035c84": [[-1.30725, -0.000539054, -0.666528], [1.30696, 0.873004, 0.665658]], "17b89600-f089-4e90-bec6-799298457ed4": [[-0.6616209999999999, -7.99384e-18, -0.162102], [0.6616209999999999, 0.903, 0.16154]], "5ac4061c-3e5e-45cd-9a78-f789f622a2c5": [[-1.05431, -8.55686e-18, -0.162279], [1.05431, 2.04, 0.16290400000000002]], "d8d6b164-38bb-49f1-8f6c-85e234c7514f": [[-0.6, -7.62939e-09, -0.130022], [0.6, 0.7, 0.13]], "6df7fc8b-b817-49e3-9701-d76289273ef2": [[-0.38898000000000005, 9.7e-05, -0.34474], [0.388984, 1.006526, 0.344869]], "61062201-7a64-484b-b02b-460946b66dcd": [[-0.231221, 0.0, -0.231197], [0.23121099999999997, 0.471631, 0.23121099999999997]], "748112f7-945f-4d03-bac9-95afd7031c5b": [[-0.958689, -0.0008725769999999999, -0.34209], [0.959819, 0.786248, 0.342215]], "b73be77c-75a7-4c80-a15a-a963946f0cf9": [[-0.254902, -5.24094e-07, -0.155392], [0.254902, 0.61002, 0.154755]], "cf1b305a-818f-417e-bfa9-0dba25edff8f": [[-0.45047899999999996, 3.5123899999999998e-06, -0.15], [0.45047899999999996, 1.80983, 0.15]], "cb15e988-1d6c-4d2e-985a-eed8003e09ed": [[-1.98167, -3.73781e-08, -0.217271], [1.98167, 2.16358, 0.217272]], "46b28a7c-2681-42bd-9b22-54be8a2f2d0e": [[-1.10581, -0.000601639, -0.39066], [1.10495, 0.677349, 0.390276]], "afb44044-bbe4-48f0-b4c8-32b02339000a": [[-1.098561, 0.0, -1.118343], [1.09756, 1.168604, 1.118565]], "0809b1e9-de54-4bb4-b71f-67f25ae21b00": [[-0.192932, -1.42109e-17, -0.21523299999999998], [0.192931, 0.807218, 0.21523299999999998]], "bcdd266c-ded7-47b0-962e-aba98f16afa5": [[-0.38853299999999996, 2.09808e-08, -0.18665800000000002], [0.38853299999999996, 1.1687, 0.18665800000000002]], "fb09bc14-c26c-4dac-9235-a8019976fcdf": [[-0.886957, 2.76566e-08, -0.21790500000000002], [0.886957, 2.4, 0.21821100000000002]], "e6cbc211-fd84-42da-992a-e856042d1445": [[-0.6, 0.0, -0.19388000000000002], [0.6, 0.8100010000000001, 0.19388000000000002]], "2c325e75-6597-44be-8c2d-4c1450be4201": [[-1.63954, 3.3927000000000005e-07, -1.15544], [1.6398400000000002, 0.79943, 1.15571]], "40f62301-945f-4c0d-8995-f5dea1a89f30": [[-0.872614, -1.27404e-17, -0.238934], [0.872614, 0.563121, 0.238934]], "578224e1-3072-4b25-b5fa-f67acd9136ca": [[-0.43778, 0.0, -0.438617], [0.437778, 0.943285, 0.43843699999999997]], "596a3416-dc20-4927-8d29-b4c4fee8ca74": [[-0.852256, -4.5743500000000005e-06, -0.318114], [0.852214, 2.33921, 0.316992]], "4ab5b8ba-3882-4970-9e68-403298b70a80": [[-0.750878, 0.000719104, -1.01501], [0.749638, 0.907319, 1.01463]], "8d351170-7ae8-4080-a1c2-796980d8c463": [[-0.724074, -0.0, -0.455229], [0.724074, 0.7053860000000001, 0.455229]], "166bb241-756a-41d9-8397-b17b23cfe7de": [[-0.238569, 0.0, -0.18059899999999998], [0.238569, 0.447001, 0.18059899999999998]], "4591fef1-d0ec-404d-9f1c-722098ff1ea9": [[-0.497065, -1.30868e-17, -0.19729600000000003], [0.497065, 0.774003, 0.19729600000000003]], "507e7199-d7f5-4e9b-8874-07171bea4249": [[-0.839611, -1.70991e-17, -0.315874], [0.83961, 2.36675, 0.315874]], "0cfb3592-473a-4647-8767-475ddad8fff9": [[-1.111407, 0.0, -0.480838], [1.111666, 0.859987, 0.484794]], "ea330ccf-5cb9-4633-9123-b926715d37f9": [[-0.44776400000000005, -0.000123268, -0.286153], [0.44776400000000005, 2.04088, 0.286153]], "9f637598-a8d1-42ac-9bca-8dec361ecbb2": [[-0.325809, -0.0016438, -0.250056], [0.32746699999999995, 1.6066200000000002, 0.249343]], "8295296e-3f80-446e-9ddd-091c78beec05": [[-0.29674, -3.10052e-05, -0.272933], [0.296673, 1.0696599999999998, 0.272831]], "6e759989-7f12-4dc1-abb0-21509b653712": [[-0.272531, 0.000206, -0.249874], [0.272531, 0.47017000000000003, 0.249874]], "f94e9114-b6ad-4e39-b800-13e06f8da709": [[-0.8454989999999999, 0.0, -0.402563], [0.8454989999999999, 0.710452, 0.402563]], "6193677a-c636-4e33-8ad8-b9b035ae82aa": [[-1.2218600000000002, -9.67716e-06, -0.449281], [1.22183, 0.7157810000000001, 0.44939799999999996]], "cb2ee933-da2f-4048-b4a5-cca085874fc5": [[-0.225504, 0.0, -0.264111], [0.225504, 0.8318720000000001, 0.26411]], "50ba6dac-20b0-4b53-a446-f139ab94b61f": [[-0.925, -6.345729999999999e-17, -1.06146], [0.925, 1.08087, 1.06146]], "cae94577-c0d7-48df-8721-ae6bcd0a5357": [[-0.282691, -0.00011975100000000001, -0.282287], [0.28268699999999997, 0.33694899999999994, 0.282189]], "2ae6ab10-1876-4f27-b80b-e85dda03d5ab": [[-0.260193, 0.0, -0.293895], [0.260193, 0.579087, 0.293895]], "c97bf2e1-1fa0-4267-9795-b53b19655601": [[-0.400067, 0.0, -0.16247499999999998], [0.40006, 1.852543, 0.162472]], "77cf2ded-170a-4786-b3ce-9ff05d368cb7": [[-0.438764, -0.000101493, -0.350681], [0.438714, 0.999868, 0.350665]], "7958de23-7f1f-4cfe-8da0-9ee07389d272": [[-0.802201, 2.73247e-05, -1.06458], [0.8023779999999999, 0.715056, 1.06458]], "3e43785c-f09e-4325-97a1-440287025360": [[-1.3649, -0.000350038, -1.05034], [1.36511, 1.25329, 1.04738]], "58904320-f2d9-4088-8cdb-9196fc99cb91": [[-0.290811, -0.000124506, -0.27723], [0.29084299999999996, 0.7641849999999999, 0.277294]], "f7e80eca-5c89-4298-9ed2-aa3eb778de5e": [[-0.41828499999999996, -3.5237699999999996e-05, -0.27516999999999997], [0.418311, 0.050000499999999996, 0.27516999999999997]], "6c29cc13-9d4d-4566-938c-3194092f7321": [[-0.266475, 0.0, -0.325858], [0.26634, 0.975429, 0.326062]], "738863fd-155e-415e-80a5-45b17e2c3cf2": [[-0.803309, 0.0, -0.181796], [0.803309, 0.75, 0.181796]], "3728088b-f92c-48cc-9bd7-91b411890d9d": [[-0.367456, 0.0, -0.39500399999999997], [0.367386, 0.9133209999999999, 0.39500399999999997]], "5891960e-a387-4cab-a086-f8ca5aa1fa03": [[-0.47558799999999996, 0.000167461, -0.5109940000000001], [0.475137, 0.44760399999999995, 0.511351]], "06bc6193-058e-4183-8981-fdad7b5c5507": [[-0.398871, 0.0, -0.471098], [0.398945, 0.915965, 0.47104199999999996]], "6b5c22de-2646-4909-8a57-f7ce38ac17bc": [[-0.33662, 0.00054, -0.33744], [0.33662, 0.857291, 0.33744]], "fcf6e2d7-7215-46e9-a957-73f47accebdd": [[-1.04111, -8.64463e-05, -0.535892], [1.04108, 0.805678, 0.535945]], "cd98bc6b-7433-4983-aed0-33c8bc1de940": [[-0.414792, -0.000574356, -0.414123], [0.41417099999999996, 0.445535, 0.414335]], "769ab34b-95b7-36c3-bf07-71c9c7a89494": [[-45.675, 0.0, -45.675], [45.675, 81.9237, 45.675]], "7ff6dcfd-71c2-4980-89f5-509aa2a3cebe": [[-1.193421, 0.0, -0.22459199999999999], [1.193421, 0.43881, 0.22459199999999999]], "66d08001-05dc-4f4b-a52b-5901b64fadeb": [[-0.8553270000000001, -0.000152329, -0.2889], [0.8554689999999999, 2.02709, 0.288754]], "c11addea-f150-4f7c-9a98-be3815842f2c": [[-0.613548, 0.0, -0.404068], [0.613548, 0.375451, 0.40411299999999994]], "b376fa33-9f48-43d2-9907-5ca265dcd24a": [[-0.233824, 0.0, -0.23381], [0.233824, 0.44749099999999997, 0.23381]], "66006ad0-1f98-4155-818a-6c29430e5962": [[-0.934466, -3.8147e-09, -0.9561709999999999], [0.934419, 1.2671299999999999, 0.9561709999999999]], "3f699705-981b-4915-b217-91ab7b31eeac": [[-0.231308, -2.4449200000000002e-06, -0.240896], [0.231293, 1.0288599999999999, 0.24090399999999998]], "abe13e1b-16b8-4389-a9bb-ba8ad3b2afc2": [[-1.00058, -1.24257e-17, -0.202928], [1.00058, 0.593334, 0.202928]], "563b2eb0-b3a8-473c-b6a5-7ec3abb41317": [[-0.301869, 0.0, -0.20505500000000002], [0.301869, 0.712599, 0.20505500000000002]], "8ac99877-4ebd-4a4c-a06e-5673fc1c158b": [[-0.15, 0.0, -0.2515], [0.15, 0.10816, 0.2515]], "abc9924f-8991-49fe-af13-4564f46fa765": [[-0.285641, 0.0, -0.191204], [0.285641, 1.425, 0.191204]], "45b7b2cb-1efb-4039-a817-ac884273bdc1": [[-1.065309, 0.000559, -1.101168], [1.0656919999999999, 1.346089, 1.101166]], "4d10c966-115e-46aa-a4b1-0585539e84ba": [[-0.227754, -6.232520000000001e-06, -0.148804], [0.227764, 0.981279, 0.148804]], "04de61d6-79b0-42d9-9695-161b818317ce": [[-1.8040260000000001, 0.0, -0.102193], [1.8040260000000001, 0.8495999999999999, 0.102193]], "02970dfb-ec72-49a1-ae76-93146fd14e7e": [[-0.647474, 0.0, -0.300372], [0.647474, 0.3568, 0.300372]], "207906b4-16e6-492b-8dec-1af312c2c4a2": [[-0.9032250000000001, -0.00014711500000000002, -0.295443], [0.903223, 0.758715, 0.296099]], "84747a8e-dcad-31e5-b7dc-413e30a247c3": [[-179.9956, 0.0, -58.5989], [175.2877, 68.4956, 52.4712]], "2159deb3-5035-4ab1-a405-b1f81fe56f17": [[-0.25, -1.53081e-17, -0.25], [0.25, 0.46, 0.25]], "32773307-6d99-44f7-b717-f89619d98868": [[-0.196801, -9.72272e-06, -0.196875], [0.1968, 0.7254640000000001, 0.196817]], "76d858b4-1471-4be4-8c6a-7805bc77dff7": [[-0.383485, 9.1e-05, -0.43800400000000006], [0.383485, 1.077581, 0.438085]], "58428270-0994-452b-b33b-300c3ab4d3e5": [[-0.7602160000000001, 0.0, -0.19596599999999997], [0.760189, 1.071028, 0.19596599999999997]], "5f63a45a-b86d-4b1d-a6e3-7d8116b2f38d": [[-1.02917, 4.06218e-08, -1.01939], [1.0298399999999999, 0.899555, 1.01914]], "ffef3d9d-ab7f-4224-8216-4f41178f7168": [[-0.680971, 0.0, -0.613424], [0.68097, 0.402057, 0.614003]], "c6477eff-05e1-4022-9c94-7f773fc0a1f5": [[-0.513313, -0.000356673, -0.506405], [0.513624, 0.890819, 0.5064540000000001]], "07ec1306-84f5-421a-9905-4643ce04f32b": [[-0.236679, -4.33082e-18, -0.236679], [0.236679, 0.14825100000000002, 0.236679]], "47dd63ba-3b22-4d16-a0e3-a9513d1e1262": [[-0.549951, -0.000573327, -0.22508199999999998], [0.549895, 1.5297999999999998, 0.225127]], "eec6e9e0-052e-4686-9aa3-482df27ab167": [[-1.0481740000000002, 0.0, -0.514262], [1.0463, 0.966721, 0.514305]], "b74eca44-dbd8-4f28-a11a-ff514f86996c": [[-0.23609000000000002, -1.80943e-05, -0.236532], [0.23609000000000002, 0.531282, 0.236532]], "c5d2b55c-30c1-4da3-928d-abc49b9936d4": [[-1.1, -1.83697e-17, -0.3], [1.1, 2.4, 0.3]], "634c1828-000f-4000-93ff-92cb3be24036": [[-0.077313, 0.0, -0.077313], [0.077313, 1.2983269999999998, 0.077313]], "06638f22-d2e9-4223-affc-9547dc4c633c": [[-0.38974600000000004, -0.000483194, -0.216939], [0.38974600000000004, 2.25435, 0.216939]], "43104ac8-7491-4081-85a9-3bf2497cf714": [[-0.844161, 6.31496e-17, -1.16566], [0.843831, 1.05928, 1.16566]], "8989e720-bee4-4b97-9c71-a5e26f3f47f9": [[-0.231854, -3.8179e-06, -0.23186199999999998], [0.23197900000000002, 0.47455800000000004, 0.23186199999999998]], "29792d36-c2d5-4b65-a03e-bdd1360b4977": [[-0.279593, -0.00036080300000000004, -0.282596], [0.279403, 0.266327, 0.282404]], "98e41ce7-78d3-4cb6-a16a-a73f8839a49c": [[-0.37089500000000003, 1.5e-05, -0.434742], [0.37103200000000003, 0.831337, 0.43493699999999996]], "4ecfdba8-5420-343d-af07-cbf6df2facc6": [[-48.8512, 0.0, -45.5223], [48.9029, 91.1417, 62.0565]], "9fd6826e-413f-4e0a-be90-7486cee637d9": [[-0.256855, 0.000101, -0.298964], [0.256993, 0.771909, 0.298854]], "72ae3992-e1e6-47fc-b7b2-7123d234084a": [[-0.21645199999999998, -0.00034781199999999997, -0.19744], [0.215992, 0.839651, 0.19761900000000002]], "8304f2a2-e191-4987-9af7-bdf6384495bf": [[-0.738824, -5.80438e-17, -0.9934430000000001], [0.7393470000000001, 1.1931399999999999, 0.99344]], "81c358ca-dd9f-4d4d-8e96-664752f15204": [[-0.974166, 0.0, -0.06], [0.974166, 0.798484, 0.06]], "76820ac7-7003-438b-b449-77dafe208332": [[-0.7698229999999999, -1.33514e-08, -1.10672], [0.7701260000000001, 0.875466, 1.10824]], "a38e8a36-f00c-4c3c-90e8-3b5e0903d900": [[-1.1, -0.000189777, -0.16427499999999998], [1.1, 2.06233, 0.16427499999999998]], "e0010317-e54b-4310-9d9c-81c7d0383789": [[-1.0, 0.0, -0.2], [1.0, 0.4, 0.2]], "ce02906d-dc0f-416d-b673-1212e274999f": [[-0.134888, -5.10799e-05, -0.13501200000000002], [0.13516, 0.8536839999999999, 0.135052]], "95af3782-0ff7-435d-afb1-eaad6a41959e": [[-1.06345, -5.07338e-08, -0.401293], [1.06604, 0.842399, 0.40085]], "699f4af6-7f29-428f-9cfa-353020b58f6a": [[-1.15916, -0.000210951, -0.508497], [1.15776, 0.855985, 0.507353]], "237836b2-7d7d-4469-9672-dff828358828": [[-0.350048, 6.6e-05, -0.40061599999999997], [0.349817, 0.7882129999999999, 0.400584]], "32db831d-d8ae-45dd-aecb-061f532a8d49": [[-0.670249, -7.64044e-18, -0.19569199999999998], [0.670249, 0.89, 0.196081]], "2a2e98e8-78fd-439c-8cc6-6a92dec7d1f8": [[-0.969137, 0.0, -0.20072600000000002], [0.968892, 0.538393, 0.20095300000000002]], "f3860efc-610a-47c8-ba94-f016835ecda2": [[-0.30125599999999997, -0.00023859600000000002, -0.302951], [0.30125599999999997, 0.39506, 0.303129]], "050ff629-dcb5-4e2b-853d-f4dbc440e20e": [[-1.01926, -1.6104500000000002e-07, -1.09948], [1.01839, 1.1146099999999999, 1.10016]], "5b3e16bc-ca6a-4090-a5b4-0bb7e0930f0a": [[-0.262688, 0.0, -0.262459], [0.262459, 0.566585, 0.262459]], "b03115f0-8e50-4527-8f1f-42c3bc99e0bc": [[-0.645109, 1.04904e-08, -0.2], [0.645109, 0.7455200000000001, 0.2]], "501cf887-31e0-4607-aab6-9feb8da2adb6": [[-1.14749, -6.00167e-17, -1.08417], [1.14926, 0.935321, 1.08396]], "26ec6b73-48a6-441c-b005-61a2fba2e4eb": [[-0.6433230000000001, 0.0, -0.297711], [0.6433230000000001, 0.763892, 0.297711]], "c08c72b6-d175-4d0f-a248-b7326b81db78": [[-0.149234, -8.789099999999999e-05, -0.0908513], [0.14907600000000001, 0.836595, 0.09114430000000001]], "aa7bff4d-e25c-4f4a-9493-9b989cda5644": [[-0.406, -9.99201e-18, -0.157429], [0.406, 1.09789, 0.15828799999999998]], "50503c5b-ad1c-42a7-976e-ac03e9856518": [[-1.0186199999999999, -0.0011620900000000002, -0.33320500000000003], [1.01804, 0.712248, 0.332089]], "3d855406-9af8-4932-b592-22cd48415d54": [[-0.471304, -0.0009296490000000001, -0.437299], [0.470859, 0.8439650000000001, 0.437385]], "1f85dc7e-f9da-4237-8fd3-7d4a87484f57": [[-1.18356, -0.000381239, -0.7700400000000001], [1.18318, 2.07513, 0.7723409999999999]], "6f6c6f4e-3e4a-4426-958d-83dd81f293d3": [[-0.970665, -0.00017884000000000002, -0.367588], [0.970665, 0.887662, 0.36739]], "4811feb8-3e44-43ad-ab37-5a82e47a2ae2": [[-0.285108, -1.23052e-17, -0.24840199999999998], [0.285108, 0.9654550000000001, 0.248414]], "240bdf42-3221-41b7-8da9-b751031b772f": [[-1.2075, 0.0, -0.55835], [1.206228, 2.208069, 0.5589999999999999]], "55e76b41-00fc-48b9-972b-7ed6d9093092": [[-1.29583, -0.00543869, -0.806904], [1.2944200000000001, 1.86871, 0.8125209999999999]], "e9e9c2e2-bbe0-4c64-8385-812faf4a0db2": [[-0.33167900000000006, 1.4e-05, -0.305088], [0.33163200000000004, 0.798323, 0.305084]], "793417c0-aea5-45b7-9d08-908f24535abe": [[-0.190445, -3.0015400000000002e-06, -0.217301], [0.190445, 0.700317, 0.217301]], "75ce72e3-f18e-453f-ba5c-35993f3f5a3d": [[-0.9026090000000001, 5e-06, -0.474196], [0.902246, 0.8055169999999999, 0.473881]], "ecc3d7e3-8890-495f-8a77-420aab645a99": [[-0.235903, -0.0, -0.223038], [0.235903, 1.401159, 0.223038]], "55235cc0-4d6b-4d69-8145-d0018023dabb": [[-1.0852249999999999, 0.0, -0.924521], [1.0852249999999999, 0.8285819999999999, 0.924521]], "54b38089-e0d8-47ee-85f7-90968db3d577": [[-1.5119, -0.0027618599999999997, -0.51509], [1.5115100000000001, 0.878019, 0.515254]], "51c20876-8a24-446f-aef5-9b07006ad01b": [[-1.22878, -3.29832e-10, -0.32872100000000004], [1.22881, 2.3362700000000003, 0.32872100000000004]], "b32cd3ab-4871-4272-923b-826bffce66df": [[-0.369864, -0.000189095, -0.369153], [0.369448, 0.6784680000000001, 0.369562]], "5199c579-cf1a-4fb4-8c00-51e4bd2b2b70": [[-0.387969, 1.3190299999999999e-07, -0.21868400000000002], [0.387969, 1.16247, 0.21889299999999998]], "802c8d05-4c80-4cce-88e9-b225bd3243de": [[-0.809508, 0.000194, -0.399086], [0.8097110000000001, 0.811411, 0.399086]], "0e8228fe-062e-4e92-af46-f3186f77f9f0": [[-0.488958, -0.00119506, -0.487069], [0.488944, 0.9825539999999999, 0.487106]], "a00198d3-e618-45ba-9900-c4a216380943": [[-0.527115, 0.0, -0.526906], [0.527115, 0.546387, 0.526906]], "3decf748-5de4-43a5-b349-c8c849e66cca": [[-0.8068040000000001, 3.08417e-06, -0.47557699999999997], [0.8068989999999999, 0.71796, 0.475685]], "46788be0-14e4-4d73-a3d3-a018b29ffcc4": [[-0.35708599999999996, 0.0, -0.35708599999999996], [0.35708599999999996, 0.562962, 0.35708599999999996]], "c644c60e-586d-4ba7-88b8-29df766860f6": [[-1.05836, -0.000343119, -0.478814], [1.05783, 0.7576149999999999, 0.478535]], "67182dbf-fe69-4751-99ae-4bc3db114e99": [[-0.270245, 0.0, -0.25442699999999996], [0.270245, 0.543872, 0.25442699999999996]], "b3273495-41a9-4997-8651-b9713accfaa2": [[-1.05832, -1.78449e-05, -0.439012], [1.05724, 0.849889, 0.439249]], "206d272e-e0ce-3339-b7b7-a459ce2ada73": [[-99.2253, 0.0, -49.466], [97.4596, 77.077, 48.3549]], "dba1acda-119c-4568-a24e-14cc17623ede": [[-0.399831, 0.0, -0.20638600000000001], [0.399831, 0.9816039999999999, 0.20638600000000001]], "a675f80c-b4d0-4429-8919-73b55e89a1b2": [[-0.48367800000000005, 2.67351e-17, -0.469866], [0.483872, 0.779945, 0.47023000000000004]], "4cc66d8f-970d-488f-b09a-1485aa3b999a": [[-0.7103470000000001, -1.74469e-07, -0.227766], [0.71056, 0.589348, 0.227761]], "711916a2-c204-340e-ab97-72101593b89e": [[-0.22406500000000001, 0.00025299999999999997, -0.295455], [0.23769200000000001, 1.098225, 0.190296]], "81d8d70e-f651-4062-b6f2-85607f0af09c": [[-0.486473, 0.0, -0.49755299999999997], [0.48647799999999997, 0.8073, 0.496107]], "23739d34-2a4a-46e0-a32f-2261e6dd915c": [[-0.6, -4.21508e-05, -0.15], [0.6, 0.67, 0.15]], "4101c935-c4d3-4fbc-9f8c-ab6f5111d57a": [[-0.181802, -0.000542987, -0.182012], [0.181799, 0.9855759999999999, 0.181875]], "1fc97bfd-2d83-4ddf-b80b-34d2f341343a": [[-0.364951, -0.0, -0.356502], [0.365116, 1.301627, 0.355502]], "1a9f06f5-0f65-4c0b-981e-48bd51b2cdc6": [[-1.004598, 0.0, -0.409352], [1.004699, 0.798562, 0.409041]], "667b7778-de9c-4e50-80ee-0776a46b3291": [[-0.308761, 0.0, -0.308761], [0.308761, 0.568436, 0.308761]], "daf3dcb0-04a3-4bfc-9147-c27660625943": [[-1.5307380000000002, 0.0, -0.909276], [1.530402, 0.7976179999999999, 0.909276]], "d7c0c76e-abb6-4564-8871-15a54ca92697": [[-0.34036099999999997, -0.000470383, -0.340228], [0.34023800000000004, 0.66227, 0.340228]], "2810b2c4-8026-4eba-92ff-a9a29876f4ec": [[-1.8040260000000001, 0.0, -0.096712], [1.8040260000000001, 2.524969, 0.096712]], "5591d9e6-ae6f-445d-ae57-1dccb4a4ee5e": [[-0.5455749999999999, -0.000349075, -0.547767], [0.545623, 0.8300029999999999, 0.546862]], "4637341f-ec63-4e0a-9c4d-dff4b255ef0f": [[-0.7003189999999999, -8.14924e-05, -0.495505], [0.700247, 0.759212, 0.495575]], "699cfe7b-cdcb-4bea-b1c3-db5ee7f3240b": [[-0.89533, 0.0, -0.25639], [0.89533, 0.512216, 0.25639]], "84414228-bebd-42d9-a5c3-2f1707bf1f12": [[-0.879174, -0.000301746, -1.0525], [0.880007, 1.10946, 1.0525]], "55e423bd-8cbf-4a22-9bc3-7135bd92be7d": [[-0.948814, -0.000154597, -1.19387], [0.948449, 0.935463, 1.19357]], "7827d6e4-e2fc-3afb-8c70-57439972cb0c": [[-0.817138, -0.0, -0.685341], [0.817138, 0.785702, 0.685341]], "732c16d6-712a-4ecc-8354-ec72c19334f1": [[-0.584369, -9.9476e-17, -0.23691700000000002], [0.584369, 0.674734, 0.23691700000000002]], "44b47cfc-3385-4ffd-a776-0021a3b7ce5a": [[-0.5006860000000001, -3.06582e-17, -0.5006860000000001], [0.5006860000000001, 0.3765, 0.5006860000000001]], "76c240f7-f21e-4226-9cc3-d489940c1d3d": [[-0.6, -1.26606e-05, -0.22602], [0.6, 0.9083159999999999, 0.226031]], "62d597da-8a71-4e23-a30b-2b229b55d970": [[-0.65, 1.60786e-07, -0.244818], [0.65, 0.840001, 0.245028]], "4fda6101-c5d1-4419-8b4e-f563f4787cfb": [[-0.40395200000000003, -1.8260300000000002e-09, -0.206812], [0.40352, 1.1148099999999999, 0.206346]], "80ee0dcc-a5e8-400c-8d41-f04f8b1d937a": [[-0.45283900000000005, -0.000802727, -0.471719], [0.45212800000000003, 0.763548, 0.47132399999999997]], "2b5d9535-8378-4084-874e-481c3a854034": [[-0.291457, -3.0951e-08, -0.19056499999999998], [0.291457, 0.462159, 0.19056499999999998]], "51ec86f8-de27-4189-9d2f-aee0f93611b3": [[-0.44566, -2.91565e-05, -0.315039], [0.445448, 2.07899, 0.314798]], "39aa13ff-3ec6-49e3-837b-57b6b2d5f960": [[-0.842411, -0.0, -0.205699], [0.842411, 0.318305, 0.20569800000000002]], "a4d6dfab-0f58-4b5b-9255-59b9d0a38855": [[-1.302124, 4.7000000000000004e-05, -0.573574], [1.302057, 0.867595, 0.573712]], "22dfd45b-e37d-4ab2-a0fc-2642694b1a80": [[-2.32624, 0.0, -0.862713], [2.3263, 0.904875, 0.862681]], "da317987-48ab-42b5-a210-d89481f7501b": [[-0.19426400000000002, 0.0, -0.194287], [0.19426400000000002, 0.48372, 0.194287]], "3a9a92e3-72c1-422e-a772-ffe37c212e34": [[-0.33744999999999997, 0.0, -0.33755899999999994], [0.337614, 0.861857, 0.33744999999999997]], "db06f39b-2088-48fd-a143-9dc4a8e2b44f": [[-0.287945, -0.00030251, -0.23099699999999998], [0.28803999999999996, 0.385083, 0.230983]], "c935e532-8237-451b-885a-68cb11218a1e": [[-0.518553, -3.30118e-06, -0.181909], [0.518553, 1.7113, 0.182006]], "71e3dc3f-49d2-4de3-8f15-446de8283aba": [[-0.250001, -6.18334e-08, -0.271428], [0.250001, 0.531001, 0.271428]], "4c1abe21-7444-3f00-b774-c15c8319960b": [[-0.37839399999999995, 0.00035299999999999996, -0.474677], [0.39354, 0.748687, 0.34512099999999996]], "1d4fa17e-fd0c-4722-a0ff-8aa46bd73a90": [[-0.325766, -4.05193e-05, -0.19592099999999998], [0.325766, 0.799592, 0.19574000000000003]], "a4efb359-1764-47fc-8dac-4cf01bbc10ce": [[-0.306, 0.0, -0.306], [0.306, 0.096233, 0.306]], "147c6e84-4be0-42dc-8182-b067d0fac836": [[-1.192067, 0.00023199999999999997, -0.546788], [1.191679, 0.937339, 0.546787]], "9090ae7e-815a-412c-8610-0233ae8b4db5": [[-0.662141, 0.0, -0.28482199999999996], [0.662141, 0.7088509999999999, 0.28482199999999996]], "0b5b4459-b235-48ff-a94e-d9ba18b54246": [[-0.75, -9.95843e-08, -0.3], [0.75, 2.0, 0.300001]], "5c2c41c5-a831-473b-a714-e6e54219e5df": [[-0.844916, 0.0, -0.201784], [0.844916, 0.534426, 0.201784]], "f3fceff6-41e9-4994-b79d-faad21aa0fda": [[-0.45795, -0.000474096, -0.407917], [0.45825299999999997, 0.970948, 0.40799799999999997]], "462b185d-114c-4320-bf26-d872abb310ae": [[-0.650574, -9.96043e-05, -0.5287339999999999], [0.650574, 0.7826529999999999, 0.528706]], "22280199-72eb-48d7-bbd0-1760bf6a94c7": [[-0.715001, -7.71049e-06, -0.300243], [0.7150029999999999, 0.3992, 0.300245]], "7a14b8f7-4c05-470f-9964-9f5de7b34412": [[-1.1441, -0.000190123, -0.416599], [1.14415, 0.8933249999999999, 0.417374]], "eddaa6f4-a280-426c-887d-447889d51461": [[-1.41979, -0.000478782, -0.787031], [1.42003, 0.842461, 0.787063]], "1d44fed8-1f0a-34c4-877c-882d306f37ac": [[-0.472014, 0.0, -0.361813], [0.472014, 0.979421, 0.361813]], "d09614fd-4027-4163-b66c-78a9343008d6": [[-0.258897, 0.0, -0.252837], [0.258897, 0.521316, 0.252837]], "08bd9700-ae85-4722-8a3c-bf394a31799f": [[-1.593075, 0.0, -0.542344], [1.5930760000000002, 0.873511, 0.542311]], "fa80d82e-4a40-479a-8a5b-c7eefa014964": [[-0.401414, 5.63738e-05, -0.33287599999999995], [0.401414, 0.7258169999999999, 0.332811]], "a8cf8908-156c-4d18-8992-5bed20d453df": [[-0.8388840000000001, 5.46415e-17, -0.957556], [0.839352, 1.17208, 0.958214]], "8fd16bfa-d663-4ed5-b2e6-7316638fb08c": [[-0.39606699999999995, 0.0, -0.45264400000000005], [0.39606699999999995, 1.001352, 0.452294]], "6c3e445b-31cd-4576-9339-864924524b5e": [[-1.3264500000000001, -9.645590000000001e-08, -0.9499979999999999], [1.3269300000000002, 0.6915389999999999, 0.949943]], "07ce6712-4b46-36ea-b991-b3876f08d904": [[-0.30734100000000003, 4.4999999999999996e-05, -0.274364], [0.306796, 0.731294, 0.28284]], "3822e68e-4089-4795-acf1-7af53e09cc06": [[-0.351292, 7.40828e-05, -0.0785817], [0.350881, 0.944304, 0.0787945]], "293b0f61-70f1-4e66-b381-70c3cf3c290e": [[-1.120715, 0.0012939999999999998, -0.508043], [1.119903, 0.969216, 0.508043]], "8da6d336-60e5-498f-9aab-14c1a1a09c49": [[-0.42249400000000004, 0.0, -0.4127], [0.422582, 0.864137, 0.412325]], "9097c36d-77d3-4e3b-a8c2-eacdbc6a821b": [[-0.264772, 0.0, -0.262945], [0.264783, 0.7739929999999999, 0.262927]], "691949c9-551d-4df3-9f12-f32772a893e9": [[-0.480069, 0.0, -0.453089], [0.480353, 0.7336320000000001, 0.453239]], "0290a7c0-9ef3-4cb9-bdce-229f8d57c80d": [[-0.896843, 0.0, -0.269191], [0.8968250000000001, 0.483054, 0.269191]], "dd9128e2-d08e-4110-895f-af34c39eb231": [[-0.27045, 0.0, -0.218293], [0.27045, 0.430155, 0.218293]], "d01666f1-788b-46d5-9502-fa796496820c": [[-1.215, 0.0, -0.300502], [1.215, 2.30809, 0.300527]], "ddeaac35-bfba-4cdf-96fe-c3ea9436a386": [[-0.46224600000000005, 1.94592e-06, -0.33858199999999994], [0.46196800000000005, 0.434416, 0.338542]], "28e685c5-a57f-4c36-b4f4-87c07013c9c3": [[-1.05008, -1.42963e-18, -0.245081], [1.05008, 0.564975, 0.245081]], "238c3d4e-2c08-4d8d-82c4-b06326568e27": [[-1.08029, 9.07083e-08, -0.19853], [1.08029, 0.360068, 0.19853]], "1c3c877d-c3eb-347b-924b-32112290b238": [[-1.122034, -0.0, -0.442791], [1.093374, 0.8933230000000001, 0.46084200000000003]], "76975bca-bfa9-40a5-af8d-0ff2101ac652": [[-0.776416, -3.8443000000000004e-05, -0.996947], [0.776127, 1.01058, 0.996947]], "56543761-9ef8-34c7-84ad-32c8bf20790f": [[-83.5191, -0.1495, -54.6509], [83.5191, 196.1519, 54.6509]], "2530fd29-db31-449b-96aa-16deff3d2446": [[-0.828161, 6.469439999999999e-17, -1.11588], [0.828276, 1.34015, 1.11778]], "6bf691ae-482f-4bf5-baf3-ef0cc5a4754c": [[-0.523817, 9.7e-05, -0.42906799999999995], [0.523297, 0.8968229999999999, 0.428808]], "4e347050-97fb-42e5-aa10-7d43bb151446": [[-0.889816, -0.000145805, -1.09114], [0.891489, 0.932061, 1.09095]], "b88860c7-c936-455d-a41d-1f6772afb376": [[-0.474885, -0.00378421, -0.474889], [0.474873, 0.9131969999999999, 0.475005]], "7ae94335-929c-41f6-a573-3e433f10afca": [[-0.24744, 0.0, -0.246952], [0.24744, 0.592513, 0.246952]], "81e713a1-6c5d-4498-b064-044e0a80fd04": [[-0.804836, 1.2207e-07, -0.404474], [0.804836, 0.529433, 0.40448799999999996]], "84e1d37e-4eff-4865-8fe2-03cb948ec222": [[-0.7585, 0.0, -0.40984200000000004], [0.7585, 0.715134, 0.40984200000000004]], "9b644dba-2db0-45c3-ac8d-8b54175e8589": [[-0.364295, 0.0, -0.384158], [0.364295, 0.83478, 0.384158]], "664fdc2d-3247-4424-97ad-2d8d66367404": [[-0.636896, 5.999999999999999e-06, -0.636787], [0.636787, 0.979134, 0.636771]], "6897f186-ba4b-3e26-a0c1-401bfae54af6": [[-0.6096, 0.000186, -0.2286], [0.6096, 0.762, 0.2286]], "833b3ddc-3cf4-3411-aad5-e3e7fc9856eb": [[-149.7878, 0.0, -146.5296], [152.4014, 94.3228, 149.9153]], "6854c811-e417-47fd-8329-9eeccefa9c24": [[-0.759816, -7.62939e-09, -1.24572], [0.759816, 0.953912, 1.24572]], "55f743c5-d774-353a-9432-67a8bb172772": [[-1.501951, 0.000936, -0.698938], [1.502225, 0.7323569999999999, 0.698938]], "8efbd6a1-991a-4564-a8e3-29a778b12cec": [[-0.4075, 0.0, -0.1575], [0.4075, 2.7000189999999997, 0.1575]], "7fdf4e54-7b30-40c1-97b8-aef918e0131d": [[-0.697145, -1.04302e-11, -0.313371], [0.697145, 2.16, 0.313371]], "572680b5-2a79-46e6-ab8d-baeff14b4cfb": [[-0.516616, -8.85633e-06, -0.650063], [0.516503, 1.26952, 0.651133]], "dac46aab-e370-49a7-b58b-43dbebe199fa": [[-0.928996, 0.0, -0.41174], [0.928996, 0.820994, 0.41174]], "ebd2a8a6-71df-4906-8633-8e5efb971f20": [[-0.304295, 0.0, -0.263456], [0.304295, 0.533251, 0.263456]], "77022c23-c492-4ec4-8ac2-e617ed70fa5f": [[-0.251658, -9.43697e-05, -0.251568], [0.25160699999999997, 0.600103, 0.25126000000000004]], "6de64919-5417-4897-b181-6de6eda0f98a": [[-0.229361, 0.0, -0.213308], [0.229361, 0.454174, 0.213308]], "57fcf466-f39b-4bc9-8f0c-13db9c9a0675": [[-1.035, -1.86759e-17, -0.305], [1.035, 2.385, 0.305]], "4b59aaf8-c00a-4c78-94ae-bc9e26c98696": [[-0.35, -2.14313e-17, -0.35], [0.35, 0.12072699999999999, 0.35]], "00289456-13dd-4742-bdbc-b22758005a2f": [[-1.01752, 4.64333e-06, -0.395696], [1.01759, 0.782007, 0.395722]], "0aa20dad-4049-4ebb-b7a5-e00eb76ff5e9": [[-1.0540720000000001, 0.0, -0.399324], [1.0540720000000001, 0.860236, 0.399324]], "52b4311a-96e2-4a58-854a-7c01a9b70de2": [[-0.255417, 0.0, -0.160094], [0.255417, 0.608082, 0.160085]], "ba952631-d266-36af-8036-ac2e8bd638ca": [[-1.5, 0.0, -0.592199], [1.5, 0.741887, 0.592199]], "06fb812d-213f-4928-bd37-8d690b11c2fa": [[-1.10517, -4.5782599999999996e-07, -1.15297], [1.10513, 0.979301, 1.15368]], "cff8873d-a673-484d-98a9-557b4b7fa6cd": [[-0.233891, 0.019445300000000002, -0.23254999999999998], [0.234068, 1.09878, 0.23216799999999999]], "acf77210-83af-4c49-b2dd-6495e115ac47": [[-0.8623829999999999, -1.38283e-08, -0.392911], [0.862084, 0.637776, 0.392502]], "dfc72e00-60bf-4003-8841-b94d3eed5677": [[-0.486045, 0.0015140000000000002, -0.486045], [0.486045, 1.577526, 0.486045]], "fad76641-9a2f-4d00-8e2d-832c48bbc173": [[-0.977525, 0.001, -1.040758], [0.9772190000000001, 1.048827, 1.038553]], "7cb7d3d9-aa6a-4554-bed4-e92d6e8e40c8": [[-0.968166, -4.1104999999999994e-05, -0.23618099999999997], [0.968166, 0.8802490000000001, 0.23618099999999997]], "e7dead2b-9620-4deb-a49b-cd9c1eedf3d7": [[-0.824141, -0.00403557, -0.8241970000000001], [0.824141, 0.7464, 0.8241970000000001]], "418e5712-8bb5-487d-b0cd-2e23d29b8e83": [[-1.0981999999999998, -0.0005109849999999999, -1.17624], [1.09924, 0.9210160000000001, 1.17692]], "240750b2-2a9f-4eb8-b61f-40505cd8936a": [[-0.6780349999999999, 0.000128615, -1.0449599999999999], [0.6780349999999999, 0.818194, 1.0445]], "80d1eb0d-3d7f-44b6-84e2-9a3a4788d006": [[-0.9981829999999999, -2.26093e-17, -0.444625], [0.998536, 0.76428, 0.44378500000000004]], "bcbf90f5-7616-433f-8aff-741080850852": [[-1.1720300000000001, -0.000161909, -0.43512799999999996], [1.1721, 0.7982899999999999, 0.435713]], "4e27ad31-e1a1-4130-83b9-d87aa9bdc4fa": [[-0.7575230000000001, 2.7000000000000002e-05, -0.754756], [0.7575230000000001, 0.75, 0.754756]], "5e10381b-a2de-4cb4-86cc-b3033a12de45": [[-1.61601, -1.84285e-05, -1.00563], [1.61423, 0.807612, 1.005]], "13b7fa75-c852-4403-bd63-2b0ffb0051ca": [[-0.6475190000000001, 0.0, -0.299999], [0.6475190000000001, 0.45015700000000003, 0.3]], "ff3c38d4-f2b1-4a7a-9216-7caf091d75c1": [[-1.5225030000000002, 0.0, -0.46347900000000003], [1.5225030000000002, 0.873773, 0.46347900000000003]], "63971f62-71c4-4673-90a1-38524836c0a6": [[-1.0441930000000001, 0.0, -1.192928], [1.044316, 1.278273, 1.1915529999999999]], "f80c707f-cd4f-4890-aca6-f50aa8780bc2": [[-0.363071, -0.000103088, -0.0689285], [0.363067, 0.49249299999999996, 0.0692964]], "0960c31f-e79b-4bc9-8cff-2d5575e1fbb9": [[-1.13502, 1.14209e-17, -0.45077599999999995], [1.13466, 0.861769, 0.45082900000000004]], "7e4d8f59-4e46-441a-ae94-259f0d61d04b": [[-0.30837, 0.0, -0.321556], [0.308522, 1.095219, 0.32149099999999997]], "d607185d-ff97-479f-ae0b-587c46fc0f7c": [[-1.05, -9.123629999999999e-18, -0.20000099999999998], [1.05, 0.75, 0.20000099999999998]], "221f31fd-1759-4c14-b183-77a0ac51b55f": [[-1.16583, -0.0016170300000000002, -0.453375], [1.1645999999999999, 0.822863, 0.453375]], "12d840b9-5eba-41d8-976d-d93fd0ae8d85": [[-0.271502, 0.0, -0.271502], [0.271502, 0.528155, 0.271502]], "50c338dc-2d1a-4ed5-8435-5352759293d9": [[-0.672935, -2.49773e-18, -0.246505], [0.673707, 0.865305, 0.24872]], "145a4323-43c0-35c5-9f1c-95ad5c7398e5": [[-0.9913620000000001, 0.0, -0.458977], [1.008638, 0.7290000000000001, 0.441023]], "072359a9-8c50-4d8f-83b9-4967d32c9e5e": [[-0.908246, 1.52588e-08, -0.21496300000000002], [0.908246, 0.6658360000000001, 0.21496300000000002]], "60d66fea-b63a-43f0-b85c-748a3adc0391": [[-0.421526, -0.00192371, -0.42172600000000005], [0.42222499999999996, 1.02424, 0.42162799999999995]], "38e8874a-0c29-4d46-8ad6-4ae7d050c462": [[-0.619097, 0.0, -0.22967400000000002], [0.619097, 2.01833, 0.22967400000000002]], "4a2df868-c5f4-4a55-94b8-c28408b710e6": [[-1.149358, 0.000146, -0.44489199999999995], [1.149449, 0.945793, 0.44489199999999995]], "025a63d5-0600-4101-8252-b6318f938695": [[-0.878456, 0.004078, -1.042697], [0.879417, 0.992461, 1.044465]], "26c7919c-b7b2-43f3-a335-d4534e32e8c3": [[-0.12999, -0.000125981, -0.12999], [0.129947, 0.776261, 0.129992]], "ec7533e4-557a-4f24-8200-a26e977363be": [[-0.219174, -6.675720000000001e-09, -0.175306], [0.219175, 0.439802, 0.175306]], "40d3ac4e-bb90-4053-a1d0-624abf505322": [[-0.234956, 0.0, -0.234956], [0.234956, 0.45645800000000003, 0.234956]], "dab5ae00-0024-4e5d-a362-13e81efbf170": [[-0.42558399999999996, -0.00010341400000000001, -0.42587600000000003], [0.42490900000000004, 0.437348, 0.425508]], "a41dc8ba-827b-4f3a-98d9-ad5f1f7618a0": [[-1.084068, -0.0, -0.461547], [1.083996, 0.9340560000000001, 0.461625]], "52a7986a-d2a3-4492-8d4c-ac7a06fcd3b6": [[-0.201355, 5.90067e-09, -0.13533699999999999], [0.201355, 0.442321, 0.13533699999999999]], "420a215e-1f22-4f2f-a6ca-cdb37f7f0b03": [[-1.606484, 0.00016299999999999998, -0.680381], [1.606484, 0.7156199999999999, 0.680381]], "58ebc3ba-3bc1-3da2-8ff7-2d0426511c10": [[-0.401002, -0.000293, -0.401959], [0.401002, 0.8369719999999999, 0.40196]], "444870b4-22a7-4161-a58c-87afe1336ab6": [[-1.86817, -0.000519113, -0.908485], [1.86815, 0.799277, 0.908374]], "27a808c6-af2b-4f1b-b9f0-c22ccd8dadda": [[-0.278003, -1.62104e-17, -0.299585], [0.27781300000000003, 0.791293, 0.299511]], "1135b833-d8b4-4884-b70d-8e6e856feed7": [[-0.172488, 0.0, -0.16787400000000002], [0.172488, 0.831928, 0.16787400000000002]], "6f9d738d-0a0d-4712-bf41-46ce4816039e": [[-0.6506109999999999, 0.0, -0.169234], [0.6506109999999999, 1.011999, 0.169234]], "6a7da9c2-0fbc-438b-bdf5-8a17bd50d1b3": [[-0.350187, -0.00037646, -0.275111], [0.350159, 0.697529, 0.275125]], "4f6d6c68-3d03-4cbb-8c09-5640e564b74a": [[-1.13496, 1.07757e-17, -0.252077], [1.13496, 0.43331899999999995, 0.252077]], "025336c8-61ba-4cb9-b844-a67ae7d553ff": [[-0.256942, 0.0, -0.24963999999999997], [0.256942, 0.8476170000000001, 0.24963999999999997]], "a86e27f5-9af8-45d5-ac87-6f67572002a0": [[-0.242749, 0.0, -0.17671900000000001], [0.242749, 0.659237, 0.17671900000000001]], "3e402a11-d765-4691-848f-ab3f96f85f0f": [[-1.059729, 0.001116, -1.142398], [1.05917, 0.943449, 1.1423860000000001]], "0855306f-0728-4914-9245-9ab7fcac9478": [[-0.268403, 0.0, -0.268403], [0.268403, 0.29791, 0.268403]], "46459909-f4ea-40f0-817d-575bf9580b91": [[-0.08, -4.36045e-05, -0.05], [0.08, 0.8159529999999999, 0.05]], "4541194c-5e86-48ab-89bb-a45aa9308093": [[-0.479176, -0.000583594, -0.06807780000000001], [0.478805, 0.524347, 0.0680723]], "a0223cf8-70eb-4cac-aedc-97b9f28a55de": [[-0.357723, -0.00064948, -0.379274], [0.35757399999999995, 1.0846200000000001, 0.379233]], "8482b5f2-3645-47ea-80be-048633104da7": [[-0.585124, -5.50585e-07, -0.32496899999999995], [0.584627, 0.24093299999999998, 0.32496899999999995]], "6ae84081-8907-4796-b732-c23949add087": [[-0.46, -1.23689e-17, -0.226], [0.46, 0.63, 0.226]], "69ca0537-9dcf-403d-9a25-ac58e28f436f": [[-0.506568, -1.4335599999999999e-05, -0.0608826], [0.506635, 1.03749, 0.0609091]], "3f012ebe-d552-40be-b18a-b9450b107996": [[-0.6517489999999999, -0.000119278, -0.384584], [0.651781, 0.37205599999999994, 0.384584]], "a5316f71-67f0-4773-a987-c2b979b8f106": [[-0.318952, -0.00032328, -0.319011], [0.31866099999999997, 0.520128, 0.318831]], "6ee0382d-4b04-445c-818e-8a0dc3e9450b": [[-1.246368, 0.0, -0.533257], [1.246442, 0.813887, 0.532836]], "aa6d228c-fc58-4e80-b1c2-ecb2e6fb25f8": [[-0.53445, 0.0, -0.470406], [0.53445, 1.175389, 0.47031300000000004]], "90e7b378-a2c4-4fe8-a49e-568388a3860b": [[-1.13398, 1.8468e-05, -0.42513100000000004], [1.13392, 0.778857, 0.425065]], "ca4119e2-1788-4f22-9f7e-7c11972519c9": [[-0.774527, 1.2405899999999999e-07, -0.242013], [0.774527, 0.8210580000000001, 0.242013]], "8650549b-8b7b-3195-b85e-d6f104935dff": [[-0.992177, -0.0, -0.992269], [0.992177, 0.761981, 0.992269]], "447ab0ab-00e8-4964-9a1c-61b910553117": [[-1.32761, -5.72589e-05, -0.445753], [1.3283, 0.7043300000000001, 0.445721]], "612c36f1-f3cc-47e6-883f-5eda1c0a36c7": [[-0.875, -1.8339099999999998e-17, -0.3005], [0.875, 2.65, 0.3005]], "0d1dde0e-f69d-451c-85d9-8cb9a1eaa3a5": [[-0.48979599999999995, -0.0036165000000000004, -0.48979599999999995], [0.48979999999999996, 0.684273, 0.48979599999999995]], "e3494fe1-b96f-4c25-ab30-00e715e4fe02": [[-0.044083699999999996, -1.98519e-18, -0.0425819], [0.044083699999999996, 0.6665949999999999, 0.0425819]], "841a2bc1-8e73-4e3e-9084-dae9c67f2b0b": [[-0.19411899999999999, -2.0741499999999998e-05, -0.194144], [0.19403600000000001, 0.5494720000000001, 0.194242]], "850a6f49-9530-4230-ab43-ae33528706c1": [[-0.391929, 6.57991e-08, -0.41059199999999996], [0.391928, 0.9270430000000001, 0.409672]], "780bc20d-e0d5-4207-bc1d-0c025677c5aa": [[-1.0375, -1.99889e-07, -1.10937], [1.0378, 1.2263899999999999, 1.10864]], "2b8d4d31-5667-43b1-bb0a-a2dfda2c3212": [[-0.910616, 3.05176e-08, -1.28067], [0.910617, 1.55733, 1.28057]], "dce45bd9-5dd7-44fa-bd87-a272fec00cb5": [[-1.150302, 0.0, -0.40746499999999997], [1.149139, 0.8734310000000001, 0.407978]], "ec143962-2b2e-4466-bc8b-3afa4ed26081": [[-0.182424, -5.70701e-05, -0.0194394], [0.18242999999999998, 1.1791, 0.0194394]], "5631b63c-24b2-4074-857b-425794858ca9": [[-0.613667, -1.44677e-17, -0.329944], [0.613141, 1.8645699999999998, 0.330958]], "e4eca056-8cf3-48c3-ac4b-9901c53c0b9d": [[-0.39725, -0.00019188799999999998, -0.114965], [0.397252, 1.13033, 0.11493700000000001]], "cdc5ae7f-ec28-46f2-a253-7db08340ccb1": [[-1.228173, 0.0, -0.45508899999999997], [1.228173, 0.9032340000000001, 0.45508899999999997]], "03d94c39-cd75-42ad-b298-7f96d98197f9": [[-0.900019, -1.58614e-17, -0.260067], [0.900019, 0.45, 0.260067]], "d9c9ebe9-de0c-4576-aff0-fc5b7fa30b14": [[-0.896447, -2.05682e-17, -0.426019], [0.896447, 0.6910649999999999, 0.425512]], "641de3dc-fcae-40ee-85ed-1747f46551b0": [[-1.15455, -0.000322154, -0.237212], [1.15474, 0.5565370000000001, 0.23787199999999997]], "429a6413-08a6-4723-8a52-55c3e40c0cc2": [[-0.758471, 2.2066500000000002e-17, -0.45792], [0.758471, 0.438585, 0.45792]], "f4783a01-3f03-410b-b940-6bfda75f6b27": [[-0.307153, 1.2256600000000001e-17, -0.278618], [0.307153, 0.79443, 0.277962]], "64b44dd9-19ad-3235-b93d-c5f9c75e0257": [[-42.0397, -0.045, -46.2981], [42.0397, 111.5962, 46.2981]], "03a586ae-5555-4244-b756-3fda0d09d91a": [[-0.5186769999999999, 0.0, -0.134695], [0.5186769999999999, 0.780377, 0.134694]], "685686ef-42b1-4de0-b09f-b539d1a23d5a": [[-1.0575, -9.14466e-05, -0.467211], [1.05758, 0.8464149999999999, 0.467313]], "2a7fd249-5ac6-4e46-a12f-dce1cdefd840": [[-0.42757399999999995, 0.0, -0.457038], [0.42757399999999995, 0.806238, 0.457038]], "50fea5da-e376-4860-8906-21d4e9395d3e": [[-0.34492100000000003, 7e-06, -0.336028], [0.34492100000000003, 0.918068, 0.335958]], "e914e4f7-9047-44e6-9a8a-19b64427ad37": [[-0.258869, 2.8e-05, -0.121853], [0.258956, 1.112432, 0.12189399999999999]], "0bb806d9-0f7a-49f4-9cf6-495559349461": [[-0.739037, 5.5482800000000005e-17, -0.906104], [0.737855, 1.27461, 0.9062009999999999]], "8b338186-9acd-433f-99ce-d156a84e27c5": [[-0.372051, 0.0, -0.377457], [0.372051, 0.931673, 0.377457]], "6a143d55-67b0-4d1e-8fdc-63df7b749e5b": [[-1.116555, 0.0, -1.25152], [1.116555, 1.245609, 1.25152]], "53d8a7d2-1c47-4466-8e6c-867e3a63fe58": [[-0.325912, -8.392589999999999e-08, -0.48613500000000004], [0.325912, 0.104001, 0.48613500000000004]], "487092ac-5c24-48bc-a957-95be07cd9be5": [[-0.6658369999999999, -7.62939e-09, -0.19054500000000002], [0.6658369999999999, 0.8102360000000001, 0.19087800000000002]], "84bf5c56-1451-451e-a1ec-c0d131d7391d": [[-1.00387, 0.0, -0.440229], [1.00387, 1.29234, 0.44023]], "4236a3e8-a20f-4d9f-99b1-e1141c28c145": [[-0.275, -6.19324e-06, -0.275], [0.275, 0.133158, 0.275]], "1ee79aac-3f9e-42be-985a-48809910a308": [[-0.43979799999999997, 0.0, -0.37361400000000006], [0.43979799999999997, 0.805459, 0.373804]], "0ece6933-46f0-3ad2-a9c5-8daac15e5ad3": [[-1.0093729999999999, 0.0028139999999999997, -0.5939679999999999], [0.999613, 0.7268640000000001, 0.595684]], "6ae65fd1-f937-4b0d-ba6b-54b75022bb79": [[-0.237529, 0.0, -0.238068], [0.237453, 0.626927, 0.237967]], "d5299ef5-0586-4d33-9834-51d02963f50a": [[-0.555529, -0.000172195, -0.36668599999999996], [0.556289, 0.6382650000000001, 0.367784]], "003a85cc-1a58-4b93-8b5c-11ad960aded5": [[-0.487902, 7.1e-05, -0.446113], [0.488658, 1.0713460000000001, 0.446706]], "ee837fa2-dacd-4b6b-a312-c3c0576ecda1": [[-1.16163, 0.0, -1.149461], [1.161416, 1.465608, 1.149461]], "460d3c30-f894-4098-8df8-7f750b8fee6d": [[-0.985357, 3.3201299999999994e-07, -1.11474], [0.984589, 0.9819410000000001, 1.10964]], "76fb0a4d-eb99-4c88-ad5b-b2f40a72426e": [[-0.7264539999999999, -1.3678700000000001e-17, -0.260195], [0.7264539999999999, 1.3196, 0.260186]], "0479899c-c096-47c6-9a2b-25d49f1dcbc6": [[-0.215507, -3.12521e-05, -0.224937], [0.215507, 0.394774, 0.225181]], "b0c041ad-2cc9-4b5a-8683-a5de89006ef4": [[-0.599931, -7.15579e-05, -0.234317], [0.600304, 1.62225, 0.232849]], "80c66afe-a38e-43cc-b423-5d86f3fc4b41": [[-1.121832, 5.2e-05, -0.266775], [1.1217570000000001, 0.7210540000000001, 0.266789]], "7a548ca3-89e1-485b-9fc4-507837a37bd0": [[-0.404376, -0.000497266, -0.404344], [0.404541, 1.44654, 0.40488100000000005]], "2951d8ff-6114-4050-8d37-961baf6ab25c": [[-1.12738, -0.0004900109999999999, -0.490762], [1.1272499999999999, 0.8330649999999999, 0.49178]], "00e2173a-9048-3ee9-b02c-86fb88b14ad4": [[-1.553974, 0.0, -0.793712], [1.516509, 0.9162269999999999, 0.8535309999999999]], "006a08bb-914c-49b9-93ed-4de256ae74c2": [[-0.65119, 0.0, -0.200195], [0.651211, 0.745564, 0.200173]], "628f0512-9454-40ee-b65b-d3e253cc9227": [[-0.9390900000000001, 1.46435e-17, -0.241709], [0.9390900000000001, 0.7335160000000001, 0.241709]], "28403022-e92b-49f4-9dbf-21c26406df1b": [[-0.33925, -0.00035045, -0.339256], [0.339272, 1.15461, 0.339207]], "21133073-d078-40a4-a21d-53d2fa4d989c": [[-1.2375, -0.00028879700000000003, -0.42756], [1.23749, 0.925604, 0.42760800000000004]], "7e8a8882-0bcc-4f42-9f03-42d03c1f0e79": [[-1.18372, -0.000131865, -0.606057], [1.1836799999999998, 1.00654, 0.605357]], "9f6db83e-bdfb-4526-86a9-7d241cce4ba5": [[-0.17393899999999998, 5.999999999999999e-06, -0.20332], [0.17393899999999998, 0.642757, 0.20332]], "247c449d-4acc-451f-b0dc-515165ea6a62": [[-0.52049, -3.9117899999999995e-08, -0.313443], [0.52049, 1.29084, 0.313443]], "6949cc85-3d5c-43f3-b3cf-9b1d0a68a5e1": [[-0.313378, 5.1000000000000006e-05, -0.293855], [0.313378, 0.5960110000000001, 0.293956]], "49265336-2062-402e-9957-a18fdc5bb4ac": [[-0.35056, 9.60742e-05, -0.349928], [0.35015, 0.519118, 0.350559]], "66be50ba-9d16-4518-8f57-887cc9dd8b18": [[-0.292055, 2.1e-05, -0.36804299999999995], [0.292106, 0.6455249999999999, 0.368]], "cf42607e-1745-45a0-bda3-f382c6d54eb3": [[-0.313576, 7e-06, -0.232042], [0.313388, 0.39448300000000003, 0.232042]], "35fb412d-a7a6-4797-b5f8-d081cf54fc2d": [[-0.589703, 0.0, -0.39144100000000004], [0.589703, 0.262762, 0.39144100000000004]], "5354b81e-2f1a-4930-b077-c449f3b32490": [[-0.9021330000000001, 0.0, -0.19997499999999999], [0.9021330000000001, 0.55194, 0.19997499999999999]], "6e331032-ba44-3adf-9019-3342950441c5": [[-0.401759, 0.0, -0.483806], [0.401759, 1.1277970000000002, 0.483806]], "e2e2f5f6-447a-4e60-b67e-c706af76281c": [[-0.8586839999999999, 0.0, -0.17639], [0.8586839999999999, 0.652977, 0.17639]], "0585a449-af43-4e62-a137-037b7c70997f": [[-1.023, -0.000235543, -0.361101], [1.02282, 0.731499, 0.360502]], "1b9d62ed-554b-4542-b225-265338db3514": [[-0.320967, -5.763980000000001e-09, -0.21175899999999998], [0.32096600000000003, 0.604155, 0.211764]], "ddef48db-000d-4614-94c4-67ce114bb0e9": [[-0.340881, -7.62939e-09, -0.22923100000000002], [0.340881, 0.456486, 0.22923100000000002]], "34fe2a0b-7134-447f-9271-386a676c563d": [[-0.264187, 0.0, -0.259934], [0.264187, 0.540164, 0.259934]], "48143f7f-fa2e-4475-979b-dd713e48a5dd": [[-0.383707, -0.000358104, -0.37255699999999997], [0.383839, 0.742045, 0.370835]], "79cbe7c9-c5a0-446a-8ce2-1ba3079693e6": [[-0.711585, 0.0, -0.23119199999999998], [0.711585, 0.797112, 0.23119199999999998]], "4fa07778-81ac-4522-9a9d-8ca9f2f55cc6": [[-0.900001, 0.0, -0.40150199999999997], [0.900001, 0.9199240000000001, 0.40150199999999997]], "f77887bb-8e4c-4609-8b3f-b0614d9fc670": [[-0.515428, -0.00053025, -0.18712499999999999], [0.515188, 1.58589, 0.18746200000000002]], "a9d3ec05-09b2-47da-93de-d9fb6104387f": [[-0.72, 3.05176e-08, -0.251783], [0.72, 1.0541500000000001, 0.251782]], "ded01c90-1a6a-42a5-b340-9e9972d83ace": [[-0.993849, -0.0, -0.531968], [0.993318, 0.87988, 0.531968]], "ff792696-fc1a-404f-8d1c-c5b745f2be39": [[-0.536697, 0.0, -0.68553], [0.536697, 0.330232, 0.68553]], "7fad5a07-4705-4000-b379-dd93e4262dd4": [[-0.3, 0.0, -0.20784], [0.3, 2.5, 0.20784]], "3989579e-0f89-4d43-b451-51a4dae3d2e1": [[-0.388393, 0.0, -0.25642], [0.38846899999999995, 0.423551, 0.25651599999999997]], "00c0cffb-dcf2-4a2d-86d0-9d4072d5f449": [[-1.1053199999999999, 0.0, -0.532804], [1.105319, 0.9806570000000001, 0.532804]], "09f4d4d8-30ad-4280-b2a0-f5ed8fa03aee": [[-1.4799600000000002, -7.26892e-05, -0.8447539999999999], [1.4805099999999998, 0.8949750000000001, 0.844781]], "f8ad78fa-83a4-4585-9e6f-540ecf40cfb7": [[-0.8590000000000001, 0.0, -0.175], [0.8590000000000001, 2.46, 0.175]], "8d88a0e7-c261-4ac0-93cb-39b3264bf7b5": [[-0.781895, 0.0, -0.275988], [0.781895, 0.7301179999999999, 0.275988]], "0ebbc981-f46b-4c1f-8820-c1bf4d9877bb": [[-0.75728, 3.2e-05, -0.43251199999999995], [0.757279, 0.3765, 0.43363100000000004]], "89a2209b-d394-433c-a2a7-0b9831b96a12": [[-0.399404, 0.0, -0.442615], [0.399404, 0.226861, 0.442615]], "d82a9c41-103e-47f5-b0d4-714a6ddcb523": [[-1.315864, 0.0, -0.42922], [1.316361, 0.879995, 0.42922]], "ee8e9ae9-a5bc-4125-89b9-4bc0511c95b1": [[-0.221478, -4.33431e-16, -0.222137], [0.22142299999999998, 0.405154, 0.22239699999999998]], "d1086485-33e6-4658-a2c6-a1271f1237ca": [[-1.34309, 0.00025, -0.571654], [1.343149, 1.000138, 0.57209]], "eb2fe98c-e20c-469a-8c1d-a936cabf9a3b": [[-0.5, -8.29665e-18, -0.15], [0.5, 0.602, 0.15]], "6df723b6-51ec-4339-9efa-912110603763": [[-0.828908, -0.000342965, -1.09486], [0.829117, 1.14445, 1.09301]], "abf6ffbf-c6d5-4b1b-ac86-e1743d4430e4": [[-0.405, -5.00837e-10, -0.27], [0.405, 0.126, 0.27]], "236ffa12-8887-4376-a67f-16f1f17f18aa": [[-0.95, 2.8172e-08, -0.222045], [0.95, 0.568, 0.22206099999999998]], "f1c1764f-4627-4382-a546-2bb071e8ebff": [[-1.0929689999999999, 0.0, -0.440809], [1.092634, 0.8630289999999999, 0.440809]], "5233c862-4429-499c-957d-7ea65ded072b": [[-0.31998899999999997, 1e-05, -0.359923], [0.31989, 0.6817270000000001, 0.359448]], "24dc39b1-6673-47ed-9845-02947e8c60f9": [[-0.8502240000000001, 1.8256e-07, -0.226846], [0.8502240000000001, 0.6600020000000001, 0.226846]], "3afd2355-4ea2-445f-b815-2d142abd0e72": [[-0.613548, 0.0, -0.40411299999999994], [0.613467, 0.507961, 0.403934]], "fcd7f3ae-0c21-4230-94e4-3a0e12ebcc78": [[-0.62414, 0.0, -0.252176], [0.62414, 0.5097849999999999, 0.252176]], "4e269ffb-09ac-4244-a680-db65bbc33980": [[-1.98618, 0.0, -1.19358], [1.9840799999999998, 0.9806140000000001, 1.19227]], "63f0d14d-42f2-4560-88db-d431b515f9e6": [[-1.1713, -7.47206e-05, -0.484193], [1.17141, 0.830094, 0.483761]], "aef5f7e8-7353-4655-8fb8-1e7d605a606a": [[-0.43006500000000003, 0.0, -0.177845], [0.43006500000000003, 0.289168, 0.177845]], "7e17329f-820d-42e4-a289-bdfd49a33195": [[-1.40937, -6.66663e-08, -0.532132], [1.40937, 0.800695, 0.531807]], "b328cfe4-5621-493f-994f-24740d65dcde": [[-0.950001, -6.10352e-08, -0.20136600000000002], [0.950001, 2.25, 0.20136600000000002]], "38b1011c-7c71-4c0f-ae0d-f448baad0297": [[-0.296371, 0.0, -0.207918], [0.296371, 1.9110589999999998, 0.207896]], "5e1becdc-0f4e-4f2a-a8b7-4f8ba0e28f24": [[-0.200013, -1.2186e-17, -0.200013], [0.200013, 1.2, 0.200013]], "c3d16361-36b1-4954-85a4-2f8c64ab255d": [[-1.02382, -2.30926e-17, -0.383337], [1.0238500000000001, 0.773452, 0.38284199999999996]], "230489b8-2c6f-45b0-b25c-46dab6160496": [[-1.2070999999999998, 3.05176e-08, -0.545935], [1.20706, 0.8930060000000001, 0.544625]], "7412a2b4-7864-4666-a19e-25cf6e30cf82": [[-0.542848, 3.24249e-08, -0.280902], [0.54252, 2.07073, 0.27947]], "68716fd8-adbb-423b-9a96-4b5357bb0052": [[-0.359624, -0.000177832, -0.311222], [0.359731, 1.14038, 0.311281]], "1e5cf667-e6d5-40ce-a579-7f4c1ca84b76": [[-0.322189, 1.33514e-08, -0.323816], [0.3222, 0.877731, 0.323246]], "d8f18019-7b99-492e-88aa-2be0613dc92b": [[-0.9, 0.0, -0.4], [0.9, 0.75, 0.4]], "785f9058-1099-4f33-a0a8-0846ca95b536": [[-0.253427, 0.0, -0.24116800000000002], [0.253427, 0.699376, 0.241182]], "f2e2649b-ed26-403d-b491-2bd61773c81d": [[-0.946321, 0.0, -0.26034], [0.9464130000000001, 0.5122599999999999, 0.260344]], "05f6eb5a-60a8-462b-ad0e-cfdd7f526e9c": [[-1.0704609999999999, 0.0, -1.04842], [1.0704609999999999, 1.0326300000000002, 1.04835]], "4ffea17a-badf-451f-92a9-935f61a0b5ef": [[-0.387456, 0.0, -0.234634], [0.387456, 0.502438, 0.234634]], "f1e2158b-770b-464a-bcf2-902ba2c48af0": [[-0.39522100000000004, -0.00102524, -0.357296], [0.39522100000000004, 0.542515, 0.357296]], "516df560-ce7d-48a4-9775-cc5780987424": [[-0.894619, -1.01776e-17, -0.183145], [0.894619, 0.450461, 0.183755]], "9c535c3b-7700-4ee9-bd00-2e81212090c4": [[-1.163645, 0.0, -0.769708], [1.163779, 0.89003, 0.7691589999999999]], "3da1c61e-1dca-4dce-b020-efb217d96001": [[-0.946773, 0.0, -0.277093], [0.946773, 0.7895730000000001, 0.277023]], "2564da60-f12c-47d1-9455-76ed3fc7628e": [[-0.721121, -5.85001e-05, -1.044], [0.721121, 0.584804, 1.04399]], "147224c8-4374-40d9-8242-330cda9e2044": [[-0.651589, 0.00010200000000000001, -0.9732170000000001], [0.65148, 0.768424, 0.968316]], "ffe5bff5-656c-4b0e-836e-44e098bbcfa9": [[-1.0915000000000001, -7.13168e-05, -0.434149], [1.09128, 0.7108969999999999, 0.433093]], "5f99048f-66bb-428a-9495-1150881b62ae": [[-0.8712529999999999, -0.00048237299999999997, -1.13639], [0.871252, 1.3987, 1.13696]], "ec856859-b0dc-4681-8f48-91a8260912b1": [[-0.286352, 0.00037, -0.292992], [0.286517, 0.8494370000000001, 0.292946]], "4d5a0347-ad0b-4296-990d-06b4fa622ba2": [[-0.374336, 2.28882e-08, -0.37603200000000003], [0.374278, 0.753151, 0.375135]], "02bb6c69-603c-4d60-ab2d-1c4f129acca2": [[-0.278442, 0.000444, -0.278487], [0.278442, 0.590711, 0.278487]], "ca021700-dd65-42e5-9186-470cceae99df": [[-0.36465400000000003, -1.18791e-05, -0.34007800000000005], [0.365099, 0.439032, 0.340678]], "2e6700ec-8bae-47f7-b805-8be47e3529da": [[-0.208883, -7.10272e-08, -0.21694400000000003], [0.208883, 0.48503799999999997, 0.216946]], "406a9ad3-aceb-4705-be4c-5afb6a96af8b": [[-0.316371, 0.0, -0.238553], [0.316371, 0.526991, 0.238553]], "7a548ccb-532b-4405-a39b-57e669c55226": [[-1.868431, 0.0, -0.969114], [1.868568, 0.98005, 0.969237]], "9edc708d-be83-41c4-9f8d-8f80ade68a4e": [[-0.287151, -7.51343e-08, -0.213062], [0.287151, 0.537221, 0.213062]], "5e3027db-4d7e-43d2-b0f8-36151f3bc75e": [[-1.057069, 0.0, -0.44296100000000005], [1.057069, 0.845878, 0.442975]], "92dd4cbe-1b97-4756-b620-481ab8c8f01e": [[-0.347823, 7.193550000000001e-07, -0.304905], [0.34814799999999996, 0.686819, 0.305132]], "9bfac98c-e636-4633-80db-8e625b344823": [[-0.232506, -8.71072e-18, -0.16652699999999998], [0.232506, 0.50101, 0.16652699999999998]], "412f0245-abe1-4a35-94b1-288796c1aae1": [[-0.454174, 0.0, -0.194149], [0.454174, 1.968001, 0.194149]], "b9f9eacd-5b89-45b7-8250-fa6493b1e41d": [[-0.258679, 0.0, -0.268667], [0.258679, 0.600666, 0.268667]], "6988fb9a-1e97-402d-bbf2-6fbf46bcb117": [[-0.685, -1.59872e-17, -0.26], [0.685, 1.19161, 0.26]], "7c29eef5-3651-40dd-a677-535bf5e7d6ea": [[-0.7908240000000001, -2.70562e-05, -1.10834], [0.790501, 1.04234, 1.10938]], "34c3c0d1-4884-4b61-b9cb-d88d64fe02f9": [[-0.433688, -0.0, -0.560179], [0.433688, 0.364775, 0.5601780000000001]], "0f08354f-9be9-419d-85c0-e6f219691b79": [[-0.297429, -9.38318e-18, -0.394382], [0.297429, 0.7940130000000001, 0.394382]], "e69f4613-5458-458f-a004-db3fb1706bad": [[-0.639938, 3.05176e-08, -0.35856699999999997], [0.639938, 0.371319, 0.35856699999999997]], "790d23da-e07b-4885-b80d-be1c28b54858": [[-0.384352, 0.0, -0.41399], [0.384795, 0.8984489999999999, 0.41296700000000003]], "595b053e-1ccf-4e4e-ac22-068980c9e82c": [[-0.722456, 0.0, -0.425501], [0.722456, 0.553666, 0.425501]], "1d135528-c365-3d6c-b4e4-80dc3ee56af9": [[-37.3284, -0.0818, -36.157], [37.3284, 72.7903, 38.0091]], "79351ba8-9898-38e2-ba0f-a62296ea9c2e": [[-0.27426100000000003, -0.004012, -0.27008], [0.27426100000000003, 0.620818, 0.27008]], "5aea9c82-6c98-4d98-98b9-eb6908acbe41": [[-0.480452, 0.000358, -0.480518], [0.480518, 0.479, 0.480518]], "76ed78f5-36a5-4bfa-b6d9-797182d70be7": [[-1.207894, 0.000575, -0.493918], [1.207556, 0.9287340000000001, 0.493895]], "141021f7-0e6f-4b5c-80e4-cb0d4b3b7b99": [[-0.273183, 3.53053e-08, -0.267815], [0.273228, 0.774456, 0.267555]], "6289a052-b4a7-417a-b687-b22fddc14663": [[-0.787826, 0.0, -0.514338], [0.787832, 1.031828, 0.514369]], "6b01e397-9ad1-4e4a-a5e8-2cbaea1da011": [[-0.34492100000000003, 7e-06, -0.33624499999999996], [0.34492100000000003, 0.9144070000000001, 0.336119]], "5ceb836b-2d77-4724-a9d9-3cb516e72337": [[-0.919778, -8.97824e-18, -0.215001], [0.919778, 0.53, 0.215]], "18d1248c-f19c-49e6-a0c2-99a306733b56": [[-1.057279, 0.0, -0.434822], [1.057441, 0.730549, 0.434833]], "683c0d4a-4273-4041-80a4-95224188fb84": [[-0.905, -7.62939e-09, -0.26363800000000004], [0.905, 0.65872, 0.263648]], "7ccab3a1-fcb1-4999-a281-b92fff887053": [[-0.268, -3.47431e-08, -0.204319], [0.268, 1.27965, 0.20496999999999999]], "2e7f559f-24f7-4e60-9fb7-b7a1665dd10a": [[-1.100496, 0.0, -0.401486], [1.100496, 0.743078, 0.401486]], "01519e3f-6a69-4f66-9e5f-2b54894ca901": [[-1.20743, -4.57637e-05, -0.406061], [1.20747, 0.765224, 0.40598799999999996]], "26098b5a-1e15-4c51-9312-cb6b4d83015d": [[-0.301, -1.52588e-08, -0.170342], [0.301, 1.02881, 0.17061800000000002]], "05e1e090-8fc0-357a-9ad2-19c4289c6058": [[-153.2763, -0.0, -129.9379], [153.2763, 74.2693, 129.9379]], "46d77799-d852-418e-98ed-b5d6797bfc34": [[-0.6789830000000001, -1.7794299999999998e-17, -0.31440999999999997], [0.6789830000000001, 2.41784, 0.314672]], "d3e083e2-c57a-4aac-952f-162432b22514": [[-0.867513, -9.576460000000001e-18, -0.184299], [0.867513, 1.91669, 0.186161]], "5b76ee55-d45f-4001-aa26-ae7744feba1c": [[-1.216324, 0.0, -0.46530900000000003], [1.215705, 0.800611, 0.46530900000000003]], "6314e07e-2f5e-4b0b-9eee-8892fd4f5e50": [[-0.284862, -1.34531e-17, -0.221585], [0.284862, 0.664836, 0.221585]], "4653b7da-d205-4380-a6e3-b0e2bdc475d7": [[-0.47957299999999997, -3.05176e-08, -0.36515300000000006], [0.47957299999999997, 1.25533, 0.36516]], "0b7dfb5a-03f5-44b9-8cdc-591efea5f003": [[-1.10757, 2.5473299999999998e-17, -0.416393], [1.10757, 0.795964, 0.417008]], "753e1cc6-dcf4-48c2-8ec7-c971580d08d9": [[-1.45948, -4.51785e-05, -0.7860729999999999], [1.45941, 0.703727, 0.7862300000000001]], "4e520d58-3e82-4361-93f1-ace258ba2f62": [[-1.196155, 0.0, -0.515626], [1.196029, 0.946973, 0.5156839999999999]], "c4a6b030-7fd9-4fe6-811f-3d7cb2bfd408": [[-0.273207, 5.68527e-06, -0.193082], [0.273207, 0.545173, 0.19337900000000002]], "5d941393-ebde-4169-bf7b-ed2a22ff21f2": [[-0.9197759999999999, -8.97824e-18, -0.215002], [0.9197759999999999, 0.536917, 0.215]], "ae033a90-aa17-4634-bf74-20f80d0d6ca3": [[-0.334056, 0.0, -0.256793], [0.334056, 0.681955, 0.256793]], "6db6e68a-a5cb-494e-b68b-45e638e3d929": [[-0.928999, -4.76703e-08, -0.268829], [0.928999, 0.681169, 0.268829]], "1853111b-fec7-445e-b834-ae4997e1685b": [[-1.2500010000000001, 0.0, -0.500148], [1.2500010000000001, 0.760003, 0.500148]], "0bc089e6-ce36-45ae-9a4a-cf13f96c0d37": [[-0.955028, -2.9961699999999997e-10, -0.18851800000000002], [0.955028, 2.41779, 0.189407]], "ef46c2d8-c0e2-493b-b759-337d848a95ba": [[-0.0533493, 1.51626e-08, -0.0533493], [0.0533493, 1.65309, 0.0533493]], "c295b1c2-7026-409c-a685-c631c2ec917a": [[-0.214757, 5.80039e-06, -0.21479099999999998], [0.214723, 0.406353, 0.214727]], "f4d6aa0f-b83e-43b4-9639-eefa3cfec069": [[-0.249999, -2.19239e-07, -0.249999], [0.249999, 0.09002750000000001, 0.249999]], "011741b3-f906-4884-8daf-da72ec809d5e": [[-1.11212, -1.2196399999999999e-05, -0.484786], [1.1116, 0.8604689999999999, 0.485435]], "06bef41e-8730-3825-930d-a68f5a783b5e": [[-0.39841099999999996, 0.001084, -0.465932], [0.39780299999999996, 1.0171540000000001, 0.46517600000000003]], "e54b8272-2151-4fc4-b2b1-252ed31acecf": [[-0.650146, 0.0, -0.20007999999999998], [0.650146, 0.84531, 0.20007999999999998]], "6595fb13-1e56-41f9-985d-dc9e7367210c": [[-1.0284, -9.4003e-06, -0.646929], [1.0284, 0.816609, 0.647397]], "59f24c07-96da-3402-8947-65f5a1fc48f3": [[-0.298888, -0.0006510000000000001, -0.257225], [0.296998, 0.772487, 0.257309]], "20fac546-3f84-4075-90d5-b4e167dcfefe": [[-1.724125, 0.0, -0.312024], [1.724125, 2.780056, 0.312024]], "8021117c-9470-4ce4-b752-0b5b8a26d501": [[-0.88, -0.0, -0.246336], [0.88, 0.5405490000000001, 0.24556799999999998]], "445ed140-e411-4ec2-84a3-29ff27e39431": [[-0.219893, -0.00111782, -0.219893], [0.219893, 0.509166, 0.219893]], "a585fa24-e819-4809-954f-f0bd3162ee88": [[-0.157859, 0.0, -0.21241], [0.157859, 0.534938, 0.21241]], "26b3bd51-9ae6-42db-906d-fb27e2d0e7ba": [[-0.671446, 0.0, -0.45016300000000004], [0.671446, 0.35408700000000004, 0.45016300000000004]], "012ce7a5-9c00-4af2-b293-cb54c42cfe80": [[-0.8088580000000001, 0.0, -0.25339500000000004], [0.8088580000000001, 0.6543779999999999, 0.25339500000000004]], "fab0ea41-c522-453d-940b-adf66bf0f86a": [[-1.066336, 6e-05, -0.376444], [1.066382, 0.7395900000000001, 0.376598]], "22635fd5-4e77-4fc4-bf0e-1cf06e4da859": [[-0.81, -1.74277e-05, -0.255], [0.81, 2.35006, 0.255]], "82b18962-dfc2-404b-bed0-3dbc98812750": [[-0.861583, 0.000228, -1.190192], [0.861607, 1.291042, 1.190629]], "b9c7a6aa-06f0-452f-b43c-ac5dc5e0ce24": [[-0.313005, 7.62939e-09, -0.21107099999999998], [0.313005, 0.286582, 0.21073899999999998]], "8fa86ebb-d2ec-400b-b3af-be466d3ea2c2": [[-0.295248, 0.0, -0.19915500000000003], [0.295248, 0.572108, 0.19915500000000003]], "a8aac75e-a8ab-4712-86bf-6aebd6f9f4ba": [[-0.450133, 0.0, -0.175104], [0.450133, 1.900255, 0.175104]], "692dd94f-c2ec-4d55-a373-1b4208b9d36b": [[-1.0207899999999999, -1.0386e-07, -1.1131], [1.0207899999999999, 1.45822, 1.11368]], "0188e055-34ac-48e5-ae53-3489fbc47328": [[-0.621464, 0.0, -0.19950800000000002], [0.621464, 0.9854999999999999, 0.19953900000000002]], "71590a01-e0f2-4877-bc92-8a1088bf4a74": [[-0.32042499999999996, 0.0, -0.243584], [0.32042499999999996, 0.529834, 0.243584]], "91eb00d3-114c-4b0d-a2ff-09742e54de8b": [[-0.337982, -2.88904e-06, -0.364477], [0.337983, 1.06023, 0.364534]], "e2a8b113-eeaa-4aec-8b3f-33d6819f346c": [[-0.19902999999999998, -0.000432787, -0.198963], [0.199236, 0.34328899999999996, 0.199205]], "f843d3af-efe2-4ae6-bbdd-44cb05e14e16": [[-1.10995, -9.12601e-07, -0.528838], [1.10995, 0.751088, 0.528838]], "ba2ed410-f349-4ea9-9ba6-de9f678c68af": [[-0.956077, -0.00010369700000000001, -0.386637], [0.95461, 0.815821, 0.38683500000000004]], "e735842a-ced4-40b9-be96-64dcca49afa6": [[-0.948126, -0.00027096, -0.21002099999999999], [0.947994, 0.497566, 0.20999800000000002]], "17b841da-8758-4276-8ad4-32ffd494fd8c": [[-0.4, -2.08598e-10, -0.107173], [0.4, 1.3014599999999998, 0.107173]], "c0d43fc4-9c90-4f8e-876c-87e3952de6d7": [[-0.16837800000000003, -0.000390025, -0.165097], [0.168589, 0.798396, 0.164484]], "11aeb77c-8486-43ca-8da0-e152841f2e75": [[-0.633367, -1.54639e-17, -0.28288399999999997], [0.633367, 1.77, 0.282878]], "0d151f94-1e99-41d4-a9de-8c674d54f503": [[-0.196756, -7.70099e-18, -0.147328], [0.196756, 0.876108, 0.147328]], "44e3d608-f46b-4dd6-a6bd-1841d11f3719": [[-0.787712, -1.85167e-06, -0.23460699999999998], [0.787711, 0.485628, 0.234359]], "0f8326bd-3a89-4d98-9e78-d317e048c9c9": [[-0.600131, -1.92919e-17, -0.38802], [0.600131, 0.32899999999999996, 0.38807200000000003]], "fc8607ad-b4b7-40ae-b33d-18f8a0896c50": [[-0.7020000000000001, 0.0, -0.451863], [0.7020000000000001, 0.44823999999999997, 0.451863]], "76c562ae-3ffe-4fc3-b02a-4a62b7f314da": [[-0.366106, -0.000146829, -0.0374919], [0.36605699999999997, 0.733551, 0.0375483]], "60958e29-d2f2-4ef8-bc75-6ab797698bdf": [[-0.324106, 0.0, -0.406682], [0.324106, 0.942815, 0.406798]], "5233e052-8117-31bf-ad63-2958c88cf348": [[-0.3429, 0.0011, -0.39545600000000003], [0.345428, 0.849666, 0.39462200000000003]], "d24ee8bf-5748-498b-8acd-d5dec116c921": [[-0.8998130000000001, -6.671489999999999e-07, -0.449783], [0.899789, 0.78, 0.449783]], "63b3a5b8-61a4-495c-a237-4a26a8862223": [[-0.24924800000000003, 0.0, -0.182481], [0.24924800000000003, 0.358042, 0.182481]], "259ffa6b-ab5f-4974-b880-cccc0255ad17": [[-0.45659700000000003, -0.0009615509999999999, -0.517648], [0.456164, 1.1248, 0.517713]], "dafe7784-aef4-4afd-a31f-6a9f79a50bb7": [[-0.303513, -0.00013070699999999998, -0.34049300000000005], [0.303197, 0.997063, 0.340999]], "318b79f2-7859-4850-8b3e-109ad3225dc4": [[-0.351777, -7.46986e-05, -0.351465], [0.35142, 0.9301269999999999, 0.351226]], "72df2a49-425e-41f6-a65c-6d8514f4bff2": [[-0.373145, -2.69439e-11, -0.25], [0.373145, 0.608988, 0.25]], "0f76fd99-97fc-4c98-b20a-d3d869e2f9b1": [[-0.49998800000000004, -2.01424e-08, -0.254515], [0.49998800000000004, 1.42379, 0.254515]], "7e539db1-689e-4916-9283-c0e08c61e3e7": [[-0.756837, 2.75385e-08, -0.250425], [0.755898, 0.9496829999999999, 0.249654]], "602022db-9c17-43fa-97d2-111ba3438c38": [[-1.2664, -0.000123699, -1.05829], [1.26779, 0.8740000000000001, 1.05815]], "09b1579d-74e0-49a1-b247-56f66f076006": [[-1.04941, 0.000547372, -0.43834], [1.04953, 0.828138, 0.438687]], "f85fa790-aed8-4e1e-b2d0-16c97d77c1c2": [[-0.68738, -7.33465e-08, -0.197394], [0.68738, 2.46987, 0.197564]], "e2551b13-172a-4e79-b17d-4823c0fba30a": [[-0.750431, -0.0, -0.560242], [0.75043, 0.38433799999999996, 0.560242]], "c55fda9b-6637-45df-b0d2-487695e90410": [[-0.398765, 0.0, -0.264214], [0.398765, 1.144757, 0.264214]], "13aa7f1d-5655-490e-8f3d-4f58a395efae": [[-0.35137599999999997, -0.000569382, -0.35399], [0.351465, 0.46089399999999997, 0.35365]], "a77b38db-5ec6-4e00-b38a-102aed2b8b47": [[-0.316805, 1.52588e-08, -0.21218900000000002], [0.316805, 0.556897, 0.21218900000000002]], "e2ef0d6c-4942-4abe-b178-a435c0c23bec": [[-0.312317, -4.82237e-07, -0.2025], [0.312317, 0.440652, 0.202503]], "427ec02c-54b7-4ec0-a0c4-570512d1b186": [[-0.713786, -1.52588e-08, -1.03545], [0.713786, 0.8073609999999999, 1.0356100000000001]], "f7b31c07-0d77-4ecb-80f0-57584cac8070": [[-0.19318200000000002, 0.0, -0.261982], [0.19318200000000002, 0.49312199999999995, 0.261982]], "1456d6b1-e19f-485a-be95-a0f79ecf2051": [[-0.799751, -0.000127972, -0.799751], [0.799751, 0.747182, 0.799751]], "6a860c92-b1da-4f65-806a-87027c0de85f": [[-0.204819, 0.0, -0.249725], [0.204634, 0.929542, 0.24976099999999998]], "5115cc70-7dd2-4653-9921-a7c3afb35f0e": [[-0.9571989999999999, -0.000103503, -0.217646], [0.957269, 0.581244, 0.21683700000000003]], "2adad0dd-7e7a-496d-847e-4d70eaade1df": [[-0.222649, -0.0008082930000000001, -0.226329], [0.222999, 0.43016800000000005, 0.226277]], "29f51e1e-989c-4f0c-b566-840351a187c8": [[-0.7696689999999999, 0.0, -0.493961], [0.7696689999999999, 0.337155, 0.493961]], "833ebdfc-650b-4470-bca9-55ccb1861f32": [[-0.302135, 2.0058100000000002e-08, -0.235126], [0.302135, 1.94993, 0.235126]], "67c5156a-dbce-49fd-b848-0c5b169c2122": [[-1.278905, 0.0002, -0.497813], [1.278543, 0.87792, 0.498997]], "05667d56-f53a-4d86-a7ab-382140d2eeaa": [[-0.250003, -9.52687e-18, -0.19500299999999998], [0.250003, 0.6, 0.19500299999999998]], "87b8a63e-06f7-470e-afb0-33191debb3f0": [[-1.03941, 0.0, -0.507373], [1.0389570000000001, 0.901957, 0.507373]], "b085ca1b-c34a-4d6b-94b6-9962bb99864c": [[-0.5191899999999999, 0.0, -0.40021999999999996], [0.5191899999999999, 0.9084749999999999, 0.40021999999999996]], "bfd12459-d957-4422-a455-a32a5c2e798a": [[-0.25, -1.33227e-17, -0.23819500000000002], [0.25, 0.5, 0.238206]], "c59517d1-5c5c-49a4-a09a-aa32c548e91b": [[-0.254562, -1.32407e-17, -0.25756], [0.254508, 0.48477, 0.25769]], "774c8a66-0e05-4d6a-a83f-46d010b15767": [[-0.720024, -1.1569299999999999e-07, -0.36], [0.7200279999999999, 0.585124, 0.360006]], "81fd7f8e-21a5-46b3-8e86-cb5b92c603d5": [[-0.10978, -0.000139935, -0.10969799999999999], [0.109672, 1.00279, 0.109747]], "ebdd83c6-283b-4ff8-b2ba-0e83edd3ba9a": [[-0.250253, -8.08037e-10, -0.20001999999999998], [0.250145, 0.45331200000000005, 0.20002199999999998]], "6951eb82-bfb8-4c94-9a7c-27082111137d": [[-0.24859, -0.00020683300000000002, -0.23239100000000001], [0.248466, 0.737615, 0.23291699999999999]], "0dcad060-ffe6-4eae-893f-bd6932263950": [[-0.903498, -1.44689e-17, -0.241525], [0.903498, 0.626481, 0.241525]], "40083db3-c14d-3c8c-8621-0a02a6773ba4": [[-0.30734100000000003, 4.4999999999999996e-05, -0.274364], [0.306796, 0.731294, 0.28284]], "57bc4eec-bff8-48f7-b034-f9611a3cfa37": [[-0.882203, -0.0, -0.975998], [0.882203, 0.777934, 0.9760129999999999]], "7bad5463-b249-4fd7-84a9-6de02b0060bd": [[-0.41524099999999997, 0.0, -0.414693], [0.41524099999999997, 0.41255600000000003, 0.414614]], "8378de7c-d7a9-491c-a5e3-f6f6525af424": [[-1.0979, -0.00028700199999999996, -0.538127], [1.0975, 0.8287990000000001, 0.53897]], "5e581549-655e-4e3d-841a-ead19cb0f482": [[-1.18529, -0.000351535, -1.16924], [1.1863, 1.23976, 1.17147]], "5f9f6640-7006-4c96-a1d8-eb6f0d13fff8": [[-0.237117, 0.0, -0.2726], [0.237317, 0.907471, 0.271806]], "2fd20e33-b8c7-44f3-b2b1-de1877503ea7": [[-1.3916069999999998, 0.0, -0.45301600000000003], [1.3916069999999998, 0.77, 0.45301600000000003]], "546f2a4f-4771-4c28-8af4-3d2870f65138": [[-1.25834, -2.9754000000000004e-17, -0.45801400000000003], [1.25824, 0.96356, 0.45856499999999994]], "64baf4f3-af6a-43ad-a2d9-2c6734d32bb2": [[-0.310054, 0.0, -0.159543], [0.310054, 0.6617799999999999, 0.159543]], "9a20628d-a93b-4b20-88c4-14a72c492e7f": [[-0.25, 0.000200928, -0.25], [0.25, 0.6554800000000001, 0.25]], "0f92470c-b703-49fb-b317-fb3e570363aa": [[-0.289676, -7.65684e-05, -0.310942], [0.289604, 1.26611, 0.311104]], "a5bda7a0-dc26-4ff5-9bc0-4c606c508c92": [[-1.543148, 0.00025, -0.618303], [1.5430080000000002, 1.0267659999999998, 0.618108]], "e0a02287-d161-493b-8c31-d14fd5e7777d": [[-1.567287, 0.0, -0.5531900000000001], [1.5673339999999998, 1.011826, 0.553234]], "8931999e-b92f-41cb-8f30-819557715be5": [[-0.9, -1.2124e-17, -0.2], [0.9, 0.249875, 0.2]], "a90e39a3-2d68-47a5-b685-b28fe16bd6f6": [[-0.47234699999999996, 0.0, -0.47234699999999996], [0.47234699999999996, 1.0837350000000001, 0.47234699999999996]], "c039a9cd-5325-4fab-a530-328384540029": [[-0.36519399999999996, -8.752509999999999e-05, -0.34084600000000004], [0.364803, 0.437741, 0.339983]], "648dbb1e-ae6c-40c1-850e-1589e5c9e170": [[-0.9369620000000001, 1.80021e-17, -0.303997], [0.9369620000000001, 2.66367, 0.303997]], "2cef68b1-0d36-47cc-863a-640a65d547e6": [[-1.31853, -3.20102e-05, -0.562991], [1.31857, 0.8576260000000001, 0.563792]], "8b60e5d8-f711-4653-9eb3-d2dee3f8f001": [[-0.951269, 0.000455, -0.533823], [0.951541, 1.016758, 0.534042]], "219ab3a0-989f-40aa-81f4-f1dba609f50c": [[-0.314529, -2.3509e-17, -0.207394], [0.314551, 0.5257930000000001, 0.20789200000000002]], "b2c8bb99-b0c4-4bd1-8b5b-8358001a1e9d": [[-0.38660200000000006, 0.0, -0.369688], [0.38660200000000006, 0.35, 0.369688]], "919025e6-660c-4583-a892-ec3709bee55e": [[-0.700001, 0.0, -0.40000100000000005], [0.700001, 0.750001, 0.40000100000000005]], "6fb3b21a-2804-4ae3-bd58-54b90cde264a": [[-0.772462, 3.05176e-08, -1.03324], [0.773372, 1.46003, 1.03381]], "2d24bed3-d8e0-4f5e-908e-fead12f26138": [[-0.788912, 0.0, -0.994597], [0.788912, 1.234421, 0.994597]], "ea75678c-9d7c-4325-9008-0638a8513d26": [[-0.41322200000000003, -4.6486599999999996e-08, -0.181015], [0.41322200000000003, 0.816667, 0.180974]], "fd9e7915-339d-4ad9-9071-d55c9631764a": [[-0.832028, 0.0, -0.37396], [0.832028, 0.803922, 0.37396]], "b41f5051-57aa-491e-8a33-2ac9e201173d": [[-0.245, -4.90121e-05, -0.2], [0.245, 0.5, 0.2]], "3588395e-d4ea-4965-8218-8607326e6130": [[-0.305727, 0.0, -0.319466], [0.305727, 0.43026800000000004, 0.319466]], "97a912c8-cd86-4faf-83dd-65d467da2edc": [[-0.280803, 0.0, -0.267322], [0.280803, 0.93226, 0.26730699999999996]], "788aaa9b-e7ee-43b7-8970-5b71816fb9e0": [[-0.7641849999999999, 0.0, -0.317764], [0.7641849999999999, 0.662025, 0.317629]], "b855ab60-1a2d-4c2a-8116-aa545873c12d": [[-0.285712, 0.0, -0.27021999999999996], [0.2858, 0.7848040000000001, 0.270427]], "990ec0bb-377d-40e3-9798-2dde29ab853e": [[-0.281074, -0.000209467, -0.211735], [0.281143, 0.599615, 0.21124400000000002]], "11211c63-ff61-4ccb-afe1-36c8b41eab13": [[-0.32358600000000004, 0.0, -0.36417099999999997], [0.32358600000000004, 0.861304, 0.364218]], "551401cb-b56e-4be3-89f6-9a8b3dfe48f3": [[-0.70262, -0.0013482099999999999, -0.9129640000000001], [0.703288, 0.818887, 0.914992]], "048191ba-1356-38d3-985b-514f70c1a684": [[-53.6098, -0.7622, -54.0869], [53.6369, 100.8242, 53.1598]], "12b1ce0f-3d2a-3211-9e05-a537e5a43e20": [[-111.8958, 0.0, -54.3299], [111.8958, 79.0582, 54.3299]], "6fbbc33c-bbc6-4558-b888-5a6ff4004cf4": [[-0.709987, -6.91414e-09, -0.300379], [0.709987, 0.406877, 0.300379]], "d54e89d6-9203-4a2e-8cfb-dcbba51cb43e": [[-0.35744, 0.0, -0.24796500000000002], [0.35744, 0.458808, 0.24796500000000002]], "2fde8ddc-7e0b-4967-865f-dc2e190c0d6e": [[-0.7105469999999999, -0.00102738, -0.224339], [0.710484, 2.2259700000000002, 0.224435]], "03aef343-b8a7-4beb-a2a5-d58a07761d3f": [[-0.303029, 0.0, -0.293899], [0.302986, 0.814414, 0.293888]], "269eb070-9b47-4bc8-b511-e6d6724fcefb": [[-0.15646100000000002, 0.000104, -0.741769], [0.15646100000000002, 0.45752299999999996, 0.741838]], "096b167c-78fa-4ea4-a839-89629a076a8f": [[-0.664683, -6.4294e-17, -1.05], [0.664932, 1.05368, 1.05]], "3778f63e-b421-474b-9b88-b06e6502018b": [[-1.25, -8.88825e-18, -0.165031], [1.25, 2.5, 0.165031]], "23707481-453e-40af-9813-32dcc6488ba8": [[-0.923575, -2.04649e-05, -0.375222], [0.9235720000000001, 0.817735, 0.37538400000000005]], "1142e999-d856-4320-8c3a-204a67f8dcca": [[-0.39034399999999997, 0.00038922100000000003, -0.380976], [0.390343, 0.643737, 0.380979]], "adc07286-349b-4ff6-8902-c57e9e6ca77d": [[-0.312989, -4.9156299999999996e-06, -0.291912], [0.313019, 0.139854, 0.291912]], "be1e44e1-36f3-4c56-9422-12f71e4e2346": [[-0.5489970000000001, 0.0, -0.335031], [0.5489970000000001, 0.40355800000000003, 0.335031]], "269e77db-cbed-40ab-ad62-b3aada84acd8": [[-0.25956399999999996, 0.0, -0.251191], [0.25956399999999996, 0.55986, 0.251191]], "c56a1958-b1b9-451e-88be-72a6ecd7cdff": [[-1.24036, -2.2726400000000003e-17, -0.430182], [1.24095, 0.7592669999999999, 0.430628]], "e0c1c56e-10f3-4b38-a9c3-9ac704fd5768": [[-0.316148, 0.0, -0.315978], [0.316148, 0.532199, 0.315978]], "28bbffc9-02da-405d-957f-1988e5719fd2": [[-0.259384, 4e-05, -0.27883800000000003], [0.259394, 0.684552, 0.27883800000000003]], "8a0ae2f8-8074-42f9-8783-d9c898178705": [[-0.32972900000000005, 0.0, -0.313149], [0.32972900000000005, 0.982965, 0.315718]], "ad1fc8bc-27f1-499d-9a43-ef3c1fc53a3a": [[-0.500048, -7.56329e-05, -0.9500709999999999], [0.500047, 0.8113379999999999, 0.9500409999999999]], "727a59d9-8a55-4f5e-ae3c-55ef1f7adc79": [[-0.9474009999999999, -0.000492992, -1.19914], [0.946435, 1.66994, 1.2002]], "a7e7f3f0-774d-4e24-9c1a-15cc64634ba6": [[-0.26824200000000004, 2.57707e-05, -0.266915], [0.268274, 1.01837, 0.266835]], "a3fbcddf-b550-4d48-9709-34962ae0b426": [[-0.254402, 1.69425e-17, -0.288528], [0.25440999999999997, 0.706224, 0.288563]], "dfa6a5c5-6d78-4f2f-be67-80a0b95982e3": [[-0.273199, 3.70076e-08, -0.15417], [0.273199, 0.600506, 0.154156]], "3070ce7c-8866-42aa-8a96-a9b84ef1088b": [[-1.046457, 0.00038399999999999996, -0.514729], [1.046387, 0.735369, 0.514644]], "11818c8f-82b6-4f07-854d-bbe1a0a26ef0": [[-0.5661010000000001, -0.00011807, -0.577591], [0.565971, 1.17231, 0.577512]], "f72cfd0b-5219-49cc-a9a2-9f90421efb6e": [[-0.25, -8.57253e-18, -0.15], [0.25, 0.4, 0.15]], "bcfa634c-2693-494c-9b20-c3eeb42f6a8e": [[-0.275, -1.21592e-17, -0.2], [0.275, 0.5, 0.2]], "aa93c992-d55b-4107-9077-3ed1c094427a": [[-0.370363, -4.19553e-07, -0.398155], [0.370135, 0.8432080000000001, 0.398364]], "34b0864f-9f1e-40a6-a1fb-379d4380c3eb": [[-0.859367, 0.000125, -0.460816], [0.859368, 0.76795, 0.460814]], "880ac819-66b6-4b09-addb-c3239a16ec5c": [[-0.2915, -1.78607e-17, -0.29168700000000003], [0.2915, 0.13, 0.29168700000000003]], "5b7b9fa3-2e64-47a2-b418-250f114cd2e2": [[-1.360063, 0.002, -1.221863], [1.3605779999999998, 1.12473, 1.220526]], "84e42153-bfb5-4f05-8e28-84e4772351ae": [[-1.1144100000000001, -3.24939e-09, -0.45750100000000005], [1.1144100000000001, 0.720951, 0.45750100000000005]], "1399927c-483f-44d5-8e83-344ac05d4e1d": [[-0.311494, -0.000593716, -0.302459], [0.31151599999999996, 0.80867, 0.302322]], "7346bc8a-577f-4d5f-a1a1-497a2b5cd7f3": [[-0.287158, 0.0006090000000000001, -0.28703], [0.286825, 0.467111, 0.287063]], "cd7907d9-b554-4118-8b91-a4ccd5360de4": [[-1.6201699999999999, -5.3750200000000006e-05, -0.826076], [1.6201400000000001, 0.872831, 0.8262909999999999]], "1c2a2b53-fed2-49f7-b0ae-f40028fd1c44": [[-0.937919, 0.0, -1.152076], [0.938381, 1.4726169999999998, 1.150914]], "9b4d8975-bb70-430d-98c8-47da905385a4": [[-0.244968, -2.52425e-05, -0.31205700000000003], [0.244907, 0.8447870000000001, 0.311717]], "e13db93f-206d-404a-8931-6a453d13c252": [[-0.329677, -0.0, -0.352115], [0.329677, 1.115562, 0.350854]], "85c43042-acce-3f68-9fb1-f6b2e1f0effb": [[-1.374052, 7.5e-05, -1.2969890000000002], [1.623432, 0.840479, 1.059684]], "288405ec-eb94-42ad-b671-ce52952d17e6": [[-0.436395, 1.15961e-17, -0.24698], [0.436395, 1.3728299999999998, 0.247203]], "e41079ab-5497-4a1a-8357-47f65117b343": [[-0.27162600000000003, 0.0, -0.28870999999999997], [0.271625, 0.797239, 0.28869900000000004]], "feda8f24-4b76-4ad4-98d4-23ef9d48de23": [[-0.32561300000000004, 0.0, -0.266451], [0.32556199999999996, 0.39616599999999996, 0.266353]], "7e7f1f8e-812f-402b-b5fc-406719e9ec43": [[-0.219804, 0.0, -0.219803], [0.219803, 0.210052, 0.219803]], "cdf2b057-eaba-454f-afe2-e32d5634e700": [[-0.893544, -5.0354e-06, -0.546054], [0.8933490000000001, 0.82351, 0.54619]], "69b845ad-4bb1-448d-84a2-552361ff6c9f": [[-0.314097, 0.0, -0.288999], [0.314097, 0.5740460000000001, 0.288999]], "e67ca81a-1ebd-4f05-a4d6-da0bb945ace1": [[-0.252316, -7.04779e-05, -0.22324200000000002], [0.252266, 1.0136, 0.223219]], "3fc32677-0bf0-4519-965c-8165eb15e0af": [[-0.283288, 0.0, -0.32148499999999997], [0.28319500000000003, 0.91717, 0.321486]], "05353a05-dec1-449a-bce5-9159bc345c9a": [[-0.7141419999999999, 0.0, -0.622315], [0.714177, 0.658296, 0.622315]], "c173a7a1-90ab-4bea-86ff-b07913d37893": [[-0.223888, -1.00346e-05, -0.22397099999999998], [0.22405, 1.0446, 0.223919]], "0b4f504c-4d68-4af1-8660-03b02a7e013c": [[-0.396768, 0.0, -0.158923], [0.396768, 1.8413149999999998, 0.15895099999999998]], "5598a511-6cbc-47ae-8ac8-c7b8fb777530": [[-1.70465, -4.1479999999999996e-05, -1.17039], [1.70419, 0.77991, 1.17072]], "07c5d97d-c953-434f-9c6b-ef710159a8f5": [[-0.8, 1.2716500000000001e-05, -0.2], [0.8, 0.419359, 0.2]], "71665aa7-5aae-4f25-bb3d-1fecd0cebc84": [[-0.87312, 1.79933e-07, -1.0937999999999999], [0.87312, 1.31791, 1.0937999999999999]], "4510155b-ef5f-4f5b-bd43-2b9e756c0598": [[-1.55872, -0.000156981, -0.525259], [1.5585200000000001, 0.811436, 0.524882]], "1c7c14b7-9483-4265-bb74-67954641d8d2": [[-0.856111, -1.47505e-08, -1.03989], [0.856111, 1.0590000000000002, 1.03989]], "7def288b-8f42-4e26-acde-9206f10b7011": [[-0.5195649999999999, 0.0, -0.24999400000000002], [0.5195649999999999, 0.47498399999999996, 0.24999400000000002]], "76d94f2c-e626-46e8-b3cc-9c2532d7a6ac": [[-0.531615, -4.08671e-05, -0.418175], [0.530966, 0.7922549999999999, 0.418153]], "50785bdc-dbdb-48fc-a636-f5cd9804a74e": [[-0.325, -6.67431e-18, -0.11], [0.325, 1.2075, 0.11]], "227f4bbd-a26a-4210-9c59-a5926dd35638": [[-0.197368, 0.0, -0.197368], [0.197368, 0.855843, 0.197368]], "f987e497-087c-413e-ad61-66cdfbc04ec6": [[-1.13932, 9.970699999999999e-19, -0.9572369999999999], [1.1396, 0.724685, 0.956829]], "218f80da-41a8-3112-8a82-4f74012f4361": [[-0.358354, 0.000123, -0.38339399999999996], [0.35944400000000004, 0.7299599999999999, 0.41855600000000004]], "df5a6399-3e18-4c64-ad4e-726b50d1150f": [[-0.555195, -8.88178e-18, -0.16109600000000002], [0.555443, 0.9596779999999999, 0.13983399999999999]], "9ba960e7-9f08-49fd-900d-80e86bccb902": [[-0.329934, -1.0193399999999998e-17, -0.194926], [0.329934, 0.617357, 0.194926]], "432c231c-52c4-4f1d-9210-d066d87560e5": [[-0.550826, 0.0, -0.19816099999999998], [0.550826, 0.949098, 0.19816099999999998]], "1a223c39-32ab-4caf-a528-60373012ac13": [[-0.9590770000000001, 0.0, -0.228173], [0.959265, 1.337803, 0.228173]], "612e4bca-7a39-454b-beb9-3dba762dcc89": [[-0.228291, 0.0, -0.18737700000000002], [0.228291, 0.35291200000000006, 0.18737700000000002]], "b68e2e36-6aad-3053-8113-5edbc4ffd075": [[-0.6096, 0.0, -0.2286], [0.6096, 0.762, 0.2286]], "6874aee6-1300-491f-bd49-0f4ff2340425": [[-1.1771500000000001, 8.202749999999999e-09, -0.47153799999999996], [1.17665, 0.849962, 0.470935]], "b79acbcb-474d-4d68-a0e9-3f3a507ae9c1": [[-0.42653599999999997, -0.00123011, -0.427332], [0.426719, 0.947997, 0.42640900000000004]], "07ce940a-2a2a-4bfb-bc31-e23bc38f6ddf": [[-0.378542, 0.0, -0.349516], [0.378542, 0.727165, 0.349516]], "e9b6f54f-1d29-47bf-ba38-db51856d3aa5": [[-0.667594, 0.0, -0.307199], [0.667594, 0.73149, 0.307199]], "82a6b836-eef5-4d74-9405-e6f3def875d2": [[-0.412752, -5.12695e-06, -0.404959], [0.413217, 0.7496670000000001, 0.40576799999999996]], "59afc8a5-9b7f-42e4-a74e-6ced25369f59": [[-0.267569, 0.0, -0.23931000000000002], [0.267422, 0.688483, 0.239166]], "43049607-a7d6-46f4-9c73-3eb56101c535": [[-1.07042, 2.46048e-07, -0.286245], [1.07042, 0.80393, 0.286245]], "79364352-1dd7-34c9-8af5-6b17f69b9b02": [[-68.7649, 0.0, -43.8597], [68.6155, 73.385, 44.5197]], "c232b13f-bc23-4d4b-9fec-ed6f9cf782d9": [[-0.181655, 0.0, -0.181655], [0.181655, 0.524937, 0.181654]], "0f5493f5-073b-4039-b6e2-64caf80cec5b": [[-1.15916, -0.000265548, -0.508497], [1.15776, 0.855985, 0.507353]], "9f0d524e-3bed-45a8-aef4-042bb706e70d": [[-1.2326000000000001, -0.00234879, -0.566217], [1.23298, 0.815792, 0.566337]], "4289dfd7-63cf-47d7-ad83-39327850eb0d": [[-0.345536, 2.56464e-07, -0.343253], [0.34503700000000004, 0.628966, 0.34319000000000005]], "511856d4-8231-3b72-a6a9-0500ee4e5c4d": [[-0.289294, 0.00010200000000000001, -0.283608], [0.289294, 0.731508, 0.282223]], "7cc01f86-dd35-4f09-b6a6-bf0ac4608842": [[-0.189513, -1.56868e-05, -0.189378], [0.189269, 1.0454999999999999, 0.189386]], "0d7553f6-ec5c-4472-aed6-1e9766b69ab4": [[-1.1276300000000001, -1.26154e-17, -0.259629], [1.1276300000000001, 0.469064, 0.259629]], "59ae2bd3-3a02-37a5-aeb2-7927ec8a9099": [[-130.1636, 0.0, -38.1718], [130.1636, 54.0, 38.1718]], "926b5688-f248-47d7-8cf7-b84c814cd4e6": [[-0.628008, 2.72848e-15, -0.37156], [0.628033, 1.11423, 0.37158599999999997]], "5c8ca8dc-a39e-4866-9611-77d7a02ea82b": [[-1.9206999999999999, -0.000681836, -0.50485], [1.92096, 0.8151600000000001, 0.504735]], "47d40cd4-1ae6-4dbb-87f4-cf0f715eeff8": [[-0.24718, 0.0, -0.273657], [0.24712, 0.868845, 0.273551]], "5be0460d-2d5c-4b39-bbd1-97eac6b70a3a": [[-0.300106, 5e-06, -0.251528], [0.300106, 0.781748, 0.251527]], "6dc64c6c-cbd9-4693-8f82-efece82f6b6e": [[-1.59518, -0.000166298, -0.526639], [1.59484, 0.935526, 0.526639]], "2bf0f379-3837-4d79-a654-77b505c60e79": [[-0.389054, 0.0, -0.389054], [0.389054, 0.410774, 0.389054]], "20f1c7ab-008a-4240-b35d-d8c4bdbe2304": [[-1.02438, 5.70132e-17, -1.1173600000000001], [1.02438, 0.797931, 1.1173600000000001]], "64424d1b-9ab0-4e98-a67d-0e55f6e246d0": [[-0.289969, 5e-06, -0.28996500000000003], [0.289969, 0.596229, 0.289805]], "211361fc-1db9-4d5e-8a0c-f79751519a1a": [[-1.025, 7.62939e-09, -0.475], [1.025, 0.7399720000000001, 0.475]], "9df49643-5294-4b5b-8de3-2550bd59fcf9": [[-0.281676, 9.652539999999999e-05, -0.296128], [0.281538, 0.772433, 0.29616]], "dee3f212-4b3c-4ed1-acc0-2f7a4d19b116": [[-0.990249, -1.60028e-17, -0.527574], [0.990249, 0.7336879999999999, 0.527574]], "93809fdc-38d0-4bb6-962c-83d8c90e6682": [[-0.303975, 1.6e-05, -0.347985], [0.303629, 0.847837, 0.348244]], "d5dd7553-d4f7-44b2-bf12-9d452e47eb06": [[-0.412859, -0.00023336800000000002, -0.49160600000000004], [0.412791, 1.0610899999999999, 0.491605]], "7191996d-fa91-41f5-876b-4c3075fddd3f": [[-0.34385, 0.0, -0.285645], [0.344046, 0.450095, 0.285136]], "2810c800-206d-39fa-9ff3-664dccb70e4a": [[-1.2, 0.0, -0.44975000000000004], [1.2, 0.75, 0.45025]], "7d9ac7d9-f126-4b17-90dd-cb345f318e1d": [[-0.8691559999999999, -1.8423e-17, -0.30086999999999997], [0.8691559999999999, 2.5401499999999997, 0.30086999999999997]], "f3a8453b-a69d-4227-a501-97dd702bbbe7": [[-0.307641, -1.52588e-08, -0.176666], [0.307641, 0.780265, 0.176285]], "4b3361d8-5759-4433-9784-04af559dc33c": [[-0.761185, -0.000120328, -0.309253], [0.762256, 2.0421199999999997, 0.30863]], "ddad4bf2-589b-491a-aa4e-012081799f99": [[-0.19805299999999998, 0.0, -0.19805299999999998], [0.19805299999999998, 0.580965, 0.198095]], "47cdb25c-b39c-4f73-a132-6bc7deb39c07": [[-0.712736, 0.0, -0.274224], [0.712736, 0.752477, 0.274224]], "677efaf8-0db4-47a2-83e5-cffea0f6d59b": [[-0.7071639999999999, -0.000718032, -0.189815], [0.706794, 0.893373, 0.18978899999999999]], "3d222a55-1adb-4cbd-ab3e-0f36b82db03c": [[-0.45241, -1.40471e-05, -0.448527], [0.45238999999999996, 0.949341, 0.44846800000000003]], "473160b2-afce-4bd8-9541-046cc37c9fd3": [[-1.02, -1.52588e-08, -0.760873], [1.02009, 1.82145, 0.761362]], "ccda4cfc-4b2e-442a-96f0-b48e9a24abf2": [[-0.229711, 0.00011599999999999999, -0.229711], [0.229711, 0.693512, 0.229711]], "1a1afb21-2266-4fc9-9637-6e62ca61df33": [[-0.1512, -7.1052099999999995e-19, -0.205903], [0.1512, 1.2317799999999999, 0.205903]], "9e0dfc29-e55e-4db2-a58d-f91595be12db": [[-0.48174700000000004, -0.0, -0.481715], [0.48174700000000004, 1.090862, 0.481714]], "c15f137c-e3fe-4427-b214-322bd762a0fd": [[-0.273625, -1.0654400000000001e-17, -0.175], [0.273625, 0.43728900000000004, 0.175]], "01112e86-0c65-4693-a531-e57dfd08aaf8": [[-1.399488, -0.0, -0.524579], [1.3995920000000002, 0.891818, 0.524579]], "0b37c900-4ecc-42e5-9899-b71aef429431": [[-0.325, 0.0, -0.287209], [0.325, 0.56, 0.287209]], "284277da-b2ed-4dea-bc97-498596443294": [[-0.33187600000000006, 0.0, -0.325977], [0.33187600000000006, 0.948209, 0.325977]], "c5e847c5-b603-4ca9-b535-d0970f06b0a4": [[-1.31335, -1.16118e-17, -0.210364], [1.31335, 0.4, 0.210364]], "0b909b21-f15d-4bab-8ec6-d7a3dd288fef": [[-0.355441, -0.0, -0.35775100000000004], [0.355749, 0.7968989999999999, 0.35794]], "792e64e0-70f3-4c39-a77b-48a514a68fbd": [[-0.30622, -1.5061900000000002e-09, -0.30623100000000003], [0.306217, 0.7112, 0.30623100000000003]], "59887600-0789-4e93-9037-16c71938582a": [[-0.6471089999999999, -0.000651109, -0.463892], [0.646485, 0.817156, 0.462987]], "089fa9ca-178d-48f8-b78a-34a907d4e7ff": [[-0.8992829999999999, -0.000879537, -0.480798], [0.899122, 0.899881, 0.478906]], "3db020fe-44a8-427d-840e-8ab9cb1ca01e": [[-1.208019, 0.00016, -0.500996], [1.20775, 0.928562, 0.500996]], "5deb7ce0-95e5-4a4c-b9ab-e5051f9e21a8": [[-1.0253700000000001, 0.0, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "aafe7bca-8478-45b3-8a51-2799e2c04911": [[-0.9277299999999999, -6.0497e-05, -0.220912], [0.927701, 0.449957, 0.22101400000000002]], "650c4656-afae-4bf8-871d-3cd63f52d38a": [[-0.9012260000000001, -9.53674e-09, -0.199556], [0.9012260000000001, 0.740001, 0.199556]], "c8f389f7-e410-4680-a9b4-ac4291ae74c8": [[-0.47605200000000003, 0.0, -0.47605200000000003], [0.47605200000000003, 0.312618, 0.47605200000000003]], "0e1ecbef-632f-416e-a21f-09c1bf0468ee": [[-0.794749, -1.11666e-05, -0.25167], [0.794716, 0.5529999999999999, 0.25169]], "76436dd7-77a5-45c4-a226-7d4b875429d3": [[-2.00467, -0.00020593, -1.33854], [2.00465, 1.02765, 1.33854]], "1b7f778c-b1ab-3f1e-8653-8349544cfc3f": [[-1.157079, 0.0, -0.530537], [1.157082, 0.7863249999999999, 0.531325]], "6781a962-7ea5-4119-9a48-7147e936e19d": [[-0.49255099999999996, 0.0, -0.478551], [0.49258, 0.9506999999999999, 0.478611]], "241a8f70-acb1-433f-9ddf-79b85020197a": [[-1.8789410000000002, 0.000185, -0.866061], [1.879002, 0.849016, 0.865943]], "195a3017-eefe-4cea-b140-c9f271aa6469": [[-0.702027, 0.0, -0.52129], [0.702027, 0.383149, 0.52129]], "fa3cf32d-dfae-4f29-80cd-14b67320532b": [[-0.268761, 2.9999999999999997e-06, -0.270054], [0.268967, 0.207535, 0.270023]], "1923454b-0e4e-4e7f-b0a6-ef6a952ee5e7": [[-0.400991, -3.9788199999999996e-08, -0.403033], [0.400991, 0.896414, 0.402834]], "8fef3232-a16b-4bc2-bacd-b2738aeed388": [[-0.8888079999999999, 3.37405e-06, -0.255908], [0.889716, 1.98215, 0.255857]], "11b1c022-62ef-4e53-8ce7-bfcf289b75ec": [[-0.319804, -0.000128312, -0.261789], [0.319804, 0.5896170000000001, 0.261188]], "090d63d2-0d46-42b9-8e0e-8f3c54a4b9c2": [[-0.941324, -3.05176e-08, -1.1767400000000001], [0.941173, 1.1346800000000001, 1.1767]], "b4ffd05c-e1ea-46e3-a83e-5882b9129aa2": [[-1.965947, 0.0, -0.7627039999999999], [1.965608, 0.9830110000000001, 0.762912]], "31fc0baf-3bbc-360f-aaa2-e21d4b26eca4": [[-40.0, 0.0, -40.0], [40.0, 76.1016, 40.0]], "987da1e6-eccc-4f43-a911-55ef1cd7c5d0": [[-0.496927, 0.0, -0.390094], [0.496927, 0.5155230000000001, 0.390094]], "5fb91b28-9a25-472e-824a-20850d875435": [[-0.417288, -1.52588e-08, -0.760286], [0.417165, 0.784279, 0.7601829999999999]], "41067065-8063-4b68-9558-283d2304a603": [[-1.02422, 7.917199999999999e-08, -0.256584], [1.02422, 2.43471, 0.2572]], "380ae22e-b597-4600-beca-c630e5665843": [[-0.55, -1.15803e-17, -0.225], [0.55, 0.8, 0.225]], "d4ade599-2d26-4f15-9b52-f69a9b81d4f8": [[-0.16916899999999999, 0.0, -0.16916899999999999], [0.16916899999999999, 0.5371090000000001, 0.16916899999999999]], "a134ec19-ae4d-4ed5-9456-00e66fd76a79": [[-1.13274, -1.24234e-07, -0.7065319999999999], [1.13274, 1.7090299999999998, 0.7065319999999999]], "40c3ae30-f7fb-412a-bf7a-a20fd94ed601": [[-0.271951, 0.0, -0.2589], [0.271951, 0.572875, 0.25909]], "81b3c553-9bc8-4e9e-bbc3-0309d488aaa3": [[-0.855442, 6.93889e-08, -0.243429], [0.855442, 0.558555, 0.243429]], "2f42f011-9f7b-49a5-b7aa-641b7e2dbe98": [[-0.567199, 0.0, -0.238934], [0.567199, 0.844681, 0.238934]], "b6ec33de-c372-407c-b5b7-141436b02e7b": [[-0.285518, -8.58399e-18, -0.223524], [0.285518, 0.470051, 0.223524]], "26b439df-fba5-3b38-b6c5-bc6a4c1fb0a0": [[-1.104505, 0.00030028, -0.47801487000000004], [1.104505, 0.8772776, 0.47527313]], "68996a70-1878-3e70-ad1a-86eaadd71b5c": [[-59.337, -0.006, -30.8817], [59.337, 195.58, 30.8817]], "39dbd927-53ab-40a3-92b5-e215d686b576": [[-0.417686, 2e-06, -0.415593], [0.41739, 0.794521, 0.415553]], "8694bb01-1c9d-4485-929f-8c272371c5cf": [[-1.00475, -1.15465e-17, -0.254477], [1.00475, 0.569737, 0.254477]], "477acb1b-c703-45ed-9e3e-50756027ab7e": [[-1.2, 0.0, -0.49107300000000004], [1.2, 0.796046, 0.49105600000000005]], "6fe5453c-1831-4cb2-99f7-14f78df71985": [[-0.26066500000000004, 1.1999999999999999e-05, -0.281157], [0.260691, 0.910552, 0.281223]], "025544db-5680-4faa-9459-1a7b03a8f299": [[-0.936963, 1.80021e-17, -0.303997], [0.936963, 2.66367, 0.303997]], "c168a654-71df-4d19-afc7-27936790e7f5": [[-0.836593, -0.000882726, -1.026], [0.836307, 1.64148, 1.02721]], "6ba54d19-b186-4a8e-904f-1989f9c94033": [[-0.602954, 0.452024, -0.24170999999999998], [0.603107, 2.99892, 0.238126]], "5eea9ea7-f143-47f1-97d9-3fb4a3a98703": [[-0.27603300000000003, -0.000199038, -0.274845], [0.27603300000000003, 0.498373, 0.274845]], "5eabe872-cabc-3c9a-8a0e-0fc3c375d60c": [[-61.6202, -0.3008, -62.3873], [61.6202, 57.8905, 62.3873]], "e7a194e7-45c6-4713-9016-55c542691f9c": [[-0.311419, 0.0, -0.22939], [0.311419, 0.581491, 0.22939]], "65daae23-8075-44ff-a845-91614d2debff": [[-0.84563, -3.67661e-05, -0.20588499999999998], [0.84563, 0.888651, 0.205884]], "1ed6ea58-439a-4409-9805-6ec43db48ae0": [[-0.34564799999999996, 4e-05, -0.307614], [0.34588500000000005, 1.025286, 0.307614]], "cfb03ca0-a999-4e9f-8db1-1f6caa667aa8": [[-0.657338, -1.07296e-17, -0.26252], [0.657338, 2.42369, 0.26252]], "2c8c823c-b16a-3310-b8c0-9d851a92e275": [[-0.279219, -0.0, -0.295016], [0.279218, 0.78582, 0.295019]], "206d3420-05b2-4500-815f-51887d7cbae8": [[-1.01585, -2.5631299999999996e-06, -0.991888], [1.01573, 1.4171, 0.991661]], "12e261a1-a25f-4fe2-8f8e-f885a937acf2": [[-1.124471, 1e-06, -0.47539000000000003], [1.1244880000000002, 0.7358540000000001, 0.47533099999999995]], "a91293b9-db48-42c1-91ab-f84a674ad63f": [[-0.278637, 0.0, -0.281621], [0.278569, 0.6812050000000001, 0.281689]], "af9e4300-62e6-4c4a-b4d6-1bfc9eeeeee2": [[-0.8429949999999999, 0.0, -0.35], [0.8429949999999999, 1.991389, 0.35]], "106b5555-7e93-4733-8994-fcb55eb2fdae": [[-0.25783, 0.0, -0.29974], [0.257807, 0.850566, 0.299694]], "0acc134e-65bc-4b68-b836-c591935bdec6": [[-0.23244299999999998, -2.38111e-05, -0.274051], [0.232437, 0.879921, 0.27388100000000004]], "260eb3ca-ddb5-43b5-b2ed-3dd8e4c51e61": [[-0.24685500000000002, -4.15333e-06, -0.253342], [0.246878, 0.6971890000000001, 0.253176]], "f5788f2b-43a4-4740-8509-1326aa2db98c": [[-0.315286, 0.0, -0.16126200000000002], [0.315286, 0.594816, 0.161326]], "5db840b9-e7b3-46f7-8694-b2d00d63b6e1": [[-0.432035, -7.87094e-05, -0.245652], [0.432035, 0.452357, 0.244805]], "94be444e-8f84-4621-9106-72b273f9b0dd": [[-0.847168, 0.000129, -0.505188], [0.847168, 0.735095, 0.505188]], "7ae34a75-f584-3f9d-8737-c4f4ac53b863": [[-1.2, 0.0, -0.305872], [1.2, 0.82, 0.305872]], "9b33044e-7e28-4516-acb9-efa399bd2bd7": [[-0.612669, -1.2683300000000001e-17, -0.255852], [0.612669, 2.46502, 0.25597200000000003]], "42b9f0b2-f610-482b-b62b-cb00765398ed": [[-0.286466, 0.0, -0.261952], [0.28642, 0.776551, 0.262215]], "1460b4ef-2317-347a-82d9-ae24ea0083be": [[-0.235139, 0.0, -0.248975], [0.235139, 0.7444289999999999, 0.248975]], "75b66c36-9d73-4f23-8d83-a4393567074d": [[-0.943409, -3.38256e-09, -1.06674], [0.943409, 1.2356399999999998, 1.06673]], "382972eb-96cd-36e3-a0ab-62e73981ba89": [[-54.5426, -0.4, -50.5986], [54.5221, 68.8452, 49.3616]], "e5098ff7-3cfe-4e8d-9412-2b35a4465283": [[-0.41715, -0.000138873, -0.313096], [0.417115, 0.599869, 0.31256]], "581a9a69-d4a0-4025-afaa-6cf6854661c5": [[-0.68655, -5.06115e-17, -1.0444], [0.686806, 1.24468, 1.04414]], "c4591571-cb89-49a7-97d9-f42f41786906": [[-1.02433, -0.000191501, -0.535936], [1.02495, 0.890861, 0.535789]], "cd9020ee-8fda-4162-a232-36398b246e16": [[-0.633702, 0.0, -0.623838], [0.633702, 0.896373, 0.6238389999999999]], "74fd7665-fe72-3b6d-bbb0-a759dece6457": [[-0.412821, 0.003841, -0.43853200000000003], [0.412821, 0.708406, 0.43853200000000003]], "4d3da550-b2a6-417c-a1d6-7c6a4d145a39": [[-1.655, -5.29146e-08, -0.30463999999999997], [1.655, 2.6995, 0.30463999999999997]], "e88e5f90-ff30-4b83-98a8-366c041f1b22": [[-1.51178, -1.11792e-17, -0.22657], [1.51178, 0.7724179999999999, 0.226591]], "7088299b-c3fc-452d-83ca-f5690d5e0a5b": [[-0.671704, 0.0, -0.22402899999999998], [0.671708, 0.8262609999999999, 0.22402899999999998]], "3a454725-d2ea-4946-b453-ec00e50fb65b": [[-0.257025, -0.00173512, -0.237959], [0.25707, 0.78701, 0.23796099999999998]], "58a4a8c3-3c68-396d-8e3d-b357a2eec0c8": [[-60.0, 0.0, -60.0011], [60.0, 93.0998, 70.0]], "2f99733b-065b-4b84-8e92-9bd036573016": [[-0.43006500000000003, 0.0, -0.177845], [0.43006500000000003, 0.289168, 0.177845]], "2ed8e305-2597-4b62-ac94-53f510ca69e1": [[-0.331215, 1.90735e-09, -0.2], [0.331215, 0.563576, 0.2]], "06cead8d-3a07-466f-a141-4cc4c792d3fd": [[-0.842012, 5.98027e-17, -1.05661], [0.842849, 1.21683, 1.05867]], "4e8bddaf-088c-464d-b6ce-8d7e6edb3529": [[-0.557566, 0.0, -0.420884], [0.557566, 0.491793, 0.420884]], "0c99466c-7e8a-489e-afc7-6d05ae090a1f": [[-1.09204, 1.3207900000000001e-08, -1.14203], [1.09594, 1.31376, 1.14298]], "7ec80499-7403-410e-b80e-b54660c52133": [[-0.214608, 3.05176e-08, -0.212774], [0.214608, 1.4942, 0.212774]], "17ef5f35-9921-4f60-87b0-5cdce1fe929b": [[-0.943694, -0.0, -0.32034199999999996], [0.9436990000000001, 1.016244, 0.32034199999999996]], "27057c54-78e0-4d37-98fd-7fc51128dab3": [[-0.700172, -1.13466e-17, -0.21069700000000002], [0.700172, 1.15017, 0.21069700000000002]], "7aa0c7b0-ee66-4c61-b03a-c594d9cc4064": [[-1.18994, 0.00026247900000000003, -1.04565], [1.18994, 1.82659, 1.04399]], "1547d37c-f6e7-43fc-8e09-8291fb4066ae": [[-0.238516, -9.10952e-18, -0.23834499999999997], [0.23846399999999998, 0.356663, 0.23832599999999998]], "1b75a261-6622-41e6-8225-1a41e6a04050": [[-1.328859, 0.000224, -1.342525], [1.3280189999999998, 1.757287, 1.3419780000000001]], "0266e4a3-26e6-44a0-8259-f5d05befe81c": [[-1.400428, 1e-06, -0.432979], [1.400823, 0.777039, 0.432712]], "d84dcb47-f671-4538-96cb-0cbac9ab1a65": [[-1.43459, -6.72266e-17, -1.36785], [1.43495, 0.978263, 1.3679599999999998]], "50cb25a5-fdf4-44aa-a9f5-746af15f1e8c": [[-1.58896, -0.00023894200000000002, -1.05392], [1.59388, 0.8312390000000001, 1.05356]], "a69767bd-2655-4aa9-a77b-24f1c7f64adf": [[-0.8967860000000001, -1.0924e-17, -0.242671], [0.8967860000000001, 2.48557, 0.242671]], "734359ee-98d2-4f0d-804e-5483a2099667": [[-1.3902, -1.48374e-09, -0.423305], [1.39017, 0.72234, 0.424879]], "94935355-4c7a-4f16-8296-851f54151ad7": [[-0.443704, -1.7072299999999998e-17, -0.44366900000000004], [0.443704, 0.8086220000000001, 0.44366900000000004]], "6cea7125-5624-321b-9411-1acf3f91e410": [[-0.28289200000000003, 0.0015459999999999998, -0.269661], [0.282398, 0.785925, 0.272656]], "84c7ffa4-84c4-4349-86e4-41d19d53a1b6": [[-0.649435, 0.0, -0.473944], [0.649435, 0.449697, 0.473944]], "7a76dd88-eec5-4673-b10b-519a9da5b51f": [[-0.626, 0.0, -0.35100000000000003], [0.626, 0.457, 0.35100000000000003]], "6747867d-877a-478c-be5f-5571e81309d0": [[-0.984454, 1.52588e-08, -0.277877], [0.984454, 2.5050399999999997, 0.277877]], "2cfeec8a-fc3e-44fd-b368-bab20dfa6c33": [[-0.552259, -8.88896e-18, -0.173295], [0.552259, 0.718006, 0.17369]], "6aaa0e94-f338-446a-b640-52a0de8a505e": [[-0.7068429999999999, -2.73635e-17, -0.544825], [0.7068439999999999, 0.47592399999999996, 0.545262]], "da932df7-3477-44fc-8eab-ec9bc4aeee8c": [[-0.298267, -1.0474500000000001e-17, -0.190905], [0.298267, 0.539886, 0.190905]], "996ab5da-dd34-4635-a505-d230c5b08a52": [[-0.258967, 0.0, -0.258359], [0.258967, 0.184294, 0.258359]], "49869010-7f1a-496c-a0ec-cd159e30ea41": [[-1.089769, 0.0, -0.606239], [1.089645, 0.742649, 0.606099]], "e7cb7659-1935-41eb-9e5f-c2d269bd3369": [[-0.761597, -8.823050000000001e-05, -1.04871], [0.7599670000000001, 1.14482, 1.04936]], "4a435ea6-6a96-4a45-8000-5602f0732e41": [[-0.704706, -4.45289e-18, -0.705531], [0.7054739999999999, 0.7433240000000001, 0.7048369999999999]], "a94e04e1-611f-4adc-8642-47c4169fbedb": [[-0.231616, 9.499999999999999e-05, -0.180993], [0.23169, 0.480007, 0.18116700000000002]], "43330772-33f1-4e38-993d-3306cb7ff268": [[-0.905581, 0.0, -0.032845], [0.905581, 1.188741, 0.032841999999999996]], "99fa4ecb-4998-48b8-b17f-ffffa6bb1722": [[-0.130487, -1.61858e-05, -0.11708600000000001], [0.130487, 0.8867829999999999, 0.11708600000000001]], "2cb574ad-03e7-44bd-a796-eccd50e6e9a5": [[-0.796277, -0.000944224, -1.01495], [0.7952819999999999, 1.35523, 1.01495]], "74d854cd-c006-4164-ab00-39549af4a140": [[-0.799554, -0.000373336, -0.451938], [0.800963, 0.871313, 0.452482]], "69386c43-d08e-4f47-b88f-8087541d20c7": [[-1.4650100000000001, -1.41159e-17, -0.284593], [1.4650100000000001, 2.4, 0.28458]], "21c8059b-9723-437a-ad8f-526b5d736ab8": [[-0.669562, 0.0, -0.45000100000000004], [0.669562, 0.38, 0.45000100000000004]], "9f4fab40-a20c-4244-a3d3-b0c2fe071e02": [[-0.19219, 0.0, -0.188], [0.19219, 0.462166, 0.188]], "45d865a4-455c-40be-9946-04d83c422e4c": [[-0.25746600000000003, 5.9e-05, -0.30482], [0.257446, 0.809736, 0.304904]], "9538871d-f53f-4f9c-9746-6b3d4d91c406": [[-0.315286, -2.53544e-06, -0.315286], [0.315234, 0.465674, 0.315234]], "0161bdab-2cb7-451f-ab1d-2e046c7229fd": [[-0.271293, -0.000655237, -0.263639], [0.26970500000000003, 0.838952, 0.263132]], "4d22dfea-3801-423a-94bb-9e74ef874bdd": [[-1.995, 0.0, -0.20000099999999998], [1.995, 3.0, 0.20000099999999998]], "4405b782-4c7b-44b7-9976-29a01dac4477": [[-0.586125, 7.62939e-09, -0.544988], [0.586125, 0.38464, 0.544988]], "e37b9f43-9b61-48b0-a05e-159590e0e4f1": [[-0.388765, 7.8e-05, -0.412988], [0.388765, 0.830921, 0.413055]], "4bd1d500-c9f1-47e8-9230-ece80ac6d961": [[-0.4, 0.0, -0.3], [0.4, 0.633803, 0.3]], "833b6c6d-dc98-4512-ab0c-abc92a162132": [[-0.271785, -1.3855600000000002e-05, -0.280519], [0.271779, 0.8492449999999999, 0.28060199999999996]], "50187eae-e45b-4722-bc08-ea646fc01483": [[-0.61187, -9.7269e-18, -0.186368], [0.61187, 0.842411, 0.186368]], "ed80ee78-d781-4ec3-b911-634a6c44cce2": [[-0.408301, -0.0001043, -0.229525], [0.409247, 1.23121, 0.230014]], "547d4497-7700-4f5e-aef0-abca272fbc8c": [[-0.823363, 0.0, -0.593563], [0.823363, 0.753802, 0.593563]], "a61408cc-a2a7-4132-a440-7e002b81efae": [[-0.310003, 0.00023099999999999998, -0.270805], [0.310003, 0.40198300000000003, 0.27038]], "603e3626-6286-4103-b439-2db685b924dc": [[-0.685189, -8.671470000000001e-18, -0.158263], [0.685189, 0.693754, 0.158263]], "482a093c-bce5-4d5f-a293-a9deb9a95892": [[-0.29307700000000003, 0.0, -0.30081399999999997], [0.29369, 1.108034, 0.301181]], "aa87fc10-19e6-447f-a3e5-c62bf2334e5d": [[-0.642308, -0.000253028, -0.5687019999999999], [0.642308, 1.08639, 0.5687019999999999]], "22869864-791b-4d0a-aa60-b0a85a5f4c8f": [[-1.176674, 6e-05, -0.468595], [1.176674, 1.066444, 0.46812]], "63c51142-146b-44ee-8c2f-1fe762aa8f6f": [[-1.0154699999999999, -2.13365e-06, -0.220016], [1.01545, 0.610935, 0.220075]], "e70b713e-2654-4268-9ff8-df51f7ac269a": [[-1.14294, -0.0009175619999999999, -0.42019599999999996], [1.14258, 0.8068529999999999, 0.419222]], "c2f29b88-e421-4b9c-ab06-50e9e83cf8a1": [[-0.25068, 0.0, -0.193057], [0.25068, 0.58089, 0.193057]], "b84bb228-2397-4d98-bec5-0963a1f8eadb": [[-0.40172800000000003, -5.08169e-05, -0.396056], [0.401173, 1.2634699999999999, 0.396669]], "ecf6d756-e5f7-4e54-86ff-5595f77ccb01": [[-0.33911499999999994, 0.0, -0.40609], [0.33911499999999994, 0.970367, 0.406096]], "eb50c5c6-ead9-4f6f-8592-be9d573b026f": [[-0.31093, -2.5168e-08, -0.561745], [0.310931, 0.8300409999999999, 0.561965]], "139e7bfc-1d9f-45e5-accf-795e4a2c2af8": [[-0.900795, 0.00023300000000000003, -0.99084], [0.900854, 1.104594, 0.990354]], "2d727755-2c8d-44f1-8912-3bce1b2d8862": [[-1.02597, 6.10352e-08, -0.881155], [1.02595, 2.2031899999999998, 0.881155]], "4f3fd5e8-a423-4d7c-8d55-ccb67b1ed230": [[-1.14601, 5.14622e-07, -1.04973], [1.14492, 1.67678, 1.04973]], "39358b78-2735-4705-8811-35a255de7abd": [[-1.16468, 0.000246877, -1.1978900000000001], [1.16468, 0.6301760000000001, 1.1978900000000001]], "4e1c07c2-5511-4018-b809-b51695a10f4a": [[-1.1129900000000001, -2.50992e-17, -0.447896], [1.1130200000000001, 0.795171, 0.448234]], "fb50d640-2b54-4e5c-b9c5-05d881164464": [[-0.37772300000000003, 0.0, -0.411544], [0.37755000000000005, 1.054381, 0.411252]], "cf7b801c-9f8e-4ed3-85b8-f73175315728": [[-0.365244, 0.0, -0.344381], [0.365244, 1.044152, 0.345132]], "8af3c9ea-30f7-46b3-8055-9708a9025e3a": [[-0.44622999999999996, -3.05176e-08, -0.179001], [0.44607199999999997, 1.0314, 0.179001]], "0074c049-c0d7-46e0-835a-bcae2416b859": [[-0.843939, 1.09552e-07, -0.961589], [0.842603, 1.16347, 0.9619960000000001]], "743266c4-7096-41e7-b812-82310c4ee393": [[-0.49, 0.0, -0.203585], [0.49, 2.37, 0.203585]], "93488703-4eb8-4c88-bfd0-ae3c1be9516f": [[-0.774996, 6.81145e-06, -0.207377], [0.775003, 0.4, 0.207553]], "7d8ad918-f0f6-4b6e-9a47-183ed8d8006f": [[-1.00659, 1.91825e-06, -0.20055499999999998], [1.00638, 0.488917, 0.20055199999999998]], "9dd83646-2a94-411b-bb32-d50e1acbbddf": [[-0.37492600000000004, -1.72008e-17, -0.317245], [0.37492600000000004, 0.634489, 0.317245]], "29b870d3-cd51-3ca9-a377-1e5875cc34e0": [[-0.291469, -0.000499, -0.276208], [0.277067, 1.0001900000000001, 0.260518]], "7c676fc1-4e6a-443f-8c38-f24c0d993250": [[-0.293395, 9.67362e-18, -0.293395], [0.293395, 0.516189, 0.293395]], "1bae26c6-c9ac-456d-8171-9ea8efb5afd8": [[-0.41690600000000005, 0.0, -0.33435400000000004], [0.41690600000000005, 0.8408490000000001, 0.33502200000000004]], "750daab7-41eb-467a-a74b-6d9f72b09a12": [[-0.936956, -0.000189578, -0.497158], [0.934904, 0.834962, 0.496282]], "24f7d921-f36e-4182-8853-39d54b82ab16": [[-1.05551, -0.00041741, -1.01695], [1.05786, 1.15788, 1.01772]], "ee2879d2-1c30-4669-9936-9beb37b38026": [[-0.869189, -0.000241545, -0.395424], [0.869189, 0.6489879999999999, 0.39467199999999997]], "71cab400-8371-3677-915a-fc03f86c10d1": [[-0.29, 0.0, -0.28752700000000003], [0.29, 0.850908, 0.28752700000000003]], "a80632b4-90d6-4527-a7a1-28df26a72d53": [[-1.24117, -9.88736e-06, -0.48822200000000004], [1.24213, 0.891247, 0.487426]], "905dcb06-c639-4170-bdbd-24ac9fc45a81": [[-1.1431, 2.07266e-07, -0.40000199999999997], [1.1423699999999999, 0.877006, 0.40000199999999997]], "df4cc201-17da-43bb-8346-b020da57e6ce": [[-1.08654, -0.000315436, -1.19983], [1.08683, 1.34999, 1.19981]], "4df2df89-68ab-48d3-a042-e730ba05aa55": [[-1.1421999999999999, 1.52588e-08, -0.493148], [1.14407, 0.81707, 0.493688]], "b02d97a7-c4fc-4fe3-ac93-b911f2f7d145": [[-0.307913, 0.0, -0.14528], [0.307913, 0.883255, 0.14528]], "aed7216d-f364-4a12-8b0c-421bb7438cd7": [[-0.857239, -1.13121e-08, -0.260001], [0.857239, 2.2063, 0.260001]], "12c0a7d0-958f-411f-a122-95e4ccf8aadf": [[-1.40767, 4.14479e-07, -1.454], [1.40762, 1.36291, 1.45364]], "9806da70-b9e4-4a6d-93f8-e1b9198714bc": [[-0.21625499999999998, 0.0, -0.225429], [0.214532, 1.0998189999999999, 0.223706]], "f54fc43e-36be-4a85-9031-41112bfb2319": [[-0.44149099999999997, -0.00023029799999999998, -0.41279299999999997], [0.441384, 0.63863, 0.412877]], "09e093c6-45f8-3381-9466-a74d3e0dd195": [[-0.21543199999999998, 0.001256, -0.254189], [0.215392, 1.0221989999999999, 0.257793]], "49810b6f-d8bc-45bd-9bdc-a1c1d4a97b45": [[-0.35, -1.43754e-17, -0.265], [0.35, 0.629487, 0.265]], "e447a3e2-1079-4bed-97a7-daa8cd862438": [[-1.5893100000000002, -8.96773e-05, -0.904384], [1.58935, 0.731151, 0.9043800000000001]], "5c4ae868-8014-4a53-9976-287157adbbba": [[-0.46624699999999997, -1.24108e-17, -0.241929], [0.46624699999999997, 2.19683, 0.241929]], "e53fb75d-0ab2-49bb-8534-e24ae64342fd": [[-0.37175199999999997, 1.2207e-07, -0.35877499999999996], [0.37173900000000004, 0.766685, 0.35792700000000005]], "1b0f739e-76bb-43b5-8620-96dda71fa18c": [[-0.536226, -0.000993308, -0.535755], [0.535759, 0.8356669999999999, 0.53572]], "5bc62618-76c5-33de-bb2d-9ec00b1b4086": [[-0.470161, 1.1999999999999999e-05, -0.508925], [0.472643, 0.8503189999999999, 0.431404]], "fb7fdd38-334b-4fd8-a56f-926067fe3bc1": [[-0.36627499999999996, 0.000213, -0.372595], [0.36627299999999996, 0.796803, 0.372595]], "69000889-212f-449a-9851-48c42ed12f3f": [[-0.612968, -3.8147000000000004e-08, -0.251404], [0.612968, 2.3006800000000003, 0.251346]], "0ad968e0-8164-44f8-b033-83f117c59c1e": [[-0.206596, -0.0016357099999999999, -0.206371], [0.20677299999999998, 0.895258, 0.207272]], "53365527-4dcd-4a00-bd60-da1713269cad": [[-0.9001600000000001, -5.01994e-05, -0.205003], [0.900216, 0.32581499999999997, 0.205003]], "71d1a9f8-ee3a-4a5f-89d8-d08c12a75f78": [[-1.56542, -1.03985e-08, -0.7064530000000001], [1.56303, 0.914639, 0.70557]], "6264afe4-444a-4574-a302-e5fbf86a2969": [[-0.34142000000000006, 0.0, -0.35932600000000003], [0.34142000000000006, 1.149685, 0.35932600000000003]], "c0965a35-9ab9-45da-8034-f1dce40c961f": [[-0.347219, 0.0, -0.292173], [0.347219, 0.9941549999999999, 0.292418]], "ad0c247c-fc44-4c06-bbec-25a87c4bdefc": [[-0.430979, 0.0, -0.384756], [0.430979, 0.896012, 0.384756]], "54377535-9f96-4356-814a-5102a497b636": [[-0.26898099999999997, 0.0, -0.26898099999999997], [0.26898099999999997, 0.5925699999999999, 0.26898099999999997]], "41ff0656-d9c7-42cc-a431-e6d2b23081ae": [[-1.1, 2.28882e-08, -1.16567], [1.1, 1.05, 1.16567]], "4303ee22-8dba-3801-8cae-7d5530062ab1": [[-1.1, -6.6e-05, -0.425], [1.1, 0.763314, 0.425]], "0eafbc4c-760e-4f66-b149-78fb144fa9e7": [[-0.9006780000000001, 0.0, -0.200114], [0.9006780000000001, 0.499994, 0.200114]], "8540ec2c-f5e6-40da-af37-6c0098ce200e": [[-0.250193, -8.08036e-10, -0.200024], [0.25005099999999997, 0.453311, 0.199999]], "64cec723-95f0-44ea-97c4-a77146147f07": [[-1.40608, -9.60897e-06, -0.5731839999999999], [1.40608, 0.7050350000000001, 0.5731839999999999]], "e9d83d45-dfa1-4224-85e1-bd9f82e42144": [[-0.26679600000000003, 0.0, -0.200108], [0.26679600000000003, 0.579904, 0.200108]], "b383098b-3379-4216-9883-24ddc0bbf73c": [[-0.250173, -0.000347778, -0.27200399999999997], [0.250176, 0.960976, 0.272242]], "4975ba09-4ffb-4620-b8e5-8029c901bf10": [[-1.3447300000000002, -0.0019459299999999998, -0.455209], [1.34748, 0.823467, 0.454617]], "e447c1e0-f959-4fd6-b822-dc19aeb88b52": [[-0.47463, 0.0014080000000000002, -0.459362], [0.473992, 0.805355, 0.457545]], "0e4c4d43-c3fe-4df6-80d1-01cad2dcac84": [[-0.25271899999999997, 0.0, -0.25276], [0.25276, 0.547399, 0.25276]], "117d070e-fdcc-4a11-9f30-3734a8cc5455": [[-0.651362, -3.69222e-06, -0.15093299999999998], [0.651362, 0.482529, 0.15093299999999998]], "6c7ba746-fa09-4a7b-8d0f-129b2abd8bea": [[-0.297446, -1.41752e-05, -0.295798], [0.297446, 0.472973, 0.295798]], "6b39114f-2001-42fb-939a-46ddbb667a36": [[-1.3303, -1.35761e-07, 0.343724], [1.02763, 0.584622, 0.888033]], "66541ec3-6b0c-4de4-8b67-c15b8063913b": [[-0.431427, -1.14905e-17, -0.37789900000000004], [0.431427, 1.61389, 0.37789900000000004]], "fe9d2f76-f33e-4ce9-b281-db571ce08fab": [[-0.42544400000000004, -0.000369821, -0.425025], [0.42497, 0.43199, 0.42524]], "0b76e291-6c33-45dd-8aef-5b83eeb60539": [[-0.5, -9.72721e-18, -0.210551], [0.5, 1.05, 0.210551]], "4dee94a8-547e-40e5-8e69-72f5b30251ad": [[-0.32439, 0.0, -0.315762], [0.324288, 0.74399, 0.315762]], "1faac20f-0b8d-4632-8ef8-844ccb3b4375": [[-0.37817100000000003, 0.0, -0.378152], [0.37817100000000003, 0.355878, 0.378152]], "62f5d5a8-253d-442f-90b5-a86943b9972c": [[-1.4328999999999998, -4.1195e-06, -0.41479], [1.4328200000000002, 0.67659, 0.415757]], "6eb5add9-47f0-43e4-9397-a64861cb5783": [[-1.1057899999999998, 5.084170000000001e-06, -1.18187], [1.1057899999999998, 1.10455, 1.18182]], "4c7a2f22-3e0c-46d4-85b2-904d642dbb3c": [[-0.229711, 0.00011599999999999999, -0.229711], [0.229711, 0.693512, 0.229711]], "d41a6fb2-c508-4114-b5c4-2b60c3d97f64": [[-0.380332, 0.0, -0.480886], [0.380332, 1.124281, 0.480886]], "7da9fc1a-a7b3-4208-8b4a-8cbba6e371a8": [[-0.521594, -0.000893858, -0.439782], [0.521594, 0.800772, 0.439974]], "7d3a8795-c894-4d93-84b5-39047238e813": [[-0.513414, -1.0715699999999999e-17, -0.175], [0.513414, 2.3, 0.175]], "0f4426b8-db5e-4cd8-b370-a941735f63d1": [[-1.04108, -6.0631e-05, -0.463728], [1.04131, 0.9039839999999999, 0.463635]], "68a8d4a1-713b-4cfe-a841-bded448a740f": [[-0.599156, -5.376680000000001e-06, -0.299742], [0.598998, 2.00018, 0.300105]], "a36292fa-9db2-477f-bb32-b2a7b520275e": [[-0.371476, 0.00017999999999999998, -0.371476], [0.371476, 1.283758, 0.371476]], "4b505ab9-175f-4a1e-9832-b39a05dc397d": [[-0.263864, 0.0, -0.262958], [0.263864, 0.550431, 0.262958]], "79867c45-2168-4507-8d38-5a323c86df76": [[-0.371177, 0.0, -0.426382], [0.371306, 1.012127, 0.426382]], "f9f48d60-7095-45e9-b8e6-bbae308ea40d": [[-0.34269, 0.0, -0.18138500000000002], [0.34269, 2.465907, 0.18138500000000002]], "77b33125-7e3a-4e21-82b5-7dbc7b9a286e": [[-1.27, 0.0, -0.264748], [1.27, 0.493035, 0.264748]], "c5108085-0047-4db0-a300-c44c6c3723d1": [[-0.952659, -1.43487e-17, -0.315669], [0.952659, 2.5312200000000002, 0.315669]], "84ed9b28-95fe-4e00-b4b3-e4f16ad6def9": [[-0.73119, -6.20338e-17, -1.01309], [0.7316119999999999, 1.1204399999999999, 1.01309]], "572b7f3b-6722-48ed-956d-ebc7367f2cfd": [[-0.671446, 0.0, -0.45016300000000004], [0.671446, 0.35408700000000004, 0.45016300000000004]], "7bf721bf-8839-4343-95c5-b6e852805ad1": [[-1.06538, -5.8033e-05, -1.17722], [1.06714, 1.02116, 1.17746]], "05aca84e-9a24-45a1-b6e7-482380d34304": [[-0.579823, -1.52588e-08, -0.575426], [0.579948, 0.734035, 0.575649]], "aac51183-f0f0-4246-9342-bf1682044fc5": [[-0.665889, -4.7672e-05, -0.225243], [0.665889, 1.41, 0.225]], "a3a53214-cd88-4842-9470-f7c53f1ad39b": [[-0.387598, 3.05176e-08, -0.37850900000000004], [0.387598, 1.1074, 0.37850900000000004]], "b8cdfe23-59f9-43d5-9d4f-d8f3bd406b62": [[-0.318526, 4.01762e-23, -0.287477], [0.31856, 0.803121, 0.287061]], "863adc8f-6382-4c91-a1e9-e5ff8ab6c343": [[-0.5, 5.59771e-19, -0.234081], [0.5, 1.07426, 0.23414300000000002]], "4fe9276f-aad7-46c3-b448-5fb171ce5670": [[-1.05411, -1.38215e-17, -0.302945], [1.05411, 2.30091, 0.302945]], "189a8d02-410b-4c15-898b-cbe706235c60": [[-0.825578, -0.0, -1.014512], [0.825457, 1.0, 1.014512]], "8d5b1271-2db2-4c85-8f4e-0aa3e0524289": [[-0.478253, -1.5109200000000001e-05, -0.47801099999999996], [0.47753500000000004, 0.787859, 0.47807099999999997]], "8ce4a7f7-d2e6-442e-bf80-7beb738486df": [[-1.930015, 0.0, -0.26361999999999997], [1.930014, 2.4052000000000002, 0.26361999999999997]], "340637d9-d7d8-4bbb-a8b2-8b40e5453af0": [[-0.06687, -0.0, -0.06687], [0.06687, 0.748296, 0.06687]], "62748645-320e-48c5-865e-ee4a60349472": [[-2.00017, -8.06927e-18, -0.268219], [2.00017, 2.2, 0.26861799999999997]], "9040d01f-be51-4e9e-b299-86c92cbdf65f": [[-0.701792, 0.0, -0.282896], [0.701792, 2.222592, 0.282896]], "4312d1ab-7ff1-438d-9112-f0ae02a6b91a": [[-0.355555, 1.3814100000000001e-08, -0.355554], [0.355555, 0.807761, 0.355554]], "44250601-aacf-31a4-87e6-6ceb20d50bf0": [[-1.104505, 0.00030028, -0.47801487000000004], [1.104505, 0.8772776, 0.47527313]], "0a2378ae-4042-4411-91cc-5e9d868ec63b": [[-0.307606, 0.0, -0.307496], [0.307606, 0.542583, 0.307496]], "9581c8ef-1bec-488a-bb73-c44c5d067b2c": [[-0.508726, -0.0018139, -0.49276699999999996], [0.508726, 0.619888, 0.49276699999999996]], "de33297f-0b12-46d2-bc62-b0497dadf52d": [[-0.549082, 1.0394199999999999e-07, -0.233107], [0.5490780000000001, 0.75113, 0.233107]], "fac74057-7e53-4874-8b61-bc0732d0a212": [[-0.248951, -0.000369942, -0.247323], [0.24895199999999998, 0.598523, 0.247323]], "6f0122e0-7043-31c7-b432-dd33542559a6": [[-43.2473, 0.0, -38.2403], [43.2473, 77.5224, 37.9947]], "a6f45652-6b5c-405f-b144-eec9fc3f03e4": [[-0.500985, 0.0, -0.695961], [0.500985, 0.793488, 0.6959780000000001]], "9a7c4a80-b79b-42e5-9a4e-8ad6fd2da77a": [[-0.202751, 0.0, -0.202751], [0.202751, 0.362721, 0.202751]], "283a58b0-3075-457f-b29e-fe3a7ba69d68": [[-0.754748, -1.32788e-17, -0.21764], [0.754748, 0.797985, 0.21764]], "592a435f-f078-31cb-a31c-116010194a42": [[-1.6563999999999999, -0.000127, -0.312821], [1.684537, 0.6990919999999999, 0.36043]], "21071e0d-8228-4651-99d1-6c503fe1ed2d": [[-0.275029, -2.6826799999999997e-18, -0.274998], [0.274708, 0.683287, 0.274708]], "65bb64d0-3648-4471-a63f-c8bfe7e6662d": [[-0.334973, 2.02866e-05, -0.34853700000000004], [0.334973, 0.862608, 0.348534]], "5eb24b39-0923-45dd-b754-d656f3e4d1ca": [[-1.24125, -0.000108778, -0.262572], [1.24125, 0.75, 0.262572]], "1ebb6b08-3d2b-4d1b-8777-683e0f064fe2": [[-0.254857, -1.13025e-17, -0.254857], [0.254857, 0.157182, 0.254857]], "785a503d-21b0-4aad-9c6c-9b3b5d965b07": [[-1.12891, -6.95684e-08, -0.42007399999999995], [1.12891, 0.8133969999999999, 0.42054600000000003]], "7a852453-1f35-4240-a455-3caa50a26569": [[-0.8904730000000001, -5.08301e-07, -0.299103], [0.8905270000000001, 2.19252, 0.299072]], "0fb25207-a5bf-45cc-8b52-cce170f682da": [[-0.266964, -6.86601e-07, -0.25198699999999996], [0.267216, 0.662778, 0.252165]], "02d15e1b-09d5-425c-8323-0a423f655615": [[-0.946108, -3.05176e-08, -0.604173], [0.946087, 2.05638, 0.604173]], "1094cc34-da3b-40fc-aab0-8418ea823046": [[-0.7000660000000001, -4.68231e-05, -0.176361], [0.7000350000000001, 1.18973, 0.224183]], "441ef2a1-5f80-4eea-a7c0-176d1bcb9a8b": [[-0.282383, 5.59227e-05, -0.28299399999999997], [0.282239, 0.33756, 0.282852]], "83c442a2-645a-4e4d-a3df-94a52aabc006": [[-0.7066129999999999, -9.22098e-18, -0.178917], [0.7066129999999999, 0.831932, 0.178982]], "27dacc0c-3e14-4d93-bb5c-aa54791e4cff": [[-0.38295, -1.97588e-05, -0.16610499999999997], [0.38295, 1.6636600000000001, 0.166184]], "c4b1e776-0cf2-4db0-b303-5ff29d0be5fa": [[-0.817539, 0.0, -0.296128], [0.817539, 0.923415, 0.296128]], "3a431666-c294-41c8-85ca-2247a19e3671": [[-0.231414, -1.64869e-17, -0.270869], [0.231422, 0.8755459999999999, 0.270869]], "1666cf88-ef4f-4472-a2be-14a43831dbe6": [[-0.273017, 0.0, -0.272931], [0.272323, 0.8889619999999999, 0.272184]], "0a9fe7e8-5be2-4d2d-bc9d-9e382f42725f": [[-0.454288, -6.21956e-06, -0.20408300000000001], [0.454606, 0.894898, 0.204132]], "1ca44b26-d4c9-4358-845a-b51b73547e5d": [[-0.9430710000000001, -7.860890000000001e-05, -1.06952], [0.9431529999999999, 1.41406, 1.06822]], "e0b56d4d-fabe-4b8a-b298-08db814f851a": [[-0.24373699999999998, 0.0, -0.222414], [0.24373699999999998, 0.6103540000000001, 0.222414]], "c94c58ed-23fe-43a6-a80e-92186f15ede0": [[-0.354589, -4e-06, -0.313599], [0.325113, 0.946753, 0.382325]], "0860f1c4-712e-4bab-857b-e3a394291f41": [[-1.74864, 3.05176e-08, -0.578767], [1.74696, 0.913149, 0.5789909999999999]], "a613d0bd-b565-4626-bc3f-c772e2aca348": [[-0.15, -7.16418e-18, -0.132], [0.15, 1.4, 0.132]], "5112ce14-2935-4417-ba7f-2f93fa9518b0": [[-1.59156, -0.00495215, -0.8268859999999999], [1.59247, 0.868627, 0.826624]], "89f4080c-6b2d-46a6-8eda-59434d17ad21": [[-0.301292, -8.93466e-18, -0.2155], [0.301292, 0.528971, 0.2155]], "8154f369-214f-4885-ab84-752a7109bf4c": [[-0.403932, -0.0016756499999999999, -0.400015], [0.403934, 0.720079, 0.40017899999999995]], "e44318ac-6453-499e-a90e-1324258f1bce": [[-0.333369, -3.55378e-05, -0.33315300000000003], [0.33336799999999994, 0.526466, 0.333095]], "25225938-c47e-4f19-8816-1557d5bfb05f": [[-1.31447, -5.2972599999999995e-05, -0.5550269999999999], [1.3131899999999999, 0.768874, 0.554771]], "0eda5ad3-4138-48dc-9ab9-a078cca3d7e4": [[-0.4, 0.0, -0.126519], [0.4, 0.9, 0.126519]], "431f43ba-a46b-499a-a764-6755b6f90634": [[-0.984954, 1.2802099999999998e-08, -1.00362], [0.984954, 1.2875, 1.0037399999999999]], "e2d8ec53-224a-46a5-9269-06b72b160ae2": [[-0.41824300000000003, -2.1188700000000002e-17, -0.414678], [0.418163, 0.808084, 0.415965]], "68faaaf2-7e71-4f9e-a0b6-1ed4d6291775": [[-1.241514, 0.000125, -0.464226], [1.241517, 0.862208, 0.464257]], "08cbdd45-a3d0-400d-b943-b742999bfe6e": [[-1.0415, -3.6464399999999996e-05, -0.32500599999999996], [1.0415, 2.2, 0.32500100000000004]], "e638af2d-c579-40c3-9912-a7119d70d578": [[-0.316301, 2e-06, -0.24128699999999997], [0.316292, 0.5, 0.241284]], "74d3a1d3-7a60-4050-b82a-0132eb97ad71": [[-1.45703, -5.82804e-05, -0.514216], [1.45747, 0.8084709999999999, 0.5139520000000001]], "3a9a9326-b1a7-4c19-a896-31055ef0aaa3": [[-0.341487, -1.28786e-17, -0.34252699999999997], [0.34183, 0.7357859999999999, 0.34180900000000003]], "38a842db-048b-4c9c-82dc-25ec5ae04072": [[-0.515973, -1.77402e-07, -0.170973], [0.515961, 1.25667, 0.170973]], "6ae28e0d-7130-4ea9-97fe-1ce592a81c47": [[-0.37805900000000003, 8.7e-05, -0.42377299999999996], [0.377337, 0.87285, 0.42376600000000003]], "733bdc73-7161-40c6-a4e7-85b173b913cc": [[-0.256686, 0.0, -0.255119], [0.256686, 0.54, 0.255119]], "598886c5-12d3-4ae2-80bd-1ca34c194815": [[-0.367658, 0.0, -0.31], [0.367658, 0.7487569999999999, 0.31]], "eeb58e8b-e086-437b-b537-8e2004be24fd": [[-0.287652, 0.0, -0.278439], [0.287599, 0.828, 0.27821]], "61fae47a-8385-457a-920a-e462339a3381": [[-1.3322100000000001, -1.48821e-05, -0.49177], [1.33223, 0.8185720000000001, 0.492542]], "3ace9236-7387-41d8-9398-1ab8a902c6a6": [[-0.20603000000000002, -0.000347461, -0.20333600000000002], [0.20582599999999998, 0.37292000000000003, 0.203065]], "38694816-1fc3-4534-80cc-ac46abc102cd": [[-0.6779519999999999, -6.7266699999999995e-09, -0.475479], [0.6779519999999999, 0.365933, 0.475479]], "266b2811-09f5-4eea-a552-bcf65375b755": [[-1.0253700000000001, -6.49358e-17, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "7be78e99-5ace-466f-84bf-e4509dabebb3": [[-0.411843, 0.0, -0.411843], [0.411843, 0.822617, 0.411843]], "2bc40317-96e2-4832-bc95-e8b706d92ddc": [[-0.39120600000000005, 2.2000000000000003e-05, -0.437005], [0.39120699999999997, 0.993518, 0.437005]], "f2bf96f7-1fdd-4ee3-93dc-60f5d027a95b": [[-0.318077, -1.52588e-08, -0.19376300000000002], [0.318077, 1.0302, 0.19376300000000002]], "5aefbf12-5f0c-464a-b90e-8c69ea4f2c37": [[-1.0140099999999999, -8.459830000000001e-18, -0.784217], [1.0140099999999999, 1.90327, 0.784217]], "721a0603-b263-4ccf-ac30-49de51a4deea": [[-0.272308, -2.04575e-05, -0.296257], [0.27232500000000004, 0.991771, 0.29620799999999997]], "0dc361d0-d727-4117-80cb-f2fd6cff3b01": [[-0.291488, 9.499999999999999e-05, -0.286265], [0.29151900000000003, 0.797647, 0.286265]], "591cab06-d6a9-4d83-b6dd-bf66ada3bd1d": [[-0.62704, -0.0, -0.300958], [0.627525, 2.43, 0.300473]], "8181d2e8-080c-4afe-931a-b1a8acf96e24": [[-0.213148, -1.0832e-05, -0.213148], [0.213148, 0.374425, 0.213148]], "4b35d386-fbfd-4afe-b850-7fbae8fbeab9": [[-1.3405, -0.000247089, -0.466702], [1.33929, 0.85629, 0.466165]], "ffb1e3fb-7198-4dca-b72b-7f733c4fd07c": [[-0.321657, -0.000639325, -0.327533], [0.321548, 0.640166, 0.32756100000000005]], "4d235558-b9ef-4a6f-9b31-7bf16171f81c": [[-0.405599, -0.00047855799999999997, -0.399971], [0.405659, 1.14045, 0.39949199999999996]], "2ddc834b-8c0e-4652-a83e-959087fcf028": [[-1.20459, -0.0026319, -0.443702], [1.20467, 0.769088, 0.44429]], "0f3a2591-85c9-4b63-b3bf-8ced7fa2a843": [[-0.725, 1.52588e-08, -0.21], [0.725, 0.78, 0.21]], "2049860b-939b-305a-b051-6a95b4558fed": [[-0.345005, 0.000952, -0.388107], [0.345004, 0.703679, 0.38744100000000004]], "71cc5c99-c363-4782-b7ff-2faf45de6af8": [[-0.660743, -0.000251183, -1.0592700000000002], [0.66061, 1.19651, 1.05828]], "5ae13af6-2a53-4fe9-9bc7-4665a206d7d9": [[-0.216831, 0.0, -0.216831], [0.216831, 0.562677, 0.216831]], "af22d4a3-6e34-45d2-afef-c3e9f6838043": [[-0.41606099999999996, 1.57943e-07, -0.416319], [0.41606099999999996, 0.920504, 0.416319]], "6d15d1bb-749e-3956-ad80-946cf649b869": [[-1.098256, 0.0, -0.509527], [1.098256, 0.7908419999999999, 0.525087]], "2e815c2a-94ee-43a4-a182-7eeeaff16c48": [[-0.18670799999999999, 5.999999999999999e-06, -0.175309], [0.18670799999999999, 0.46061799999999997, 0.175309]], "815965b3-4143-471f-9906-735925b80a52": [[-1.14646, -6.16465e-17, -1.1029900000000001], [1.14724, 1.15523, 1.10225]], "5dea092e-2aea-4345-b745-0246825f3aa5": [[-0.885201, -2.38311e-07, -1.3635300000000001], [0.885201, 1.56756, 1.3633600000000001]], "58ecbc56-5006-4a7f-ac04-e98246d13126": [[-0.27965599999999996, 0.0, -0.27965599999999996], [0.27965599999999996, 0.598481, 0.27965599999999996]], "89eb27f1-dac4-45e2-93fa-4dc0f44e9793": [[-1.259497, 0.0, -0.235203], [1.259497, 0.46157899999999996, 0.235203]], "a9d2d25d-132d-423d-8782-1dff2c085672": [[-0.16643799999999997, -4.55612e-05, -0.149446], [0.16658699999999999, 0.660542, 0.14932299999999998]], "47dba9b3-0e38-455e-9d48-6ca79a31d0ea": [[-1.1913939999999998, 0.0, -0.634933], [1.191063, 0.7689900000000001, 0.6348769999999999]], "acc8ecb0-c2b1-4166-9cf2-876c7649e472": [[-0.6, -9.77161e-18, -0.164666], [0.6, 0.48747999999999997, 0.164666]], "4bd5ec70-a7bc-354a-adc9-bc4fcb7a520a": [[-0.93285, 5.999999999999999e-06, -0.48161099999999996], [0.764804, 0.738082, 0.477716]], "23a7cb80-0331-33d1-bb9c-557a74821587": [[-1.276545, 0.0, -0.529773], [1.276545, 0.8320350000000001, 0.529773]], "e90574de-09da-4b81-b5a5-fd2913e16544": [[-0.143331, -0.000202055, -0.143314], [0.143436, 0.914797, 0.143217]], "a3e8bf5a-c3dd-4211-bdda-483818d9d354": [[-0.546254, -5.31783e-05, -0.235114], [0.546254, 1.40387, 0.234798]], "022378be-f0d1-431f-b4b1-0f75f0c4397f": [[-1.612474, 0.0, -0.359402], [1.611985, 1.242536, 0.35887]], "338c64d0-57d1-4580-8e09-07ef8a97e002": [[-0.40673200000000004, 0.0, -0.26704100000000003], [0.40673200000000004, 0.249005, 0.26704100000000003]], "f780034a-fde5-47dd-a4ab-079fda0e0502": [[-0.561, -0.00171006, -0.561567], [0.56118, 0.8594370000000001, 0.561337]], "b0fb44dc-9186-4de7-87f6-a5b6b3ded50e": [[-0.40423699999999996, 1.52588e-08, -0.41517400000000004], [0.40423699999999996, 1.07315, 0.41517400000000004]], "6595c7b4-6f3a-4f0a-bf48-e5e52212042a": [[-1.12077, -5.14641e-09, -0.535799], [1.12122, 0.86237, 0.539742]], "766d2c3b-8d0a-45e7-99c1-bda197986422": [[-0.9993340000000001, -0.00028645, -1.22224], [1.00035, 1.53109, 1.22224]], "299d19d1-7ea9-4293-9111-a177c61b8545": [[-0.303447, -0.000123486, -0.27941099999999996], [0.303472, 0.8351109999999999, 0.278352]], "57c82f77-15c5-49f4-86b0-352c00c7fb99": [[-0.422581, -2.16541e-06, -0.402793], [0.422581, 0.776578, 0.402701]], "984f69e2-8aa3-4a3d-98f5-5ff2a7751d76": [[-0.372566, -0.0017523, -0.371831], [0.372566, 0.85045, 0.371831]], "4588ab7a-492e-456b-b8aa-5e48b412aebe": [[-1.061144, 0.0, -1.132812], [1.062915, 1.30284, 1.132187]], "ca146453-5c77-43d8-a8ba-d4d804161005": [[-0.2238, -1.8524e-08, -0.308913], [0.2238, 0.49430999999999997, 0.308913]], "2464c0cd-fb2e-4228-8a9e-6e997c798c72": [[-0.600166, 0.0, -0.300024], [0.600166, 0.449577, 0.300024]], "cf24f58a-04eb-4e36-8d6c-a42688541c0e": [[-0.9154859999999999, 0.0, -0.25], [0.9154859999999999, 0.771056, 0.25]], "a337b429-eee0-4aad-a325-ec8248688d1c": [[-0.624286, -1.3203999999999998e-17, -0.225306], [0.6242540000000001, 1.9804400000000002, 0.225074]], "0e357885-feaa-405c-8df3-2a51866ac4a9": [[-0.517188, -0.000179955, -0.15], [0.517618, 1.01938, 0.15]], "5e2d8d3f-a62b-4a83-b240-3ca188691ed4": [[-0.389977, 6.93357e-09, -0.379056], [0.388609, 0.8489629999999999, 0.37932299999999997]], "33370c02-3a8e-4b8c-9522-3fce38a03a12": [[-1.63136, 0.000207274, -0.847633], [1.63127, 0.687218, 0.84771]], "3b9ddbc6-3288-4214-adf5-2d5b59b11ded": [[-0.0999624, -1.52588e-08, -0.09976520000000001], [0.0999624, 1.12037, 0.09976520000000001]], "e1ac258c-b259-48e4-b5db-571c2c45e210": [[-0.46078600000000003, 1.27305e-07, -0.461025], [0.460799, 0.8497969999999999, 0.46079000000000003]], "c6ab0aed-c966-49d1-998e-315213ab1500": [[-0.6, -3.4029e-05, -0.21], [0.6, 1.288, 0.21]], "2974f5a3-ab9d-3de4-a7cb-37896f20e959": [[-0.515525, 0.0, -0.515525], [0.515525, 0.72301, 0.515525]], "af899b3f-5bd2-4470-84eb-564fb87d56e2": [[-0.29, -1.1021800000000001e-17, -0.215], [0.29, 0.5, 0.215]], "e421b292-8808-49e6-9dbb-3f60519de9b4": [[-1.012194, 2.8999999999999997e-05, -0.515589], [1.012194, 0.633343, 0.515589]], "9d130fa1-5d4e-476e-9174-749834285580": [[-0.545362, 0.0, -0.545362], [0.5453629999999999, 0.897748, 0.545362]], "1d9f21cd-359f-4520-ad98-467e86526b35": [[-1.10106, -2.0633e-05, -0.28778400000000004], [1.10076, 2.3958600000000003, 0.287796]], "b862ca4b-207b-4e8b-838b-c99a5e502daa": [[-0.36029200000000006, 3.75698e-07, -0.36906500000000003], [0.359925, 0.378006, 0.36895000000000006]], "8092255a-555f-3ccb-b8a7-050b812dd83a": [[-0.29133400000000004, -0.0015279999999999998, -0.27845600000000004], [0.29133400000000004, 0.731508, 0.27855599999999997]], "c18d1a3d-c11c-4d6e-9be2-d196fed48e82": [[-0.370166, -0.00012896700000000001, -0.350646], [0.37006700000000003, 0.9045350000000001, 0.35174500000000003]], "4fca0f54-f388-4796-8da9-72ad2c2f585b": [[-0.839689, -8.612210000000001e-07, -0.28457699999999997], [0.839774, 0.640872, 0.284708]], "29c5de3d-a397-357f-90e3-47690adf12c1": [[-0.26580200000000004, 0.0, -0.27591899999999997], [0.26580200000000004, 0.8085460000000001, 0.27591899999999997]], "19c6c218-75c0-44d0-b8b1-59a26cc52e05": [[-0.234109, 0.0, -0.21269300000000002], [0.234109, 0.5881839999999999, 0.21269300000000002]], "59f2792b-9d76-42ca-affe-6bb91c4aaea4": [[-1.78938, 7.16651e-05, -0.663681], [1.78942, 0.993114, 0.662406]], "4180f35c-7921-42a7-b72b-1452b34b194d": [[-0.580747, -7.768150000000001e-06, -0.191025], [0.580747, 0.859443, 0.191025]], "17a16eec-c2de-4063-b92b-53c5204088bf": [[-1.03096, -1.42109e-17, -0.29925], [1.03096, 1.0653, 0.29925]], "4598aaaa-7122-4b20-9763-da1cd0997329": [[-0.09399279999999999, 1.52588e-08, -0.0938073], [0.09399279999999999, 0.9713930000000001, 0.0938073]], "4ff7e87b-b451-40d5-9213-50605b2bfedc": [[-0.929303, -1.7821800000000002e-17, -0.292024], [0.929303, 2.34707, 0.292024]], "2b04d38b-74e3-447b-b3d4-d955e5fc0c59": [[-0.57, -2.17604e-17, -0.547303], [0.57, 0.4, 0.547303]], "d864c4f8-a679-411a-adc4-10354d300e44": [[-0.9354779999999999, 0.0, -0.294544], [0.9354779999999999, 0.8217279999999999, 0.294544]], "4e5b9827-137f-447b-b740-371e0405a6a8": [[-0.927, -9.31474e-18, -0.175], [0.927, 0.524, 0.175]], "58833a0e-7b68-4d3f-bac7-6eda1cd32893": [[-0.8084950000000001, -1.6371899999999998e-05, -0.865262], [0.808494, 1.13446, 0.8651049999999999]], "75d0ab70-5624-31ef-b86a-7e6a58e58ca5": [[-0.47541100000000003, -0.0006569999999999999, -0.278648], [0.701225, 0.668794, 0.496538]], "9e50f69b-1a65-4862-82f9-9b9d8fda478a": [[-0.5912339999999999, -3.4106100000000003e-16, -0.265717], [0.5912339999999999, 0.912146, 0.265717]], "00221545-8e2c-4266-bb42-f08c4e8d2382": [[-0.35, -2.14313e-17, -0.35], [0.35, 0.120728, 0.35]], "0f1346bf-0fbc-4dca-9e90-a6224f6fa012": [[-0.631175, 0.0, -0.20228400000000002], [0.631175, 0.679283, 0.20228400000000002]], "1ef668a9-12e0-447b-9bbc-8ae484ba8c58": [[-0.35741799999999996, -9.403979999999999e-05, -0.341119], [0.357134, 0.726187, 0.34158700000000003]], "8b9b7fb2-a5e9-4705-b323-e5666c5bd80e": [[-0.910238, -0.000450106, -0.5206000000000001], [0.9103619999999999, 0.977212, 0.520937]], "c3b4eb1f-283f-48f5-9144-781581187840": [[-0.514721, -1.52588e-08, -0.450436], [0.514621, 0.790617, 0.45085000000000003]], "8574f9eb-9e9a-4efc-a912-53a5da581942": [[-0.45317599999999997, -0.000321918, -0.452891], [0.453346, 0.735551, 0.45304900000000004]], "926d4bf3-2522-46d0-abf2-c6729a7fc017": [[-0.228266, -3.82501e-05, -0.154909], [0.228311, 0.448643, 0.154977]], "2de026d4-b7d4-4ac2-931c-b256fba2e059": [[-0.39533799999999997, 0.0, -0.452016], [0.395374, 0.894999, 0.452117]], "72e91db5-e92d-4e24-a96d-73f957cb822e": [[-0.808955, 0.0, -0.522335], [0.8088500000000001, 1.040621, 0.522335]], "f21eef99-e223-4ac7-95d0-8c9e1a19c712": [[-0.216067, -4.39648e-17, -0.163549], [0.21583100000000002, 0.822073, 0.163658]], "56a2b156-4b47-4cd2-98a5-ba309a34e6e8": [[-0.921156, -3.05176e-08, -0.244618], [0.921156, 0.628596, 0.244618]], "e406c699-f51a-4813-87cc-9befd03a3b69": [[-1.1982380000000001, 0.0, -0.398636], [1.1982380000000001, 0.725252, 0.398636]], "a7b8bb01-f966-42da-adcb-086e198fbe87": [[-0.34141800000000005, 0.0, -0.414837], [0.341212, 0.824671, 0.414717]], "06213f44-aa13-3208-a360-bff6a1df41ac": [[-109.0304, -0.0002, -56.4164], [109.0304, 91.2372, 73.704]], "f9f94564-94f5-483c-8879-981613070970": [[-0.734993, 0.0, -0.734993], [0.734993, 0.72, 0.734993]], "5609970c-6ee7-39a6-9f76-95c4d7a28650": [[-0.26198899999999997, -1e-06, -0.25847000000000003], [0.26198899999999997, 0.726197, 0.255967]], "3ff5a682-eaed-483b-8907-157d488447c9": [[-0.932897, 0.0, -1.067766], [0.933206, 2.260485, 1.06745]], "2b9d4792-ba7f-4b5c-80f2-e0893786a203": [[-0.24702300000000002, -1.79488e-05, -0.251371], [0.24702000000000002, 0.995771, 0.25116299999999997]], "141d89f0-4308-49b2-9869-f881c1fad4fe": [[-1.34785, -1.03024e-17, -0.19628900000000002], [1.34785, 1.97744, 0.19646999999999998]], "64d5e5fa-6d2b-4bdf-a083-5cd98f579be5": [[-1.27502, -0.000301987, -0.536578], [1.27404, 1.0119799999999999, 0.53513]], "7cf60eb8-36f2-4543-a125-8e98f29a6500": [[-0.7, 7.06377e-09, -0.7], [0.7, 0.742001, 0.7]], "43703ab1-caf3-4f95-a710-2743e4cad4e1": [[-0.28659, 0.0, -0.306159], [0.286737, 1.061272, 0.306013]], "0ddf811b-7cc6-420b-aee4-90b335012f4f": [[-0.6, 1.1495599999999999e-08, -0.285335], [0.6, 0.71135, 0.285335]], "631d1d00-4ce9-44f5-8394-7f5e74fdc54d": [[-1.29137, -1.17474e-17, -0.6515949999999999], [1.29136, 1.90124, 0.65185]], "1fba3582-9fcd-4609-bf19-3b8bff77a5de": [[-0.655802, 0.0, -0.304922], [0.6552030000000001, 0.6386419999999999, 0.304922]], "c1184cf7-bd66-4d6a-8755-05d9303d8eb5": [[-0.30722, -1.81022e-17, -0.31448699999999996], [0.30722, 0.1, 0.31448699999999996]], "badee8ce-ba11-484c-91df-c3b10a27619f": [[-0.356049, 0.0, -0.35997999999999997], [0.356049, 0.896592, 0.35997999999999997]], "4491b8d3-23ad-4f4b-97d8-1a17f76cc682": [[-0.76153, -0.00143519, -1.02413], [0.7598130000000001, 1.17551, 1.0247]], "d41427e4-173b-490f-9ec7-e0bc1cb087d8": [[-0.9446829999999999, 0.0, -0.164762], [0.9446829999999999, 2.4533709999999997, 0.164762]], "06b5cbc6-9ab4-3c9d-a4c3-de7391395590": [[-1.002707, -0.000798, -0.41283499999999995], [1.002707, 0.8170390000000001, 0.41283499999999995]], "ae063003-4748-4bfe-8d71-527598317fc4": [[-0.759246, 7.2e-05, -0.480321], [0.759246, 0.914999, 0.480322]], "290b55d4-8db2-40d1-aba9-95e39a9a041e": [[-0.388161, 1.19398e-08, -0.389478], [0.388363, 0.385045, 0.389482]], "019c82d8-1522-49ca-bf38-b09e55a063e3": [[-0.24580100000000002, 0.0, -0.259346], [0.24580100000000002, 0.453463, 0.259346]], "f83f04a2-736b-406f-be90-8023a96aeda7": [[-0.46266199999999996, -4.2533199999999995e-05, -0.462278], [0.462517, 1.35846, 0.462164]], "e5a73841-a628-4067-bc83-2e4b7922ffc2": [[-0.8722679999999999, 3.1e-05, -0.43877000000000005], [0.872149, 0.825721, 0.43957700000000005]], "806f5a9c-9459-4d57-8879-1dd967932d65": [[-0.65, -0.000119123, -0.192549], [0.65, 0.760001, 0.192655]], "53f1bd2c-1738-42b2-a19f-fa112f09703f": [[-1.75, -1.06581e-17, -0.158389], [1.75, 2.6269, 0.158065]], "736eb459-c78a-3cf2-a067-cd464ba4dd45": [[-0.273868, 7.2e-05, -0.292177], [0.27378399999999997, 0.9810639999999999, 0.294057]], "159a306d-feb8-45bf-9453-56cfdd529427": [[-0.381651, 0.0, -0.379154], [0.381651, 0.86077, 0.379154]], "943c7c74-86e7-4197-8716-38842121ac8d": [[-0.24446500000000002, -0.0, -0.240069], [0.24446500000000002, 0.361703, 0.24006799999999998]], "ae10e0c0-cd42-4f10-ac2e-6a39152d9162": [[-0.542585, 0.00028199999999999997, -0.559683], [0.5423060000000001, 1.107348, 0.559774]], "e3108749-98b8-45f7-8abf-e92677575e51": [[-1.17753, 2.8832200000000003e-07, -1.08565], [1.17753, 0.8024030000000001, 1.0844]], "dc09a231-d0f1-4b05-90ce-1068d0834355": [[-0.41603999999999997, 0.00221119, -0.146482], [0.415438, 0.949038, 0.146482]], "d3d5c68f-5151-43ac-894d-9e1b511be372": [[-0.752877, 0.0, -0.5], [0.752877, 0.75, 0.5]], "99447c8e-3639-4726-9a8f-450b879a46ad": [[-1.37995, -1.0715699999999999e-17, -0.175], [1.37995, 2.41, 0.175]], "ff565b24-e5ae-4536-a1b2-0538fdf3a7fd": [[-0.172988, -6.0797899999999996e-05, -0.173125], [0.173078, 0.38013399999999997, 0.173056]], "8ea548a9-f28a-4a2c-9621-4e84304d2612": [[-0.571057, 0.0, -0.515171], [0.571418, 1.025302, 0.514985]], "0c2cf1d1-759d-4009-8ce6-499a21f1a3f2": [[-0.384629, -0.00041654999999999996, -0.426353], [0.38467, 0.7807649999999999, 0.42688400000000004]], "38ff93cb-c0ea-392e-8dc7-2376c306bf8d": [[-89.85, 0.0, -34.8499], [89.85, 70.0, 34.8499]], "2e5104c3-4b7f-451a-afaf-6d272e77ae2f": [[-0.318176, -1.51602e-17, -0.318176], [0.318215, 0.956207, 0.318211]], "dacd01de-292f-4192-b159-f93728452831": [[-0.633744, 0.0, -0.450269], [0.633397, 0.608233, 0.449228]], "d661271f-3af4-4f6d-b752-83b1aaf8ae44": [[-0.968223, -1.91827e-17, -0.352723], [0.968223, 2.2641, 0.352723]], "0bcccd3e-2f61-49ec-8b00-ded62b84d31c": [[-1.204401, 0.0015229999999999998, -1.188643], [1.204067, 1.315047, 1.188643]], "00859a4c-8945-4665-92e5-69ab8fba6593": [[-0.9108710000000001, -0.0, -0.37820099999999995], [0.9108710000000001, 0.716037, 0.378126]], "7c6fdfb6-e526-49bf-a733-14ebf0aee5fa": [[-0.645818, 0.000144, -0.575573], [0.645818, 0.43095799999999995, 0.575573]], "6be6f94b-80d2-4699-83c3-7084c60b12fc": [[-1.065612, 1.8e-05, -1.297343], [1.067348, 1.196028, 1.297373]], "5b1ecc1e-41db-4212-92d0-acc52af7392c": [[-0.75, -1.0266400000000001e-17, -0.185348], [0.75, 0.9, 0.18537099999999998]], "6cf2dda5-b955-4ae8-b7c0-634358e4dcb2": [[-0.213948, 0.0, -0.24386], [0.213948, 0.867169, 0.24386]], "6addb703-3dec-4782-8d00-b84780364557": [[-0.43072499999999997, -0.00047189300000000003, -0.356957], [0.430377, 0.713383, 0.35696100000000003]], "ebb03946-5a69-4879-a992-f8a10df411db": [[-0.448297, -0.000195044, -0.465547], [0.44832700000000003, 0.888604, 0.465321]], "aa97aff7-f746-4fa4-bc60-162280966691": [[-0.392065, 0.00014800000000000002, -0.388479], [0.392063, 0.7937810000000001, 0.388516]], "68e41dbc-1f12-447d-bffd-d1864fa2a7bf": [[-1.08957, -0.000179734, -1.22177], [1.0881100000000001, 1.2681, 1.22262]], "ed080b62-0fcd-4011-8528-0a79d1e96a75": [[-0.376008, 0.0, -0.45265099999999997], [0.376008, 0.85078, 0.45264400000000005]], "c9209ff9-97da-483e-886d-08e3e64ec171": [[-0.281386, 0.0, -0.281386], [0.281386, 0.507864, 0.281386]], "819e046e-91e1-4c13-a827-720fc775859d": [[-0.41082799999999997, -0.000291576, -0.44254600000000005], [0.411064, 0.970434, 0.442379]], "08aaba68-e6e9-44c0-97c5-9e76defcf5f0": [[-0.37546599999999997, -0.0, -0.202262], [0.37546599999999997, 0.49774999999999997, 0.202262]], "3fd5671a-9ba0-43c1-84a3-a7082b486a57": [[-1.13647, 7.50246e-17, -1.3108099999999998], [1.13827, 1.3428399999999998, 1.31188]], "5f85aced-613c-4e20-9455-10aa845fdd09": [[-0.70675, -6.102409999999999e-17, -1.00342], [0.70675, 1.4157, 1.00342]], "162e1aed-6e96-4503-ba3c-adfe8b07b429": [[-0.599, 1.52862e-17, -0.279092], [0.599, 0.70935, 0.279092]], "26ace8fa-1053-44d2-b080-f5754e4d1f6b": [[-0.24310199999999998, -6.9173800000000004e-18, -0.24361999999999998], [0.24310199999999998, 0.8666379999999999, 0.24361999999999998]], "dc491b13-cc1e-44af-90a2-5db342132f50": [[-0.994882, 0.0, -0.298594], [0.994882, 0.59393, 0.298594]], "3f59d8b2-c84d-4be3-8dac-902aae6f9fb6": [[-0.7500020000000001, -6.24297e-17, -1.0209000000000001], [0.7500020000000001, 1.1, 1.0209000000000001]], "46468927-49d4-4c59-9807-9c38bac3f916": [[-0.18869599999999997, 0.0, -0.226829], [0.188673, 0.9812919999999999, 0.226821]], "32382aca-a6fa-448d-a82c-63ff517fcc37": [[-0.258161, 0.0, -0.260028], [0.258233, 0.795266, 0.26005]], "7f73e93b-a483-4a4a-ad50-baae1211c4b5": [[-0.417579, -0.000126476, -0.43687600000000004], [0.417387, 0.8002819999999999, 0.43692]], "0969bab8-7ffd-4297-94c0-08ac9a11ca9e": [[-0.38789700000000005, 1.9e-05, -0.453227], [0.38789700000000005, 0.822846, 0.45264400000000005]], "e185dbe5-c6c8-4fcf-864c-527acdbe603a": [[-0.550062, 0.0, -0.250094], [0.550062, 0.45000300000000004, 0.250094]], "5b2ed8ea-f321-40f5-bb00-dacb518753d8": [[-0.6938120000000001, 2.97527e-07, -0.884023], [0.693965, 0.818709, 0.8837579999999999]], "5b3e36a4-4283-47f1-92ee-c9226cf02621": [[-0.9956109999999999, -0.00036727900000000003, -0.387716], [0.995882, 0.688518, 0.386941]], "d3fe6ca8-2117-4599-994c-a2bf70f6eac3": [[-0.29398399999999997, 0.0, -0.29398399999999997], [0.29398399999999997, 0.21372599999999997, 0.29398399999999997]], "6fff9bdc-20b4-40e6-a37d-ca372cddb1e4": [[-0.290384, -1.01464e-17, -0.173091], [0.290384, 0.459837, 0.173091]], "41bd3ca1-23ea-4a5e-b4a7-990c9e28657b": [[-1.21404, -1.77128e-17, -0.32307899999999995], [1.21404, 2.39285, 0.324148]], "cce74fb0-a4bd-4e1e-9af2-acbb5f2f3a20": [[-2.2319999999999998, 1.90735e-09, -1.876], [2.2325, 0.605911, 1.8752000000000002]], "1c757655-00c1-469a-828c-16a4a4e5a9aa": [[-0.625829, 0.0, -0.20690799999999998], [0.625829, 0.449524, 0.20690799999999998]], "2632ec72-e319-469a-a01e-21b0e1038a18": [[-1.008537, 0.0, -0.454262], [1.008537, 0.9195359999999999, 0.454262]], "3dea3ae3-dd3e-4227-9e0d-9099db5f21d7": [[-0.42464399999999997, 0.0, -0.42464399999999997], [0.42464399999999997, 0.799352, 0.42464399999999997]], "b5f3b10b-ded8-44af-a268-7361e05ac41a": [[-0.291659, 0.0, -0.291283], [0.291659, 0.6689780000000001, 0.291283]], "2557e1ed-647f-4bf8-84e6-1057f72a39e3": [[-0.31045300000000003, 0.000135, -0.31045300000000003], [0.31045300000000003, 0.6515470000000001, 0.31045300000000003]], "654dfdac-77ab-4c7a-ad4a-98a0dda486d7": [[-0.7625, 0.0022919999999999998, -0.417577], [0.7623690000000001, 1.117604, 0.418338]], "0f25a699-6560-426d-a590-7e69986c449d": [[-0.268059, 1.4215e-17, -0.252984], [0.268059, 0.7943129999999999, 0.252879]], "5347b0a9-94b1-4983-9263-e18eb3830480": [[-0.387456, 0.0, -0.234634], [0.387456, 0.310442, 0.234634]], "7e568365-a82d-418d-a884-ae94470e24f3": [[-1.21256, 8.06315e-05, -0.48694499999999996], [1.21258, 0.875275, 0.486897]], "dd841437-d8be-420c-87c6-48ebec60dfb1": [[-1.2261199999999999, 1.2207e-07, -0.471014], [1.22647, 0.8967, 0.471177]], "635a65fa-6a73-4133-b32c-625044a7906b": [[-0.448106, -0.000196144, -0.547394], [0.44799, 0.859522, 0.547516]], "a875c2c5-bd1c-48ad-9f07-3a042bcf55e6": [[-0.571074, -2.93791e-17, -0.585632], [0.571073, 0.855943, 0.585632]], "7b1bea23-bb61-41b4-a587-96adc2688e6a": [[-0.23693799999999998, -1.27991e-17, -0.209026], [0.23693799999999998, 0.460484, 0.209026]], "5474896c-d215-486b-8c86-5344072c7c38": [[-0.320786, 0.000215, -0.32719299999999996], [0.320769, 0.8573520000000001, 0.327042]], "bc16ac37-00f0-4646-8e47-56de6044ac1e": [[-0.6878369999999999, -1.9983999999999998e-17, -0.688131], [0.6878369999999999, 0.733028, 0.688131]], "f7b9d8f5-1458-4a0d-a753-0a2a4f377e31": [[-0.27098700000000003, 0.0, -0.238932], [0.27098700000000003, 0.9053239999999999, 0.238932]], "21c036ce-d000-417b-b385-7e58d07a45a7": [[-1.118852, 0.0, -0.233854], [1.118852, 0.587707, 0.233854]], "b2110add-eeeb-407f-b7c1-eecdf697aa84": [[-0.445484, -2.2954500000000002e-05, -0.456535], [0.445484, 0.377177, 0.456334]], "29d5bbf7-f577-4f5c-baa7-1ed3f9817a67": [[-0.273625, -1.0654400000000001e-17, -0.175], [0.273625, 0.43728900000000004, 0.175]], "c2a14887-ae1f-4b8c-ab37-bcb949229616": [[-0.282138, 0.0, -0.308655], [0.282104, 0.901763, 0.30853400000000003]], "0902b5ae-6c89-4ad5-bff9-637f35c2fd85": [[-0.7327049999999999, 0.0, -0.7327049999999999], [0.7327049999999999, 0.7591060000000001, 0.7327049999999999]], "44bff814-95c9-3f47-85ea-f488b05f8d33": [[-0.962766, 0.001344, -0.354638], [0.963363, 0.8094830000000001, 0.355003]], "03c4ad94-9507-4bcf-a90a-67f867db2111": [[-0.7541370000000001, -1.43547e-07, -0.920436], [0.755401, 1.06397, 0.920404]], "0125c477-4efc-3cbc-8422-0f80b7de9eb0": [[-65.5806, 0.0, -65.5806], [65.5806, 74.0467, 65.5806]], "7eeaaf59-5a29-4abe-933f-516509256060": [[-0.434089, -7.359229999999999e-05, -0.368767], [0.434089, 0.735566, 0.368767]], "3ed36334-a9a5-4ca8-9a4c-d75ae4ef9dfe": [[-1.0, -2.3465e-05, -0.500002], [1.0, 0.750012, 0.5]], "b543003a-54f3-42b2-bf47-29370f97414b": [[-0.337784, 1.5832800000000002e-05, -0.336963], [0.33692999999999995, 0.799918, 0.337158]], "eb63d61e-759d-4c44-8945-d022fa7e507c": [[-0.290058, 0.0, -0.16115300000000002], [0.290079, 1.8899860000000002, 0.16114699999999998]], "4cf03f39-f074-4297-8b88-607687b18118": [[-0.685532, 0.0, -0.46956899999999996], [0.685532, 0.454504, 0.46956899999999996]], "831cbddc-22cc-4c7b-b4a8-2ff6f4825f87": [[-1.34562, 1.31249e-07, -0.561567], [1.3454599999999999, 1.23108, 0.562376]], "436ce948-4578-4ef5-bed9-f929c3ecfa91": [[-0.370792, 1.1000000000000001e-05, -0.35079099999999996], [0.370557, 0.7265649999999999, 0.350694]], "f72aa1f8-ced5-46b5-a07f-936b4b79689c": [[-0.397695, -0.000270668, -0.430476], [0.39767600000000003, 0.690851, 0.43025399999999997]], "cebf5ef0-da78-4a8a-ad63-718b4188558a": [[-0.282501, 0.0, -0.249165], [0.282553, 0.796332, 0.249207]], "0b9f51f9-93c6-307a-9fe0-8d03f7eff4b8": [[-0.571994, -0.0013059999999999999, -0.9480339999999999], [0.5701339999999999, 0.9580970000000001, 0.959641]], "e68fe496-a9c9-4a0b-b00a-1bbc5aab885d": [[-1.24399, 0.0, -0.394123], [1.244366, 0.936994, 0.394324]], "3f041025-cfe9-41fd-be52-83c4bb5454b1": [[-0.37552599999999997, -2.2539699999999997e-17, -0.428389], [0.37572099999999997, 0.458187, 0.428504]], "2cd453f2-df6c-4eda-8015-a9e147374b4e": [[-0.45095999999999997, 0.000173, -0.188162], [0.45095999999999997, 0.25168399999999996, 0.18820599999999998]], "80150a25-7847-3f36-b852-d45924c5de8a": [[-0.314092, -0.002384, -0.47759799999999997], [0.554889, 0.722177, 0.443005]], "4e32c0c1-7ba6-40d3-9d8b-be5c471b9ac1": [[-0.294267, 2.3999999999999997e-05, -0.33848300000000003], [0.29395499999999997, 0.71237, 0.339203]], "183c88de-1f01-4dfe-b95c-ce12013acef8": [[-0.40371, -2.0376999999999998e-05, -0.403732], [0.40403599999999995, 0.405485, 0.40435499999999996]], "6aa24c17-8976-44be-b3ec-e66c430512f0": [[-0.336933, -2.3215800000000002e-05, -0.33692], [0.33687399999999995, 1.2611700000000001, 0.33692999999999995]], "634aee31-c2ed-45ae-8e8a-e0a2e914cf63": [[-0.232377, -9.670399999999999e-05, -0.20415299999999997], [0.232377, 1.65608, 0.20409]], "37c539ec-3bb0-48fc-b91c-6bea3fc6115c": [[-0.225577, 0.0, -0.24444500000000002], [0.225577, 0.950933, 0.24444600000000002]], "a2b2b89b-8e65-4102-9701-9177f1492e72": [[-1.3135249999999998, 0.0, -0.6729890000000001], [1.3135249999999998, 2.88, 0.6729890000000001]], "806a3644-ac12-4b1f-a69c-6285bc0e28ec": [[-1.222827, 0.0, -0.432306], [1.222653, 0.6876260000000001, 0.43231]], "6ba7a3f6-cc18-4ad5-ba69-9e21692b89fd": [[-0.931422, 2.17671e-08, -1.01002], [0.931422, 1.1720300000000001, 1.01002]], "79282835-d265-347e-a050-b777e7962150": [[-0.236615, 2.9999999999999997e-06, -0.18921700000000002], [0.236615, 0.788986, 0.32122300000000004]], "6db16164-83af-4223-941c-bd254b4a6598": [[-0.47035899999999997, 0.0, -0.5069250000000001], [0.47052700000000003, 0.9303570000000001, 0.5069250000000001]], "755a8747-7c75-41d2-acb1-e0d1adbb7a17": [[-0.483161, 0.000192334, -0.446459], [0.48286, 0.915108, 0.446997]], "51956bfa-1b71-441a-8c7a-5ab3fae94fcc": [[-0.895642, -6.00362e-17, -0.987093], [0.895642, 1.06763, 0.987134]], "068bc916-69aa-4153-ac1f-8cb0a00e4cde": [[-1.00058, -0.0015289400000000001, -1.00877], [1.0014, 1.17867, 1.00881]], "ecf282da-737f-4269-a994-df00a82cad1a": [[-0.250001, -1.34102e-17, -0.25], [0.250001, 0.502, 0.25]], "d3b585b3-2396-4371-a076-d93c99d87bb4": [[-0.476518, -0.000427564, -0.443428], [0.47843, 0.301506, 0.442733]], "e000c278-fe59-44e3-8cdf-c60823bbf17d": [[-0.299327, 0.0, -0.299326], [0.299327, 0.555723, 0.299326]], "3b24e2fc-2f7f-49b3-bf76-81b226a74046": [[-0.826318, 0.0, -0.509472], [0.826014, 1.042383, 0.5091680000000001]], "59623eeb-1917-40d3-af63-9dc6ab8a944a": [[-1.58896, -0.00023894200000000002, -1.05393], [1.5937799999999998, 0.8312390000000001, 1.05356]], "5a7cbc05-740c-436d-9291-33b1f930a6c2": [[-1.08917, 1.2221699999999999e-08, -0.42495], [1.08959, 0.946366, 0.42343200000000003]], "297ae078-c07a-4181-8a8d-a680f5691d5e": [[-0.35279699999999997, 1e-06, -0.41773499999999997], [0.352068, 0.897187, 0.417787]], "1533e0be-e5fc-42a9-8af4-ad5776a9199f": [[-0.48729999999999996, -2.84503e-17, -0.46708599999999995], [0.487037, 0.773457, 0.467128]], "6643c782-8aee-43d6-ae77-00e1c6de8d40": [[-0.42328299999999996, 0.0, -0.334579], [0.423259, 0.592091, 0.334762]], "486cb090-746c-414d-ab36-d517a560dfae": [[-1.136217, 0.0, -0.502272], [1.1361350000000001, 1.052128, 0.502218]], "220dde51-10eb-48f5-a49a-02454da9f4fd": [[-0.965684, 0.0, -1.018527], [0.965684, 1.158575, 1.017894]], "ba4e24ef-b6b7-41be-af22-d13ba4619a93": [[-0.46354999999999996, -0.0020576, -0.45081000000000004], [0.463547, 0.798329, 0.44951599999999997]], "ff453a14-c904-48bc-8b79-410a55694cbd": [[-0.524431, -2.09737e-06, -0.16125399999999998], [0.524353, 1.53155, 0.16145299999999999]], "9bbf1170-6dfb-41f1-bc10-a8b45163e95b": [[-0.16, -0.0, -0.16], [0.16, 0.568232, 0.16]], "c922708e-0db4-4ad3-a225-04a7a2a7500a": [[-0.22441299999999997, 0.0, -0.224755], [0.224414, 0.475889, 0.224755]], "94ea3c29-2066-43b4-a900-80b286410a0f": [[-0.635083, 0.0, -0.35534999999999994], [0.635083, 0.850874, 0.35534999999999994]], "8ab37369-7af1-4002-8bef-c59b9cf86b0a": [[-0.803365, -6.49703e-18, -0.150098], [0.803365, 1.98478, 0.150098]], "677b3a7d-585d-49dc-87db-37ea49bdadfa": [[-0.313725, -0.000475435, -0.377697], [0.313725, 0.43005699999999997, 0.377697]], "5e11bbde-097c-4511-bf7a-16bedc856b03": [[-0.281619, 6.9298999999999995e-06, -0.297431], [0.28163699999999997, 1.03006, 0.297122]], "21521120-cb75-3838-a105-7cb2d020a73d": [[-1.0816729999999999, 1.3e-05, -0.443566], [1.11899, 0.8503189999999999, 0.496764]], "fb2c12f1-6169-41d3-b739-e5a48aea86c9": [[-0.847042, -6.10352e-08, -0.31200700000000003], [0.847042, 2.4, 0.311812]], "43e28e0d-759d-4913-825f-93d53ea92f11": [[-1.00495, -7.62939e-09, -1.13195], [1.00491, 1.60491, 1.1323699999999999]], "653f62e6-b6be-4b5d-825a-ce80c0193176": [[-1.2067400000000001, -0.00040477399999999994, -1.1794], [1.2067400000000001, 1.631, 1.17957]], "ae283029-f46a-4bdb-b6ea-3029af24fa5f": [[-0.321191, 0.0, -0.333301], [0.321191, 0.521158, 0.333301]], "c900392e-ad30-4389-ac10-4a96d67948a1": [[-0.25856999999999997, 3.86167e-05, -0.258569], [0.258571, 0.572951, 0.258569]], "bc0b1c5e-57ea-4a5e-afa4-779906d08994": [[-1.20271, 0.000168, -0.46338500000000005], [1.200278, 1.000951, 0.463028]], "1d6ad40a-6de1-41d1-bb0c-a4eb42063e88": [[-0.699634, 0.0, -0.38135399999999997], [0.699634, 0.7085899999999999, 0.38135399999999997]], "13681311-2e8d-3a43-983f-e2b1838c3c75": [[-0.381853, 0.000446, -0.421208], [0.381732, 1.0654080000000001, 0.440626]], "31cfd838-9547-480d-bca3-6f733dadef93": [[-0.36280999999999997, 6.8e-05, -0.380227], [0.36262099999999997, 0.833873, 0.38016300000000003]], "ce5d33c2-796a-4f6c-a36e-81eb84b6c875": [[-0.406785, 0.0, -0.351708], [0.406785, 0.725651, 0.351708]], "faa8986c-d632-4b7c-9a25-659e48c42d0a": [[-0.589742, -7.5111899999999995e-06, -0.24035900000000002], [0.589743, 1.4759200000000001, 0.24035900000000002]], "69b0600a-479e-45ae-b7db-cb529d20d088": [[-0.76789, -1.6345599999999998e-05, -0.21717199999999998], [0.76789, 0.8506440000000001, 0.21717199999999998]], "538c5543-06eb-37ad-a3ec-e48a92b806e0": [[-1.104505, 0.00030028, -0.47801487000000004], [1.104505, 0.8772776, 0.47527313]], "552a7ab6-a0d2-4ea8-b30f-43f10e0591b0": [[-0.850005, -2.67622e-08, -0.18397200000000002], [0.850005, 1.32318, 0.18397200000000002]], "acbfef7e-341e-4577-b14c-969b3f90c466": [[-0.30129100000000003, 1.2124e-17, -0.225], [0.30129100000000003, 0.635981, 0.225]], "0ad663fa-87da-47b0-a522-478bd75ed23d": [[-0.56126, 0.0, -0.464426], [0.56126, 0.345614, 0.464426]], "79465c7a-26ec-4e33-8f3f-5e500bbdd541": [[-1.13016, 0.000240724, -0.45193], [1.12991, 0.8031699999999999, 0.45175899999999997]], "0639d4c7-1ac5-4631-9ec1-4d7808a3e360": [[-1.4862600000000001, -0.000989809, -0.512701], [1.48617, 0.8959269999999999, 0.51292]], "77185b15-66a6-45aa-8ef7-514b4b374ecb": [[-1.0, -1.66227e-17, -0.32853099999999996], [1.0, 2.364, 0.328542]], "49516675-f65f-4a6f-82cb-4b8583a5cc70": [[-0.29107299999999997, 0.0, -0.291072], [0.29107299999999997, 0.621621, 0.291072]], "3cbe01fc-2f48-40e6-8a0a-b57f8e6635c7": [[-1.45788, -4.47603e-05, -0.315122], [1.45787, 2.49988, 0.31522300000000003]], "6bdf1e36-4df2-4486-9783-acd3f5ed86b9": [[-1.0150700000000001, -1.14441e-08, -0.291489], [1.0150700000000001, 0.871053, 0.291489]], "511ca9b2-4849-4eea-a48a-a9374edc1968": [[-0.45484, 3.17889e-08, -0.200187], [0.45484, 1.01573, 0.200187]], "73990f52-832d-4551-9188-3954ff3704a8": [[-0.8830020000000001, 6.44606e-17, -1.1027200000000001], [0.8830020000000001, 1.1, 1.10297]], "d7e2c96f-76cd-4699-bbe7-c65f7cb8b8cd": [[-1.2650409999999999, 0.00030900000000000003, -0.533158], [1.264979, 0.9993179999999999, 0.533158]], "6c41d7bb-985d-4a52-bccd-759186381056": [[-0.320654, 0.0, -0.320654], [0.320654, 0.498003, 0.320654]], "5074ce71-5ebc-45b7-8fed-2651725d74f5": [[-0.154036, 1.23443e-05, -0.255456], [0.154238, 0.42466299999999996, 0.255631]], "77e8423d-8b63-4c49-9b8e-b0f8c119cef0": [[-0.43965200000000004, -7.7792e-05, -0.438587], [0.440198, 0.58835, 0.440434]], "2c76bb70-3db3-4971-b6bf-6994701f93bf": [[-0.6633929999999999, -3.8147e-09, -0.260901], [0.6631, 0.35740299999999997, 0.261463]], "1c6f1892-23cf-41ee-b707-7d79fca07cf3": [[-0.988699, 0.0, -0.480039], [0.988858, 0.841113, 0.48003999999999997]], "f12b7d59-8248-4a7a-b7a7-7f5ef547a61f": [[-0.9, -7.62939e-09, -0.22710899999999998], [0.9, 0.695465, 0.22710899999999998]], "446f9903-16a9-4dcd-afa7-f12738865a95": [[-0.584019, -1.0193399999999998e-17, -0.194924], [0.584019, 0.759558, 0.194924]], "5a60379a-8c3f-47bd-97c7-8e6102b75fdf": [[-0.270457, -1.65607e-17, -0.270457], [0.270457, 0.14, 0.270457]], "41f95e55-3ce3-4ba9-9153-fa9a9f904229": [[-0.9765, 0.0004, -1.12777], [0.975756, 1.30854, 1.12781]], "5c7e925c-c848-31e8-8ad9-60a650559f7c": [[-1.168001, 0.0, -0.623487], [1.172499, 0.8124429999999999, 0.588748]], "6af892f2-291e-4e45-8230-d1239c330e34": [[-0.118958, -0.0, -0.118903], [0.118958, 0.8656579999999999, 0.118903]], "41e46b9d-b459-4a29-ad2f-2ca8c1fced9a": [[-1.33886, 0.0, -0.911169], [1.33886, 0.9768129999999999, 0.911169]], "2579e690-d251-457f-aed2-175651c1ae9c": [[-0.38399099999999997, 0.0, -0.486976], [0.38399099999999997, 1.13516, 0.486976]], "02859936-a048-47cb-a157-f41f2da9826f": [[-0.345204, -0.000254144, -0.37040100000000004], [0.346226, 0.8092929999999999, 0.370976]], "11eb3a31-340f-4b54-9b18-97185b87b27e": [[-1.950675, 0.0, -0.6022099999999999], [1.950676, 0.72431, 0.602209]], "a723b457-7c26-4cc8-916c-0355a5690fad": [[-1.5795599999999999, -3.8147e-09, -0.841701], [1.58, 0.954962, 0.841759]], "876a343b-ffa6-4585-9db8-6b5f0098e743": [[-0.304431, -0.00010212300000000001, -0.304272], [0.304118, 0.356002, 0.304042]], "2209baaa-5935-42a4-8b1e-b7380f811d48": [[-0.304261, -1.7899299999999998e-17, -0.304261], [0.304261, 0.130114, 0.304261]], "0cd0f02c-7bf9-46b2-ac69-680349b0d84a": [[-0.349988, 0.0, -0.404011], [0.349988, 0.871666, 0.404011]], "40d61d5e-965b-457c-88e8-287cc69821c9": [[-0.535912, -0.000102072, -0.26071300000000003], [0.535912, 0.8639560000000001, 0.261362]], "c2455922-3285-443f-886c-73a06874423d": [[-0.197576, 0.0, -0.19747900000000002], [0.197566, 0.453083, 0.197488]], "4fff0d90-6b23-4321-b9a0-ed974b23ee97": [[-0.197607, 0.0, -0.130363], [0.197607, 0.131266, 0.130363]], "1e5cddb9-68df-3efa-9443-7adfc3930a08": [[-1.700573, -0.0029749999999999998, -1.0156619999999998], [1.287271, 0.8432999999999999, 0.933011]], "ff6ecbaf-7218-4138-adcc-17a375b6c0ef": [[-0.319057, 4.768370000000001e-10, -0.210514], [0.319057, 0.521668, 0.210514]], "70464ae6-cf69-4e9c-ac31-0482d2355288": [[-0.34072800000000003, 0.0, -0.34761200000000003], [0.34047400000000005, 0.6727960000000001, 0.347622]], "3deb5075-c1ea-4ac6-af79-44da44c6fd5f": [[-1.2389400000000002, -0.00219574, -0.448253], [1.23976, 0.7633110000000001, 0.44836]], "3b5578c5-0a1f-4295-94e0-f694a89c55de": [[-0.548824, 0.0, -0.548824], [0.548824, 0.365, 0.548824]], "645abe09-6bd5-4c3a-9f25-578d0d59d13c": [[-1.43065, 0.0, -0.42178899999999997], [1.43123, 0.8268859999999999, 0.420164]], "13f8a498-2f31-419b-b31d-20683bcce9e7": [[-1.21125, -0.00018743099999999997, -1.3766999999999998], [1.16714, 1.16835, 1.3794]], "7200c9a9-0ef1-40a0-b9ab-6773f2d34a81": [[-1.6325399999999999, -8.03108e-05, -0.804312], [1.6333000000000002, 0.8669100000000001, 0.8048770000000001]], "2df04061-6e14-4814-a400-7215bd1d4135": [[-0.396501, 0.0, -0.42944299999999996], [0.396501, 0.8031109999999999, 0.42948300000000006]], "64c3ec5c-aa56-445c-9bcf-478f8e876a26": [[-0.9456829999999999, 1.32719e-17, -0.325111], [0.9456829999999999, 2.26736, 0.325111]], "55bfa2e4-8231-4808-b517-5148b14540ba": [[-0.88267, -5.851929999999999e-17, -0.955693], [0.88267, 0.95363, 0.955693]], "083a7a9e-641a-4c8a-a684-a353d10ccfc2": [[-1.0671599999999999, 1.1000000000000001e-05, -0.410574], [1.0671599999999999, 0.727572, 0.410574]], "0f55cd8a-f4c0-303a-9122-2ad909e4fb06": [[-1.102387, 0.0, -0.43585799999999997], [1.102387, 0.7614749999999999, 0.448622]], "64b0d4c5-2df1-4138-b091-83af5821cbce": [[-0.728077, -1.48623e-07, -1.05263], [0.727999, 1.0034999999999998, 1.05129]], "6e70ab90-8424-4080-988e-be07af2f458f": [[-0.258119, 0.0, -0.21203499999999997], [0.258119, 0.748531, 0.212134]], "a2d6e01c-cac3-4706-bedf-59368d6638f2": [[-0.708163, 4.3963300000000004e-08, -0.199435], [0.708163, 0.785419, 0.199495]], "80229416-b3cd-4db0-83ee-61c6645a04cd": [[-0.8615569999999999, -3.8695499999999996e-05, -1.01122], [0.860343, 1.17353, 1.01123]], "ceaa2d37-5d41-443e-a4c9-12335d372c5f": [[-0.6, -2.57408e-06, -0.156931], [0.6, 0.7204389999999999, 0.15722]], "0ef88fb5-1e57-42f5-a04f-c249ef4e5ba8": [[-0.265141, 9.15527e-08, -0.20055], [0.265141, 0.511676, 0.20055]], "3dbea0a7-97e4-4350-a22a-58e4bc422823": [[-1.1423999999999999, 2.72283e-06, -1.0587], [1.14059, 0.871156, 1.0587]], "7ec57ec0-f033-43af-9713-0be6943843e3": [[-1.050184, 0.0, -1.195179], [1.050184, 1.1789319999999999, 1.19533]], "31f491b6-6968-4c6c-ac5c-306ba8a821ea": [[-0.445371, 7.62939e-09, -0.441316], [0.445609, 0.83745, 0.441274]], "079431be-2e6d-4ff0-8c0e-7b80e764bf59": [[-0.37052799999999997, 0.0, -0.260041], [0.37052799999999997, 0.378325, 0.260041]], "420cd15a-4ae4-4bc1-8fa1-5b0bb5bd3e04": [[-1.36862, -0.00046370300000000004, -0.49960099999999996], [1.37024, 1.0094, 0.499848]], "716095f2-ff1e-4af3-8949-2880879a37a4": [[-0.33081200000000005, 0.0, -0.331134], [0.331965, 0.42023000000000005, 0.331011]], "3efa3d50-1a11-450d-a0a8-a2893ab7fefc": [[-1.20006, -1.01081e-17, -0.20332699999999998], [1.20006, 2.3, 0.203793]], "d5be814e-7107-43c1-821d-9e32a01af878": [[-0.4125, -3.05176e-08, -0.21769300000000003], [0.4125, 1.36382, 0.219251]], "0e2b963d-66ab-49e3-8cf0-f90fd919bce4": [[-0.28125, 2.24745e-08, -0.327298], [0.28125, 0.393086, 0.327298]], "7bf4cdb6-776a-4762-8eda-47f0e8ca530a": [[-0.9, 8.13933e-18, -0.195], [0.9, 0.41009, 0.195]], "f4b2a2d0-88b7-4444-9171-6999e2efdd4a": [[-0.805777, 0.0, -0.295149], [0.805777, 1.662382, 0.295149]], "95f44043-569b-41fe-8d0d-933f09a63c61": [[-0.32475000000000004, 1.15083e-17, -0.217945], [0.32475000000000004, 0.559377, 0.214299]], "5aa84345-6b02-4d43-b87f-eed0af5c3db8": [[-1.16726, -1.02173e-05, -0.454229], [1.16666, 0.8710899999999999, 0.454731]], "4de374ed-e836-48e1-824e-6d1ddbe438ec": [[-0.263561, 3.4043199999999997e-09, -0.18984600000000001], [0.263561, 0.44731000000000004, 0.189847]], "b51f8488-d6ba-44f6-ab06-df617ea2b767": [[-0.706471, 7.62939e-09, -0.17704], [0.706471, 0.786844, 0.17704]], "6c7e1f2c-d0a6-495a-8b5c-8197b1d90999": [[-0.486967, 0.0, -0.17197500000000002], [0.486967, 2.798242, 0.17197500000000002]], "4af5086e-858f-4778-8ed0-8efcbb996eb1": [[-0.9513760000000001, -1.72043e-17, -0.30784300000000003], [0.9513760000000001, 2.27825, 0.30784300000000003]], "6d9407a3-774a-4bd4-bf63-b6d71712cd54": [[-0.565, -5.93732e-05, -0.34527299999999994], [0.565, 1.98914, 0.345351]], "51373f5a-a662-4011-ab5c-596fd432a5f9": [[-0.284059, 3.3e-05, -0.219005], [0.284059, 1.025822, 0.218872]], "1bbf88b5-359d-4210-a7ce-35ddeb2c0717": [[-0.39049599999999995, 0.0, -0.394643], [0.39049599999999995, 0.766391, 0.394643]], "7a9bb448-b103-4de3-8fb3-0683ce36d661": [[-0.370428, 0.0, -0.370428], [0.370428, 0.5226230000000001, 0.370428]], "b7cc98f0-b4f1-4488-98d1-e3814921627d": [[-0.42928600000000006, -0.000353056, -0.429625], [0.428924, 0.508257, 0.429667]], "1f5410a5-1b98-4ccb-974c-7eb6be918d84": [[-0.717574, 0.0, -0.466641], [0.717573, 0.568332, 0.466641]], "bcc9b629-6700-44a0-97ff-55f31ae5aba7": [[-0.370492, -1.4685e-05, -0.370492], [0.370492, 0.6460819999999999, 0.370493]], "9c3fb391-b0b2-4df6-944a-d9e859de2d39": [[-0.475658, -2.65297e-05, -0.283397], [0.47569, 0.975488, 0.283398]], "56bd94af-7f97-30de-98f2-e50af27d0c5a": [[-168.063, -0.019, -69.4989], [168.063, 73.9159, 69.4989]], "b5d2e954-516d-4e2a-b1a5-ff4687e211c9": [[-0.20406500000000002, 1.26981e-06, -0.204158], [0.203991, 0.426982, 0.20433199999999999]], "0d3dcdd8-4126-3d9a-81e1-87358be018b4": [[-112.5268, 0.0, -30.4326], [111.0627, 78.0, 30.3566]], "7a161a4d-e174-44df-97f6-daa1e7b8dccd": [[-0.2622, 0.0, -0.27208], [0.262105, 0.6278779999999999, 0.271857]], "46fc8baf-b028-4069-80bf-3de526309963": [[-0.759442, -2.85809e-06, -1.11347], [0.757875, 1.23407, 1.11327]], "56816c22-457e-43df-94bf-2e78baa8c928": [[-0.433821, -3.11245e-05, -0.491519], [0.43427, 1.04884, 0.49121699999999996]], "38daf573-ce59-4df9-bbab-341cbc5c6aad": [[-2.17211, -0.000613925, -0.479328], [2.17224, 0.91252, 0.478907]], "b338f1a0-d6a6-4786-b83b-7272ff085b85": [[-0.301507, 0.0, -0.301507], [0.301507, 0.298543, 0.301507]], "73728248-41b4-4c99-a172-abd2ff1a35a2": [[-0.17458400000000002, 0.0, -0.174929], [0.17458400000000002, 0.44276699999999997, 0.174929]], "cf11a369-e0de-4ea3-80c6-913e1ed3288a": [[-0.616063, 0.0, -0.462361], [0.616063, 0.421763, 0.462361]], "2381ff90-f4cc-4930-8245-78dfadb35245": [[-0.998583, -1.87185e-08, -0.29672899999999997], [0.998583, 2.3284700000000003, 0.29681799999999997]], "01efd00d-e214-43f4-b2e9-2c288d677aed": [[-1.3434719999999998, 0.000114, -0.493686], [1.3434719999999998, 0.947466, 0.492599]], "66e53d0b-9f97-46b9-873e-df25496281c9": [[-0.243175, -0.00019041499999999999, -0.16437200000000002], [0.243175, 0.507586, 0.16437200000000002]], "f11804e6-3330-442a-baba-82930184c922": [[-0.231308, -2.2158899999999999e-07, -0.26121], [0.231308, 0.805283, 0.26127300000000003]], "798bde9b-6bbc-43eb-9456-9e0227fc0d1f": [[-0.968903, 0.0, -0.458024], [0.968903, 0.277028, 0.458024]], "28b5b3bc-2852-43a9-bc08-0fb9b34732e7": [[-0.399764, -7.62939e-09, -0.400214], [0.399871, 0.731648, 0.400184]], "b19945bf-2410-459d-9fa1-11817d36a113": [[-0.246872, -1.55224e-17, -0.254], [0.246872, 0.508, 0.254]], "4d5fb167-137f-4c53-9016-c8bd80bc4734": [[-0.41407299999999997, 0.0, -0.347973], [0.41407299999999997, 0.296346, 0.347973]], "7aecd672-7b37-41ed-9674-43e0a4cb0845": [[-0.9661109999999999, -0.0017948, -1.1024], [0.967033, 0.943798, 1.10038]], "8531e316-2cc7-4917-89f7-c6697f6513da": [[-1.0, -5.96342e-18, -0.21063400000000002], [1.0, 0.45, 0.21063400000000002]], "951871ef-d526-4e96-b188-3380b2146431": [[-0.24540900000000002, 2.8999999999999997e-05, -0.072879], [0.245426, 0.61259, 0.072842]], "6ba4e3f7-1756-42c1-a8f9-496eb11cb522": [[-1.19913, -0.000512765, -1.19141], [1.2017499999999999, 1.12458, 1.19213]], "202be378-8e97-471d-9041-8f24d8c3df00": [[-0.385347, 0.00025354, -0.45744399999999996], [0.385316, 1.20861, 0.45758899999999997]], "085a0299-9d71-48cd-8f4a-716cb3012978": [[-1.232539, 0.000264, -0.675972], [1.231931, 0.9355209999999999, 0.675394]], "7c667cab-d303-4bc1-aaf8-1f8a37edbe6e": [[-0.9966379999999999, -2.0285199999999997e-05, -0.484216], [0.9970680000000001, 0.9216920000000001, 0.48361600000000005]], "30d524b6-ad13-440f-a1ac-6d564213c2f7": [[-0.313413, 0.0, -0.271328], [0.313413, 0.62357, 0.271341]], "4d367ea0-5e7a-4a9e-b36d-0ff9657fd813": [[-0.09721600000000001, 0.0, -0.09721500000000001], [0.09721500000000001, 1.426833, 0.09721600000000001]], "0b32b9d0-2716-483a-a9b4-48c10c44dc41": [[-0.716392, -9.582159999999999e-05, -0.848078], [0.716114, 0.7228749999999999, 0.849705]], "74bceb63-6d67-3971-89a0-bb4a12122d06": [[-1.16352, 0.002856, -0.444606], [1.161669, 0.7773869999999999, 0.46069000000000004]], "147fb31a-fcf2-4b58-8c0a-6ff888abff04": [[-0.402594, 0.0, -0.43599899999999997], [0.402783, 0.981135, 0.435998]], "b4a4c789-bc17-4d91-9496-22a4ebbfc655": [[-0.79791, 0.0, -0.18629300000000001], [0.79791, 0.843527, 0.18629300000000001]], "71c821a0-41bd-425f-9311-c689a7d1528f": [[-0.339851, 0.0, -0.347962], [0.339851, 0.946853, 0.347962]], "427fe3cb-5879-4165-b678-9cf106f66e06": [[-0.6407299999999999, 0.0, -0.338007], [0.6407299999999999, 0.558887, 0.338007]], "03669aed-7a95-43cb-888f-6cbc2efd2df5": [[-0.18023499999999998, -7.42672e-06, -0.179955], [0.18012, 0.696888, 0.180124]], "2b3562c2-03a7-4a81-92d2-e658f31b11b9": [[-1.1309099999999999, -3.90625e-05, -0.486716], [1.13188, 0.837416, 0.485948]], "fceb575b-b8a8-44d8-832c-223933cd1143": [[-0.0891657, -5.31728e-09, -0.0890249], [0.0890208, 0.922269, 0.0890718]], "7337b046-99ed-4320-b0f5-6c5076fc2e46": [[-0.5270009999999999, -1.73159e-17, -0.301773], [0.5270009999999999, 2.0340000000000003, 0.301772]], "0917783b-5104-41bd-8273-af6be2f39534": [[-0.266658, 0.0, -0.269894], [0.266658, 0.49685, 0.269894]], "2acd94bf-8534-4edb-ab8d-288c6cb8be2e": [[-0.426898, 3.8147e-09, -0.468617], [0.426261, 0.988392, 0.468242]], "9357cf8a-b6e3-491b-91d1-1774aae0ee17": [[-0.45496400000000004, 8e-05, -0.3883], [0.45496400000000004, 0.7539, 0.38917900000000005]], "c5aaee4e-fea4-4b99-9452-95d36e6b0a10": [[-0.8425, 0.0, -0.152502], [0.8425, 2.16, 0.152501]], "548332e1-68ae-34fa-a8a2-82ce4daeeb4c": [[-0.345338, -0.0007530000000000001, -0.324639], [0.345338, 1.013598, 0.263958]], "e712c3ac-bfc8-4382-b267-d413df5df2d6": [[-0.5369619999999999, -0.000156741, -0.242487], [0.537619, 0.425705, 0.243034]], "50fa8256-7f36-4e99-8599-e0130cb67480": [[-0.9981690000000001, 0.0, -0.17676999999999998], [0.9981690000000001, 0.484065, 0.17677099999999998]], "7eee70e8-0f35-45de-b7c6-77a8311994a0": [[-1.24569, -0.000145613, -0.5424289999999999], [1.24556, 0.7211320000000001, 0.542249]], "5b064413-e20c-4579-aed0-e591a9e86f32": [[-0.5093460000000001, 0.000558945, -0.508485], [0.5093460000000001, 0.725042, 0.508485]], "55855465-9e32-4527-b35b-8cd9ba8eadf8": [[-0.905039, -1.52588e-08, -0.286449], [0.905039, 0.8443160000000001, 0.28754799999999997]], "748ef8d9-1b29-4bde-b8bb-41ec47ee38d4": [[-0.881606, -5.07173e-07, -1.0354], [0.881606, 1.44672, 1.03536]], "98420a62-34ce-4a2c-926f-bf7300477f79": [[-0.31531400000000004, -1.60193e-17, -0.31531400000000004], [0.31531400000000004, 0.78166, 0.31531400000000004]], "54fa35d6-b93d-4684-9093-eef5338e3d65": [[-1.22145, -0.00019503699999999998, -1.22804], [1.2213800000000001, 1.5657699999999999, 1.22801]], "0b7c1001-ab11-4161-8c19-b8a9e7067988": [[-2.195801, 0.0, -0.23440000000000003], [2.195801, 3.014295, 0.23440000000000003]], "48ac9e6d-38b4-43e1-92d6-c3f44ccab9b8": [[-1.2517, -0.00044619600000000005, -0.519995], [1.25087, 0.6410819999999999, 0.517097]], "39b300af-f15e-4dc8-84ed-e85d36e95a42": [[-1.56606, -2.52945e-17, -0.528596], [1.5657400000000001, 0.88654, 0.529435]], "11bbe762-9c62-4dd9-a859-d4058040c48f": [[-1.12947, 7.62939e-09, -0.40381999999999996], [1.12919, 0.7508549999999999, 0.40383899999999995]], "0fad54ca-027a-4604-b1da-2956ff696e6e": [[-0.496378, -1.51294e-05, -0.49601399999999995], [0.49599699999999997, 0.36828099999999997, 0.496012]], "410abca5-34c1-459d-81f3-4a36fe6d9d25": [[-0.214432, 0.0, -0.216892], [0.214432, 0.52, 0.216892]], "f19a4050-ae11-4f66-99ce-13a576ec63ee": [[-0.538725, -3.2947e-17, -0.5402600000000001], [0.538725, 0.401093, 0.5402600000000001]], "2f213b1d-c3d9-401b-9876-bc0146fe6be3": [[-0.5382009999999999, 5.98383e-08, -0.254863], [0.5380550000000001, 2.13231, 0.254864]], "2b6d628b-8615-405d-aa45-46124cae7213": [[-0.917889, -2.77086e-06, -1.11406], [0.9178919999999999, 0.9680840000000001, 1.11617]], "184696a8-e72a-47ad-832e-5a1876919445": [[-0.230443, 0.0, -0.230443], [0.230443, 0.561044, 0.230443]], "25d83f53-f68a-492f-8709-e846960e203e": [[-0.324106, 0.0, -0.406682], [0.324106, 0.942815, 0.406798]], "b1b4050f-6c93-46ee-b5a1-a5e6ce36aafe": [[-0.37547600000000003, -1.92002e-05, -0.42356499999999997], [0.374921, 0.790779, 0.42361400000000005]], "684a0dc3-a955-43c7-b40e-e215909fce11": [[-0.640501, 0.0, -0.462506], [0.6398199999999999, 0.39299300000000004, 0.463446]], "5be080b9-c58c-3162-a2b2-43bd1a9713ca": [[-0.30734100000000003, 4.4999999999999996e-05, -0.274364], [0.306796, 0.731294, 0.28284]], "c6cb7406-f11a-401c-9010-4ceb76dd889f": [[-0.528452, 0.0, -0.235657], [0.528452, 0.7217199999999999, 0.235657]], "261e1312-1981-4dda-87bc-458a8c68e007": [[-0.343005, 0.0, -0.465421], [0.343005, 0.8918550000000001, 0.465459]], "05171e1a-b921-4f6e-b277-13fb330495b9": [[-0.625, 0.0, -0.3], [0.625, 2.1024100000000003, 0.2998]], "02f2de57-d296-44f3-b2bf-dd56f7ebffb9": [[-1.11745, -1.59409e-09, -1.08826], [1.11745, 1.1261700000000001, 1.08937]], "7a4df5f7-1c73-46c3-ae6a-c0aade5d6767": [[-1.10279, -0.00118152, -1.25951], [1.10427, 1.3803299999999998, 1.26172]], "66f70fdd-1f33-40e7-97b0-34828475e585": [[-1.158907, 0.0, -0.449741], [1.158876, 0.838492, 0.449741]], "ac7d2819-cae6-4551-b03b-21e973a5e166": [[-0.25194, 0.0, -0.229444], [0.251938, 0.59, 0.22947700000000001]], "0700a450-c65f-4e4c-89b5-85bfb76cc8b8": [[-0.36583799999999994, -0.00012923900000000001, -0.36583799999999994], [0.36583799999999994, 0.5185390000000001, 0.36583799999999994]], "33036104-f846-4bd3-b52f-8374ec351aa6": [[-0.372204, -2.03818e-17, -0.372139], [0.372204, 0.804, 0.372139]], "73d6f8a3-87b9-47a7-a5e8-398e11baa379": [[-1.3256899999999998, -7.34707e-08, -0.428153], [1.3256999999999999, 0.863076, 0.427998]], "6f5d55b8-dd45-4a11-a9ce-9ab34de20a2a": [[-0.315539, 1.7e-05, -0.34285699999999997], [0.315432, 0.592605, 0.343046]], "addd5afb-8f7e-4675-a94b-3f35c4b4b6b1": [[-0.489805, -4.78816e-09, -0.423776], [0.49032699999999996, 0.771597, 0.422545]], "7c2437f8-bda9-3e14-b812-6532e5e60870": [[-0.270858, -0.00018700000000000002, -0.281059], [0.270858, 1.040299, 0.280696]], "4d113a95-9e56-470b-948d-dad192a1de6b": [[-1.1115000000000002, 1.14441e-08, -0.418151], [1.11155, 0.740415, 0.417526]], "973e5393-a935-443b-b7a2-10a29752ce24": [[-0.262175, 0.0, -0.262881], [0.262202, 0.979429, 0.262988]], "4de57605-7407-4045-a51a-31b55c0ee53f": [[-1.3459299999999998, 1.5237399999999999e-07, -0.296257], [1.3459299999999998, 4.50952, 0.296258]], "43e59ffa-27db-427d-b9ea-91273ff18fb3": [[-0.425413, 1e-05, -0.553453], [0.42635199999999995, 0.923516, 0.55333]], "084713b6-e700-403d-a2dd-8050c5df1416": [[-0.295956, -1.79993e-17, -0.295658], [0.295956, 0.639265, 0.295658]], "5f0619b5-e72b-4a99-a70c-ed05e93fbb27": [[-1.0150700000000001, -6.98697e-05, -1.18024], [1.0150700000000001, 1.16368, 1.18024]], "76588d6a-62de-3e6e-b6cc-3db856e42665": [[-63.644, -0.0506, -63.644], [63.644, 75.4374, 63.644]], "3f6c7e54-6cb6-4179-8a59-4a37dfb6fae8": [[-1.1039, 0.000199002, -0.956596], [1.10494, 1.40536, 0.957271]], "73bffbd5-74a1-3efd-87d4-a8f0c0b7ac1d": [[-0.388711, 0.0, -0.493975], [0.38870399999999994, 0.794041, 0.364151]], "2bb4868e-4580-4a9c-8c63-0566a448668f": [[-0.301, 1.52588e-08, -0.16900500000000002], [0.301, 1.7583000000000002, 0.16900500000000002]], "cc00a491-43e2-4dd7-82fe-d756184b3363": [[-0.23920100000000002, 0.0, -0.224731], [0.23900200000000002, 0.567079, 0.22457000000000002]], "56ace909-e472-4588-bb83-20fdfb3a1b94": [[-1.22024, -9.431159999999999e-05, -0.46042299999999997], [1.2187999999999999, 0.69741, 0.46042099999999997]], "e69e0894-4ef6-46d5-86a9-33c66fdb53b3": [[-0.144037, -0.000180463, -0.144281], [0.144037, 0.9924540000000001, 0.144281]], "eb0e6657-8c1c-406d-8fb2-625bf09cbb1c": [[-0.284874, -0.000298422, -0.284489], [0.284489, 0.24529499999999999, 0.28488]], "5b2b3f48-40ab-494d-b230-3d4c62a0a801": [[-0.45221200000000006, -0.000409958, -0.543025], [0.452575, 0.996733, 0.5425249999999999]], "6d2e5ee5-252b-4054-99ba-8ce18adc6ea1": [[-0.9849899999999999, -0.000147817, -0.43452399999999997], [0.984429, 0.896612, 0.43626600000000004]], "f7553373-a2d0-4d09-b431-85ad12e88eb8": [[-0.228918, -2.96122e-05, -0.22861499999999998], [0.22905799999999998, 0.220521, 0.228513]], "bf7c6d54-127c-426f-8e66-3ecc2325f7bb": [[-0.612174, -1.18374e-17, -0.216299], [0.612174, 1.59408, 0.216476]], "192ac441-48b7-4559-bc02-7c532171b531": [[-0.25184999999999996, -1.2075299999999999e-17, -0.20247099999999998], [0.25184999999999996, 0.510835, 0.20247099999999998]], "9fab9660-b270-48cd-92d3-609dde86b896": [[-0.488054, -1.07014e-18, -0.487842], [0.487682, 0.7731220000000001, 0.48768500000000004]], "b066e7e5-898f-4f61-997b-db8481f24202": [[-0.25845300000000004, 0.0, -0.268437], [0.25845300000000004, 0.600283, 0.268663]], "2a06c499-62e1-490b-b102-c887656ca28f": [[-0.46688, -0.0, -0.365443], [0.46688, 0.28819, 0.365216]], "aa1cdc3e-5dee-47df-8d14-1f76a4967cf9": [[-0.230643, 0.0, -0.267362], [0.23062100000000002, 0.873273, 0.267362]], "658695eb-7932-41c2-9e58-c635fa04686f": [[-0.681957, -0.000140644, -0.25132], [0.681957, 1.40744, 0.251123]], "a0af99d5-c936-4517-8b7a-d667d608f139": [[-0.345327, 0.0, -0.21733899999999998], [0.345327, 0.3884, 0.21733899999999998]], "6eae302f-f216-49df-a4ab-bda798700dd4": [[-0.579013, 0.0, -0.503874], [0.579013, 1.269612, 0.5038239999999999]], "0ae519fb-7a9e-4788-966f-e90e21d13cb4": [[-0.779495, -7.07214e-18, -0.180649], [0.779495, 0.719209, 0.180649]], "04deacdf-0326-4851-879d-bfedf1ad967b": [[-1.5272999999999999, -5.01829e-17, -0.9169769999999999], [1.52701, 0.912867, 0.916811]], "f6d66105-5fa3-4bf6-b634-6429476a5b29": [[-0.634967, -0.000680697, -0.246643], [0.634831, 1.75721, 0.246646]], "9b2c3161-c6d7-4090-bcbc-6389e6c44177": [[-0.261876, -4.37605e-05, -0.242001], [0.261875, 0.647714, 0.241971]], "62dbfe30-7b17-45d8-b761-e46951475dc5": [[-1.1580540000000001, 0.0, -1.0857999999999999], [1.157343, 1.46377, 1.085946]], "2c8c5b92-3421-4a9f-85e3-46683bef40cb": [[-1.27732, -1.82781e-08, -0.7305929999999999], [1.27417, 1.96397, 0.7305929999999999]], "2c554469-f5d2-4ae2-859d-48a6f172502e": [[-0.908102, -5.83125e-17, -1.0943399999999999], [0.908102, 1.11229, 1.0947799999999999]], "0c64b5e0-2f99-4c17-bd22-345131e20f72": [[-0.600858, 0.0, -0.28707499999999997], [0.600858, 0.7519790000000001, 0.28707499999999997]], "c5960c63-aaaf-4999-8520-6612317eae37": [[-0.59992, 0.0, -0.39986400000000005], [0.59992, 0.384065, 0.4]], "7f0cc151-111f-4428-800c-a2957579a653": [[-0.281512, 0.0, -0.308291], [0.281512, 0.978591, 0.308129]], "55477b40-0b9a-4c5d-beed-289460b666cc": [[-0.237242, -1.09635e-17, -0.20404599999999998], [0.236632, 1.65988, 0.203475]], "51cfe8d4-e373-473b-89c3-ca0adf3d828e": [[-0.607496, 0.0, -0.279356], [0.607496, 0.401152, 0.279356]], "a83cffb0-a1a7-4617-bb45-d9ef6d106525": [[-0.28491099999999997, -4.08105e-05, -0.263996], [0.285105, 0.200229, 0.264093]], "5d0f5f8f-333f-49fe-91f8-26748c1419a9": [[-0.942461, 0.0, -1.171178], [0.942461, 1.4019059999999999, 1.171178]], "22a28449-cef2-4929-a18c-15f8c82d678c": [[-1.07389, -0.00035409000000000005, -0.664854], [1.07375, 1.6255199999999999, 0.6669740000000001]], "1eeab3c8-8437-4218-aafe-44e7728d6f1b": [[-0.553122, -0.00016849800000000003, -0.356355], [0.553166, 1.5567099999999998, 0.356381]], "56e4474c-78e0-4692-97f0-957dfae95802": [[-1.249457, 0.0, -0.3], [1.249457, 2.4, 0.3]], "19dc59f4-4db3-4180-8085-a3bfaeb3926e": [[-0.344047, -1.2639100000000001e-17, -0.253392], [0.344047, 1.07, 0.253476]], "d87992df-e08c-436c-a206-f0d27a45f2cf": [[-0.800983, -0.002448, -0.9066970000000001], [0.799836, 0.7534489999999999, 0.907257]], "215b3ef5-83d0-4d82-9ed6-1f73a6d2f751": [[-0.232761, 0.0, -0.275541], [0.23287, 0.839563, 0.275541]], "c2fca76d-7e53-423f-a35c-98b4a4c32dfb": [[-0.998856, -0.00128349, -0.410819], [0.9985550000000001, 0.827738, 0.40914]], "0b6d6dfe-8e30-3259-87f3-bd2f2181f780": [[-0.7, 0.0, -0.700001], [0.7, 0.8753700000000001, 0.700001]], "e68047e8-6f14-4908-8c5d-46e6dc057a61": [[-0.27154, 0.0, -0.380321], [0.272208, 0.838323, 0.379634]], "9c3f697e-c3b1-4158-b9f5-9afe733c9eef": [[-0.790343, -3.8377799999999996e-17, -0.650025], [0.790343, 0.5589, 0.650025]], "13430054-6b72-4d11-98db-a45a5b42ce4b": [[-1.00424, -1.14237e-17, -0.201117], [1.00424, 0.9599, 0.201117]], "733a042a-fe2c-48bf-96e8-9b9b94e286b4": [[-0.28095, 7.62939e-09, -0.28095], [0.28095, 0.45291, 0.28095]], "d293a3c0-72e4-43b1-b188-cf905a23af1a": [[-0.800105, 0.0, -0.200136], [0.800105, 0.8500749999999999, 0.200136]], "a939be24-9c3d-44f9-b713-e74ddee892df": [[-0.6, -2.7469999999999997e-09, -0.260058], [0.6, 1.1891500000000002, 0.26003699999999996]], "adcaff86-4aa5-43e2-bc95-d7f822f68d01": [[-0.31235199999999996, 9e-06, -0.335728], [0.312353, 0.815859, 0.335728]], "003b19cc-fd43-4995-9e19-1ac41f84e83e": [[-1.12107, 4.57764e-08, -0.305595], [1.12107, 2.26035, 0.305596]], "1ab8d670-0712-4340-aa5c-b94448466ac0": [[-1.481396, 7.8e-05, -0.34928600000000004], [1.481389, 2.390779, 0.34928600000000004]], "adc1e8e7-fa7c-420e-afe3-49cae56f3d86": [[-0.232327, -2.43878e-05, -0.23319299999999998], [0.232053, 0.55059, 0.233166]], "88adb9c8-d16d-48cc-aa5a-aed9c40e48f6": [[-0.8912690000000001, 0.0, -0.403281], [0.891232, 0.78104, 0.40340600000000004]], "556a3cff-2f81-484f-80bf-bc9a661d7d8b": [[-0.687114, -1.39265e-17, -0.243183], [0.687114, 1.09469, 0.243219]], "c47f09f6-18d1-4ec5-ad33-571d70a32659": [[-0.909802, 6.38288e-05, -0.401939], [0.9097029999999999, 0.778025, 0.402789]], "e90f673f-2afd-40a7-b338-9f3f6c7c9e4b": [[-0.255176, 1.39818e-17, -0.283548], [0.25482, 0.751496, 0.283548]], "85520875-2e33-4385-b8ea-d4e8d27f1390": [[-0.237988, -6.78542e-05, -0.23810800000000001], [0.23823899999999998, 0.7504900000000001, 0.237851]], "c83943aa-fad3-4510-9b11-18d36a3b9153": [[-1.159548, 0.0, -0.427802], [1.15954, 0.90462, 0.427726]], "031e135c-7937-449d-bfba-fa29f991c535": [[-0.309588, 0.0, -0.270699], [0.309618, 0.40203099999999997, 0.270808]], "9799d72f-cc26-4259-a063-90122905c778": [[-0.32124400000000003, -6.19888e-09, -0.325002], [0.32067599999999996, 0.466854, 0.325467]], "bbbb9760-8ea5-4717-94a2-1ae3cb35e93c": [[-0.91, -2.4669199999999998e-17, -0.41], [0.91, 0.413924, 0.41]], "d3601408-ac22-4172-a551-8b003e579bee": [[-0.179603, -4.7609100000000005e-05, -0.205001], [0.17957499999999998, 0.44494900000000004, 0.205167]], "1a579f8e-112f-4db9-a2ee-0063d0e7076c": [[-0.336225, 0.0, -0.309884], [0.336225, 0.83831, 0.311693]], "7894eab2-aa6c-4880-9816-cca4bc091c91": [[-0.41888800000000004, -0.0, -0.398632], [0.418754, 0.939576, 0.39875700000000003]], "106b01bb-95ec-417f-bb82-e0225f518853": [[-0.94, -6.00656e-05, -1.04], [0.94, 1.15, 1.03999]], "7a8f0e9c-1c18-3cb8-a260-f748c793c2b1": [[-0.27040600000000004, -0.000684, -0.252807], [0.27040600000000004, 0.816396, 0.21965900000000002]], "3104c91a-9eed-4c61-a279-3c2b28ae2e77": [[-0.169512, 0.0, -0.169512], [0.169512, 1.259229, 0.169512]], "fec2a457-251b-40ad-94b8-ee4760e78153": [[-0.7, -1.59808e-17, -0.304755], [0.7, 1.86405, 0.304755]], "71bff38d-42e6-46f1-994f-6b6ed3c21fd6": [[-1.303528, 0.0, -0.49026600000000004], [1.303528, 0.9830110000000001, 0.48987200000000003]], "56f8a323-faf3-4928-b531-a0850ebe1365": [[-0.462675, -0.000386382, -0.32914299999999996], [0.463474, 0.6798839999999999, 0.328998]], "8dd38766-e021-4b24-afa9-e697b3063dcd": [[-0.261171, -3.78295e-05, -0.260835], [0.26123999999999997, 0.524763, 0.260871]], "f9685d74-8637-4d22-8ee1-fe144ec8aac4": [[-0.408138, -2.65343e-17, -0.350582], [0.408457, 0.769182, 0.350539]], "1555ff47-5b66-4808-af99-232f3dad61c7": [[-0.39750100000000005, 0.000298, -0.415289], [0.39772799999999997, 0.8513590000000001, 0.41523400000000005]], "8cb61cda-3cc3-43a3-a845-85ab017a97a5": [[-0.36052599999999996, 0.0, -0.427841], [0.359617, 1.056284, 0.427753]], "c0ea7602-0407-44c9-895c-1248b080fe5d": [[-0.781017, 0.0, -0.482897], [0.781118, 0.6518229999999999, 0.482897]], "4c4426eb-7afa-4cb3-a0b2-4dcb9cbca290": [[-1.03, 0.0, -0.3015], [1.03, 2.403, 0.3015]], "1d05782e-1eb9-4dcf-b711-bb0dad64e7ef": [[-0.265996, 0.0, -0.255923], [0.265996, 0.7790739999999999, 0.25599299999999997]], "6cce85c1-50b5-49fb-9b4b-c3a7aa3baa73": [[-0.287906, -1.00282e-17, -0.20531], [0.287906, 0.778456, 0.20531]], "29bf1199-060a-427f-9d85-d76ba4322c40": [[-1.08965, 5.97133e-17, -1.07519], [1.08978, 1.2, 1.07519]], "2f57db3c-f773-4ce8-b914-17a891294ae3": [[-0.6482410000000001, -1.04883e-17, -0.18503], [0.6482410000000001, 0.720641, 0.18503]], "08709486-5aed-4480-bc48-0e7f4273ba1f": [[-1.0142069999999999, 0.0, -0.39731900000000003], [1.014002, 0.756136, 0.398438]], "c8a4c36a-45ec-4ae0-adb4-a6bdc6b89533": [[-1.09488, 1.52588e-08, -0.417688], [1.09471, 0.691215, 0.41797199999999995]], "8144792f-4d0a-4f19-b724-a302a87bebb7": [[-0.618421, 0.0, -0.432342], [0.618421, 0.393592, 0.432342]], "6843ec0b-dec1-46c1-9d15-f84b308252f2": [[-0.650998, -0.0, -0.650998], [0.650998, 0.6400199999999999, 0.650998]], "5f016caa-556b-4cbe-9c17-67d9450f5e72": [[-1.01818, -0.00148704, -0.403777], [1.0175400000000001, 0.644418, 0.404112]], "022895dd-19c5-46ee-8de6-f2ba11b68c57": [[-0.395156, 6.19888e-09, -0.24508], [0.395168, 0.511564, 0.24503599999999998]], "cf3811e5-6b86-47ee-a495-451388f676fb": [[-0.26632100000000003, 6.2368e-08, -0.227627], [0.266505, 0.526832, 0.227627]], "56eaae01-bc14-4eb1-a1d9-75cc4bb7f0ed": [[-1.75203, 0.000201, -1.107575], [1.751334, 0.795532, 1.1088500000000001]], "24fb9cf8-7718-4725-9bdc-06671ba7b29f": [[-0.711041, 0.0, -0.551496], [0.7107810000000001, 0.36066200000000004, 0.55184]], "e7cbab4a-1acd-4bd9-a96f-06ff4ca3f756": [[-0.9047799999999999, 3.8923099999999997e-13, -0.39135800000000004], [0.9047799999999999, 1.04352, 0.39135800000000004]], "ac406073-7b17-4547-9faa-6af8f2068bad": [[-0.407426, 7.96604e-06, -0.478358], [0.40736199999999995, 0.7913890000000001, 0.47838299999999995]], "861cc8ab-d2fc-4315-9a4a-6aa05a22d5e4": [[0.6992870000000001, 0.0, -3.010415], [1.238178, 0.435988, -2.498611]], "c628c0ee-a5ae-4706-8802-90368fb49d3f": [[-0.484122, 3.03505e-18, -0.48479700000000003], [0.484122, 0.396098, 0.48479700000000003]], "79ede4cf-04c3-4010-8dcd-6aa4e9f5eea7": [[-0.260191, -2.3812400000000003e-05, -0.262726], [0.26008600000000004, 0.520691, 0.262869]], "5248bb82-aece-4429-9b83-3940578043e1": [[-0.996274, 0.0, -0.451853], [0.996274, 0.939662, 0.451853]], "5fc8fb35-60d0-4e73-a68e-be5181f22af7": [[-1.14941, -0.000129698, -0.499172], [1.1494199999999999, 0.708963, 0.499251]], "68146221-3b7b-43be-b493-a68822ee3ee9": [[-0.5458850000000001, 0.0, -0.545391], [0.5457139999999999, 0.981255, 0.546224]], "83fa7bd3-074c-4697-b5f7-155775e86f3f": [[-1.06013, -0.000279413, -1.12162], [1.05647, 0.8920239999999999, 1.12141]], "2912b191-5e67-4c56-8d98-190114819122": [[-0.318127, 0.0, -0.303091], [0.318127, 0.585116, 0.303091]], "050d7d23-7acf-439b-937e-0978eddd0ae7": [[-0.898146, -4.7433400000000006e-05, -0.490351], [0.897943, 0.829156, 0.48964399999999997]], "53cabf7c-7121-4c80-b33d-b7cfe9aac430": [[-0.35883699999999996, 0.0, -0.365361], [0.35883699999999996, 0.727103, 0.365361]], "1bc7ff20-2031-44e9-91a9-4dd7bcf1b679": [[-0.606031, -7.78266e-17, -0.156304], [0.606031, 0.648896, 0.156304]], "25c14c1e-4767-485d-a3e1-a5874efb7395": [[-0.329255, 2e-06, -0.371996], [0.32939399999999996, 0.851854, 0.37209899999999996]], "a95d4ab3-e33f-4d38-a923-ccbe26f17725": [[-0.172333, 0.0, -0.172044], [0.172333, 0.410961, 0.172044]], "5b664e99-8cf3-48b7-8ed5-e35d43c12218": [[-0.282831, -6.76918e-05, -0.301678], [0.28265799999999996, 0.8471080000000001, 0.301246]], "81e4fc44-062b-427f-affe-6339a7289307": [[-1.29519, -1.7354699999999999e-10, -0.646622], [1.29534, 0.720438, 0.646622]], "3de8e726-0fd4-4325-b092-aa3658cf8231": [[-1.06696, -1.83697e-17, -0.3], [1.06696, 2.42346, 0.3]], "5e93fd42-7c32-47eb-9071-e6e325c9303d": [[-1.2888399999999998, 0.0, -0.464638], [1.2888399999999998, 0.843867, 0.464516]], "d4ec48b6-6c6c-4925-a60f-c5c75dbad291": [[-1.3935499999999998, -2.0349199999999998e-05, -0.9067529999999999], [1.39342, 0.877429, 0.907458]], "19a6f63d-fd29-461a-ae9d-86d25e4750ef": [[-0.355022, 9.54358e-18, -0.23502199999999998], [0.355022, 0.691152, 0.23502199999999998]], "93156256-40fd-49c8-8da6-0cdf582377d8": [[-1.18211, -9.945009999999999e-18, -0.211672], [1.18211, 1.9676900000000002, 0.213496]], "3c1395dd-00a5-4953-979f-6ab2c0bc6fbe": [[-0.281767, 0.0014269999999999999, -0.281767], [0.281767, 1.788808, 0.281767]], "9a0fd492-82ac-4f53-b2ad-da3b3b56f5fc": [[-0.14871800000000002, -1.5629999999999998e-05, -0.148947], [0.148766, 1.04549, 0.148728]], "de585603-8b1f-485f-8c47-ade4bf7b57eb": [[-0.513327, -2.70242e-05, -0.503155], [0.513162, 0.666497, 0.502449]], "3c66f616-9f55-4651-8097-b9580d615d76": [[-0.424317, 1.23515e-07, -0.491182], [0.424317, 0.351507, 0.491182]], "55f7c741-d263-4049-bb8a-168d9eea1c77": [[-1.11406, 6.19439e-05, -0.49308], [1.1141800000000002, 0.886225, 0.494138]], "3853e55a-8057-4db9-a704-573e05710dc5": [[-1.102676, 0.0, -0.386735], [1.102676, 0.7090049999999999, 0.386735]], "c0f53bec-ee1d-46c0-8f37-811e95c1cf09": [[-0.274773, 3.77392e-05, -0.26191600000000004], [0.274911, 0.867019, 0.26200399999999996]], "b277ab71-687d-4dff-a97f-802fa248d056": [[-0.759755, 0.0, -0.44459000000000004], [0.759755, 0.8562690000000001, 0.44459000000000004]], "3e11a8f4-5d82-4bfe-9ded-9c89dedb1462": [[-0.983392, -1.0736200000000001e-06, -0.713034], [0.98331, 0.7188939999999999, 0.713034]], "72a8fbb3-35f9-42f6-b46a-41677383bd8e": [[-0.22819, -1.24583e-17, -0.231735], [0.22819099999999998, 1.2696399999999999, 0.231734]], "553eb677-6660-4280-b1a1-d233dc9e4bcd": [[-0.24134799999999998, -1.25989e-17, -0.208991], [0.24134799999999998, 0.6906140000000001, 0.20897400000000002]], "9e1467f6-149a-4ba7-9c00-f728aaf0a562": [[-1.09199, -3.21865e-09, -0.31683900000000004], [1.09199, 0.841245, 0.316838]], "77982295-79e6-4fe9-ae1d-7a38b54fbc81": [[-0.244056, 1.3088100000000001e-05, -0.252087], [0.243903, 0.994031, 0.25265699999999996]], "193b4097-7917-40a0-99d1-ff43c94d92c2": [[-0.263, 1.48182e-17, -0.258], [0.263, 0.499146, 0.258]], "4245a717-b7e9-4ba2-a46a-56eed1b2ba63": [[-0.328483, -4.73132e-09, -0.726345], [0.328483, 0.866175, 0.7269190000000001]], "3c3d634b-c406-4b1a-aec8-00112d424d50": [[-0.770018, -1.72175e-17, -0.305027], [0.770018, 2.0504599999999997, 0.305027]], "4f223b22-c4a0-4ae8-8c74-c2679ea4eb6a": [[-0.720751, -0.00124564, -0.313439], [0.720193, 0.49731000000000003, 0.311747]], "c6fc874d-c963-4eba-9956-956241dc5c32": [[-0.56, -0.00010526, -0.206499], [0.56, 1.38, 0.206501]], "1cb4be2e-745e-4a73-98f3-d6c1db63fcf1": [[-1.087016, 0.0, -1.220229], [1.0873300000000001, 0.779757, 1.220373]], "d06b8d93-5b1d-435e-ad69-887e83036c93": [[-0.629854, -0.000516333, -0.203107], [0.62963, 0.8467610000000001, 0.203584]], "c09d56c0-4bc9-492c-800b-3ce782ab8007": [[-0.603102, -1.3777200000000001e-17, -0.228213], [0.603105, 0.8833920000000001, 0.228168]], "b2e724c7-33bd-47aa-8113-af03aa790934": [[-1.0086199999999999, -0.0012564800000000001, -0.372624], [1.0080200000000001, 0.629871, 0.373363]], "99c67388-82ea-470f-824c-fc5035b66ae5": [[-1.12114, 2.12381e-05, -0.43325600000000003], [1.1211499999999999, 0.7582470000000001, 0.43366]], "5a03bb86-b4cf-470b-8cd7-d13c56bc4cd0": [[-0.885907, 7.406720000000001e-08, -0.205337], [0.885907, 0.9054470000000001, 0.205337]], "34c07366-eabe-485b-b51d-1a21970c778b": [[-0.344338, 0.0, -0.384507], [0.344338, 0.8472280000000001, 0.384507]], "74a0a8c3-02ae-40e9-93dc-9cef94a5d034": [[-1.06056, -2.3267000000000003e-05, -0.982701], [1.06013, 1.50167, 0.982612]], "4e3c5628-9222-44e8-bc56-6fd7d16abc77": [[-0.07172970000000001, -5.58794e-07, -0.0718182], [0.0718616, 0.580172, 0.0717856]], "7246fc9d-1c74-4f70-b4dd-feb12bd62c6c": [[-1.416107, 0.000995, -0.5178280000000001], [1.416233, 0.934775, 0.5206040000000001]], "1b0777ac-4d5e-4f61-b103-2ba2411549db": [[-1.00264, -1.69595e-07, -1.17676], [1.00264, 0.866538, 1.17676]], "a41e0581-73b0-4a28-9226-f0931fd74b4c": [[-0.24324400000000002, 0.0, -0.245195], [0.24324400000000002, 0.6964570000000001, 0.245195]], "23560881-3f9e-4c9d-9989-611f34036975": [[-1.23098, -2.72879e-05, -0.7925650000000001], [1.23157, 2.00328, 0.7893519999999999]], "42de7d8c-69e1-48b3-8fca-f9f3f1c40337": [[-0.754474, 1.90735e-09, -0.986465], [0.754474, 1.11388, 0.986563]], "235a9a69-8756-4391-9ccf-df601fe349f3": [[-0.968903, 0.0, -0.458024], [0.968903, 0.84787, 0.458024]], "05d446ef-69a8-4f85-a8fa-a43cf426c551": [[-0.892484, 0.0, -0.39917499999999995], [0.892484, 1.3350090000000001, 0.394026]], "50a738d9-8aa0-428a-86b3-315f385242ef": [[-0.232842, 0.0, -0.26091000000000003], [0.232849, 0.658635, 0.26091000000000003]], "7d8422a6-aa67-40d1-964e-24dd90d851ea": [[-1.18646, -0.0011650599999999999, -0.429679], [1.18995, 0.8462479999999999, 0.431995]], "045189ef-3be4-45eb-b7aa-faf30fd51caf": [[-1.375, -9.00116e-18, -0.15], [1.375, 2.65, 0.15]], "5642d2a4-1150-4cb6-8577-66d8d1a2a249": [[-0.839611, -1.70991e-17, -0.315874], [0.83961, 2.36675, 0.315874]], "879812cc-973d-4c7c-ad38-76262208230a": [[-0.3, -2.48794e-05, -0.225], [0.3, 0.55, 0.225]], "ff9e915c-cc7f-4857-8f85-502847be127c": [[-0.278886, -3.84224e-05, -0.24320799999999998], [0.278887, 0.8480589999999999, 0.243209]], "5bcc0a96-c054-47c6-880f-61a8a5392a06": [[-1.67138, 2.02883e-07, -0.789385], [1.67173, 0.7501829999999999, 0.787705]], "e4242664-6b97-41c3-8f67-cb5045d98d68": [[-1.10682, -0.00134547, -0.435034], [1.10256, 0.887671, 0.434744]], "896e0887-099c-443f-9c7f-bdebbc22788b": [[-0.276932, -5.87545e-06, -0.276932], [0.276932, 0.3895, 0.276932]], "ce3763a5-53d2-4e5f-a6a1-19a41f31b26e": [[-0.22339099999999998, -0.00026838299999999997, -0.272189], [0.223365, 0.752997, 0.272105]], "2cbfae19-2837-47b1-ac06-b3fc79e67bae": [[-0.435334, -3.51247e-07, -0.468222], [0.435334, 0.755934, 0.468222]], "d811913f-1255-4f61-8646-6cb1a6b64151": [[-0.348172, 3.55829e-06, -0.34175199999999994], [0.348163, 0.805137, 0.34215]], "4501dfa9-32b6-407f-bf2e-1c8c428068ea": [[-0.324692, 0.0, -0.230781], [0.324692, 0.52, 0.230781]], "a9f1edc1-db17-4a88-8cdd-e006d8cbc187": [[-0.19068100000000002, -2.3369399999999996e-18, -0.0572812], [0.19068100000000002, 0.9162649999999999, 0.0572812]], "62bf26e3-a476-4fb4-8119-8209d8c9c4e6": [[-0.192864, 0.0, -0.190011], [0.192864, 0.5264719999999999, 0.189981]], "c3fecd38-35ee-4f2e-b505-c3c72762cd60": [[-0.326788, -1.82584e-17, -0.317298], [0.325684, 0.7118410000000001, 0.317435]], "6bad9949-125c-42cf-9bb5-eeadca2343e9": [[-0.314795, -0.0, -0.362049], [0.31468, 0.980941, 0.36216099999999996]], "539cbbdd-4a2f-4405-a5f5-2011494583ac": [[-0.711124, -0.000795375, -0.244472], [0.7111109999999999, 0.510568, 0.24497]], "1fd17700-6286-312d-a9a8-14920554987d": [[-0.253896, 0.001387, -0.338707], [0.254209, 1.008242, 0.338707]], "07f7b6e7-999f-4bf3-8336-455febdcb23b": [[-0.37453800000000004, -6.64388e-06, -0.435989], [0.374169, 0.863506, 0.436183]], "994cc393-42b5-480e-8185-a054a10192af": [[-0.9, -2.28882e-08, -0.199569], [0.9, 1.10435, 0.19965699999999997]], "62ce5421-bc66-46ef-b797-a809ca70d250": [[-1.088308, 0.000248, -1.221485], [1.088539, 1.267461, 1.220315]], "1e226ede-517a-4bc2-806e-aa5b8a0bdb78": [[-1.16467, 9.143069999999999e-05, -0.46014499999999997], [1.16454, 0.881609, 0.46014499999999997]], "72f0d68b-a9c1-4b86-8851-e837ecc35903": [[-1.6459700000000002, -1.14441e-08, -0.7903749999999999], [1.64493, 0.6944750000000001, 0.7892199999999999]], "b4f6e770-6862-4e40-895b-5db208765c80": [[-1.26, -9.76114e-18, -0.202501], [1.26, 2.5, 0.202501]], "64cb25bf-ce2e-480e-a538-42c78f084ff0": [[-0.88664, -1.8955200000000002e-17, -0.309563], [0.88664, 2.50005, 0.309563]], "8747917e-ce72-4735-a25d-ee450f236b50": [[-0.293358, 0.0, -0.413139], [0.293352, 0.871601, 0.41314]], "97292c06-c1c5-4863-8429-84c83e2246b3": [[-1.3, 0.0, -0.205001], [1.3, 2.5, 0.205001]], "67690c71-9680-4ef5-9a48-79296a4dfbde": [[-1.13479, 0.0013146499999999999, -0.47152299999999997], [1.13472, 0.7943720000000001, 0.471693]], "5241f446-d3b2-43c3-91d3-9ad5a433ddcb": [[-0.773219, -5.125130000000001e-06, -1.23596], [0.773273, 1.04954, 1.23596]], "428825d5-0253-4c71-9fe7-5ff834c8264d": [[-0.29120799999999997, 0.0, -0.282982], [0.29120799999999997, 0.811236, 0.28298100000000004]], "63a62192-fc4b-42dd-a829-5bf3dd00ec2d": [[-1.071458, 0.0, -0.45927799999999996], [1.071493, 0.723832, 0.459395]], "56fc3480-9263-4260-9a29-72df39932e26": [[-0.609037, -3.84006e-05, -0.358653], [0.609037, 2.17989, 0.358652]], "08c6a3a9-e786-4991-9b07-da8689405c80": [[-0.310152, -0.000196798, -0.294695], [0.310349, 0.7561599999999999, 0.294961]], "65ecdbb8-77d1-46d8-9cf4-0bf305496615": [[-0.5346110000000001, 1.42995e-17, -0.271335], [0.5343610000000001, 1.2513800000000002, 0.271085]], "11c67a28-db9d-31f8-9876-a55e3df0efd4": [[-0.256775, 0.0, -0.271664], [0.25677, 0.848086, 0.271664]], "3e9db45d-9666-4e32-9690-66dfb84ebca2": [[-0.23005299999999998, -8.39581e-08, -0.23004999999999998], [0.230001, 0.554999, 0.23007999999999998]], "66abd0f6-acc6-4f2b-80f5-867210ccb2ee": [[-0.156977, -3.83068e-18, -0.08644], [0.156686, 0.66116, 0.08511969999999999]], "5f5d42ab-16f1-4d1c-a10e-89723ff9c05d": [[-0.7319450000000001, -9.6883e-05, -0.40902299999999997], [0.730758, 0.7324309999999999, 0.408876]], "98e118f7-edd2-47ec-9912-3a2954477cdb": [[-0.294069, 0.0, -0.25027699999999997], [0.294328, 0.521806, 0.25027699999999997]], "1896401a-7220-4d1f-8b87-74149564783a": [[-1.000843, 0.0, -0.452263], [1.000843, 0.7497450000000001, 0.452263]], "280b1e36-a9dc-4162-8c06-b7afdc20f9d4": [[-0.260382, 2.9999999999999997e-06, -0.28252099999999997], [0.260382, 0.8849049999999999, 0.28252099999999997]], "03f1de79-858a-4a41-82b3-626fba494705": [[-1.23994, -2.45063e-17, -0.442643], [1.23939, 0.6982200000000001, 0.44216700000000003]], "59c49e33-ce76-45fa-a310-2ad3e97a73a1": [[-0.9558, -3.20982e-09, -0.355535], [0.955802, 2.39833, 0.35554]], "47ffbe6b-d081-4f8d-801e-ba0fb6153a01": [[-0.49046100000000004, 0.0, -0.490501], [0.49040300000000003, 0.641785, 0.490402]], "da47801b-a9c7-4370-92b5-2c13bdfd6c42": [[-0.418525, 0.000256, -0.3921], [0.418525, 1.021277, 0.3921]], "120d5511-675e-46a5-b886-1a31d1a06ffd": [[-1.260397, 0.000256, -1.131555], [1.260397, 1.566071, 1.130879]], "bf46a151-d264-40bf-9f84-b6f71242e068": [[-0.196788, 0.0, -0.196788], [0.196788, 0.44654200000000005, 0.196788]], "e49f98f1-cf5d-4214-9fb7-83f7c4620d31": [[-0.47707299999999997, -5.52876e-06, -0.39541899999999996], [0.476148, 0.846429, 0.39508699999999997]], "ad7a4df3-d162-4fc7-924d-b76f2014d184": [[-0.900647, 0.0, -0.200137], [0.900647, 0.5008279999999999, 0.200137]], "80fc4ef8-b495-4d4b-b899-6884518bace2": [[-0.7229770000000001, 0.0, -0.937158], [0.724507, 1.046807, 0.937658]], "06bbaf72-56e7-4f9e-8be4-cb028c7b73de": [[-1.23785, -0.00106173, -0.497907], [1.23784, 0.7448130000000001, 0.497916]], "4e7ac52e-76a2-4b86-a114-10fdd2391a20": [[-0.341395, 0.002188, -0.186204], [0.34090400000000004, 2.065145, 0.186204]], "74fda869-f1a6-4708-babf-15c1358cd10a": [[-0.93053, -5.9866599999999995e-06, -1.00828], [0.930261, 1.5349100000000002, 1.00784]], "77d741a1-4a55-477b-a645-481bed08fd0f": [[-0.45, 0.0, -0.300074], [0.45, 0.1, 0.300074]], "803decd9-ac96-422f-9919-9bf3b806a462": [[-1.15191, -1.8231e-17, -0.318461], [1.15191, 2.28485, 0.31845300000000004]], "1e70c6ff-a1c1-4993-b942-cb899e1895e0": [[-0.897356, 0.0, -0.479246], [0.8971169999999999, 0.89899, 0.47923299999999996]], "80bad779-5430-494a-8f69-b5b74eec3c19": [[-0.302424, 0.0, -0.10514099999999998], [0.302424, 0.611903, 0.10514099999999998]], "27284726-6e38-4cb9-95fa-bc33a46c6cd8": [[-0.35221800000000003, 7e-06, -0.269129], [0.35221800000000003, 0.864336, 0.269148]], "4e0aa203-cbb2-487e-a302-999e835740fc": [[-0.9111499999999999, -0.000470797, -0.964224], [0.911315, 1.4836099999999999, 0.964224]], "66f31cc3-4f55-4a48-b149-248ca8154fa5": [[-0.09789999999999999, -8.593049999999999e-05, -0.0848333], [0.09784979999999999, 0.272007, 0.084827]], "e70ac069-5476-45dc-b5bd-53e7d6338564": [[-0.753737, -2.62553e-17, -0.453258], [0.753737, 1.80823, 0.453258]], "81db355f-ae17-4912-8e97-fe718649dd01": [[-1.34476, -9.226819999999999e-08, -0.673649], [1.34294, 0.857162, 0.674457]], "0bb543c5-8b17-3fd2-a1e7-76b65a2ae317": [[-45.675, 0.0, -45.675], [45.675, 81.9237, 45.675]], "5a384fd8-747b-4eab-84a7-3f4bf1f9180b": [[-2.272, -6.73853e-17, -1.24858], [0.441762, 1.1345699999999999, 1.33982]], "9670b9b7-8743-421e-9a11-7360bbd595c9": [[-1.10152, -0.00109975, -1.18716], [1.10186, 0.840063, 1.1857]], "62f5098f-7bf1-4b95-bde0-8e7c06ba3367": [[-1.490818, 0.00010899999999999999, -0.855202], [1.4907329999999999, 0.947676, 0.854622]], "101563cd-8b31-4ae9-a715-d13f8f1938a0": [[-0.7199909999999999, 6.444860000000001e-07, -0.258024], [0.7199899999999999, 0.778462, 0.258321]], "cc361b2e-4f09-4e11-add8-ec7ada908060": [[-0.441327, 0.0, -0.44394300000000003], [0.441138, 0.983715, 0.443937]], "879a0e5f-27e0-46e3-bb43-95390ae7bfbc": [[-0.23822700000000002, -6.35904e-05, -0.268001], [0.238037, 0.557743, 0.268048]], "61de8e4b-63c7-4854-805c-c8c652b248ca": [[-1.08806, -0.000492077, -1.10797], [1.08912, 0.935413, 1.10854]], "c1a085ef-ff8f-45c2-b19e-1b472056a59c": [[-0.73631, -2.1916e-17, -0.257151], [0.73631, 1.5551599999999999, 0.25748899999999997]], "2c482955-6a67-39f8-bd39-dd129f9869a9": [[-41.9109, -0.086, -47.5048], [41.9109, 105.2689, 47.5048]], "5f25bc9d-3a6e-45e7-8c8c-e40b1d39e2a8": [[-0.194299, -3.35639e-05, -0.18694500000000003], [0.194122, 0.7038989999999999, 0.186894]], "4a584aa5-909b-4193-b1ea-3a63f6eb4faf": [[-0.425001, 0.0, -0.125003], [0.425001, 2.2098, 0.125003]], "e7d832ce-83d1-4211-af05-15647bcc59fe": [[-0.416643, 2.2000000000000003e-05, -0.44420699999999996], [0.41651000000000005, 0.878391, 0.444284]], "bdb14156-5e8c-4f35-a064-be724505d5aa": [[-0.7789579999999999, -1.95994e-17, -0.320083], [0.7789579999999999, 2.5399700000000003, 0.320083]], "e218759c-6456-4a3e-97bd-267f86050bce": [[-0.344751, 0.00021899999999999998, -0.33940600000000004], [0.34509, 0.875141, 0.339268]], "b36a24ee-3423-4f8b-95a0-f0bc8f4e7523": [[-0.141735, 0.0, -0.141735], [0.141735, 0.271515, 0.141735]], "9c587f60-5d5c-4e8b-893a-232728564717": [[-0.317071, 0.00015, -0.32953699999999997], [0.317103, 0.841045, 0.32954300000000003]], "298a4896-2ece-4560-bd9a-21bbb85f677d": [[-1.5923310000000002, 0.0, -0.145944], [1.5923310000000002, 1.252584, 0.145945]], "447b8dce-9b43-4971-b864-8adc25ec8d17": [[-0.265212, -2.4869e-17, -0.252212], [0.265322, 0.153522, 0.252272]], "70b30bb6-d938-4874-9aff-a7298c604d21": [[-0.140168, 0.0, -0.14017], [0.140168, 0.881178, 0.14017]], "4deb8513-ee9c-4bf3-a20c-c32d21cd2ea1": [[-0.710659, 0.0, -0.213929], [0.709318, 0.599485, 0.212588]], "13490e21-9626-4f68-8783-39ade4e0b732": [[-0.223949, 0.0, -0.243354], [0.223948, 0.793565, 0.243354]], "f395c1e3-b015-43a4-9ba8-efad92bcb4e0": [[-0.24153, 0.0, -0.209754], [0.24153, 0.43717399999999995, 0.209754]], "08d25863-73fc-40aa-9a69-7273727e2c2f": [[-1.0481740000000002, 0.0, -0.521384], [1.0463, 0.926454, 0.521384]], "bbf92d04-dfc7-4e19-8fe1-b86312790dbe": [[-0.24856899999999998, 0.0, -0.232236], [0.24856899999999998, 0.516674, 0.232236]], "08b2a48d-b4b5-4f64-9f84-fc77ae7135f8": [[-1.2512699999999999, -1.00724e-17, -0.222491], [1.2512699999999999, 0.439369, 0.222491]], "65cb55e0-bd19-4554-83af-93ef592cc292": [[-1.4809200000000002, -3.38042e-05, -0.9546469999999999], [1.48202, 0.860708, 0.955608]], "31792647-7bbc-4e20-b4a2-3ed97a4c87d1": [[-0.967758, 0.0, -0.308442], [0.967225, 0.7182540000000001, 0.308442]], "8b847a09-1736-476f-8aba-ba6da836c998": [[-0.195097, 0.0, -0.196099], [0.195097, 0.226759, 0.196099]], "0528d1f6-99a7-4539-92d3-5648a302f3d7": [[-0.39531700000000003, 8e-06, -0.380587], [0.39502299999999996, 0.9697450000000001, 0.380587]], "466fd05c-415d-4ff8-8539-9062d0b88ae9": [[-0.800677, -0.0, -1.052916], [0.800677, 1.158698, 1.052916]], "66ccbe15-ce7c-4f9c-b640-d557289ae5a1": [[-0.253411, 6.9963e-09, -0.257554], [0.253388, 0.6593009999999999, 0.257286]], "841a57e7-68a6-42bb-b414-77c32424874f": [[-0.235, 0.0, -0.17550000000000002], [0.235, 0.564755, 0.17550000000000002]], "79b3f406-e0cd-4dac-9aec-cc8a836453aa": [[-0.8892310000000001, 0.0, -0.436975], [0.8891490000000001, 0.6699620000000001, 0.436975]], "db99f23f-7674-45e9-b7c0-d301ac48c580": [[-0.5637599999999999, 0.0, -0.42097900000000005], [0.5637599999999999, 0.879846, 0.420971]], "26df6ae6-1e44-46f9-9210-cae7ee877639": [[-0.34769599999999995, 0.00017500000000000003, -0.13872199999999998], [0.34769599999999995, 0.26090800000000003, 0.13872199999999998]], "7d0493ec-7c6c-4d2d-a45b-b20a6f520ad8": [[-0.46855800000000003, -2.74581e-17, -0.44904200000000005], [0.46855800000000003, 0.10800000000000001, 0.44904200000000005]], "601ba512-15fa-4e0e-9230-c4b99f0610a1": [[-0.430351, 8.800000000000001e-05, -0.390828], [0.430633, 0.87524, 0.390828]], "4d9f88b8-4fc4-43fe-b6c4-978311646225": [[-0.129579, 0.0, -0.100519], [0.129579, 1.26083, 0.100519]], "5842c4d2-f2da-473e-91dc-48395b63f382": [[-0.155268, -8.43785e-18, -0.15619], [0.155268, 0.442225, 0.156322]], "e71bddb5-4bf7-40e8-83fe-e69bf4d69ac7": [[-1.00284, -3.16919e-17, -0.7135469999999999], [1.00286, 1.8200299999999998, 0.7135469999999999]], "2f595420-934c-426b-8397-b25b10d3b1af": [[-0.406145, 0.00025, -0.363125], [0.406145, 0.818511, 0.36301900000000004]], "bc6f3ed7-808f-4d18-b001-fe0642df679a": [[-0.395877, 0.0, -0.253843], [0.395877, 0.7333660000000001, 0.253564]], "edd946e2-e35d-441f-a7b7-90b5476c61c1": [[-0.253583, 2e-06, -0.214919], [0.25464400000000004, 0.918437, 0.214651]], "ac5ee7f1-8089-4f63-b863-e9f13f1892f2": [[-0.338577, -1.26504e-17, -0.21319], [0.338577, 0.560094, 0.21319]], "13e76b19-025c-4909-a65a-1055e2f62471": [[-1.197868, 0.0, -1.3102600000000002], [1.197868, 1.59336, 1.3100120000000002]], "4675212d-0ed2-480f-80e6-2b6007747c4a": [[-0.22500299999999998, -1.08147e-17, -0.22500900000000001], [0.22500299999999998, 0.6529940000000001, 0.22500900000000001]], "1f70be15-f3a2-4baf-bd21-ec50974f6530": [[-0.42442399999999997, 2.9642e-06, -0.197407], [0.42442399999999997, 0.827993, 0.197407]], "77f25ff8-e3d1-3557-b056-24c2a7c5d17f": [[-0.36194400000000004, 0.007639, -0.40065100000000003], [0.465148, 1.046995, 0.40712000000000004]], "b55392b6-47b3-4166-a4f7-500b7bb16120": [[-0.276733, -2.28224e-05, -0.215994], [0.276601, 0.6643340000000001, 0.216026]], "eb2dc8a6-44b0-48c8-a862-773d2e13b2ae": [[-0.225047, 1.42263e-17, -0.2325], [0.225047, 0.520667, 0.2325]], "59a0de9d-7bd0-4886-8e6e-26eb7af6134c": [[-0.35558300000000004, -0.000379083, -0.35665199999999997], [0.35648, 1.09753, 0.35663200000000006]], "20e62a42-7efa-48cc-8afc-daa96a1b80f4": [[-1.16741, -1.66582e-17, -0.298925], [1.16741, 0.8280670000000001, 0.298925]], "b9ab752f-8cae-4a6b-80fa-2a5a9e8d6435": [[-0.325039, -8.343329999999999e-05, -0.32144599999999995], [0.324168, 0.37433900000000003, 0.3209]], "ee8f6086-64d6-4da4-bcd5-945490ec8b57": [[-0.992653, 0.0, -0.401767], [0.992653, 0.747003, 0.401767]], "5f226a49-495d-41f3-93ee-98cf9b1d4cc8": [[-0.920688, -0.000821658, -0.372273], [0.920257, 0.777654, 0.37370600000000004]], "fc92a67b-2e33-4a34-b4f3-b8b4c7e9ac9d": [[-0.6388929999999999, -1.34757e-07, -0.39710900000000005], [0.638738, 0.76, 0.396864]], "46b8d0ec-0fb8-419c-9cfb-5be804d483be": [[-0.25140799999999996, -3.55943e-06, -0.23999800000000002], [0.25140799999999996, 0.550081, 0.240001]], "aa887227-4365-4950-a559-8042a9d379da": [[-1.16993, -0.000309577, -0.39565199999999995], [1.17049, 0.7162000000000001, 0.395334]], "da63b5a1-d4b5-469d-b25d-db5a22c800eb": [[-0.67164, -1.14046e-17, -0.21439599999999998], [0.67164, 0.82499, 0.21439599999999998]], "52215c3e-e2d2-4c7c-955a-b0c765bcfda5": [[-0.24920799999999999, 0.0, -0.24917999999999998], [0.249192, 0.517277, 0.249192]], "44aba579-04a7-4f54-832a-108775a28ff4": [[-0.29993400000000003, 6.7e-05, -0.317506], [0.299985, 0.781065, 0.317492]], "7badddc0-8005-3fda-99f3-1d36316c9df8": [[-0.240239, 0.0, -0.280904], [0.240239, 0.8308249999999999, 0.280904]], "0672476a-38c2-4f15-a2d4-ff0a06caf9a6": [[-0.30572900000000003, 0.0, -0.30572900000000003], [0.30572900000000003, 0.633387, 0.30572900000000003]], "1124049b-5c22-493e-b0ff-35e3229cb754": [[-0.432542, -0.000511751, -0.41541200000000006], [0.43296300000000004, 0.464918, 0.415821]], "1eb72d99-ee51-4583-8eec-0fad9c9b4bd8": [[-0.595024, 0.0, -0.292048], [0.595024, 0.471561, 0.292204]], "40e06c21-1f26-343c-b419-ec677f6c4d8c": [[-59.4835, 0.0, -58.342], [58.6416, 72.1693, 58.4571]], "1fac9d1b-274b-4e9b-9cd4-8845c4356f75": [[-1.08657, -0.00360493, -0.447201], [1.08679, 0.846504, 0.445929]], "87bf20d6-68b8-46c7-84ea-884880c10d8d": [[-0.2766, 0.0, -0.233341], [0.2766, 0.543106, 0.233341]], "631712e5-48b5-4f69-88bf-5016ef205328": [[-1.18548, -4.79842e-17, -0.922068], [1.18547, 0.880588, 0.921948]], "eb276b8f-03df-404e-8c7f-8624600f26d7": [[-0.454363, 0.00010999999999999999, -0.45525799999999994], [0.454363, 0.529728, 0.45433599999999996]], "d8e7d1dc-5e27-41fe-bb6f-c19319ba1745": [[-0.289666, 1.52588e-08, -0.298403], [0.28964300000000004, 0.468874, 0.298122]], "7531c5eb-894f-4baf-b745-29e49b5239fa": [[-0.56462, -6.37645e-05, -0.0566566], [0.564666, 0.615191, 0.0566566]], "12cdb4e6-4b67-4d54-aac9-a2813fcf0155": [[-0.9069379999999999, -1.69827e-06, -0.941046], [0.906682, 1.07761, 0.941094]], "929f3ed6-f255-470b-a5cc-bb73dc0489af": [[-0.320938, 1.52588e-08, -0.34292700000000004], [0.320942, 0.6813030000000001, 0.342661]], "29f53b62-90e7-43d8-a3d0-ee04fe692f4a": [[-1.1608100000000001, -2.50372e-17, -0.412627], [1.1607399999999999, 0.729149, 0.412935]], "5e52a3db-d8d5-41a2-b4af-bfe85d8b6707": [[-0.344338, 0.0, -0.384507], [0.344338, 0.299501, 0.384507]], "b11cd798-ce24-4442-8778-cc1df18886ba": [[-0.633097, 0.0, -0.408511], [0.633097, 0.462613, 0.408511]], "02257385-803f-4d93-b4f6-156ae1c5b8fa": [[-0.312398, -0.000217607, -0.311726], [0.31363199999999997, 0.889204, 0.311313]], "774c1af4-6e8e-4219-8cfa-baca715221f4": [[-1.0996, 2.72105e-17, -0.48031399999999996], [1.0979999999999999, 0.780194, 0.480952]], "0ddb98a2-234a-340a-b63c-530dd3dc0ac3": [[-0.38305900000000004, 5e-06, -0.354112], [0.40937199999999996, 0.686719, 0.35643099999999994]], "61646b5b-0e39-42b2-afb5-bd0448b7c49a": [[-0.9667180000000001, -1.47196e-17, -0.264401], [0.9667180000000001, 0.538519, 0.264193]], "bc3c8ea8-88b7-46b3-aec7-294d14455368": [[-0.61938, -3.6826999999999997e-17, -0.61938], [0.61938, 0.33026000000000005, 0.61938]], "f5383416-0d83-45bb-b4ae-35787cdc2ca8": [[-1.0, -2.29621e-17, -0.45], [1.0, 0.75, 0.45]], "394935bd-b98a-40a7-b835-c44a42ffc7ae": [[-0.80001, -1.75434e-06, -0.422194], [0.8, 0.7, 0.422195]], "1a7259e3-969e-4eda-b2ea-1312c55965f4": [[-0.206934, -9.21886e-18, -0.206934], [0.206934, 0.5043489999999999, 0.206934]], "972f278d-f277-4b92-a6ec-6fc99ed7e92e": [[-0.900142, 0.0, -0.2029], [0.900142, 0.8106260000000001, 0.2029]], "d398b084-03cb-4457-bb44-da73540ee796": [[-0.406826, -3.04052e-05, -0.373262], [0.40681199999999995, 0.9134, 0.37364600000000003]], "80796c5f-3450-4838-bee3-a7084eb678cc": [[-1.623023, 0.00063, -0.5209320000000001], [1.623043, 0.934074, 0.5211979999999999]], "3143c794-758c-4be8-9bb3-b4ddfdcb5935": [[-0.41025799999999996, 0.0, -0.412701], [0.410204, 0.951959, 0.41308100000000003]], "9ce423a4-5f13-46ac-bc6c-a69247a6518d": [[-0.254552, 0.0, -0.175], [0.254552, 0.46683300000000005, 0.175]], "338a2d65-a33e-44df-9638-a6ecd7a62d77": [[-0.334937, 0.0, -0.35966000000000004], [0.334957, 0.736623, 0.35953]], "b56bbafb-152b-4e25-baa6-d2a5f443b529": [[-1.47971, -0.00036126699999999997, -0.47566899999999995], [1.47971, 0.984902, 0.47571800000000003]], "486f51ce-1401-3d47-8cc4-27160b1194b1": [[-0.6096, 0.0, -0.2159], [0.6096, 1.0922, 0.23897]], "4fd9300c-e1de-495a-9bf3-0b736abd8499": [[-0.397546, 3.69166e-08, -0.43716299999999997], [0.39797, 1.10385, 0.437593]], "0f985b42-bedd-4a93-8105-75fc9f390f52": [[-0.36, -1.20868e-17, -0.217608], [0.36, 1.14, 0.217699]], "1e5d424c-4fc7-40b9-be85-34053fb75a64": [[-0.303967, -7.62939e-09, -0.231037], [0.303967, 0.76, 0.231037]], "b7bfbd36-f4ff-4850-8a5f-b6b876d99b59": [[-0.229804, 0.0, -0.229804], [0.229804, 0.43179900000000004, 0.229804]], "34c75d65-9192-4a9d-933f-37d8069fba11": [[-0.60002, 8.72562e-08, -0.14996700000000002], [0.60002, 0.32, 0.14996700000000002]], "0a05ba24-fdc6-4c42-a8b3-6e26422c9f67": [[-0.8573869999999999, 0.0, -0.404875], [0.8576090000000001, 0.6993300000000001, 0.404875]], "523ab5cf-85dc-4964-b60f-e9b0daad290b": [[-0.855807, 7e-06, -0.366857], [0.8557089999999999, 0.8153969999999999, 0.366658]], "deed08ce-fe58-43d5-9cc6-a03a0c999481": [[-1.76, -6.13462e-08, -0.263001], [1.76, 2.5004, 0.263002]], "3738505e-b1f9-4004-8f9c-97b4671a5109": [[-1.102676, 0.0, -0.447817], [1.102676, 0.69818, 0.447817]], "a4f6e4ad-5bee-4817-babd-c3a1418478f4": [[-0.4, -0.00232118, -0.4], [0.4, 0.99253, 0.4]], "29c2293b-d96c-43e9-92b6-149ed65b63c6": [[-0.500625, -1.45418e-17, -0.26251599999999997], [0.500614, 2.09999, 0.26251599999999997]], "28b7ed8a-0382-4fe5-82fe-8fbfd34a9c08": [[-0.498052, 3.4e-05, -0.09587300000000001], [0.497956, 0.574768, 0.095837]], "5e46dbf0-1acc-397f-8c8c-8eea8d2ba581": [[-0.235139, 0.0, -0.248975], [0.235139, 0.7444289999999999, 0.248975]], "1064988b-1363-45f6-96c9-f429e47e510a": [[-1.08254, -1.3752200000000001e-17, -0.231432], [1.08254, 0.7254259999999999, 0.231432]], "e61e2d5b-6a91-4f4c-9477-4e55bfacf244": [[-0.515, 2.2873e-09, -0.34500100000000006], [0.515, 0.16, 0.34500100000000006]], "d8be3f19-74ff-4495-82e7-a69a7f679678": [[-0.387012, -0.00181795, -0.38693], [0.38683, 0.31088899999999997, 0.387012]], "88d60dce-8045-424e-9e6b-54eb79c22a4e": [[-0.267532, 3.05176e-08, -0.267532], [0.267532, 0.611893, 0.267532]], "6f1a3a0a-314c-4c39-b990-dd74d97cb335": [[-0.229666, -6.10352e-08, -0.22953199999999999], [0.229666, 0.574874, 0.22953199999999999]], "d8f9ea65-c1e6-4d3b-b31e-72f866e5c629": [[-0.26672, 0.0, -0.23444900000000002], [0.266744, 0.556472, 0.234451]], "857a9c57-c9bb-4bbf-9480-d762aabdea51": [[-0.397339, 1.52588e-08, -0.399264], [0.397339, 1.05017, 0.399264]], "0e15f37a-98c1-4d3a-8822-6a554c08a838": [[-0.889178, 0.000246, -0.439977], [0.889178, 0.804239, 0.440098]], "714aedb4-4ed8-4ee1-a8be-cffd3dfdb290": [[-0.618316, -5.50148e-08, -0.31564800000000004], [0.618316, 2.0, 0.31564800000000004]], "e6a14574-cfda-44da-a6ff-da5196aaba4b": [[-0.599942, 0.0, -0.366156], [0.599942, 0.300076, 0.366156]], "2d7292d5-62ff-45cb-a2c8-c7dfef438da9": [[-1.65413, -1.78052e-07, -1.05727], [1.65369, 0.835929, 1.05612]], "1dbc0ba3-7444-4b86-be7b-e4b834feafb4": [[-1.513068, 0.0, -0.6417860000000001], [1.5144220000000002, 1.04169, 0.6417860000000001]], "288037cc-9f46-4189-89ff-bc41a203d1dc": [[-1.07005, 0.0, -1.14964], [1.0693899999999998, 1.04798, 1.15002]], "e0414d6c-1472-442f-b417-ebca71c83918": [[-0.404664, -2.8216899999999996e-10, -0.21948499999999999], [0.40470399999999995, 1.0108199999999998, 0.21944299999999997]], "d88dba35-3d34-4a66-be61-805278b0d7b4": [[-1.05336, -3.1634e-17, -0.641148], [1.05336, 1.6186500000000001, 0.639482]], "19001862-72fc-414b-82e2-f2eafc343a09": [[-1.4294900000000001, 1.14441e-08, -0.565598], [1.42909, 0.930467, 0.566346]], "f76c65cb-2e93-4e45-b582-943ab828748f": [[-0.388106, -8.84746e-06, -0.124972], [0.388007, 1.0476699999999999, 0.12497299999999999]], "1fdc7c64-be84-4a2f-aee8-80c315e902fc": [[-0.8007460000000001, 0.0, -0.537877], [0.8007460000000001, 0.392226, 0.537877]], "1b0a455f-be44-4cee-ad58-00819f8ed76b": [[-0.60153, -2.24728e-06, -0.5424289999999999], [0.60153, 0.35842799999999997, 0.5424289999999999]], "eea883d3-9d0a-48d3-beb9-1732cd3ebf4f": [[-0.319266, 0.0, -0.233776], [0.319266, 0.572442, 0.233776]], "2415cd43-06ae-48c2-968c-f045a17dd524": [[-0.306752, 0.0, -0.272171], [0.306752, 0.950332, 0.272171]], "c77abd27-6278-4472-b4ab-1464c7644307": [[-0.220918, 2.37209e-07, -0.24235199999999998], [0.22096900000000003, 0.9774590000000001, 0.24259]], "e186be0c-8ba3-4b13-b324-78c6a0e3eca1": [[-0.60968, 0.0, -0.609662], [0.609611, 0.7401399999999999, 0.6095929999999999]], "634e0dff-c871-4ca8-9023-079fa733c82c": [[-1.2506300000000001, 0.00036120600000000004, -1.1040999999999999], [1.25048, 1.51078, 1.10401]], "99a1b7c8-b3fe-47f4-851f-0bab93344121": [[-0.309508, -0.000546967, -0.308238], [0.30875, 0.70443, 0.308301]], "039a62e2-6a6c-498a-8ee4-0bb99ea5cdec": [[-0.19164, 0.0, -0.19163699999999997], [0.19164, 0.555955, 0.19164]], "c45e62f8-590d-4ec1-a316-94336a2a5980": [[-0.41531399999999996, 0.0, -0.46476799999999996], [0.41516800000000004, 0.8447410000000001, 0.46464599999999995]], "0f78b360-17e1-4812-9710-6a53a486de16": [[-0.443188, -1.5538100000000002e-17, -0.443188], [0.443188, 0.7579210000000001, 0.443188]], "eb08c640-737c-4b76-a808-3fea37f657e5": [[-0.450041, 0.0, -0.200933], [0.450041, 0.7900119999999999, 0.200928]], "5ff8fcb6-f2d2-4d7a-88ba-5667bba7e836": [[-0.33474800000000005, 0.00010800000000000001, -0.30077000000000004], [0.33474800000000005, 0.7027249999999999, 0.30077000000000004]], "ef8be535-4561-4923-9bc4-e64312dda48d": [[-0.350405, -1.0171e-05, -0.377614], [0.35050600000000004, 0.7563150000000001, 0.376444]], "4ef5530e-ccd4-4f07-8961-908d02a8e093": [[-0.993849, -1.19025e-08, -0.27122399999999997], [0.993849, 1.9363, 0.271236]], "0ed0b5e6-ffce-4401-92f7-2821b244a872": [[-0.221538, 0.0, -0.21838000000000002], [0.221538, 0.498985, 0.21838000000000002]], "563dfa58-4257-4ada-a3d1-c7f07d746af9": [[-1.0253700000000001, 0.0, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "ce00c57d-7a1b-4b94-b93b-0fd7dafeeb9a": [[-0.444509, -0.0, -0.444509], [0.444509, 0.419846, 0.444509]], "7a6a4023-9d5c-45cb-904d-3ea1729291ab": [[-0.48497100000000004, -0.000879996, -0.529416], [0.483713, 0.645858, 0.53032]], "8c19055b-5cb8-4544-bd8d-e7cbf938fcae": [[-0.32552, 0.0, -0.34838500000000006], [0.326188, 0.696407, 0.348269]], "f3f17edc-96ce-46a2-80a8-f43aa9f1ae5c": [[-0.312267, 0.0, -0.336826], [0.312267, 0.7964490000000001, 0.337099]], "cdf5a1c6-65d0-4d18-b1d3-0ad01a2d0365": [[-1.20051, -1.52588e-08, -0.42532800000000004], [1.20003, 1.00343, 0.423948]], "e4e3e639-5dfc-4a6f-950b-a2ae741af1af": [[-0.286698, -3.79205e-21, -0.28667200000000004], [0.286698, 0.780266, 0.28669]], "74897c09-e0cb-4746-a1f1-bd8061bf4611": [[-0.8438370000000001, 0.0, -0.173882], [0.8438370000000001, 0.558555, 0.173882]], "6859b850-a5ea-43c5-bbdb-393615ba4c1b": [[-0.287945, 0.0, -0.261874], [0.287945, 0.798756, 0.261959]], "fa2bd949-3008-44df-8633-3e452dd95992": [[-0.239783, 0.000222, -0.21200600000000003], [0.239755, 0.559062, 0.21200500000000003]], "6c185b06-6b95-45d0-bad2-fea9895e1e5a": [[-1.04945, 3.05176e-08, -1.16659], [1.05059, 1.56282, 1.1651099999999999]], "ea9dd496-0e86-4c21-bb2a-49375dcf4ba8": [[-0.496603, 1.4783e-17, -0.284843], [0.496603, 0.730559, 0.284843]], "134861d0-d3a8-4d4c-acc6-fd7e76b69d51": [[-0.865, -1.35464e-17, -0.228775], [0.865, 0.626, 0.229179]], "1ae52831-1e4d-47c1-b46d-7b28eba7f099": [[-1.623483, 0.0, -0.593563], [1.623483, 0.774556, 0.593563]], "5f6791af-34a4-3731-ac2c-8a0fbd8ceacc": [[-0.397668, -0.001114, -0.407823], [0.397668, 0.876053, 0.39315600000000006]], "0157cd98-fa1d-4009-b7d6-85fbc44a6eba": [[-0.7783589999999999, 0.0, -0.24943], [0.7783589999999999, 0.496083, 0.24943]], "2fe8d64a-5ea2-4901-b7dd-04a26c568014": [[-0.38912399999999997, 9e-06, -0.373286], [0.389165, 0.9014610000000001, 0.37323700000000004]], "0dd4707a-459c-3947-a95a-77043abd7a01": [[-0.35697, 0.000736, -0.378873], [0.35697, 0.6823990000000001, 0.368756]], "3b98997c-021e-4840-994d-81512494b4cc": [[-0.6750499999999999, 0.0, -0.300095], [0.675049, 0.76, 0.300095]], "5b03414c-a131-4c05-9824-1322521f9c3a": [[-0.338915, -7.43008e-05, -0.33832], [0.338379, 0.769836, 0.338356]], "4305d959-6146-3639-8697-a45e5043b5bc": [[-0.349983, -7e-06, -0.42564599999999997], [0.349983, 0.735013, 0.37786499999999995]], "7b4611bf-d658-4e0d-963b-a71db15a45df": [[-0.600476, -2.72732e-08, -0.593778], [0.600476, 1.2902, 0.59422]], "725c06eb-411e-4f33-bf85-12c8abc37a0d": [[-1.11717, -0.000123578, -0.504245], [1.11681, 0.8283010000000001, 0.5059279999999999]], "26a88598-9a62-4403-992f-25b351e8ba18": [[-0.16, -9.18788e-18, -0.16795000000000002], [0.16, 1.03005, 0.16795000000000002]], "5d538b61-ef5a-4657-8ecf-6dc90002afaa": [[-0.478509, -8.821489999999999e-09, -0.256662], [0.478509, 0.900584, 0.257325]], "c6930e76-6033-4f02-a85d-b057e2ab0c0e": [[-1.1897280000000001, 0.0, -0.5264500000000001], [1.189118, 0.923361, 0.5261330000000001]], "2023ab55-4098-3849-9879-ea3f9f451223": [[-0.650142, -0.000265, -0.349675], [0.647918, 0.954184, 0.349675]], "6f99d15f-0ff4-40b9-a49e-7f5ac23519f9": [[-0.402212, -0.000661631, -0.356464], [0.40196800000000005, 0.570711, 0.35579]], "7851f25d-5241-4a2f-8662-a985f96187a9": [[-1.222585, 0.0, -0.43217], [1.222653, 0.6876260000000001, 0.43231]], "23ac7095-4468-3a05-bd74-b44ebeee103a": [[-0.593218, -0.0007109999999999999, -0.324916], [0.610998, 0.49911900000000003, 0.339322]], "79c5f514-a006-4e6d-a66f-8d4009cdedfb": [[-1.03954, 0.00134, -0.375769], [1.040002, 0.8326640000000001, 0.378097]], "b9a0f504-7385-41f7-9cf1-c7c5c6e7dd96": [[-0.35, 0.0, -0.29521200000000003], [0.35, 0.500001, 0.29521200000000003]], "cf561425-d738-404e-a5d4-32b7b0df4099": [[-0.7618659999999999, 0.0, -0.25135], [0.7618659999999999, 0.8856919999999999, 0.25135]], "1b5cbe2f-1e06-4d26-9d42-959cbec1ed6f": [[-0.37548000000000004, 8.8723e-06, -0.199229], [0.375864, 1.1937900000000001, 0.199229]], "2ac6c7d0-5302-4435-8a4f-2f2cbe8b5886": [[-0.31453, -2.348e-05, -0.418938], [0.314496, 0.525895, 0.418938]], "19d3b4f9-b76c-4205-981b-977181f0da38": [[-0.297896, 3.4706699999999997e-07, -0.26796600000000004], [0.297813, 0.768813, 0.267895]], "fcd82692-9c3b-4343-be82-0e61e6cebc54": [[-0.9723050000000001, -1.08911e-05, -0.202673], [0.9723050000000001, 0.697577, 0.202673]], "4762e7a9-d4be-4e0e-a75e-b1179bf576e6": [[-0.287993, 8.059120000000001e-08, -0.200635], [0.288864, 0.8227129999999999, 0.200544]], "61e55d19-0535-3a12-82b5-5b03434a3b33": [[-1.5, 0.0, -0.592199], [1.5, 0.741887, 0.592199]], "172d257d-5eab-4f7e-8671-ae3752a02b45": [[-0.239995, 9.723830000000001e-18, -0.19380199999999997], [0.239995, 0.538385, 0.19380199999999997]], "131f323a-5470-40fa-93ca-30f58ae7f001": [[-0.224191, -9.23327e-07, -0.224191], [0.224191, 0.876702, 0.224191]], "4b4beaa6-7138-47e3-b80a-6639c6cd0520": [[-0.455545, -3.2066e-08, -0.247874], [0.45534399999999997, 1.86726, 0.248555]], "69fb7c92-ef59-448d-888d-bd9d68927a2c": [[-1.341252, 0.0, -0.464585], [1.341326, 0.919464, 0.464363]], "563ab134-a24f-4b12-85cc-1cba68b1d9fa": [[-0.589891, 0.0, -0.6635639999999999], [0.589891, 0.42774900000000005, 0.6635639999999999]], "72738488-ee91-37af-aab1-39f9caee2993": [[-0.949622, -2.3999999999999997e-05, -0.474691], [0.949504, 0.721818, 0.474809]], "75373602-61ce-45df-8a9f-de721e3e47de": [[-0.402636, -0.000385625, -0.445516], [0.402571, 0.77345, 0.444685]], "dfe3be37-140f-41e1-87a9-84fa20eec21c": [[-0.670013, -0.0031500699999999996, -0.260763], [0.670013, 1.7133699999999998, 0.260337]], "7e741478-236a-4e64-add8-7584d0a597ea": [[-0.375177, -0.0, -0.200269], [0.375177, 1.115799, 0.200269]], "1aa3e255-58c0-41fc-9dac-6380664bde7a": [[-0.347159, -1.33117e-07, -0.316234], [0.347462, 0.8572620000000001, 0.316048]], "5fbe1e57-64f3-3b39-9e61-dc2aa2cf83f1": [[-0.381853, 0.000446, -0.421208], [0.381732, 1.0654080000000001, 0.440626]], "458be5f2-bdcb-4379-af73-94a13d153b44": [[-0.372193, 0.0, -0.453713], [0.372193, 1.011665, 0.453713]], "03e631cc-ee14-4be0-9c53-1ad7ca7fc661": [[-1.285, -6.43679e-06, -0.480942], [1.28476, 0.754733, 0.481163]], "6acebd04-bd05-4231-858b-81bb980bcbed": [[-0.16528400000000001, -0.00024354500000000001, -0.16264800000000001], [0.16528400000000001, 0.8667579999999999, 0.16264800000000001]], "8138ddfc-d618-4ae5-b76f-1fd40bcfe58a": [[-0.485812, 0.0, -0.407916], [0.48609900000000006, 0.652026, 0.40807499999999997]], "737e10df-4083-4f63-9d0d-9a78f138be46": [[-0.234765, 5e-06, -0.09897399999999999], [0.234765, 0.413977, 0.09897399999999999]], "42676343-11d0-4f4c-bdab-c59770135088": [[-0.775697, -1.52588e-08, -1.01495], [0.775697, 1.354, 1.01495]], "80ed505d-06bd-45c8-b4ab-aa28d172bc09": [[-0.387456, 0.0, -0.234634], [0.387456, 0.310442, 0.234634]], "0e0e01e3-6e59-4438-8d4b-af0de9f8cde3": [[-0.6001230000000001, 3.97734e-18, -0.0649559], [0.600124, 0.09, 0.0649551]], "4f6da8fa-e161-4292-8fba-e6f8b1c2e4dd": [[-0.21746500000000002, -1.0384000000000001e-17, -0.194361], [0.21746500000000002, 0.751111, 0.19406199999999998]], "669e0b67-826b-3b86-b34f-8a3f9f2fb564": [[-0.23607, -0.002687, -0.28546900000000003], [0.23197600000000002, 0.753777, 0.248771]], "047b23e6-5057-4a1e-9c5a-23244a62a006": [[-0.595309, 2e-06, -1.2192990000000001], [0.595309, 0.97756, 1.220475]], "1c438ce6-5cc6-45c6-8ae0-6ea01efed7a5": [[-0.306249, 0.000956, -0.31901599999999997], [0.30679, 0.823194, 0.318017]], "c68d16c3-982d-4dba-85fd-a6a1414f7341": [[-0.226968, 0.0, -0.226968], [0.226968, 0.43957700000000005, 0.226968]], "d6608d2c-850a-4a03-ba45-03162fcaa6c1": [[-0.9592440000000001, -0.0018895899999999998, -0.49742], [0.9596089999999999, 0.889826, 0.496872]], "3f344705-6b64-4725-ba82-f498b9e44f1e": [[-82.9379, 0.4624, -52.2886], [87.2297, 97.7167, 55.3685]], "37261dcc-f6eb-4b5d-9365-68a9496e89f0": [[-0.391421, 9.26266e-18, -0.15262900000000001], [0.391421, 2.58468, 0.15262900000000001]], "548b5fbc-607b-478d-95d5-af870aa65291": [[-1.06331, -5.226029999999999e-06, -0.278795], [1.06331, 0.479719, 0.278795]], "12c73c31-4b45-42c9-ab98-268efb9768af": [[-1.2490999999999999, -6.999749999999999e-07, -0.374033], [1.24878, 2.3272399999999998, 0.374176]], "8490804f-12a5-4653-82fc-da4ad88cd486": [[-2.02493, 0.0, -4.675452], [-0.08493, 0.84691, -4.221246]], "2982979b-1bb0-4816-a735-0048832e5225": [[-1.000125, 0.0, -0.20000900000000002], [1.000125, 0.480102, 0.20000900000000002]], "f7c601dd-90ac-485a-a9b8-8d676c87423a": [[-0.38969499999999996, -2.86149e-17, -0.486437], [0.38939599999999996, 1.07334, 0.486404]], "e6c86a3a-1c64-465f-8ff4-467687511d11": [[-0.228508, -6.49043e-06, -0.22813099999999997], [0.228277, 0.429398, 0.228137]], "f0193173-d768-4f43-93f3-5a1a9f1a97e3": [[-0.264728, -3.2749799999999996e-05, -0.264864], [0.26474, 0.606712, 0.264863]], "803d34b5-0502-408a-8e23-67042ad90548": [[-1.0595, 1.09552e-07, -0.9616330000000001], [1.05981, 1.16381, 0.9628619999999999]], "011b01ee-dd87-451d-96a4-d4b8b1af5a3d": [[-24.1286, 0.0, -24.9956], [24.1286, 52.1568, 24.9956]], "5de45849-7d1b-4378-82da-ed183b7ecc37": [[-0.283244, 0.0, -0.298348], [0.28294, 0.814345, 0.298348]], "6697b428-2d47-3340-9ac1-340343afb571": [[-0.7341289999999999, -0.0, -0.7364419999999999], [0.733935, 0.7400960000000001, 0.734069]], "d7cd8bab-72ad-4d13-8753-a9780013210f": [[-0.2198, -3.38918e-05, -0.220855], [0.218887, 0.8995869999999999, 0.22036899999999998]], "54cb266a-db46-4184-baf9-52794af15e4a": [[-0.263988, 0.0, -0.28699600000000003], [0.263988, 1.013963, 0.28699600000000003]], "4b600aed-51ed-445c-8c08-283ea0d5b53a": [[-0.22056599999999998, -9.146210000000001e-18, -0.236964], [0.220139, 0.798884, 0.236873]], "2997b61c-85c2-472f-b492-bf25d20aae70": [[-0.639145, 0.0, -1.047949], [0.6403719999999999, 1.292029, 1.047949]], "817807b8-4628-312f-98ed-3b9792cdde15": [[-0.285325, -0.00148, -0.288485], [0.286445, 0.861107, 0.264723]], "b45e964b-8727-461b-b9df-5bbe9a229302": [[-0.23284, 0.0, -0.232739], [0.232823, 0.38520699999999997, 0.232739]], "a72e6ee7-4d7f-4e53-aa29-abb431c2d84a": [[-0.38915, -0.00026184499999999997, -0.264213], [0.389169, 1.8437299999999999, 0.264353]], "7bc1df8e-8bd5-47da-bd76-7fed0b1fce83": [[-0.306946, -1.88841e-05, -0.131102], [0.306946, 1.38728, 0.1311]], "a22ad830-f2d6-4afc-8d48-af1a79593e97": [[-1.18806, -7.62939e-09, -0.509694], [1.18784, 0.7549779999999999, 0.5096849999999999]], "7d61e27c-6983-440a-95e6-4f86f7a94ddb": [[-0.401415, 0.0, -0.33480600000000005], [0.401415, 0.912718, 0.33704]], "fb338f53-00f1-43ef-a6b8-ad249ce6b951": [[-0.281779, -0.000116848, -0.290471], [0.281833, 0.337507, 0.290842]], "be220e7b-58c3-4812-96a7-d1420e1c65ea": [[-0.249746, -1.52064e-17, -0.24934], [0.249746, 0.397487, 0.24934]], "b60b5427-a094-47e0-80ee-af1c654eb6dc": [[-0.8468129999999999, 0.0, -0.22361899999999998], [0.8468129999999999, 0.7745839999999999, 0.22361899999999998]], "1c5527f7-42e2-48ad-be12-6a5f955f8091": [[-0.51666, -0.000369007, -1.09286], [0.516378, 0.7497320000000001, 1.09326]], "33f93f0d-5aaf-4e85-8962-ccd7668f882c": [[-0.983005, 6.90993e-07, -0.365865], [0.983006, 0.74045, 0.367784]], "5729adbd-d618-4aab-83db-6ccaf02c4c4c": [[-0.7, -1.66093e-06, -0.213319], [0.700001, 0.900001, 0.213319]], "9b7ba8a4-834b-4848-87cf-02dbf8920133": [[-1.70671, 0.002464, -0.592127], [1.707601, 0.785826, 0.592411]], "ea4e06f5-939f-47ff-9df2-be5fdedf5717": [[-0.21977799999999997, 0.0, -0.21977799999999997], [0.21977799999999997, 0.462202, 0.21977799999999997]], "d6fe7d67-e167-4a63-9df1-8ad55418105f": [[-0.37146799999999996, 0.000674, -0.37146799999999996], [0.37115299999999996, 1.34298, 0.37115299999999996]], "41dce00c-6a26-4480-a569-4ab8e6e74d67": [[-0.388106, -8.84746e-06, -0.124972], [0.388007, 1.0476699999999999, 0.12497299999999999]], "c708b7ee-65a5-4033-a022-e22f10bc9275": [[-1.6498300000000001, 4.70054e-07, -1.03568], [1.65018, 1.02906, 1.03555]], "a85a3fb5-aa29-430d-90fc-1c1b6e4333b5": [[-0.38063899999999995, 0.0, -0.228365], [0.38063899999999995, 0.733103, 0.22827999999999998]], "5f8a1a51-f9df-44db-8d37-14eda9905b8e": [[-1.16076, -0.000830235, -0.400875], [1.16045, 0.8681180000000001, 0.40108]], "aee0ea02-44f0-40ef-9ee6-6cc5c472da9e": [[-0.289985, 2.43633e-05, -0.176768], [0.290002, 0.8938339999999999, 0.176782]], "8314e676-c506-3017-b1d3-08d8b7625d85": [[-32.6339, 0.0, -30.9163], [32.8606, 81.1484, 31.0346]], "f5bcb3ea-c9d5-45a4-8291-4bc04bde8ac0": [[-0.425832, -2.13034e-05, -0.340267], [0.42589, 0.369191, 0.340168]], "11e48b3a-7f5a-4964-a56b-20b5313c1de8": [[-0.74762, -6.3798e-05, -0.246768], [0.74762, 0.985256, 0.246833]], "f9d7691a-e8d5-45fa-a279-ec7224afa8d0": [[-0.886031, -5.51564e-17, -1.04066], [0.884773, 1.19309, 1.04314]], "24a49906-1627-4639-ae26-32d91d02871b": [[-0.250914, 0.0, -0.29611], [0.251326, 1.012111, 0.296067]], "08b49386-dff3-327b-aea1-3726e74922d8": [[-0.243387, -0.0, -0.274547], [0.23555800000000002, 0.8468519999999999, 0.258979]], "e406b2db-5855-4c1d-ad60-82ccfd8f2868": [[-0.267364, 1.1171e-05, -0.26606799999999997], [0.267417, 0.407418, 0.26571100000000003]], "84213a41-9152-49c3-9663-7a7817572638": [[-0.300076, 6.79846e-05, -0.05916299999999999], [0.300117, 0.8767130000000001, 0.0591277]], "4f97df72-b603-3d75-abcb-29ddcdaec8ef": [[-0.255814, 0.000205, -0.27156600000000003], [0.24279599999999998, 0.824305, 0.271926]], "8a7ad4d1-7f2e-46d5-b0a5-8debd800e222": [[-0.15568300000000002, 0.0, -0.196574], [0.15568300000000002, 0.438371, 0.196574]], "661719bd-2859-4c82-908e-9fd1264e331b": [[-0.319397, 0.0, -0.30748200000000003], [0.319397, 0.836966, 0.307518]], "13f9a010-1c1f-4755-846f-38c69593a47f": [[-1.12894, -0.00163114, -0.412752], [1.1274899999999999, 0.865242, 0.41401200000000005]], "afd9e572-09c8-46cd-b05f-cda11bd4317b": [[-0.410456, -1.56692e-17, -0.410456], [0.410456, 0.122604, 0.410456]], "8b7d2814-3d01-4359-9947-f7203b99091f": [[-0.360216, -0.000112022, -0.24805599999999997], [0.36011299999999996, 0.954671, 0.248019]], "5db96573-a895-45d5-89ee-ffa2a1605f3a": [[-1.16646, -4.09222e-05, -0.432095], [1.16698, 0.81727, 0.43239199999999994]], "ed42a4ca-48c6-44b4-a9e0-0fde2501e66e": [[-0.828077, 0.0, -0.48967700000000003], [0.828077, 0.740262, 0.489801]], "acae46c2-7f42-4f28-abd8-ce440d125de3": [[-0.168127, -8.02515e-05, -0.16789400000000002], [0.16798, 1.24017, 0.167848]], "77d26118-256f-40ff-a1ae-30e8b3345c56": [[-0.8561, -2.6883800000000002e-17, -0.439831], [0.8561, 2.01066, 0.439831]], "cdba0c2b-f145-4d25-9217-ffe9c4517fcb": [[-0.461073, 7.900000000000001e-05, -0.45083300000000004], [0.461134, 0.7129179999999999, 0.45083300000000004]], "154cb687-a771-44e3-a44f-bd4d664846f8": [[-0.778387, -1.14441e-08, -0.423193], [0.778609, 0.7921339999999999, 0.423546]], "3e10b179-ccad-4c92-9ebf-e58939715cf5": [[-1.33037, -0.00104558, -0.483547], [1.32924, 0.767316, 0.483919]], "82a44a96-155e-4f95-a7ad-d1e22297cada": [[-0.9808169999999999, -6.21555e-05, -0.41271500000000005], [0.981497, 0.785544, 0.412001]], "4c9c11ff-f385-4be3-bba4-ccb70ecba2df": [[-0.37559600000000004, 2e-06, -0.363256], [0.37591299999999994, 0.6937340000000001, 0.363521]], "2f75dae4-23a3-4d8b-9c09-60755a2d098d": [[-0.34445099999999995, 0.0, -0.34306600000000004], [0.34445099999999995, 0.461486, 0.34306600000000004]], "63a7baaf-6c6e-4c64-92e8-9c0a35bbc968": [[-0.75, -1.83697e-17, -0.3], [0.75, 2.24996, 0.3]], "44ee4c77-0c89-4b0d-8898-fcec29a4adf8": [[-0.0873595, -3.12454e-18, -0.08689909999999999], [0.0868889, 0.811488, 0.08676690000000001]], "0738eb4e-fcf2-4b6a-96a0-f5702b8e5365": [[-0.18921700000000002, -5.55169e-05, -0.189854], [0.18940300000000002, 0.20381900000000003, 0.18995]], "517709cf-79a5-3309-af40-05e0c5ec992c": [[-0.36983699999999997, -0.001862, -0.42540300000000003], [0.36983699999999997, 0.833365, 0.42540300000000003]], "6458c103-7613-425c-b491-6294f65e1d53": [[-1.22878, -3.30191e-10, -0.32295699999999994], [1.22881, 2.3362700000000003, 0.323264]], "cbaea642-4eaf-43dd-89b9-84f9160f7d74": [[-0.22536699999999998, 0.0, -0.225], [0.225364, 0.720011, 0.224967]], "dcc0f77d-fbb4-4f62-b85c-d15ae5b735e7": [[-0.390007, -1.70682e-05, -0.375903], [0.390028, 0.760799, 0.37621499999999997]], "6bdd7e5f-5dbb-479d-8a30-30ed9995cbae": [[-0.269632, 0.0, -0.23522600000000002], [0.269632, 0.578041, 0.23522600000000002]], "b3714b1c-2e82-4a1c-bbee-40dda6d32ab8": [[-0.33662, 0.0, -0.33744], [0.33662, 0.857292, 0.33744]], "38153b7a-429f-3088-88f0-f56b2602400d": [[-41.9109, -0.086, -47.5048], [41.9109, 105.2689, 47.5048]], "9290f528-c4eb-4cc9-8af7-797a55543bc9": [[-1.039823, 0.0, -0.518114], [1.039823, 1.040516, 0.517556]], "76183784-e968-443d-a3ac-3f25e8609e23": [[-0.32760599999999995, -0.000146186, -0.361722], [0.327906, 0.734226, 0.36195]], "07d28f5b-d9e3-43c7-a782-d6a7f8ce4221": [[-1.35192, -1.48368e-05, -0.7467659999999999], [1.35202, 0.748514, 0.746971]], "86cb667c-e480-4e03-97e0-3af491759849": [[-0.246448, -9.633629999999999e-06, -0.229852], [0.24647200000000002, 0.110121, 0.229852]], "54b43c47-400b-440e-b88d-27cff6ab1483": [[-0.25354299999999996, 0.0, -0.265322], [0.253594, 0.724037, 0.265322]], "6136d2c2-7bae-4011-b17b-a1f83fabba6b": [[-0.8, 0.0, -0.301], [0.8, 2.5, 0.301]], "0c72d32b-e98c-4212-9e68-e0b6573c6784": [[-0.191239, 1.42858e-17, -0.248262], [0.191198, 0.827212, 0.24826499999999999]], "7ff2123f-e8d4-49a0-9214-c177ea760b86": [[-0.32116799999999995, 0.0, -0.284188], [0.32116799999999995, 0.937265, 0.284188]], "7aa42079-a9b0-449c-8c49-6d8da1ec5b3b": [[-0.291193, -1.23441e-17, -0.20159500000000002], [0.291193, 0.439029, 0.20159500000000002]], "566772d2-93d2-468d-88f3-bb76cb106d8c": [[-0.536489, 0.0, -0.391154], [0.536489, 0.367504, 0.391154]], "3be52a81-804b-44a6-a0f1-c8bbc9639a3b": [[-0.38917700000000005, -0.000668867, -0.36627000000000004], [0.389681, 0.880652, 0.365826]], "53882316-252e-4c87-98fd-e42247f74084": [[-0.8147920000000001, 0.0008799999999999999, -0.44426099999999996], [0.814011, 0.910864, 0.444816]], "63083cb5-29b7-4693-b8a8-d37f77a3b35d": [[-0.7521479999999999, -1.67219e-17, -0.317826], [0.7521479999999999, 1.83745, 0.317826]], "85639811-624d-4b98-8f08-b43bf43aeb80": [[-1.056389, 0.0, -0.43004600000000004], [1.056389, 0.7797310000000001, 0.43004600000000004]], "56d90ed2-7488-4a58-9464-5731b74e7d64": [[-0.901649, 0.00064, -1.181227], [0.899409, 1.22345, 1.181616]], "0bb6108d-d6a6-47f3-8438-5ad6944359b2": [[-0.168847, -9.833250000000001e-18, -0.19482500000000003], [0.168529, 0.851217, 0.194861]], "4cd0fb8c-80b6-4a8d-a38f-dee8119461a1": [[-0.218998, 0.0, -0.232699], [0.218998, 0.682411, 0.232699]], "03b201b3-3fd5-4b0c-9e59-96d75e6934ec": [[-0.869189, -0.000266413, -0.395424], [0.869189, 0.648644, 0.39467199999999997]], "414e93ba-cf64-44d9-92d4-cfc5ff09731f": [[-0.9, 0.0, -0.21259699999999998], [0.9, 0.578745, 0.21259699999999998]], "4c8943cc-85a2-4bfb-a485-24bb37887b39": [[-0.7642829999999999, 3.3925e-05, -1.0719400000000001], [0.763973, 0.9581189999999999, 1.0725]], "28f855f2-fadb-4d8d-917c-44d90ce964bb": [[-1.625, -1.0436e-17, -0.285952], [1.625, 2.51155, 0.285952]], "8225d304-2d16-419c-b9e7-9634a68e2f42": [[-0.765201, -0.000304795, -0.269027], [0.7652500000000001, 0.753279, 0.268422]], "b3ab3d07-f13b-4b5c-a1f5-1c8cd33cd176": [[-0.285701, 0.0, -0.19625], [0.285701, 0.449304, 0.19625]], "22cc59fc-087d-4f2d-99c3-21bc21346ec3": [[-1.459468, 8.7e-05, -0.601054], [1.458165, 0.845141, 0.601054]], "b194249c-37de-4769-9d47-579544cb7540": [[-0.33619, 0.0, -0.300911], [0.33619, 0.63554, 0.300972]], "485394cb-8e71-4e46-b4c3-41d4366b7b19": [[-1.21471, 3.05176e-08, -1.28018], [1.21471, 1.5563999999999998, 1.28046]], "3eade32b-1859-4ecb-a38a-885d7f6d33ce": [[-0.808875, -2.71366e-05, -1.18765], [0.8094840000000001, 1.19645, 1.18883]], "13d8d8bc-2d10-4d9e-8c38-eaf7f4c26243": [[-1.1520000000000001, 1.7858800000000002e-17, -0.308344], [1.1520000000000001, 2.4027600000000002, 0.308344]], "6d7b7e56-7e0d-4a5f-b755-df0e117ac1e9": [[-1.265137, 0.0, -1.186724], [1.2684010000000001, 0.997966, 1.187416]], "157f8035-6366-47f8-bd54-169a721f1077": [[-1.5702600000000002, -5.28886e-05, -0.493308], [1.5702099999999999, 0.8455469999999999, 0.49370600000000003]], "6e6bf386-cd00-3b40-babc-61f3bc4f1946": [[-0.404398, 0.0, -0.665296], [0.404398, 0.80818, 0.665296]], "102c7436-d583-4de3-bfd6-1409f3ab9f52": [[-0.474049, 0.0, -0.45346400000000003], [0.474049, 0.41679, 0.45346400000000003]], "5f48737d-0706-424c-a0ff-41f19ee90ab8": [[-0.775458, -6.64857e-17, -1.0968], [0.775676, 1.39124, 1.0968]], "cdad1263-61c4-4452-9fcc-b463daf92a47": [[-1.505, 0.0, -0.175], [1.505, 2.4, 0.175]], "ecec4a34-88a1-472f-bae0-95fdaf63cd23": [[-1.3958199999999998, -0.00021427299999999999, -0.402922], [1.395, 0.617059, 0.403316]], "2403c725-cec6-46ba-8d43-b7b87834a71a": [[-1.006443, 0.0, -0.425338], [1.006121, 0.9034300000000001, 0.425186]], "93ccf508-3352-42ba-94ab-12b1d461b86d": [[-0.889885, -8.09947e-07, -0.29973], [0.889731, 2.19252, 0.299188]], "ad54eb72-682d-4c51-bb95-d02a543d648c": [[-0.494701, 0.0, -0.527675], [0.494739, 0.320336, 0.527798]], "195ac979-7df9-4813-a2a8-9fef063a5172": [[-0.379227, -0.000635772, -0.39331699999999997], [0.379217, 0.8241700000000001, 0.393964]], "1f04134b-e388-4630-8f9b-49a549397dcb": [[-0.917362, 0.0, -0.181369], [0.917362, 0.48113100000000003, 0.181369]], "07380e1b-c6a1-444b-8223-c6626e6c10b6": [[-1.0252679999999998, 0.0, -0.465171], [1.025309, 0.896413, 0.465133]], "05b03925-70b7-4dc5-afaa-60567e89bb0a": [[-0.93916, 0.000212396, -1.02329], [0.9394100000000001, 0.799001, 1.0233400000000001]], "ab511164-78fc-402d-8189-02a115a55ee7": [[-0.987398, 0.0, -0.373981], [0.987398, 0.724272, 0.373565]], "8b348c4a-7c31-4196-8b26-5e083f2cd2be": [[-0.35561, 0.0, -0.36375300000000005], [0.35554699999999995, 0.954383, 0.363752]], "2c647c28-8f73-4c55-a543-8e489acab98a": [[-0.27686900000000003, 0.0, -0.29376599999999997], [0.276948, 1.249903, 0.293725]], "e5591415-83d4-4a90-ab48-273288ced28d": [[-0.806763, 0.0, -0.581206], [0.806763, 0.49251100000000003, 0.581206]], "0847625f-4895-4290-a1cb-a9c795c4b53e": [[-1.063265, 0.0, -1.078334], [1.062432, 1.18977, 1.078308]], "0cce0700-cc02-4617-89e4-aefc02fe2918": [[-0.249146, -1.33154e-17, -0.25195900000000004], [0.249423, 0.204953, 0.251892]], "cb49baee-2782-4f5d-b5e3-437d46043f7a": [[-0.193128, 0.0, -0.17531400000000003], [0.193128, 0.551667, 0.17531400000000003]], "38a4a1b4-4f01-4a58-8ef8-7887ad680420": [[-0.463547, -0.000350882, -0.451378], [0.463547, 0.7981820000000001, 0.449759]], "10d6680a-57bb-4ed5-9254-a10969ec7ab8": [[-0.239645, 0.0, -0.272323], [0.23944500000000002, 0.907471, 0.271776]], "6cd134aa-6eda-403c-b02d-7f9d7efcdb63": [[-1.1134600000000001, -0.00019139, -1.1273], [1.1122400000000001, 1.17006, 1.12845]], "c44cfe6d-89b5-457e-8682-7075f2a50dbd": [[-0.772928, 0.0, -0.447208], [0.773549, 0.889197, 0.44783900000000004]], "20e18a2d-50d6-40a9-9129-4428c5fa4cd7": [[-1.5293700000000001, 0.000303155, -0.44187600000000005], [1.5293299999999999, 0.887276, 0.44460299999999997]], "7445b1b0-ce5d-4dac-9665-6e1211d7d454": [[-1.17109, 2.98668e-07, -0.321354], [1.17109, 2.32719, 0.321354]], "00acb313-c507-4372-addf-508755c6e98b": [[-0.8065439999999999, 4.32554e-07, -0.9918290000000001], [0.806533, 0.939817, 0.989106]], "58ce0893-d787-4f80-807b-e0f96baca1ab": [[-0.8929290000000001, 0.0, -0.17102399999999998], [0.8929290000000001, 0.351678, 0.17102399999999998]], "c5937f46-595a-4ac6-984a-fc6611d604fe": [[-0.33662, 0.0, -0.33744], [0.33662, 0.857292, 0.33744]], "005bafee-92c1-41db-ac9b-dab97ef3756f": [[-1.1763, -0.000262469, -0.480329], [1.17263, 0.876303, 0.481815]], "d547fc89-31f7-408c-aa99-30bb4ff9bdfc": [[-1.6496000000000002, -2.07803e-09, -1.09491], [1.64885, 0.918953, 1.0957599999999998]], "21e4d467-a268-48d7-8ae7-8d9e7478ee99": [[-0.451196, -1.94359e-17, -0.319992], [0.451196, 0.30971699999999996, 0.319993]], "75fdbd17-c029-4a56-bafa-17a78cf0a8d5": [[-0.38388500000000003, -1.86894e-17, -0.343657], [0.38394799999999996, 0.771459, 0.343671]], "71997917-b065-440d-baee-5e5393e97001": [[-1.24999, -3.8147e-09, -0.44244900000000004], [1.24952, 0.8672230000000001, 0.441657]], "226c643b-4a05-42da-97d5-3742c9d654d1": [[-0.610341, -0.00128608, -0.606428], [0.610751, 0.787607, 0.605931]], "d23f1e0f-e453-409a-a190-64fcc467a7d6": [[-1.315, -8.57249e-18, -0.16], [1.315, 2.6, 0.16]], "8f437209-8cee-44af-861e-db81f489a70b": [[-0.306846, 0.0, -0.354666], [0.306846, 1.023177, 0.354666]], "44f07dce-c460-4b4e-b8b0-aaeab02b46cd": [[-0.454384, 1.5829999999999998e-07, -0.46838700000000005], [0.454499, 1.3084, 0.46835]], "3b08dae6-44ba-40eb-a18d-84af0ac30255": [[-0.395031, 0.0, -0.350634], [0.395031, 0.7522329999999999, 0.35030900000000004]], "449e0248-fda8-4ed6-9078-6da052da19d0": [[-1.081675, 0.0007480000000000001, -0.506004], [1.081553, 1.01407, 0.506109]], "cd740d8b-d97d-4230-91e1-b0e540a27c4d": [[-1.18211, -9.945009999999999e-18, -0.211673], [1.18211, 1.9676900000000002, 0.21256699999999998]], "704c2394-c7f5-3c5a-bd4c-bc0cbd1d718e": [[-0.483964, 0.0, -0.484923], [0.48536999999999997, 0.7092149999999999, 0.484695]], "56ff88dc-2b3b-495c-9ece-a6df6c2218cc": [[-0.346404, 0.0, -0.419059], [0.346405, 0.951512, 0.419059]], "5fc13bc0-a4ec-4d58-b82c-fc9e36ebe244": [[-0.34645400000000004, 0.000916, -0.34973999999999994], [0.34795200000000004, 0.716439, 0.351725]], "5ddb0d99-5ed5-3489-af65-7c1ed3626f30": [[-0.318426, 0.0, -0.342452], [0.318426, 0.8712770000000001, 0.34662]], "badfe7a1-83e5-483d-b3ff-c40e57ec29ec": [[-0.165994, -2.31555e-24, -0.18722899999999998], [0.16593599999999997, 1.77089, 0.187216]], "7646e095-6004-3398-a653-4d874554dd47": [[-0.9144, 0.0, -0.23495000000000002], [0.9144, 0.8382, 0.23495000000000002]], "5fa17694-bb76-4822-a483-5f11f5aa2ee5": [[-0.5459700000000001, 0.0, -0.70108], [0.546069, 0.377149, 0.70107]], "713f01d7-8366-4bc8-89b6-1212da08663b": [[-1.4, -1.06295e-17, -0.20015], [1.4, 0.69286, 0.20014900000000002]], "ab0e2b77-db12-415f-a706-9aa4319365f0": [[-3.5250009999999996, 0.0, -0.20000099999999998], [3.5250009999999996, 2.400002, 0.20000099999999998]], "476a97a6-7d20-495e-9be7-e6bcc471fa77": [[-1.020607, 0.0, -0.48031100000000004], [1.020662, 0.87051, 0.480128]], "8601deed-5a31-422c-8bc4-fa0c10c288f4": [[-0.71, 0.0, -0.335], [0.71, 2.04, 0.335]], "641286a9-d0cf-4373-8d4d-0c03705976a9": [[-0.381695, -5.0578e-05, -0.12446], [0.381695, 0.870748, 0.12446]], "0570edf6-aa2a-47d2-922a-fb5ae29fdd99": [[-0.892693, -6.21725e-17, -1.0180200000000001], [0.892693, 1.11388, 1.0181]], "6cc24456-7782-446a-8109-2a2be1576c55": [[-0.344702, 0.0, -0.44453400000000004], [0.344702, 0.845801, 0.44453400000000004]], "7ad02302-4237-3ce6-81a7-26a7a871905c": [[-0.255069, 5.1000000000000006e-05, -0.26861999999999997], [0.255069, 1.05989, 0.267944]], "e7276bfe-8ee9-43d3-b927-1075e9c88f45": [[-0.387119, 0.0, -0.16636800000000002], [0.387119, 2.85628, 0.16636800000000002]], "e5a42f97-dee7-4289-9ad4-96f463a8b4c2": [[-1.09708, 1.90735e-09, -0.495195], [1.09708, 1.7409100000000002, 0.495195]], "7e3a8d19-21e5-4120-978f-5ee3caf42fc4": [[-0.329572, 0.0, -0.329423], [0.329572, 0.33874899999999997, 0.329423]], "0e90ef50-aced-4b4c-97b1-cd7ced5724f5": [[-1.3, 0.0, -0.5203], [1.3, 0.754, 0.5203]], "9f6d32cb-a960-4924-92b3-eaebeafa0a6f": [[-0.321218, -0.00010290000000000001, -0.29062], [0.32136499999999996, 0.892504, 0.29138400000000003]], "bed567d7-2fd8-4f6a-a50e-27bf792e60eb": [[-0.34962400000000005, 3.53418e-05, -0.34633600000000003], [0.349734, 0.338502, 0.346177]], "96c675a4-c849-4af9-8f52-bca18725afd8": [[-0.122962, 1.56935e-08, -0.0804874], [0.122962, 0.24567499999999998, 0.0805619]], "65c3f5e9-fb92-4e27-921c-cc44d711d61e": [[-0.884631, -7.78933e-17, -1.2740900000000002], [0.884631, 2.43885, 1.2740900000000002]], "7ca8f7ae-eea3-49e5-9388-89447bc422f8": [[-0.135378, -1.52588e-08, -0.134648], [0.135378, 0.957702, 0.134648]], "2e03c3a9-677f-4b04-b44d-e2aac7baf607": [[-0.26653099999999996, 7.88984e-09, -0.267849], [0.26653099999999996, 0.5396029999999999, 0.268334]], "3847d5da-a57d-423b-8aec-57419ade2d26": [[-0.20041599999999998, -5.39704e-07, -0.2], [0.20041599999999998, 0.561271, 0.2]], "f4187be1-985f-44e2-8b82-d5653ff86400": [[-1.349, -0.00190512, -0.6227360000000001], [1.3471600000000001, 0.865836, 0.622727]], "a7ab47ed-b75e-4852-aa4e-b78efe256aa9": [[-1.38698, 0.0, -0.496329], [1.3883420000000002, 0.8349460000000001, 0.496977]], "748816f1-3ae4-3481-a977-18e1511c1c33": [[-0.97419, 1.1999999999999999e-05, -0.443566], [0.979603, 0.8503189999999999, 0.49676299999999995]], "b1bca4f2-cf88-4b8b-9a99-7bdb33e71a95": [[-0.285922, 0.0, -0.254796], [0.285922, 0.48643099999999995, 0.254796]], "05571815-ab9a-3526-8fba-ed9c18e9d3d0": [[-0.37839399999999995, 0.00035299999999999996, -0.474677], [0.39354, 0.748687, 0.34512099999999996]], "944b7d0a-fcbc-4c27-bfec-3d2440f0ccce": [[-0.633702, 0.0, -0.623838], [0.633702, 0.41305, 0.6238389999999999]], "611dcd46-d08f-48d2-a935-c90e83be6914": [[-2.8682, -3.89762e-08, -0.294125], [2.8682, 2.61303, 0.294127]], "ecbcdfaa-65b6-4170-8a3a-b1c1de6b9932": [[-0.5166270000000001, 0.0, -0.43093899999999996], [0.5166270000000001, 0.773932, 0.431004]], "053c51f2-e007-4ea7-8a0b-50f5ef90f89e": [[-0.20208500000000001, -2.4586e-05, -0.232199], [0.20193899999999998, 0.9434279999999999, 0.232199]], "407b59df-eabe-49d1-9952-8747e405711e": [[-0.7800090000000001, -6.49875e-17, -1.06233], [0.7813599999999999, 0.800725, 1.06233]], "79ce0923-04a5-478a-bb56-0d6e10468baa": [[-0.8333240000000001, -5.7660999999999996e-05, -1.08002], [0.8333240000000001, 1.0655299999999999, 1.0800100000000001]], "1c5fc5b7-5ff3-4440-9da4-ca01502adcd2": [[-0.901392, -0.000309595, -0.38043], [0.901608, 0.759449, 0.38077300000000003]], "95275a31-a770-43f1-9abc-758655a1391c": [[-0.301, 0.0, -0.301], [0.301, 0.5883379999999999, 0.301]], "a89f8139-b23c-440f-85fd-973d39dc5bbb": [[-0.190893, -1.52588e-08, -0.017473000000000002], [0.190621, 1.42231, 0.017473000000000002]], "736cbe37-d1ce-4e9c-bb3f-fa785c969a30": [[-0.600504, -4.45579e-08, -0.20263899999999999], [0.600504, 1.0292700000000001, 0.20264]], "621210b8-9eee-4176-b940-fd2202842914": [[-0.691239, 0.0, -0.539675], [0.691239, 0.43255699999999997, 0.539675]], "1fe606ff-0b70-4411-bccc-9951a7a3feb1": [[-1.168596, 0.0, -0.417847], [1.168748, 0.9052849999999999, 0.41828299999999996]], "1a415244-2e5d-4177-9885-1f12e28dcbc3": [[-0.36451500000000003, -0.000433133, -0.361777], [0.365837, 0.7423470000000001, 0.361366]], "f80afa4e-0c60-47e5-80d6-cd0be37b5919": [[-0.545816, -0.000364483, -0.023367100000000002], [0.545816, 0.8894660000000001, 0.0235929]], "43dd0327-b449-4fa0-9910-3fc975be5a2a": [[-0.181882, -7.06458e-05, -0.100078], [0.181902, 1.17221, 0.10005000000000001]], "9cee1f25-d93a-4bc8-9348-591c79520972": [[-0.879503, 0.000333, -0.566385], [0.87917, 0.6582680000000001, 0.5667179999999999]], "2c6e2df7-2279-3902-a444-e0245190dce7": [[-1.1010630000000001, 0.005692, -0.512146], [1.100685, 0.746184, 0.488649]], "7865f7ec-bd8d-412f-815b-c3f9fca96a9c": [[-1.6406100000000001, -7.10543e-18, -0.221554], [1.6406100000000001, 3.1508, 0.221554]], "055b3004-35c6-46eb-98d5-fc442d86d504": [[-0.610001, -2.51172e-17, -0.41019500000000003], [0.610001, 0.3, 0.41019500000000003]], "7d0071e9-6efa-4642-ae9c-dccc6b487a2c": [[-0.20968599999999998, 0.0, -0.218296], [0.209676, 0.453604, 0.218296]], "9440e496-19f7-4338-8a61-96be22579aa4": [[-0.56, -9.47348e-06, -0.305], [0.56, 1.64567, 0.305]], "767fc66f-506b-4472-addc-d9d9aefd9999": [[-0.20103400000000002, -1.10016e-05, -0.19152000000000002], [0.20089500000000002, 0.49674, 0.191721]], "a14cc963-79d6-4475-a34e-69b8d729d149": [[-0.204314, -4.2803399999999995e-07, -0.204364], [0.204314, 0.444484, 0.204314]], "1efe7e95-cc20-467e-a3e3-abc002af67ce": [[-1.6021, -0.00033225200000000006, -0.560939], [1.60272, 1.09612, 0.5615760000000001]], "6e1223c3-1e6b-4c9e-82d2-9e643d9e344b": [[-1.1311010000000001, 9.900000000000001e-05, -1.149641], [1.131646, 1.027559, 1.149184]], "978dc980-b198-472f-b04c-cdacf7d0e968": [[-0.23756699999999997, -0.0, -0.245357], [0.237512, 0.863621, 0.24536999999999998]], "24ced1ae-9fa9-4e1a-8c42-5520f2f9e791": [[-0.245062, 0.0, -0.272893], [0.245008, 0.902976, 0.272894]], "6dffef54-d5d1-33e1-ae5b-6cf8883056ca": [[-0.296877, 0.0005099999999999999, -0.27949999999999997], [0.296879, 0.8723050000000001, 0.27949999999999997]], "4a4ea2f0-361f-4cfb-9c07-5605286acd58": [[-1.83864, -2.28362e-17, -0.374082], [1.8386500000000001, 2.3, 0.374009]], "272cd115-4eee-37ac-9591-19defec3bbe7": [[-0.762, -0.000241, -0.4572], [0.762, 0.7365999999999999, 0.4572]], "ef7265b7-0d1f-42a3-9924-333a9f57750a": [[-0.468061, -0.000982161, -0.467565], [0.468036, 0.872055, 0.467864]], "85a68385-4bef-4aa2-9469-eedff668a91a": [[-0.45759, -0.00044692999999999995, -0.0739142], [0.457644, 0.619881, 0.07422279999999999]], "54259cdf-cdd2-412e-b55c-50278de29519": [[-0.6611790000000001, -1.70918e-17, -0.296303], [0.6611790000000001, 1.92625, 0.296419]], "93614ac8-0595-4438-bbd3-036e474d56fc": [[-0.429332, -6.88687e-05, -0.37019399999999997], [0.429782, 0.7419150000000001, 0.370794]], "22d5e24d-7f06-4383-ab8f-25f9ee8d26d6": [[-0.6595, 0.0, -0.5], [0.6595, 0.29773700000000003, 0.5]], "2c964b30-47bd-4ed9-9e46-552401ec3281": [[-0.189393, 9.07135e-18, -0.19780999999999999], [0.189393, 0.50873, 0.19780999999999999]], "e8374f92-2606-49d0-9c09-52b03d16a163": [[-0.38935499999999995, 6.06903e-06, -0.39379600000000003], [0.38935499999999995, 0.733123, 0.39426900000000004]], "80908440-cf51-446b-b637-8ebd8ccc7f0f": [[-0.050148, -8.551150000000001e-05, -0.05], [0.0500694, 1.11785, 0.05]], "a8ae90b2-02a0-4bd9-9dd0-724fca3dce07": [[-0.562334, -1.7244e-05, -0.250083], [0.562334, 1.35578, 0.250083]], "07c890ef-e6f4-4739-bb42-ae9cc9dc3ade": [[-1.20934, -7.908379999999999e-05, -0.540664], [1.20886, 0.901713, 0.5414220000000001]], "b9328b70-0477-40eb-bb02-a0002db27381": [[-0.9, -3.05176e-08, -0.3], [0.9, 2.4, 0.3]], "6bbd394d-1962-4df5-9208-7c7703303e90": [[-1.17346, -0.000240173, -1.1273600000000001], [1.171, 0.9399120000000001, 1.12744]], "3f3b0d64-ba24-45fa-9a65-cb4255a9da63": [[-0.33518000000000003, 9.7e-05, -0.250878], [0.33518000000000003, 0.64878, 0.250878]], "519af9aa-1690-4e09-b741-928085fd2de0": [[-0.5781620000000001, -0.000869036, -0.244417], [0.578292, 1.0472700000000001, 0.24377600000000002]], "c98747ea-468c-464a-98a4-88cd67058776": [[-0.38289700000000004, 1.52588e-08, -0.471169], [0.382873, 1.07464, 0.47118499999999996]], "1397e7ab-a767-325d-a201-88639093e90f": [[-0.39193199999999995, -6.1000000000000005e-05, -0.269422], [0.39069499999999996, 1.304489, 0.2849]], "b76dcb44-579d-4f37-8ca4-8259ba37d6b8": [[-0.309461, 0.0, -0.32798099999999997], [0.309461, 1.178513, 0.32798099999999997]], "2aef1e27-cb69-4aa8-a81e-71e17c7dd2a4": [[-0.8, -8.08789e-18, -0.1775], [0.8, 0.849194, 0.1775]], "2a1d6ff4-f273-4bfd-be38-077294f17415": [[-1.41647, 3.65442e-17, -1.07457], [1.41661, 0.9902209999999999, 1.0747799999999998]], "cbd795e4-b7cd-46a7-808e-0dc74c669657": [[-0.133255, -0.000147075, -0.133212], [0.133213, 0.8390049999999999, 0.133214]], "73dfa548-b7af-4b1c-85e6-53769ccf9bff": [[-0.42838, -0.000299533, -0.275151], [0.42838, 0.050178900000000005, 0.275117]], "7f41377c-e9d3-4900-b280-7eec67bf13db": [[-1.49119, -1.3117299999999999e-17, -0.333278], [1.49119, 3.05528, 0.332833]], "4904e47a-a6fb-4432-857b-ef0effe9a515": [[-0.48517200000000005, 1e-06, -0.46523800000000004], [0.4852, 1.165546, 0.465188]], "1b30b6c7-b465-49d8-87e6-dd2314e53ad2": [[-0.323621, 0.0, -0.289007], [0.323594, 0.74185, 0.289007]], "03b5368e-9fec-30f5-941f-14906c0eb532": [[-120.0, 0.0, -120.0], [120.0, 75.0997, 120.0]], "55f0601e-a5eb-41be-a096-5b60aee05622": [[-0.956916, 1.9e-05, -0.203687], [0.956916, 0.438731, 0.203675]], "0da9753a-d2c8-4b02-9e7a-9fb3881f3c1d": [[-0.281364, 2.8557e-08, -0.295657], [0.281243, 0.957688, 0.29542]], "0435932f-1354-3393-9ad2-5ad495a5ab7c": [[-1.3962569999999999, 1e-06, -0.550855], [1.3888239999999998, 0.740992, 0.545501]], "438078a4-92a5-4248-a7ff-d5a46799b955": [[-0.47758, 0.0, -0.45342], [0.47751800000000005, 1.137286, 0.45368400000000003]], "63333ca2-b482-467d-a077-2846a157ae76": [[-0.219645, -7.32804e-05, -0.22040700000000002], [0.219711, 0.8118089999999999, 0.22040099999999999]], "4ba82cdf-553e-4548-9763-9e0e24d4105f": [[-1.09457, 0.0, -0.588963], [1.09457, 0.6310629999999999, 0.588963]], "a5c3bb2a-b632-4fa6-af1b-bf03eefb12de": [[-0.600153, 0.0, -0.19933199999999998], [0.600153, 0.8929600000000001, 0.19933199999999998]], "dc270f56-2ec4-48a3-a437-346647ed9799": [[-1.99826, -5.14963e-08, -1.00808], [1.99859, 0.920466, 1.00821]], "1bbfd20a-50da-44ea-936c-9518400ee666": [[-1.0253700000000001, 0.0, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "75f47372-de54-4ba1-99fb-f48347428072": [[-1.27125, -0.000137195, -0.457608], [1.2714100000000002, 0.6857179999999999, 0.45797899999999997]], "73d76c19-2e12-4efd-a0f3-7ffe054b881d": [[-0.6860120000000001, -7.62939e-09, -0.549067], [0.6860120000000001, 0.286369, 0.549067]], "65b78c55-ad57-3ede-86a5-8ad8dd04a413": [[-0.8173659999999999, -0.000146, -0.323761], [0.812449, 0.712541, 0.34029699999999996]], "0e13d9b7-7f11-3b4c-b59e-00b3de772847": [[-0.397892, -0.000234, -0.41795000000000004], [0.397892, 0.850989, 0.41795000000000004]], "65680246-0eaa-421b-a0eb-77c46c80d2dd": [[-0.314831, -5.11338e-05, -0.314732], [0.314831, 0.554134, 0.314732]], "40a838f9-b128-43bb-8f5b-ee5559ca0cbe": [[-1.146015, 0.0, -0.45158299999999996], [1.145977, 0.921436, 0.451584]], "bb605b9c-064f-4401-86c9-3c68d17dbb9c": [[-0.496533, 0.000325, -0.223991], [0.496533, 0.453817, 0.223991]], "cedee9b5-19e6-44c3-8c2a-50ada13aa222": [[-0.14954, -7.62939e-09, -0.14925], [0.149741, 0.717535, 0.14925]], "14ed8ed7-0511-418f-9d73-d3feadddb331": [[-0.5139130000000001, 2.0071699999999998e-17, -0.507545], [0.513316, 0.7948900000000001, 0.507205]], "9e3696ac-5f81-3648-b111-355bf479b22a": [[-0.595868, 0.0, -0.598485], [0.595868, 0.298768, 0.598485]], "283af5a6-560c-4331-bb2a-a02fa8a4e5e2": [[-0.49491799999999997, 0.0, -0.190335], [0.49363100000000004, 1.980305, 0.19913]], "ba647a44-7f7c-4844-b53f-85523db90589": [[-1.748473, 0.0, -0.40931399999999996], [1.747804, 0.8978919999999999, 0.409051]], "5b63924b-8323-4687-8f75-93f768e72628": [[-0.349848, 6.3e-05, -0.37697400000000003], [0.349839, 0.9201210000000001, 0.376846]], "9b686bf7-b0b9-4d4e-a160-fee03ebc0df1": [[-0.282744, -0.000302655, -0.27219899999999997], [0.282418, 0.291371, 0.27258]], "4600cfc3-cbea-40de-ba7f-3fbd4dfd4d56": [[-0.349878, 0.0, -0.33220999999999995], [0.349878, 0.564867, 0.33220999999999995]], "1219f514-b507-46e3-b331-1fb42aa00f12": [[-0.393147, 0.0, -0.30717300000000003], [0.393125, 0.954651, 0.307405]], "bec02087-aeef-4018-bd2b-90a141cf75d8": [[-1.1238299999999999, 1.4239e-17, -0.41284], [1.1238, 0.7510850000000001, 0.41342599999999996]], "79d5847d-6572-4912-8091-70b8e88e3af7": [[-1.0651739999999998, 0.0, -0.306191], [1.0651739999999998, 0.7884749999999999, 0.306191]], "008302cb-ff00-4f22-b076-044493a051a2": [[-0.680092, -1.77627e-17, -0.454911], [0.680092, 0.456627, 0.454911]], "2f0f9aab-258f-4be3-8881-0ddeada61e71": [[-0.245988, -1.48115e-05, -0.202003], [0.245988, 0.486631, 0.202261]], "3e08cbe7-87b9-45d6-80a4-0dfaee2b025c": [[-1.13434, -0.0022017300000000003, -0.497361], [1.13434, 0.816624, 0.49748600000000004]], "bb77b52c-806a-440c-bef2-dd11a69bce25": [[-0.467754, -4.80328e-05, -0.278075], [0.467749, 0.5633659999999999, 0.278208]], "a1373edc-fe7c-42de-a859-ed6e3ef88f24": [[-0.6, -2.53796e-07, -0.211931], [0.6, 1.37168, 0.211202]], "ce962157-8182-4d60-9d4e-5b6a35324d36": [[-0.887443, 0.00013299999999999998, -1.156267], [0.889363, 1.023887, 1.156267]], "562b0076-3ea9-4ad3-ba04-35e41d2bf8a2": [[-0.765, -0.000373535, -0.44], [0.765, 0.81, 0.44]], "f818405e-5146-4440-9e37-1e5af11da1a4": [[-0.315668, 1.0787500000000001e-05, -0.315705], [0.315516, 0.688688, 0.315033]], "0f995539-333b-4b7a-a327-fca47930b3e2": [[-1.3308600000000002, -4.1777300000000003e-17, -0.732992], [1.3308600000000002, 1.83923, 0.732359]], "9a88b82f-bc7c-4282-ae71-c91d58c07708": [[-0.6189520000000001, -4.5703899999999995e-05, -0.29154399999999997], [0.619655, 1.53059, 0.290972]], "13090815-9f7a-4150-a7a7-4108454f5251": [[-1.050254, 0.0, -0.706013], [1.050314, 0.7502800000000001, 0.706036]], "cac2df2b-5839-4b08-8212-2c07e14621e5": [[-0.32061500000000004, -0.00016494000000000003, -0.337132], [0.32054699999999997, 0.9610550000000001, 0.337406]], "69b9f034-c557-43e2-94bb-fd742cf57a77": [[-0.223942, 0.0, -0.223942], [0.223942, 0.513417, 0.223942]], "5f0baa1f-c6d6-46ad-98ec-18a50abb2572": [[-0.99032, -0.0, -1.072312], [0.99032, 1.3515190000000001, 1.072003]], "41c7740d-0c6c-45ee-8eed-81cea3e8ae8d": [[-0.26685, 0.0, -0.26685], [0.26685, 0.529769, 0.26685]], "34c387e7-626b-4b6b-9ccd-21f50ab1e1b6": [[-0.8267059999999999, 5.94692e-17, -0.9997050000000001], [0.8267059999999999, 1.1, 0.999948]], "90478bb5-a8c3-4136-9ff1-d05a9ca68f94": [[-0.6740389999999999, -3.92929e-08, -0.251633], [0.674025, 2.34085, 0.25163399999999997]], "e736b2f5-97bd-45cf-8406-20ef69f13f82": [[-0.896173, -2.0530100000000002e-05, -0.233125], [0.896173, 0.641169, 0.23326]], "97d2da13-f9ad-4b3e-ab62-f0ea0c7d066d": [[-0.266309, 0.0, -0.315124], [0.266309, 0.927825, 0.315124]], "76ceda99-95d4-4e9d-9ad2-54708629149f": [[-1.2000199999999999, -1.87971e-17, -0.5999680000000001], [1.2000199999999999, 0.750007, 0.5999680000000001]], "5421c4f5-2dff-4771-baa7-6f87450ae0df": [[-0.45400100000000004, -4.03161e-05, -0.43859099999999995], [0.453557, 0.84209, 0.438602]], "10346cd9-46b2-334d-88d4-a45e7abf35b6": [[-0.29133400000000004, -0.0015279999999999998, -0.279427], [0.29133400000000004, 0.692615, 0.27855599999999997]], "6a0b1a22-b45e-4dd0-869c-8ccea4fa6950": [[-0.24032399999999998, -1.4837399999999998e-17, -0.225], [0.24032399999999998, 0.499127, 0.225]], "60b455d4-974d-433e-b9e8-9c476e12d51d": [[-0.975754, -7.62939e-09, -0.24449200000000001], [0.975754, 0.66863, 0.24449200000000001]], "025c16c8-6ce7-4eb5-8817-2f299f4bad84": [[-0.7431329999999999, -4.15863e-05, -1.10863], [0.743032, 1.47466, 1.10859]], "c297b5cb-8b18-4504-96c7-921d9b7e8d4c": [[-0.287661, -6.86798e-18, -0.152556], [0.287661, 1.13487, 0.152577]], "52222b25-3e02-470b-885b-192d125ed738": [[-0.377218, 1.18268e-17, -0.207241], [0.377218, 0.502166, 0.207241]], "50fc4654-7e22-3590-8ca4-651e29e5932b": [[-0.273868, 7.2e-05, -0.292177], [0.27378399999999997, 0.9810639999999999, 0.294057]], "5149c843-f441-4589-a67f-e6ac7caf021e": [[-0.412906, -1.21797e-17, -0.34604], [0.412906, 0.97084, 0.347193]], "2cf92156-35ee-45ea-9555-7883f374768f": [[-0.331181, 0.0, -0.257618], [0.331181, 0.685323, 0.257481]], "633e5cca-018a-4867-9531-c8c677f4f4d9": [[-0.327224, -0.000460302, -0.334259], [0.32646200000000003, 0.918121, 0.33406399999999997]], "dccd8ba3-c605-4e90-8984-bd3708e4c25a": [[-0.552689, -8.3101e-06, -0.552932], [0.552689, 0.390573, 0.552932]], "245bf1c1-0c77-4285-b511-cf1599ba7c80": [[-0.662328, -9.24404e-18, -0.16483], [0.662328, 0.935096, 0.16483]], "b1c4d578-d985-415e-9a64-f100a2f88227": [[-0.372381, 0.0, -0.399526], [0.372381, 0.45771500000000004, 0.399526]], "5a916a3d-2f7c-3b5f-bd9e-e1f7e51961d1": [[-0.308717, -0.001933, -0.321094], [0.308847, 0.703471, 0.336904]], "383d59b5-ad3d-482a-bf2a-cb6570540b27": [[-0.549058, -2.5444599999999998e-17, -0.417238], [0.548728, 0.300015, 0.417254]], "6fd571b9-2b81-4c58-9023-556628ecfdde": [[-1.3434719999999998, 0.000114, -0.49359299999999995], [1.3434719999999998, 0.944102, 0.492599]], "39f28ac7-48be-4fb2-8946-da2130961431": [[-0.289058, 0.0, -0.316577], [0.289058, 1.1487479999999999, 0.316543]], "d974808f-866f-4ae1-94c9-2ee7b8c5cd1e": [[-0.240335, -0.00011819100000000001, -0.24023], [0.24022300000000002, 0.5567150000000001, 0.240321]], "fe280494-8346-47c2-a1f5-74dcd5952213": [[-0.642189, -0.000443207, -0.47286700000000004], [0.6421129999999999, 0.832665, 0.472787]], "01801792-d4b6-4219-902b-8d203e297c70": [[-1.20254, 1.1158000000000001e-07, -0.39922199999999997], [1.2027299999999999, 0.838528, 0.39919899999999997]], "65d12783-db5b-30ec-843c-eef40abff476": [[-0.49648899999999996, 0.0, -0.383692], [0.49648899999999996, 0.846228, 0.382808]], "83b4faf6-2aed-485c-ab1d-457848bea4eb": [[-0.318005, -7.59187e-05, -0.309988], [0.317851, 0.7492719999999999, 0.31021899999999997]], "8cda3266-955e-4d6a-948f-ab23d4237cd7": [[-0.590229, 6.40714e-08, -0.284211], [0.590222, 1.3728, 0.284205]], "0f492e81-8540-4b4c-a481-c526bf75fd80": [[-0.999811, 1e-06, -0.387539], [1.000029, 0.823708, 0.387764]], "6c396365-d75c-4f31-b14c-1a96e88261dd": [[-83.3936, -0.0001, -30.996], [83.3935, 223.8542, 30.9959]], "5f153b6b-3dd9-4068-af5e-d9d847f1d51a": [[-0.9687309999999999, 4.7240700000000006e-07, -0.40716500000000005], [0.968763, 0.791012, 0.40740099999999996]], "50c673fc-01db-47a3-8276-fd714922c1e0": [[-0.22859300000000002, -0.000430158, -0.229237], [0.22883900000000001, 0.45014400000000004, 0.22942099999999999]], "74d99874-a5a0-4b96-99b5-77308d71dae1": [[-1.06602, -0.000883695, -0.486168], [1.06705, 0.889681, 0.486563]], "6c411311-29e0-4111-8c91-46ff1d0f8f66": [[-0.374975, -8.748750000000001e-09, -0.367173], [0.37514800000000004, 0.8049850000000001, 0.367304]], "2be3d20a-f8b5-4d29-b821-8b00bd3e425c": [[-0.344985, 0.0, -0.348553], [0.34498399999999996, 0.756764, 0.348737]], "319bbcac-84a5-41c1-84ad-49b63b3f1ffa": [[-0.16447099999999998, 0.0, -0.16447099999999998], [0.16447099999999998, 1.1434739999999999, 0.16447099999999998]], "1a381855-0a6b-4283-981c-633d566f525c": [[-1.11622, -7.62939e-09, -0.470029], [1.1155, 0.7567579999999999, 0.469392]], "3abe9540-7459-4a1d-beca-ab678d7543b8": [[-1.1830100000000001, -1.28746e-08, -0.43113500000000005], [1.1829399999999999, 0.7312730000000001, 0.431495]], "0cc3d697-b060-4620-bd4f-f85cea2674e6": [[-0.641896, 0.0, -0.532719], [0.641895, 0.4986, 0.532719]], "b3451fff-be8c-4c0a-b653-0d767ffccedc": [[-0.34499, 0.000356, -0.366794], [0.34499, 1.035206, 0.366582]], "a6e20b78-6405-4afe-8c64-65bd57a3caff": [[-0.29699200000000003, 5.7999999999999994e-05, -0.228628], [0.297015, 0.574338, 0.228571]], "f3ee29d4-161c-4d52-b0a6-f92105c5f269": [[-1.03603, 0.00016315400000000002, -0.32710900000000004], [1.03603, 1.90633, 0.327557]], "9ff76d8d-af20-493d-a17c-a4aaaa94114a": [[-0.800566, -2.1743899999999997e-17, -0.4], [0.800566, 0.752691, 0.4]], "3a9e2767-188c-4413-8f74-215515befded": [[-0.479159, -1.81793e-17, -0.47653399999999996], [0.479159, 0.932305, 0.47653399999999996]], "9aa2d8a5-82f2-403d-89c3-1917dae9b46a": [[-0.718605, 0.0, -0.12867900000000002], [0.718605, 0.383717, 0.12867900000000002]], "cae612b3-ea54-4f07-9df3-47ef82aa2de8": [[-1.194508, 0.0, -0.468372], [1.193283, 0.9317350000000001, 0.469127]], "aba876cd-aed8-4bdb-956d-ca3e3946c3f8": [[-0.330781, 0.0, -0.213765], [0.330781, 0.6, 0.213765]], "4cda739c-8456-4437-ba83-e0b70c1f91c6": [[-0.7449250000000001, -5.48104e-17, -0.895121], [0.7449250000000001, 1.0672199999999998, 0.8951220000000001]], "2a1d5a51-7863-4b3d-80d0-2ada403f2ec5": [[-1.0, -3.0279199999999996e-09, -0.275], [1.0, 0.75, 0.275]], "04eeb551-05f3-4908-b820-c64d1f3ce63f": [[-0.885085, 0.0, -0.97614], [0.884996, 1.532584, 0.9753419999999999]], "742fc623-9841-304d-abde-52bc600a0311": [[-1.1, 5e-05, -0.55], [1.1, 0.7426609999999999, 0.55]], "e9851dbd-f6d9-49e8-a975-637b4e93f4d3": [[-0.299918, 0.000277, -0.299326], [0.29970800000000003, 0.654752, 0.299408]], "81b63911-a15d-421d-b400-bea2e1e094c0": [[-1.04, -2.66454e-17, -0.4825], [1.04, 0.7500020000000001, 0.4825]], "10922a21-0e57-4104-b368-ee425387dcbd": [[-0.666113, 0.0001243, -1.0349], [0.666751, 1.0888, 1.03494]], "bb80b7ef-b815-4ca0-a3d9-89658080cea8": [[-0.14998699999999998, -1.4147199999999999e-05, -0.149984], [0.15, 0.699465, 0.149925]], "1f9bcdf8-2390-4712-8bcc-66bfe526712f": [[-0.21238800000000002, -0.000192633, -0.240542], [0.21238800000000002, 0.847596, 0.240542]], "7b2a8853-5434-4ede-ba20-aa3f8375497d": [[-0.9550230000000001, -5.32261e-17, -0.8975449999999999], [0.9550230000000001, 1.11832, 0.8975449999999999]], "488c69db-0577-43b6-8824-93c1a9bf0872": [[-1.1022100000000001, 1.80021e-17, -0.303997], [1.1022100000000001, 2.66367, 0.303997]], "3f12b1c4-1723-349e-8a9f-bb946768d6d9": [[-0.874302, -0.000424, -0.502058], [0.802098, 0.684349, 0.463142]], "1bbfca9c-44d4-46c3-9dfa-0aa6d385ba24": [[-0.289284, 2.3e-05, -0.263345], [0.289215, 0.8126000000000001, 0.263358]], "335aeb92-efa6-4820-be2d-9fda6bb549ce": [[-0.325328, -0.00031773, -0.34206400000000003], [0.32462, 0.9396439999999999, 0.342269]], "1237d52e-316d-4a34-8a91-75c88560fc83": [[-1.18455, -1.52588e-08, -0.460826], [1.18456, 0.771451, 0.460938]], "d90a1757-89b7-4bb5-a281-8e643b4735fe": [[-0.210109, -4.2632599999999996e-17, -0.179429], [0.210109, 0.421386, 0.179354]], "2d22eef5-ddbd-47f9-9125-69d4678bfeb5": [[-1.102387, 0.0, -0.462459], [1.102387, 0.730558, 0.462459]], "cea9efce-7e04-438a-8e02-6d8b3431c526": [[-1.28001, -2.23496e-17, -0.320717], [1.27959, 0.721601, 0.435295]], "0b95bbad-ba8b-4a43-8636-e5c61cf3004b": [[-1.1405500000000002, -9.025959999999999e-05, -0.444074], [1.1403400000000001, 0.797324, 0.44402200000000003]], "05155dce-8942-441a-af37-1adc1866beab": [[-0.512905, 1.35372e-17, -0.265296], [0.512905, 1.85676, 0.265296]], "08f8b55d-deb5-3163-8d28-d1a0cde2be6d": [[-1.1000780000000001, 0.0, -0.529141], [1.1, 0.729991, 0.529138]], "105e7858-e3e9-4c72-a8ba-d3a97a910b81": [[-0.710018, -1.8770399999999997e-17, -0.325508], [0.710018, 1.9800499999999999, 0.325508]], "036460a8-4801-4d73-8e7f-39771c8ddcd7": [[-0.35832099999999995, -0.00109734, -0.361744], [0.358351, 1.0817100000000002, 0.36181800000000003]], "49a1cb9d-71c4-4e91-8fad-b4a963422c57": [[-1.9275, -9.25203e-18, -0.188913], [1.9275, 2.6, 0.188913]], "038b62bb-b277-4d92-8afe-3ff115add02c": [[-0.8683669999999999, 0.0, -0.37374], [0.8691530000000001, 0.8715430000000001, 0.37383099999999997]], "e02cad87-efc1-4bd2-986d-0f021dfd6dae": [[-0.30017499999999997, -2.3841900000000002e-09, -0.225175], [0.30017499999999997, 0.705, 0.225175]], "82639297-50b0-44e1-952d-7db272642f51": [[-0.34938899999999995, 0.0, -0.406289], [0.349615, 1.040963, 0.406638]], "6ead3dc4-3e24-3cb6-a47b-2dbb951fa42a": [[-1.1, -1.1000000000000001e-05, -0.351271], [1.1, 0.7575459999999999, 0.16564399999999999]], "6a8d0cad-c517-4c61-af05-d36f86cdf28a": [[-0.40407899999999997, 0.0, -0.5206580000000001], [0.40407899999999997, 1.196849, 0.5206580000000001]], "ed64ae66-3294-43a6-b94a-6912e770f5ed": [[-0.45000100000000004, 0.0, -0.225], [0.45000100000000004, 3.2, 0.225]], "f628bf7a-7101-4002-b13f-cb92e9ed4566": [[-0.603104, 0.0, -0.24699200000000002], [0.603104, 0.750001, 0.24699200000000002]], "7a1b1331-1c83-4a8f-b431-1a765f76fe17": [[-0.526463, 0.0, -0.8081740000000001], [0.524662, 0.982919, 0.8081740000000001]], "708a73d5-bbcc-418b-8c1f-b5812fb26b72": [[-0.755397, 7.25353e-08, -1.02366], [0.755397, 1.61916, 1.02365]], "236f857c-b77d-4f7a-9af8-c19fdd42b818": [[-0.41828499999999996, -5.4018e-05, -0.27516999999999997], [0.418311, 0.050000499999999996, 0.27516999999999997]], "25952ded-b344-3078-90a2-1726657ed542": [[-0.6096, 0.0, -0.2159], [0.6096, 1.0922, 0.23897]], "8bf54b30-9829-441a-9a79-f17648f0966b": [[-0.23654399999999998, 1.2033e-07, -0.26339], [0.23654399999999998, 0.7128650000000001, 0.26339]], "818123a5-0874-48cc-a71a-f314afa39ded": [[-0.303645, 0.0, -0.31488900000000003], [0.303929, 0.587045, 0.314905]], "30e7d74d-1989-4cab-b5a3-d4345c9654e7": [[-0.355877, 0.0, -0.215152], [0.355877, 0.482999, 0.215152]], "84ed4a5a-516a-4294-bde2-9042c05c6394": [[-0.9046540000000001, -3.05176e-08, -1.0371299999999999], [0.9046540000000001, 1.07279, 1.0371299999999999]], "98b7ef33-70f7-472d-8787-f4c97bd1cacb": [[-0.309895, 0.0, -0.37101399999999995], [0.309895, 0.85518, 0.371028]], "85f69b12-395c-3f6c-b363-75a2f1c076be": [[-1.387245, 1e-05, -0.542538], [1.388727, 0.723089, 0.538308]], "fe08bbed-0cf5-48eb-8d21-6590797cfc51": [[-0.100469, 0.0, -0.10041800000000001], [0.100474, 0.875901, 0.100496]], "54aac193-b73b-4c2d-aaa7-ba78c974318f": [[-1.5019999999999998, -1.2277099999999999e-17, -0.22], [1.5019999999999998, 0.44000100000000003, 0.22]], "1261c3e5-9d31-4474-abe5-da2c1668ef63": [[-0.22708899999999999, 0.0, -0.176727], [0.22708899999999999, 0.60005, 0.176727]], "f6c5cf11-b40d-4a27-9c78-72590409b626": [[-0.38671700000000003, 0.0, -0.36798299999999995], [0.386751, 0.778464, 0.368123]], "60b72399-743b-49b9-b31f-6b37e77d8f46": [[-1.2659, -1.02386e-17, -0.21730899999999997], [1.2659, 0.342611, 0.21730899999999997]], "75c0391d-61cf-449a-9a09-b1550c8b5cd6": [[-1.71839, -0.00018925799999999998, -1.20249], [1.71904, 0.889014, 1.20194]], "01c82c34-119d-4401-b403-44d0e2aba10f": [[-0.407645, 0.0, -0.6584180000000001], [0.407731, 0.907088, 0.6577630000000001]], "7f46b3b8-53a0-4f49-bb8f-599df2f2bf2e": [[-0.7248359999999999, -4.3165e-06, -0.325912], [0.724525, 1.26596, 0.325912]], "b0a8e58a-bc9b-4720-88ed-3b99d53c6659": [[-0.18342, -0.0, -0.18342], [0.18345099999999998, 0.443301, 0.18345099999999998]], "40c746f7-2f0b-4dab-9463-73c259a8f3a3": [[-0.641928, -4.62532e-08, -1.08885], [0.641928, 2.08556, 1.08843]], "887b77fe-65db-4e9e-b8e9-363d7867a82c": [[-0.6796639999999999, 0.0, -0.193472], [0.6796639999999999, 0.6818559999999999, 0.193472]], "b9693b42-f08e-4d71-b48e-fb10c285ad04": [[-0.42897599999999997, 0.0, -0.372639], [0.42897599999999997, 1.15248, 0.372639]], "22daa173-eebd-4d39-a8e1-4711c0bf3cd6": [[-1.2976599999999998, -0.00056611, -0.386629], [1.29794, 0.638471, 0.386102]], "72ccb288-b208-306e-bb02-0f0ca9ea5cd1": [[-1.269444, -0.0, -0.5343589999999999], [1.2694400000000001, 0.743703, 0.5343589999999999]], "0df956c5-ee8f-4659-8b97-d29f27409f97": [[-0.82994, 0.0, -0.511204], [0.82994, 0.56473, 0.511204]], "fa4abf12-84e1-4292-ab38-613905b360ef": [[-1.073594, 0.0, -0.217359], [1.073594, 0.796795, 0.217359]], "cab1a6c3-27ae-4914-952f-0c258556b2f0": [[-0.78, -6.76387e-08, -0.389617], [0.78, 0.8371569999999999, 0.389461]], "03329697-7726-41f8-948f-9607d0c61fac": [[-0.75, -1.52588e-08, -0.2], [0.75, 0.999359, 0.2]], "514b1311-3eda-4edd-9b51-b26f24778765": [[-0.614448, 7.53811e-18, -0.256115], [0.614627, 0.890064, 0.256115]], "3e7893eb-8ffb-421f-b56a-f64f0ce633cd": [[-0.24045100000000003, 0.0, -0.200476], [0.24045100000000003, 1.0505719999999998, 0.200476]], "1805382c-8d97-452a-b546-59fdd5ddfeeb": [[-0.256114, -2.3423200000000003e-05, -0.269154], [0.256172, 0.851062, 0.269555]], "12fb2134-8c4b-42ba-85ee-6854e7d3d944": [[-0.8792319999999999, 0.0, -0.711496], [0.879676, 0.7291219999999999, 0.711829]], "b3f647e4-c603-40ac-97b0-0755fe41cfed": [[-1.0865770000000001, 0.1, -1.0856000000000001], [1.086327, 0.869927, 1.084691]], "92088ec8-a0cc-488f-97c2-852b8ff9a782": [[-0.44957, -1.54755e-17, -0.449844], [0.44957, 0.742685, 0.449844]], "ce2ff684-6d76-409d-82fc-75a204afe64c": [[-0.5046050000000001, 0.0, -0.5046050000000001], [0.5046050000000001, 0.695008, 0.5046050000000001]], "4cf7c692-d5bf-326e-8e75-47d726b1c865": [[-1.501607, 0.0, -0.550018], [1.501607, 0.736847, 0.550012]], "83f0d0c1-9a17-4c56-aea4-21c5183346fb": [[-0.34169400000000005, -5.30288e-05, -0.345881], [0.341357, 0.6483450000000001, 0.345766]], "0590988e-aad9-39e2-b613-b9787ecdfa52": [[-28.6748, -0.0001, -38.0434], [28.6748, 76.0502, 38.0434]], "27d38363-b33d-4708-8873-f4a4bbafdada": [[-0.686636, -6.34947e-17, -1.18763], [0.686864, 1.09703, 1.1878]], "43011bff-ea0d-4285-9d31-fc8c3a028f3f": [[-0.755903, 1.3e-05, -0.36936199999999997], [0.755981, 0.9399550000000001, 0.36936199999999997]], "4994ac08-4716-4741-a656-fec52f79eec6": [[-0.98119, 0.000388, -0.46226799999999996], [0.98119, 0.9931610000000001, 0.46226799999999996]], "75dabced-9793-433d-916a-55c5b9c38fbd": [[-1.1088200000000001, -5.31321e-05, -0.308323], [1.10866, 2.29105, 0.308074]], "fcfb0c50-5a54-4249-964c-4b8742a0665f": [[-0.40997799999999995, -0.00150457, -0.40901400000000004], [0.40997799999999995, 0.09428660000000001, 0.40901400000000004]], "9270706c-a301-46e9-b3d0-59b14ea3a085": [[-0.7248730000000001, 0.0, -0.278857], [0.7248290000000001, 0.603895, 0.278857]], "4030b471-a352-40f7-9740-66c167f6a913": [[-0.620614, 0.0, -0.292818], [0.620614, 2.166773, 0.292818]], "17e325e5-1142-424b-9b11-c782aed19521": [[-0.744067, 2.77355e-08, -0.188623], [0.7440680000000001, 0.855317, 0.188623]], "61e113b3-9ce5-4a0e-aa18-9ea2f16227de": [[-0.266905, 0.0, -0.26682300000000003], [0.266905, 0.560573, 0.266905]], "069c9c06-cec6-456b-b07d-d668ba08e7ea": [[-1.40129, 0.0, -0.565922], [1.40129, 1.015746, 0.565922]], "651e9c46-e4a8-455d-9f69-be7f4ce3a422": [[-0.6142369999999999, -2.28882e-08, -0.380906], [0.6142369999999999, 2.01988, 0.380901]], "379208b1-ff08-4d11-8339-a312bd89b4d5": [[-156.427, 0.7553, -30.5078], [156.427, 221.7545, 30.5078]], "af0390e5-fbb4-4101-9fdf-947d29cda0f6": [[-1.21689, -0.00014080199999999998, -0.401397], [1.2169400000000001, 0.812161, 0.401899]], "5b39f3f5-4c1a-4918-98cf-681bae59b4ea": [[-1.10202, -1.1630400000000001e-17, -0.259059], [1.10202, 0.642158, 0.259059]], "2ca37f42-1da9-4906-9862-8cfcfbc114eb": [[-0.6245689999999999, -1.21828e-17, -0.243123], [0.623908, 1.70232, 0.24145]], "15b94a23-059b-4c12-98f8-bd651083d20f": [[-0.466959, 6.8e-05, -0.20759899999999998], [0.467152, 1.126669, 0.20785299999999998]], "ed8f82db-c301-4b62-b9b3-90bdd40d0abd": [[-0.55, -2.5618599999999997e-06, -0.15], [0.55, 0.449995, 0.15]], "632e645f-97dd-4987-aef0-65a8ea2d3c59": [[-0.7260179999999999, -0.0, -0.160756], [0.7260179999999999, 0.736489, 0.160756]], "3ba3274c-7449-463e-ba32-09f4186b7bbf": [[-0.50189, 0.0, -0.50189], [0.50189, 0.45197499999999996, 0.50189]], "3a3667c5-effe-49b1-bff3-e5df44fd4e9e": [[-0.34295200000000003, 3.3250999999999995e-07, -0.343279], [0.34295200000000003, 0.859221, 0.342908]], "205aca9c-7f0e-4eeb-a80c-31efe81f6951": [[-0.29928899999999997, 0.0, -0.217743], [0.29928899999999997, 0.48043199999999997, 0.217743]], "2752314a-8936-4470-a1a0-5a90afb2e113": [[-1.03296, -0.000134736, -1.04789], [1.03288, 0.98602, 1.04738]], "4e796b2d-ccc7-442e-b482-eab901f3bf0b": [[-0.7499979999999999, -1.9645000000000002e-05, -0.34999899999999995], [0.7499979999999999, 0.723861, 0.34999899999999995]], "d52d512c-981e-48dc-a742-c93bfc57236f": [[-0.312462, -8.07621e-05, -0.31986000000000003], [0.312433, 0.81077, 0.319169]], "d8f932e5-b24e-49d9-9b9d-dbedd089627c": [[-0.48621000000000003, 0.0, -0.43408599999999997], [0.48629199999999995, 0.809268, 0.434245]], "fe245dee-141a-4d1b-a68f-64bf038d142a": [[-0.35975999999999997, 1.3122599999999999e-06, -0.0831937], [0.35975999999999997, 0.262975, 0.08326449999999999]], "3826da77-490e-47dd-ab86-eff80e251f15": [[-0.340845, -0.00026200700000000003, -0.25459], [0.34084600000000004, 0.7198829999999999, 0.254711]], "22e2d45a-0854-4bec-b9f6-271223d321a1": [[-0.165363, 1.8107e-18, -0.165244], [0.16519899999999998, 0.7184579999999999, 0.16469699999999998]], "6d7f6215-768a-431e-9e2a-29a66bcceee8": [[-1.02494, 1.52588e-08, -1.4621899999999999], [1.02746, 1.18934, 1.4621199999999999]], "69c5c5df-0514-4e6c-ae3e-4c307ed01dbb": [[-1.1276000000000002, -3.30199e-08, -0.25949300000000003], [1.1276000000000002, 0.469064, 0.25949300000000003]], "5e9edd5e-2c35-409a-8865-51cc243a31f6": [[-0.69, -9.18485e-18, -0.15], [0.69, 2.8, 0.15]], "55560a81-bb16-47d5-bb6a-5c17b3312887": [[-0.399831, 0.0, -0.20638600000000001], [0.399831, 0.9816750000000001, 0.206155]], "164dd95b-fd2d-495d-a1a0-6f80c02dd295": [[-0.274005, -3.3378600000000003e-09, -0.274005], [0.274005, 0.254344, 0.274005]], "ae2990ca-afe6-4bf7-8b78-f6609dcdd53d": [[-0.18709900000000002, 2.90874e-08, -0.182721], [0.18709900000000002, 0.896418, 0.182721]], "e9edec64-5668-40c2-a4dc-378a36d7a11d": [[-0.502938, -1.44338e-17, -0.23964400000000002], [0.502938, 2.0308699999999997, 0.23964400000000002]], "0115036f-8abc-4cc5-99a3-d8607500d213": [[-1.21686, -0.0016202, -0.713589], [1.21686, 1.97839, 0.7132689999999999]], "459e687e-e452-42b0-9c30-896d97bd545a": [[-0.260239, -7.27308e-05, -0.23758400000000002], [0.260257, 0.654327, 0.23755400000000002]], "6b937749-c0d6-43fe-948c-efdf0c8fb3fd": [[-0.335484, -2.0542499999999997e-17, -0.335484], [0.335484, 1.10878, 0.335484]], "311ff139-b90e-42cb-9ef6-bb95f6567ca7": [[-0.9763200000000001, -1.90402e-17, -0.38025], [0.9763200000000001, 2.70432, 0.38025]], "94b58384-4db8-4abe-b63f-dc40f15aa0f0": [[-0.547816, -1.51809e-17, -0.37428400000000006], [0.547816, 0.363089, 0.37428400000000006]], "adcb0f68-b3c7-4a92-8cc1-430e17de2581": [[-0.296549, 0.0, -0.317134], [0.296549, 0.425613, 0.317134]], "70c8a0f7-6c69-4a7c-addf-d4ebc60c4634": [[-0.217501, 1.83638e-08, -0.201543], [0.217501, 0.784461, 0.201543]], "3e5f007f-3630-4ef8-a5df-5effdd975c3d": [[-0.27073, 0.0, -0.24404], [0.270672, 0.711735, 0.24407299999999998]], "48a77f0c-62cf-40d1-b617-587e30b4efbc": [[-0.940423, -6.3643e-17, -1.0454], [0.9404089999999999, 0.9457070000000001, 1.0454]], "729a0bf7-9d4a-4ccc-9363-e6a664f94b74": [[-0.825089, -1.35396e-17, -0.221121], [0.825089, 2.35596, 0.221121]], "6b1f181e-85a9-48be-9464-2004e13afee4": [[-0.359731, 0.0, -0.39256599999999997], [0.359717, 0.884212, 0.392571]], "b99335b6-10e9-471d-acf1-e167ef80419e": [[-0.806049, 7.000000000000001e-05, -0.414812], [0.8063420000000001, 0.7092100000000001, 0.414871]], "e83af0bc-9f76-423c-a25b-1615a7f4384e": [[-0.296421, 9.28152e-06, -0.133955], [0.296667, 0.7574209999999999, 0.133922]], "9e458241-6611-4562-b5ac-99b9b74e8c54": [[-0.5852879999999999, 1.14441e-08, -0.529232], [0.58528, 0.793248, 0.529225]], "5093bc68-5db7-44e3-9ecd-83a593d8731a": [[-0.129135, 0.0, -0.063227], [0.129135, 1.528621, 0.063227]], "d71052d6-5d86-4bf7-b8f7-023f8b5e4dcd": [[-0.351852, 0.00016642799999999999, -0.363151], [0.35185299999999997, 0.888069, 0.36324599999999996]], "56906fc2-4c27-4c13-ab5f-bf7b562e4b2c": [[-1.117021, 0.000124, -0.40216], [1.117197, 0.858318, 0.402351]], "66f2d4ab-20a3-47df-addc-480a83bf5289": [[-0.25235199999999997, -1.50979e-17, -0.25228100000000003], [0.252327, 0.356368, 0.25231200000000004]], "b390b695-5ce3-4de7-9753-ca4b45fde3bf": [[-0.22665, 0.0, -0.226737], [0.22665, 0.516047, 0.226737]], "844217fb-83bf-4bf7-88b3-a100dd883fbe": [[-1.51875, -7.62939e-09, -0.584139], [1.51993, 0.937261, 0.584279]], "3dad6ea4-9cda-4209-8edd-7bb86a12cf27": [[-1.2, -2.19042e-08, -0.235], [1.2, 0.45, 0.235]], "183da335-3641-49c3-92c6-6d3bde30c4db": [[-0.799693, -0.00010007000000000001, -0.989375], [0.80038, 1.2947499999999998, 0.989734]], "1f4e8069-2e33-4e84-ad66-10b30884120f": [[-0.358119, 1.6e-05, -0.403021], [0.358329, 1.0383769999999999, 0.403061]], "5bc7a57c-4c5a-4bfe-b377-2709bcd02a95": [[-0.300935, 0.0, -0.290229], [0.301145, 0.7902429999999999, 0.290407]], "43d8e4b4-c99f-47f8-abcc-50d1aae8d74d": [[-0.71, 1.36831e-10, -0.313715], [0.71, 2.34, 0.314145]], "f7aedd93-e069-46aa-9136-85ba2eacd672": [[-0.329484, -0.00144702, -0.38081499999999996], [0.32945, 0.813949, 0.38108800000000004]], "746f9f7e-b54a-4607-a3bf-07c91a397eb2": [[-0.267132, -0.000397754, -0.28607099999999996], [0.267056, 0.884212, 0.28557099999999996]], "71f48ed3-c9a2-4775-81f1-0561356178ad": [[-1.15301, 7.62939e-09, -0.42752], [1.1531, 0.727129, 0.428351]], "671f8ec9-9706-3118-83d3-2898f2e1e321": [[-1.0816729999999999, 1.3e-05, -0.443566], [1.11899, 0.8503189999999999, 0.496764]], "49b5e490-cc9e-44eb-a4ed-fde6117b58f8": [[-0.9754309999999999, -2.9655900000000002e-05, -0.37888599999999995], [0.97544, 0.7919759999999999, 0.37890500000000005]], "85fe41e5-2a19-4408-8724-eec2fb304450": [[-0.724615, 0.0, -0.24205500000000002], [0.724615, 0.6719310000000001, 0.24205500000000002]], "5d89b348-e093-44ad-a108-c8be4a30eadb": [[-0.173252, 0.0, -0.173252], [0.173252, 0.40871999999999997, 0.173252]], "6e8a38f2-26cb-3397-95e9-8ec3be0e7640": [[-0.796823, 0.020594, -0.26138300000000003], [0.793323, 0.761714, 0.27048500000000003]], "521b52b9-5024-4ecf-8fae-3a448c205686": [[-0.273306, -0.000334025, -0.234523], [0.273208, 0.727367, 0.23446]], "4bc0b1d1-ce6a-4b7b-8eeb-4da336ea53a7": [[-0.693942, -2.0389200000000002e-08, -0.387866], [0.693942, 0.731149, 0.387866]], "65e724c5-4988-448f-9587-29e78f6b65d8": [[-0.172394, 0.000132523, -0.172262], [0.17235399999999998, 1.0623399999999998, 0.17235299999999998]], "fc21d53d-30db-4a3c-a717-82359d2170e6": [[-0.30677, 8e-06, -0.29488600000000004], [0.306755, 0.736271, 0.294927]], "2dee0e1d-28b4-4f64-832e-783dc196b536": [[-0.629166, 0.0, -0.24034300000000003], [0.629166, 0.500494, 0.24034300000000003]], "7ccc7de8-b795-4a4a-b5a6-73101e0c6f61": [[-0.269485, 2.92525e-06, -0.248997], [0.269012, 0.9853770000000001, 0.24875699999999998]], "21da5026-5274-425d-b740-5278e69a8c26": [[-0.833935, -1.7821800000000002e-17, -0.292024], [0.833935, 2.3614599999999997, 0.292024]], "c20b7c71-59b4-4377-ae94-90fb68365a24": [[-0.267476, -0.00037583699999999996, -0.267736], [0.26756, 0.534582, 0.267887]], "1d9698ef-2edf-4398-946c-e24de4d33c1f": [[-0.301446, 0.0, -0.301446], [0.301444, 0.46753700000000004, 0.301444]], "cee47b9f-2746-44cb-b673-6ee8dd16a633": [[-2.0653200000000003, -9.51963e-18, -0.157468], [2.0653200000000003, 2.43811, 0.157468]], "b29b8ea2-c7b3-4c3d-8b8a-a6b99ca190f7": [[-0.659199, 3e-05, -0.35083], [0.658861, 0.398748, 0.350742]], "1a1c11a4-9c90-403c-b7cf-70ee73b58cdd": [[-0.8205079999999999, -4.82187e-06, -1.20917], [0.820807, 1.0021, 1.20939]], "46996477-2110-4bc7-8fdd-2538845e0940": [[-0.553974, 0.0, -0.43369599999999997], [0.553974, 1.194417, 0.43397399999999997]], "6fcfce03-f2c9-4927-97ae-364536d0083f": [[-0.289105, 0.0, -0.365789], [0.289105, 0.7818510000000001, 0.365789]], "89dad353-299a-4a67-8048-145ae09963cf": [[-1.37376, -0.000208706, -0.504393], [1.37376, 0.915882, 0.504437]], "f5c6c11a-9a55-4f98-ad3b-3f7614e8885b": [[-0.470394, 0.0, -0.469908], [0.470394, 0.8786069999999999, 0.469908]], "e53951ec-a58e-4058-b3c6-cd62debd8e23": [[-1.43602, -3.07051e-08, -0.194387], [1.43602, 2.54175, 0.1945]], "67755a6e-0332-4866-9744-60c6ca8b4683": [[-0.7529730000000001, 1.52588e-08, -0.24035900000000002], [0.7529720000000001, 0.921135, 0.240352]], "4bc7128b-c073-4a00-a1aa-2676d3024123": [[-0.600001, -2.75546e-17, -0.45000100000000004], [0.600001, 0.32, 0.45000100000000004]], "28e9a53d-28be-4d2f-bba1-6ef80204cd69": [[-1.719914, 0.0, -0.984106], [1.719914, 0.759917, 0.984056]], "63c2f8e2-08fb-41cb-bbcb-7e11ef5574ee": [[-0.24, 0.0, -0.132], [0.24, 2.5, 0.132]], "22eec0a9-17f7-3866-bddd-24099b98dfe8": [[-0.35417000000000004, -9.400000000000001e-05, -0.409426], [0.35417000000000004, 0.763004, 0.409426]], "181085d9-8598-45dd-8108-c9aa2f4bd2ee": [[-0.32177500000000003, 0.0, -0.345706], [0.321615, 0.664131, 0.345867]], "6fc09eec-2b2a-460d-ab3d-edde1f477712": [[-0.450803, 0.00029554799999999997, -0.457584], [0.451131, 1.17059, 0.458109]], "f97e8bb6-e442-498e-97b6-fd43d6c2f5f7": [[-0.75, 0.0, -0.145], [0.75, 1.7394999999999998, 0.145]], "5eb94ce4-d385-3587-8d65-5547d30f4ccb": [[-1.02001, 0.0, -0.35961], [1.02001, 0.822459, 0.359611]], "a0520a51-a1dc-4a46-93a0-dd8f326c7a55": [[-0.259816, -2.70203e-06, -0.259448], [0.25968399999999997, 0.42603700000000005, 0.259289]], "a4eb53e3-82d6-4be4-a0fe-f46827556022": [[-1.16497, -0.00078874, -0.45331299999999997], [1.16507, 0.8228650000000001, 0.45340899999999995]], "70795ab4-6613-4f2d-9010-b5c2e660982c": [[-0.365275, -5.273889999999999e-07, -0.37539900000000004], [0.365441, 0.798651, 0.376794]], "46508972-4b98-489c-b272-cbeab01eb6f2": [[-0.25087499999999996, 0.0, -0.28130299999999997], [0.25087499999999996, 0.9921909999999999, 0.281277]], "05d628ef-e510-4f6a-8862-ade7405dd3f4": [[-1.0882779999999999, 0.0, -0.206521], [1.0882779999999999, 0.8818269999999999, 0.206341]], "226446d4-031a-469f-8c9d-6a635847bb5d": [[-1.36605, -1.49727e-17, -0.30189699999999997], [1.36605, 2.18568, 0.30189699999999997]], "644b7f76-eb3e-49c8-ad9c-810fc403ea52": [[-0.31109000000000003, 1e-06, -0.33301499999999995], [0.311027, 0.763994, 0.33309399999999995]], "e2dcff66-7c81-4020-9cca-ac04b7af89bc": [[-0.866183, 2.00396e-17, -0.426038], [0.866183, 0.882843, 0.426894]], "23fc4096-69d8-45c9-9684-c8daa8774f2d": [[-0.388501, -1.51771e-05, -0.473012], [0.388541, 0.96312, 0.47302500000000003]], "29d59e13-e812-4d51-8a62-c575ef1e9458": [[-0.6457160000000001, 0.00015800000000000002, -0.470869], [0.6457160000000001, 0.453889, 0.470869]], "c5a7c8a3-61d3-4d03-9da7-0bf320879d7e": [[-0.318422, -9.97721e-18, -0.16494], [0.318422, 0.41, 0.16494]], "5004e8f6-326e-4e46-8581-ad88f55c25b4": [[-0.28196899999999997, -0.0, -0.28626999999999997], [0.28196899999999997, 0.94136, 0.28626999999999997]], "41743f1b-a039-47fb-9f11-d4048acdf0b2": [[-0.28537199999999996, -3.8147e-09, -0.28537199999999996], [0.28537199999999996, 0.142628, 0.28537199999999996]], "faa72f09-2f6d-4a10-9165-d54b491bf64b": [[-0.41234299999999996, 0.0, -0.46771500000000005], [0.412251, 1.178952, 0.467939]], "504e42cf-5a29-4c8a-b704-74074d2dbb35": [[-0.458887, -0.0007886379999999999, -0.45897799999999994], [0.45921799999999996, 0.816394, 0.458904]], "53d2904d-607a-450c-9b37-1b4af7b96127": [[-0.480582, 2.92849e-07, -0.567235], [0.480557, 1.22093, 0.567227]], "22efd2af-798e-4915-91c7-ab5aec1b56ea": [[-0.22179300000000002, 0.0, -0.22179300000000002], [0.22179300000000002, 0.5513859999999999, 0.22179300000000002]], "99bf7309-d542-4111-baf8-019506103c9f": [[-0.122256, 3.05176e-08, -0.177365], [0.122256, 1.73862, 0.177425]], "3f85c43c-b568-4e21-8c7f-7806e513c099": [[-0.6631910000000001, -3.8147e-09, -0.261767], [0.6627209999999999, 0.35767699999999997, 0.2618]], "64d5884c-7fa0-4f81-ac48-4d9f91585748": [[-1.0, -1.66227e-17, -0.32853099999999996], [1.0, 2.364, 0.328542]], "4086d2fc-35f3-4567-8126-297feba30c3a": [[-0.269282, 6.6173899999999994e-18, -0.10807], [0.269282, 1.8176499999999998, 0.10874299999999999]], "91c70485-7fbc-454c-93ce-124e59ffbdb1": [[-0.330392, 8.000180000000001e-05, -0.330392], [0.330392, 0.43866900000000003, 0.330392]], "f34f07c9-536e-4d87-90f8-b53b328f5d8d": [[-0.329073, -0.000157784, -0.329071], [0.32911, 0.40846200000000005, 0.32907800000000004]], "25a0d740-14de-4aef-bf40-a736d2801236": [[-0.216911, -1.63498e-05, -0.221574], [0.21706, 0.918013, 0.221375]], "43b8afbd-6b9e-4392-b363-dc09dfdc3473": [[-0.46635800000000005, 0.000101, -0.47415799999999997], [0.46627, 0.305609, 0.47421100000000005]], "7be1e3cc-8ff2-4699-a6c9-16b1934c5a76": [[-0.201727, -1.23879e-17, -0.202309], [0.201727, 0.140419, 0.202309]], "2b6fb0d5-2e87-495f-9abb-a6d1eccf5476": [[-0.683336, -8.0952e-09, -0.946712], [0.683336, 0.993148, 0.946674]], "18f5291b-1d9c-4c2c-adc7-1c3651f3f243": [[-0.413037, -0.0014269699999999998, -0.40775], [0.41387300000000005, 0.65577, 0.407462]], "43e21b57-c207-426e-b7d1-10442437d2e8": [[-0.248884, -1.06036e-08, -0.255878], [0.24867699999999998, 1.03513, 0.256598]], "65af4bae-9bdc-42aa-8128-63147895a6af": [[-1.3158830000000001, 0.0, -0.493855], [1.3158830000000001, 0.7229059999999999, 0.493855]], "9bac5014-a50f-4b3f-b78f-e9c13f28b761": [[-0.241067, -8.345e-09, -0.177817], [0.241067, 0.660578, 0.177817]], "769e8458-9d88-3154-a8c9-5a3b0b1da5d6": [[-1.002764, 0.0031940000000000002, -0.312313], [1.0053489999999998, 0.854824, 0.344964]], "a0019fb6-7b26-495d-aa1d-bae5fe684297": [[-0.4, 0.0, -0.128155], [0.4, 1.030316, 0.128155]], "d9014fde-0cf1-4874-ae26-433add1d7c3b": [[-0.307637, 0.0, -0.299344], [0.307637, 0.48929900000000004, 0.299344]], "6895b871-ab6f-4abb-b45e-0e33abb6b7fa": [[-1.078523, 0.0, -0.392853], [1.078557, 0.8018460000000001, 0.392835]], "660ba44e-3831-49ae-915a-6d9ae3d52a10": [[-0.7838290000000001, -7.19298e-05, -1.02646], [0.784605, 1.3415899999999998, 1.02655]], "48d2dfa5-55dd-408f-a33b-4a085742e055": [[-0.686752, 2.1373999999999998e-07, -1.14187], [0.686752, 0.846143, 1.14204]], "d7d12035-4747-4d6a-add4-2fc07f944792": [[-0.915809, -0.00101824, -1.05795], [0.916945, 1.04393, 1.05871]], "ce3dc75e-fad6-4a49-bcd2-b76a92a056c6": [[-0.538614, 0.000431, -0.44583599999999995], [0.538614, 0.804577, 0.445726]], "77547de9-6416-30c5-a590-bec3aa10b7d9": [[-0.352603, 0.0, -0.452572], [0.34472499999999995, 0.839209, 0.323337]], "dd945004-8d4d-45d0-908f-3ff3bd97f9ef": [[-0.134975, 0.0, -0.13494899999999999], [0.134975, 0.420206, 0.13494899999999999]], "4ae32ad4-fb77-4180-ae97-9fc8293e3029": [[-0.249274, -8.42706e-18, -0.200098], [0.249274, 0.7615179999999999, 0.200172]], "41b538ee-8789-4275-9bd1-98a563722dea": [[-1.276816, 0.000146, -0.728198], [1.277645, 0.754849, 0.727676]], "0fb022ab-d0ba-4048-a3bd-9fc76b6d95f0": [[-1.1095789999999999, 9.2e-05, -6.821396], [0.490421, 0.442381, -5.881396]], "781d8496-b299-3333-b2ca-29c5d425567d": [[-1.219422, 0.0, -0.38626], [1.18621, 0.624579, 0.46848]], "e933e573-f34e-4949-94bd-7113a37a731b": [[-0.245719, -0.0, -0.183353], [0.245791, 0.395245, 0.183354]], "ee4276f9-d7fd-4dbf-8eda-840f9ad597b1": [[-0.454245, 0.000112881, -0.495978], [0.45431, 0.89217, 0.496038]], "bac97278-657c-4254-bf42-2c9e5bd3636d": [[-0.223888, -1.00346e-05, -0.22397099999999998], [0.22405, 1.0445900000000001, 0.223919]], "f2f69e20-cd92-422b-b4be-366d6339b1be": [[-0.621899, 7.62939e-09, -0.20552499999999999], [0.621899, 0.88375, 0.20552499999999999]], "b786764e-9230-4f1d-b462-fb6ff5c669b7": [[-0.293633, 1.22464e-17, -0.20000099999999998], [0.293633, 0.4, 0.20000099999999998]], "67a54e6d-5866-4ebb-8f4e-2315939d005c": [[-0.251934, 0.00141632, -0.245457], [0.252305, 0.886101, 0.245942]], "ed492c97-a9dd-4239-a5f1-c044b3ae4fc4": [[-0.22164999999999999, -7.85874e-18, -0.163111], [0.22164999999999999, 0.30618, 0.163111]], "466dafa1-fdad-4dcc-84b1-308b3684b685": [[-0.290194, 2.3999999999999997e-05, -0.334758], [0.290195, 0.71237, 0.335327]], "677c83ec-7de6-4d7a-a26a-43af7906c9f2": [[-0.37203400000000003, 6.49027e-08, -0.201296], [0.37203400000000003, 0.272313, 0.201326]], "07be7bf4-c318-4055-9272-c47e5ab532bf": [[-1.0589140000000001, 0.0, -0.44241100000000005], [1.058784, 0.919125, 0.442464]], "47d4bcfd-a8ab-4439-a704-1b85eb90c06d": [[-1.028111, 0.0, -1.199518], [1.028111, 2.350438, 1.199455]], "22c76adf-5cc5-4e19-b56a-777900040d76": [[-0.582067, -6.13836e-18, -0.10278000000000001], [0.582067, 1.40961, 0.10278000000000001]], "61f6269f-d4fb-496f-b18e-c565316b6a41": [[-0.65, -1.52588e-08, -0.1315], [0.65, 0.75, 0.1315]], "223ac9d9-7ed0-4376-aeb8-ecf31d563d61": [[-0.613302, 0.0, -0.42314100000000004], [0.613302, 0.565603, 0.42292900000000005]], "668a26bd-243c-4dec-8f48-29dea4ba6522": [[-0.7308920000000001, -1.17343e-05, -1.14217], [0.7308910000000001, 1.02213, 1.14199]], "7fbf9b07-66e2-4888-812e-9830e73ec213": [[-1.43866, 1.46303e-08, -0.531156], [1.4387200000000002, 0.765218, 0.531507]], "5e6ab4d2-68c4-4adf-9254-0774692b5683": [[-0.252544, 7.00341e-07, -0.237888], [0.25255299999999997, 0.477841, 0.237888]], "0de33085-3bde-4f50-b924-c9b1085fdadf": [[-0.359293, -0.000526986, -0.381836], [0.35916899999999996, 0.774739, 0.383013]], "2094694b-d636-4cf5-9242-332a67020a98": [[-1.307834, 5.999999999999999e-06, -1.116638], [1.307834, 1.210292, 1.115333]], "1b90c04d-6f39-3ad6-a557-c0819ba30f81": [[-0.772719, 0.001225, -0.345131], [0.7727200000000001, 0.6222420000000001, 0.343197]], "8c6f3610-97de-4ece-8c78-809f3574746f": [[-0.25569400000000003, 0.0, -0.201101], [0.25569400000000003, 0.432821, 0.201101]], "2634aa6d-fa1a-4440-b2e2-0f19c0fff124": [[-0.3, 0.0, -0.299773], [0.3, 0.728349, 0.299773]], "77e158c9-f444-4929-8c21-37c03de0fe2e": [[-0.567824, -6.52119e-17, -1.0728199999999999], [0.567866, 0.793723, 1.0729600000000001]], "d789df37-8549-4b60-8992-4b44e698c17a": [[-0.341525, -0.00015338100000000001, -0.35970799999999997], [0.3417, 1.06968, 0.35942799999999997]], "7bd3ed94-ca36-3166-8d5c-e536b2f2a931": [[-40.9268, -0.0003, -41.5354], [40.9268, 93.3087, 41.5247]], "42542349-bc25-4b1b-9034-78fb9c905433": [[-0.446126, -0.0012617999999999998, -0.44310099999999997], [0.446126, 1.0604500000000001, 0.442382]], "654a82af-b367-4d52-a7f1-d1c2782fe3ea": [[-0.7817310000000001, -0.0, -0.5705250000000001], [0.7817310000000001, 0.38707500000000006, 0.5705250000000001]], "82838375-1b97-4cb0-902e-e978b528e317": [[-0.265658, 0.00108288, -0.265658], [0.265658, 0.64898, 0.265658]], "d48cb594-5258-4539-be4b-2889783cb0eb": [[-0.275463, 0.0, -0.275196], [0.275463, 0.538548, 0.275196]], "ae8020c8-8084-40f4-baac-af8ae542aaaf": [[-0.8775350000000001, 0.0, -0.241495], [0.8775360000000001, 0.5577920000000001, 0.241842]], "3f6ba2ee-005d-40a5-8e47-3968a508023c": [[-0.699924, 1.52588e-08, -0.699962], [0.699924, 0.740544, 0.699962]], "7d8c51c1-8ce4-4c6d-8451-db5255a46703": [[-0.974549, -6.63625e-17, -1.23034], [0.974644, 1.1767100000000001, 1.2303600000000001]], "05ed4b24-6e66-427f-9c2c-7b429a5807fd": [[-1.673014, 0.0, -0.503654], [1.672542, 0.9246909999999999, 0.503727]], "b44fb0c2-e3df-4ba4-b541-ff9678dca836": [[-0.202398, -7.73919e-18, -0.20274599999999998], [0.202398, 0.445645, 0.20274599999999998]], "5dc90d8b-ded9-406b-a1a5-33eb6064a3de": [[-1.21266, -4.2977500000000007e-05, -0.388637], [1.2132800000000001, 0.8551340000000001, 0.388847]], "c79dc60a-0b18-44f8-b73c-6351917ca0e0": [[-0.417491, -5.802649999999999e-06, -0.312404], [0.41714, 0.600236, 0.312994]], "48180489-7bc0-4f98-b51d-f047f8b5f7ee": [[-0.495407, 0.0, -1.2007240000000001], [0.49579300000000004, 1.072805, 1.2007240000000001]], "27efb948-15fb-4820-bb45-f0ac1098bdd3": [[-1.30109, -1.58174e-17, -0.315892], [1.3011000000000001, 2.7879899999999997, 0.315909]], "7f9b80ca-50eb-450f-af3a-a0838bb5abad": [[-0.18544899999999997, 0.0, -0.33551499999999995], [0.18544899999999997, 0.556664, 0.33551499999999995]], "4f5f4392-8808-438e-84fc-517f12f50d2e": [[-0.984267, 0.000937, -1.1105800000000001], [0.984267, 1.422096, 1.1105800000000001]], "ca1d65c5-54db-4d01-bc28-df170d83aec3": [[-0.77971, 0.0, -0.238007], [0.77971, 0.389834, 0.237865]], "81e24ee8-39e1-3831-97a4-a389679e3a0e": [[-0.317618, -2.6e-05, -0.32976300000000003], [0.325452, 0.8682, 0.306263]], "127406da-6400-4858-ba37-bb0ce96f773b": [[-1.31854, -1.12098e-08, -0.7099420000000001], [1.31882, 1.8693799999999998, 0.710289]], "0f5a3f9e-f304-41eb-b65a-471889f0c6cf": [[-0.696658, 1.90735e-09, -0.47151600000000005], [0.696658, 0.35214300000000004, 0.47151600000000005]], "914826ae-326b-3240-b7cf-cd6062d05486": [[-0.7, -0.0, -0.7501059999999999], [0.7, 0.9679770000000001, 0.750107]], "cf6531e1-a5d9-4125-986e-28608bf134d7": [[-0.6806350000000001, 9.48062e-18, -0.155839], [0.6806350000000001, 2.45721, 0.155839]], "59ab5bfb-1d3d-4df1-a054-e8ca1afe5c17": [[-1.1907699999999999, -0.0018755900000000001, -0.43278], [1.1895099999999998, 0.895193, 0.433599]], "7b473a04-8597-4fd0-86a6-5dd824518011": [[-1.000951, 0.0, -0.217746], [1.000951, 0.580202, 0.217746]], "4516c059-8701-4a74-af10-c9056073eae3": [[-0.8984369999999999, -6.6412e-08, -0.508593], [0.8984369999999999, 0.732128, 0.508593]], "925bc907-2909-43e4-a988-261bf098e3be": [[-0.292992, 0.0, -0.27015100000000003], [0.292971, 0.904696, 0.27015]], "1cf70bff-57a4-4ff9-a91b-364c2f60dd13": [[-0.400305, -0.0002424, -0.400305], [0.400344, 1.14792, 0.400459]], "21e0b94d-aaf3-4ef8-a004-f446e9c0dec9": [[-1.0222, 7.62939e-09, -1.17237], [1.02265, 0.8850629999999999, 1.17384]], "6f5d3f77-fef6-492a-a073-602ba134a420": [[-0.479142, 0.0, -0.412265], [0.479142, 0.515, 0.412265]], "fde6ef15-7c23-4cce-98c7-b5213ce55cd3": [[-0.770833, 0.0, -0.9858969999999999], [0.770833, 0.89224, 0.9860949999999999]], "026b3a27-85f5-4061-9991-7d6182ad8861": [[-0.223909, 3.05176e-08, -0.223909], [0.223909, 0.456409, 0.223909]], "a2d573fb-1db6-43c5-8707-7dcff80125c6": [[-0.8854529999999999, -7.62584e-18, -0.161821], [0.8854529999999999, 0.625522, 0.161821]], "9dd3b6d3-9234-4395-a21f-b7514402ea17": [[-0.912029, -9.28542e-05, -0.441457], [0.9123749999999999, 0.769217, 0.441184]], "138c90bc-8505-4db6-8920-87a6421e66f0": [[-0.60797, 0.0, -0.20431999999999997], [0.60797, 2.5, 0.204319]], "f44dc1ee-3b57-41bf-86d5-4f6d025fccd8": [[-0.383228, -0.0005653020000000001, -0.38390799999999997], [0.383326, 0.887938, 0.38323799999999997]], "4c64e029-83ce-4755-8f96-6ec65972e0ba": [[-0.355116, -0.000267189, -0.16889600000000002], [0.355149, 0.552136, 0.168617]], "81600723-1163-48e9-a848-28aaf43adc9d": [[-0.24029399999999998, -1.33378e-17, -0.260177], [0.240741, 0.909991, 0.260949]], "27f0079e-2efd-4532-bb98-9bc9c30746ac": [[-0.298211, 2.5e-05, -0.251405], [0.298169, 0.528913, 0.25126899999999996]], "0a1e2fb3-3345-4483-a6ae-049923d15934": [[-1.218805, 0.000516, -0.40643999999999997], [1.218253, 0.7637130000000001, 0.405666]], "2950a86f-501d-4802-9865-cc1848f709cf": [[-0.216695, 0.0, -0.216695], [0.216695, 0.4853, 0.216695]], "14a727e9-2ed7-4a09-b2cf-1826fea59cb2": [[-0.49270200000000003, 0.0, -0.342628], [0.49270200000000003, 0.392085, 0.342628]], "4e6a3c9d-2d94-4457-90e1-adfaa7037de4": [[-0.603068, 0.0, -0.481245], [0.603068, 0.5180939999999999, 0.48121200000000003]], "a70de08c-b101-40e5-8d74-12cff8dd8eac": [[-1.34491, -0.000627697, -0.531905], [1.34687, 0.905468, 0.5321130000000001]], "18703583-31ad-410d-a07c-68f5cb860b0f": [[-1.2301600000000001, 5.23592e-05, -0.51205], [1.2299, 0.765693, 0.510742]], "38a1efa5-3453-40b5-ab8a-067bd844d2db": [[-1.0379399999999999, -7.62939e-09, -0.42300600000000005], [1.03737, 0.844157, 0.422702]], "6f7efa83-660f-4132-a6c0-0aff0c204f9f": [[-0.984444, 7.62939e-09, -1.14757], [0.984445, 1.1154600000000001, 1.14757]], "6600bc80-8df6-4a7d-a92f-5d1457709624": [[-0.8559319999999999, -0.00168745, -0.31529399999999996], [0.8558410000000001, 0.633374, 0.315959]], "0683738e-40ed-4edc-bb0e-e00b529a22fb": [[-0.75, -0.0, -0.21967199999999998], [0.75, 0.6, 0.21967199999999998]], "00585bed-3c7b-495a-838e-ff0c35cb03e6": [[-0.7172360000000001, 4.2632599999999996e-17, -1.11624], [0.7172360000000001, 1.05431, 1.1157299999999999]], "b846852c-6c55-4dc6-a665-de1c0883325e": [[-0.9158499999999999, 6.10352e-08, -0.21059999999999998], [0.9158499999999999, 2.5496, 0.211069]], "877ea345-1520-4ee8-8ca1-69ce2488ec91": [[-0.29, 2.74095e-08, -0.219142], [0.29, 0.660784, 0.218397]], "dca5cf61-b4a6-496c-928f-890bbdec31fe": [[-0.217563, 9.847840000000001e-18, -0.21071], [0.217563, 1.0301900000000002, 0.210673]], "6e31af89-62e3-4ec5-9718-4448bcba6557": [[-0.35984, 7.15256e-10, -0.35415100000000005], [0.35984, 0.48606499999999997, 0.35415100000000005]], "5a9f88fe-7fc2-41e0-95b7-25401e2bcde7": [[-1.044322, 0.0, -0.460415], [1.044345, 0.7466379999999999, 0.462526]], "cf51c0d0-ec0d-4be7-a33c-f432993f9448": [[-0.275805, 0.0, -0.32540399999999997], [0.275805, 0.876861, 0.32540399999999997]], "93e10bba-8f32-4ea9-8224-e9d2727fa3a7": [[-0.857045, 0.0, -0.821159], [0.857143, 0.792295, 0.821144]], "c508c80d-de17-484c-ad4b-81344e8dbbab": [[-0.41607799999999995, -2.7390399999999998e-06, -0.37797], [0.416047, 0.721318, 0.377279]], "00754f96-5380-429c-9a20-50b67d8a51f0": [[-0.40806600000000004, 0.0, -0.414134], [0.40806600000000004, 0.8618349999999999, 0.414125]], "8a3e5140-e9eb-4cf9-bbef-07b00c259f2e": [[-0.332496, 0.0, -0.377953], [0.332397, 0.6986199999999999, 0.377975]], "3c52cc2f-a786-438d-bea6-92cdafacefbc": [[-1.25211, -0.000703282, -1.12989], [1.25324, 1.06384, 1.13023]], "a6f7872e-491e-45df-b30f-a575911c6655": [[-1.1223699999999999, -0.000191645, -0.414436], [1.12217, 0.7672239999999999, 0.415613]], "f8f39965-5c5a-4079-a3bf-0f5b5153ac6a": [[-0.297184, -0.00033438799999999997, -0.290057], [0.297141, 0.470481, 0.291135]], "8d2b167a-2712-4a6e-895e-96fcd9b2625b": [[-0.700012, -0.000150104, -0.39016199999999995], [0.700142, 0.6940000000000001, 0.38994999999999996]], "1b626ff2-bc4d-3f08-834b-cd739bba2251": [[-0.499542, -0.000492, -0.6296459999999999], [0.61609, 0.7694540000000001, 0.525818]], "451061b5-1bc4-4089-812b-324844375801": [[-0.977997, 2.28882e-08, -1.16166], [0.976222, 1.25, 1.16391]], "8cd3b0e4-7d94-4d96-ac01-1d01b02bec68": [[-0.266131, -9.002450000000001e-18, -0.23339600000000002], [0.266165, 0.5793630000000001, 0.233469]], "9a5b9a10-6be8-4f2f-8202-c5afe818b7a0": [[-0.599764, 0.0, -0.310761], [0.599764, 0.462312, 0.310761]], "8c5c326c-eb22-4b85-b99d-49e5f623df18": [[-0.24796500000000002, -8.29878e-05, -0.255503], [0.248591, 0.76697, 0.255591]], "3c719903-f9ce-4451-a955-2c4031301b08": [[-0.5, -2.73514e-17, -0.501472], [0.5, 0.7476600000000001, 0.501472]], "53950b7a-298c-4907-9328-d2167a2c8d9f": [[-1.58378, -2.5484e-06, -0.5450659999999999], [1.58399, 0.918772, 0.5442629999999999]], "11528d30-9182-44f3-a15a-8c0a8fc4132a": [[-0.285199, 0.0, -0.286464], [0.285199, 0.9690730000000001, 0.286804]], "7acfde9f-68ee-4be3-b818-dd4717d96898": [[-0.061066, 0.0, -0.061466], [0.061066, 1.022072, 0.061617]], "e7dce8aa-c8cc-43a3-924d-c0355946410a": [[-0.19561499999999998, 0.0, -0.130833], [0.19561499999999998, 0.249943, 0.130833]], "cc9740bf-12a5-4072-88da-f97f18dff746": [[-1.1709990000000001, 0.0, -0.483958], [1.171, 0.884495, 0.483959]], "6a05bcba-8816-3cb1-a37c-5f7756389c58": [[-0.37839399999999995, 0.00035299999999999996, -0.474677], [0.39354, 0.748687, 0.34512099999999996]], "9f70adcf-79ce-4ec3-a958-942482f3451e": [[-0.31531400000000004, 0.0, -0.31531400000000004], [0.31531400000000004, 0.522307, 0.31531400000000004]], "eb402770-81d8-4111-9e23-7ed62aceeb9e": [[-1.18016, -1.77244e-07, -0.16615200000000002], [1.18016, 2.07803, 0.166432]], "18714417-784d-47fc-9970-b0c4eb1bc353": [[-0.848593, 5.7355399999999995e-08, -0.201741], [0.848593, 0.7291500000000001, 0.20178200000000002]], "8fe8d1f6-4daa-451b-9db7-e2b7df2c36a3": [[-0.197133, 0.0, -0.19904], [0.197132, 0.45931, 0.199052]], "1fc096d4-f7de-4d56-8c98-ebd3863838fc": [[-0.29396, -5.0271800000000004e-08, -0.296563], [0.29396, 0.548158, 0.296564]], "7de1987b-c150-489b-baa7-0cf57f0dcf3f": [[-1.484948, 0.0, -0.5450010000000001], [1.484948, 0.737449, 0.5450010000000001]], "9df43bc8-7d25-4ea0-a1da-46e5d73e9080": [[-0.385468, 1.7166100000000002e-08, -0.0784377], [0.385468, 1.2046, 0.0784377]], "4bed045a-9569-4ede-b2fd-ad616108b6d7": [[-0.4, -5.82677e-08, -0.9], [0.4, 0.604639, 0.9]], "446a01a9-d91a-4846-9d9d-d5263403e9c0": [[-0.769024, 1.57721e-17, -0.288134], [0.769024, 0.835291, 0.288351]], "0d6b7d49-1bbe-4183-b416-f02771767245": [[-1.85, 1.36359e-17, -0.22269100000000003], [1.85, 2.7735000000000003, 0.222692]], "1493c4dd-78c3-47bc-9820-258a55114510": [[-0.341642, 0.000157552, -0.266348], [0.341643, 0.60492, 0.266748]], "e9a5fad2-5268-4e2b-ab08-65eb81b604be": [[-0.2942, -1.6248e-14, -0.288506], [0.2942, 0.579347, 0.288506]], "01687395-14ca-4ed8-8e51-b18463d630dc": [[-0.395289, 0.0, -0.40751899999999996], [0.39521, 0.871191, 0.40787]], "5d5cde24-113b-427f-99bf-bae0aacd9afd": [[-1.18188, -1.52588e-08, -0.538203], [1.18187, 0.86952, 0.5390039999999999]], "20a3d79a-96fd-4817-a3fd-ccf2f7f86cbc": [[-0.33030299999999996, -4.47268e-05, -0.35353900000000005], [0.329993, 0.759147, 0.353461]], "0e770627-e23b-4b92-95b1-1260ba766abf": [[-1.7394399999999999, 1.8040899999999998e-07, -0.34902700000000003], [1.7394399999999999, 2.505, 0.34902900000000003]], "86b18e65-1cdc-493d-8189-fe7766b76d40": [[-0.5449240000000001, 0.000394, -0.545978], [0.5470320000000001, 0.826897, 0.545978]], "69c544a9-6dc0-4ce3-a6b3-e987a6f37a7a": [[-1.1069499999999999, -1.68823e-17, -0.29458], [1.1069499999999999, 2.1817599999999997, 0.29595099999999996]], "1bc67d0c-4744-452b-b015-41ff24d51613": [[-1.2787600000000001, 0.0, -0.5291250000000001], [1.2787600000000001, 0.969343, 0.529127]], "b24b1afd-b058-479d-a227-1b433b71d695": [[-0.285343, 0.0, -0.301572], [0.285343, 1.014351, 0.301572]], "2c422055-2226-4741-bae7-7853c75c4ba7": [[-0.627005, -4.48833e-17, -1.02419], [0.627003, 0.904423, 1.02421]], "97108cbb-b53e-48cf-bba9-eb065a153454": [[-0.635969, -1.6188199999999998e-17, -0.635969], [0.635969, 0.459565, 0.635969]], "97e2052a-497a-4df6-8a82-9daa39ac7fc5": [[-0.344334, 0.0, -0.33442700000000003], [0.344183, 0.894739, 0.334517]], "a76bcc5e-1240-4bad-b701-3371bf8a3389": [[-0.771755, -2.21093e-05, -0.34696], [0.771371, 0.738642, 0.347033]], "1e68987c-5c7b-45cc-954b-830e1c28db10": [[-1.406429, -0.0, -0.905319], [1.407147, 0.865556, 0.905664]], "d1d281f9-d3f4-4c79-bae2-d48a2c54de98": [[-0.26663, 0.0, -0.20708500000000002], [0.266981, 0.436812, 0.20708500000000002]], "b07abbd1-22cb-48ca-8f0d-47b5ff0924cc": [[-0.257015, -0.000948002, -0.23796099999999998], [0.257081, 0.78701, 0.23796099999999998]], "06bb1295-131b-471a-8e97-66251b0f79fd": [[-0.293481, 0.00073763, -0.293605], [0.293867, 0.308861, 0.293216]], "a820a795-bdc8-4e1b-97d9-5193394f31a7": [[-0.30589700000000003, 1.0459000000000001e-17, -0.170809], [0.30589700000000003, 0.737696, 0.17080700000000001]], "a2a90336-2260-421f-a403-945c03be35c0": [[-1.10032, -0.00183121, -0.42263100000000003], [1.10026, 0.790426, 0.423]], "8991cd3b-dbdc-4c46-8d19-5ce32b63b77b": [[-0.620824, -1.20792e-16, -0.621622], [0.620824, 0.547868, 0.621622]], "55d9617a-d707-440e-9cb6-080e5b85315d": [[-0.53675, -2.78551e-05, -0.205705], [0.536554, 0.8674219999999999, 0.20569500000000002]], "a8c34fc0-a9b7-46a7-9f77-a3e5ed3bba12": [[-0.409453, 0.0, -0.35944499999999996], [0.409453, 0.8032299999999999, 0.35944499999999996]], "a6a71535-321e-4fd8-8016-7f0ba55d2116": [[-0.673844, 0.000796, -0.668457], [0.673844, 0.7616339999999999, 0.6675530000000001]], "a76ea43f-7e83-4afc-99d2-737dcb92ab39": [[-0.206508, -3.17017e-06, -0.203126], [0.206331, 0.37268, 0.20335799999999998]], "3fece9bb-d525-45f7-be2a-f63b0b33eed5": [[-0.293615, -1.52588e-08, -0.296762], [0.293501, 0.627725, 0.296645]], "830d2fb2-3b5a-4581-b8d4-15509bb4c21c": [[-0.861583, 0.000228, -1.190192], [0.861607, 1.291042, 1.190021]], "4d1bb8ba-381f-4944-935b-29a015bb619f": [[-1.246752, 0.00021700000000000002, -0.457939], [1.2536100000000001, 0.9065179999999999, 0.456092]], "f54ecfc9-f3bb-4033-b94f-3c2e85f6b32d": [[-0.279701, -6.55684e-18, -0.107081], [0.279701, 0.42278, 0.107081]], "b6418fbb-77ac-4cac-ac09-13af9abbda78": [[-0.333754, 0.0, -0.326593], [0.333754, 0.654729, 0.326492]], "0bdff8a2-eb07-42ee-967a-4379e7589569": [[-0.975036, -6.22761e-11, -0.27512000000000003], [0.975036, 0.39515900000000004, 0.275119]], "c6b5cd1a-3e5e-4499-8d75-69562e7826a0": [[-0.21043800000000001, 2e-06, -0.166643], [0.21043800000000001, 1.0609659999999999, 0.166643]], "447067e9-90b1-4a5d-8099-792da65a13f5": [[-0.23355399999999998, 0.0, -0.233517], [0.23355399999999998, 0.668266, 0.233326]], "f6966990-3df5-4daf-b4f0-569393d8dea0": [[-0.362782, -6.33363e-05, -0.18072500000000002], [0.362782, 0.815788, 0.18072500000000002]], "b98b384e-3fd6-4af6-9b6d-b4c1f1441460": [[-1.16515, -7.62939e-09, -0.498517], [1.16501, 1.07943, 0.498538]], "f75ac3f3-3393-40dd-b4c3-69c9275832d2": [[-0.322862, -8.46869e-08, -0.25448899999999997], [0.322862, 1.21522, 0.254731]], "bce3ba30-2b07-4e36-8444-f3ab430f6c67": [[-0.223132, 0.0, -0.223132], [0.223132, 0.494764, 0.223118]], "0a44f97c-ab24-44fc-a1e2-013fa1022115": [[-1.00742, -2.3295600000000003e-06, -0.30154800000000004], [1.00744, 2.00634, 0.302315]], "540182ba-8a9b-4857-906f-b5770cad878b": [[-0.349206, -1.21409e-17, -0.350008], [0.349206, 0.38722999999999996, 0.350008]], "83f74ed1-bd79-49e1-beb8-c80e5bcbbcb5": [[-0.554362, 0.0, -0.554362], [0.554499, 0.33987900000000004, 0.554499]], "2dc70dca-b773-4a78-a6b2-5a215273ae18": [[-1.20547, -9.92335e-05, -0.47431199999999996], [1.20559, 0.7215170000000001, 0.473842]], "66e4702d-e391-37f2-86ac-fd3607bedcf1": [[-0.48263199999999995, -0.00012200000000000001, -0.264976], [0.48263300000000003, 0.8111839999999999, 0.26497499999999996]], "fbb79ca8-b1c4-406c-acba-9da788020ef8": [[-1.8521100000000001, 5.24072e-06, -0.780192], [1.85219, 0.7685949999999999, 0.7797350000000001]], "438be273-d969-4ce3-9fa4-3c9dc75db911": [[-0.7585, 0.0, -0.40984200000000004], [0.7585, 0.715134, 0.40984200000000004]], "614265f8-7f8e-421e-a125-97c58b82e02a": [[-0.860276, -4.16338e-08, -0.24305], [0.860276, 0.35138800000000003, 0.24301899999999999]], "1d6852d8-305c-3204-9880-b6a283f74f0c": [[-1.0338129999999999, -4e-06, -0.522614], [1.0338120000000002, 0.82762, 0.50349]], "f278510b-6089-4f61-a9c0-2a80c66bccb7": [[-1.10036, -2.7132599999999997e-17, -0.500043], [1.10036, 0.750104, 0.500043]], "d9595bce-2715-4965-85cc-5956b1169dbd": [[-1.06208, -1.43051e-09, -0.490024], [1.0621, 0.7530880000000001, 0.489983]], "06750943-96f3-49e4-b60e-d95628458afd": [[-0.174538, 0.0, -0.178694], [0.174538, 0.9308700000000001, 0.178694]], "30d47372-0e23-4c31-8de6-edaf2cd42b86": [[-0.675, 0.0, -0.550084], [0.675, 0.930412, 0.550084]], "3727f54c-3936-4cfe-ba18-13995e0aec5c": [[-0.893176, 1.60061e-07, -0.950721], [0.894575, 2.53608, 0.9503]], "db20bf46-340d-4f0c-b5c5-df429b5dbbd4": [[-0.347908, -0.000466824, -0.34226799999999996], [0.347907, 0.74812, 0.342334]], "fc30791e-44bd-4450-a55a-eb4610fa22b1": [[-0.301682, 3.76149e-18, -0.30755099999999996], [0.302911, 0.427425, 0.30717]], "134b2e64-dd23-4cf8-9ff8-39f4b7de45c2": [[-0.21052600000000002, 0.0, -0.183188], [0.21052600000000002, 0.655269, 0.183188]], "4528e99b-ccdb-415c-907c-70679cc252a3": [[-0.37089, -0.00035346000000000005, -0.370121], [0.370503, 0.728998, 0.37101100000000004]], "60c13bc2-8703-4cbe-88d5-36b63f3c9ec8": [[-1.080066, 0.0, -0.427601], [1.080066, 0.901682, 0.427601]], "b9b68b7a-3045-4d2d-838d-f5cc17f8358c": [[-1.13197, -3.01e-05, -1.09842], [1.1312900000000001, 1.06452, 1.0988]], "115a30a5-785f-4229-8fed-470d4860dbdc": [[-1.29258, -0.00204016, -0.41521299999999994], [1.29226, 0.95685, 0.41516800000000004]], "8c2cded0-a94a-4c7b-b5be-d8e31a408732": [[-0.17499800000000001, -1.07162e-17, -0.17500900000000003], [0.17499800000000001, 0.45, 0.17500900000000003]], "a08867ac-8370-4645-915a-58f23d263b97": [[-0.394306, 0.0, -0.16165400000000002], [0.394306, 0.268018, 0.16165400000000002]], "a56bece0-8439-437a-ba6d-a8812f5dd3e7": [[-1.74722, -6.66662e-05, -0.966529], [1.74733, 0.831917, 0.966241]], "d758e991-d125-46a4-85ae-c21253840c5a": [[-1.1065800000000001, -1.2185199999999999e-17, -0.2], [1.1065800000000001, 0.758739, 0.2]], "85452d41-e609-365d-96f9-2fc5ef7e804b": [[-1.4859, 0.046269, -0.550109], [1.4859, 0.874966, 0.544349]], "f110c0e9-910c-40a8-b0bd-9ffd5215a467": [[-0.380792, 0.000186691, -0.221002], [0.380006, 1.0916299999999999, 0.22183599999999998]], "8e604449-9d9f-44ad-baf5-a9fabe9350b0": [[-0.285243, -9.67555e-07, -0.285155], [0.285243, 0.5703130000000001, 0.285155]], "e4362ba0-c0b4-4dbe-8a30-664df4aa9008": [[-1.08887, 6.10352e-08, -0.380995], [1.08887, 0.639617, 0.38079]], "22e5bf52-9049-441c-9782-26921ee7d3e4": [[-0.70269, 7.62939e-09, -1.07314], [0.699504, 0.862143, 1.07424]], "c6e3d7ea-725b-4449-babd-3bdaf15f52b0": [[-0.524628, 0.000498, -0.524505], [0.524505, 0.8661230000000001, 0.524628]], "590c3d6d-02c4-439f-8293-44a3420a333c": [[-0.699893, -1.39428e-06, -0.699893], [0.699893, 0.740194, 0.699894]], "7b16d703-fcd4-4078-9b0b-5b0df2fedc1b": [[-95.0699, 0.4158, -36.0291], [95.0699, 242.0102, 36.029]], "0b148b31-c178-4da1-898d-a38cbd4e2754": [[-1.167168, 7.5e-05, -1.1476730000000002], [1.167517, 1.789644, 1.14762]], "1f9f2b26-846a-4e58-87e2-8a1ff1e5a749": [[-0.347774, 0.0, -0.31566700000000003], [0.346599, 0.838603, 0.316496]], "f1edd7ed-af4a-472b-93c5-49f209a8aac1": [[-1.12486, -0.00123657, -0.413228], [1.12479, 0.7838630000000001, 0.41412]], "fa806a59-4b25-480e-9502-35d15427ac14": [[-0.19643999999999998, 3.8413900000000004e-08, -0.161807], [0.19649999999999998, 0.452706, 0.16203700000000001]], "44c0a3cc-5274-400b-b89c-1c7028c43b0e": [[-0.887153, -1.25304e-07, -0.968151], [0.887153, 0.914431, 0.967679]], "4af38ff6-c130-4c58-9800-d6b4e9f34b3d": [[-0.268125, 0.0, -0.268117], [0.268149, 0.57858, 0.268117]], "832f0ad8-c172-4109-9dbb-415b122572fe": [[-0.137184, -8.67065e-06, -0.137206], [0.137232, 1.00976, 0.137184]], "2abc60cb-5316-4e07-b1bc-0a96be812309": [[-0.35, -1.0552e-17, -0.200151], [0.35, 0.5, 0.200151]], "67b3853e-bdf7-4f39-9a52-0165e540a79b": [[-0.768186, -2.01466e-17, -0.491871], [0.768186, 0.478768, 0.491871]], "59ae681f-7af2-44c0-ab35-a087121c4d09": [[-1.21066, -5.58044e-08, -0.517587], [1.21059, 0.782329, 0.51776]], "755a5af2-6909-4951-89c5-39869a6ae73a": [[-0.365275, -1.9074000000000002e-17, -0.37589], [0.36471, 0.798651, 0.376786]], "04a5173b-47a3-311c-80fa-925bc924b296": [[-39.5196, 0.0, -39.5196], [39.5196, 109.0105, 39.5196]], "81bc5e73-0531-4482-bcaf-ef021db827d7": [[-0.561319, 1.04904e-08, -0.0394959], [0.561421, 0.685321, 0.0395861]], "57bf1111-1c8b-4c43-b7de-0ecb6d62c608": [[-0.994927, -0.000206078, -1.09527], [0.9947010000000001, 1.56218, 1.09526]], "146cea9c-0e87-4c90-8526-e5f7e5340530": [[-1.1, -1.6824400000000002e-15, -0.306834], [1.1, 2.4, 0.306984]], "a0c6f147-7080-4734-9c52-ad0579662d3f": [[-0.651872, 1.8318699999999998e-17, -0.390112], [0.651872, 1.5336600000000002, 0.39015099999999997]], "4b9c54b8-2b9f-3da6-8395-b13dbe268eee": [[-52.9056, 0.0, -49.3199], [53.502, 130.0251, 54.5598]], "27e5fd83-5383-45da-927c-6d2bc3a77508": [[-0.607892, -5.05632e-18, -0.220695], [0.607894, 0.9942700000000001, 0.22069299999999997]], "5b357173-d1bd-4669-9c8d-78524864ae22": [[-0.29505, 0.0, -0.29505], [0.29505, 0.558585, 0.29505]], "852f1348-8a33-3fd6-89a0-a8acb499d079": [[-114.6012, -12.2603, -44.3422], [114.4007, 67.8784, 49.3495]], "e72c1b48-89c4-408f-831c-9a2ff6ffb291": [[-0.251817, 6.3e-05, -0.25537], [0.251817, 0.529158, 0.255486]], "04039de7-100a-4be6-b17e-1f7bd6fe37f7": [[-0.343302, 0.0, -0.454899], [0.343302, 0.935028, 0.454899]], "d05c8c6d-f420-413a-9da7-b9fddbbcd993": [[-0.267628, 0.0, -0.223344], [0.267628, 0.6, 0.223344]], "c24eb44b-b8f5-4307-ba47-38d860465d4a": [[-0.332598, -1.1632700000000001e-17, -0.24398499999999998], [0.332598, 0.698369, 0.244126]], "687de1ef-6f28-45b1-ba81-bba9546c719d": [[-0.315472, 0.0, -0.315471], [0.315472, 0.564747, 0.315471]], "804fa634-6715-3ca6-9113-2eef6d83438c": [[-1.837193, 0.001344, -0.42166], [1.837193, 0.811494, 0.28798100000000004]], "5d4aba96-9229-4a1a-ba17-5228ba29b798": [[-0.300017, -2.4676800000000004e-06, -0.151098], [0.300017, 0.799462, 0.151098]], "72db2b25-9bf3-4c97-9fe7-dfd96dbb833d": [[-1.30971, -0.00012502, -0.504711], [1.31019, 0.813438, 0.504486]], "65303fc7-e257-44ea-a715-b8de195ed0d3": [[-0.25051, -1.08088e-13, -0.232291], [0.25051, 0.414481, 0.232594]], "3acb4f17-ad10-4df7-99c6-43b5a02730b1": [[-0.375566, -1.8050100000000002e-17, -0.37548299999999996], [0.37548200000000004, 0.202853, 0.375586]], "7af83e1e-358d-4ed9-a146-93b6f5650e1a": [[-2.55288, -1.12582e-17, -0.21114], [2.55288, 2.5, 0.212698]], "bce6127f-3fb1-44c8-86a1-cc2379fe6869": [[-0.732242, 0.0, -0.274043], [0.732242, 0.42186300000000004, 0.274045]], "553c84cd-98c7-41ff-99ad-31e6687cd57d": [[-0.460109, -0.00022978499999999998, -0.41820999999999997], [0.460113, 0.932358, 0.41753500000000004]], "f95ac914-f9b2-4160-aa2f-f7be9cf8daa0": [[-0.343048, -0.0014888000000000002, -0.34921100000000005], [0.342908, 0.21506599999999998, 0.34944200000000003]], "89190118-3e68-4f86-a6f4-10ad85be929c": [[-0.8088500000000001, -1.58616e-17, -0.37927900000000003], [0.808587, 0.7081780000000001, 0.37938000000000005]], "04bc088f-f644-397d-9d92-4d7fcc976ae5": [[-45.675, 0.0, -45.675], [45.675, 81.9237, 45.675]], "2924a537-18e9-428d-9922-ab1460e1f58b": [[-0.238492, 0.00010850000000000001, -0.196098], [0.238492, 0.500064, 0.196098]], "65017c44-34e5-4ab2-9ca9-279dbc02dc1f": [[-0.619863, 0.0, -0.506154], [0.618224, 0.829702, 0.5077940000000001]], "4b4bedee-f3d5-4d44-94e1-08d3448953cc": [[-0.26814, 0.0, -0.269406], [0.26814, 0.586751, 0.269406]], "423d01cf-db98-46e6-84c4-ca317a6761f6": [[-1.8840180000000002, 0.0, -0.9057609999999999], [1.8840180000000002, 0.859094, 0.9056829999999999]], "b846f09b-b91f-44b0-9a85-5181f385302d": [[-0.284431, 1.3e-05, -0.284532], [0.284431, 0.338846, 0.284532]], "c3eda37b-cfd5-4c98-868b-cfd7415e5cdf": [[-0.59036, -4.64582e-06, -0.275], [0.59036, 0.724286, 0.275]], "322810cc-2f52-4efc-bfcb-55e2523da817": [[-0.398379, -1.97196e-05, -0.44726999999999995], [0.398356, 1.17493, 0.447139]], "da85fe33-1931-411c-aed4-56e3bad857b0": [[-1.57631, -0.000637814, -1.1845999999999999], [1.57629, 0.888741, 1.18436]], "1e85357c-97cc-4d7a-9c76-1eb285807849": [[-1.05, -9.123629999999999e-18, -0.20000099999999998], [1.05, 0.75, 0.20000099999999998]], "8212bf74-2ad3-4e8a-a922-f93d382bcfc4": [[-0.391263, -1.4444800000000002e-15, -0.353513], [0.39136400000000005, 0.835127, 0.353624]], "11bc7917-2d4e-4912-a469-39d530eb0e65": [[-1.1509, -1.14008e-17, -0.258689], [1.1509, 0.685813, 0.258689]], "0b6b6c39-4388-41d7-ac61-265e567c75e8": [[-1.261854, 0.0, -0.5475], [1.261854, 0.8597360000000001, 0.547468]], "46c5cbbf-2266-4dc2-8e2f-5dc1aa281af8": [[-1.681583, 0.0, -0.6462720000000001], [1.68142, 0.989123, 0.646337]], "2eb00a66-316e-45c0-b762-2c6562eb9cb7": [[-0.3015, -1.1868200000000001e-05, -0.30150099999999996], [0.3015, 0.460059, 0.30150099999999996]], "fd86bf0c-12eb-49a3-a58b-cb42d5e979e3": [[-0.584882, -1.1411e-05, -0.496695], [0.584981, 0.805227, 0.496788]], "58d90d89-23bf-4e58-a62e-34390202d000": [[-0.948169, -0.000129787, -0.22520099999999998], [0.9480719999999999, 0.538121, 0.225146]], "b6687762-7879-4c98-ba08-a087157a0a08": [[-0.259959, 0.0, -0.259959], [0.259959, 0.5698409999999999, 0.259959]], "f9316fc8-9550-4147-a381-fb752df5cb01": [[-0.523868, 0.0, -0.183153], [0.523868, 0.34163699999999997, 0.183153]], "e1153871-277c-4c00-8201-e9d12271670e": [[-0.7701640000000001, 0.0, -0.37432099999999996], [0.7701640000000001, 0.654239, 0.37432099999999996]], "7e121ae7-c1ec-3aca-a497-70879061a219": [[-0.311498, 0.0, -0.26630299999999996], [0.311496, 0.797968, 0.26630299999999996]], "a66b7e66-538c-478b-a150-ece7dcaede6f": [[-1.1281, 0.0, -0.319783], [1.12801, 2.43013, 0.319783]], "65a9645b-6d78-49a4-9704-e91176ac250e": [[-1.0175, -1.3471099999999999e-17, -0.325], [1.0175, 2.25, 0.325]], "4b3d0f53-1933-4b10-a788-c322d61c565e": [[-0.27652, -1.4109200000000002e-17, -0.25505099999999997], [0.276519, 0.7540640000000001, 0.25505099999999997]], "c06d74a6-6d02-45ab-92ca-c443ff5b4f9e": [[-0.2711, -1.2293100000000001e-17, -0.207238], [0.2711, 0.45002600000000004, 0.207238]], "7f1ce481-2dc6-4360-8b0c-a12f754046eb": [[-0.902083, 0.0, -0.592474], [0.902083, 0.38001199999999996, 0.592474]], "86639504-1bf1-4b57-a4ee-dfb2828b1705": [[-0.183556, -1.1071400000000001e-17, -0.180809], [0.183556, 1.59924, 0.180809]], "026af98a-e9fb-436e-8a75-dd6c3e98b07f": [[-0.5650930000000001, 1.2755200000000001e-17, -0.23088899999999998], [0.564918, 0.81659, 0.23109100000000002]], "4727908a-f526-4dc8-a9fb-ecf0e5438b31": [[-0.90387, -0.000859375, -0.44026699999999996], [0.9037999999999999, 0.879495, 0.44024299999999994]], "316f96db-c7cd-4a7a-87b8-5a18b5bb893e": [[-0.34325000000000006, -9.75562e-18, -0.343336], [0.34342599999999995, 0.43906500000000004, 0.34396299999999996]], "62d9d1d4-4c79-4eb1-b141-b56014699487": [[-1.01, -1.8982e-17, -0.41], [1.01, 2.23, 0.41]], "6e561c94-34ff-4e32-a893-e20a22be3754": [[-0.781537, -0.00022541100000000001, -1.03542], [0.7815340000000001, 1.27809, 1.03611]], "84ada08d-fc67-4d33-9305-d858494222bc": [[-0.29636, 0.0, -0.289481], [0.29636, 0.49396999999999996, 0.289481]], "3a0d9d08-853b-4518-a8c1-701684361bc1": [[-0.30827899999999997, 0.0, -0.334445], [0.30827899999999997, 0.580649, 0.334445]], "5496da12-d91e-474b-954e-a9411e832aef": [[-0.997293, 0.0, -0.435711], [0.997293, 0.764028, 0.437812]], "be834ec3-9886-4bda-9c7f-359ef7b350d9": [[-0.179636, -3.50823e-06, -0.179926], [0.17891300000000002, 0.40638199999999997, 0.180052]], "4b8dfa86-bcb8-4eaa-989b-08c439e52452": [[-1.18475, -4.79204e-17, -0.8755310000000001], [1.1848699999999999, 0.856317, 0.875801]], "56016410-a544-45b4-8b71-7a8a34e9f265": [[-1.02471, -9.147320000000001e-05, -0.519551], [1.02471, 0.698102, 0.520858]], "d5778213-37e1-4dc7-a1d6-e9de2e8a1733": [[-0.29325, 0.0, -0.315654], [0.29325, 0.849539, 0.315654]], "ec02d1e6-ced9-481e-a616-44c0e9e1f04e": [[-0.524904, -2.2371e-17, -0.524856], [0.524904, 0.349582, 0.524856]], "a3e97293-0ba0-4446-90a5-952c96b15ad0": [[-0.7994629999999999, 0.0, -0.453073], [0.7994629999999999, 0.712894, 0.453073]], "3f9f103d-4e2c-4d26-9a2f-afddab50a9e8": [[-0.75, 7.6093e-18, -0.16], [0.75, 0.4, 0.16]], "2ec40b41-0091-4214-a618-72d555bc1ba4": [[-0.356958, 0.0, -0.356958], [0.356958, 0.503011, 0.356958]], "149654d1-a4e3-4be5-9084-94d6ac4c87bc": [[-1.071548, 0.0, -0.5077], [1.071548, 0.746057, 0.5077]], "68bb91ac-bb28-4126-b904-28565fec4350": [[-0.217609, -8.98941e-18, -0.21133], [0.21814499999999998, 1.09997, 0.21133]], "14758dfe-bedd-4b90-b8c9-bf3c45203ca8": [[-0.37736400000000003, -5.29463e-10, -0.25383500000000003], [0.377278, 0.8641920000000001, 0.253845]], "368ec9b4-3ee9-4ffe-b789-e56921e74656": [[-0.9154859999999999, -1.21485e-17, -0.25], [0.9154859999999999, 0.771056, 0.25]], "90a2df4e-5e45-4b20-8d77-7e3c4b42be12": [[-1.13963, 0.0, -0.44706], [1.1390500000000001, 0.90791, 0.446314]], "6e8a91c8-ce26-493d-87f4-df89ae7c3407": [[-0.6640349999999999, -1.86122e-06, -0.274518], [0.6640349999999999, 1.9319499999999998, 0.274518]], "19c1623b-8e63-3ccd-94c4-5c798fc5abcf": [[-0.6940179999999999, -2e-06, -0.13993], [0.6857909999999999, 0.8170090000000001, 0.30639700000000003]], "114a6d94-4038-4eaf-8faa-c429cd5dc69e": [[-0.38736899999999996, 1.1999999999999999e-05, -0.38704099999999997], [0.38736899999999996, 0.9697450000000001, 0.38736899999999996]], "0c41fffe-530c-4f06-93a0-5eaf017b042b": [[-1.19207, 3.87096e-07, -0.457709], [1.19239, 0.912312, 0.457648]], "8573432c-da1d-4cbb-8732-f1a799c84bf2": [[-0.3125, 0.0, -0.11577299999999999], [0.3125, 0.606429, 0.11577299999999999]], "7c16c713-cee8-4ef6-8edd-30ee5aa6e1ed": [[-0.34934800000000005, 0.000770432, -0.398061], [0.349245, 0.8395199999999999, 0.398439]], "175ca6c4-5762-4294-8737-9f7189715356": [[-1.17008, 6.10352e-08, -0.589583], [1.17018, 0.849381, 0.589549]], "0b05744e-198a-4e9c-836d-a5095da21c78": [[-0.625737, 1.06608e-17, -0.258644], [0.625738, 1.03355, 0.259388]], "d451d4cc-7abe-4252-99b1-6dd6c5c1acb6": [[-1.421545, 0.000121, -0.476196], [1.4214449999999998, 0.791356, 0.476098]], "32bc0f2c-959f-44e1-888a-ff928185592c": [[-0.453677, 0.0, -0.40265300000000004], [0.453306, 0.9886029999999999, 0.403067]], "13105ace-7a19-4e5c-ae04-66fa58770e0e": [[-0.128827, 2.28882e-08, -0.128826], [0.128827, 1.0748900000000001, 0.128832]], "cee0c32c-cb35-419b-bc93-17315153a64c": [[-0.450585, 0.0, -0.20179200000000003], [0.450585, 0.9999290000000001, 0.20179200000000003]], "0ce6a44d-0f0d-439e-913a-94ede34471ca": [[-0.635645, -0.00045938399999999996, -0.24804099999999998], [0.635645, 1.7319, 0.248042]], "130de557-bd34-4f53-abdd-7487447a007d": [[-1.0253700000000001, 0.0, -1.06048], [1.0253700000000001, 0.969729, 1.06048]], "a6101b2f-ad45-4054-9239-10bb0a1f9a4e": [[-0.238477, 0.0, -0.210553], [0.238477, 0.457869, 0.210553]], "e7db5053-dd28-4d9d-a127-71b718f0bce6": [[-0.41059399999999996, 2.5e-05, -0.37959200000000004], [0.410281, 0.8099609999999999, 0.37998899999999997]], "14214469-8d34-40c2-bab2-dacdb14b8c3a": [[-0.970429, -5.81324e-07, -0.24965900000000002], [0.9703740000000001, 0.95982, 0.247576]], "6f9f4aee-dc7b-4749-a98a-67fd52cd55b6": [[-1.64615, -3.09879e-16, -0.303279], [1.64615, 2.3204, 0.303279]], "8525c14f-b34c-3499-b48b-4aa79689dadd": [[-0.32183999999999996, -0.000474, -0.30291599999999996], [0.294875, 0.777708, 0.23239200000000002]], "5aa35ed1-4b4a-445a-a8aa-c8dde92d1156": [[-0.692853, 0.00021, -0.460221], [0.692853, 0.553256, 0.45982100000000004]], "5bb9096f-8836-487c-a1b1-e132c124e318": [[-0.236156, 0.0, -0.232495], [0.236156, 0.34902500000000003, 0.232495]], "d599e0f0-0b03-401e-838d-6d7a67228a35": [[-1.22893, -6.20361e-09, -0.429631], [1.2322499999999998, 0.9041899999999999, 0.429607]], "d3eb636c-fd8e-4fcb-a102-49812171f23a": [[-0.455721, -0.000103111, -0.459224], [0.455721, 0.7655670000000001, 0.459224]], "daf40b43-40bd-4e53-9acc-119fa93f4b77": [[-0.38463299999999995, -1.1305799999999999e-17, -0.262227], [0.38441200000000003, 1.25135, 0.26282900000000003]], "43733ff6-1f45-4c56-89bf-619e8d9f7853": [[-0.317912, -6.60084e-06, -0.242955], [0.317965, 0.526245, 0.24295999999999998]], "e38d5d57-429f-42f3-b1d5-f6ac48563e53": [[-0.21635100000000002, 0.000626473, -0.21299900000000002], [0.21592199999999998, 0.585248, 0.213528]], "11f6b8b4-2209-4e77-9817-5634adaf3651": [[-0.847346, -0.0018804299999999998, -0.846423], [0.9007179999999999, 0.8935599999999999, 0.865861]], "a6023629-ef1e-4204-acd2-158e56133ffc": [[-0.38829500000000006, 0.0, -0.19842700000000002], [0.388215, 2.134173, 0.19842700000000002]], "163c8606-0607-4f3c-a1ec-e97c17f11be0": [[-0.288322, -0.000657881, -0.273096], [0.288277, 0.7648900000000001, 0.27344999999999997]], "4d597dc2-b07a-39ee-a775-2bd021887902": [[-0.500418, 0.0, -0.50265], [0.500418, 0.728514, 0.50265]], "7995a7fb-f901-4eb9-958f-ba37cc37f827": [[-0.92, -1.24044e-05, -0.20009], [0.92, 0.8690000000000001, 0.20009]], "2206502d-ce13-48ba-8962-b721753eba94": [[-0.819502, -2.28882e-08, -0.256905], [0.819502, 2.35458, 0.256905]], "f742a3b6-410c-436f-80b7-5c62826c2e20": [[-0.44636400000000004, 6.10352e-08, -0.44636400000000004], [0.446361, 0.462894, 0.44636400000000004]], "582aa35b-9184-3fac-98d7-b4abd3f2e985": [[-41.9109, -0.086, -47.5048], [41.9109, 105.2689, 47.5048]], "4d1ae836-abc0-404d-8f6c-7915c117d38c": [[-0.249419, 0.0, -0.249419], [0.249419, 0.587042, 0.249419]], "0e5ef578-6056-4b90-b62c-2f17c807b2c7": [[-1.15618, 0.0, -1.28282], [1.1568399999999999, 1.13778, 1.2792700000000001]], "469a88b2-ff6a-4a0b-a33a-db43c3181f9d": [[-0.450004, -1.88738e-17, -0.311441], [0.45000799999999996, 1.63202, 0.311441]], "547f3f9c-1b86-4011-b3d3-eeb74409ce7f": [[-0.342164, 0.0, -0.3975], [0.342164, 0.9522390000000001, 0.3975]], "73986b37-162b-4e1d-a9ab-fdf725872136": [[-0.9490000000000001, 4.05629e-08, -0.236087], [0.9490000000000001, 1.94306, 0.236087]], "3f85a8b1-ccdc-47e9-87ab-480c3166d668": [[-0.240735, 0.00019199999999999998, -0.293335], [0.240735, 0.8345, 0.293335]], "9bdf90b3-25a9-452a-86cd-4f51fee4259c": [[-0.14871800000000002, -1.5629999999999998e-05, -0.148947], [0.148766, 1.04552, 0.148728]], "bcf190c8-288a-46c6-a178-c08dae003eed": [[-0.14866300000000002, 3.60212e-06, -0.12232900000000001], [0.14866300000000002, 0.444291, 0.12258699999999999]], "7938dfd9-5e46-4b29-96ba-6db9577f9368": [[-0.340387, 1.14441e-08, -0.340387], [0.340387, 0.96367, 0.340387]], "077ac9ee-77b1-4ca7-802c-7fa7b7207d22": [[-0.924701, 0.0, -0.213232], [0.924701, 0.44472700000000004, 0.213232]], "77fa7962-fbf8-4840-8d39-e0b4a454707b": [[-0.32600700000000005, 0.0, -0.35820300000000005], [0.326005, 0.9805800000000001, 0.35820300000000005]], "b9313455-e3ed-4b51-a5bd-232d453121eb": [[-0.37809, 0.0, -0.37953699999999996], [0.37809, 0.8647589999999999, 0.379454]], "029d0231-a5c8-403f-93d4-790cd153d2f9": [[-0.33020000000000005, -2.97827e-05, -0.27940000000000004], [0.33020000000000005, 0.7112, 0.27940000000000004]], "0cd722cb-4cf5-4026-9906-187e51d78c67": [[-0.280803, 0.0, -0.26726500000000003], [0.280803, 0.9322790000000001, 0.267322]], "4ffcd836-60a2-4b5f-96d1-6cf30800d995": [[-1.2457420000000001, 0.0, -0.454303], [1.245366, 0.686263, 0.453885]], "25606e3d-1684-42f6-95d2-d0b7f0cdba5a": [[-0.476535, 0.000344999, -0.475673], [0.478321, 0.883462, 0.47733600000000004]], "5ffa7939-b0bc-40f8-b9a8-6281a66f6af9": [[-0.56484, 1.1000000000000001e-05, -0.33754399999999996], [0.56484, 0.41161299999999995, 0.337372]], "1f44b15a-8c3d-409d-80f1-20dc77cb9778": [[-1.049585, 0.0, -1.1451179999999999], [1.050015, 1.7652240000000001, 1.144035]], "1efcb537-1877-47cf-957c-0d0e91b325c5": [[-0.288481, 0.0, -0.288481], [0.28846299999999997, 0.457297, 0.288491]], "4338d080-4cb8-424f-a30e-119638706f76": [[-1.1253900000000001, -0.0016911, -1.28875], [1.1268500000000001, 1.71731, 1.2898699999999999]], "e63a7a5d-9b44-4395-a320-fc04623ad374": [[-0.483212, 1.28405e-17, -0.22889900000000002], [0.483212, 1.32, 0.229728]], "fe2d616f-561a-4435-a275-23e1fd3da649": [[-0.5015270000000001, -0.00039914999999999997, -0.480989], [0.501467, 0.733052, 0.480655]], "0bf8244f-8803-47a1-afa6-07330c2b847f": [[-0.511291, -1.01345e-17, -0.23816099999999998], [0.511291, 1.34125, 0.23816099999999998]], "24fcbe13-7323-459c-b14f-b2ee42bb6538": [[-1.15438, -1.86918e-17, -0.32576900000000003], [1.15438, 2.28485, 0.32576900000000003]], "82458f2b-36fe-4965-bfe8-9137696a746a": [[-1.16016, -1.65279e-17, -0.33008000000000004], [1.16016, 2.51756, 0.330094]], "09abc58f-e1ae-4f8f-a7fa-136c6f8b3ebb": [[-0.875233, 2.9113899999999997e-07, -0.32046100000000005], [0.875232, 0.9226810000000001, 0.320587]], "05bdab52-1b44-4183-929f-eafba68391f0": [[-0.953485, -0.000160046, -1.16398], [0.953281, 1.03761, 1.16384]], "5a69f591-27a8-4629-88da-afb0f58976c6": [[-0.231177, -0.00044126100000000003, -0.232128], [0.230813, 1.07097, 0.230921]], "7c418d2e-974e-4a2e-b286-ad5043eb7d95": [[-0.285581, 3.6e-05, -0.232124], [0.28567, 0.525973, 0.232124]], "829f7c4f-2381-476d-9ba1-8b09110428ba": [[-0.625484, 0.00031800000000000003, -0.550762], [0.625484, 1.156045, 0.550762]], "578e7075-3e4f-4738-b099-109be93e9d27": [[-1.09643, 2.66379e-07, -0.42552], [1.09642, 0.753479, 0.42607]], "23e350e8-5360-4398-9d04-a82e554461f1": [[-1.0104600000000001, -0.000332553, -0.437697], [1.01049, 0.77807, 0.43762900000000005]], "5e26ec1e-f21e-3a16-a08d-0b29dce9a160": [[-0.601531, -0.000254, -0.167536], [0.617901, 0.9163460000000001, 0.376109]], "752e47c9-4dac-43b3-994f-e97cb7a9dc5e": [[-0.514587, 0.0, -0.18625499999999998], [0.514587, 0.85, 0.18625499999999998]], "1ca3a1ab-5cc5-455e-9ef4-20fdc5af03c2": [[-0.349765, 0.0, -0.39299500000000004], [0.349765, 0.7891320000000001, 0.39299]], "3071bdcb-4ce9-456b-8180-f39e52a59b65": [[-0.247986, 0.0, -0.15421300000000002], [0.247986, 0.88, 0.15421300000000002]], "e133bb16-3b87-45aa-a9f1-92e422fb7f8a": [[-0.501346, -8.64355e-18, -0.32278199999999996], [0.5013190000000001, 0.600457, 0.322539]], "57580a13-bef0-44fd-b611-863ea4a3aad8": [[-0.327319, 2e-05, -0.337904], [0.327319, 0.86638, 0.33773800000000004]], "3c019f22-6b94-41de-9fbb-99a631a8fb4a": [[-0.41457099999999997, 0.0, -0.397868], [0.414647, 0.8980929999999999, 0.397829]], "dabf5085-308d-496b-9a78-cdff7df6d619": [[-0.317218, -0.000133362, -0.297362], [0.317209, 0.875153, 0.297358]], "6acf53aa-eec7-49c9-8d6a-1604d806fab4": [[-0.285701, -1.20168e-17, -0.19625399999999998], [0.285701, 0.449304, 0.19625]], "ec122679-f54a-4344-84da-7de8bb4cd4ff": [[-0.32634799999999997, -1.5879899999999998e-10, -0.32970900000000003], [0.32634799999999997, 0.127385, 0.32970900000000003]], "5798c184-9021-3555-8ee7-f376815d0076": [[-1.207109, 0.0, -0.535093], [1.207109, 1.025524, 0.617232]], "ecf49a6a-bd1f-4141-9f8d-3532ac60c013": [[-0.136133, 0.0, -0.136133], [0.136133, 0.36195700000000003, 0.136133]], "c1dfff67-871a-467b-aa2d-8cddf7043582": [[-0.242653, 0.0, -0.242653], [0.242653, 0.550665, 0.242653]], "57992c2e-6dc8-40da-b72f-37ded9f01c43": [[-0.27193, -2.9456e-10, -0.182875], [0.27193, 1.10393, 0.182874]], "df92f33a-e04b-4c1a-bcf8-cd6921927f21": [[-0.6927549999999999, -1.01351e-06, -0.21100200000000002], [0.6927549999999999, 0.760219, 0.21100200000000002]], "6a078309-118f-45e8-83a8-02f4425a712c": [[-0.42, 4.943849999999999e-06, -0.16604600000000003], [0.42, 1.51061, 0.16594899999999999]], "04c083bf-1bde-4e6a-a707-ac890b6ce79e": [[-0.60023, -4.57764e-08, -0.309495], [0.60023, 2.15, 0.309495]], "5bfa3133-28db-49f0-887c-1e904ee70eb9": [[-0.177911, -2.0730900000000002e-05, -0.219238], [0.177905, 0.686876, 0.219262]], "80cf00ca-49fb-4f92-9234-bf373a02a656": [[-0.42911299999999997, 0.0, -0.344616], [0.429432, 0.475739, 0.34470399999999995]], "30490b27-18f6-40c7-aee3-44269f52e883": [[-0.137772, 0.0, -0.13689], [0.137772, 0.792988, 0.13689]], "75d07f16-2b2a-3045-a61d-75149d105ccd": [[-57.5, 0.005, -57.5], [57.5, 91.4736, 57.5]], "5561010f-038d-47e9-95c2-662ba8fcaa94": [[-0.600298, -0.000388238, -0.19138100000000002], [0.601173, 0.711387, 0.192156]], "80133614-d043-401a-be51-86fadae7cb0a": [[-1.038396, 0.0, -0.201341], [1.038397, 0.514135, 0.201341]], "565c79ae-7602-4f3c-99d5-df732037e69e": [[-1.2383920000000002, 0.0, -0.459104], [1.238636, 0.834669, 0.459127]], "bfc1cd6d-3638-4cd2-9506-61fa2a144a91": [[-0.267384, -1.09579e-17, -0.180727], [0.267384, 0.691443, 0.180727]], "f615b69a-6791-408c-85e3-8ac19e33dda0": [[-0.993505, 0.0, -0.400255], [0.993505, 0.724924, 0.400255]], "3fd9b6da-072b-4f65-9015-4cd07b15e137": [[-1.044732, 0.0, -1.096187], [1.0446280000000001, 0.9934999999999999, 1.1009959999999999]], "e761c90e-d5c3-4efc-9194-436851afd50a": [[-1.22602, 7.62939e-09, -0.47072], [1.22601, 0.8967189999999999, 0.470634]], "e74be68c-9f40-3764-b844-e42ae4bba17c": [[-0.605788, -0.0, -0.60247], [0.605788, 0.752325, 0.60247]], "543075c6-e948-4a8a-a9e4-bebc988b3996": [[-0.290732, 7e-06, -0.25287400000000004], [0.290732, 0.569232, 0.25287400000000004]], "40e5ff75-d988-40ec-92e3-cb3ab899da83": [[-0.859367, 0.000125, -0.411129], [0.859367, 0.767951, 0.411128]], "93e24762-4c57-4923-b6c0-3de0d1661ca9": [[-1.03102, -2.09019e-17, -0.45164499999999996], [1.03166, 0.7004290000000001, 0.454372]], "858fd687-3698-4f72-bb3a-23b5355b6a05": [[-0.502997, -0.00031292500000000003, -0.502997], [0.502997, 0.665791, 0.502997]], "06cf2c51-14c7-4d67-9ae3-f86f9738e52b": [[-1.0928499999999999, 6.71871e-09, -0.5454180000000001], [1.0928499999999999, 0.7420019999999999, 0.545417]], "23460770-72bf-4227-913a-c2fc78813799": [[-0.639645, -2.62788e-17, -0.42916699999999997], [0.639645, 0.273517, 0.42916699999999997]], "300b25f3-c201-46ab-8e55-517f7383d6d9": [[-0.40685000000000004, -0.000122143, -0.44955199999999995], [0.40679299999999996, 0.200197, 0.450749]], "795b55df-4a0d-40e9-8458-8af1657637e7": [[-0.4411, 0.0, -0.460895], [0.4411, 1.001744, 0.460895]], "57f6f3ad-238e-4884-93f5-84cd9f36ddb0": [[-0.623394, 0.0, -0.48289099999999996], [0.623394, 0.414533, 0.48289099999999996]], "0fe0f46d-d3c7-428c-a0a0-e18f549279c7": [[-1.01085, -2.2225500000000002e-17, -0.468617], [1.01085, 0.730934, 0.468617]], "3e073b14-1677-4320-9b99-7e21ddc6066d": [[-0.301766, 0.0, -0.32623199999999997], [0.30189299999999997, 0.757085, 0.326079]], "10297250-34ce-37b0-897b-e588570b3adf": [[-0.900657, 0.0, -0.595427], [0.900657, 0.738022, 0.595427]], "aef18858-1e3f-49f4-9ef0-427b098bc1d7": [[-0.34346499999999996, -0.0, -0.343675], [0.34346499999999996, 0.497699, 0.343675]], "52f6a224-a4a5-3ac2-a7e1-23c799f0f33a": [[-1.269444, 0.0, -0.5343589999999999], [1.2694400000000001, 0.743703, 0.5343589999999999]], "a297d883-7452-4fad-a9d6-0f65ee2f1816": [[-0.491406, 0.0, -0.516839], [0.491406, 0.22761800000000001, 0.516839]], "03a8f97d-84f7-3f92-9511-cbe4fa4afbed": [[-0.30734100000000003, 4.4999999999999996e-05, -0.274364], [0.306796, 0.731294, 0.28284]], "44b8dd59-8e5c-4fb3-a3ca-dba9b7419cd2": [[-0.249244, -2.69096e-05, -0.242544], [0.248995, 0.7743099999999999, 0.241763]], "1e48aeab-e7da-4928-ab26-0122ebfc65b0": [[-1.93448, -3.81177e-17, -0.7508710000000001], [1.93441, 0.7151810000000001, 0.749521]], "217a1377-a996-4b31-9145-07c1a3ad438d": [[-0.816866, 1.06581e-17, -0.213056], [0.816866, 0.473112, 0.213056]], "710163bd-fdf3-4ca6-8b8f-1ebf70cc1d9c": [[-0.36398400000000003, -0.0006576700000000001, -0.32917900000000005], [0.364165, 0.20139800000000002, 0.329367]], "50ccc44b-eaf3-3dd1-819f-a9de5d8be620": [[-75.0, 0.0, -45.0], [75.0, 76.2, 45.0]], "3ecfe1f2-85b8-4e5b-a50c-9dcdb8fbe021": [[-0.238309, 0.0, -0.23899499999999999], [0.23852900000000002, 0.9322889999999999, 0.23899499999999999]], "36a4de8e-bdc1-410d-99d3-5acb5dacc5eb": [[-0.21, 1.43062e-08, -0.21], [0.21, 0.52, 0.21]], "0ce53f9c-0199-477e-9c85-bfaa0c53d0f9": [[-0.97136, 7.62939e-09, -0.181947], [0.97136, 0.7263729999999999, 0.181947]], "6b53784d-151d-4b34-abfd-753e8d128dc4": [[-0.45244100000000004, -1.06619e-17, -0.18798700000000002], [0.45244100000000004, 1.6271, 0.18798700000000002]], "5d40d146-8be8-42a1-81cf-7cbee8d86c26": [[-1.1502, -0.00016017300000000003, -0.53809], [1.1503700000000001, 0.734063, 0.537282]], "5a8b91a2-355f-4045-aa5c-9340f5ef73d0": [[-1.36754, 0.000279, -0.441553], [1.36754, 0.812762, 0.441553]], "25170520-05cb-4546-a6a7-89dc975e47ed": [[-0.292707, -9.20014e-05, -0.370637], [0.292728, 0.737406, 0.369839]], "da8570b9-119e-4a21-a23b-ca8b94000c30": [[-0.217932, 0.0, -0.217932], [0.217932, 0.626872, 0.217932]], "da77d625-9ff4-4fbb-b016-8f7e45ae4dec": [[-0.254038, 0.0, -0.264071], [0.254038, 0.589018, 0.264071]], "fe4e698c-0e01-4f32-9393-b28ee13ea005": [[-0.275, -1.11002e-17, -0.23644300000000001], [0.275, 0.65, 0.23644300000000001]], "e6fdeb3a-3f67-4914-9e60-8bbedc4a19a1": [[-0.6096, 7.62939e-09, -0.4572], [0.6096, 0.40793999999999997, 0.4572]], "795632a8-a440-4c80-9f97-68f856697c81": [[-0.725492, -5.1557699999999996e-05, -1.0739100000000001], [0.725982, 1.36711, 1.0731]], "52611711-f1ca-363f-beff-953c1a46fb68": [[-0.362246, 0.0, -0.337893], [0.362246, 0.620988, 0.34234499999999995]], "d973c9ae-fa9c-4028-93b4-f9d3ad61f4b8": [[-2.36408, 3.05176e-08, -0.64201], [2.36409, 1.86114, 0.6420239999999999]], "c2a52d98-de6d-4a53-91f5-2394d1987836": [[-0.343318, 0.0, -0.282764], [0.343318, 1.0344389999999999, 0.28156]], "9aaa05f2-d0d8-4511-9b53-bdcb3082e96d": [[-0.459504, 0.000302, -0.467632], [0.459504, 0.9642310000000001, 0.467632]], "1791e0c9-15fc-4fa9-80df-e73332ed6ce0": [[-0.520339, 0.0, -0.22456099999999998], [0.520339, 1.098808, 0.22456099999999998]], "95e883fb-e51b-4d06-a1b6-1565f36a6506": [[-0.43012300000000003, -2.96526e-08, -0.191376], [0.43012300000000003, 1.9658000000000002, 0.19038]], "c459d148-1bd0-4116-a734-38a658f173d4": [[-0.397339, -3.05176e-08, -0.399264], [0.397339, 1.05017, 0.399264]], "43c941c5-9eb0-3bb1-b7d1-d9d4f3eefc65": [[-0.65, 0.0, -0.35], [0.65, 0.6983750000000001, 0.36233699999999996]], "0dc42694-5351-491c-bbbd-0673e4900dd6": [[-0.252031, -1.53081e-17, -0.25], [0.252031, 0.7, 0.25]], "59719d96-c93f-4c19-84f3-cdb9c4287664": [[-0.536814, 0.0, -0.38278399999999996], [0.536853, 0.414621, 0.38278399999999996]], "5d969038-bf77-4e92-a7ab-e29940530823": [[-0.2991, -8.89091e-05, -0.21099], [0.299103, 0.459882, 0.211019]], "79c78d51-1192-4f7d-ba37-9d7f7e949cbd": [[-0.7251099999999999, -5.90883e-17, -1.00501], [0.7242019999999999, 1.09023, 1.005]], "8aa5d694-f1ad-3af7-811c-7341c44c1928": [[-0.299819, 0.0, -0.29979700000000004], [0.299819, 0.299951, 0.29979700000000004]], "f3733cc8-415b-48fd-9f0d-0d2682d036e5": [[-0.272094, 0.001465, -0.251295], [0.272101, 0.643224, 0.251359]], "10a99aac-9498-4086-bae7-1148248a9345": [[-0.40159300000000003, -7.28041e-05, -0.375869], [0.401798, 0.805402, 0.376145]], "796140c9-fab2-4d2b-9c6b-1493fcb4dc3d": [[-0.276519, 0.0, -0.24460300000000001], [0.276541, 0.565176, 0.24460300000000001]], "91f9c27b-d526-4668-9357-37e35148a54d": [[-0.514154, 0.0, -0.160451], [0.514154, 1.8504329999999998, 0.160451]], "6b264b9e-9c11-41a6-a600-b370abe6a231": [[-0.836005, 0.0, -0.520577], [0.836004, 0.730354, 0.52244]], "da64b6ef-d704-404b-a0e3-866d0e091362": [[-0.49873399999999996, -0.000522062, -0.247753], [0.49882, 0.8309340000000001, 0.247858]], "7e8d08f6-0f42-46a9-9259-27a67e19b8d8": [[-1.3581899999999998, -6.57625e-06, -0.47938899999999995], [1.3584, 0.8622190000000001, 0.47944400000000004]], "87d6652f-2222-4926-a3b8-d466ac491695": [[-1.183993, 0.00037400000000000004, -0.47004399999999996], [1.183313, 0.902544, 0.470004]], "0578c7ef-888a-43f0-aa8b-e248816a40b9": [[-1.14215, -6.94327e-06, -0.382254], [1.14215, 0.763295, 0.382759]], "581fa64e-ab79-428e-9876-0e0d6c1e72fc": [[-0.29757300000000003, 2.3409799999999997e-05, -0.34354], [0.297515, 0.39768000000000003, 0.34354]], "d53ddf4e-fb97-4efd-a9ca-6f3ea0debd87": [[-0.400364, 0.0, -0.397901], [0.40045299999999995, 0.8306359999999999, 0.397982]], "1927715c-71b3-438a-8044-c8e5208f6e52": [[-0.537564, -8.39697e-05, -0.442772], [0.536957, 0.993614, 0.443266]], "5b8ba1e5-30b8-448f-97e6-50a6741500f3": [[-1.0, 2.68729e-08, -0.225655], [1.0, 0.38000100000000003, 0.225655]], "9892f752-2515-4ba6-8e29-e57faaf21d9a": [[-0.7328319999999999, -0.00011357400000000001, -0.301145], [0.732848, 1.79065, 0.300654]], "8e5d7139-69ea-4ed4-abb7-1bb047c378c5": [[-0.385453, 1.1391000000000002e-18, -0.48205], [0.38558, 0.838609, 0.48206699999999997]], "c5aaf107-c8d0-4b01-b51d-9c2bddef8e2a": [[-0.26231000000000004, 0.0, -0.256063], [0.26231000000000004, 0.49314100000000005, 0.256063]], "155ab62e-4ea5-4539-a5bb-a0833c93bc82": [[-0.248887, -9.32587e-18, -0.14731], [0.248887, 0.489651, 0.14731]], "e12aebb3-8ebf-49db-a778-b5aaed6f8dd8": [[-0.9609099999999999, 0.0, -0.265884], [0.9608249999999999, 0.820006, 0.266004]], "bd2a6793-4c84-49a6-9311-3cc71701dccc": [[-0.411595, 0.0, -0.411826], [0.412029, 0.8079189999999999, 0.411667]], "48fe0ce1-ca3d-42fa-8f15-e92e93ce37b4": [[-1.31903, 1.26987e-07, -0.7054600000000001], [1.31854, 1.83832, 0.7048009999999999]], "fe004c93-4f3c-4388-8e76-632ba4232d13": [[-0.7816679999999999, -1.74285e-17, -0.347546], [0.7816679999999999, 0.798553, 0.34783200000000003]], "e5b506e0-891f-4403-8bf4-30a365157df4": [[-0.818309, 0.0, -0.532366], [0.818309, 0.870881, 0.532366]], "d1c36ec7-90df-4b54-917a-6ec1782dfe9d": [[-0.316381, 0.0, -0.32193800000000006], [0.316381, 1.136399, 0.32193800000000006]], "6a82eedd-a73b-4704-97d1-2b7576199f6b": [[-0.101005, 0.0, -0.101005], [0.101005, 1.058301, 0.101005]], "66373c84-4872-433b-a949-c4e5ba43e363": [[-0.813363, -0.000411431, -0.357706], [0.8133549999999999, 0.7963509999999999, 0.356484]], "5941da44-f3ca-49f3-89f9-1f150ae26eec": [[-0.33563200000000004, -9.536740000000001e-10, -0.379053], [0.335564, 0.640532, 0.379482]], "5b2d8863-28d3-401d-a1bf-55fc1b20b104": [[-1.31281, 5.21319e-17, -1.17605], [1.31281, 1.86248, 1.17595]], "d0681e95-d3a1-4461-8f6e-dff29ce7da47": [[-0.565059, -1.08806e-05, -0.20335799999999998], [0.565059, 1.9022999999999999, 0.20338]], "121d6244-5041-4ff5-8e4d-1d46252705f7": [[-1.003125, 0.0, -0.40990099999999996], [1.003125, 0.938987, 0.40990099999999996]], "d7313fb2-845a-42b1-9a78-3116034d3569": [[-0.8, 0.0, -0.1], [0.8, 0.13, 0.1]], "83c665db-6a47-3479-ac5c-b6500ed88b09": [[-0.20452700000000001, -0.000271, -0.349039], [0.20543399999999998, 0.7579980000000001, 0.349039]], "447d2346-253a-3f2d-aa8a-6a924ca99eaa": [[-0.293902, 0.0, -0.171871], [0.293902, 0.534394, 0.201462]], "d561f190-a983-4ec2-bb30-5d917d513e83": [[-0.33411700000000005, 3.78819e-05, -0.411895], [0.333703, 1.04087, 0.411847]], "aa3f16ac-5e38-4742-ade1-dfab91532a5c": [[-0.81, -6.86388e-18, -0.21790400000000001], [0.81, 2.4, 0.218053]], "d0b20d67-e033-4418-a7c8-5c58b8c77bae": [[-1.204988, 0.0, -0.546165], [1.208766, 1.211324, 0.546165]], "589d864a-67dd-462b-aa1e-43b3a50d7ba6": [[-1.4999799999999999, -0.000874239, -0.837263], [1.5001499999999999, 0.8348019999999999, 0.8358140000000001]], "ccb192ec-a525-4f30-b998-64d88890495c": [[-0.24822500000000003, 9.54613e-18, -0.18942], [0.24809599999999998, 0.741602, 0.18942]], "67f46837-0488-3782-8832-4c27c1bea65e": [[-0.235139, 0.0, -0.248975], [0.235139, 0.7444289999999999, 0.248975]], "abece5ed-58c3-432b-90be-34be9df01164": [[-0.610596, 9.88207e-05, -0.47557699999999997], [0.610937, 0.40671599999999997, 0.475255]], "cf98e3fd-fd01-4179-a68d-f66809c90fbe": [[-0.9689369999999999, -3.09374e-06, -0.407119], [0.968724, 0.7906829999999999, 0.407506]], "2927e373-26b6-4530-9048-be1c82e4ad83": [[-0.55501, -0.00033952900000000004, -0.5166879999999999], [0.554795, 0.6667690000000001, 0.516244]], "ef14301a-3bad-4e12-9407-fc8253bbb374": [[-0.49333799999999994, -5.289859999999999e-18, -0.0873887], [0.49333799999999994, 0.168979, 0.0873887]], "5f4ce808-c936-49c1-a65c-87a48c3b5bc3": [[-0.34479, 0.000835654, -0.37222900000000003], [0.34393500000000005, 1.1094, 0.37148000000000003]], "10a41aea-5a1f-4780-9699-5aed914a904e": [[-0.8711, -6.24323e-17, -1.08047], [0.871095, 1.31791, 1.08047]], "5c12bb5b-3ae0-4e07-acba-059ac03f0850": [[-0.622147, -6.28604e-17, -1.03785], [0.622147, 0.999101, 1.03785]], "7584c98c-c346-4f8f-9f64-acf03b58c441": [[-0.216761, 1.52588e-08, -0.216761], [0.216761, 0.520317, 0.216761]], "570156ed-e3c5-46e2-85bf-ef08ca2a215f": [[-0.673879, -7.10746e-21, -0.16403800000000002], [0.673879, 0.71572, 0.16403800000000002]], "5ad1da74-541f-4453-8e99-ce8e66899018": [[-0.7465569999999999, 6.73532e-09, -0.486836], [0.746712, 0.821759, 0.486276]], "26ef0653-d7b8-4eb5-9d89-81c12224e20a": [[-0.971558, 0.0, -1.099503], [0.971558, 1.228013, 1.099503]], "a6355af5-6c60-45bb-90ba-c0734e0ea278": [[-0.0908957, -5.31232e-18, -0.09004440000000001], [0.0908957, 0.556539, 0.0900443]], "6beb1ed3-1077-4cb2-9c5d-59b17cde5602": [[-0.5452170000000001, -3.28457e-05, -0.534388], [0.545171, 0.437502, 0.53413]], "adb163e8-b558-4292-a52b-8f6cff7156bd": [[-0.6187039999999999, 0.0, -0.166756], [0.618645, 0.9873139999999999, 0.166756]], "1d50f97b-dea0-41b1-b9bf-ec2fbe90a3f7": [[-0.35139200000000004, -1.28031e-05, -0.409952], [0.351289, 1.0388, 0.41023899999999996]], "4893d1b2-647b-4f0f-9bca-3123fb28c881": [[-0.207672, 1.7e-05, -0.209316], [0.20759, 0.9723869999999999, 0.209316]], "adc6550b-67ea-49f3-80a9-e7f93fa45c18": [[-0.272386, 0.0, -0.266802], [0.272386, 0.7843380000000001, 0.266802]], "1a420bf1-524c-4b37-9e90-ab31a547639a": [[-0.8162590000000001, 9.18862e-06, -0.988244], [0.8162590000000001, 0.881412, 0.9876170000000001]], "0be4e7f3-4e00-45b9-a2cf-90de436cd6e4": [[-0.8463120000000001, 0.0, -0.46455199999999996], [0.846355, 0.7481, 0.46455199999999996]], "3e6c45ba-9989-4e6f-bc3a-63285ae10d6d": [[-1.168241, 0.000103, -0.473437], [1.168578, 1.070048, 0.47421599999999997]], "75eaf425-4852-4096-a44a-876a42522e74": [[-1.10795, -0.00150999, -0.48042900000000005], [1.10795, 0.776737, 0.48113500000000003]], "bbd0f2af-7e6f-4a2a-bff5-0eb73c2fc7bd": [[-0.861092, 8.53784e-08, -0.174665], [0.861092, 2.0709999999999997, 0.17428000000000002]], "6f77a27e-a254-4350-ad98-6d2d3dc131e5": [[-0.975879, 0.0, -0.491475], [0.975951, 0.896609, 0.492097]], "dc133c3a-d84e-4a5c-9718-010bbcebf30b": [[-0.519201, -4.57764e-08, -0.512521], [0.518119, 0.430314, 0.512534]], "013207f3-b388-4335-b2b1-a91dd49be349": [[-0.197488, -1.26631e-17, -0.209054], [0.197488, 0.700317, 0.209025]], "576b23e6-f0a6-4b24-a87f-81475a0513b8": [[-0.596094, 5.85706e-05, -0.296288], [0.594925, 0.599202, 0.29452300000000003]], "8d36ee59-4316-4ec5-9aab-b03242410ffb": [[-0.41882199999999997, -1.41389e-06, -0.403382], [0.419124, 0.9116219999999999, 0.402885]], "852a2fc6-9667-44bf-b0cd-bc252f528a87": [[-0.899911, 0.000124, -0.195], [0.89991, 0.41, 0.195]], "85813056-b5ba-47e8-a940-9c3540ea9cb1": [[-0.318387, 0.0, -0.318387], [0.318387, 0.451546, 0.318387]], "8d395ed3-def3-4f91-9173-e243e52ded0d": [[-1.07802, -2.46121e-17, -0.405443], [1.0817400000000001, 0.8719880000000001, 0.40680999999999995]], "0bd4c3a5-444d-4848-8a5f-9724bd3bb146": [[-0.9261879999999999, 0.0, -0.228099], [0.9261879999999999, 0.8809990000000001, 0.228098]], "648885b4-928f-4e9a-8417-a60707dd2614": [[-0.954619, 0.0, -0.41139000000000003], [0.954619, 0.7996939999999999, 0.411346]], "28db412b-c62b-4c83-ae16-c0ce86d93491": [[-0.380494, -7.23858e-18, -0.184627], [0.380494, 1.0658400000000001, 0.184748]], "5adbb127-4932-482e-987b-8e9137112a3d": [[-0.26676, -1.05471e-17, -0.26077100000000003], [0.26676, 1.14366, 0.260923]], "ba1a52e3-32fe-495f-a350-e8ad8e57b07d": [[-1.24975, -3.53813e-06, -0.6490130000000001], [1.24975, 0.739894, 0.649351]], "cd3e8ef6-936e-4654-b793-3133191cb1ef": [[-1.19958, -7.11252e-05, -0.510972], [1.19838, 0.980036, 0.510655]], "66be8e9c-8fec-41e1-b851-336e8389e65e": [[-1.0781, 0.0, -1.072022], [1.075429, 1.161895, 1.070969]], "37495c95-4930-4511-89e4-f56faa2ad0e7": [[-0.169557, 3.9734e-08, -0.169557], [0.169557, 0.251554, 0.169557]], "4fdb17b0-77f8-4651-8062-11e83e082762": [[-1.1604999999999999, -9.31043e-08, -0.170044], [1.1604999999999999, 2.41609, 0.17059999999999997]], "3c8da5f2-c380-40d1-90e8-e1c38fd6395e": [[-0.65, 0.0, -0.1826], [0.65, 0.515666, 0.18256699999999998]], "8a53a72b-6007-45bd-84a5-e7ef49480399": [[-0.386633, -0.000117935, -0.395056], [0.38679900000000006, 0.8129470000000001, 0.39381900000000003]], "7fe102e7-1b44-401c-a3fa-4362b5e2d77d": [[-0.9916320000000001, 0.0, -0.25882], [0.9916320000000001, 0.485679, 0.25882]], "beb60ebb-89fa-46de-b9d1-7c34f04aad2c": [[-0.44, -0.0, -0.200114], [0.44, 0.75, 0.200114]], "ed3217e9-adaa-4e05-b7cb-d1e2a9b7bbf1": [[-0.264271, 0.0, -0.262146], [0.264271, 0.47287799999999997, 0.262146]], "4cb0cff6-41e7-487c-8476-9253a21f88f4": [[-0.752096, 0.0, -0.203462], [0.752096, 0.832939, 0.203462]], "5ee01425-f6c6-4743-a733-1f26aa4d97b7": [[-0.22547999999999999, 2.27465e-06, -0.19347], [0.22547999999999999, 0.441789, 0.193554]], "0e152d0c-5720-4889-ba89-8091492ff398": [[-0.701124, 0.0007530000000000001, -0.397337], [0.701198, 1.272214, 0.397337]], "f829b69c-028e-47c1-bb40-9dc9e61cf61e": [[-0.155283, -0.0, -0.132443], [0.154766, 0.7496290000000001, 0.132443]], "4d19c8b9-bbf9-4d51-83c6-3c7d726163f7": [[-0.66065, 0.0, -0.5547529999999999], [0.661564, 0.8776600000000001, 0.555179]], "9e62de1c-9e8b-4e39-bc9f-29bef87bb4b5": [[-0.401404, -0.0007044, -0.401141], [0.401719, 0.746054, 0.40110500000000004]], "30943e24-eeba-44c6-8f46-eb86c4b187fa": [[-0.31837499999999996, 2.6e-05, -0.378129], [0.318655, 1.132367, 0.37823999999999997]], "22a234bc-ae89-42ea-b091-847019bea405": [[-0.975, 0.0, -0.350022], [0.975, 2.7, 0.350022]], "770a3313-2ecb-478f-b38f-e24bf7cd8fbc": [[-0.9989830000000001, -7.86679e-06, -0.320813], [0.998982, 2.1002, 0.320635]], "5a02164f-8fa8-4b7d-b654-aaf0afd9823b": [[-0.377429, 2.5e-05, -0.363526], [0.3775, 0.948782, 0.363466]], "55450b11-37ae-48d8-ae54-4243bcb537fa": [[-0.41834400000000005, 6.10352e-08, -0.458919], [0.41834400000000005, 1.45512, 0.459162]], "74ddb581-3e00-43c0-ac78-63f6f765d0d2": [[-1.13026, -1.5329e-17, -0.319532], [1.13026, 2.46, 0.319532]], "69cd87bf-5d95-45ca-97a4-5f538d72bd68": [[-0.259694, 1.12522e-17, -0.198323], [0.259694, 0.5, 0.198323]], "1dd396cd-9d00-37c3-a2eb-eaef7b2124ac": [[-1.24597, 0.003834, -0.587304], [1.24597, 0.811187, 0.587304]], "288493dd-0154-40ee-b8ec-43c42bb7bcba": [[-0.961674, 0.0, -0.275837], [0.961674, 0.6856319999999999, 0.275837]], "9d61d146-fc6a-4ad3-96a4-da5c4427bd0c": [[-1.085, -5.71327e-18, -0.185184], [1.085, 2.44, 0.185184]], "e378c461-b73e-43ff-aa47-bc393b097fa5": [[-0.866764, 0.0, -0.8109480000000001], [0.866847, 0.510426, 0.8110259999999999]], "24d58179-b687-4920-8652-a66745d787d7": [[-0.325, -1.05809e-17, -0.200498], [0.325, 0.484889, 0.200498]], "70dd0970-aa27-4365-b15b-a4f60cedbeee": [[-0.611781, 0.0, -0.641408], [0.611781, 0.39, 0.641408]], "4054215a-9c91-4590-a2e8-4b2c20cbb5f0": [[-0.71191, -2.40166e-05, -0.305348], [0.7117140000000001, 0.611205, 0.307006]], "57391c99-e761-481c-a8ea-fb95ad764fd9": [[-0.8366979999999999, 0.0, -0.194243], [0.8366979999999999, 1.069372, 0.194243]], "b0053651-1075-4dfd-a281-a3546156d06b": [[-1.214719, 0.0, -0.38225099999999995], [1.214986, 0.550914, 0.38225099999999995]], "a60594f0-f49e-40f9-9dc1-f48aa35c0404": [[-0.639571, -2.19378e-17, -0.364844], [0.639571, 0.449992, 0.364844]], "906eae3a-3643-4c3f-8287-e2073bcdb53e": [[-0.9542539999999999, 1.86866e-24, -0.359082], [0.9542539999999999, 0.616811, 0.359082]], "7eb290b5-fc48-4981-bfe9-84ee0b34b988": [[-0.9483499999999999, -4.5381500000000006e-05, -1.05705], [0.9483889999999999, 1.24945, 1.05671]], "2858fddc-7b35-4fb7-9eb8-78e7194b34f2": [[-1.101269, 0.000245, -0.430229], [1.101332, 0.755925, 0.429778]], "12c085fc-2f54-4b13-95e0-0e00733e1bc1": [[-1.45348, -1.14441e-08, -0.522953], [1.45377, 0.8003910000000001, 0.523046]], "ac5ffdec-f9cd-4b7e-9291-654bd85672ce": [[-0.665295, -8.660109999999999e-08, -0.14710499999999999], [0.665295, 2.44754, 0.14710499999999999]], "af9688ce-a55b-435e-b81c-b4dbfa712f08": [[-0.7390000000000001, -3.29029e-05, -0.202196], [0.7390000000000001, 0.59739, 0.20218599999999998]], "d42deb56-df6e-44ed-b34a-b54f76a8015e": [[-0.25953, 0.0, -0.25953], [0.25953, 0.496063, 0.25953]], "af8f84de-bb38-49e0-9e39-ffd0511dd65b": [[-0.255641, 0.0, -0.21993600000000002], [0.255641, 0.6493720000000001, 0.21993600000000002]], "07d9fb2b-9d82-4ced-a712-19071abd9f21": [[-0.4, 2.64015e-08, -0.151], [0.4, 2.4, 0.151]], "bddfe394-975f-41a8-92c9-3ebe7f315c60": [[-0.302031, 1.92228e-09, -0.185611], [0.30203, 0.510812, 0.18559799999999999]], "f8d8856a-5d51-45e9-9fa8-49c074994101": [[-0.261439, 0.0, -0.250019], [0.261439, 0.6103540000000001, 0.250019]], "18b518d0-aba3-4440-8f3d-acd8ebedacb8": [[-0.899317, -0.000153162, -0.37254600000000004], [0.899316, 2.07418, 0.37254600000000004]], "22db3bf7-ded6-4fb2-bd2f-35e951dd83a2": [[-1.24, 4.00543e-08, -0.300026], [1.24, 2.39, 0.300026]], "96891ed3-7a35-46bf-ac48-f668bd09e22c": [[-0.9309999999999999, -9.16181e-18, -0.197378], [0.9309999999999999, 2.315, 0.197985]], "1c8dfc96-1144-4be8-8894-e064d672a86c": [[-0.504118, 0.0, -0.523551], [0.50449, 1.053741, 0.5233789999999999]], "041d2c63-6368-4da6-9f22-f27d53f835d0": [[-0.9687730000000001, -4.30393e-05, -0.407214], [0.968754, 0.790855, 0.40738599999999997]], "11eb5631-12be-45e6-9428-dd65e897d733": [[-0.252552, 0.0, -0.268393], [0.252552, 0.914212, 0.268393]], "0f49ec5a-5bec-4edd-98ac-abb7039b8e3e": [[-0.42336399999999996, -0.000190337, -0.442335], [0.423329, 0.7474979999999999, 0.442335]], "56b52214-e585-4207-a166-d076b9173bee": [[-1.272233, -0.0, -0.46220100000000003], [1.271869, 0.818177, 0.462173]], "4ade3c3f-e0e2-4dfa-a5fe-b097e85cab20": [[-0.373189, -0.0, -0.35518099999999997], [0.373243, 0.6877119999999999, 0.355012]], "2548400f-f2a5-479e-ba3b-0d8ab01d72f9": [[-0.5184000000000001, 0.000333, -0.503147], [0.518173, 0.848292, 0.502804]], "118a44f1-d0b0-4a76-a03f-2ec796642fd2": [[-0.25049, -4.15587e-05, -0.25045300000000004], [0.25045300000000004, 0.455698, 0.25045300000000004]], "49fb3649-6a57-46d6-8c29-16658e7d1d09": [[-0.379238, -0.000512091, -0.43339599999999995], [0.37917900000000004, 0.840564, 0.433202]], "2f77e6db-9e31-4b42-9813-850a9d5ef7a0": [[-0.302533, -1.43044e-06, -0.227251], [0.30255, 0.617239, 0.22763000000000003]], "21bf54d9-7e1d-4676-938b-2996bfa729aa": [[-1.12992, -0.00015613200000000002, -0.45191000000000003], [1.12987, 0.869924, 0.452474]], "0c3d3ac9-f9f8-3002-ab41-d3753ebd970b": [[-0.271029, 0.0, -0.271029], [0.271029, 0.731388, 0.271029]], "e8a6dc8b-566c-49c7-b6a6-dfa189d148d1": [[-0.8717579999999999, 4.78399e-05, -0.21644300000000002], [0.8717579999999999, 2.45957, 0.21688600000000002]], "54c1926b-e406-40b2-97a4-8f236fe1c701": [[-0.55, -1.47751e-17, -0.258204], [0.55, 1.51519, 0.258204]], "a530a844-9026-4caa-b238-4afec94879af": [[-0.27, -1.04671e-17, -0.212778], [0.27, 0.519693, 0.212778]], "ee7ce223-8224-451a-96d5-ddbeeda0687b": [[-0.28881, 0.0, -0.20961300000000002], [0.28881, 0.589, 0.20961300000000002]], "d5c89b86-6e6e-4cb8-b546-b2f8db706f0e": [[-0.889846, 0.0, -0.49273000000000006], [0.889846, 0.712496, 0.49273000000000006]], "28c251d0-b745-405f-a477-47e0a62071d6": [[-1.0441200000000002, -0.000463173, -1.10141], [1.04485, 0.887895, 1.10352]], "95bff1a8-1fec-439c-bf0a-fd33a15f6283": [[-0.477306, 1.10865e-08, -0.411773], [0.477723, 0.879055, 0.41206499999999996]], "7b277dfe-08d8-45aa-b6f7-85fb8e825207": [[-0.8305840000000001, 0.0, -0.21537800000000001], [0.8305840000000001, 0.8881610000000001, 0.21537800000000001]], "903efac5-68d2-4f8b-920a-cfdcd5321855": [[-1.013794, 0.00023, -0.406425], [1.01382, 0.763649, 0.405859]], "78c603ae-d755-41a0-bb7e-759220303454": [[-0.29249600000000003, 0.0, -0.23365], [0.292473, 0.558064, 0.23365]], "b8049a96-1941-4f46-a788-347f425a21f2": [[-0.601083, -2.3871500000000004e-18, -0.40003999999999995], [0.601083, 0.46, 0.40003999999999995]], "2535584c-19aa-4cca-a35b-06b8dce3be66": [[-0.604767, 0.0, -0.6347039999999999], [0.604767, 0.436421, 0.6347039999999999]], "48261cc3-38e4-4cf5-af61-a16ae090eaef": [[-0.507014, -1.52161e-17, -0.33800199999999997], [0.507014, 0.630323, 0.33800199999999997]], "76741704-e1bd-46c5-a816-d65369c36eac": [[-0.270677, 0.0, -0.270677], [0.270677, 0.537328, 0.270677]], "3d8796e7-811a-47a2-93e1-b0fefede22e6": [[-0.416643, 2.2000000000000003e-05, -0.44420699999999996], [0.41651000000000005, 0.878391, 0.444284]], "51deae78-e860-4aee-a9a7-0f5c8bfddb5d": [[-0.5500010000000001, -7.13374e-06, -0.290109], [0.55, 1.07768, 0.28886500000000004]], "733832f7-e5d8-4580-b8eb-d20c6ad02217": [[-1.10676, -3.47639e-10, -0.245471], [1.10676, 0.514801, 0.245471]], "7e20b3c7-1a3f-4a74-8673-15449231a0ce": [[-0.632251, 0.0, -0.64581], [0.632251, 0.414539, 0.64581]], "4945b111-b731-454f-b6c9-f7c22574c607": [[-0.9, -3.49272e-08, -0.200761], [0.9, 0.39996000000000004, 0.200762]], "dd18ce90-ccc9-47f3-bd96-aefb0b818e89": [[-0.434439, -2.44141e-07, -0.19026900000000002], [0.434439, 2.484, 0.19026900000000002]], "f2933a38-0651-46c9-af0c-726ae5a88e6f": [[-0.301458, -0.00114861, -0.301534], [0.30152999999999996, 0.81635, 0.30145700000000003]], "b37986c7-b76c-4d31-9f2c-ef1e861ec72a": [[-0.43613100000000005, 0.0, -0.435764], [0.43613100000000005, 0.818435, 0.43613100000000005]], "05d1481f-8a79-4995-ad2d-1a43212830a1": [[-0.165607, 0.000226, -0.16824999999999998], [0.16619599999999998, 0.955445, 0.165043]], "5f423a8c-44ee-496a-bc35-d924352076e2": [[-0.26182300000000003, 0.0, -0.26182300000000003], [0.26182300000000003, 0.457613, 0.26182300000000003]], "3f28bad9-5771-40b9-bb9e-491b7ba3449f": [[-1.61233, -0.00031945599999999997, -0.506134], [1.6125, 0.7798919999999999, 0.506354]], "9c949ef1-f9ca-4505-8107-1e87a1568fc7": [[-0.324743, -0.000102439, -0.23075299999999999], [0.324743, 1.21542, 0.231306]], "6c5ead8c-e88c-49dd-bb19-53b5ac4e6f5b": [[-1.613155, 1e-06, -0.660536], [1.613155, 2.211045, 0.660536]], "d39ae154-797b-4e05-9054-037d7c64bc10": [[-0.895983, 0.0, -0.43369], [0.8959619999999999, 1.275745, 0.434135]], "a29bc2b4-5d18-4fd6-b0ce-736d464c7310": [[-0.366813, 0.00021600000000000002, -0.367059], [0.366813, 0.901988, 0.366682]], "78899c9d-7dd9-4e3c-b5cf-98d05183d4c1": [[-0.225, 0.0, -0.2], [0.225, 0.96, 0.2]], "7bcbfa10-cf55-4eb2-b3f8-00a90a912223": [[-0.707178, -1.53113e-17, -0.25005299999999997], [0.707178, 2.6, 0.25005299999999997]], "279e224b-8295-481b-89b7-7e6e5981e586": [[-0.813373, 0.0, -0.44419600000000004], [0.813373, 0.714461, 0.44419600000000004]], "40d2c9d3-d44e-46c9-bfcc-2a4555acf11d": [[-0.745603, 0.0, -0.318328], [0.745535, 0.816356, 0.318429]], "be222e30-10a6-4e3c-85ee-8144f581482a": [[-0.275937, 0.000115138, -0.274829], [0.27606200000000003, 0.335413, 0.274538]], "637fbe20-e30b-44a6-9755-3a64c32580c6": [[-0.23366, -6.12323e-18, -0.1], [0.23366, 0.937654, 0.1]], "1573c3f3-8fc8-4db1-85df-cbebc58a1bf9": [[-1.327115, 0.0, -0.4482], [1.327321, 0.844559, 0.448611]], "27f4b8c5-44d2-455e-99ef-ea7ea31f7d93": [[-1.28733, -2.40678e-17, -0.525375], [1.28733, 0.889786, 0.525347]], "099858f8-f2e3-43a8-a0fb-8f3230946dd3": [[-0.633873, -4.29121e-05, -0.228765], [0.633873, 0.52968, 0.228765]], "0fdbc33f-7c4e-33ef-8349-284361e6cf93": [[-0.243387, -0.0, -0.274547], [0.23555800000000002, 0.8468519999999999, 0.258979]], "d36ed0a4-986c-4f35-9505-0c86b2f43532": [[-0.40120100000000003, -0.00010472300000000001, -0.401325], [0.401619, 0.51109, 0.401469]], "1e261247-2059-4560-8043-c4dbd5ea692b": [[-0.55, 0.0, -0.37251199999999995], [0.55, 0.469298, 0.37251199999999995]], "199de94a-82c0-38e4-9475-de998fb04054": [[-0.669555, -0.0, -0.23905], [0.669555, 0.7890510000000001, 0.23905]], "297bf411-0477-4ae3-afd2-f25344209549": [[-1.06491, 1.80021e-17, -0.303997], [1.06491, 2.66367, 0.303997]], "6fa9f289-ed6f-48d1-a042-68e37b45af66": [[-0.2, 0.0, -0.2], [0.2, 0.5502750000000001, 0.2]], "00dd3e56-a852-43fe-b5e1-b9ba98772755": [[-0.836878, -1.24301e-17, -0.246878], [0.836878, 2.27, 0.246878]], "35e17ac9-b8ac-4980-a908-cd7b070cb718": [[-0.9267350000000001, 5.60421e-17, -1.00237], [0.9266169999999999, 1.02413, 1.00495]], "05a1022b-8ae9-437f-8913-e2a337780905": [[-0.596973, 0.0, -0.176251], [0.596973, 2.385001, 0.176251]], "33452cb3-0c05-43c9-a34d-fe4bfc3979f4": [[-0.6, 0.0, -0.156931], [0.6, 0.720438, 0.156931]], "014ab495-1a3d-38ab-92a3-e56480d2bc69": [[-0.296877, 0.0005099999999999999, -0.27949999999999997], [0.296879, 0.8723050000000001, 0.27949999999999997]], "43e87cfa-50da-4ffa-835c-bb39a7d05cb5": [[-0.251511, 0.0, -0.287369], [0.251511, 1.168537, 0.287369]], "8b0dad02-3ca9-4b41-a8b4-f476f27b25e8": [[-1.232109, 0.0, -0.310462], [1.232109, 3.1094600000000003, 0.310462]], "7875ba68-46bf-4e43-b409-761dc4a0f7af": [[-0.33563200000000004, 0.0, -0.335837], [0.33563200000000004, 0.335207, 0.335754]], "0eefa70c-dc58-423f-a41b-633f81ffdf76": [[-0.540536, 0.0, -0.5552360000000001], [0.540536, 0.4276, 0.5552360000000001]], "21dd8290-cbec-456a-b881-fe327a9b7c63": [[-1.02231, -3.9459800000000003e-17, -0.7281019999999999], [1.02231, 1.8388900000000001, 0.7281019999999999]], "738c7db8-7ce4-4b53-b9ef-bbf32be790c4": [[-0.22859300000000002, -0.000430158, -0.229237], [0.22883900000000001, 0.45014400000000004, 0.22942099999999999]], "cb2dd77f-9201-4f7d-a264-2079a733c199": [[-1.09613, -8.46405e-09, -0.537919], [1.09613, 0.715964, 0.537919]], "6e898703-342a-4886-ad43-794337f55cdd": [[-0.489178, 0.0, -0.489452], [0.489335, 0.30662, 0.489298]], "080d9677-bd32-4bf7-b24a-217b21c0ca52": [[-1.226277, 0.000195, -0.445764], [1.226277, 0.973707, 0.445764]], "591eef6d-e524-4245-bf63-62f9c0763975": [[-1.36632, -0.0009693359999999999, -0.821593], [1.36689, 0.78842, 0.821577]], "1feec0c4-740b-4c87-b30a-077eefd39a59": [[-0.362029, 0.000256, -0.37728], [0.361857, 0.833873, 0.377141]], "69a2550c-ec04-44d9-a621-e601330a9cb6": [[-0.632572, -0.00126197, -1.12928], [0.630993, 0.892424, 1.12928]], "10ba4831-6d29-460b-8eea-7badcf25cef4": [[-0.9499920000000001, -0.000321446, -0.414602], [0.9499920000000001, 0.91821, 0.41407400000000005]], "0956955e-54b9-4ac1-9766-6fcd24df6a95": [[-0.377278, -3.03669e-05, -0.253749], [0.377278, 1.0521800000000001, 0.253736]], "4a6cd5c8-7cea-4bdb-bb20-b769147b2f98": [[-0.797119, 1.01124e-17, -0.5013369999999999], [0.797119, 0.34, 0.5013369999999999]], "51bbd7a8-08e7-480e-9ddc-719cc023d552": [[-1.37637, -0.000196338, -0.507864], [1.37709, 0.766256, 0.507178]], "309acc6f-aeed-49cf-b4c9-3f21f48b9630": [[-0.28725100000000003, 0.0, -0.16538599999999998], [0.28725100000000003, 1.216031, 0.16538599999999998]], "7beaae7a-db75-4db1-b72b-5c7af7a00101": [[-0.504458, 0.0, -0.329423], [0.504458, 0.38219099999999995, 0.329423]], "e9c02f97-2306-45be-ad3e-7bc2c6697857": [[-0.6330749999999999, -4.0928200000000006e-06, -0.262521], [0.6330749999999999, 0.874137, 0.263457]], "3fed7e15-a750-4c1d-b979-cc4258359ff3": [[-1.29114, -2.5007699999999997e-17, -0.497105], [1.29063, 0.970183, 0.497603]], "3b3bb273-5e5e-447d-ad41-1db7384ef8e8": [[-1.265057, 0.000956, -0.563812], [1.265227, 0.954564, 0.564787]], "4efd1db2-3b39-49b3-a23a-96f791d981b0": [[-0.395541, 0.0, -0.407194], [0.39556800000000003, 0.871191, 0.407293]], "9c202e86-37dc-46c2-8c30-81cbac856a5e": [[-0.7528619999999999, 3.79426e-05, -0.853682], [0.7528619999999999, 1.11283, 0.853461]], "6c5db1f5-380a-4fcd-a2fc-b17b62a5b176": [[-1.11615, -0.000586269, -0.609306], [1.11626, 0.996071, 0.6089829999999999]], "6069c9c1-c431-4e5c-8dde-77a23f6408bd": [[-0.183245, -3.95001e-13, -0.12889], [0.183245, 1.4943600000000001, 0.12889]], "acc60b8a-47a8-4bf6-b0f4-9eb4ffce2f32": [[-0.279977, 5.6e-05, -0.309957], [0.279739, 0.816943, 0.3098]], "ce090c4f-3c69-430b-bb50-d6656edfc412": [[-1.40834, 0.00038239700000000003, -1.30657], [1.40834, 0.948163, 1.30657]], "f91bc6a2-2f04-4f33-87b0-a421a270a468": [[-0.313801, -8.30332e-06, -0.395826], [0.313801, 0.8782340000000001, 0.39585299999999995]], "f60edc39-ce3a-4dfd-aa70-57389932b8bb": [[-1.2868199999999999, -1.1527e-05, -0.41968200000000006], [1.2875100000000002, 0.76924, 0.419112]], "32c8023c-17e8-4148-9fbf-8bd0c49c0734": [[-0.06435010000000001, -2.77413e-07, -0.0154752], [0.0643393, 0.940522, 0.0154995]], "1afc1dc1-f024-4f5f-aa68-6f4ef927866a": [[-0.330276, 0.0, -0.330276], [0.330276, 0.583171, 0.330276]], "1c68f89f-7af0-4d07-b051-fcf6248e9563": [[-0.250486, 0.0, -0.25054099999999996], [0.250486, 0.720438, 0.25054099999999996]], "7a07c30a-d0da-3f97-9141-41a6d4fa16ba": [[-49.7155, 0.0, -27.0276], [49.7155, 78.7274, 27.0276]], "2cb294f1-54fd-4ba7-bde5-6fd6b588339b": [[-0.339698, -0.000439375, -0.33927399999999996], [0.339327, 0.648492, 0.339318]], "3fffac2a-6770-45cb-8201-def5390c8478": [[-1.04238, -5.59812e-17, -1.15604], [1.04315, 0.818289, 1.15614]], "8550427a-0812-4064-a864-9dfb6e07b43b": [[-0.8454430000000001, 7.8528e-08, -1.16321], [0.8454430000000001, 1.08274, 1.1637300000000002]], "14143c76-a561-4d76-82fe-a152cd24efd7": [[-1.4553, -3.05176e-08, -1.36225], [1.4553, 1.47472, 1.36222]], "096f5522-de33-45cd-a50f-8a4508c03988": [[-0.18184999999999998, 0.0, -0.1398], [0.18184999999999998, 1.016542, 0.1398]], "501f8db3-e981-4320-96a8-449e392a6369": [[-0.41627200000000003, 0.0, -0.419886], [0.416466, 0.815389, 0.419886]], "5e90feae-b672-4d02-9bd8-7b6f0690d73b": [[-0.483826, 6.36597e-05, -0.218565], [0.483826, 0.6696129999999999, 0.218441]], "74d1f77d-3af6-47ab-a850-1c0a4d439e84": [[-0.8, -6.4294e-17, -1.05], [0.8, 0.8005, 1.05]], "f89da2db-ad8c-4582-b186-ed2a46f3cb15": [[-0.32053, 0.0, -0.38569200000000003], [0.320546, 0.978959, 0.385727]], "0651a152-fea1-4062-a6a3-758ddb3a1d3d": [[-1.26295, -3.8147e-09, -0.541672], [1.2637, 0.8167740000000001, 0.541771]], "ae2a8a90-84b2-4d01-b8bb-943f0e0f112d": [[-0.489079, 0.0, -0.47815399999999997], [0.489242, 0.920381, 0.478358]], "486da62c-991f-4e05-a7d9-b6e91e3627f5": [[-0.214558, 1.30301e-07, -0.214657], [0.214813, 0.40608299999999997, 0.21488]], "0893795a-7f5b-41ff-a2fd-a4aa35af6ba0": [[-0.263622, 3.05176e-08, -0.202081], [0.263712, 1.1453, 0.20207799999999998]], "7bc4b097-a8b8-481d-a421-b116bbc6b6b7": [[-1.09759, -0.000239102, -0.39815399999999995], [1.0967799999999999, 0.745262, 0.398316]], "6c21320e-69d2-4a57-ab32-28961792fbae": [[-0.359931, -0.000657775, -0.342288], [0.35763, 0.708362, 0.342661]], "b316d986-6683-4d48-9de0-974cf3234841": [[-0.301554, -0.0, -0.327727], [0.301554, 0.927179, 0.327874]], "252d3179-b10c-4f66-a15d-cb43e84bc675": [[-0.48568600000000006, 0.0, -0.48200499999999996], [0.48568600000000006, 0.8817900000000001, 0.48247999999999996]], "ef2b382e-3172-4973-9e5e-91d13c417938": [[-0.278886, -3.84224e-05, -0.24320799999999998], [0.278887, 0.8480589999999999, 0.243209]], "0ee31b4d-48d9-4d32-841b-315ee6fcdc23": [[-0.336173, 0.0, -0.359525], [0.336173, 0.8104770000000001, 0.359457]], "da215b33-519e-41f0-bc09-ca5443d099f2": [[-0.0438501, -3.05176e-08, -0.0438501], [0.0438502, 1.0348, 0.0438501]], "7eefcf00-8b7d-46c3-9241-e8b086f47c14": [[-0.44986, -4.65405e-16, -0.411268], [0.44986, 0.9193779999999999, 0.411562]], "4a5e3b4f-7e00-481d-a666-ba5f5cf627be": [[-0.8191459999999999, -1.52588e-08, -0.375544], [0.821543, 0.6645319999999999, 0.375553]], "904bbde8-4912-464b-a58a-6e8dc8dc280b": [[-0.320107, -7.9458e-18, -0.243869], [0.320107, 0.55, 0.243869]], "148d755f-6755-48d8-855a-4545b1c96223": [[-1.88782, -3.23051e-17, -0.66632], [1.8878700000000002, 0.842133, 0.6672669999999999]], "4059e4f6-a319-3144-93e1-9a6a284c5334": [[-1.603054, 0.0, -0.5280239999999999], [1.599894, 0.706583, 0.5280239999999999]], "63600695-59a6-4faa-8d60-78545571d34f": [[-0.493581, -1.17838e-10, -0.495415], [0.493954, 0.8857659999999999, 0.494292]], "ce8e11e9-b0c2-4076-9585-29e2b1ddd87d": [[-1.09751, 1.64457e-07, -1.09745], [1.09751, 1.14646, 1.09721]], "3e9d66fc-2218-4bbe-89ed-943c063e588a": [[-0.0891759, -0.000126365, -0.0905627], [0.0892463, 0.611263, 0.0903386]], "26fed367-1189-49af-ae0c-e218cdf80bf0": [[-0.26554500000000003, -3.41049e-05, -0.25459], [0.26554099999999997, 0.7858369999999999, 0.254708]], "3bba6426-19a7-46e3-b329-7d9a63f2884d": [[-0.237545, 0.0, -0.291211], [0.237545, 0.688328, 0.291231]], "6df890c9-ca71-464d-ac84-25d7c026c952": [[-0.079994, -8.0524e-24, -0.079994], [0.079994, 0.6934170000000001, 0.079994]], "2210ca84-730a-463d-9ed0-b34477a428b1": [[-0.22487200000000002, -3.41289e-05, -0.22483699999999998], [0.22489499999999998, 0.596463, 0.22483599999999998]], "2db83be2-32ad-4566-84d2-f0586f69b6e5": [[-1.0448, -1.97778e-17, -0.364163], [1.0448, 2.80169, 0.365301]], "75b793c3-4d51-4bdf-b06c-000fee79e096": [[-1.2861500000000001, 1.6864100000000002e-09, -0.287777], [1.2861500000000001, 2.4182900000000003, 0.287778]], "63887ac7-711f-4dec-82f2-1aca98aac980": [[-0.27276, -0.0, -0.266886], [0.27276, 0.976866, 0.266886]], "75e6ab89-3162-417f-a32f-6da2c1a0c614": [[-0.498389, 0.0, -0.365118], [0.498389, 0.390589, 0.365118]], "07ced31c-ded5-40d4-93d2-0b4ebc719001": [[-0.360766, 0.0, -0.34820799999999996], [0.360766, 0.61519, 0.34815199999999996]], "7eb8707b-2853-3455-9c6f-09313fc2b4e0": [[-62.0973, 0.0, -51.8844], [58.0416, 79.6695, 56.2951]], "3e5d4c86-68e2-4605-b11f-c8c8154e2f85": [[-0.16979299999999997, 0.0, -0.169896], [0.16979299999999997, 0.497718, 0.169896]], "5465f348-7abf-403e-a689-31fc649b75be": [[-0.755, -8.50167e-18, -0.18328399999999997], [0.755, 0.85, 0.18328399999999997]], "98f5ddf3-8303-4dc9-829d-e4ab70db3f16": [[-0.32033700000000004, 3.60475e-18, -0.320335], [0.32033700000000004, 0.615007, 0.320335]], "877293a1-df79-4a77-a420-495fdb1e4933": [[-0.515, 1.24785e-07, -0.276436], [0.515, 2.01, 0.276508]], "4a3c1778-0e62-4071-9edc-f5b52f0c7293": [[-0.662349, 0.0, -0.29111899999999996], [0.662467, 1.139909, 0.291195]], "7f4a80e4-2e8b-4485-91eb-5ab8b99f8095": [[-1.15388, -3.05176e-08, -0.310623], [1.15388, 2.278, 0.311174]], "b86ebe56-e858-4ae2-bf0e-331120c1a2fe": [[-0.244649, -8.92179e-18, -0.244649], [0.244649, 0.602831, 0.244649]], "680c14a6-119d-478d-99fe-b0ad33220727": [[-0.975, -6.01113e-06, -0.22682200000000002], [0.975, 0.8298409999999999, 0.22682200000000002]], "53e1bf77-8ff1-49ce-98fa-ec9d0eed78a5": [[-1.116231, 0.0, -1.0573569999999999], [1.1160299999999999, 0.993268, 1.057202]], "e40258de-5c0c-4ce7-8b85-2953d498ac77": [[-0.25285399999999997, 1.3e-05, -0.219057], [0.252945, 0.292808, 0.219057]], "5f76fa2a-0a88-40c8-a7af-39cfc01aaaa2": [[-1.19292, -4.24488e-06, -0.402433], [1.19211, 0.728604, 0.403042]], "7c320ea3-63be-431c-ac85-b0f29d7e4697": [[-0.0756498, -7.41156e-05, -0.0756498], [0.0756498, 1.03185, 0.0756498]], "7bc4692e-32d4-45ce-9b5e-0c05407e97c8": [[-1.07, 1.0339e-17, -0.17106300000000002], [1.07, 2.5011799999999997, 0.17106300000000002]], "dbabee15-db4b-4d5a-b578-fd03cbef9519": [[-1.0276399999999999, 2.3005600000000002e-05, -0.45272599999999996], [1.0286, 0.9583400000000001, 0.452108]], "6345a6c6-be9e-46f2-a1ce-d44f8f80894b": [[-0.6931740000000001, 0.0, -0.46340000000000003], [0.6931740000000001, 0.6984990000000001, 0.46340000000000003]], "18fadbac-327c-45c6-b1c2-b9e8597158f6": [[-0.544009, 0.0, -0.27219899999999997], [0.544009, 1.144757, 0.27219899999999997]], "195d7577-46eb-331d-afb2-5213917aa50d": [[-48.8512, 0.0, -45.5223], [48.9029, 91.1417, 62.0565]], "28f1a1ab-1a0e-4d20-9f64-cebfab16c770": [[-0.958689, -0.0008725769999999999, -0.34209], [0.959819, 0.786248, 0.342216]], "42aed001-5c5f-4a41-b731-1d3dfa58cbb7": [[-0.839036, -3.59936e-12, -0.9708249999999999], [0.839036, 1.0707, 0.9712900000000001]], "d02a1362-f02a-4b06-adda-9aa477a8dbec": [[-0.902522, -3.8471499999999996e-18, -0.0867999], [0.902522, 1.2118200000000001, 0.08677770000000001]], "e8a962ee-be25-4f59-b461-10fd6e441f57": [[-1.181146, 0.000177, -0.491186], [1.18131, 0.956742, 0.491592]], "6e005734-0392-4bff-8756-6584ee3723ca": [[-0.374662, -8.6376e-18, -0.385096], [0.37478700000000004, 1.2908099999999998, 0.385237]], "4583b13d-357a-4464-b917-e77450aa09f4": [[-0.203, -4.06696e-08, -0.203], [0.203, 0.04, 0.203]], "9df2949c-074e-4b18-b779-b88a074f9590": [[-0.258214, 0.0, -0.258591], [0.258214, 0.459586, 0.258368]], "8ef6edb8-95f6-4f42-94b1-b219adbec145": [[-0.234491, 1.22066e-07, -0.220973], [0.234491, 1.26652, 0.220973]], "3d135fd7-0f66-4d70-ba63-abaa83c76bfb": [[-1.00655, 3.7845900000000004e-07, -0.20055599999999998], [1.00644, 0.489039, 0.20055199999999998]], "ca4bf9c4-48a4-4c2c-a6d8-2ef852d09cd2": [[-0.700173, -1.2483399999999999e-18, -0.178386], [0.700173, 0.720846, 0.178386]], "0a7af548-65ee-4e4e-8e0d-b0285f0e32d7": [[-0.7606489999999999, -0.000208191, -0.385465], [0.7612680000000001, 1.95923, 0.385521]], "05e6f7c4-e7d2-323e-a8e5-2748831a18ae": [[-0.39, -0.005139, -0.42804699999999996], [0.39, 0.778754, 0.42804699999999996]], "ebc44285-ee7e-4cdb-968f-96771b761edf": [[-0.252955, 5e-06, -0.252947], [0.252967, 0.364591, 0.252955]], "de1f0505-4d1f-45f1-81d1-69b2bd3d8467": [[-1.241392, 0.0, -0.529112], [1.241392, 0.97482, 0.529349]], "7bff0ce0-c1aa-4604-b7e2-cdd4d1fdd80f": [[-0.35023200000000004, 3.9e-05, -0.504907], [0.350169, 0.9596769999999999, 0.504906]], "08c27045-6526-475b-9b32-681d1fbe401a": [[-1.03577, -1.8426e-10, -0.263661], [1.03577, 0.560949, 0.263661]], "8002a7b1-59a4-4f1b-8542-60a4edf1b4d5": [[-0.92, -7.35e-18, -0.200019], [0.92, 0.6526390000000001, 0.200019]], "24de449c-a06b-4561-8641-f9cb6407b62c": [[-0.18379, -7.74518e-18, -0.147971], [0.18379, 0.429078, 0.147972]], "6e891688-d3da-4a0a-8cf4-12fd81146502": [[-0.41932600000000003, -9.3443e-08, -0.419334], [0.41932600000000003, 0.368217, 0.419334]], "d269fca6-d843-4aa6-b8bb-7be327223d62": [[-0.37013199999999996, 0.0, -0.370054], [0.37013199999999996, 0.626995, 0.370054]], "bcea2130-344c-43f5-9235-3097f1da584d": [[-0.788875, 6.39372e-17, -1.0878700000000001], [0.788875, 2.1285499999999997, 1.0878700000000001]], "9945538d-a0d3-4a8a-937a-47dbb8329da8": [[-0.354397, 0.0, -0.402464], [0.35450200000000004, 0.7461679999999999, 0.402464]], "9a7b95c2-d2e1-45a1-89a7-b24bbbe7b2c5": [[-0.389089, 0.0, -0.486404], [0.389027, 1.072599, 0.48629300000000003]], "e46831f6-4411-4848-a6c0-4d05dad8a905": [[-0.171294, -0.0, -0.130212], [0.171294, 0.241112, 0.130212]], "5edb8009-6154-4128-9de1-123de6c9a87f": [[-0.6, -0.00016497000000000001, -0.160519], [0.6, 0.6975149999999999, 0.160519]], "45727766-10fc-4506-a16b-e5712f2a3153": [[-0.33597099999999996, 0.0, -0.211784], [0.33597099999999996, 0.354533, 0.211784]], "44ba4588-9692-308c-bffa-b559e874f8e5": [[-0.22506, 0.003054, -0.300494], [0.236697, 0.862474, 0.2254]], "584813f8-173c-48fb-ac50-9967e2f43a32": [[-0.737616, 0.0, -0.38168100000000005], [0.73753, 0.8259050000000001, 0.381753]], "ac2296a2-a820-42ef-8d64-04f9ec65041c": [[-0.15032, -1.0464999999999999e-05, -0.150416], [0.150308, 0.301218, 0.150349]], "e24b02cb-019c-4e35-8784-710437764448": [[-0.30523900000000004, 0.00016299999999999998, -0.339224], [0.305079, 0.8382, 0.339179]], "45ce7918-611e-41ac-be6f-3ff01fa26869": [[-1.056933, 0.0, -0.384324], [1.056885, 0.7781, 0.38421999999999995]], "0f4e373c-4249-4140-bccb-7a058609932a": [[-0.275396, 0.0, -0.285609], [0.275396, 0.8204300000000001, 0.28560800000000003]], "026d4902-3efb-4d3e-a5f8-dfc7998df47b": [[-0.522251, 4e-05, -0.404308], [0.522431, 0.829178, 0.404326]], "923138a9-7e73-4913-9df7-493569726af9": [[-0.21161100000000002, -2.47905e-05, -0.219662], [0.21160900000000002, 0.787717, 0.219667]], "3818dfe8-0127-44f8-af3b-6d6742a24f30": [[-0.37817100000000003, -6.08155e-05, -0.43245399999999995], [0.378365, 0.840564, 0.432695]], "4198a69c-3720-475b-87fa-0fa4a1d0052e": [[-0.355, -1.5455400000000002e-17, -0.26], [0.355, 0.555, 0.26]], "5ac8f833-5342-41dc-8906-974efdfe81aa": [[-0.190894, -1.08652e-17, -0.190991], [0.190894, 0.44589399999999996, 0.190991]], "40b47eb6-9abf-49c4-82a5-9644deb2c40f": [[-0.22, -1.28588e-17, -0.21], [0.22, 1.01, 0.21]], "498f3546-9b5c-3e58-a87b-6cf7dd6379c0": [[-0.42396, -0.005464, -0.411961], [0.42396, 0.6448909999999999, 0.411961]], "12b2dd21-c308-46e1-a375-471f67c2af77": [[-1.03299, 7.17894e-05, -1.04789], [1.03288, 1.26048, 1.04934]], "1beb58a7-5212-4f2d-8f2c-e087b5d88b44": [[-0.34088, -0.0, -0.38110999999999995], [0.34088, 0.667732, 0.38110999999999995]], "fa2b32c4-66d1-4f1d-bbc5-6548e661a683": [[-0.263858, 8.81934e-05, -0.262066], [0.263426, 0.392609, 0.26159099999999996]], "82b10620-66a0-474a-9667-c87bd8ea0c7a": [[-1.12089, -0.000364946, -0.44815800000000006], [1.12086, 0.830258, 0.448071]], "9bb49d16-9ac1-4cea-9334-64a789a5e11f": [[-0.330775, 0.000571, -0.303047], [0.33088700000000004, 0.755741, 0.303047]], "e6000be9-3abf-4c0f-9553-59008ec01bd4": [[-0.383429, 0.0, -0.175001], [0.383429, 1.6114940000000002, 0.175001]], "4c72d8a1-e3ba-401b-9031-0a7d06583b19": [[-0.843836, 8.33283e-18, -0.173884], [0.8438370000000001, 0.558556, 0.173884]], "c30a1453-1dc0-4a98-bba3-2455a7092ba3": [[-0.314972, 0.0, -0.314972], [0.314972, 0.7, 0.314972]], "196b1362-48d8-4fa4-9713-a5885add02ab": [[-0.330152, -0.000590865, -0.330291], [0.330234, 0.686165, 0.330302]], "5e07415c-f8f3-4c15-b30b-cf8fd34312f0": [[-0.728758, 0.0, -0.339546], [0.728758, 0.673953, 0.339621]], "78293fe5-5cc7-4117-8083-d9fc3688d501": [[-0.875276, 0.000284, -0.40045299999999995], [0.8765890000000001, 0.939403, 0.40019899999999997]], "790ae6a2-37c4-49e4-a510-0537920a3e18": [[-1.20001, -1.24023e-06, -0.585], [1.2, 0.759294, 0.585001]], "04af14c9-26b4-4356-b179-cd3fa4ef11dd": [[-1.49243, -3.90799e-17, -0.8543590000000001], [1.49667, 2.14847, 0.85515]], "d6141075-cfb2-4347-9d9a-7e657ede7276": [[-0.338326, 0.00019099999999999998, -0.376892], [0.337825, 0.990632, 0.376723]], "9d877812-b514-461d-8405-0d9305a65304": [[-0.601422, 0.00014955100000000002, -0.152471], [0.599739, 1.02249, 0.155528]], "47e6d877-ad10-4362-bb51-beceff6b844b": [[-0.607843, 0.000213, -0.595133], [0.607802, 0.350298, 0.594796]], "fc7eb06e-b6ac-4dfa-8a2f-ab378b3eb177": [[-0.5127349999999999, 0.000825, -0.38978900000000005], [0.512736, 0.467279, 0.389738]], "3da79a03-ae6a-448c-953b-089a9410fe6f": [[-0.34241, 0.0, -0.34241], [0.34241, 0.665896, 0.34241]], "3fe8a055-9c76-493f-9a4f-4babc09bc106": [[-0.254265, 0.0, -0.191072], [0.256063, 1.32322, 0.19128399999999998]], "77af486f-a084-41a8-ac7b-58fc6d04acc1": [[-0.448106, -0.000194876, -0.547394], [0.44799, 0.859522, 0.547516]], "1b2d3e96-9ec4-4ca8-be79-ac2f4aa9ff74": [[-0.290759, 2e-06, -0.29265599999999997], [0.290941, 0.817509, 0.292893]], "0c6395de-94db-41bc-bb9e-390fb2fcd6db": [[-1.058046, 0.0, -0.203523], [1.058046, 2.066049, 0.20352399999999998]], "1d1b823c-3f53-4cab-81b8-3a4b4f67b820": [[-0.30986, -0.000212557, -0.358641], [0.309796, 0.7481310000000001, 0.358742]], "aeec6eaf-8b51-4e55-b7b4-d839da8fcd6d": [[-1.232382, 0.0, -0.433091], [1.2323300000000001, 0.932871, 0.43296]], "7ce1888e-7b67-4e00-b63e-82178240f075": [[-0.236404, 0.0, -0.236404], [0.236404, 0.514899, 0.236404]], "a6501eed-b1d9-4cb3-b95d-69ff6cd72855": [[-0.702321, 0.008209, -0.619712], [0.702321, 1.170963, 0.619712]], "c1b79b0f-06a8-404e-9463-e22c10409e0b": [[-0.3667, -0.00020348399999999998, -0.43961799999999995], [0.366631, 0.916807, 0.439394]], "e811f6b0-d002-4b76-8c17-3d99e93a98f8": [[-0.330786, 0.0, -0.302156], [0.33083199999999996, 0.796212, 0.302156]], "636c291f-f5d0-4dfd-a470-d165b68f1710": [[-0.9609099999999999, 0.0, -0.266004], [0.960909, 0.820096, 0.26598]], "f07659e7-cb2e-4a07-9fbd-397b33b9360b": [[-0.328145, 0.0, -0.39474], [0.328159, 1.081724, 0.3947]], "01fdf241-67bb-482c-844c-61e261b8d484": [[-0.145989, -6.5801e-05, -0.12398999999999999], [0.145989, 0.8699979999999999, 0.12422000000000001]], "7fe838b9-c3a8-4f7f-9b08-012f6ba079ac": [[-0.5918800000000001, 0.0, -0.234312], [0.5918800000000001, 0.291084, 0.234312]], "540f57a6-f752-3f11-b11b-5521ac4a3f2e": [[-0.791195, 0.0, -0.391553], [0.797881, 0.688587, 0.41901000000000005]], "70b242c0-af2e-4303-ac07-c70c0a7ba7ea": [[-0.301342, 0.000333, -0.31281], [0.30136, 0.757672, 0.31281]], "006cb2b3-e9e3-34e3-9a0e-f93fa04f344b": [[-0.5842, 0.00038100000000000005, -0.586452], [0.5842, 0.8580589999999999, 0.586452]], "7c093e19-ba9c-48ab-8f70-779ad3a184be": [[-0.270302, 0.0, -0.270302], [0.270302, 0.506431, 0.270302]], "5b655957-9943-41f5-85df-a0b5beba545a": [[-1.04668, -9.09298e-18, -0.150001], [1.04668, 2.0, 0.150001]], "b1dc7525-dccf-4dd5-b7b5-7f259ec832a4": [[-0.41320999999999997, 0.0, -0.40679499999999996], [0.41320999999999997, 0.818131, 0.40679499999999996]], "7835bcf2-16b0-4835-bbba-2c7d9b36dd2c": [[-0.300096, -3.45625e-11, -0.300096], [0.300096, 0.6, 0.300096]], "da696e88-ffee-425f-aa60-d84c7f0e84ec": [[-0.723805, 0.000150306, -1.00342], [0.724454, 1.45663, 1.00342]], "31c3c91c-7fce-4784-bbf6-15eb8279bfc6": [[-0.375021, -8.15113e-18, -0.19623000000000002], [0.375021, 1.95004, 0.19623000000000002]], "ba78f854-8100-48cb-904b-e6dc85a6377f": [[-0.59636, 0.0, -0.396824], [0.59636, 0.410458, 0.396824]], "caece73c-46ec-4277-8735-b6f1626747e7": [[-0.929567, -1.3160599999999999e-17, -0.264567], [0.929567, 0.661684, 0.264567]], "5cdf3ffc-0280-4bc7-9a5a-fe12b3e9a021": [[-0.270562, -0.00050189, -0.354811], [0.270028, 0.762553, 0.354596]], "fa23acbd-54fb-4cd5-9caf-33b7867474c1": [[-0.234254, -1.11666e-17, -0.182365], [0.234254, 0.547473, 0.182365]], "fc93abbf-984c-432a-abb7-7f1ce951955f": [[-1.25, -9.27885e-15, -0.55], [1.25, 0.752293, 0.55]], "5ee08b67-382f-48a3-bcc4-54140a17de47": [[-0.714136, 5.6e-05, -0.181706], [0.714433, 0.899648, 0.181935]], "46ff8f18-6ccd-4712-acd5-58d00ddb0807": [[-0.73898, 0.0, -0.17470300000000002], [0.73898, 1.199435, 0.17470300000000002]], "41c2b52c-7f09-4d4b-b301-a4d16e249c3c": [[-0.513327, -2.70242e-05, -0.503155], [0.513162, 0.666497, 0.502449]], "52f31197-5e9b-4e8e-84e2-339cb6446016": [[-0.5224920000000001, 0.0, -0.508437], [0.522329, 1.033877, 0.508437]], "06cab26d-008a-4063-8602-965e21304ae3": [[-0.7569490000000001, 5.16826e-17, -0.998266], [0.7571410000000001, 1.32241, 0.997808]], "6be2b343-1c87-4d61-8949-ea9aa9fcd259": [[-0.610287, 0.0, -0.231216], [0.610287, 0.9228000000000001, 0.231216]], "2073786e-ae1a-4b5d-8f4b-577a0ac941af": [[-0.35875, 3.05176e-08, -0.35875], [0.35875, 0.553508, 0.35875]], "4e7d021f-2d88-3c67-83b6-81592780bef6": [[-1.003573, 0.0, -0.400984], [0.998135, 0.72, 0.40103900000000003]], "875394aa-b493-43a0-a53b-d09e9162ec1c": [[-0.35779099999999997, 0.0, -0.413962], [0.357779, 0.9384990000000001, 0.414139]], "8f1f1817-89c5-4729-abe2-d4a806241456": [[-0.31753699999999996, -0.000206861, -0.317538], [0.317748, 0.389288, 0.317924]], "b74de7fc-c3c2-4a58-849b-76f542ee332a": [[-0.264321, -0.000326064, -0.235091], [0.264321, 0.607657, 0.235703]], "1b6c15b4-d58f-4a06-9f98-988666ce82d8": [[-0.350428, -0.000584102, -0.374347], [0.348393, 0.8297190000000001, 0.374653]], "0a1d56a4-2fce-4c35-bba1-bf6127457b4c": [[-1.012222, 0.000111, -1.11801], [1.0118420000000001, 1.2078579999999999, 1.118286]], "8ad2e04d-cc04-4582-af59-41b82eaa3039": [[-1.0537, -5.95733e-05, -0.253433], [1.0537, 2.42455, 0.25449]], "35822bac-01f3-45fb-9ccd-381c34c44d76": [[-0.254247, -3.16192e-16, -0.22892099999999999], [0.254247, 0.781316, 0.22892099999999999]], "23ae48ab-bbd1-4ddd-9eb0-a8fda9798f90": [[-0.596022, 0.0, -0.568867], [0.596022, 0.7905500000000001, 0.568867]], "53b2a761-f9b4-4015-926d-8e910b905881": [[-0.456594, -5.07487e-08, -0.42686999999999997], [0.456648, 0.8272360000000001, 0.426417]], "9b139b95-4c82-4574-a575-805325525c25": [[-0.31281400000000004, 0.00021999999999999998, -0.308307], [0.312504, 0.879085, 0.308405]], "562d1d5b-505d-4828-912b-f72d39a14964": [[-0.399831, 0.0, -0.20638600000000001], [0.399831, 0.9816750000000001, 0.206155]], "5550d8ad-da7f-4a48-b96b-5557ba83978d": [[-1.055659, 0.0, -0.298446], [1.055782, 0.528193, 0.29911]], "0a2de904-3744-4d31-a3b7-e603982d89be": [[-0.849777, -6.93838e-08, -0.552225], [0.849777, 0.40096699999999996, 0.552225]], "819a7ad3-3945-3848-b380-9be5ad6a420e": [[-0.500694, 0.0, -0.504747], [0.500694, 0.389581, 0.504747]], "0efd1942-d8aa-4749-a3f7-fb10ed93e1c4": [[-0.219803, 0.0, -0.22223199999999999], [0.219803, 0.331104, 0.22223199999999999]], "842b6114-9b09-4cdd-bbc6-dd99cdc36a66": [[-0.7078709999999999, -0.000723576, -0.997711], [0.707586, 1.1647100000000001, 0.9967159999999999]], "23361f63-47ac-49a0-aeae-b05e01d5626a": [[-0.624332, 0.0, -0.9409040000000001], [0.623972, 0.9575, 0.9409040000000001]], "d1e92e16-0ebd-4d54-83c3-2cdad7270243": [[-1.10131, -3.31311e-05, -0.28778400000000004], [1.10076, 2.3958600000000003, 0.287796]], "9ae7ae8d-8b27-4cbc-b57b-3c0b3cffb9e5": [[-0.367131, 9.29626e-08, -0.058895], [0.367131, 0.744287, 0.058895]], "733bb76f-3a35-39f7-95c0-c89f678d0955": [[-0.9190510000000001, 0.001344, -0.352938], [0.9195099999999999, 0.81146, 0.354638]], "7351fd9d-f9f4-4f89-8423-04ddafc44fae": [[-0.362578, 0.0, -0.42645000000000005], [0.362578, 0.8214140000000001, 0.42645000000000005]], "adf03899-13d2-4fef-b091-3d14af7cb807": [[-0.711394, -0.000131633, -0.21496500000000002], [0.7117870000000001, 1.02174, 0.215288]], "8352b20f-d22e-4c35-8277-cb1da2a7b84c": [[-0.253065, -0.000153035, -0.267807], [0.253341, 0.69072, 0.268368]], "7a476d09-68af-44f7-a02c-6b959cad4d28": [[-1.097623, 0.000988, -0.49366], [1.097624, 0.787159, 0.49440100000000003]], "fcfdca8e-5713-4c69-a654-bf73c30bc2de": [[-0.309961, 0.00101569, -0.309918], [0.309876, 0.40730299999999997, 0.309918]], "1407b515-5e0f-4fc2-b389-4a6ef572fba3": [[-1.16329, -0.00419428, -1.16065], [1.16386, 0.8903310000000001, 1.1600700000000002]], "1dc3ef65-a72a-4c6f-b878-0e86b7e5c964": [[-0.6194080000000001, 0.0, -0.44419600000000004], [0.6194080000000001, 1.305176, 0.443366]], "2b84123a-16a6-4a4b-880d-91bdd914e040": [[-0.863232, -0.0, -0.454604], [0.863232, 0.760192, 0.454604]], "cef6b89c-8afb-479e-b844-aedc7f1ce19a": [[-0.524295, 0.0, -0.161101], [0.524356, 1.098881, 0.16128399999999998]], "972a6ea3-2881-472d-ab5f-ac987aedf51a": [[-0.34379800000000005, 8.3e-05, -0.35428400000000004], [0.34372, 0.6436, 0.35441]], "0d3e3b3c-3f1a-47ee-8566-1052cb8635b6": [[-0.620845, 0.0, -0.35636], [0.620522, 0.386315, 0.356175]], "6b3c5724-28d4-4e33-b77d-d4578ad2f6c6": [[-0.38719299999999995, -7.67463e-05, -0.416145], [0.387146, 1.08062, 0.415978]], "5f41adee-8f09-4431-b246-6cf93d78f4d8": [[-1.582156, 0.0, -0.652891], [1.581685, 1.0408499999999998, 0.6527630000000001]], "1b507132-a38e-48d0-8f65-8cb7510b2aad": [[-0.948366, -0.00025481099999999997, -1.2697], [0.947838, 1.6487, 1.27429]], "68a8cce5-47fe-4df7-9534-beee2b1e49a8": [[-1.170963, -0.0, -0.483435], [1.171076, 0.8286169999999999, 0.48355]], "43c9fc03-735d-4c5c-b83d-41a25f7328de": [[-0.308029, 0.0, -0.200241], [0.308029, 0.205732, 0.200241]], "7715b221-963c-4977-82c5-14ff46dabf7b": [[-0.462958, -2.7823e-17, -0.462256], [0.462589, 0.739321, 0.46292]], "3f6e40c9-97d2-4733-9519-5a252c47da3e": [[-0.5104500000000001, -2.88739e-05, -0.256941], [0.510447, 1.12066, 0.257493]], "9a9a3f9d-e59c-4597-8882-26e0c803146a": [[-1.201589, 0.0, -1.183255], [1.201589, 1.5163499999999999, 1.183255]], "1ff04aec-2aa8-417a-a19b-6e5e6ae1bf1d": [[-0.218849, 0.0, -0.17948599999999998], [0.218826, 0.423031, 0.17945]], "b734950d-92f3-4955-8d06-232dfc9c56c6": [[-0.373623, -1.17068e-17, -0.23], [0.373624, 0.47045299999999995, 0.23]], "8af59c12-464d-424a-a866-7a7df87ca3d8": [[-0.29587199999999997, 1.6043900000000002e-06, -0.282364], [0.295826, 0.804697, 0.282223]], "76d7a78e-2b24-45a3-aac6-f6ab2d7bcd57": [[-0.341286, 0.0, -0.341297], [0.341297, 0.413593, 0.341286]], "054116c5-5a21-43d0-8a16-8c8a341f014a": [[-0.17584599999999997, 0.0, -0.16920300000000002], [0.17584599999999997, 0.46130200000000005, 0.16920300000000002]], "0efef8a1-3d12-49c2-94be-ca2919499ee5": [[-1.197462, 0.000494, -0.49307], [1.197548, 0.93647, 0.492656]], "a79ae28f-e391-495a-a259-6eeb308950bf": [[-0.413158, 0.000335, -0.448033], [0.41226, 1.104236, 0.448506]], "d2af55dc-deaa-4b24-9b3d-2632038c61b2": [[-1.3904400000000001, -2.94167e-17, -0.536286], [1.39056, 0.842286, 0.536369]], "3fd0835e-40bd-3a0b-95b3-ffb0b9406952": [[-70.0, 0.0, -57.75], [70.0, 72.0, 57.75]], "84f0d3cf-35a6-4a54-98f2-3ead4cd5e59a": [[-0.512284, -4.4146599999999996e-18, -0.0720969], [0.512284, 0.74152, 0.0720969]], "d2717b6d-5894-4998-a7e2-fcb5b81f2d38": [[-0.28449, -0.00015633999999999998, -0.28450600000000004], [0.284489, 0.24529499999999999, 0.284489]], "1a9e0a1a-c6a1-4c43-8352-9d391907d86f": [[-0.40002899999999997, 0.0, -0.16004300000000002], [0.40002899999999997, 0.63, 0.16004300000000002]], "305588a8-3874-4e78-9d2d-05ca3b426a2d": [[-0.463381, 1.52588e-08, -0.498065], [0.463438, 0.956752, 0.498292]], "fd8d88e1-10d4-4666-b544-e2419a0fb9b2": [[-0.2415, 2.2666e-08, -0.241501], [0.2415, 1.33875, 0.241501]], "52b81c7d-a623-4c6b-9d18-01ed00dc4885": [[-0.9406319999999999, 5.20191e-06, -1.11341], [0.940647, 0.9194060000000001, 1.1133199999999999]], "b0972679-bebc-45ab-89e8-f35b006e7010": [[-0.321349, 7.1035e-08, -0.33801299999999995], [0.321017, 0.7858499999999999, 0.337746]], "83e28659-3753-3acb-9db8-755dba85fc26": [[-0.470161, 1.1999999999999999e-05, -0.508925], [0.472643, 0.8503189999999999, 0.431404]], "59782bb8-9ef6-4baa-a28d-ea0f0cc35b4c": [[-0.23010999999999998, 0.0, -0.23010999999999998], [0.23010999999999998, 0.517695, 0.23010999999999998]], "2bdc5abe-7b30-4137-ae96-eb71641b944f": [[-0.628119, 0.0, -0.214685], [0.628119, 0.5731580000000001, 0.21526800000000001]], "34b289bc-f237-4d8a-aafe-706f1afb17f1": [[-0.395945, 1.46484e-05, -0.466652], [0.396019, 0.9708289999999999, 0.46645400000000004]], "1b36174b-6e8b-498d-9c04-a37396663bc4": [[-0.29347999999999996, -1.97731e-18, -0.08079209999999999], [0.29347999999999996, 0.497186, 0.0807919]], "f044ba0a-bb49-43af-86e8-d0db63dce574": [[-0.28533000000000003, 0.0, -0.288539], [0.28533000000000003, 0.590664, 0.288539]], "a5930683-dab2-4541-b49e-1f0d96bb0ac1": [[-0.280391, 0.0, -0.299921], [0.280391, 0.762128, 0.299921]], "77205ba9-96e1-4e89-99e5-b1a10b32309b": [[-1.190995, 0.0, -0.49830800000000003], [1.190985, 0.671719, 0.49830800000000003]], "4e151a11-bc80-4383-acdc-668bb129b836": [[-0.29937400000000003, -7.713299999999999e-18, -0.17587], [0.29937400000000003, 0.441282, 0.17587]], "f9d3218f-d816-4fa6-8859-612ab5c010f3": [[-0.75, 0.0, -0.14931], [0.75, 0.761219, 0.14931]], "4b1c7af7-5ee1-4ef8-bbb5-0bda07bc2428": [[-0.252178, 0.0, -0.252178], [0.252178, 0.562377, 0.252178]], "f5f8df98-704b-45bc-bb76-5446de45e309": [[-1.05, -7.38964e-16, -0.24850000000000003], [1.05, 2.261, 0.24850000000000003]], "42936f41-3c98-48f4-80d7-f97fcc41d084": [[-1.0170000000000001, -0.0016197, -0.22828299999999999], [1.01691, 0.579073, 0.22832]], "87435638-c33b-4fff-83e5-ac798a6c1eac": [[-0.275, -9.78156e-12, -0.20487200000000003], [0.275, 0.733237, 0.204833]], "9f779d41-bc21-4c26-8f47-01418cdbc595": [[-0.6506149999999999, -3.1726e-08, -0.193071], [0.6506149999999999, 2.2076, 0.190047]], "177002fd-1796-432a-9324-18d83c1e5d41": [[-0.714304, 0.0, -0.33880299999999997], [0.7140569999999999, 0.81143, 0.33880299999999997]], "49126819-12fc-470a-a809-fcd9102ce88f": [[-0.57667, 0.0, -0.6790470000000001], [0.57667, 0.799591, 0.6790470000000001]], "8233c9cc-28af-4693-a41b-b647f7785f79": [[-0.753986, -0.0010034500000000001, -0.996173], [0.7540819999999999, 1.2383199999999999, 0.996176]], "719e550a-d7e7-4a73-b6b4-97218ed5e6c5": [[-0.292208, 0.0, -0.41314], [0.292193, 0.87184, 0.41314]], "0b41bf1f-4ca8-4cee-be17-4b2b02be0503": [[-0.44177700000000003, 3.05176e-08, -0.44278799999999996], [0.44177700000000003, 1.42035, 0.44278799999999996]], "3cd3e784-08d3-4b29-9081-9fb299081d57": [[-0.308613, -0.000406962, -0.27316199999999996], [0.308102, 0.85212, 0.272968]], "065ce67a-19e8-4a6e-bb60-a23e64d214ee": [[-0.24658100000000002, 0.0, -0.234821], [0.246569, 0.750393, 0.234875]], "9a504de5-e8fe-4414-9c56-adc46438a5ba": [[-0.9678640000000001, 0.0, -0.490948], [0.9678640000000001, 0.98178, 0.490948]], "a8be69dd-1ce3-430b-bb46-46399b41dfd7": [[-1.75529, -3.94899e-08, -0.9419620000000001], [1.75506, 0.8598480000000001, 0.93955]], "0ddbb652-14e3-4e01-8fd5-aae213910ac2": [[-0.667225, 0.0, -0.6696040000000001], [0.667531, 0.450758, 0.6696040000000001]], "293c8cbb-a7ca-484a-8680-760d04777721": [[-0.280803, 0.0, -0.26726500000000003], [0.280803, 0.9322790000000001, 0.267322]], "10682d12-abd7-428c-84ec-44ec06be444f": [[-0.605273, 0.0, -0.358187], [0.605273, 0.55924, 0.358187]], "bd5540f2-17a1-4485-970b-7b4277fc2887": [[-0.439699, -2.42657e-09, -0.439918], [0.439929, 0.530562, 0.43953899999999996]], "200917a7-ee45-45c6-8e9d-0d9cfee1fe20": [[-0.0655777, -1.52588e-08, -0.0655777], [0.0655777, 0.941563, 0.0655777]], "99e35a9e-b125-4334-949e-5845f987a53f": [[-0.414941, -0.00019332599999999999, -0.396092], [0.414789, 1.09608, 0.39586]], "51e09242-8239-49c7-bb79-2f235f4da833": [[-1.0748900000000001, -2.43454e-05, -0.42348199999999997], [1.07444, 0.8181090000000001, 0.423611]], "3db8d396-f996-45ef-b4e0-95dd9ffdde2c": [[-1.08426, -0.00038539499999999997, -1.10761], [1.08982, 0.9128360000000001, 1.10731]], "04639e82-a7de-4a04-892d-07046ef58cb9": [[-0.21395, 0.0, -0.216103], [0.21395, 0.49729399999999996, 0.216103]], "9e5e579d-95bc-41fc-98f9-8b02c4bca4f2": [[-0.46702800000000005, -9.913209999999999e-14, -0.40586799999999995], [0.46659, 0.379586, 0.405835]], "5f390289-f1a1-38c3-8729-381f368f122d": [[-1.4987409999999999, 0.0, -1.178337], [1.498742, 0.840404, 1.178336]], "089ac3ea-b510-4235-91b8-cf6d168adf7c": [[-0.285242, -1.9104699999999998e-06, -0.289556], [0.285281, 0.571408, 0.289556]], "9c3a1b9d-e217-4bda-b6e8-50e637807803": [[-1.1127, 2.19483e-07, -0.44539700000000004], [1.11267, 0.97827, 0.44539700000000004]], "92635bc5-153d-4f6f-88e2-fd3e7200513f": [[-0.504693, 0.0, -0.557997], [0.504693, 0.21601099999999998, 0.557997]], "06f22c3b-f7bb-4c24-9e00-14034c01e956": [[-0.6539449999999999, 6.2314499999999994e-06, -0.155269], [0.6539449999999999, 0.694817, 0.155288]], "48c6f0f5-7dd5-4621-a134-502ced8638cc": [[-0.774469, -1.60993e-17, -0.304374], [0.774469, 1.8952099999999998, 0.304426]], "1ddad3b5-789d-44a5-a4ed-fc7f7a0950db": [[-0.40632399999999996, -1.66008e-10, -0.406393], [0.40639600000000003, 0.801413, 0.406414]], "06ac81e0-b5f5-4269-9540-885408b03d4a": [[-0.18351900000000002, 9.12342e-18, -0.18339], [0.18351900000000002, 0.786596, 0.18339]], "4dac0b13-11b6-428b-a67b-5454ff56f2e6": [[-0.426914, -0.00067111, -0.38474400000000003], [0.426875, 0.7454770000000001, 0.38493499999999997]], "e1f5ee41-c42d-4c24-844c-c3093d3ef3da": [[-0.199315, 0.0, -0.215215], [0.199343, 0.873579, 0.215078]], "1b7ee226-90aa-453f-bc11-8ad0110e4cff": [[-0.347425, 2.5e-05, -0.319819], [0.347476, 0.876852, 0.320177]], "9a0cadcb-952c-45f8-b9ff-fc696b3a5b8d": [[-0.60036, 0.0, -0.200182], [0.60036, 0.925206, 0.200182]], "5604bb8b-e57c-4eff-aae6-abdd037adfb9": [[-0.807333, 0.0, -0.167496], [0.807333, 0.459764, 0.167496]], "864f3cca-a9a6-4e47-88a8-ba69e202143c": [[-0.285242, 0.0, -0.289556], [0.285242, 0.571407, 0.289556]], "d47b027b-cf6b-409b-be35-aa7ab0203534": [[-0.199923, 0.0, -0.174813], [0.199923, 0.49995199999999995, 0.174813]], "96fdcc03-866d-44de-9dac-62a35128b870": [[-0.270686, 0.0, -0.244018], [0.270717, 0.711705, 0.244083]], "1ccd78c6-5826-4450-8fa4-e251ee103e53": [[-0.31589, -0.000198677, -0.346403], [0.315905, 0.7759990000000001, 0.346371]], "79f8eeb4-9d8d-47aa-91ad-9ffb3860d29f": [[-0.586344, -0.000100848, -0.5493979999999999], [0.586344, 1.29327, 0.550899]], "18971be9-a137-40f9-89ac-69b7330da081": [[-0.20193899999999998, 0.0, -0.207133], [0.20193899999999998, 0.541398, 0.207133]], "779cc50f-6bfe-41d9-8c27-7671bf77e450": [[-0.518392, 0.000306, -0.454728], [0.5182410000000001, 0.8002589999999999, 0.454403]], "2898786a-32b2-4281-a7e1-4f900081186b": [[-1.43645, 5.3e-05, -0.55], [1.4360220000000001, 0.916551, 0.5500970000000001]], "f5fb7347-f919-439a-98d1-dbeeb04f284b": [[-1.30342, 0.0011870799999999999, -0.5749219999999999], [1.3027699999999998, 0.86887, 0.5742929999999999]], "7cbd1940-e203-4bb5-bb6f-d89ce943018e": [[-0.66852, 1.9968799999999998e-05, -0.257993], [0.6685169999999999, 1.35077, 0.257946]], "3ee0376a-5f95-4076-8ef5-e81a8eeb4e32": [[-0.6931480000000001, -2.42512e-17, -0.402745], [0.6931489999999999, 0.6656449999999999, 0.402745]], "9fc7379c-ef9f-4973-87bf-42565f410663": [[-1.64768, -1.13626e-17, -0.195841], [1.64768, 2.60624, 0.195841]], "dadc7a98-3191-48ca-979d-c7e8b92ea8da": [[-0.26703299999999996, -0.0, -0.263617], [0.26722999999999997, 0.5398660000000001, 0.263869]], "b9e4a47a-dcf6-4e65-8fa4-db1eaf8f9bc8": [[-1.74424, -3.8147e-09, -0.612002], [1.74349, 1.22987, 0.611213]], "4b613fb2-4e15-4b2f-8b8c-f1a9302cc4f1": [[-1.12801, -1.70174e-17, -0.319783], [1.12801, 2.43, 0.319783]], "1dedd172-9399-4d74-8df0-72a6c0d98c4b": [[-1.14082, 3.15075e-06, -1.16564], [1.1438899999999999, 1.37971, 1.1658199999999999]], "5941327f-b8ee-4a49-92ba-3d430968be08": [[-0.916407, -0.00153911, -0.238702], [0.916397, 0.750684, 0.238812]], "259867a7-e630-411c-9496-09b655edabeb": [[-0.48, -3.05176e-08, -0.153779], [0.48, 1.53929, 0.15389799999999998]], "8c9d507b-6ce9-4247-9bf6-10a5ba25cd32": [[-1.0442690000000001, 0.0012280000000000001, -0.368349], [1.043718, 0.7859130000000001, 0.36792400000000003]], "1a42ea1e-7d95-42ff-a00a-bc8203b43338": [[-0.35984, 7.15256e-10, -0.35415100000000005], [0.35984, 0.48606499999999997, 0.35415100000000005]], "dde8dc65-731a-4c19-bf7e-f4ffdd6ae7ba": [[-0.40462699999999996, 0.0, -0.485971], [0.40462699999999996, 0.929275, 0.485937]]}
\ No newline at end of file
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/utils/data/model_ig_cat.json b/gibson2/utils/data_utils/ext_scene/scripts/utils/data/model_ig_cat.json
new file mode 100644
index 000000000..37394a64d
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/utils/data/model_ig_cat.json
@@ -0,0 +1 @@
+{"f89da2db-ad8c-4582-b186-ed2a46f3cb15": "sofa_chair", "5de45849-7d1b-4378-82da-ed183b7ecc37": "chair", "1ef668a9-12e0-447b-9bbc-8ae484ba8c58": "ceiling_lamp", "0d3e3b3c-3f1a-47ee-8566-1052cb8635b6": "coffee_table", "16febe29-52d9-4833-a695-b09446e65512": "coffee_table", "5b3eb52a-e3ed-4f13-bcb7-2564bf39d34b": "table", "3bc8343f-452b-4e67-a986-e34436c6479b": "ceiling_lamp", "517709cf-79a5-3309-af40-05e0c5ec992c": "sofa_chair", "5347b0a9-94b1-4983-9263-e18eb3830480": "coffee_table", "12b2dd21-c308-46e1-a375-471f67c2af77": "bed", "30d524b6-ad13-440f-a1ac-6d564213c2f7": "bottom_cabinet", "a9be5d5c-61d1-4a86-a95f-4a6074ccb6a8": "shelf", "1e71562b-34e3-44ac-b28e-d17589060ad0": "sofa", "3bbdb668-3515-4435-bfa8-620333eca50c": "ceiling_lamp", "8002a7b1-59a4-4f1b-8542-60a4edf1b4d5": "bottom_cabinet", "4591fef1-d0ec-404d-9f1c-722098ff1ea9": "bottom_cabinet", "271380c0-29f8-4929-8732-4b70d33cbb02": "shelf", "55477b40-0b9a-4c5d-beed-289460b666cc": "shelf", "f817d13d-a2ff-43b5-8ecc-9507987ce825": "bottom_cabinet", "c5aaf107-c8d0-4b01-b51d-9c2bddef8e2a": "stool", "4046df2a-6909-49a0-8ff0-b5661da39be0": "bottom_cabinet", "0fc3e54d-03cd-4621-87e5-013f36c3092a": "coffee_table", "6e759989-7f12-4dc1-abb0-21509b653712": "stool", "2d7ac146-2cd3-449c-94e1-aa11d05fd5db": "ceiling_lamp", "0b7c1001-ab11-4161-8c19-b8a9e7067988": "shelf", "59f44afe-59ca-4281-9a2e-753322f2542e": "coffee_table", "50785bdc-dbdb-48fc-a636-f5cd9804a74e": "shelf", "3e08cbe7-87b9-45d6-80a4-0dfaee2b025c": "sofa", "628f0512-9454-40ee-b65b-d3e253cc9227": "shelf", "6b3c5724-28d4-4e33-b77d-d4578ad2f6c6": "sofa_chair", "a9a780db-eac7-43c6-b937-e051cea23684": "sofa_chair", "60999d08-1e04-41cb-a830-f909d0f61ae4": "sofa", "578a50ef-9ce8-4847-ab68-35ed3a1a5b17": "chair", "69b845ad-4bb1-448d-84a2-552361ff6c9f": "coffee_table", "209fdbd6-b95d-4d11-a05e-8fcefa32a60d": "coffee_table", "880ac819-66b6-4b09-addb-c3239a16ec5c": "ceiling_lamp", "62748645-320e-48c5-865e-ee4a60349472": "bottom_cabinet", "a4aa6165-a24c-4646-9589-27e9d26f8951": "bed", "6fef21c1-9be8-4290-9591-494b16d4a4cb": "bed", "c136c05d-c189-40ab-b35a-a392102c3737": "chair", "232df588-db56-4982-a81e-ea9de8aa3606": "bottom_cabinet", "75dabced-9793-433d-916a-55c5b9c38fbd": "bottom_cabinet", "f3275068-93d6-4943-af4e-65bb45d29f16": "table", "7ae34a75-f584-3f9d-8737-c4f4ac53b863": "bottom_cabinet", "f9bbdb50-7cde-48a2-91b7-0f61668c136c": "shelf", "1cd2e61b-9fa2-4942-95b6-b6d90a65d605": "bottom_cabinet", "253ad8c5-7934-4546-80d8-261b7158572b": "stool", "2752e301-d232-382d-8051-8882c8a023a7": "bottom_cabinet", "45727766-10fc-4506-a16b-e5712f2a3153": "coffee_table", "7ff2123f-e8d4-49a0-9214-c177ea760b86": "chair", "53950b7a-298c-4907-9328-d2167a2c8d9f": "sofa", "42aa16a7-4d7f-43c0-a163-825e10197c1c": "bottom_cabinet", "28936363-4670-4add-8ce8-2bbb98d5c844": "table", "48d2dfa5-55dd-408f-a33b-4a085742e055": "bed", "fc93abbf-984c-432a-abb7-7f1ce951955f": "table", "3decf748-5de4-43a5-b349-c8c849e66cca": "table", "e0010317-e54b-4310-9d9c-81c7d0383789": "table", "32bac62d-d3dc-4e53-aa41-80abb3c5aa03": "table", "d6608d2c-850a-4a03-ba45-03162fcaa6c1": "sofa", "614ebd4c-9540-4ab0-85ff-0998020ce928": "sofa", "0de60f95-775b-3a78-bd06-e2b04a309c4f": "chair", "d423f212-4f99-42ea-b58b-96bd3fcce983": "coffee_table", "e61e2d5b-6a91-4f4c-9477-4e55bfacf244": "ceiling_lamp", "2c8bb91c-5462-4f1e-a086-96a427a745e6": "coffee_table", "3f9f103d-4e2c-4d26-9a2f-afddab50a9e8": "bottom_cabinet", "33036104-f846-4bd3-b52f-8374ec351aa6": "bottom_cabinet", "0f88e643-7fe6-4023-bfbd-bad4415393a4": "sofa", "77982295-79e6-4fe9-ae1d-7a38b54fbc81": "stool", "6643c782-8aee-43d6-ae77-00e1c6de8d40": "sofa_chair", "e446e818-363d-4bf5-b7dd-7e70bfca0b87": "coffee_table", "9fdeef9f-307f-40ae-b546-dea15ebe1bea": "chair", "59a0de9d-7bd0-4886-8e6e-26eb7af6134c": "ceiling_lamp", "592abfe3-905a-4d5b-98e7-f8d27568b531": "sofa", "6132dd65-21cf-3e28-9ab3-4ea659d11be5": "sofa", "419afed6-a0b1-4e43-8b79-7107c8adce36": "sofa", "8212bf74-2ad3-4e8a-a922-f93d382bcfc4": "sofa_chair", "ea720506-d8df-408c-a127-61b20b1a44b1": "sofa", "647d9600-d011-409f-af3a-68afe22dd8cd": "bed", "d54e89d6-9203-4a2e-8cfb-dcbba51cb43e": "coffee_table", "b50f317e-90f0-4c62-81fb-d41f426b94e5": "table", "4b1c7af7-5ee1-4ef8-bbb5-0bda07bc2428": "coffee_table", "79495087-c691-418e-9951-4c47f91a9cda": "coffee_table", "d6e0fa89-7f3e-4bfa-9483-37f705320910": "ceiling_lamp", "8a5b1ed9-800e-4a4b-b95f-20cf28bbeaa4": "coffee_table", "0d5562d8-cea0-4426-a236-af033659f306": "sofa", "24a49906-1627-4639-ae26-32d91d02871b": "chair", "62112f4d-fabd-4307-92bf-a0135b55d1f1": "bottom_cabinet", "0e17cf94-36d4-3216-9901-05dee759dfab": "bottom_cabinet", "7b16d703-fcd4-4078-9b0b-5b0df2fedc1b": "bottom_cabinet", "4a1ee475-caa2-441b-9d9f-832dc3c01a3c": "sofa_chair", "180c9dab-fcd7-436b-b877-ea2cbfe85b00": "bottom_cabinet", "817807b8-4628-312f-98ed-3b9792cdde15": "stool", "2951d8ff-6114-4050-8d37-961baf6ab25c": "sofa", "0e874d17-37e5-372a-9be9-5ca5a3b1aa00": "chair", "995a0f9e-9683-4712-8ffd-a1525171e7ac": "ceiling_lamp", "fa471522-2ec3-4925-aa44-2a0129cd6b3b": "bottom_cabinet", "31f491b6-6968-4c6c-ac5c-306ba8a821ea": "ceiling_lamp", "338a2d65-a33e-44df-9638-a6ecd7a62d77": "sofa_chair", "4a067383-06a2-48aa-89cc-4bcde8e93a9e": "coffee_table", "f82ae6f4-adae-44e2-bfe3-ed875eb9fff9": "shelf", "ae511bec-d70d-4347-b7d0-9836d9a37f60": "bottom_cabinet", "c714e112-5112-4db2-a0d1-1a795fbbc2df": "shelf", "5f85aced-613c-4e20-9455-10aa845fdd09": "bed", "7dbdb6a7-5d1b-45c0-bec8-c63ec5667e03": "ceiling_lamp", "2ad51dfc-9e9e-492b-b053-6e6373a9a2aa": "coffee_table", "532dbabc-dbd8-4a60-ae68-5ecbe9cca78f": "bed", "27498740-3ec5-425a-aaa3-9f4703765e5f": "bed", "4cd64da7-df8c-43c9-9ed1-38422b88391e": "sofa", "42d8ad99-1c6e-45d6-862a-7c7b6792daf3": "sofa", "5c743f3d-6647-4f2b-9ecf-561b119cc104": "stool", "7b523483-9417-42aa-bcc5-fd8cfd4eb9ed": "shelf", "d477981b-fe72-4dd7-9516-cebce140b0fc": "sofa", "b56e73a9-f2f3-4316-be1e-01ebcded12a8": "bottom_cabinet", "91458a75-fa85-4a0e-9224-1347216cf4ab": "bed", "75eceabc-943e-4a75-aaab-83d6fbf65397": "bed", "6ba4e3f7-1756-42c1-a8f9-496eb11cb522": "bed", "230f9123-ded5-4ec9-989e-2cee7f07354b": "table", "acf6e944-1e6c-417d-a882-01e3b6727b21": "sofa", "0a955739-4d2f-45e4-b3af-43456bbf9bca": "shelf", "2240cb09-50e3-424c-b154-8a9f4b06dac1": "bottom_cabinet", "a70de08c-b101-40e5-8d74-12cff8dd8eac": "sofa", "14723db0-4389-45db-9420-f02b9d226c2a": "chair", "5e778529-d087-45ef-80a8-7bfb7903c375": "sofa", "116fbc36-50e9-468f-8821-c4e3ea4b0bae": "bottom_cabinet", "63f5d48e-3809-4b42-8715-87856b8542f9": "bottom_cabinet", "10d96d14-cea0-4da7-bd6c-c6974cadc5e3": "sofa", "86bd42f4-36b4-4436-88dd-b9df588e786d": "chair", "de91c842-f703-4d14-a095-8a5c3f570fc2": "ceiling_lamp", "6eae302f-f216-49df-a4ab-bda798700dd4": "sofa_chair", "77205ba9-96e1-4e89-99e5-b1a10b32309b": "table", "40d24560-af2e-4b24-be89-056cd89e4b59": "sofa_chair", "2a13ae2d-b9fb-4dfe-9679-762afdee3bde": "sofa", "26e8ffde-7285-4928-b907-d90287c68ecc": "bottom_cabinet", "053c51f2-e007-4ea7-8a0b-50f5ef90f89e": "stool", "62d9d1d4-4c79-4eb1-b141-b56014699487": "bottom_cabinet", "750daab7-41eb-467a-a74b-6d9f72b09a12": "sofa", "66ccbe15-ce7c-4f9c-b640-d557289ae5a1": "sofa_chair", "4f1f16ff-9913-4445-b162-5ad73576b89f": "sofa", "925bc907-2909-43e4-a988-261bf098e3be": "chair", "47b832c2-ca3c-444f-a7cb-0130dbfb8270": "stool", "82952d41-00e4-46ea-b5a5-dad51f22107e": "ceiling_lamp", "4e996f6c-ea8f-4f0b-88d6-b724fd671d73": "bottom_cabinet", "7055818d-8795-4efc-8be1-a9760267def1": "sofa", "3b77b35d-4040-4808-9c66-9f5afcf9ebd6": "sofa", "28c135ac-9ae0-39dc-b9c2-fd4fdc19bb20": "sofa_chair", "d16f6285-e669-44cd-8898-31e20a127d43": "coffee_table", "2902cac3-e9e9-31de-843a-dc2f0e4c3c00": "sofa", "c7d0e4b6-939d-4bca-87e6-f57ae3dd7130": "ceiling_lamp", "105529c9-a81d-4050-a0f9-a7963bcd886f": "bed", "041d2c63-6368-4da6-9f22-f27d53f835d0": "sofa", "b60b5427-a094-47e0-80ee-af1c654eb6dc": "shelf", "7fd33157-255f-4dc0-afa9-4e1c2b001126": "table", "b3bfc536-ab31-4bf5-a556-8542e26c39c7": "chair", "6bb592ac-81c2-4df6-8f2e-ee2c42de67cc": "shelf", "c681bf3b-8279-4548-a509-83801dd79d3b": "bed", "a91293b9-db48-42c1-91ab-f84a674ad63f": "coffee_table", "5ba819b5-d790-4346-82b3-f2e3c346bcd4": "bottom_cabinet", "daee0fa2-0d44-4d0d-9210-c2c231a2c2a8": "stool", "01b981b1-82ce-45cc-8602-a49569ec8e0e": "sofa", "6f671575-096f-493d-899d-c990b38db2a1": "sofa", "3ba3274c-7449-463e-ba32-09f4186b7bbf": "coffee_table", "1d553200-d05c-403d-8781-9741e12caf32": "coffee_table", "e6fdeb3a-3f67-4914-9e60-8bbedc4a19a1": "coffee_table", "64b0d4c5-2df1-4138-b091-83af5821cbce": "bed", "ff87fbf2-41d2-496c-a471-23551c33c118": "coffee_table", "7c1f342b-e045-4e47-a2af-de4bb1652cd8": "ceiling_lamp", "52630675-9772-469c-b368-01b96270a6a6": "chair", "53cad1d0-9969-4258-9889-900d8967430a": "sofa_chair", "11bbe762-9c62-4dd9-a859-d4058040c48f": "sofa", "9e8c0111-b23b-4e8e-98a6-9f2f53ed3a8e": "bed", "456639d9-585d-4595-8ca3-90724e6c088a": "chair", "a19e8164-e90b-4166-ae26-fb714efaf18b": "sofa", "1b660f02-4918-4cf2-a056-6ecf7c45952b": "coffee_table", "61fe95b1-4049-4279-b235-6d9f659959ac": "table", "81db355f-ae17-4912-8e97-fe718649dd01": "sofa", "fb233056-1437-486f-9b10-05c6ce9e6e56": "sofa", "409933ac-acd9-4763-804f-247cb96197fe": "shelf", "5119667c-2467-47d8-b68d-6c66bfb90bc3": "chair", "1ac4e478-601c-49d7-9cb5-122a8916cb58": "chair", "0d032759-bb24-4a3e-98c2-74e139ae56a9": "sofa", "03e621f2-6970-4256-8264-92e514d7068c": "bottom_cabinet", "74c2352a-23e4-4789-b060-7d07a0446007": "stool", "16bee8d2-7d9f-48c7-9f2c-4b71c4d7081a": "table", "7a1d1b3b-4c78-4edc-8a11-c9a3f962e97f": "shelf", "12070e40-3a5a-41ac-a3e0-209e230db460": "ceiling_lamp", "5ce9e65d-d7bc-476f-8143-85bfe0ed029e": "bed", "3dbea0a7-97e4-4350-a22a-58e4bc422823": "bed", "61203351-d5cd-4c2d-946d-b331a552136e": "bed", "5fd25280-aba1-3b3b-b8b6-3caf08d22ee2": "table", "5a5c45b5-c2b1-3ca0-aaff-df35084450cd": "sofa", "19c6c218-75c0-44d0-b8b1-59a26cc52e05": "chair", "77e9a9ac-0a7d-4e97-883b-f9348c7e6905": "stool", "2a4cdefa-33ee-41b9-887d-926fe31988fa": "bottom_cabinet", "50553870-3759-30b2-809a-52345b7059ea": "sofa", "25170520-05cb-4546-a6a7-89dc975e47ed": "sofa_chair", "929f3ed6-f255-470b-a5cc-bb73dc0489af": "sofa_chair", "4203fc13-d392-46d0-8196-d8bf21b1fd9a": "sofa", "41c7740d-0c6c-45ee-8eed-81cea3e8ae8d": "coffee_table", "7d6e3444-30d1-4b74-90e9-d4ed96a0970a": "coffee_table", "10ca3772-1dbe-4359-abe9-a133352a72fb": "sofa", "0d1dde0e-f69d-451c-85d9-8cb9a1eaa3a5": "ceiling_lamp", "025544db-5680-4faa-9459-1a7b03a8f299": "bottom_cabinet", "6f3927bf-aa7b-4bd3-baa2-784f69f2080c": "sofa", "ece1a176-fc8b-450f-96d6-57ed267bde7b": "coffee_table", "e9dfeb99-970f-42cc-9e7a-786d2119b27a": "shelf", "27c28ae1-d885-4018-81a3-f3c033cd8f47": "bed", "94ea3c29-2066-43b4-a900-80b286410a0f": "sofa", "cf561425-d738-404e-a5d4-32b7b0df4099": "table", "7e346355-cc35-4741-9ea2-7a3ccbdc7523": "bottom_cabinet", "6ff0a5d1-3f0f-420a-a580-65f04cf7f3df": "bed", "45ee620d-f213-4f6a-a1c9-89f1a738c8fa": "bottom_cabinet", "c1210a52-fd9d-4657-b2f3-253c8fea5320": "stool", "d71052d6-5d86-4bf7-b8f7-023f8b5e4dcd": "sofa_chair", "75fd3650-4824-4ab2-81f8-1cc9423c2b56": "chair", "410561db-f2a3-4092-992e-9b1e8154d01b": "bed", "c3ee981e-0335-47c0-bc17-99d9b3cb59cf": "sofa", "dfd8be29-da49-414a-9338-88eaf643ae83": "bottom_cabinet", "7e0cf41d-ea46-41cc-b8f5-f002808178c1": "coffee_table", "9b7ba8a4-834b-4848-87cf-02dbf8920133": "sofa", "f9d7691a-e8d5-45fa-a279-ec7224afa8d0": "bed", "184696a8-e72a-47ad-832e-5a1876919445": "coffee_table", "3f821e1d-2ee9-4d60-85ba-65b6fc77da9c": "bottom_cabinet", "4c7a2f22-3e0c-46d4-85b2-904d642dbb3c": "ceiling_lamp", "4b8f03ed-5a96-4d50-8c44-20d3e5a399b1": "bed", "2b585876-e920-40e9-82d5-21e3bff39664": "bottom_cabinet", "57623643-7105-4f0a-8f13-fed9c8723972": "sofa", "4d247ca2-c74d-482e-a8ef-b840c309422e": "shelf", "22e5bf52-9049-441c-9782-26921ee7d3e4": "bottom_cabinet", "111de8a4-5f31-4b68-87d5-28e4e8879648": "bed", "12cdb4e6-4b67-4d54-aac9-a2813fcf0155": "bed", "24131b69-5206-4722-a8e6-b6fc2e6785f9": "table", "77786f4d-dfba-4523-9572-eb8cd01ce9b9": "sofa", "2fcd1893-e595-4a6f-8a01-71a4a78ca393": "shelf", "f96b9638-dbdf-446a-bbda-c1ead674e76c": "ceiling_lamp", "3f3e9fe3-3db0-407b-9956-57025c5b7e6d": "bed", "9f728104-5dbb-4444-8542-8d50b001ed57": "chair", "4b8300cf-8a81-4be9-a54f-b2984d867636": "coffee_table", "3460c7c1-5bad-4b6c-bc46-990f43d8b539": "ceiling_lamp", "054808d0-7f84-4553-91b2-068a981c86f6": "chair", "b32cd3ab-4871-4272-923b-826bffce66df": "ceiling_lamp", "4bed045a-9569-4ede-b2fd-ad616108b6d7": "bed", "69a9bf61-ab9d-492a-b621-524a37dc6986": "bottom_cabinet", "777eea80-8e7c-47f7-ba9c-32086a92bf51": "sofa", "9f95afb0-aaf3-47be-8251-b5baaf4841ee": "table", "02cc7cc5-6e9e-4516-89fa-e9028570531d": "sofa", "92ff3d92-0d06-4e97-aa6b-d5ae21377c91": "sofa", "0d309488-bbbf-4ba1-8e2c-7e6fcfb26cb3": "table", "ed080b62-0fcd-4011-8528-0a79d1e96a75": "sofa_chair", "d6964af1-bfe8-4e89-99f1-3b79477f16fb": "ceiling_lamp", "e2e4cf0d-75a9-41e9-8ecd-3e270a83a7ef": "ceiling_lamp", "7c32c0ff-bd2d-4bf5-ad69-1b7055229d53": "bottom_cabinet", "058428d6-526e-3a63-a65e-fb646465e38e": "sofa", "e12245bf-0d10-4eee-87a0-ce75ea0ed8bb": "shelf", "10885d59-04f5-42c9-ac3a-83810fb64dcd": "sofa", "05d446ef-69a8-4f85-a8fa-a43cf426c551": "table", "147a52db-0e04-4c1b-ad97-339d00fc731c": "bottom_cabinet", "5eabe872-cabc-3c9a-8a0e-0fc3c375d60c": "sofa_chair", "2b44bb02-b77f-490f-acbe-7fe4ecb7dcc1": "bed", "7cf17653-504c-49fc-9b80-934a2c6b3fe4": "sofa", "072359a9-8c50-4d8f-83b9-4967d32c9e5e": "shelf", "0348af16-8e33-4673-9f88-a1bbf652b3cf": "sofa", "4dbe1f83-38f7-4370-bd61-cac43a016126": "sofa", "290b55d4-8db2-40d1-aba9-95e39a9a041e": "ceiling_lamp", "0ad6bfc2-37db-4427-8e3a-f61b6b402f41": "ceiling_lamp", "0efe2b4e-2b9e-4890-b8f5-12351aebbd85": "bottom_cabinet", "0d831b81-3ec1-4f8c-bb27-e9ebd83ec3b4": "chair", "a12acfc1-6929-488a-966f-01ab7e6e7555": "sofa", "bfb8335a-f5d0-4107-a140-6abd684b5193": "coffee_table", "149654d1-a4e3-4be5-9084-94d6ac4c87bc": "table", "73691d26-2249-4c48-ae64-454b184fcf4e": "sofa", "7827d6e4-e2fc-3afb-8c70-57439972cb0c": "table", "1d5f1e71-88ef-4e30-9bae-7c94b4509c2c": "sofa", "c6930e76-6033-4f02-a85d-b057e2ab0c0e": "sofa", "60dcfc90-0a76-4046-8e79-c1ca6a592f8a": "bottom_cabinet", "f380e8b1-0f97-4966-bceb-d730fa53f01c": "sofa", "f394d524-89b1-4acf-a21a-7eae82390fb5": "table", "3d5ed2e0-dfc4-445b-954e-ba743d5d0608": "sofa_chair", "09490581-f56e-4031-924b-176429ba173a": "chair", "1a08092e-9b95-409c-a07e-e2b22294efee": "bottom_cabinet", "8ff76300-f7c1-4007-bb95-070b27c947ee": "coffee_table", "5d0f5f8f-333f-49fe-91f8-26748c1419a9": "bed", "f397af33-15e0-4239-80d6-4ae7c58af0ce": "shelf", "c6c03d80-ead8-41b6-90bd-59aa8d293b15": "ceiling_lamp", "469b4de1-956c-437f-a1d8-14163b807e49": "stool", "0efd05bd-7270-42ef-b4c3-8afd35eeff85": "bottom_cabinet", "e185dbe5-c6c8-4fcf-864c-527acdbe603a": "coffee_table", "ae2a8a90-84b2-4d01-b8bb-943f0e0f112d": "sofa_chair", "879812cc-973d-4c7c-ad38-76262208230a": "bottom_cabinet", "4588ab7a-492e-456b-b8aa-5e48b412aebe": "bed", "7a1df5e9-0a47-3640-a68a-1b1aa07e8414": "chair", "233c467c-9144-483c-809e-2dd63982d16d": "bottom_cabinet", "4999e7f3-520c-46e9-aa15-2104cc9bfec5": "sofa", "c4218547-84cc-4753-a767-2dff65d5ca5b": "sofa_chair", "73986b37-162b-4e1d-a9ab-fdf725872136": "bottom_cabinet", "af2fa9f0-902f-469f-9953-da8d2c318656": "bottom_cabinet", "d1bb19aa-7dd0-49f7-9560-30fa738bc889": "bed", "0893795a-7f5b-41ff-a2fd-a4aa35af6ba0": "bottom_cabinet", "61678739-e87f-4d14-83b5-917baa5f1a06": "stool", "9e458241-6611-4562-b5ac-99b9b74e8c54": "sofa_chair", "2ae5cf29-90c3-4e7d-b704-f677de8de74c": "sofa", "2f9fa145-ed25-4dbb-ac56-9b1e43396df0": "ceiling_lamp", "593d94f0-4802-428c-9bd9-eb8b1f3776c5": "bed", "75af436e-7aad-4128-b5db-f7b9ce91346b": "ceiling_lamp", "42e0b61a-ccf0-412a-8f41-7fb9afc98b8e": "shelf", "6dffef54-d5d1-33e1-ae5b-6cf8883056ca": "chair", "04504ec8-c391-3b71-a60b-d55c44419ab8": "chair", "ab9df4f6-dab2-4b7a-9658-bde553f48e69": "bed", "1923454b-0e4e-4e7f-b0a6-ef6a952ee5e7": "sofa_chair", "009dc710-856c-4d59-b6bf-38a32a6241b5": "bed", "e32a2140-d6fa-48ea-b01d-d3b8254252c2": "shelf", "5c7e925c-c848-31e8-8ad9-60a650559f7c": "sofa", "f7c601dd-90ac-485a-a9b8-8d676c87423a": "sofa_chair", "d5778213-37e1-4dc7-a1d6-e9de2e8a1733": "chair", "1d8597b7-314a-4630-981e-5774da17e202": "sofa", "1722b7a2-8d14-476e-8a48-ed1ff5bd8e50": "coffee_table", "0e62bdf5-42b7-4d1e-8acf-791daba32178": "sofa", "de1b45a9-899a-4757-8142-bf5425b32cfc": "table", "de828ed8-9d9a-49b6-b076-91ff951ed7ce": "sofa", "f37307a9-0026-4979-a238-10e701982c59": "bottom_cabinet", "6df890c9-ca71-464d-ac84-25d7c026c952": "ceiling_lamp", "77085e5b-f0d1-4d2c-bdb5-7f4a458e5079": "sofa", "64c569df-a604-3c7f-9082-4a3cbc808261": "sofa", "4f141b35-3f86-4ab4-acff-38ca3a5ba6cc": "sofa", "b7bfbd36-f4ff-4850-8a5f-b6b876d99b59": "coffee_table", "110b4d90-3f09-4874-8a9e-839a6194d6a3": "sofa", "a76bcc5e-1240-4bad-b701-3371bf8a3389": "stool", "121d6244-5041-4ff5-8e4d-1d46252705f7": "shelf", "4315bea0-1527-3e13-97f3-7101ee1d7b7c": "bottom_cabinet", "fabcf4ae-299a-4c44-94c7-cbbe5a5b4765": "chair", "d5dd7553-d4f7-44b2-bf12-9d452e47eb06": "sofa_chair", "7a55553d-97b2-337d-b244-00599c86a5e3": "bottom_cabinet", "28c251d0-b745-405f-a477-47e0a62071d6": "bed", "21c036ce-d000-417b-b385-7e58d07a45a7": "bottom_cabinet", "11b1c022-62ef-4e53-8ce7-bfcf289b75ec": "sofa_chair", "486cb090-746c-414d-ab36-d517a560dfae": "sofa", "6d5abfe5-e8e6-46e4-a59a-77e4c8230c21": "chair", "b12a271d-8c49-447f-ac86-469ce7d91eeb": "stool", "50148ba9-5ba4-42d7-8670-6983802c1996": "shelf", "cba6fc64-e773-407f-9389-a3a56ab24663": "stool", "3a0d9d08-853b-4518-a8c1-701684361bc1": "coffee_table", "8931999e-b92f-41cb-8f30-819557715be5": "bottom_cabinet", "4583b13d-357a-4464-b917-e77450aa09f4": "ceiling_lamp", "d2ba99ec-0858-4bb2-97a8-907dab7827fc": "chair", "6ee0382d-4b04-445c-818e-8a0dc3e9450b": "sofa", "0683738e-40ed-4edc-bb0e-e00b529a22fb": "bottom_cabinet", "022895dd-19c5-46ee-8de6-f2ba11b68c57": "bottom_cabinet", "81b888c5-1b37-4ed3-abec-e67cc3b03156": "chair", "aa7bff4d-e25c-4f4a-9493-9b989cda5644": "shelf", "0e2091bc-7a97-46b6-98f0-d960a6903042": "ceiling_lamp", "026af98a-e9fb-436e-8a75-dd6c3e98b07f": "table", "0b06d9e9-5850-42b8-9d41-298cb70fe366": "sofa_chair", "1b177d51-d465-49c3-8580-9b2c81e24f95": "bottom_cabinet", "5ceb836b-2d77-4724-a9d9-3cb516e72337": "bottom_cabinet", "55e14772-c606-4a9a-8b08-e07189804e8f": "bottom_cabinet", "9892f752-2515-4ba6-8e29-e57faaf21d9a": "table", "0c85037a-833c-4e94-a3d8-2bcaeb053bcf": "bottom_cabinet", "0b4f504c-4d68-4af1-8660-03b02a7e013c": "shelf", "81bfa586-bea2-40a7-9728-282e156d8d9a": "coffee_table", "734b51e5-c646-492b-abaa-98b11e792333": "bottom_cabinet", "79351ba8-9898-38e2-ba0f-a62296ea9c2e": "chair", "7d61e27c-6983-440a-95e6-4f86f7a94ddb": "sofa_chair", "db99f23f-7674-45e9-b7c0-d301ac48c580": "sofa_chair", "d06b6e1c-3a51-4dd3-b7d6-d877f9d1c046": "shelf", "4bc7128b-c073-4a00-a1aa-2676d3024123": "coffee_table", "5296434e-6680-4e95-8dc8-4aa6db80d6ea": "shelf", "0639d4c7-1ac5-4631-9ec1-4d7808a3e360": "sofa", "209e7adb-6943-4e65-9eac-9f23306690d1": "sofa", "127ceae9-2a53-477c-81ee-29a23cdfe803": "sofa", "0dc2b028-4d13-4c64-b68c-f99091bb9cd1": "shelf", "7f77ac09-9e9f-4754-9ce0-72fcdc9b54fc": "bed", "f91cecf2-e5ee-43f9-b89c-ca8315ddeda1": "bottom_cabinet", "b59850b2-7a94-45db-b8f5-629c069fe5fb": "bottom_cabinet", "2ca4791e-bc7c-46db-936e-8a20a48234d9": "chair", "d0318902-bb35-4407-9dc6-1447baa38a3b": "chair", "846b84f0-cdf2-478b-a9b1-61258c4fcf5a": "sofa", "fe004c93-4f3c-4388-8e76-632ba4232d13": "sofa", "25ee28d0-4356-4a4d-a314-3bdeb00a09df": "sofa_chair", "1dbc0ba3-7444-4b86-be7b-e4b834feafb4": "sofa", "a6a71535-321e-4fd8-8016-7f0ba55d2116": "ceiling_lamp", "5259596d-6451-45e1-ae62-fc2b5d883101": "bed", "7065774c-2898-4b09-96dd-9e687a716b01": "sofa", "7b71bd22-b80b-40aa-835f-564a814d68f3": "table", "43330772-33f1-4e38-993d-3306cb7ff268": "ceiling_lamp", "6f7efa83-660f-4132-a6c0-0aff0c204f9f": "bed", "cb1d9a17-aa2b-4f71-a3b2-97e2dc0ccf2a": "sofa", "10682d12-abd7-428c-84ec-44ec06be444f": "coffee_table", "bec06416-cd6f-4688-a3de-3856b8a929cf": "sofa", "252c2950-6bad-4bf7-a557-76b1a08f7394": "chair", "5dfb0fb3-8196-49c9-a629-3f2fe339a061": "ceiling_lamp", "a29bc2b4-5d18-4fd6-b0ce-736d464c7310": "coffee_table", "19eec75a-b4ea-4a8e-b835-ec7016e119d1": "sofa_chair", "0803fd68-5726-49fb-9fa5-5e68bfbeceb0": "chair", "852a2fc6-9667-44bf-b0cd-bc252f528a87": "bottom_cabinet", "e00349c0-02d1-4d62-9299-1b32299dcc35": "table", "0f5a3f9e-f304-41eb-b65a-471889f0c6cf": "coffee_table", "6e6d995c-f911-4f64-9fd0-60a21fb507ff": "sofa", "7e84460c-8b11-4647-ba30-e509f1ee5447": "sofa", "6e8af18c-b56f-4c9c-94e7-bc876f8372d5": "ceiling_lamp", "669e0b67-826b-3b86-b34f-8a3f9f2fb564": "chair", "49bf9877-f049-4953-a76b-c77868354e2e": "bottom_cabinet", "c82a33c2-0925-462c-a6d6-1a1ab4b50611": "table", "404c9fe1-1a22-4c8f-a019-90f48acff8e7": "sofa", "2d159fe2-104b-4de9-bd85-d16dce731671": "bottom_cabinet", "4cee1e8f-b159-3f73-a9b2-a5683eddabd1": "chair", "469a88b2-ff6a-4a0b-a33a-db43c3181f9d": "bottom_cabinet", "37744b58-f4df-4e4d-b256-350e9794afdb": "coffee_table", "f39d1c67-f0ce-40f1-90ff-11c27760bfbf": "sofa", "27828aed-1c0b-4dfa-8579-5dbe67eeebee": "sofa", "3aea82ad-83ff-462d-b235-a9f2ddfdee72": "sofa", "7fe87256-e9b8-4599-982b-61e732d9226c": "table", "e1e8fb58-c8d2-40fe-8686-b669bc013059": "table", "51956bfa-1b71-441a-8c7a-5ab3fae94fcc": "bed", "4ef5fe00-5ab4-47dd-b25b-ee7bdb0ac349": "sofa_chair", "1153ed50-e6fa-4de0-8bb3-f87c7eddfcb1": "sofa", "ceb60e18-07b9-4ba5-a95d-cdfc5d7ad36b": "stool", "30f9385f-e431-44ac-8735-056448902493": "ceiling_lamp", "0d31ae10-6f44-4861-8ab2-cff00ae96159": "stool", "fe9d2f76-f33e-4ce9-b281-db571ce08fab": "stool", "655c2982-53f0-4ead-8d91-fca5902e69c1": "ceiling_lamp", "7a76f61b-8b2e-32ef-93e0-01e73429a3fb": "sofa", "56e99f03-de10-4747-be11-c7b420f50a49": "coffee_table", "e9129eaf-ab59-4e38-9f74-deab282fe5fe": "coffee_table", "dccd8ba3-c605-4e90-8984-bd3708e4c25a": "coffee_table", "2ec84a37-8444-4362-9369-c56451e4ae1a": "bottom_cabinet", "3287f120-f4de-468e-93e5-97a5aeb477a7": "chair", "380ae22e-b597-4600-beca-c630e5665843": "shelf", "411a9753-038b-43c9-96fe-d580ee23e23c": "coffee_table", "69125da6-5049-4fb2-af85-abf17c898757": "chair", "b9851d90-ce96-4001-9090-8184d4cb3bb1": "bottom_cabinet", "6f34683b-6504-4e0d-a1d7-dbaca5daf845": "bottom_cabinet", "04714e6c-2095-4bd0-9158-bbfd92db067d": "stool", "1a420bf1-524c-4b37-9e90-ab31a547639a": "bed", "d1d281f9-d3f4-4c79-bae2-d48a2c54de98": "stool", "e7db5053-dd28-4d9d-a127-71b718f0bce6": "sofa_chair", "7794eebb-1fe1-4ded-b5d8-245c4b688189": "shelf", "5be3a969-b044-4c4c-ac85-561247dac9d0": "bed", "793ed9e8-4760-4d4e-ae58-82fd1b8d92ab": "sofa", "67fc00fe-d22d-4dc9-bcf6-9dcf1fe5395d": "sofa", "3ee0376a-5f95-4076-8ef5-e81a8eeb4e32": "table", "7f5c54b7-fa80-3d2d-b420-2f1fe3702427": "shelf", "2e5104c3-4b7f-451a-afaf-6d272e77ae2f": "ceiling_lamp", "a03b986c-4ea3-4f79-852f-6ba401fb0528": "ceiling_lamp", "74a23289-5427-4455-9189-679c0534f616": "shelf", "7a7aee1a-5865-4048-bd88-b878cfbeaa92": "bed", "60237fa4-4e5e-446e-ab6c-2958b9b7e487": "bottom_cabinet", "861cc8ab-d2fc-4315-9a4a-6aa05a22d5e4": "coffee_table", "ce1488f3-914e-4354-9038-4a62d5470296": "coffee_table", "6e441326-6f24-41f2-b3f0-add6576fc4ab": "bed", "3952e506-2c9d-425b-8b15-5355931301e3": "table", "2054aeaa-9ba8-43e9-b88a-a571d7adbbaa": "chair", "6e4ad416-6cef-4933-8cfc-74f2fab1b9ae": "shelf", "28f1a1ab-1a0e-4d20-9f64-cebfab16c770": "sofa", "fe98de65-9939-4488-af3f-a6c6de4e471c": "table", "835503b6-673a-454c-bea3-85f52d24bdd3": "sofa", "9b6b95c9-6cf3-45a7-ae06-680a5278053e": "sofa", "64494d83-b25a-4425-b3dc-dc570beb8ca0": "coffee_table", "d3b90781-9764-4b5f-b70d-1a82e9fb365e": "ceiling_lamp", "415ece98-abd5-3a67-9157-c40338de92ee": "chair", "0944a6d4-55e5-34d6-ba22-e0aca007349b": "chair", "afadee10-c5f3-4e7b-a598-a7e30ed5458a": "sofa_chair", "12e261a1-a25f-4fe2-8f8e-f885a937acf2": "table", "22711cb5-56ae-4dac-82b9-85af32a8d0ea": "ceiling_lamp", "2d49b92c-b732-4f71-9f07-57b29c7f30c4": "table", "8e2509fd-0407-4aea-af54-eb1e13e83737": "shelf", "14a59f46-d88f-4fed-a250-02e26253a889": "bottom_cabinet", "7665f863-5552-3e14-a9fb-1eba14faa326": "chair", "4a44ab0c-af72-49e6-8813-e36f746977dd": "sofa", "c82bc4f7-4d60-44fe-812b-b6bebcff3d4b": "bottom_cabinet", "0860f1c4-712e-4bab-857b-e3a394291f41": "sofa", "24932564-a73e-4c26-bbaf-b4c15894bbaf": "table", "24b06198-c68a-4100-a797-0d54d42457b0": "coffee_table", "7e81d364-98bc-4e82-80d1-04c3b651d98a": "chair", "a637fc0e-230c-47cf-ae89-ced218c4f4f0": "ceiling_lamp", "7e101ef3-7722-4af8-90d5-7c562834fabd": "table", "1f9bcdf8-2390-4712-8bcc-66bfe526712f": "stool", "78895eac-5333-4dc5-88bc-cd67dc86826f": "coffee_table", "6ff36d27-c149-44f5-9e77-39037f8251a9": "bottom_cabinet", "41e88177-e831-4173-8987-0e00840eb89d": "bed", "74a0a8c3-02ae-40e9-93dc-9cef94a5d034": "bed", "79eb8c8f-7b78-4d0c-87f1-75367ef7141a": "sofa", "3e67257f-bef6-4e45-b1b2-0fc945d8ebf4": "sofa", "5e6ab4d2-68c4-4adf-9254-0774692b5683": "bottom_cabinet", "eb50c5c6-ead9-4f6f-8592-be9d573b026f": "chair", "4d4ed837-e00d-4e35-8ef2-b397bb4aa42d": "chair", "5f6eb8da-8f0e-47a6-9d14-3f604dcb947f": "sofa_chair", "70b2249c-626f-4ff1-8622-8a373079fb90": "coffee_table", "78b061ec-31ea-3227-b8b4-d10dd26ba7d4": "sofa", "004a97c2-124f-4dd2-97da-900af7ad6ca8": "sofa_chair", "1bac3fe5-bd4c-415f-8944-e43b8ddfd219": "table", "7ef6c6fc-e7e2-4004-a6c2-5b2522f40b53": "ceiling_lamp", "b02d97a7-c4fc-4fe3-ac93-b911f2f7d145": "bottom_cabinet", "d14e06fc-0908-4ab4-9efb-675155fdbedd": "bottom_cabinet", "6f7cb7c3-350e-4ca5-b245-b2005612005e": "shelf", "469905c1-4977-4700-9e7e-bd931f8cfecd": "bed", "2b84123a-16a6-4a4b-880d-91bdd914e040": "sofa", "6f2d5042-57cf-4114-a847-0139b8503816": "shelf", "ca1d65c5-54db-4d01-bc28-df170d83aec3": "stool", "0b856bfd-24ad-4fda-aea6-508cbe8b4db4": "sofa_chair", "543ac948-4339-49ff-a1ae-84e5747bf53c": "coffee_table", "3ff5a682-eaed-483b-8907-157d488447c9": "bed", "75d07f16-2b2a-3045-a61d-75149d105ccd": "chair", "56b2941e-48da-4b06-850e-8026dabca593": "bottom_cabinet", "50867bcd-3423-4a8f-917b-b0ca6955b8a6": "ceiling_lamp", "6d9407a3-774a-4bd4-bf63-b6d71712cd54": "bottom_cabinet", "88adb9c8-d16d-48cc-aa5a-aed9c40e48f6": "sofa", "2a6200a8-d265-4c47-8e23-bab584b1e4a2": "sofa", "f884ca26-efa8-4977-82f9-dc2b199b22f5": "bottom_cabinet", "39922c43-03a5-4276-94fd-100fa73ffd4e": "sofa", "64d5884c-7fa0-4f81-ac48-4d9f91585748": "bottom_cabinet", "205c1d74-d507-4a4a-9a58-5a026f2e2931": "chair", "3f409efd-8c48-41c0-b930-b0e915ffbeec": "chair", "89cf2277-36bb-4b2c-a47a-9f06b98b3b34": "sofa", "499b11ea-37e5-4435-800c-f9c4091e079b": "shelf", "42d9f16c-6c0f-3b05-886e-1e04ca9d46f7": "stool", "7fcb751e-bbf3-4300-9f87-60ae4d83b35b": "stool", "adc1e8e7-fa7c-420e-afe3-49cae56f3d86": "stool", "e4667a09-48c2-4073-9873-35abef8244a1": "ceiling_lamp", "4cdc1a3b-b49b-3402-b468-53c6c11d4357": "table", "1f286ffd-7bb7-47a3-b722-d2b30098782d": "sofa", "e0a02287-d161-493b-8c31-d14fd5e7777d": "sofa", "71808838-f84b-4a85-a6e6-efff89daa429": "shelf", "2d639df1-9103-4773-b963-04feb4122f51": "sofa_chair", "1d9f21cd-359f-4520-ad98-467e86526b35": "bottom_cabinet", "64d5e5fa-6d2b-4bdf-a083-5cd98f579be5": "sofa", "97108cbb-b53e-48cf-bba9-eb065a153454": "coffee_table", "101563cd-8b31-4ae9-a715-d13f8f1938a0": "bottom_cabinet", "2fe7a894-a92c-43b5-8911-990db4a1ffaa": "stool", "a3a4fdf9-9dc7-4cf2-97f2-d3addb8f089d": "sofa", "f3a8453b-a69d-4227-a501-97dd702bbbe7": "bottom_cabinet", "795de70f-08ac-4a36-8d75-c2d8b064ba50": "ceiling_lamp", "2a0669c4-76bf-419d-9b90-b808cb245224": "sofa", "087f3bbd-9609-4080-baa2-cdcb7230002a": "shelf", "5ea0d5e2-5215-404d-a42d-92699853d5ac": "sofa", "64014cc4-287b-477b-94e5-30aefb92c8a6": "bottom_cabinet", "0528d1f6-99a7-4539-92d3-5648a302f3d7": "ceiling_lamp", "7e908400-800e-46de-9e0e-3d468c91ba90": "sofa", "207129c6-8b86-3fa7-bc82-54444f33d2ff": "table", "10406246-0e6e-4156-bbab-74649aac88fb": "sofa_chair", "1aff9ddb-f43a-41b2-a311-2c04b14f80e4": "sofa", "6f8434c2-757d-4bef-9e1a-3f2c05e5dbde": "bottom_cabinet", "8694bb01-1c9d-4485-929f-8c272371c5cf": "shelf", "6f09d6a0-dcd6-472a-9793-bafc17a8486f": "chair", "aa1cdc3e-5dee-47df-8d14-1f76a4967cf9": "chair", "4723d4fb-efed-4532-bd14-5c1d92887349": "bed", "7aa42079-a9b0-449c-8c49-6d8da1ec5b3b": "bottom_cabinet", "4a479b61-34aa-489a-9b59-d373d26da7fd": "coffee_table", "686bf2a6-e92e-4af1-8288-4bae5a983459": "sofa", "4d1ae836-abc0-404d-8f6c-7915c117d38c": "coffee_table", "2363c335-d0b1-42cc-9c21-20e9b21341dc": "sofa", "03c4ad94-9507-4bcf-a90a-67f867db2111": "bed", "4ca6eb5f-1320-3853-ae9d-b38eab97dfdf": "chair", "d3009942-98ba-4652-bb92-13e61b82bde7": "coffee_table", "ff6ecbaf-7218-4138-adcc-17a375b6c0ef": "bottom_cabinet", "24297c29-b236-4136-8787-8913d95802e3": "bottom_cabinet", "0ee27c3f-b278-3996-a241-daf238b70a5c": "sofa", "246cb5f9-27f3-4d14-8c8d-ba1f55266d46": "shelf", "2a644df8-d8ec-40c9-9f42-f207c98c685a": "coffee_table", "9c04ecc1-8cb3-4203-af0a-e155d61ae70b": "sofa_chair", "736cbe37-d1ce-4e9c-bb3f-fa785c969a30": "bottom_cabinet", "a1bfa6b1-8575-4da3-a91e-8c45288432ea": "sofa", "83f74ed1-bd79-49e1-beb8-c80e5bcbbcb5": "coffee_table", "6ffa21e8-16e0-4fe9-8606-dfa097353763": "bottom_cabinet", "6ba321a3-429a-4e70-9926-0a3c57d3d817": "chair", "96c7294e-b7f9-4741-b3af-6417a14ecdcd": "sofa", "841a57e7-68a6-42bb-b414-77c32424874f": "bottom_cabinet", "3be200c7-6943-4f19-8b03-d2bede79449a": "bottom_cabinet", "4b5ce737-4733-4dfe-b703-8b8908b2a171": "bed", "52c7339a-33ab-4654-9232-1a9d5db194be": "sofa", "ffd71c3f-5625-4090-a8d7-a3caba1af504": "table", "6cd134aa-6eda-403c-b02d-7f9d7efcdb63": "bed", "2316c0a7-6caa-4410-b452-379903e35664": "coffee_table", "0847625f-4895-4290-a1cb-a9c795c4b53e": "bed", "f409f4f8-68c8-4a25-bcc7-d631f22066b2": "bottom_cabinet", "72025cdb-7e0f-4e71-b5f8-d040817c25ec": "ceiling_lamp", "5199c579-cf1a-4fb4-8c00-51e4bd2b2b70": "bottom_cabinet", "8231608a-994f-4416-b68b-3db75feafe32": "ceiling_lamp", "44dd764d-f60d-454a-bce2-03c18653d8a3": "sofa", "f5bcb3ea-c9d5-45a4-8291-4bc04bde8ac0": "sofa", "b9693b42-f08e-4d71-b48e-fb10c285ad04": "sofa_chair", "ccb4b5a7-2e59-4e3f-a5be-8731ed2c9b98": "ceiling_lamp", "5149c843-f441-4589-a67f-e6ac7caf021e": "chair", "6747b64d-5360-46ed-a9ed-fa6de85ff7a2": "bottom_cabinet", "57540a46-fcf9-45ab-819d-56722a75b564": "sofa", "9c2e6c40-74b3-40b9-84bf-5de7cbfec0ff": "chair", "1feec0c4-740b-4c87-b30a-077eefd39a59": "chair", "ce26b666-e786-417d-8261-cd5b1b6dbb15": "table", "15694ac0-e537-3cb2-b372-53793868d198": "table", "34f01ca5-b30c-4273-84c8-1a9d4a71980e": "table", "09926e0a-8894-42f8-9662-58ff6a20a626": "sofa", "8cbdfebe-ff0e-474c-9f11-ee5ad803c90a": "table", "288405ec-eb94-42ad-b671-ce52952d17e6": "bottom_cabinet", "0bde5aca-36dc-4e57-94ef-70947727b13b": "bottom_cabinet", "19cc37f8-9549-48b2-b4a2-612eb1053a4d": "shelf", "ea75678c-9d7c-4325-9008-0638a8513d26": "bottom_cabinet", "38ea2314-1803-442e-9add-ace97d2959a2": "ceiling_lamp", "a90651b2-33ef-4b7f-91ba-39821ddcba18": "bottom_cabinet", "0f92470c-b703-49fb-b317-fb3e570363aa": "stool", "103e839a-537c-4ea0-aebf-8c1e79fd1349": "sofa_chair", "3acb4f17-ad10-4df7-99c6-43b5a02730b1": "coffee_table", "6c0a0d04-4b54-4bc9-b710-0865550c4cb6": "bed", "52ec24b9-9cf2-4ad6-ae45-cdf976f006f4": "coffee_table", "62319141-32fa-4353-b2ff-ec31ca232e3e": "bottom_cabinet", "056303ba-d344-4923-87ab-74fb7b33681c": "sofa", "e9abb0c6-6908-4bf3-b43b-0c6d21259612": "sofa", "fc7315a5-d20f-45fe-8f8e-309f38ea44ac": "bottom_cabinet", "d24ee8bf-5748-498b-8acd-d5dec116c921": "table", "7de631e3-2403-4577-8bae-85e5854da1ea": "bottom_cabinet", "1e61bd48-974c-468d-a78c-88f43095bc39": "bottom_cabinet", "7106c8f3-23d0-4528-93f6-9a162c6105be": "coffee_table", "82dd1526-b4bd-4002-98db-40d4ef2f0d24": "chair", "2209baaa-5935-42a4-8b1e-b7380f811d48": "ceiling_lamp", "23b9a85f-8b12-4a5e-b764-6188b9052c66": "table", "96891ed3-7a35-46bf-ac48-f668bd09e22c": "shelf", "c554f156-0d92-4fd7-9c6c-f18978a9e3fe": "shelf", "2d8e7040-14d8-4aba-84ee-356a1eae11e8": "sofa", "52611711-f1ca-363f-beff-953c1a46fb68": "sofa_chair", "a1dfeb31-6a7d-499a-a652-16d55bb90aa8": "table", "75e83d69-392b-4794-aca4-c5f1dd2d228a": "sofa_chair", "4bd5ec70-a7bc-354a-adc9-bc4fcb7a520a": "sofa", "c38e9641-3409-4d36-97a2-509b6b9b62a9": "shelf", "0df6d945-8e0d-3303-ba03-951f01e580bc": "chair", "da63b5a1-d4b5-469d-b25d-db5a22c800eb": "bottom_cabinet", "07fb4bf5-95c2-45ed-a5d3-8fc896179595": "sofa", "f44fe630-f6f9-42de-b105-28682786d77d": "table", "83af51b1-b177-4316-9d14-a3e44bb0b4e2": "chair", "2752314a-8936-4470-a1a0-5a90afb2e113": "bed", "6cf2dda5-b955-4ae8-b7c0-634358e4dcb2": "chair", "27057c54-78e0-4d37-98fd-7fc51128dab3": "bottom_cabinet", "0810e504-f222-43ec-bc37-dc7808bc47d8": "bottom_cabinet", "4c6a57d3-fa56-45a8-96d1-9bf767e8ba82": "coffee_table", "4c54b216-fa90-4f66-8a03-ea59ee2be6ae": "chair", "08bd9700-ae85-4722-8a3c-bf394a31799f": "table", "8bb1ebe5-3b40-36b4-b46e-6ae0b3ad6836": "table", "2873696b-47ed-40b6-a998-67ac58c20aac": "chair", "4e151a11-bc80-4383-acdc-668bb129b836": "bottom_cabinet", "64eff51e-441e-4ce6-8a73-55c2b80ca3b2": "coffee_table", "20a277a2-ff08-4993-9863-9591854ffe12": "sofa", "2b227d1c-bcfc-4abc-aa9b-ffaf9de2051d": "coffee_table", "5a8b91a2-355f-4045-aa5c-9340f5ef73d0": "sofa", "63db5e82-d12b-4f22-9f4d-cb6ef9da58c2": "shelf", "01112e86-0c65-4693-a531-e57dfd08aaf8": "sofa", "08d25863-73fc-40aa-9a69-7273727e2c2f": "sofa", "5ee01425-f6c6-4743-a733-1f26aa4d97b7": "bottom_cabinet", "7ac4043c-003f-4589-a01f-6f2e7cfece4b": "chair", "b4ffd05c-e1ea-46e3-a83e-5882b9129aa2": "sofa", "65017c44-34e5-4ab2-9ca9-279dbc02dc1f": "sofa_chair", "dffd2ab5-466d-427d-b3ed-46d172dfa58c": "shelf", "13d588a4-aed1-4453-92f0-aa0c8bc2d11b": "sofa", "5dc5fe32-51c4-4b43-8424-fdd26b72df6c": "sofa", "80899d47-b544-4ee1-a9ca-b037e46ac829": "stool", "e8f868af-e2d8-47a4-add8-81d2bf522ea4": "bottom_cabinet", "28dd3ca2-3e58-38ef-980d-0f2f7a795cc3": "chair", "38238086-9f7f-4db1-801a-358191e672c0": "coffee_table", "489e32eb-2e28-46a4-b2ff-a1688a83333f": "ceiling_lamp", "05171e1a-b921-4f6e-b277-13fb330495b9": "bottom_cabinet", "48b31960-ad7e-4a99-b890-f1ffe19d48a8": "bed", "f9ed40f0-ee1a-4f71-a41b-ad79e76cdff0": "table", "93e24762-4c57-4923-b6c0-3de0d1661ca9": "sofa", "4a591643-75ab-4372-9de5-0bb152618fa7": "bed", "1b0269b1-902d-455d-8960-367009395233": "shelf", "7eeaaf59-5a29-4abe-933f-516509256060": "sofa_chair", "a297d883-7452-4fad-a9d6-0f65ee2f1816": "coffee_table", "3eb4751d-19c5-3b2a-9354-10aa6a2c186e": "table", "26df6ae6-1e44-46f9-9210-cae7ee877639": "stool", "77e57983-3a6d-4348-a8a3-1472b129f338": "ceiling_lamp", "66be5448-ce63-4e25-8bcf-5bd36cb155ec": "ceiling_lamp", "84f0d3cf-35a6-4a54-98f2-3ead4cd5e59a": "ceiling_lamp", "6c396365-d75c-4f31-b14c-1a96e88261dd": "bottom_cabinet", "858870cd-37da-4834-9cc4-fe6ab812bb97": "bed", "27b5f180-3819-487a-af72-880c4e2fb3ce": "sofa_chair", "c0216c9b-cd78-46e1-87c9-3ab90ba3a6ec": "ceiling_lamp", "77c82341-db5e-4734-8723-40ae9d3dedf9": "sofa", "11e193ab-00b3-493d-8008-9f15c1d3d224": "sofa", "00050a71-6a99-31ff-a778-4dbeddf50586": "bottom_cabinet", "00acb313-c507-4372-addf-508755c6e98b": "bed", "1c3c877d-c3eb-347b-924b-32112290b238": "sofa", "0e152d0c-5720-4889-ba89-8091492ff398": "table", "10346cd9-46b2-334d-88d4-a45e7abf35b6": "chair", "b01f6b57-e48d-472b-9a4b-ab600a06e0e0": "chair", "b63725db-7394-48f4-bb99-5707bd346d88": "table", "b155cfe8-9fec-4f1f-b0e6-4d29609e1133": "coffee_table", "1b9d62ed-554b-4542-b225-265338db3514": "coffee_table", "a4bba0cc-7609-4813-a235-1489a681d0e9": "shelf", "40a9655a-f4eb-4ad7-94b8-cb282aa5b454": "bottom_cabinet", "74ab6d93-2184-4365-bcef-c54ad1201a2b": "bed", "6c29cc13-9d4d-4566-938c-3194092f7321": "chair", "0a0f0cf2-3a34-4ba2-b24f-34f361c36b3e": "bottom_cabinet", "4deb2b70-fd9e-4c5a-b179-fabf29d90f59": "table", "48fe0ce1-ca3d-42fa-8f15-e92e93ce37b4": "bed", "cd98bc6b-7433-4983-aed0-33c8bc1de940": "coffee_table", "7cf60eb8-36f2-4543-a125-8e98f29a6500": "table", "69fdce7d-9c39-314e-b3f8-7c2786482be5": "sofa", "733121d8-f413-3a27-8b33-6b2732527389": "shelf", "8726ddab-39b7-4547-bfe1-25d0e21c1ddb": "bottom_cabinet", "776cdff9-dade-4e88-8b23-3c8eec0d5be9": "bottom_cabinet", "f3f2b1f4-1aab-4142-80ce-8ae78a399e58": "table", "3f344705-6b64-4725-ba82-f498b9e44f1e": "table", "addbadb3-a140-4a0c-91c1-eeffd6ab005b": "shelf", "276c2a64-9fae-4a44-881f-f81b457c8c28": "sofa", "d9de4102-4c74-4ee1-b6ac-c8f315acad2d": "bed", "ce6be30d-2b99-4813-9257-b7c9803b62ce": "table", "aaea6776-7dd7-45fd-aa85-41b9b40da6fc": "table", "56b60334-ea1f-33da-af12-467c40f09de1": "chair", "260f79ca-41d4-44c8-bbe2-118978128685": "bottom_cabinet", "d52a9e3c-2456-4a3b-b383-aad130813332": "table", "86b7eb6e-e2a3-4985-90c3-970a71db4fbe": "ceiling_lamp", "288037cc-9f46-4189-89ff-bc41a203d1dc": "bed", "ab511164-78fc-402d-8189-02a115a55ee7": "sofa", "a068693f-ecbe-4231-9f32-23f0a3210fda": "shelf", "2b875285-b3a9-49eb-a3ab-f0f3c0c7179b": "ceiling_lamp", "93ccf508-3352-42ba-94ab-12b1d461b86d": "bottom_cabinet", "ac5ee7f1-8089-4f63-b863-e9f13f1892f2": "bottom_cabinet", "0924c010-395e-40b7-8bd7-23d6db5ed269": "stool", "6962e1e3-f7d1-4419-b114-a0b2ac91e195": "chair", "fabb0be9-069d-4b67-a08f-bb18dcf0d63b": "sofa", "e705adc6-c469-4401-ae22-44ee22644318": "coffee_table", "eb42fd74-2ca7-44fa-bcb6-6b9982145489": "bottom_cabinet", "6bc10aaa-e414-4b43-baca-412bfedbaa37": "sofa", "d78e2754-80aa-458d-95db-e7ef03b34984": "coffee_table", "1573c3f3-8fc8-4db1-85df-cbebc58a1bf9": "sofa", "5f0619b5-e72b-4a99-a70c-ed05e93fbb27": "bed", "4851ae45-045c-3918-afa9-3bc1387423e7": "table", "b9679ee0-bafa-4198-b63a-4063b53d4f26": "stool", "afa0439a-27de-449b-8720-eca59ca3474d": "shelf", "efb36682-8f35-43fb-a3fd-a0077e97830e": "sofa_chair", "d7089b16-f4e1-439d-94b8-2d23a1fe3ff1": "bottom_cabinet", "45ec868b-b4e9-4429-8f2f-5082f09b808b": "bottom_cabinet", "eb2dc8a6-44b0-48c8-a862-773d2e13b2ae": "bottom_cabinet", "14214469-8d34-40c2-bab2-dacdb14b8c3a": "shelf", "a4eb53e3-82d6-4be4-a0fe-f46827556022": "sofa", "c1348b2f-f1ee-4df4-8c8a-a64e02ddbb62": "chair", "36e4f2da-d529-49b0-b65b-d2addb39c4c9": "bottom_cabinet", "540f6360-bd68-4810-8be0-80b78cda2845": "coffee_table", "de61b6bd-123c-41e4-b59e-da89bb2f200c": "coffee_table", "0a44f97c-ab24-44fc-a1e2-013fa1022115": "bottom_cabinet", "7c130177-89f3-4b09-8b80-694d9ef9f6c7": "sofa", "206d3420-05b2-4500-815f-51887d7cbae8": "bed", "ba97a2e9-12d3-4e3b-899e-d2ba3600401e": "chair", "40fcee9e-520a-4f6d-b8f5-044f5123cc9d": "sofa", "10afccb9-a865-4e26-910b-e47d647ee823": "bottom_cabinet", "11c78d8a-818f-4c50-b006-c0d51dc4f454": "stool", "f6351876-1a12-4fc2-bdb8-853ed360f007": "ceiling_lamp", "71997917-b065-440d-baee-5e5393e97001": "sofa", "7da5f5d1-a16b-4920-ae03-526d1213414b": "ceiling_lamp", "9d130fa1-5d4e-476e-9174-749834285580": "ceiling_lamp", "352da9da-884c-4f16-a532-b74e0907f216": "chair", "e03bd3e5-8600-4495-80e2-bf2671c5973d": "sofa", "616faa27-89fa-4f29-94f0-ca51cc7f35a2": "sofa", "62a3ffef-5a0d-427b-8885-a151656dca2e": "bed", "3f49fec0-eafb-3470-972a-400468a42ed7": "stool", "adcb0f68-b3c7-4a92-8cc1-430e17de2581": "sofa", "35258d4e-b8b4-4c1a-a15a-98f08d4db444": "shelf", "178bca0a-e0a6-4cd6-be0c-f0e2f020d5cb": "bottom_cabinet", "3c3d634b-c406-4b1a-aec8-00112d424d50": "bottom_cabinet", "5e3ffccf-f26c-4396-b15e-1c23134e4021": "bed", "6edd8810-b49a-433b-bfa2-c63bbe0c30d8": "table", "0c7b7a60-8ad6-4c27-a962-eb31072c8c42": "table", "5f25bc9d-3a6e-45e7-8c8c-e40b1d39e2a8": "stool", "2206502d-ce13-48ba-8962-b721753eba94": "bottom_cabinet", "0fd96a1b-25fc-4ca8-8fda-703a6cb456fc": "ceiling_lamp", "f0ad269b-e9cf-46dd-97f9-e0f139dfe0fc": "sofa_chair", "102d2c99-2993-48a1-9596-519c93c4c40b": "ceiling_lamp", "7e3a8d19-21e5-4120-978f-5ee3caf42fc4": "coffee_table", "4637341f-ec63-4e0a-9c4d-dff4b255ef0f": "sofa_chair", "93aee123-ab23-43fb-bb8b-00f668366ace": "coffee_table", "da932df7-3477-44fc-8eab-ec9bc4aeee8c": "bottom_cabinet", "58ebc3ba-3bc1-3da2-8ff7-2d0426511c10": "sofa_chair", "7e33d9d3-6387-4705-a679-012a80197e67": "bottom_cabinet", "7f01f41c-15df-3ba7-aebc-d404ad8583dd": "chair", "d01666f1-788b-46d5-9502-fa796496820c": "bottom_cabinet", "e421b292-8808-49e6-9dbb-3f60519de9b4": "table", "148d755f-6755-48d8-855a-4545b1c96223": "sofa", "4b443401-cc13-4d2e-b7bb-2aeea7eabe04": "shelf", "1ea4a9a2-e029-4cb1-9fcd-fb7a8f0edce5": "sofa_chair", "803decd9-ac96-422f-9919-9bf3b806a462": "bottom_cabinet", "a83e0ead-b3e4-468e-b8f1-e9699db7c232": "coffee_table", "8278e3b6-bc7e-4c62-bbda-5017a4ce5ac7": "bottom_cabinet", "32db831d-d8ae-45dd-aecb-061f532a8d49": "bottom_cabinet", "c08c72b6-d175-4d0f-a248-b7326b81db78": "table", "6374bd7c-53f1-47e9-9c41-297e0f7bbb64": "sofa", "dfc72e00-60bf-4003-8841-b94d3eed5677": "ceiling_lamp", "2e3d6237-e30d-4ed8-8b59-f400e2c904d6": "shelf", "27059911-89f4-3e78-a511-4c9b8cf51fb3": "chair", "b1c4d578-d985-415e-9a64-f100a2f88227": "stool", "175ca6c4-5762-4294-8737-9f7189715356": "sofa", "474c188f-38d0-4a68-afd1-6c62e6645bc1": "bottom_cabinet", "ba4e24ef-b6b7-41be-af22-d13ba4619a93": "sofa_chair", "07d2b86d-bf97-4893-8427-13e2a61f1fc5": "sofa_chair", "773717ac-13b8-4071-9863-37ee856ff606": "sofa", "014813da-7bfb-438f-93e6-dad1ab34ae55": "chair", "7c44e19f-1afd-4645-9a5c-9e15a25f3c31": "chair", "a8cf8908-156c-4d18-8992-5bed20d453df": "bed", "47c91fb3-4424-31fb-a0b5-85b0a9635504": "sofa_chair", "0e3e91f0-6e44-43bd-bf9e-cc73e5e5e5dc": "sofa", "1ab599a4-bc6f-3da8-acdb-f1508e908b57": "sofa", "fa93acac-e20d-4beb-b574-7ec840ffdc08": "ceiling_lamp", "2c3f7110-59e6-4915-86f2-7b7e89cce084": "chair", "0bdff8a2-eb07-42ee-967a-4379e7589569": "coffee_table", "aa2ab0cc-d62f-4508-bc1b-93345ed0a53b": "stool", "5247667b-b7f5-499c-9190-b4e1b98c4ea4": "ceiling_lamp", "43726e35-a3f2-4e71-aa6a-317396a40be5": "sofa", "4846be13-d6b0-44ea-a65a-b6d58f7ba3be": "chair", "4ad52267-7560-4dda-ae80-05468dbe8d41": "coffee_table", "79c5f514-a006-4e6d-a66f-8d4009cdedfb": "sofa", "220f7308-06d7-4b41-a0b4-533bb28bb104": "shelf", "04af14c9-26b4-4356-b179-cd3fa4ef11dd": "bed", "7a1b1331-1c83-4a8f-b431-1a765f76fe17": "bed", "77d26118-256f-40ff-a1ae-30e8b3345c56": "bottom_cabinet", "0e0ec6a8-3792-4bd7-8100-2f81f80c15ea": "sofa", "d9da9766-187e-4fde-941c-fafe1c7c1e32": "shelf", "083fa19d-86d6-43de-b026-515f141b88a8": "coffee_table", "0328c7a4-560f-416b-8207-3bd7519659e0": "sofa", "fff45ef4-fbc8-46be-8fa7-42b7fc847e86": "chair", "f9bc5ca8-180a-4a0c-8cf1-e85b20864fa3": "chair", "6940c2c0-6685-4a46-a941-d8e9bfe160d4": "table", "4cbdaa10-169b-441b-bab5-732300455dab": "bottom_cabinet", "e1c0a9d5-4193-4878-9a36-989e45094713": "sofa_chair", "68146221-3b7b-43be-b493-a68822ee3ee9": "ceiling_lamp", "05155dce-8942-441a-af37-1adc1866beab": "bottom_cabinet", "07380e1b-c6a1-444b-8223-c6626e6c10b6": "sofa", "9a5b9a10-6be8-4f2f-8202-c5afe818b7a0": "coffee_table", "69e270b3-9354-4f92-a397-08099b189d3e": "chair", "8696652d-9dea-4e56-8094-656a0e02bcff": "coffee_table", "af903b3e-9ecc-4184-9b2d-75a1af7492c6": "chair", "115678d8-847c-46c8-9fd4-f8801c65082a": "bottom_cabinet", "1da59a58-7627-4954-9950-4b5dbace0186": "ceiling_lamp", "94be444e-8f84-4621-9106-72b273f9b0dd": "table", "e9bd517b-849a-4d61-a78d-9a05285d1b32": "coffee_table", "83d2c5b4-36cd-3e91-a48c-fb86c3d9a46b": "sofa", "7b044f42-bec9-41d5-86ee-636f870b7fac": "bottom_cabinet", "404f7f4e-867d-423f-96d1-5611bcdaa73d": "sofa", "53e5d386-7766-44d4-9583-d5aa33b8f1b4": "sofa", "181e3bce-9add-419a-b843-b32114d94915": "coffee_table", "68e45537-a212-4fe7-b43d-109d43437eda": "sofa", "b2e16c0c-b9e4-4eba-b911-cc53c2d697fd": "coffee_table", "029d0231-a5c8-403f-93d4-790cd153d2f9": "bottom_cabinet", "0acb42d5-724e-4505-b9da-7549a4cfe6d6": "coffee_table", "fe9c89a9-7464-4aed-80c0-b0ec07c57f91": "shelf", "bb1ec6a7-85b0-4b47-8637-2d22d39515bb": "sofa", "ecae9940-3a4f-40f8-9e10-8e497cded15c": "coffee_table", "e3f8ccaa-da93-4c32-8e83-87e0599ba440": "ceiling_lamp", "29cff787-58ac-4d20-b1ae-20fca436d301": "table", "5e528f5b-7bcb-4c29-b721-817f652a73ef": "sofa", "2ec40b41-0091-4214-a618-72d555bc1ba4": "coffee_table", "121967de-6952-4d51-96a3-2b2a07ca4097": "bottom_cabinet", "1e22825d-bea5-45dd-8daa-84bf1ed41974": "sofa", "54377535-9f96-4356-814a-5102a497b636": "coffee_table", "905dcb06-c639-4170-bdbd-24ac9fc45a81": "sofa", "69acc8df-eaac-4453-9729-12f25673b9fe": "bottom_cabinet", "664c64ea-765e-4be2-bc16-9713e6ba276c": "table", "644b7f76-eb3e-49c8-ad9c-810fc403ea52": "sofa_chair", "1a1dbb8b-d272-49a9-b74f-73b3bf99b094": "shelf", "93d1c732-ba8f-49e1-abe8-8bbe87bc41bd": "ceiling_lamp", "4598aaaa-7122-4b20-9763-da1cd0997329": "ceiling_lamp", "4cf7c692-d5bf-326e-8e75-47d726b1c865": "table", "58577da3-9cb8-41ae-8d3e-ed7e7cf0e306": "bed", "a752d0d3-e753-4196-bd26-e028de65ae9d": "stool", "7f4a80e4-2e8b-4485-91eb-5ab8b99f8095": "bottom_cabinet", "4899225c-21f3-4c8b-b907-7bb878d6a8bc": "sofa", "ea552054-6599-47ba-84a7-a9c5416a764f": "chair", "11db9fbe-c9a6-4a9d-a951-ddea8b459fcb": "bottom_cabinet", "108d44d9-1ce0-4dcd-86f3-5f6e69c4c879": "chair", "63c51142-146b-44ee-8c2f-1fe762aa8f6f": "bottom_cabinet", "f32fb422-a6ea-4bbc-b0f7-6df331725485": "bottom_cabinet", "43af331b-5743-38a3-a6f0-dd927378bcbb": "sofa_chair", "652bb0dd-0361-48ef-aee8-1941dec0f29e": "bottom_cabinet", "0290a7c0-9ef3-4cb9-bdce-229f8d57c80d": "bottom_cabinet", "01801792-d4b6-4219-902b-8d203e297c70": "sofa", "45714d27-1778-4275-badf-6c375d65191c": "coffee_table", "53a6282c-e891-4b61-8892-8a821385facf": "bottom_cabinet", "0033e020-460c-4990-a2d2-cfe223a2f5a0": "bottom_cabinet", "f12b7d59-8248-4a7a-b7a7-7f5ef547a61f": "shelf", "87d6652f-2222-4926-a3b8-d466ac491695": "sofa", "55e2f7b1-ed80-4c8f-8b96-7053f214df4c": "sofa", "bac83e55-32c4-4c64-bc32-0f880f4ec0b4": "bottom_cabinet", "64baf4f3-af6a-43ad-a2d9-2c6734d32bb2": "ceiling_lamp", "49be972d-8cd9-3b6f-b3b5-6dce58777e2c": "chair", "10242084-1eda-4e21-a12e-16649a5c2ac3": "chair", "056d9c19-ddb8-45d0-bc22-f9c4f0b41962": "bottom_cabinet", "1ca7efee-b4dc-4337-8868-ce8a0e69143b": "shelf", "2aee7bfa-1696-44be-bf4f-36b2872e95b8": "bottom_cabinet", "30c70214-5e27-455e-96bb-c55f9f4d8649": "shelf", "87bf4db6-7346-4891-99a4-d72b2252ec20": "table", "62abafd7-38cc-4105-a3be-f32cbe6a5788": "bed", "924b6afc-0779-4789-8824-fd3cd5151a08": "bottom_cabinet", "04c00959-e681-40f3-9da4-159a4e298b09": "sofa", "7b34a8cf-fb97-435a-9094-85f31e00a485": "sofa", "ba3e6b84-bb8f-4df8-8416-8c6779854697": "sofa_chair", "c39289a4-8aed-40e9-945b-8069554c9ae7": "coffee_table", "7ff6dcfd-71c2-4980-89f5-509aa2a3cebe": "bottom_cabinet", "42721523-257d-40ce-abc1-27122725187e": "coffee_table", "23477dce-20f9-340e-bebf-3dfaeb71b6b4": "chair", "721a0603-b263-4ccf-ac30-49de51a4deea": "stool", "d0bc1c47-f480-49b3-86ec-f4cd89e04db7": "coffee_table", "b3714b1c-2e82-4a1c-bbee-40dda6d32ab8": "chair", "8cd3b0e4-7d94-4d96-ac01-1d01b02bec68": "bottom_cabinet", "562aeaf7-0ce8-46e8-9e66-bdef4446468a": "sofa", "9e1467f6-149a-4ba7-9c00-f728aaf0a562": "shelf", "03c65523-3de4-4b8e-ba15-129462e9be78": "sofa", "0e8384f8-476a-4985-9c32-4867b4b0c9a8": "sofa", "71eb55bb-b50f-436e-aba5-a25504574d49": "bed", "af8f84de-bb38-49e0-9e39-ffd0511dd65b": "bottom_cabinet", "9e3696ac-5f81-3648-b111-355bf479b22a": "table", "045189ef-3be4-45eb-b7aa-faf30fd51caf": "shelf", "914826ae-326b-3240-b7cf-cd6062d05486": "table", "a678ec1b-8118-40fa-b77e-fbf761b6308f": "coffee_table", "64e15b3e-dc58-40cd-81fb-9c1804efba9d": "bed", "78504e19-ad46-4e9e-8d53-a5cc90d8e2f2": "chair", "6615bbd5-025d-45a2-9489-fed57d044001": "coffee_table", "82458f2b-36fe-4965-bfe8-9137696a746a": "bottom_cabinet", "5241f446-d3b2-43c3-91d3-9ad5a433ddcb": "bed", "bf9ea360-1965-4f09-a8e3-59687062fe27": "sofa", "6b302e11-00f1-498b-9041-3e8c5102251f": "sofa", "8b9b7fb2-a5e9-4705-b323-e5666c5bd80e": "sofa", "0157cd98-fa1d-4009-b7d6-85fbc44a6eba": "coffee_table", "b066e7e5-898f-4f61-997b-db8481f24202": "coffee_table", "ea330ccf-5cb9-4633-9123-b926715d37f9": "shelf", "8c7e4130-d96b-4852-97ef-51aa09bcdc7f": "coffee_table", "de955cf5-7a9f-434f-a613-c5f4705c8918": "sofa", "553f8389-1d95-4507-b5a6-7bf5c94cb691": "coffee_table", "04de61d6-79b0-42d9-9695-161b818317ce": "shelf", "6e9b0617-2c4a-43c5-91d7-87e985624e88": "chair", "c94f2f76-de6c-450b-9d03-d0bf599876fb": "coffee_table", "0af6a867-3a3b-4c88-b641-1d94cf0bef37": "coffee_table", "26389983-4b56-410c-a2f8-b28ed3344279": "ceiling_lamp", "4f247470-b328-4044-aa05-4288d8e6e3c5": "bottom_cabinet", "506c7892-3049-4a53-ae3d-c41bad0700e8": "bottom_cabinet", "bb14e327-3e81-413c-a6f0-dc0e27319436": "sofa", "f47a5037-f22c-4447-9389-069ec32b7fe3": "sofa", "54f02c07-bd28-4469-9806-647b8296366d": "sofa", "2be2d0ea-23f7-4955-a433-e3d2c6a4c55b": "bottom_cabinet", "81e713a1-6c5d-4498-b064-044e0a80fd04": "coffee_table", "80a2a2a7-bf33-40c6-a4ea-10636436e704": "bed", "70208dde-87e2-499c-9ee3-454a5ce97d2a": "sofa", "15560c80-c144-49be-82f8-85bb07ffec5c": "bottom_cabinet", "a4480408-4192-48a0-bff7-c3bc0efa25d8": "ceiling_lamp", "16b696a0-c570-4796-b43b-a8eae0892ab2": "sofa_chair", "4ee9bfc1-e31a-4958-b855-17b744cbdcdc": "bed", "f551e961-dce8-4f30-bef5-a66758439490": "coffee_table", "1bbfca9c-44d4-46c3-9dfa-0aa6d385ba24": "chair", "46b28a7c-2681-42bd-9b22-54be8a2f2d0e": "sofa", "05c8718d-3a0e-4063-a40d-977b36075e30": "bottom_cabinet", "64f9de49-a714-43e5-9e0c-30d9dc4c1189": "sofa", "4a6cd5c8-7cea-4bdb-bb20-b769147b2f98": "coffee_table", "ef10c201-6626-4df2-b62c-8527fb9f594c": "sofa", "cdf2b057-eaba-454f-afe2-e32d5634e700": "coffee_table", "ba78f854-8100-48cb-904b-e6dc85a6377f": "coffee_table", "2ca37f42-1da9-4906-9862-8cfcfbc114eb": "table", "712b4d3c-cabb-4c5c-90d2-6222563786e8": "table", "7a4091f8-71ff-4897-a703-a57af1d1f318": "shelf", "6d68928b-d9a7-4ef7-83ed-e863a194d5cf": "chair", "8e2abcdb-8381-45e5-b18a-cdb087459b33": "sofa", "6a078309-118f-45e8-83a8-02f4425a712c": "shelf", "2e0c52c6-5abd-4c76-87a2-8112e3fc7e14": "sofa_chair", "c4256f70-bce0-43b1-bfd4-e9ba51096b29": "shelf", "8140c6f6-ebb8-4dcd-9e2e-1a1c63965e7e": "coffee_table", "b4e96b08-b603-4021-8730-13a70cbb10d0": "ceiling_lamp", "70a8fbee-b7d5-4ccf-85fb-5cc24f72bd0b": "bed", "7b3b539e-2acb-4007-81e0-da88a7eaba78": "sofa_chair", "648dbb1e-ae6c-40c1-850e-1589e5c9e170": "bottom_cabinet", "32c8023c-17e8-4148-9fbf-8bd0c49c0734": "ceiling_lamp", "cbd795e4-b7cd-46a7-808e-0dc74c669657": "ceiling_lamp", "04039de7-100a-4be6-b17e-1f7bd6fe37f7": "sofa_chair", "63c6f1ac-fa9c-493a-a43d-7c4b9d8dcffa": "bottom_cabinet", "1b2c2528-9456-3717-8fa3-8a46e97f74d3": "chair", "f9c3dafd-79ea-46fa-92a1-9bf3f876ea49": "coffee_table", "2810c800-206d-39fa-9ff3-664dccb70e4a": "table", "6d6f066e-be4f-43b6-a0b1-09ae6eea1373": "chair", "05e1a765-ab62-49c0-a40e-adf7ede590c4": "bed", "63c2f8e2-08fb-41cb-bbcb-7e11ef5574ee": "shelf", "b83731c6-687a-4642-89a3-05d625bf3023": "coffee_table", "ddad4bf2-589b-491a-aa4e-012081799f99": "stool", "1a9c7a98-758b-4faf-aa16-33f821380f98": "sofa_chair", "fc061946-7655-4d0a-8d46-bc779a3d49e3": "table", "8bfa48ae-42e9-4e5d-b151-e6acfe3cde0c": "ceiling_lamp", "8ee760c1-7955-4a84-9002-cbfe92e64207": "table", "4aa3f413-6a35-4866-8094-9757eeaafc66": "bottom_cabinet", "4d0e2ae4-4ff5-45db-a651-4f376890b6c0": "bed", "4914ae4b-67d4-4af4-bbfc-765ae88e14ae": "chair", "2777ee3b-36c2-3887-8723-f3e5aa7d2363": "sofa_chair", "849fb21c-0340-4c5f-8a4a-18d0f765efc9": "stool", "95c574a9-21c9-4f4b-b750-fc752e3e29c2": "sofa_chair", "c37fbe8d-cac6-4be0-b61f-3fe38d39cb31": "coffee_table", "87bf20d6-68b8-46c7-84ea-884880c10d8d": "bottom_cabinet", "2d22eef5-ddbd-47f9-9125-69d4678bfeb5": "table", "ed7b75f2-72e2-40c1-ba9b-a953df554904": "coffee_table", "0c41fffe-530c-4f06-93a0-5eaf017b042b": "sofa", "5fd0c725-0688-44c9-aea3-e867243818a3": "sofa_chair", "a60594f0-f49e-40f9-9dc1-f48aa35c0404": "coffee_table", "3fc32677-0bf0-4519-965c-8165eb15e0af": "chair", "cae94577-c0d7-48df-8721-ae6bcd0a5357": "sofa", "658695eb-7932-41c2-9e58-c635fa04686f": "shelf", "6f77a27e-a254-4350-ad98-6d2d3dc131e5": "sofa", "c54f825b-9305-30bb-b6bb-5bd2efde4038": "table", "5f5c6f4b-c7bf-4ea8-a287-112d4d843ad2": "sofa", "12308367-3578-4bc8-8c65-d54688e5e301": "sofa", "d12201e8-4ad6-4833-b225-e788a51f561c": "coffee_table", "fa9229b4-7d48-40f2-adef-ceccab8697f5": "bottom_cabinet", "2f06bfa9-9b25-4800-b7f8-fda04a4f4c6d": "sofa_chair", "f8ad78fa-83a4-4585-9e6f-540ecf40cfb7": "bottom_cabinet", "5093bc68-5db7-44e3-9ecd-83a593d8731a": "ceiling_lamp", "f6b31c8f-c0fa-34db-b9d1-4594003e28bf": "table", "ea4e06f5-939f-47ff-9df2-be5fdedf5717": "coffee_table", "0bc089e6-ce36-45ae-9a4a-cf13f96c0d37": "shelf", "6d0fc0f4-a9f5-4d24-afd7-f6059045db75": "shelf", "85452d41-e609-365d-96f9-2fc5ef7e804b": "sofa", "e88e5f90-ff30-4b83-98a8-366c041f1b22": "shelf", "e9986da3-b386-4446-81cb-fe9828d3c37f": "coffee_table", "956a28f5-436a-4098-b436-bb430a04b67a": "chair", "48269298-e819-4a68-87e8-1594f98de533": "ceiling_lamp", "c72614b4-2669-42c1-8793-2a8e11d399f6": "stool", "56fc3480-9263-4260-9a29-72df39932e26": "bottom_cabinet", "4473a28b-7d5e-4145-91a9-804c2968c667": "bottom_cabinet", "2027ffde-a7af-419a-8421-224c03e656d6": "bed", "3104c91a-9eed-4c61-a279-3c2b28ae2e77": "ceiling_lamp", "4d19c8b9-bbf9-4d51-83c6-3c7d726163f7": "sofa_chair", "9a9a3f9d-e59c-4597-8882-26e0c803146a": "bed", "1c092622-dd26-46eb-ae80-8b43b78454a5": "sofa", "27dacc0c-3e14-4d93-bb5c-aa54791e4cff": "bottom_cabinet", "bc7be068-10c6-4c5e-9525-ee826864b7f2": "coffee_table", "53f1bd2c-1738-42b2-a19f-fa112f09703f": "shelf", "5c8ae2ec-70ee-3975-b722-e30e7174c3c6": "sofa", "20c06fcb-1f85-4e6a-b4da-99683659d821": "sofa", "1e48aeab-e7da-4928-ab26-0122ebfc65b0": "sofa", "5dea092e-2aea-4345-b745-0246825f3aa5": "bed", "4d471e2d-7195-4646-8628-f9ce4e8448e4": "ceiling_lamp", "ab0e2b77-db12-415f-a706-9aa4319365f0": "shelf", "e5ff3f38-b4f1-4329-9d77-228f971113a1": "chair", "07624dbf-6451-4973-bfce-3a343cb80f38": "table", "4b511d2d-2604-47d4-9b8b-ee9cc5981502": "sofa_chair", "dc133c3a-d84e-4a5c-9718-010bbcebf30b": "sofa", "8b348c4a-7c31-4196-8b26-5e083f2cd2be": "chair", "7c58c5a2-ca12-4b62-a4f0-012ffb0aaa55": "bed", "3631efbf-3c73-4eab-bf83-e7faff47be3a": "table", "21fe6489-540f-475f-b7f9-7047569dcd75": "sofa_chair", "5e88e192-4d7e-4881-9565-7ad8da152462": "sofa", "1d05782e-1eb9-4dcf-b711-bb0dad64e7ef": "chair", "3968ef34-111b-447c-b194-a1ce0281fd45": "coffee_table", "0df8ebe6-1dc4-45d6-83fb-fd5150a54bf8": "shelf", "83d75bac-2a13-4680-84d6-3eaa2ccada03": "sofa_chair", "4fa524ac-8e67-44f6-b225-fb1345de6b37": "coffee_table", "011a0370-fe70-404e-b61c-15057a3a98c5": "bottom_cabinet", "1db5db4e-9e78-4fa2-938f-88c840b8e229": "stool", "5b2b3f48-40ab-494d-b230-3d4c62a0a801": "sofa_chair", "42aed001-5c5f-4a41-b731-1d3dfa58cbb7": "bed", "59ae681f-7af2-44c0-ab35-a087121c4d09": "sofa", "23d30aad-270e-4195-b261-bf4547ffb68a": "coffee_table", "82545c5e-ab4d-4a95-9942-9cf0bf65e00f": "sofa", "ec05137c-d110-4a20-9a45-f78f3c1d0eb4": "chair", "592a435f-f078-31cb-a31c-116010194a42": "bottom_cabinet", "77348b64-e8f9-421c-8986-e3dbede8b470": "bottom_cabinet", "259867a7-e630-411c-9496-09b655edabeb": "shelf", "54259cdf-cdd2-412e-b55c-50278de29519": "bottom_cabinet", "4e3e92cd-bab7-4295-a0d8-0e1586e33c85": "bottom_cabinet", "4d37c80a-2fe5-409b-a3b9-13f6aa68aa41": "sofa", "7ed7b74e-4db4-3872-ab7f-282b2b43c6bb": "chair", "2b8d4d31-5667-43b1-bb0a-a2dfda2c3212": "bottom_cabinet", "7204b5f7-8e5c-3109-b2d7-3ab9ad647463": "table", "04753da7-1d93-4857-8b7f-51c50fe95568": "chair", "cab1a6c3-27ae-4914-952f-0c258556b2f0": "sofa", "20e62a42-7efa-48cc-8afc-daa96a1b80f4": "bottom_cabinet", "37aaf01b-2a04-4c02-9b15-322c848877d0": "coffee_table", "a4b8128b-a453-47d4-a0da-ce48c1397087": "sofa", "84e1d37e-4eff-4865-8fe2-03cb948ec222": "table", "7d54ef72-bdbc-4131-a8ac-d39ade5e3407": "chair", "7eaaa405-12bf-4800-9931-940e3be49943": "sofa_chair", "0050f47f-0d3e-46c7-8a0d-47a16b524e96": "table", "edd9e55f-879e-4fc5-8f35-8c6e20a80e34": "ceiling_lamp", "0bd81869-830e-4673-bfeb-e4d1e5c60302": "chair", "92088ec8-a0cc-488f-97c2-852b8ff9a782": "coffee_table", "5157b498-3cdf-4513-bd97-237358b1979e": "chair", "64708a5f-4d9a-49c9-9725-2cf1f6a96cfb": "bottom_cabinet", "1b626ff2-bc4d-3f08-834b-cd739bba2251": "sofa_chair", "993edc54-006e-433f-a999-77d2f7f1b4ee": "sofa", "4ebaa2e6-fad7-4746-8494-a3721b5d5df4": "bed", "2927e373-26b6-4530-9048-be1c82e4ad83": "sofa_chair", "27864eba-2f73-49e5-b95f-e0cf5f9178f0": "bottom_cabinet", "22a28449-cef2-4929-a18c-15f8c82d678c": "chair", "6193677a-c636-4e33-8ad8-b9b035ae82aa": "sofa", "67740e98-c6ad-439a-afa4-57589a9e6055": "shelf", "6c95f458-b1c1-37f5-ba84-bf96ddcf6656": "chair", "4332abb5-b950-4763-8687-5f66a6e1d68b": "coffee_table", "d66678d0-a604-4a40-b60f-37f763e9e163": "sofa", "ae787d13-f9f0-46ef-9f4c-79e029f5a609": "bottom_cabinet", "5314eb25-9c92-49ad-905e-79ca90ef8747": "bed", "74fda869-f1a6-4708-babf-15c1358cd10a": "bed", "05faf43b-c747-468c-a863-4a00b8761b9d": "coffee_table", "2ee03aff-a2b7-4069-ad5c-dc7e5c75461a": "bottom_cabinet", "05d628ef-e510-4f6a-8862-ade7405dd3f4": "bottom_cabinet", "60b72399-743b-49b9-b31f-6b37e77d8f46": "bottom_cabinet", "134a9a15-b3a3-4bdc-a4d5-bd9eaba14313": "ceiling_lamp", "54026ce7-8499-4ff6-b088-fb90028ccae6": "ceiling_lamp", "5f784fa2-9336-4233-85f4-25746ce810c3": "bed", "394c5ecc-1975-4229-8843-6712d06d16cb": "coffee_table", "d1abbc13-d45b-4ac5-b4c5-7945871b1021": "ceiling_lamp", "7d2d82d0-ad8a-4fef-9288-8e763a29f50f": "ceiling_lamp", "1ab8d670-0712-4340-aa5c-b94448466ac0": "bottom_cabinet", "019ecfc9-500d-45b4-869d-958f41905ba2": "chair", "e47ba442-11e4-4016-b9cf-6fc807946d0e": "coffee_table", "d4f653c0-790c-41c0-817f-fa62dbd3a75d": "shelf", "68243d9c-465c-44d7-89d6-1e9cefca30cf": "bed", "48837580-2014-4595-ae78-e655724d88d9": "table", "3dea3ae3-dd3e-4227-9e0d-9099db5f21d7": "coffee_table", "18f5291b-1d9c-4c2c-adc7-1c3651f3f243": "stool", "957eeddc-24c0-4d57-b8e4-7a5ab3d7bd85": "table", "6c1e192e-2ab0-4f7f-a619-1b78de97c002": "ceiling_lamp", "aef18858-1e3f-49f4-9ef0-427b098bc1d7": "table", "da1bcea3-821a-460a-85ac-92385cd1a250": "coffee_table", "068bc916-69aa-4153-ac1f-8cb0a00e4cde": "bed", "73dfa548-b7af-4b1c-85e6-53769ccf9bff": "ceiling_lamp", "a1bcd80e-5fa3-4bf0-b306-b032aec5dafa": "sofa_chair", "3fac47c3-18a1-46c7-aaf1-d6d1af0ae715": "table", "501cf887-31e0-4607-aab6-9feb8da2adb6": "bed", "09a8c6e2-eb7f-4ead-bc31-9422d45e47dc": "shelf", "3c8da5f2-c380-40d1-90e8-e1c38fd6395e": "sofa", "9f6db83e-bdfb-4526-86a9-7d241cce4ba5": "chair", "fa4abf12-84e1-4292-ab38-613905b360ef": "stool", "6a13999b-89da-49ca-8ee3-44658668aef6": "coffee_table", "08687b7c-bec8-449e-8d51-846bdd587478": "sofa", "c46211a7-2f21-4bed-95ed-30d39ad2a59d": "bottom_cabinet", "c763bb6a-a776-457e-aa29-10177907c0ce": "shelf", "e467fb5e-c833-4fe3-8f81-b3be50ce7176": "stool", "d7817105-3471-4fb8-be9c-22077d239cbe": "coffee_table", "291e9524-1c36-485a-b489-ad83000b4289": "sofa", "f5fb7347-f919-439a-98d1-dbeeb04f284b": "sofa", "b1833d8e-5de3-4f85-9eb6-42b4767c53af": "ceiling_lamp", "10afddc0-0b42-335d-8459-c8c6442aac7a": "table", "692dd94f-c2ec-4d55-a373-1b4208b9d36b": "bed", "6a3affc1-5644-4dc4-b697-a4222603f26f": "sofa_chair", "4cf03f39-f074-4297-8b88-607687b18118": "coffee_table", "e22beaba-5023-486c-9dc3-b98cc67a9e42": "coffee_table", "298a4896-2ece-4560-bd9a-21bbb85f677d": "shelf", "0e8228fe-062e-4e92-af46-f3186f77f9f0": "ceiling_lamp", "639d5abd-8307-44b1-b054-885caa95c256": "bed", "7b277dfe-08d8-45aa-b6f7-85fb8e825207": "shelf", "23552c13-9419-4d5d-8b55-104407293459": "ceiling_lamp", "1fa4b862-ed44-4523-a3cc-67956eb18bd0": "chair", "8989e720-bee4-4b97-9c71-a5e26f3f47f9": "coffee_table", "b9f9eacd-5b89-45b7-8250-fa6493b1e41d": "coffee_table", "e2d97410-3632-439d-9366-b532498f6cdf": "sofa_chair", "63f0d14d-42f2-4560-88db-d431b515f9e6": "sofa", "7889e751-e61a-4527-89e7-dc3eec39c738": "bed", "7d8422a6-aa67-40d1-964e-24dd90d851ea": "sofa", "5496da12-d91e-474b-954e-a9411e832aef": "sofa", "1c046a6a-3950-4bda-bf3b-ab7ab0bdc35d": "ceiling_lamp", "951c6806-3556-4116-887d-6d185b3d84b0": "sofa", "8366363e-ed57-47c2-9362-f4dc82c11b69": "bed", "81c18b1e-9503-457d-958b-123c0607f588": "bed", "70844e01-8244-405c-a237-ca0da1dfa2c1": "coffee_table", "2c3d633b-547f-34a9-b5a9-dda475e1cb00": "shelf", "2d382c25-d064-33e9-bf86-0398d169c95a": "sofa", "bcb9884d-d032-40df-b2e1-c2bb467a02e8": "bed", "f91f6539-4cc0-42a0-ab17-751b26e5b886": "table", "08709486-5aed-4480-bc48-0e7f4273ba1f": "sofa", "52eaf45c-77a5-40b3-8d96-321164fe7d5b": "table", "56b1b9fd-78a1-40d7-b20b-97b5c70f289e": "bed", "a5e064f6-2ea1-4465-9fac-5d694f3a7176": "ceiling_lamp", "475448af-59ea-4c2f-aa3b-9461a10f54d9": "table", "2c8c5b92-3421-4a9f-85e3-46683bef40cb": "chair", "280daff8-2fa7-4043-a7ea-b56785a535c3": "table", "68f5f5b2-6d6f-438f-9f3d-661881db6ceb": "table", "4b3d0f53-1933-4b10-a788-c322d61c565e": "chair", "206f88c4-68b7-4ecf-ba15-8bf296209515": "bottom_cabinet", "7d6b5e50-68f5-47aa-b0b7-1b5604f2904b": "chair", "3e10b179-ccad-4c92-9ebf-e58939715cf5": "sofa", "753e1cc6-dcf4-48c2-8ec7-c971580d08d9": "sofa", "ddeaac35-bfba-4cdf-96fe-c3ea9436a386": "sofa", "0dc269d5-6c25-4165-ba61-87c35149af5e": "bottom_cabinet", "33f93f0d-5aaf-4e85-8962-ccd7668f882c": "sofa", "64056d39-09c8-394a-8e16-1288bc8e8d68": "bottom_cabinet", "e69f4613-5458-458f-a004-db3fb1706bad": "coffee_table", "21e4d467-a268-48d7-8ae7-8d9e7478ee99": "coffee_table", "bf46a151-d264-40bf-9f84-b6f71242e068": "coffee_table", "4a4ea2f0-361f-4cfb-9c07-5605286acd58": "shelf", "4382d39b-30a7-49b9-addc-ffa64f93e02b": "bed", "81e08055-04c3-40f2-b0f6-611b637b55de": "table", "bd2a6793-4c84-49a6-9311-3cc71701dccc": "ceiling_lamp", "0ed0b5e6-ffce-4401-92f7-2821b244a872": "coffee_table", "50335b74-1e2d-45ec-a2ee-d36964e40704": "bottom_cabinet", "7bb8104c-3d57-4514-a0b1-a1a0fd209e9b": "shelf", "3f7f94cd-11f7-45e5-8488-3c9e028b220b": "chair", "c1b79b0f-06a8-404e-9463-e22c10409e0b": "sofa_chair", "7f73e93b-a483-4a4a-ad50-baae1211c4b5": "sofa_chair", "144f2bb1-0f02-4d1c-9627-fae53fc75406": "sofa", "04ae2dc3-d672-4394-b494-fed626c7a06b": "sofa", "538c5543-06eb-37ad-a3ec-e48a92b806e0": "sofa", "a7409a8f-6e55-4e04-9c67-6e4d39fe0989": "coffee_table", "238d3e68-90aa-49b0-a361-06ad72932347": "bottom_cabinet", "5b3e16bc-ca6a-4090-a5b4-0bb7e0930f0a": "coffee_table", "c00118d5-47d8-4d63-9e76-b4461bc45959": "coffee_table", "71049fce-e754-474e-9e88-7e0c5eb5fc50": "bed", "6be6f94b-80d2-4699-83c3-7084c60b12fc": "bed", "088f5988-b113-47fb-b2a3-48897de957d9": "chair", "2c5e2e87-080f-47e6-872a-701278ad629e": "bed", "38694816-1fc3-4534-80cc-ac46abc102cd": "coffee_table", "52820d95-f870-4970-88a1-de260adb2f1f": "bed", "42bbbf89-145b-4b03-ae28-b9e0c5335b33": "bed", "5d70443b-93c6-413e-9e8f-c6288646992e": "table", "33660f10-c70a-465e-90d5-8cbcb83b10e4": "ceiling_lamp", "b7d85632-59ac-4529-b214-996870c894d9": "coffee_table", "29c5de3d-a397-357f-90e3-47690adf12c1": "chair", "12da781d-21d7-4f02-964b-23d5b47497e2": "bed", "1364c692-6365-4fdd-9bb2-dc250d0a82da": "chair", "58c7887b-bf99-4978-aaf1-21bdc9295cbf": "bottom_cabinet", "10a41aea-5a1f-4780-9699-5aed914a904e": "bed", "438be273-d969-4ce3-9fa4-3c9dc75db911": "table", "612c36f1-f3cc-47e6-883f-5eda1c0a36c7": "bottom_cabinet", "2c8c823c-b16a-3310-b8c0-9d851a92e275": "chair", "6e3f4735-16d4-469c-bfe2-f37dfe776aba": "table", "5421c4f5-2dff-4771-baa7-6f87450ae0df": "chair", "b68e2e36-6aad-3053-8113-5edbc4ffd075": "shelf", "08dcb9d0-8a66-3edc-874b-3f437cc45742": "table", "aa4d4bfb-9577-423f-a643-828728a0d7f3": "sofa", "3f8ecaf2-c627-4f59-a521-24923db172c9": "coffee_table", "10339a05-cf66-4693-8114-b8610b3b8f32": "ceiling_lamp", "18cf9b28-c807-4b3d-8bc9-c18890235426": "bottom_cabinet", "9df49643-5294-4b5b-8de3-2550bd59fcf9": "chair", "f2bf96f7-1fdd-4ee3-93dc-60f5d027a95b": "bottom_cabinet", "aa9527e0-f808-45ba-bd47-76c8fab68431": "coffee_table", "c6293606-b642-455e-890d-525a4744f8f3": "bottom_cabinet", "a3162ce6-b1ef-4f8e-8184-47d5014b2369": "ceiling_lamp", "1ee79aac-3f9e-42be-985a-48809910a308": "chair", "dac57b28-ac2e-48bf-a7fe-a2848bbe0804": "sofa", "85fe41e5-2a19-4408-8724-eec2fb304450": "shelf", "ff62d9c3-1813-406a-88c2-427eaaee4578": "bottom_cabinet", "fd169514-203e-4a59-b4d0-4ebf8b4aa7b0": "sofa", "4a2df868-c5f4-4a55-94b8-c28408b710e6": "sofa", "0ebbc981-f46b-4c1f-8820-c1bf4d9877bb": "coffee_table", "9dd83646-2a94-411b-bb32-d50e1acbbddf": "bottom_cabinet", "702f3525-ef0c-4726-aa02-399c2fcf284e": "sofa", "1fe97184-a26a-42ee-b5ca-2ac16ef6530a": "bed", "cae0a133-5779-471f-ba3e-e06b47d57971": "shelf", "2b08bc6a-924c-3e45-bd91-2ba5543fa3d1": "chair", "903efac5-68d2-4f8b-920a-cfdcd5321855": "sofa", "df988c03-2697-411b-be30-0193fb3df1d8": "sofa", "57666a38-d501-4619-bfc8-09840a8d28d9": "stool", "95f44043-569b-41fe-8d0d-933f09a63c61": "bottom_cabinet", "070f1e42-ca80-4ad3-ab24-9a89d79e802e": "shelf", "819fc8f0-2803-4508-afb9-66654a847e49": "shelf", "afb47456-1325-4e40-9d0a-df10b9596f5f": "coffee_table", "d5299ef5-0586-4d33-9834-51d02963f50a": "coffee_table", "4e797c9e-3b19-4ecd-af03-50b04806d079": "bed", "a6c790cb-a5ff-4a26-9e60-6eb236fbc509": "bottom_cabinet", "43e00824-21bd-45c1-a0bc-458da0df8981": "bed", "1f6d1921-414a-48bb-b69e-20ff6d8066e5": "bed", "7a9e335b-ff78-4965-88a1-9c2c78bed199": "bed", "06252e70-567f-4cc4-9056-0733ffed2c70": "ceiling_lamp", "253c8192-6266-41eb-aede-abaf5474e928": "sofa", "ffb1e3fb-7198-4dca-b72b-7f733c4fd07c": "stool", "652fadac-5ee4-4a5f-afad-b3df8568f6b4": "chair", "77af486f-a084-41a8-ac7b-58fc6d04acc1": "sofa_chair", "eb1589a6-9137-4c9b-bc13-6d4db395bec2": "table", "abc27de3-9f43-441a-a6a6-ec16ef13c6af": "ceiling_lamp", "56b9a175-9c88-36d6-a030-e1b948fdd102": "chair", "b256ca34-cf53-49d5-a6cf-27952a9c4f89": "bed", "e7c3f96b-6622-4736-94dd-090abeb5d842": "sofa_chair", "800b368e-4b84-4b28-94ce-b831dfece51b": "bed", "d7fd3c67-1a91-466b-a955-8760de8e1575": "shelf", "2dffed35-f6e7-4c4d-ae43-5a3a2fdb82d3": "sofa", "bce6127f-3fb1-44c8-86a1-cc2379fe6869": "sofa", "105e7d2a-0dee-4970-b963-7e2fa121660c": "bottom_cabinet", "7e568365-a82d-418d-a884-ae94470e24f3": "sofa", "56543761-9ef8-34c7-84ad-32c8bf20790f": "bottom_cabinet", "58b85ba6-023b-4698-b9b9-6f62ccedba23": "stool", "0ac22aca-d4f6-4bec-afca-ae0462c84089": "sofa", "8482b5f2-3645-47ea-80be-048633104da7": "coffee_table", "5e54293a-6a97-3c7e-97df-c488ad146e6f": "sofa", "572e6ad5-062a-4044-be27-aaf5956e16bd": "bed", "f9c74bb2-fb6c-43dd-8bf6-c2ff2ad96b25": "coffee_table", "cc95cd08-d35d-47be-b810-4846d63f7a00": "bottom_cabinet", "829f7c4f-2381-476d-9ba1-8b09110428ba": "ceiling_lamp", "b7cc98f0-b4f1-4488-98d1-e3814921627d": "sofa", "8173ca3a-e7f6-48ff-90f1-3b4237205dca": "bed", "c239ca88-897d-4e97-8773-3c01bb87b4f6": "coffee_table", "aef4f90c-6ee3-493e-8b08-6f64a94986e4": "ceiling_lamp", "50c338dc-2d1a-4ed5-8435-5352759293d9": "ceiling_lamp", "2fb6e466-5020-36b4-825a-7c11d1a2ff90": "chair", "e0ee334f-2d46-49d5-8d76-270715ec8cbf": "bottom_cabinet", "0b9f1125-92d6-4be2-9503-22200d4c7e16": "sofa", "86cb667c-e480-4e03-97e0-3af491759849": "ceiling_lamp", "25e4c2af-eeac-4b43-833a-ffe17c770801": "bed", "9629284f-c53d-40cd-8820-37402aaad8b6": "bottom_cabinet", "61934241-50cf-4435-8842-e2a4aadd800f": "coffee_table", "f8ce32dc-cae4-407f-b0f3-c69a9a16ee2b": "coffee_table", "13681311-2e8d-3a43-983f-e2b1838c3c75": "chair", "05984bcb-a6bb-4fd4-ab8c-780edab8aa2f": "sofa", "a41dc8ba-827b-4f3a-98d9-ad5f1f7618a0": "sofa", "58abd93d-8641-4af9-bfb6-b46881feb4a9": "bottom_cabinet", "4c0af339-2f2e-407c-8c4b-67fb1421efef": "bottom_cabinet", "1a381855-0a6b-4283-981c-633d566f525c": "sofa", "51b46396-3d0d-466c-9fae-ffb0a72386b1": "coffee_table", "4c8943cc-85a2-4bfb-a485-24bb37887b39": "bed", "aa976de0-2cf8-4a8a-b86d-eec52e402ea6": "coffee_table", "7a852453-1f35-4240-a455-3caa50a26569": "bottom_cabinet", "71685264-4807-49f5-9108-1d5a5e2bacec": "bed", "75fef869-56cf-41f3-b9c2-08a54d61acf0": "shelf", "83fa7bd3-074c-4697-b5f7-155775e86f3f": "bed", "24dc39b1-6673-47ed-9845-02947e8c60f9": "bottom_cabinet", "4b59aaf8-c00a-4c78-94ae-bc9e26c98696": "ceiling_lamp", "5b664e99-8cf3-48b7-8ed5-e35d43c12218": "chair", "28e4596d-4bba-465a-bf1c-b5182933bd29": "bottom_cabinet", "621d2f3f-b474-473f-a994-13f3de8a9769": "sofa", "21da9347-2b4a-4847-9c0d-d7142a4b9ac6": "bottom_cabinet", "b277ab71-687d-4dff-a97f-802fa248d056": "sofa", "79d5847d-6572-4912-8091-70b8e88e3af7": "bottom_cabinet", "62c0ecae-e88b-424c-b2ce-fddf154f6e94": "sofa", "11aeb77c-8486-43ca-8da0-e152841f2e75": "bottom_cabinet", "567783b3-7da1-40f0-80ee-4c3ba42ff025": "ceiling_lamp", "e02cad87-efc1-4bd2-986d-0f021dfd6dae": "table", "014ab495-1a3d-38ab-92a3-e56480d2bc69": "chair", "1f9f2b26-846a-4e58-87e2-8a1ff1e5a749": "sofa_chair", "2d60ca8e-19c3-4a11-a397-53609c3eed67": "table", "9a967b96-b40c-486a-ba68-e6183fd07575": "bed", "5a3371b8-4e41-4097-9398-a14355ab3df7": "sofa", "1399ddc7-5db2-4ced-8fd0-9ceb7f5be05a": "sofa", "cedee9b5-19e6-44c3-8c2a-50ada13aa222": "ceiling_lamp", "dd577dff-09c1-472c-a578-8415767e983f": "bottom_cabinet", "984f4c0d-7dd9-4ac9-94f5-67880b00edbf": "ceiling_lamp", "25a0d740-14de-4aef-bf40-a736d2801236": "stool", "24fd57d5-c579-434b-b67f-49e0661d8660": "bottom_cabinet", "8a9c4084-e0ea-4c68-9963-1fba95bfeecb": "sofa", "66bf4221-66c9-4d37-a695-ab371621c70b": "bottom_cabinet", "af69165c-eead-4290-821e-e532868d695a": "bottom_cabinet", "9bb49d16-9ac1-4cea-9334-64a789a5e11f": "chair", "7a6bb036-06d5-4f58-ae34-453640a0a0af": "ceiling_lamp", "faca49e2-63d4-4c55-a677-7296fc243141": "stool", "28092c40-271a-40ab-9cfb-b96f1ce214fb": "chair", "431f10e9-12ee-43df-98af-7d5b0f280e07": "chair", "078faa0a-a8d6-49e6-a4c6-51866dc5580c": "sofa", "567d95bc-c4f3-43d9-bcfc-60139997d3dc": "sofa", "b89b2785-adc2-45a6-9989-7a7aa5342e65": "coffee_table", "c3fecd38-35ee-4f2e-b505-c3c72762cd60": "sofa_chair", "50818967-83c2-3033-9a60-f4416d197a96": "sofa_chair", "5eaf887c-3046-49b3-9210-721c372385a1": "coffee_table", "83f6d69a-eea1-4a23-ac16-1f8ac28db13f": "bed", "7e3b3636-76a6-433f-bddd-07d6355b2d7d": "bottom_cabinet", "b855ab60-1a2d-4c2a-8116-aa545873c12d": "chair", "4a6c8766-5641-4d4d-914b-822e409441a4": "shelf", "d547fc89-31f7-408c-aa99-30bb4ff9bdfc": "sofa", "3f6ba2ee-005d-40a5-8e47-3968a508023c": "table", "6a12b8a5-27d3-43de-b6be-6bec42b4c532": "sofa", "487ef6ec-64be-47f0-933e-50f1559c30dd": "shelf", "6d2fc776-acfe-4c1b-b6ce-f4df0925ce49": "bed", "827a7bf0-21fe-342d-ba2a-a29246d30d43": "table", "7210071b-c7e0-4d28-b920-fc6f1631c97e": "bed", "62aeb6c8-f523-3b23-8b02-1689a716567d": "table", "8c2777f7-45f2-4d64-bc33-c0cd6c23c096": "shelf", "cd740d8b-d97d-4230-91e1-b0e540a27c4d": "shelf", "a7ec7080-7972-4dfd-9ae4-9f29e5d2a4f1": "sofa", "7d33f5a0-593a-36dd-8574-e85c1e592b4b": "sofa", "62219907-ae06-457c-8ce0-d6625723ace8": "sofa_chair", "68a8d4a1-713b-4cfe-a841-bded448a740f": "table", "de279c41-9886-4948-bccc-d6bb7fc840c8": "bottom_cabinet", "a1935b55-efd5-4231-9e10-0aa97d13dfee": "bottom_cabinet", "72cddb5d-d8bb-4e45-b86f-dbb44374319b": "sofa", "4572daf6-d92f-4404-a396-c4c2014886b4": "ceiling_lamp", "0f5d0383-79b1-488b-8a9a-520e50271e7d": "stool", "9bdd6231-ae58-43a5-a994-6f450229ddf1": "shelf", "05be3726-480e-40c2-888b-74f4d56ede4a": "chair", "af24ea63-908b-403d-9568-7c01a680635b": "bottom_cabinet", "b73146ac-345e-40e7-a975-b90be799e224": "sofa", "1d74aa06-804f-47a8-9ca6-e2eb5f10a33e": "coffee_table", "1fb3390c-565a-4456-91fe-fc6baaf86006": "bottom_cabinet", "0b95bbad-ba8b-4a43-8636-e5c61cf3004b": "sofa", "08f57e4c-2eba-41c0-b9e0-c4a2202d4d6f": "sofa_chair", "a337b429-eee0-4aad-a325-ec8248688d1c": "shelf", "4602591c-785f-408d-bae3-10bc6bae9e6b": "bottom_cabinet", "2e47f4e8-246c-40e3-b093-4e6f254d816d": "bottom_cabinet", "a90e39a3-2d68-47a5-b685-b28fe16bd6f6": "ceiling_lamp", "2c7cd7d2-3d14-43f7-bd18-cf10271606bf": "bottom_cabinet", "252b7771-54c8-4e82-ae60-f5cd28ae2432": "chair", "e3ab95a5-68cc-4ff7-980a-233e4ed13281": "sofa", "02048b39-096a-454b-82d8-26a1c323b8ac": "sofa_chair", "84ed4a5a-516a-4294-bde2-9042c05c6394": "bed", "5eb94ce4-d385-3587-8d65-5547d30f4ccb": "sofa", "a5614b6b-248c-4121-8003-0e2a58244a94": "sofa", "f3a52dcb-b4c1-4682-a1ef-5b8387a7760a": "shelf", "860e8155-3bdb-470d-b373-d6df09805a15": "bottom_cabinet", "44f7c8c8-757e-4128-b55a-7b699cce2f58": "coffee_table", "4efeef4a-24a8-406e-a81f-e3b4557df07c": "chair", "1b1e5e3d-a83f-3c6d-b7be-80cc6a82b493": "stool", "830d1555-50e6-4e35-bed3-dd81d60b8705": "shelf", "e9e9c2e2-bbe0-4c64-8385-812faf4a0db2": "chair", "41e1128e-175d-4d87-b8df-5e387411c05e": "bottom_cabinet", "e688027c-7050-4a9c-a935-c58a5b9b8255": "coffee_table", "80150a25-7847-3f36-b852-d45924c5de8a": "table", "63312500-4559-4afb-ac52-53e06ca52b57": "table", "65af4bae-9bdc-42aa-8128-63147895a6af": "table", "d5c89b86-6e6e-4cb8-b546-b2f8db706f0e": "table", "ee44f81c-7f0a-442e-ab98-ba579b52e325": "table", "04c083bf-1bde-4e6a-a707-ac890b6ce79e": "bottom_cabinet", "0c4a2cda-3a5c-4ab8-b2e6-c82caf5e0a28": "bottom_cabinet", "979f2e7d-12b7-40f4-a57c-388907f78b27": "bottom_cabinet", "8b9ae842-02ce-42c3-828f-3c540741f1dd": "coffee_table", "4d3da550-b2a6-417c-a1d6-7c6a4d145a39": "bottom_cabinet", "73056f69-1900-4ca5-923b-d617ba47a927": "bed", "65818d86-b869-4830-817a-49fa9fffa682": "sofa_chair", "665a4a3d-8694-4c84-8ef2-14cab3a333ab": "bed", "bb7d33c1-b375-405d-856d-f2c29beb2464": "table", "1a3e0459-1d1f-43b9-9c9a-ae074c422e21": "chair", "23ac7095-4468-3a05-bd74-b44ebeee103a": "coffee_table", "4f029666-3e76-4840-adf6-0d7a9f7365ba": "coffee_table", "154f8b57-38f4-3548-9e11-67caf24eac0d": "chair", "3ecfe1f2-85b8-4e5b-a50c-9dcdb8fbe021": "ceiling_lamp", "30490b27-18f6-40c7-aee3-44269f52e883": "coffee_table", "28a8fde0-22ef-4175-9370-12ba922348aa": "bottom_cabinet", "141d89f0-4308-49b2-9869-f881c1fad4fe": "shelf", "5d0af923-e92d-3e8a-8c1f-60e85c4b4575": "sofa", "6932c8c3-92b8-4e89-a8bf-b8ce932ef574": "bed", "9f7fb75c-51da-4885-8a41-e0d8be78bce1": "bottom_cabinet", "ce55e912-6332-4249-a2c6-f686d8bda8c1": "sofa", "6b53784d-151d-4b34-abfd-753e8d128dc4": "table", "ca9d967b-0cec-4090-83e8-295203afe190": "bottom_cabinet", "61217f61-0333-4004-917f-3649920534e5": "sofa", "0e41d85a-4841-455a-80a7-7a6353e14718": "bed", "283af5a6-560c-4331-bb2a-a02fa8a4e5e2": "shelf", "15526c77-9da9-4acc-ad27-cfb674723db1": "stool", "d1f3b2a4-cfef-4bd0-8132-82527b15aef5": "bed", "b2e5a495-3ff6-4344-8394-299a42891da7": "ceiling_lamp", "0fce5e23-b2c2-49a2-8712-ea6a1af88dc6": "sofa", "0161bdab-2cb7-451f-ab1d-2e046c7229fd": "chair", "ec548a59-d27f-4917-906f-7548d9747a90": "stool", "1d6ad40a-6de1-41d1-bb0c-a4eb42063e88": "table", "0c453fd9-b14b-4c52-b8eb-42c06d5f3833": "sofa", "4c72d8a1-e3ba-401b-9031-0a7d06583b19": "bottom_cabinet", "5f3de668-976a-49d9-b8c8-f07d66229c9f": "shelf", "451061b5-1bc4-4089-812b-324844375801": "bed", "eb8ce439-cb02-4f7d-984b-9393cbe0822e": "bottom_cabinet", "7fae132e-87e9-4cd3-a357-b337a34e31ff": "bottom_cabinet", "72faa6ff-caa5-4036-94b0-b18d220fd65c": "chair", "f0f29d03-6100-461e-80f9-0549e3ffa991": "stool", "7b7d71f8-cba8-4a7c-8708-f22ceb478460": "ceiling_lamp", "5dd1a2e8-6ab8-4bcf-94b0-6d4e1ec7a33d": "coffee_table", "e6a14574-cfda-44da-a6ff-da5196aaba4b": "coffee_table", "7876eda1-1c08-4c67-98e1-a4285a844787": "coffee_table", "300b25f3-c201-46ab-8e55-517f7383d6d9": "ceiling_lamp", "e8e73a11-88b5-4ea2-8709-7844b49e1922": "ceiling_lamp", "fb6685eb-c59c-4eb6-ac2c-e18075d272b0": "bottom_cabinet", "3fa36b26-81a5-33f1-8fe2-b4f684e6fc12": "sofa", "9d09f888-dcd9-4d9f-b144-7418fc1ec350": "chair", "68b5092e-274b-429f-9527-4ffdb446a0fb": "coffee_table", "55f743c5-d774-353a-9432-67a8bb172772": "table", "e070f03a-adc5-4f55-81b3-aa72c324338d": "sofa", "ed2fb23c-d84d-4bde-bfef-b852d6c84223": "chair", "5ac4061c-3e5e-45cd-9a78-f789f622a2c5": "shelf", "cb49baee-2782-4f5d-b5e3-437d46043f7a": "chair", "1f29a03d-3975-4852-9b5e-5f845d52aa4e": "ceiling_lamp", "5ff8fcb6-f2d2-4d7a-88ba-5667bba7e836": "chair", "ccda4cfc-4b2e-442a-96f0-b48e9a24abf2": "ceiling_lamp", "5de9bd4d-bd10-4793-afb3-385a18234d5e": "stool", "23460770-72bf-4227-913a-c2fc78813799": "coffee_table", "6d7b7e56-7e0d-4a5f-b755-df0e117ac1e9": "bed", "ef3867e2-995e-4490-b3c3-260c75d8f80b": "shelf", "a1cfe72e-bd14-408c-ad68-ef6c7ef2a7bb": "ceiling_lamp", "40c2b1f8-58c8-4ae5-8ec7-b07ffe2cf899": "bed", "64cb25bf-ce2e-480e-a538-42c78f084ff0": "bottom_cabinet", "00883cfc-9ec8-4494-bc40-6c768d4ed9d9": "chair", "82e03ea5-48b3-410f-bf76-6b9129c2f215": "bed", "5edb8009-6154-4128-9de1-123de6c9a87f": "shelf", "906eae3a-3643-4c3f-8287-e2073bcdb53e": "coffee_table", "7f10ff29-43a8-495e-9f38-e55285cd27a9": "sofa", "24bc76e9-7b52-48ea-92d5-e7cf72b9cf43": "ceiling_lamp", "33b96ac5-0fe4-4ffb-b5ee-f34d756cfb7a": "ceiling_lamp", "1460b4ef-2317-347a-82d9-ae24ea0083be": "chair", "5159ffde-a7c7-4d2c-8b07-8c4d088487ee": "bed", "09d273b4-c8cc-4f51-8cec-68f8838d6bb0": "sofa", "636a2637-8069-4f0d-a32c-436e959b102f": "ceiling_lamp", "98b08568-12ed-4b14-b2d8-4722e4c341ce": "bottom_cabinet", "297588ce-9fcc-4909-bfcc-1aebe79126ce": "bed", "92f880af-e66e-425d-94a2-566b369ad6be": "ceiling_lamp", "ee8e9ae9-a5bc-4125-89b9-4bc0511c95b1": "stool", "3b56b94c-8a65-4e1f-b869-734db1c158ec": "sofa", "5f226a49-495d-41f3-93ee-98cf9b1d4cc8": "sofa", "1bbfd20a-50da-44ea-936c-9518400ee666": "bed", "5cdc256c-2cd5-446d-8214-3cc5a014ce03": "sofa", "72a8fbb3-35f9-42f6-b46a-41677383bd8e": "table", "12481123-c376-4990-bb29-547c55eeaf26": "ceiling_lamp", "0872d011-e245-30dd-9fb9-3a8051093361": "sofa", "0a5ad243-5246-4ee4-ac11-4db44797e97e": "bed", "4101c935-c4d3-4fbc-9f8c-ab6f5111d57a": "table", "12c0a7d0-958f-411f-a122-95e4ccf8aadf": "bed", "5233c862-4429-499c-957d-7ea65ded072b": "coffee_table", "96fdcc03-866d-44de-9dac-62a35128b870": "chair", "4d8698c7-e4c5-4eb1-aac4-d8b39139d1b3": "shelf", "10fc4efb-3a91-4608-ae31-99be4b1994b9": "coffee_table", "62d258bc-0648-4605-8b0e-5c14d162ba33": "sofa", "040574e6-76f4-45fe-aa00-8f14362b0c10": "coffee_table", "89a2209b-d394-433c-a2a7-0b9831b96a12": "coffee_table", "6b3eb1de-ecbc-3e4e-9b5d-b12f0cfec7e9": "stool", "4617e73f-7689-4152-9126-4e187e734209": "stool", "2e7f559f-24f7-4e60-9fb7-b7a1665dd10a": "table", "07d38cfb-dcb0-3f0c-96d1-69f465ebb40d": "bottom_cabinet", "7bf590ba-7f4f-4f13-8be7-92eeef002c3c": "bottom_cabinet", "3352fafe-b858-41e1-b720-00dc547ac106": "ceiling_lamp", "849b7c41-a912-48ef-9dcb-34dc1d08ec6a": "shelf", "1f7ba0ff-95b7-4fb1-8a39-412568de4b1b": "bed", "d9014fde-0cf1-4874-ae26-433add1d7c3b": "coffee_table", "9ac80526-f6b4-4e65-9a54-674ddbc6c6f5": "stool", "261f1f02-ecba-4e92-81da-94d4356576e6": "shelf", "9ce423a4-5f13-46ac-bc6c-a69247a6518d": "coffee_table", "ee4276f9-d7fd-4dbf-8eda-840f9ad597b1": "ceiling_lamp", "56e40172-7e94-48c5-b29b-6e945832b7e3": "bottom_cabinet", "46db08ca-4165-4a26-ae35-56c85ab15ced": "sofa", "1a4af735-398a-483b-ad94-68baeb0517bd": "bottom_cabinet", "8601deed-5a31-422c-8bc4-fa0c10c288f4": "bottom_cabinet", "da34f6fe-6160-4df4-9bd1-8ee0d309a396": "shelf", "060f87eb-3b9b-4131-b045-e7a8578e8c1d": "sofa_chair", "73728248-41b4-4c99-a172-abd2ff1a35a2": "chair", "5d58aa45-f73d-4a3a-a909-577641c1f7cf": "sofa", "2090d236-7b72-4021-b93b-96e5a7af3862": "bottom_cabinet", "0962feeb-5685-49d2-8443-620974572733": "shelf", "d1e92e16-0ebd-4d54-83c3-2cdad7270243": "bottom_cabinet", "fa3cf32d-dfae-4f29-80cd-14b67320532b": "stool", "24fb9cf8-7718-4725-9bdc-06671ba7b29f": "coffee_table", "9d049eb8-b546-4f46-a9b0-76a4af29e331": "bed", "17bf58ed-fe25-43a4-aac0-b0600e07625a": "bottom_cabinet", "42e54e32-06be-4ff7-9a9e-0b9704a63b23": "sofa", "3e9258d3-83d8-426f-b9d3-24dc9acedfad": "shelf", "2b9e8a81-a96c-4dd5-8fe5-9d9949b09362": "coffee_table", "12c91460-8ccf-4196-adae-450d39c00d47": "shelf", "c921d3bd-0674-4632-be66-52e5639a030f": "table", "60758d1d-68d8-43e7-8523-f085fc9ebbf4": "bed", "e6000be9-3abf-4c0f-9553-59008ec01bd4": "shelf", "f857549a-57d7-4026-96f5-3b3d60b48c9a": "ceiling_lamp", "c9e4290d-934c-4295-8b59-289a71437e85": "sofa", "43bffb6b-321c-415a-8522-43525dcb624b": "sofa", "3d4d7bf4-50d8-4967-bfd0-a156b1dbb208": "coffee_table", "5e26ec1e-f21e-3a16-a08d-0b29dce9a160": "shelf", "00555cec-c448-4f9b-94a3-5ee009ead775": "bottom_cabinet", "e5ba5a74-2b9d-4d05-b8a9-453769db2ac2": "table", "d3f5e3cb-550a-49bb-b99d-322ddec42daf": "shelf", "641286a9-d0cf-4373-8d4d-0c03705976a9": "shelf", "6d0642d0-4c9c-488c-a3ce-ff6720d08479": "coffee_table", "ee268e40-c509-410a-a647-df22e8c4ccf6": "sofa", "5e581549-655e-4e3d-841a-ead19cb0f482": "bed", "de87ceae-9b3d-4794-a5ed-4e5652166fde": "bottom_cabinet", "0eb16b14-8984-4734-a882-9299abc06b12": "chair", "d82a9c41-103e-47f5-b0d4-714a6ddcb523": "sofa", "0a2de904-3744-4d31-a3b7-e603982d89be": "coffee_table", "584813f8-173c-48fb-ac50-9967e2f43a32": "sofa", "154cb687-a771-44e3-a44f-bd4d664846f8": "sofa", "338c64d0-57d1-4580-8e09-07ef8a97e002": "table", "5776312e-c047-4b7b-a7e5-8b3b1b881736": "bed", "43d8e4b4-c99f-47f8-abcc-50d1aae8d74d": "bottom_cabinet", "75cbe516-3049-47cd-80de-5332d41b14bf": "sofa", "60958e29-d2f2-4ef8-bc75-6ab797698bdf": "sofa_chair", "4d5d9f0b-af2b-4436-8580-9ccd76c93536": "sofa", "486da62c-991f-4e05-a7d9-b6e91e3627f5": "stool", "fb6637eb-e686-4110-9555-dd0c7c9e2af2": "sofa", "ee7ce223-8224-451a-96d5-ddbeeda0687b": "bottom_cabinet", "8a0ae2f8-8074-42f9-8783-d9c898178705": "chair", "90897b06-d85d-4e46-ad10-77a8f6eb7f64": "coffee_table", "f92b65d2-a2d3-4430-a5cb-34a7b5bce7f3": "shelf", "e218759c-6456-4a3e-97bd-267f86050bce": "chair", "78fd469e-dd0c-40d3-8272-41b4e5468615": "table", "68538729-95b8-31e9-8888-9179cd2a87ef": "stool", "defc6191-1764-4503-9f0a-1e903af490d8": "table", "d41427e4-173b-490f-9ec7-e0bc1cb087d8": "shelf", "a43769e4-9411-496e-96b9-e7a47a0c2036": "coffee_table", "5ff93c1a-11b7-4f33-a258-411ecbeed1d0": "bottom_cabinet", "53e1bf77-8ff1-49ce-98fa-ec9d0eed78a5": "bed", "29f0c38b-8da4-4181-ae30-14b1eb650fb0": "chair", "409ae7cf-1cbe-4d88-8936-80d192c168b5": "chair", "20f1c7ab-008a-4240-b35d-d8c4bdbe2304": "bed", "7bc4b097-a8b8-481d-a421-b116bbc6b6b7": "sofa", "faba8295-aa0d-421c-8f92-3f1b65b82693": "coffee_table", "3e073b14-1677-4320-9b99-7e21ddc6066d": "sofa_chair", "5d404b9a-aabc-3202-aa45-342c79b88647": "chair", "aee0ea02-44f0-40ef-9ee6-6cc5c472da9e": "bottom_cabinet", "6b4eb72e-14ae-454b-a916-4b94f8cc11d4": "bed", "f701adaf-6e1a-494a-8a6a-4010c02f3a2e": "ceiling_lamp", "2d65ee1c-d8a5-3ccf-b04d-c0afd5f3c307": "bottom_cabinet", "671f8ec9-9706-3118-83d3-2898f2e1e321": "sofa", "62da127b-5543-4a5b-a5f9-582ddcb3d029": "chair", "10d00a2a-0161-41d4-b24c-4864b7d1ee39": "sofa", "79ce0923-04a5-478a-bb56-0d6e10468baa": "bed", "7995a72e-c313-4599-91c9-c3b9ed420248": "bottom_cabinet", "0efef8a1-3d12-49c2-94be-ca2919499ee5": "sofa", "044e0463-2dcc-49b2-9718-dcd8a43b899f": "chair", "a493bbf0-3f37-4a72-8d1a-db8797f9eb1a": "coffee_table", "1e6dcaf2-c674-35b6-b4c7-ba6523595860": "sofa", "e8a6dc8b-566c-49c7-b6a6-dfa189d148d1": "shelf", "00221545-8e2c-4266-bb42-f08c4e8d2382": "ceiling_lamp", "1896401a-7220-4d1f-8b87-74149564783a": "table", "ac01113e-abde-48db-853e-eaa22e9e0ee2": "sofa", "789c9d21-22a1-4612-8fd3-90a56644d4aa": "bottom_cabinet", "876a343b-ffa6-4585-9db8-6b5f0098e743": "ceiling_lamp", "1d41d5c6-5dde-4107-b309-702dd140f95a": "bottom_cabinet", "03061344-a456-45b8-995a-123bacfbeb33": "table", "86e0752a-97b8-4c8f-827d-a3f9f58a8945": "shelf", "21da5026-5274-425d-b740-5278e69a8c26": "bottom_cabinet", "4de57605-7407-4045-a51a-31b55c0ee53f": "shelf", "d02a1362-f02a-4b06-adda-9aa477a8dbec": "shelf", "72e91db5-e92d-4e24-a96d-73f957cb822e": "sofa_chair", "2cb574ad-03e7-44bd-a796-eccd50e6e9a5": "bed", "ae8cc539-77ad-4183-856d-d407d949bed5": "sofa_chair", "846bef72-20b1-4910-918d-cf16981a1c70": "shelf", "10be3edd-3cd5-4183-bd60-622b4fe379ef": "bottom_cabinet", "210e365e-f949-4075-a7c4-4a7cc43178bc": "table", "0ddf813d-223a-3cd9-88eb-a97bf6a0b796": "chair", "ec601a37-6c67-4d94-8e95-9512673f5a8d": "sofa", "81930823-adb6-4cc4-a70b-03ee05d3308b": "coffee_table", "81fd7f8e-21a5-46b3-8e86-cb5b92c603d5": "ceiling_lamp", "f19b9d22-37fd-41b8-9b97-4079aaad89d2": "chair", "1a933c65-8c70-4fc1-8b14-332d75a68fc4": "sofa_chair", "1142855b-0ce2-4c2c-ac44-d87f7983be0f": "ceiling_lamp", "1fe4b495-b4f4-4db6-89b6-70ba85ac5fb9": "chair", "bfd12459-d957-4422-a455-a32a5c2e798a": "bottom_cabinet", "72738488-ee91-37af-aab1-39f9caee2993": "table", "2f7b4bc0-2293-4f31-9812-472c0486a300": "bed", "5b76af59-ae9e-42bb-a4ed-b46d3238d1c3": "sofa_chair", "1ed6ea58-439a-4409-9805-6ec43db48ae0": "chair", "0b37c900-4ecc-42e5-9899-b71aef429431": "bottom_cabinet", "2d5dc8c9-1e0c-4747-a3ce-d5c80bf12041": "sofa_chair", "9538871d-f53f-4f9c-9746-6b3d4d91c406": "stool", "4501dfa9-32b6-407f-bf2e-1c8c428068ea": "coffee_table", "90b90ded-283f-4175-9db5-3e35ca5927da": "stool", "96f13154-07cf-4a08-bef4-da8a0d77953a": "sofa", "b90589f3-0c9b-499a-bc54-4ccc97ec7010": "ceiling_lamp", "228b6184-4019-4ef4-9eec-46584c66cb5e": "stool", "06638f22-d2e9-4223-affc-9547dc4c633c": "shelf", "ff193ce7-c759-4607-99bc-7a79050887b6": "sofa", "51ec86f8-de27-4189-9d2f-aee0f93611b3": "bottom_cabinet", "a8de5349-12e9-4609-b389-6c07f75ed760": "table", "bf86ea39-e9b6-4679-80d0-5ebf0ad331cb": "sofa", "75532394-98ff-4727-b030-4ed24099e593": "bed", "5f423a8c-44ee-496a-bc35-d924352076e2": "coffee_table", "11e193ec-f8a7-356a-b077-9a46bd80289c": "bottom_cabinet", "4727908a-f526-4dc8-a9fb-ecf0e5438b31": "sofa", "3fb272ad-8d57-3632-b82b-4da71a5350f6": "chair", "0efd1942-d8aa-4749-a3f7-fb10ed93e1c4": "stool", "ea0be776-bedd-48cc-b929-e1f79e4e847e": "bottom_cabinet", "c00da5ea-9daf-4583-bea3-9a75ed2d8053": "chair", "e1da1be6-fc1d-4eab-8f25-e58b52265375": "sofa_chair", "1219f514-b507-46e3-b331-1fb42aa00f12": "chair", "8b16c3e8-2613-4ba6-ad12-816d47379b64": "bed", "767fc66f-506b-4472-addc-d9d9aefd9999": "chair", "5112ce14-2935-4417-ba7f-2f93fa9518b0": "sofa", "befbb6c0-ebeb-435c-981d-c1ee9fd60d21": "sofa_chair", "4dcd3e15-c879-4fba-b6bf-763bc3ae89a0": "sofa", "7e60ef1e-7c99-4b1a-8508-e86a54139c5e": "bottom_cabinet", "4cfc5497-ba87-4e22-96e2-8537044e336b": "table", "b6ec33de-c372-407c-b5b7-141436b02e7b": "bottom_cabinet", "022cf426-77dd-4300-8fef-3d256991ad61": "sofa", "600bfa92-f56a-35b2-ac90-2634dee248f3": "chair", "241c6a0d-9a01-49a1-8a11-7aaf5210e685": "sofa_chair", "6c7ba746-fa09-4a7b-8d0f-129b2abd8bea": "ceiling_lamp", "540a839f-bac3-4686-85c1-56640109e8f1": "bottom_cabinet", "0f25a699-6560-426d-a590-7e69986c449d": "chair", "ae2990ca-afe6-4bf7-8b78-f6609dcdd53d": "table", "2cee3c53-fb28-401c-a9e5-2ba963964b2c": "coffee_table", "781e2d59-dc62-46d1-94a1-1aa8ba5b1311": "sofa", "6e1cdf60-ccad-4a28-a688-2d6ffc9c0e50": "sofa_chair", "0bf7ae83-317a-4484-9028-7378ce1d6a02": "shelf", "46410638-6746-4481-acb8-3ab203895b7c": "shelf", "0bffa06b-2080-42bc-95e7-7c444425d989": "sofa_chair", "733bb76f-3a35-39f7-95c0-c89f678d0955": "sofa", "3d8da11d-054d-4cbf-91a9-812db32b061e": "bottom_cabinet", "b84bb228-2397-4d98-bec5-0963a1f8eadb": "ceiling_lamp", "3e545b9b-5d2e-476b-934c-7e7e58b8e3ae": "table", "9553f42e-253a-40f1-9148-30f7f71937de": "sofa_chair", "76e638c9-37bc-4297-9564-2aac6f2ad4fc": "sofa_chair", "9d61d146-fc6a-4ad3-96a4-da5c4427bd0c": "shelf", "4a6eb304-dcc5-477e-8349-933c2ee27d0d": "sofa", "06a11496-dadc-469d-86ec-1c15fe15fa1e": "ceiling_lamp", "21f3e30f-6168-4172-85b6-7d23174aa582": "sofa", "cf3ceb32-0e02-4139-bb56-12249f4ca6c8": "shelf", "cac6fe2d-1ce5-431b-abd3-68317007808b": "table", "316f96db-c7cd-4a7a-87b8-5a18b5bb893e": "ceiling_lamp", "297a6458-cfda-40cd-a626-6e400865e88f": "chair", "434a4bd0-52fe-43b4-8a1b-d4b141bd8fea": "chair", "0d3dcdd8-4126-3d9a-81e1-87358be018b4": "shelf", "093e84e2-746b-49a8-98c7-601e4e1ffe34": "shelf", "785a503d-21b0-4aad-9c6c-9b3b5d965b07": "sofa", "51ee76e1-6037-4535-a8b9-9d989882aab8": "table", "61122718-1c67-4abc-bc6b-48b78f9d1fd6": "sofa", "1ba78b12-1c33-4f8a-97f6-9a4ea84dc3f9": "bottom_cabinet", "cd16c6e6-5ff2-4a5b-a3e6-e4b9c39b6389": "coffee_table", "f80afa4e-0c60-47e5-80d6-cd0be37b5919": "ceiling_lamp", "0004ae9a-1d27-4dbd-8416-879e9de1de8d": "bottom_cabinet", "3b4a90cb-65d9-4299-addd-2367c86dd6d2": "sofa_chair", "5d2915d7-cf58-4ef4-a8db-4c8d9301b3ca": "sofa", "58aea236-874e-4877-bfbc-0f9729be170e": "bottom_cabinet", "3dad6ea4-9cda-4209-8edd-7bb86a12cf27": "bottom_cabinet", "519af9aa-1690-4e09-b741-928085fd2de0": "ceiling_lamp", "744af784-3b62-4cb4-bba9-87d5e3650fdf": "bottom_cabinet", "d89054a0-5501-4470-87b8-85056ce6bb0d": "sofa", "30926db2-c1b3-4f71-9800-e363d36a51d0": "coffee_table", "547f3f9c-1b86-4011-b3d3-eeb74409ce7f": "sofa_chair", "00c0ed18-9131-41f1-976e-52a8be0a0a21": "bottom_cabinet", "f9c823da-9899-4ccc-bbf1-2e936e150228": "coffee_table", "f54fc43e-36be-4a85-9031-41112bfb2319": "ceiling_lamp", "4f8af693-6ae1-4f10-974e-0a6c6494c24a": "sofa", "7cb039d7-8f68-4c6e-b812-515ae850f6d1": "chair", "b316d986-6683-4d48-9de0-974cf3234841": "chair", "2cc3bbad-581f-420e-bb37-87a6c1954a7b": "sofa", "782c10fe-dec8-442e-bc32-4f13993aaa00": "bed", "21bf54d9-7e1d-4676-938b-2996bfa729aa": "sofa", "8365ddd3-3838-3b9b-8f7d-a1b41bfc6a46": "chair", "90478bb5-a8c3-4136-9ff1-d05a9ca68f94": "shelf", "dcc0f77d-fbb4-4f62-b85c-d15ae5b735e7": "ceiling_lamp", "447d2346-253a-3f2d-aa8a-6a924ca99eaa": "coffee_table", "d1e91568-a9b4-471d-b85c-665abe8e4276": "sofa_chair", "7cfd281b-f3d9-4caf-9252-71f2d71026f6": "sofa", "2b5d9535-8378-4084-874e-481c3a854034": "bottom_cabinet", "e2ed06a7-d767-4d08-8e0b-e05fafbf943d": "coffee_table", "f4059cd2-a7ee-49f9-bcad-1654dc165ab1": "sofa", "1ed074bd-83a9-4570-ae89-db2404e790ab": "bottom_cabinet", "198f2b99-a7f7-3971-a40c-1f61aa7b7588": "table", "74345089-2a96-44e0-9da1-b640fb6f7f5d": "table", "d952be54-5728-4ee8-8f79-35ecfa1212ce": "ceiling_lamp", "a367a17b-7784-4292-bd63-6875e7a85dad": "sofa", "6b640ae9-f645-4231-a7d5-a40680a9ede7": "shelf", "497cd032-1332-4d2f-8d96-9bbcf4ff1657": "sofa", "1beb58a7-5212-4f2d-8f2c-e087b5d88b44": "sofa_chair", "63f943ed-b30b-4982-afe6-eebfebe9eeb6": "shelf", "3241f1fe-5d13-4283-a443-b6ecee0bb225": "bottom_cabinet", "43dd0327-b449-4fa0-9910-3fc975be5a2a": "ceiling_lamp", "7974e6ec-65d7-401c-bad2-ed9fb20fe367": "bed", "5f8a1a51-f9df-44db-8d37-14eda9905b8e": "sofa", "281d33db-4e43-42ea-ba76-ee0890042e85": "bed", "f574b3c9-6169-42a0-8c79-39c0f33c4018": "ceiling_lamp", "8fc39ef3-d803-441a-b1fd-b824399dcb25": "coffee_table", "401aa29f-6dbe-41f6-b91d-9c7bf5af9dd8": "bed", "9b69e3d4-bfcc-4e59-bf6b-7e7cc052eac0": "ceiling_lamp", "951871ef-d526-4e96-b188-3380b2146431": "ceiling_lamp", "4ff29d21-1fd1-4afc-bdc2-ff2bf3a8ed0d": "bed", "118c4f34-9a09-401f-87c1-630920203df8": "bottom_cabinet", "8aa5e2ce-e86c-443a-85e6-56a3fd956b36": "bottom_cabinet", "ce911e6f-91e2-4d7b-a40a-3f8a8bec9a23": "coffee_table", "a24df003-cf54-4ce0-b098-0ed4a2e75ee2": "coffee_table", "afe3b21f-760e-49e7-a216-a8215346b68f": "sofa_chair", "4d5ff861-d5ce-4f10-90c2-c064b1845199": "bottom_cabinet", "fbb79ca8-b1c4-406c-acba-9da788020ef8": "sofa", "f95c4da5-83ef-4123-af9a-3b17af255a66": "sofa", "127ef446-1121-32e2-8081-2ec383c635d3": "stool", "ba3ce2e7-aaf4-4d83-862d-ca6fde419f35": "coffee_table", "1822e73c-3839-40ac-8928-9e4a2f19e9e8": "shelf", "bc16ac37-00f0-4646-8e47-56de6044ac1e": "table", "e7cb7659-1935-41eb-9e5f-c2d269bd3369": "bed", "24f95734-9101-3602-a3e2-3143123e9601": "shelf", "0c7c35ff-8fda-44f7-9e5a-cf75ed3e50fa": "coffee_table", "85c3c553-1938-4845-86a0-12e2e8dd3dc7": "sofa_chair", "47e1d7cf-034c-43d6-a185-097ee6e5529c": "bottom_cabinet", "525dfbf2-f67d-4547-b6f9-4f48350053d8": "bottom_cabinet", "9473eba4-4e42-4bb3-8836-45a88bdf662a": "sofa_chair", "e90d0cd7-80d8-4849-8869-6c4517edf193": "shelf", "abc9924f-8991-49fe-af13-4564f46fa765": "shelf", "8cda3266-955e-4d6a-948f-ab23d4237cd7": "shelf", "0ceb22a3-8edb-4957-b619-7bf1bf858ae4": "ceiling_lamp", "061829aa-2d59-4e63-9a3a-6867e08a558e": "bottom_cabinet", "bfcc6663-f67a-499d-b5f6-ad7b9d075fb1": "sofa_chair", "be4cdd72-5566-4e84-9023-ae8a2f2d603b": "sofa", "ac8f189e-d127-4f83-8377-d985c405c082": "bottom_cabinet", "7b6cd127-844d-451f-bf48-f2e5b18508cb": "bottom_cabinet", "0d1c2c39-5c57-4c75-b477-603123dc0b40": "chair", "8540ec2c-f5e6-40da-af37-6c0098ce200e": "bottom_cabinet", "67100539-9668-4ad0-8445-641bd40b8ae3": "chair", "fab1da51-e341-41d5-9f7c-453a80e9daa4": "table", "19a6f63d-fd29-461a-ae9d-86d25e4750ef": "bottom_cabinet", "3fe8a055-9c76-493f-9a4f-4babc09bc106": "table", "e736b2f5-97bd-45cf-8406-20ef69f13f82": "shelf", "51f2b957-074e-34a6-80a5-a2d1ff3f8ad5": "table", "b1567391-408d-4a83-a339-8c169782e740": "sofa", "b0986d32-f7d9-4d15-af08-88b9fae12b70": "bottom_cabinet", "58693e2b-da27-47ff-94a7-bcaa8e3ba207": "stool", "f5b9df5f-562b-4064-bcb4-cf2daf47cd33": "coffee_table", "07056bdb-8cab-347a-b55f-cfafaceec5c3": "sofa_chair", "a9d2d25d-132d-423d-8782-1dff2c085672": "ceiling_lamp", "f33f69a1-bdd4-4432-bfb5-950a3606397c": "ceiling_lamp", "2073786e-ae1a-4b5d-8f4b-577a0ac941af": "coffee_table", "987bec46-496e-4970-bfb5-cff89e88a541": "shelf", "0ef88fb5-1e57-42f5-a04f-c249ef4e5ba8": "bottom_cabinet", "f11804e6-3330-442a-baba-82930184c922": "chair", "56c41341-bb30-4ad5-bf99-c156222d8ec1": "bottom_cabinet", "80796c5f-3450-4838-bee3-a7084eb678cc": "sofa", "18ee440f-369f-4783-9d84-e299f6aee62f": "coffee_table", "e0414d6c-1472-442f-b417-ebca71c83918": "bottom_cabinet", "d793d985-c1ae-4844-9b17-3f87ce2af7ea": "shelf", "04d7bef7-8628-48c5-a62f-3762e54f7914": "ceiling_lamp", "6914e291-6567-3b2d-b451-1ff145aa58dc": "table", "18703583-31ad-410d-a07c-68f5cb860b0f": "sofa", "cdba0c2b-f145-4d25-9217-ffe9c4517fcb": "sofa_chair", "6bbd394d-1962-4df5-9208-7c7703303e90": "bed", "20f62b0c-17b9-4672-82f5-fa39612fd3b2": "chair", "910a68c1-43cd-48b6-a1c1-f20680bd0a0f": "ceiling_lamp", "159a306d-feb8-45bf-9453-56cfdd529427": "chair", "0e8540a3-85cc-4717-9d64-a4069e67a76d": "bed", "608bf1ea-8d72-3421-a837-0c10b9194ac4": "table", "e447c1e0-f959-4fd6-b822-dc19aeb88b52": "sofa_chair", "722c09e2-9786-417a-8f47-104259cc8840": "bed", "a050e2f8-e020-413e-8555-3aa1c675f11c": "ceiling_lamp", "0c669d87-9e77-41ff-81c4-d7abcb4207e7": "bed", "6dbf310e-fe19-46f4-b0e4-27d43a44bd16": "coffee_table", "c65033bc-8b5b-4608-b6f3-2c2853e8e670": "table", "183c88de-1f01-4dfe-b95c-ce12013acef8": "stool", "858fd687-3698-4f72-bb3a-23b5355b6a05": "ceiling_lamp", "6ad1eaaa-4724-45c6-8ed6-24d85ec20bb5": "chair", "40f6741a-66bf-472d-8fbf-0742a08dcdc3": "shelf", "406a71eb-ec34-4267-85e0-e3f8b6d03643": "coffee_table", "08696a08-1d74-4332-90ef-9cfe312ad281": "bed", "2b15dc28-9a81-4daf-b3e2-96c01c83eaca": "coffee_table", "71f48ed3-c9a2-4775-81f1-0561356178ad": "sofa", "ef24b984-f2e6-4afc-bfa6-08fad526699a": "coffee_table", "549d4454-e558-4b77-a003-f5b3568fddf5": "ceiling_lamp", "0f985b42-bedd-4a93-8105-75fc9f390f52": "bottom_cabinet", "75d8aa6c-9965-41b2-976d-6c4b0ca99c9b": "shelf", "66c2705e-1e29-4cc1-984a-06e9888d8237": "coffee_table", "10a4329d-93a7-43e5-879e-facdfc5146f1": "table", "b8342d3d-3c26-4b8c-9415-dd7d8bcca544": "sofa", "bcc47f55-1dce-4693-a652-ac106f8d72dd": "bottom_cabinet", "ce9d47e8-cc34-4642-9fa9-61569b059179": "coffee_table", "3847d5da-a57d-423b-8aec-57419ade2d26": "bottom_cabinet", "44abbdf4-9e92-46b7-92da-7c60e35d6d59": "sofa", "37f2b471-7d32-424e-a610-399f88925f94": "coffee_table", "508cfb78-bc03-4bed-8564-32f1ea20d67f": "coffee_table", "1c438ce6-5cc6-45c6-8ae0-6ea01efed7a5": "chair", "808a77bc-0791-4e58-9c8a-3fd1efde0678": "stool", "94f69cc1-d4a1-45f0-bfae-672cfbd57fac": "coffee_table", "afb44044-bbe4-48f0-b4c8-32b02339000a": "bed", "603e3626-6286-4103-b439-2db685b924dc": "shelf", "877ea345-1520-4ee8-8ca1-69ce2488ec91": "bottom_cabinet", "5f75f67e-b806-48c8-b324-27703dbb013e": "table", "c708b7ee-65a5-4033-a022-e22f10bc9275": "sofa", "54268bbc-8c70-42b8-97c4-3c0d2229528c": "ceiling_lamp", "6fff9bdc-20b4-40e6-a37d-ca372cddb1e4": "bottom_cabinet", "feda8f24-4b76-4ad4-98d4-23ef9d48de23": "stool", "bc6f3ed7-808f-4d18-b001-fe0642df679a": "bottom_cabinet", "b44fb0c2-e3df-4ba4-b541-ff9678dca836": "coffee_table", "4a76c521-b125-405e-850d-9a185e8cc6a2": "chair", "6069c9c1-c431-4e5c-8dde-77a23f6408bd": "bottom_cabinet", "4bb51eec-1131-490d-a3be-c8da00bd57a0": "chair", "8b64cd69-2f4d-4b26-98e1-96dbd1e370fb": "table", "01c32920-6010-4661-b8a1-745eef81e225": "bottom_cabinet", "248774ec-da30-4b29-a9c8-1aa5668ec462": "sofa_chair", "02250622-9b86-436d-9709-e27542a7bd66": "chair", "fe00d134-1b91-48a0-9efd-888cad7c7383": "bottom_cabinet", "52713ba3-7597-481d-9896-85c1d2ec2eff": "sofa", "70837ab0-1aea-43da-a7cc-f67f3d9727b0": "chair", "d336b50f-5524-484c-a8c5-c914a20f8064": "sofa_chair", "9188a5fc-0d33-4e95-9c23-598c93f8a514": "chair", "0cd722cb-4cf5-4026-9906-187e51d78c67": "chair", "7412a2b4-7864-4666-a19e-25cf6e30cf82": "shelf", "9945538d-a0d3-4a8a-937a-47dbb8329da8": "sofa_chair", "e9a5fad2-5268-4e2b-ab08-65eb81b604be": "coffee_table", "716095f2-ff1e-4af3-8949-2880879a37a4": "sofa", "3738505e-b1f9-4004-8f9c-97b4671a5109": "table", "ec008c96-5096-4125-83cb-89c997576bf5": "sofa", "5f153b6b-3dd9-4068-af5e-d9d847f1d51a": "sofa", "e44abb9d-cdae-48f8-a719-21e05ba1ccd8": "coffee_table", "b11df2a7-0f4e-481e-8a6a-3b67cf21c9af": "shelf", "f1e2158b-770b-464a-bcf2-902ba2c48af0": "ceiling_lamp", "636f10e1-e4e7-40a1-b3ba-cde5c8a07c84": "table", "602022db-9c17-43fa-97d2-111ba3438c38": "bed", "144aa12d-0d7c-4bbe-b0e3-7d669aac74df": "coffee_table", "1c314ed8-9380-4bfe-a588-b802b51fc121": "bottom_cabinet", "cd5dfd5c-f75a-4f11-aab8-882d848c7f7d": "bottom_cabinet", "bcc9b629-6700-44a0-97ff-55f31ae5aba7": "ceiling_lamp", "23852a10-b717-41b9-9ab0-90e533d3b592": "bed", "e9f2df5e-1c3c-4b71-9ff4-edb6c3dfc9df": "shelf", "4efa29ba-9633-4dfa-bae3-76dde466850c": "bed", "23757bb2-04af-4895-93fe-821f08b9621a": "shelf", "08c27045-6526-475b-9b32-681d1fbe401a": "bottom_cabinet", "ada48d55-60be-46e3-8649-befd587e0a51": "ceiling_lamp", "ee82b952-3691-442a-8fc2-b7f3e520a283": "coffee_table", "b8338829-e387-4a39-95cb-7e2100dafb1e": "bed", "2ed8e305-2597-4b62-ac94-53f510ca69e1": "bottom_cabinet", "03e769ca-8083-4bc3-bd90-f0f793b5aff8": "table", "08f9fbbc-8ecf-4654-b510-ceb8c39c2c27": "table", "d6687f6e-4e8c-493d-9b97-4ead11944e8d": "chair", "7fac119a-0981-4f6d-947f-35c7bbbd9ba4": "stool", "d864c4f8-a679-411a-adc4-10354d300e44": "shelf", "5b297cf4-b136-4d5d-8300-ea0afafb5ea9": "sofa", "1ef7fb07-6f59-4a80-9b10-73bd3b611049": "chair", "964e6431-bec6-469f-9485-e7a6777580e0": "coffee_table", "3e601900-792a-4a63-afd5-4087b7c02d0f": "ceiling_lamp", "3407b527-0a61-4360-b4b0-917d905f82aa": "sofa_chair", "57a314b1-d732-43d7-9582-e069737f2f9c": "coffee_table", "7ce1888e-7b67-4e00-b63e-82178240f075": "coffee_table", "14f0f3b1-24cd-422d-8f10-84f7eb0f87a3": "sofa_chair", "2e29c31c-f6e6-4771-b636-7fe1a03ad42d": "shelf", "6a4defbf-b627-4c5a-a73b-c03cf6f28adc": "sofa_chair", "35fdd39d-c6cb-4896-b8e3-735d836b725f": "chair", "d3601408-ac22-4172-a551-8b003e579bee": "coffee_table", "4bf1afb1-c034-4849-9131-1b41d051d0c4": "ceiling_lamp", "3f8d4d32-8376-447f-9980-4b6fc0dc3778": "coffee_table", "b9da328c-9897-4abe-9aeb-ef188d76f007": "ceiling_lamp", "b0b113d7-5b31-4bf1-a85e-72b6e096fe6f": "coffee_table", "0830dd10-29a7-4471-a2fc-434d042d8c32": "table", "d476cae9-4364-4147-861d-69d294fdeac9": "shelf", "e90f673f-2afd-40a7-b338-9f3f6c7c9e4b": "chair", "061892b4-bda8-499c-bd2d-7d10f0a230b7": "bottom_cabinet", "28db412b-c62b-4c83-ae16-c0ce86d93491": "bottom_cabinet", "4cc48f0e-27c3-4a5c-b98b-ee0c85fa9f53": "bottom_cabinet", "02970dfb-ec72-49a1-ae76-93146fd14e7e": "coffee_table", "0e3d3074-b81c-4177-8778-62d2610213d6": "ceiling_lamp", "47743ba1-1b3a-4b2a-8698-caf384221bca": "sofa_chair", "6c4c51f0-34e9-4770-a41e-8e9bcc885721": "chair", "52f79bcc-87c4-43d1-a355-c252f59d1a36": "sofa_chair", "1fbf4192-1fb3-4451-8254-95da51452ee3": "sofa", "87435638-c33b-4fff-83e5-ac798a6c1eac": "bottom_cabinet", "0af3aeed-328b-4883-96fb-446c97974756": "sofa", "79b16006-afa9-49d4-b921-25edaac4123c": "table", "35fb412d-a7a6-4797-b5f8-d081cf54fc2d": "ceiling_lamp", "abaae793-c856-48ee-aa6f-ef7196b622ad": "shelf", "93614ac8-0595-4438-bbd3-036e474d56fc": "sofa_chair", "3bea8450-fd9d-4acc-a21c-b52319a3d4ca": "stool", "c0965a35-9ab9-45da-8034-f1dce40c961f": "chair", "1b87189f-ae27-4b86-949a-84b749caed7d": "coffee_table", "1c8dfc96-1144-4be8-8894-e064d672a86c": "chair", "3b9a993f-7c09-45a7-b501-b453a8df31ab": "coffee_table", "d3fe6ca8-2117-4599-994c-a2bf70f6eac3": "coffee_table", "7af7cef7-e503-4893-92c2-fc54783227d4": "chair", "fedb10c6-a980-47f8-96cd-d6fbb53013a2": "shelf", "46b8d0ec-0fb8-419c-9cfb-5be804d483be": "coffee_table", "4cc3c6c1-5fd3-4d24-8630-1bd5ec4a10f9": "bed", "0d7d3df7-1775-4969-afa7-9459777a7b88": "bottom_cabinet", "206d272e-e0ce-3339-b7b7-a459ce2ada73": "table", "5f9dfca2-ce3d-4165-9514-a8fe50396996": "coffee_table", "e4362ba0-c0b4-4dbe-8a30-664df4aa9008": "sofa", "f91bc6a2-2f04-4f33-87b0-a421a270a468": "sofa_chair", "c508c80d-de17-484c-ad4b-81344e8dbbab": "sofa_chair", "5aea9c82-6c98-4d98-98b9-eb6908acbe41": "ceiling_lamp", "e274da8d-d814-43e6-bb8d-d5f6bfd950fb": "table", "e97af3b0-8c3f-4624-867c-f2750c724c08": "bottom_cabinet", "5f6791af-34a4-3731-ac2c-8a0fbd8ceacc": "chair", "fc466ee8-f68c-45ea-9915-54230f765f68": "coffee_table", "4975ba09-4ffb-4620-b8e5-8029c901bf10": "sofa", "56b8baf2-ced5-4780-9d2a-40689073f053": "table", "65b0bd9f-389a-4ff6-a7da-7f66c1291f16": "sofa", "2cf4b802-21b3-4b94-bc67-a52c86811594": "chair", "3cbf6b15-deea-4901-81c7-649f8ff8cef1": "stool", "445c75d6-3d2a-4e8b-b348-1391c548bd70": "sofa_chair", "df92f33a-e04b-4c1a-bcf8-cd6921927f21": "shelf", "cc361b2e-4f09-4e11-add8-ec7ada908060": "chair", "fa453f15-8251-498d-bdcd-0e7884bc84ba": "ceiling_lamp", "4dac0b13-11b6-428b-a67b-5454ff56f2e6": "ceiling_lamp", "a80c3c46-e3d0-408c-929e-7d93a75057d9": "sofa_chair", "454e0bb1-53fd-4548-b87f-379a3d669d51": "bed", "20f171c7-21ae-4876-bb79-6ec3fabc2ade": "chair", "c56a1958-b1b9-451e-88be-72a6ecd7cdff": "sofa", "752e47c9-4dac-43b3-994f-e97cb7a9dc5e": "shelf", "260eb3ca-ddb5-43b5-b2ed-3dd8e4c51e61": "sofa_chair", "18e2637d-15b2-44e3-b83c-fbc3a96286c0": "shelf", "97a59fab-e005-4826-b3e2-6522a80f5247": "ceiling_lamp", "309acc6f-aeed-49cf-b4c9-3f21f48b9630": "bottom_cabinet", "606790c1-d7bd-44e9-9382-54f00b25e1ac": "bottom_cabinet", "a76ea43f-7e83-4afc-99d2-737dcb92ab39": "stool", "8144364e-1962-3d26-b299-25776a022746": "sofa", "51dee0aa-9250-4770-ac00-85c12db9233d": "bottom_cabinet", "4ea4d80f-ae9d-3255-a38a-83af235863ba": "sofa", "0893af5b-1c13-4996-b1ad-78329f5c2fd2": "sofa", "660f0928-c45a-4be2-9ce6-b0813293a905": "bed", "549eba4e-2479-34ae-9f50-1f8a09e64d7c": "chair", "22f88d8c-6fc2-4f07-b964-071e2d95d840": "coffee_table", "1daf21ae-dcd0-4c8c-b657-521574440b4e": "bed", "7d9ac7d9-f126-4b17-90dd-cb345f318e1d": "bottom_cabinet", "199de94a-82c0-38e4-9475-de998fb04054": "shelf", "a7397c65-a066-46de-b9fa-49a7f2d45a13": "chair", "4bcde604-ea9a-4beb-8fa0-8313e91e4d1b": "bottom_cabinet", "8919ebe7-e126-4793-a7e9-31599c77c826": "coffee_table", "f4b692d2-0c69-4ed5-b7d6-624e30d5dac1": "stool", "41905139-7ced-4868-bdc5-2320eb3cf9d7": "bed", "7d0a3b31-7d66-4d09-9761-647938bf43a6": "bed", "022e3919-207c-437a-b4ae-e56359c0ea5a": "table", "83f72371-11c5-4edd-89b9-95b2388888d0": "bottom_cabinet", "c4329aeb-ffad-489b-b3ad-55b317787c77": "shelf", "17b841da-8758-4276-8ad4-32ffd494fd8c": "ceiling_lamp", "53365527-4dcd-4a00-bd60-da1713269cad": "bottom_cabinet", "1de3cbb7-6196-4948-b452-c3f6c54a0bb5": "sofa", "bfde1b09-45f4-479f-aaee-9f513cbf4ead": "sofa", "9d810a8f-96b6-4ed0-b252-c52155617011": "sofa_chair", "5941327f-b8ee-4a49-92ba-3d430968be08": "bottom_cabinet", "afd9e572-09c8-46cd-b05f-cda11bd4317b": "ceiling_lamp", "9f4fab40-a20c-4244-a3d3-b0c2fe071e02": "coffee_table", "dfaaccd6-4e53-4a2d-beb0-43ad30ea8f41": "bed", "7019359b-8402-3c92-8256-f9c2e68edd9e": "table", "65b78c55-ad57-3ede-86a5-8ad8dd04a413": "sofa", "8e67a62d-5b88-45c2-9c5f-9c262f5b5c97": "bed", "0fa4c982-2c4e-4c4b-9ac7-6f3ccbf3829a": "bottom_cabinet", "d951b096-e345-4ecf-9ec0-e9d5229a193c": "shelf", "3f6e40c9-97d2-4733-9519-5a252c47da3e": "bottom_cabinet", "5d969038-bf77-4e92-a7ab-e29940530823": "bottom_cabinet", "4d9b7a7e-b102-3458-a112-033dc1cffd7b": "chair", "615bc65e-eec2-4bc4-a735-0d4d45d583cd": "bed", "f6356a64-118f-49aa-98aa-b603e813737f": "shelf", "4455bd93-dcda-4175-9b21-f278e4e9ffeb": "sofa", "a7b66abb-0483-4c36-a27f-d0c23946d411": "ceiling_lamp", "ab7d1c55-e0de-4126-9dae-cba840c4439c": "chair", "47e57130-9be3-3b91-9dbf-725ae8dad08e": "chair", "dfa6a5c5-6d78-4f2f-be67-80a0b95982e3": "bottom_cabinet", "216e2aa6-cf42-3fdb-a955-0b18ca2802dc": "chair", "679f0759-014c-4b76-9ec2-655069ab90fc": "coffee_table", "719c921d-a006-3c51-abe7-cead867a78c9": "table", "1a579f8e-112f-4db9-a2ee-0063d0e7076c": "sofa_chair", "f226d593-9d95-407c-a911-0c73bfad50bf": "coffee_table", "57580a13-bef0-44fd-b611-863ea4a3aad8": "chair", "3ef54983-da3a-437f-8404-b3cab19a01e8": "ceiling_lamp", "22b6a9a3-4b18-34a8-87aa-ebf44e79a249": "stool", "367b06b8-46d4-45f1-bfae-ff42ce3de9a7": "shelf", "18b518d0-aba3-4440-8f3d-acd8ebedacb8": "bottom_cabinet", "5bec38a8-fc65-4dd2-ba84-da694dbfb2a1": "sofa_chair", "4e0aa203-cbb2-487e-a302-999e835740fc": "bed", "36611c52-2573-4f86-bf71-b9f175cfeb65": "coffee_table", "8506c3c8-5d05-464b-b1d0-f416b5a2b2a4": "sofa", "1ea9df85-c974-4cb8-abaf-276b423dc390": "sofa", "05e6f7c4-e7d2-323e-a8e5-2748831a18ae": "sofa_chair", "04639e82-a7de-4a04-892d-07046ef58cb9": "shelf", "fcfdca8e-5713-4c69-a654-bf73c30bc2de": "ceiling_lamp", "ee4974b2-4257-4c5e-b162-e02359f4bee2": "bottom_cabinet", "5a72093d-b9e5-4823-906b-331ced5e08d7": "ceiling_lamp", "6e19fa01-fce3-4a62-a8ca-898221e82479": "coffee_table", "fb09bc14-c26c-4dac-9235-a8019976fcdf": "shelf", "8dd376c8-f393-4eee-98cb-2c61d559a139": "chair", "80cf00ca-49fb-4f92-9234-bf373a02a656": "chair", "1407b515-5e0f-4fc2-b389-4a6ef572fba3": "bottom_cabinet", "84c7ffa4-84c4-4349-86e4-41d19d53a1b6": "coffee_table", "f44dc1ee-3b57-41bf-86d5-4f6d025fccd8": "ceiling_lamp", "97a912c8-cd86-4faf-83dd-65d467da2edc": "chair", "52dd96c9-570b-4d08-9ff7-896e4798d7c0": "bed", "5ec8be8f-f953-40e1-9a1e-9710b83c176c": "chair", "856ee26a-be78-4965-b889-5e09d2f7cc30": "sofa", "7e99e811-6a00-47e8-935c-a2ae1d12348c": "bed", "58e1a4f2-2285-4124-ae08-00e68d4df70c": "bed", "9df2949c-074e-4b18-b779-b88a074f9590": "stool", "83b7820e-3e39-4eb2-99cf-37c91a6dc56d": "sofa", "12cdeefe-571f-4e6c-9a0b-212c177a30e9": "sofa", "e46831f6-4411-4848-a6c0-4d05dad8a905": "stool", "803cd6af-d727-4a94-99d5-8b3310aaf579": "sofa", "a333e75d-cf32-4d75-810b-882701bec2d1": "chair", "53003092-9c15-415e-af7f-d1d8c3b0661a": "ceiling_lamp", "437c76a9-0f16-326c-af73-1416f584c018": "sofa", "9560c2b1-7ec1-4f4c-bdfb-3c806d082265": "shelf", "220dde51-10eb-48f5-a49a-02454da9f4fd": "bed", "4fdb17b0-77f8-4651-8062-11e83e082762": "shelf", "22f35f0f-59d4-4636-9753-8682a7312097": "chair", "b6162b5a-e518-4d46-9320-d6779eba51c3": "bottom_cabinet", "e26f097d-99ea-4200-93eb-3c3fe6ac4562": "bottom_cabinet", "379208b1-ff08-4d11-8339-a312bd89b4d5": "bottom_cabinet", "32adb74e-d807-4c90-848f-d11bc719687e": "chair", "4312d1ab-7ff1-438d-9112-f0ae02a6b91a": "ceiling_lamp", "4c62cc59-5d3b-4c36-b7df-d6dff418073a": "sofa", "054116c5-5a21-43d0-8a16-8c8a341f014a": "coffee_table", "38b27b79-f6e6-4ef7-b525-e3c6b6de2619": "table", "4e98a6a2-3202-42b2-bddd-8e8256214d2a": "coffee_table", "b954d8d8-33db-46b3-a218-bd1079f233a6": "chair", "64daf139-bf01-3270-8280-81f9a4c63b97": "chair", "4ae411dd-cd8f-3b77-acbd-8f4d813d7534": "chair", "5bb155d6-fc68-423c-b648-f8eb130dc8bf": "bottom_cabinet", "434d9ee3-b04a-43c9-a15a-fcc62b716419": "coffee_table", "acc8ecb0-c2b1-4166-9cf2-876c7649e472": "shelf", "6beb1ed3-1077-4cb2-9c5d-59b17cde5602": "sofa", "5f016caa-556b-4cbe-9c17-67d9450f5e72": "sofa", "1e6d01bd-08ed-4dbd-9914-2e24169bf842": "bottom_cabinet", "69c89bd0-41bf-41a0-85b4-6689e85ded32": "bottom_cabinet", "e392266c-978a-411d-8197-5b2049423ba3": "chair", "e933e573-f34e-4949-94bd-7113a37a731b": "stool", "be220e7b-58c3-4812-96a7-d1420e1c65ea": "coffee_table", "013207f3-b388-4335-b2b1-a91dd49be349": "ceiling_lamp", "189c8998-ae86-4b0a-841d-d8fd6818f8e2": "ceiling_lamp", "2bf0f379-3837-4d79-a654-77b505c60e79": "ceiling_lamp", "41bd3ca1-23ea-4a5e-b4a7-990c9e28657b": "bottom_cabinet", "682d07c6-8d7e-40ad-b707-941acdbfad03": "ceiling_lamp", "13d8d8bc-2d10-4d9e-8c38-eaf7f4c26243": "bottom_cabinet", "79094606-e53a-4d6d-9ddf-e1c67ea69e8a": "coffee_table", "39e1fb36-bcd3-3746-b923-8ede74e69323": "coffee_table", "fe245dee-141a-4d1b-a68f-64bf038d142a": "shelf", "eb9d6f25-ba4a-4033-aba1-3ae300cb9825": "bed", "da85fe33-1931-411c-aed4-56e3bad857b0": "sofa", "6270767d-7439-470e-afc3-b72d6a86b40a": "sofa", "1142e999-d856-4320-8c3a-204a67f8dcca": "ceiling_lamp", "5ae13af6-2a53-4fe9-9bc7-4665a206d7d9": "coffee_table", "55215e42-70db-4b34-a41d-fe813fb648cd": "stool", "864f3cca-a9a6-4e47-88a8-ba69e202143c": "bottom_cabinet", "0ae1ba4a-ec57-4f83-a95d-d18d129f9a34": "stool", "80fc4ef8-b495-4d4b-b899-6884518bace2": "bed", "ad639c04-ae87-4546-b52f-6a8dd4267007": "sofa", "18992c9e-25a6-301d-8be8-95b7494e010f": "chair", "839272b7-6b95-4798-bee2-070b10e41f61": "coffee_table", "1cef5e59-b64f-4de6-a54d-a7b38832bfa4": "chair", "591f9a2d-fc46-4d12-867d-00ef9e7728e6": "sofa", "d9e72fed-0b46-491c-b4bb-928972218e37": "sofa", "2415cd43-06ae-48c2-968c-f045a17dd524": "coffee_table", "6fa46855-32fe-4ff2-9b6b-ee04a823efb9": "coffee_table", "a8aac75e-a8ab-4712-86bf-6aebd6f9f4ba": "shelf", "715dbb68-50b3-48ad-81b7-03177b7015a1": "bottom_cabinet", "6b041586-b20f-405b-b044-9ac048f47741": "bottom_cabinet", "bb605b9c-064f-4401-86c9-3c68d17dbb9c": "sofa", "5fc13bc0-a4ec-4d58-b82c-fc9e36ebe244": "chair", "cd458c7a-5d0b-45d9-940f-8971a7b18d51": "sofa_chair", "7e2bcbc7-e16c-433a-810e-87b896f14ca6": "sofa", "80a8ba4e-893d-48e3-a696-04493ddddafa": "coffee_table", "1a9f06f5-0f65-4c0b-981e-48bd51b2cdc6": "sofa", "733c019e-783f-40dc-a080-b7fca7ed34c5": "bottom_cabinet", "8d7d501a-ff75-4c7e-b453-85cf15b05279": "stool", "8434c415-de9f-463d-b7a1-fa4e080c3531": "bottom_cabinet", "7775e100-2d18-40c7-97e7-67cb93aa0512": "sofa", "1b01158d-dc45-4a53-ad31-e246b04c2cce": "bottom_cabinet", "bcf190c8-288a-46c6-a178-c08dae003eed": "bottom_cabinet", "78563000-6c88-4b15-836a-117da26437a6": "stool", "3d74c574-f846-46d1-9d65-6b3fce55e33f": "bottom_cabinet", "4ca5de6f-f111-466b-8c9a-84958d6e39b6": "shelf", "ef6d279a-a87e-49d7-9a37-bdc97835c735": "sofa_chair", "09667226-fd11-43c5-a32d-1d860da10e36": "chair", "fc03ac5e-d92d-4476-96f0-a0359927e831": "ceiling_lamp", "1f2c5a0e-f031-4c72-b7cc-9d60390d1c0e": "sofa", "6a56063e-f594-44bf-ae95-8d5956d4f220": "bed", "963bdd73-7b4f-413b-a914-c9289955fc0e": "chair", "11c1a971-b8ae-4fa0-b939-fabe5d7e33d7": "stool", "d661271f-3af4-4f6d-b752-83b1aaf8ae44": "bottom_cabinet", "7351fd9d-f9f4-4f89-8423-04ddafc44fae": "sofa_chair", "8693a47d-21a4-4b98-a1b4-5e901f379b8f": "ceiling_lamp", "bc3c8ea8-88b7-46b3-aec7-294d14455368": "coffee_table", "c3568155-50a2-4953-8bef-7f1dc248f359": "coffee_table", "448eeb65-841d-4c9f-9893-3f5b87d3bad0": "bottom_cabinet", "8304b3b9-a375-4848-8e6c-8e4adf0679e2": "coffee_table", "eaa65343-42a3-4abd-a234-89a4ba1d40bc": "stool", "05ddba2d-6a8a-47d0-a8fc-90ebf5df2871": "bottom_cabinet", "0fc358f1-924a-41b9-9c09-5b9ec0f71029": "bed", "4f3e6181-1575-41e5-9a9c-50555c7084fd": "shelf", "6fa9f289-ed6f-48d1-a042-68e37b45af66": "shelf", "7d0071e9-6efa-4642-ae9c-dccc6b487a2c": "stool", "ec9eef2c-f4fa-43d2-a545-906d9c81d6f0": "shelf", "c5a5481d-01e1-40f1-b110-499ed9fb05e7": "bottom_cabinet", "4ed03b9a-a3e3-4b47-88a1-b6118f5e830f": "stool", "0bb6108d-d6a6-47f3-8438-5ad6944359b2": "ceiling_lamp", "0dc361d0-d727-4117-80cb-f2fd6cff3b01": "chair", "049384d5-21d4-40ee-83dc-376df57034f7": "sofa", "aa02a1ea-984d-4c53-a1d9-feff7820f41f": "bed", "3937d481-c22e-44e7-8497-ef226bbc402b": "stool", "ac5060c2-1a15-410e-9eef-3762533d120e": "stool", "18b9bc0d-1148-44e4-ae39-62a502a90ff9": "bottom_cabinet", "55600004-6fde-4ff2-b404-c61079616ae3": "stool", "c9a6c043-b4ed-4589-b46a-e2f6cbe1e260": "bed", "5e4e9a80-2bc9-4212-ad61-dee93d3332f5": "bed", "fcfb0c50-5a54-4249-964c-4b8742a0665f": "ceiling_lamp", "73f40afe-b449-43b6-9428-9af7fdc6b466": "bed", "598886c5-12d3-4ae2-80bd-1ca34c194815": "chair", "843c5437-480a-30a5-a059-c643fa9375c7": "table", "140e9aa4-7eb8-48ee-96f6-7f3df354ecfd": "bottom_cabinet", "e922a734-7c1d-44fb-b47b-4fba8302aff9": "sofa", "171e6880-ee7d-42e4-9dc4-5ef59e42656b": "chair", "1cb16b64-2b98-4ed9-b4f8-f698f8cb9aec": "bottom_cabinet", "60f8fd7a-c53f-4fe2-9330-f68095916a6c": "chair", "886c336a-96da-4258-8a4f-575be5b7e2e9": "sofa", "4556a7a9-3cd9-4660-81fe-09edba88ad46": "sofa_chair", "d649c4db-c5c6-426c-bce5-320dab045e62": "coffee_table", "19c1623b-8e63-3ccd-94c4-5c798fc5abcf": "shelf", "dd6632d8-6a8a-452b-b5a7-05aa1caaa67b": "ceiling_lamp", "3b9ddbc6-3288-4214-adf5-2d5b59b11ded": "ceiling_lamp", "4e27ad31-e1a1-4130-83b9-d87aa9bdc4fa": "table", "83e16fdc-a0bf-40aa-946c-e4008f063904": "table", "7ccc7de8-b795-4a4a-b5a6-73101e0c6f61": "stool", "49f3868f-f14f-45d9-8882-3e96ede0ff8a": "table", "4f96b0ad-88df-4180-8068-1909732d1dbd": "bottom_cabinet", "514b1311-3eda-4edd-9b51-b26f24778765": "shelf", "a2270562-ddf0-44c8-8e20-2351a22be3e6": "ceiling_lamp", "0ad968e0-8164-44f8-b033-83f117c59c1e": "ceiling_lamp", "1ad3fb75-881f-4b3f-acf0-1478cb752a37": "chair", "5407c841-c45c-46d3-9442-be979f5eb0ba": "bottom_cabinet", "7d8c51c1-8ce4-4c6d-8451-db5255a46703": "bed", "7de9ffd6-f4c4-4c35-b7aa-a5a1cb7e285c": "shelf", "60233f09-25ec-47aa-848e-6ce2b9400224": "ceiling_lamp", "c25a8a68-cb4b-46f4-b8bb-93564dbb4168": "table", "becff4be-21e4-4e56-9e84-c0974488d21b": "table", "644cde47-1978-305c-8d28-2073afcecda3": "stool", "774c8a66-0e05-4d6a-a83f-46d010b15767": "ceiling_lamp", "837a74ef-0df3-42b7-9777-086c06d5476d": "bottom_cabinet", "15a91839-7cff-4cdf-83d6-0d2d5b44035a": "shelf", "ba495ebb-9dee-48a8-b5b4-348693728588": "stool", "07ec1306-84f5-421a-9905-4643ce04f32b": "ceiling_lamp", "ccbf7902-effb-4d94-a3e3-b5d502f4acc6": "coffee_table", "6e66039a-10d4-4ed5-8195-5a0a39e5708f": "ceiling_lamp", "58833a0e-7b68-4d3f-bac7-6eda1cd32893": "bed", "5eb72ccf-45cc-4ddc-a12d-83555fe07e41": "bottom_cabinet", "16a6651d-6f38-483d-9c97-80349e1ecf7b": "shelf", "b0053651-1075-4dfd-a281-a3546156d06b": "stool", "725b5283-33c2-44c2-a0f8-628e3621e9a0": "table", "fad62cfc-96a2-4d10-bb5c-02b29ab5068e": "ceiling_lamp", "e513e631-e8df-4812-9f01-480e8dc7b2a6": "ceiling_lamp", "9e37d19a-249b-4bc4-b4d1-4de254c70897": "sofa", "5360e716-65d2-4272-88db-aa1bcc3b4b65": "bed", "d789df37-8549-4b60-8992-4b44e698c17a": "chair", "b2bae768-95fe-4fc3-8ac5-f79e6297bc3b": "bottom_cabinet", "18a304d5-8a63-4709-8c0d-65e2a50fe179": "sofa_chair", "2b858658-1f3c-43da-b428-cabae22c8db0": "sofa", "1b5dc129-a339-42ce-a25c-3c114d09da04": "bed", "11eb5631-12be-45e6-9428-dd65e897d733": "chair", "c0d43fc4-9c90-4f8e-876c-87e3952de6d7": "table", "81c358ca-dd9f-4d4d-8e96-664752f15204": "ceiling_lamp", "3bd29e63-e999-48e4-b6be-2e40c7ab8d01": "bottom_cabinet", "2293cbe4-5554-4c3b-a092-09cacb7f57b1": "bottom_cabinet", "cecfc2e1-fef1-414d-8935-bfb897271a61": "chair", "1a1afb21-2266-4fc9-9637-6e62ca61df33": "shelf", "7a733d8e-b383-37d2-841a-f77137a5389f": "chair", "3d8796e7-811a-47a2-93e1-b0fefede22e6": "sofa_chair", "5233e052-8117-31bf-ad63-2958c88cf348": "chair", "76588d6a-62de-3e6e-b6cc-3db856e42665": "chair", "362671bf-ebc0-49cd-a3d6-a91b5d62ecb3": "table", "f1f6fd18-6494-40d5-9fba-988c0734aaf3": "shelf", "0ccc5552-b190-466d-b448-a673d8ba9fce": "sofa", "59842058-dcbd-49c6-b572-96bdd36004fd": "bed", "7c2916f5-3c12-437f-ac90-371206e5d1a1": "bottom_cabinet", "b399d411-411d-4428-9c2b-6de9e4d83c7b": "ceiling_lamp", "008d88ef-c902-45e7-ab69-803b223779b9": "ceiling_lamp", "642ad370-bbb4-4543-b0ed-882b6797c974": "bed", "57391c99-e761-481c-a8ea-fb95ad764fd9": "shelf", "640a587b-4533-4a0d-be0c-cf220447e947": "coffee_table", "75b793c3-4d51-4bdf-b06c-000fee79e096": "bottom_cabinet", "0bc5bcb0-0bbf-4fe1-a38e-16e20434f8b0": "bed", "1ca3a1ab-5cc5-455e-9ef4-20fdc5af03c2": "sofa_chair", "f6e9071f-09fd-4603-ad76-028356d07024": "bottom_cabinet", "f21efcc5-4877-44fa-9a02-2d73d6d077b9": "sofa_chair", "8c348ce1-8f68-4126-8fdc-022843ba0bb8": "sofa_chair", "436914ed-ce9d-48a8-8de2-89c3e4e1d83c": "bed", "61646b5b-0e39-42b2-afb5-bd0448b7c49a": "bottom_cabinet", "5b2418d9-2792-4f72-83d7-d7688a6dd643": "bottom_cabinet", "f4187be1-985f-44e2-8b82-d5653ff86400": "sofa", "ed64ae66-3294-43a6-b94a-6912e770f5ed": "shelf", "142b9425-e37f-433a-b7d9-71586244d638": "sofa_chair", "de94c62f-4352-4853-84c6-63e2e94185e5": "bed", "c83943aa-fad3-4510-9b11-18d36a3b9153": "sofa", "4340c3d3-08fc-45bd-8d50-9ab443fa9fe5": "chair", "478d0b2c-e927-4f15-a868-3024c1e1b2e9": "sofa_chair", "788aaa9b-e7ee-43b7-8970-5b71816fb9e0": "sofa", "8ce582b4-4274-41e9-bd92-87922a3ef3cd": "ceiling_lamp", "650c4656-afae-4bf8-871d-3cd63f52d38a": "shelf", "2c554469-f5d2-4ae2-859d-48a6f172502e": "bed", "ba647a44-7f7c-4844-b53f-85523db90589": "sofa", "71e3dc3f-49d2-4de3-8f15-446de8283aba": "coffee_table", "b2866c73-2d5d-4ad7-b1d7-a8e5285b3d70": "coffee_table", "5c128570-f5fb-4bbb-903f-2a85db20e20c": "bottom_cabinet", "c27448bb-7736-4549-9a5e-2b0031bac8de": "sofa", "8ec2922b-57b1-48ae-b220-9372e31fd4dc": "shelf", "8782ea26-ad64-4b2b-90e5-73d9ab0341f1": "bottom_cabinet", "1dd396cd-9d00-37c3-a2eb-eaef7b2124ac": "sofa", "0da9753a-d2c8-4b02-9e7a-9fb3881f3c1d": "chair", "c295b1c2-7026-409c-a685-c631c2ec917a": "stool", "0cc3d697-b060-4620-bd4f-f85cea2674e6": "coffee_table", "8057e124-bcdd-420c-a33c-b1a07497fa68": "chair", "d1ea81df-39ff-4d50-b2af-f9141239c16b": "table", "cc9b9e89-c910-41a1-b630-8e9ca0e43a51": "coffee_table", "770a3313-2ecb-478f-b38f-e24bf7cd8fbc": "bottom_cabinet", "51a2c6e7-1c5e-445b-932e-f40e10ef3fdd": "coffee_table", "1731bda3-d883-47fd-8224-3f0ef38e82e7": "sofa_chair", "7469de80-fe4a-4443-a742-a01607de8471": "bottom_cabinet", "3bba6426-19a7-46e3-b329-7d9a63f2884d": "chair", "243552ad-7103-4b1f-a281-9fdf787fd344": "bottom_cabinet", "7acfbb6e-80c7-4af9-a0fc-993f608909bf": "stool", "6ec8a921-13c3-4240-a817-efbf3a671ffd": "table", "5a03bb86-b4cf-470b-8cd7-d13c56bc4cd0": "bottom_cabinet", "ac810ad0-0e7c-486e-bde7-2665312a72da": "ceiling_lamp", "7cfc39e8-1e10-4487-93ba-dc811893ba21": "sofa_chair", "b86ebe56-e858-4ae2-bf0e-331120c1a2fe": "coffee_table", "93892797-9bb9-4d18-923e-717ece0ccf86": "ceiling_lamp", "5fccc4b3-2c62-4edd-ac5f-f6a44d6b491c": "sofa", "d0050550-ab70-4a0e-b334-4b6358cf97a3": "bottom_cabinet", "caade42f-867c-4937-b11d-93d6b5f0f481": "bottom_cabinet", "ae8f7363-ae47-44bb-8ce5-083d8654866f": "coffee_table", "46e1f50f-ee0f-412c-ae8e-95d54ea99356": "stool", "79ad3205-54ff-4795-a414-fd8da6e112dc": "ceiling_lamp", "0aaec758-71e9-4087-86d1-bc6df4e4b262": "sofa", "dd8c5173-8275-4139-8022-6509d4c8aae1": "sofa", "7a548ccb-532b-4405-a39b-57e669c55226": "sofa", "8efbd6a1-991a-4564-a8e3-29a778b12cec": "shelf", "b31cc2af-6549-4422-8f96-ec5cd8f0f92c": "table", "df4cc201-17da-43bb-8346-b020da57e6ce": "bed", "71927f8d-990d-4fb0-a1a9-861d97bc4d67": "shelf", "6cb4a725-391f-4b19-b54f-ff4f54bd8b39": "sofa", "447ab0ab-00e8-4964-9a1c-61b910553117": "sofa", "34b24e1e-c3c1-4a48-9305-8143aac5f81b": "sofa_chair", "48db9ffc-306b-4a41-b040-dec707e6f2ba": "table", "41601bc0-d767-47b3-9a12-dc591cceef5f": "coffee_table", "4e904746-cb1c-422b-b150-72732c1481ed": "bottom_cabinet", "2dc16a6b-7c28-42b6-a5e7-b664a3480a45": "coffee_table", "fa83de66-dcee-4a47-8741-1aa668889a86": "ceiling_lamp", "472d6045-1a5a-49d0-aa6c-36f3e048385a": "sofa", "06bef41e-8730-3825-930d-a68f5a783b5e": "sofa_chair", "ed4f7cb8-4b62-41a2-a39a-a72b813d5a7b": "sofa", "3472e703-287c-3eca-a92f-1bf0f9527308": "chair", "b3393f71-2044-4dfb-837e-fbea00fab9b5": "sofa", "157f8035-6366-47f8-bd54-169a721f1077": "sofa", "f7a9e634-d3af-4d90-beb4-c97da4d82ee4": "ceiling_lamp", "3d855406-9af8-4932-b592-22cd48415d54": "sofa_chair", "fe2d616f-561a-4435-a275-23e1fd3da649": "sofa", "f20aad4d-cd84-4f99-8768-5c31baf49465": "coffee_table", "bb4e489f-6a01-4da8-946d-fc08bc67b86a": "stool", "43d6c37b-155a-47e6-bcf6-563735b35c84": "bottom_cabinet", "d0b20d67-e033-4418-a7c8-5c58b8c77bae": "sofa", "428836db-fb61-4207-9af8-468b1a286029": "ceiling_lamp", "b3a35149-1cd4-4e2a-a4d2-2a64bea20977": "shelf", "cd296bb5-3632-448b-a311-219981c3abc8": "stool", "59887600-0789-4e93-9037-16c71938582a": "sofa_chair", "8262ca41-97f9-4aa5-9ce1-aeefbb2e2973": "chair", "55c85908-376a-4857-8c82-829d00c7f309": "coffee_table", "8c88bf88-c253-4a3e-b3a3-53d96a47e873": "bottom_cabinet", "fdd65db5-a110-43d3-a9a8-2805169bd572": "chair", "2abc60cb-5316-4e07-b1bc-0a96be812309": "coffee_table", "25cdf056-9a35-4777-a309-bb8b9473bca3": "coffee_table", "802a538a-247e-4404-a015-54552d25372f": "bed", "ba8913a7-2cc5-4a48-a4e2-dbcaf2e35b84": "sofa_chair", "07fdcaa4-2167-4629-a27e-710f4bec5f11": "table", "a0af99d5-c936-4517-8b7a-d667d608f139": "sofa", "2626645d-4970-4f5c-9cb3-e4b7b9e7790c": "coffee_table", "2c422055-2226-4741-bae7-7853c75c4ba7": "bottom_cabinet", "5354b81e-2f1a-4930-b077-c449f3b32490": "bottom_cabinet", "e8374f92-2606-49d0-9c09-52b03d16a163": "sofa_chair", "050d7d23-7acf-439b-937e-0978eddd0ae7": "sofa", "0415abaa-67b5-4554-aee0-cce2041c377e": "chair", "683c0d4a-4273-4041-80a4-95224188fb84": "shelf", "6d4168f7-f54c-3625-81b9-32f72637ed0d": "sofa_chair", "66408964-3a02-4782-8916-3e3809798e1b": "sofa", "137a8b0c-4428-443d-84f2-b2115ee93a37": "bed", "fd67e3f0-cead-47e4-b402-8449afa1764f": "table", "3bd069b8-ba0a-492e-bf82-e00aa91d0bf9": "sofa_chair", "841d4712-38d9-450b-8d58-7a93a9045a3b": "table", "87e35114-6a80-422e-afc6-75a29e945d04": "shelf", "5407bb09-6234-4026-86f1-da39bc57affe": "bottom_cabinet", "1db58710-b23b-452f-a817-1e170fb12a08": "shelf", "4f76efdb-4fbf-4c4c-a8e9-d139ca6e4eec": "shelf", "3f6c7e54-6cb6-4179-8a59-4a37dfb6fae8": "bed", "1fd17700-6286-312d-a9a8-14920554987d": "chair", "89f4080c-6b2d-46a6-8eda-59434d17ad21": "bottom_cabinet", "127ff985-e915-41a2-9090-71b572c679ba": "sofa_chair", "72111125-c726-3c88-85b7-5935724b5f97": "chair", "6c7bf8e0-37a2-4661-a554-3af2b1e242d6": "bed", "a9c7820c-0454-40ba-8de0-fb47fbe3e230": "sofa_chair", "705d818d-482b-471a-a572-f66ad298b163": "bottom_cabinet", "6e50c51a-0156-4028-be70-5c307953fde5": "sofa_chair", "e2e2f5f6-447a-4e60-b67e-c706af76281c": "shelf", "0311b280-2ba9-47ff-a09a-af573deb74ab": "ceiling_lamp", "5e2799b7-1241-42d2-83fc-402f7cfdb871": "bed", "5c2b4502-8d34-47cc-ac50-22589b794c7e": "bottom_cabinet", "023dd6cc-ca41-4f4c-82f8-67737acd2675": "sofa", "76be547c-a31c-4bca-814c-472f02826df8": "bottom_cabinet", "90a46fc3-e6e9-4d41-847e-dd93cee3aa26": "sofa", "4b3beea9-a1a6-4a4e-9350-5f4b729bc531": "bed", "d91fe08a-8df0-42fa-8902-3fcc781af206": "shelf", "66683da3-98de-4437-beee-bb96ec7cc901": "bottom_cabinet", "8c3b228f-c321-4bf9-8ff0-316daaa5f2b1": "sofa_chair", "45b7b2cb-1efb-4039-a817-ac884273bdc1": "bed", "237d1b27-ca2b-4265-8a08-1db0ef12ab30": "coffee_table", "529ef555-71af-4a18-9c5a-a6a831e6d319": "ceiling_lamp", "78899c9d-7dd9-4e3c-b5cf-98d05183d4c1": "stool", "3fd0835e-40bd-3a0b-95b3-ffb0b9406952": "table", "3a76e18c-eb81-42dc-a9aa-7cb1ef63cbae": "sofa", "ae283029-f46a-4bdb-b6ea-3029af24fa5f": "coffee_table", "70bfd2f5-3ab1-4876-9d2e-9a7d151bc657": "ceiling_lamp", "4379f5d9-10e6-4a37-8195-b6ca38ee5dd9": "ceiling_lamp", "55855465-9e32-4527-b35b-8cd9ba8eadf8": "bottom_cabinet", "631d1d00-4ce9-44f5-8394-7f5e74fdc54d": "bed", "2f4f4b29-851d-3fed-bfb9-292ae748c5fc": "chair", "5648b80e-7b48-44d8-bb34-e47b44d98e67": "bottom_cabinet", "a35ba93a-a794-41db-b36c-989981a0f148": "shelf", "0a0558b1-8c4f-4cb9-97e9-c1c3f08a3997": "shelf", "781acb2f-94f7-413e-83e2-6c18382533e1": "stool", "52cb84a2-cea8-4f0b-b918-e3e428d4e61b": "coffee_table", "877f70a2-3537-4a71-95c4-2d087bcbe727": "ceiling_lamp", "f1133783-0aa5-454f-ab6a-9210880bea74": "sofa", "181085d9-8598-45dd-8108-c9aa2f4bd2ee": "coffee_table", "57621dfe-6be2-3055-9131-df8c062bfaee": "table", "68996a70-1878-3e70-ad1a-86eaadd71b5c": "bottom_cabinet", "ecf6d756-e5f7-4e54-86ff-5595f77ccb01": "chair", "f24feff5-5cfa-426d-88dc-ab21e1f7ca35": "coffee_table", "83f11bb1-69de-487a-81df-4d53208d93a1": "sofa", "0c2f5f5b-6ff7-4d35-bec3-39e6458c7c8c": "shelf", "9f6f8c41-b485-4201-96dd-5c44368d6bf5": "bottom_cabinet", "abc7523e-b680-4e84-9106-eed9f6f0fdbe": "bottom_cabinet", "770657a5-d868-4912-ae84-454daaa16b9a": "chair", "9b12433e-2224-46fb-8833-4bb9fc2ddd96": "sofa_chair", "4d367ea0-5e7a-4a9e-b36d-0ff9657fd813": "ceiling_lamp", "f2f19a8b-743d-4796-b630-7999af80fc82": "table", "55fc377c-1a14-46f2-988e-4ea2a8763421": "chair", "de92ce2e-84e1-44cd-961e-3f981171de6f": "ceiling_lamp", "e92f5a93-5706-41ba-b778-cc5c2654ec28": "chair", "7ad02302-4237-3ce6-81a7-26a7a871905c": "stool", "7d7b40e7-740f-4b1e-904c-fb62fe18d0d8": "shelf", "6f87d8ec-3bdc-46ec-b09c-7370a8878fef": "chair", "7c16c713-cee8-4ef6-8edd-30ee5aa6e1ed": "sofa_chair", "43e28e0d-759d-4913-825f-93d53ea92f11": "bed", "e9624c56-3916-4a15-96d3-5fda56cf0cb9": "bed", "e37b9f43-9b61-48b0-a05e-159590e0e4f1": "sofa_chair", "d831e1b1-8194-4b80-bccf-2d4174c7180a": "shelf", "5642d2a4-1150-4cb6-8577-66d8d1a2a249": "bottom_cabinet", "d69b137f-b3e6-44af-b25f-a1f4f6e57696": "sofa", "890523b7-ddb5-4c05-b82a-464403646e1c": "bottom_cabinet", "019688cb-a0fa-4dbd-8a67-e5dde192e8cf": "coffee_table", "a36e6305-8ddd-49e2-994b-8aa4cb3cd46b": "bottom_cabinet", "29f51e1e-989c-4f0c-b566-840351a187c8": "coffee_table", "6a8d0cad-c517-4c61-af05-d36f86cdf28a": "chair", "dc1eff7b-2541-4296-aac8-f28e0c190dc1": "bottom_cabinet", "fb10bf23-573b-480c-82b5-fdbe28d21e03": "ceiling_lamp", "013f235f-1034-4476-8b32-7282d4822b1f": "sofa", "7dc13931-2c24-3ec9-99fd-d67875b02680": "sofa_chair", "4ffea17a-badf-451f-92a9-935f61a0b5ef": "coffee_table", "49fb3649-6a57-46d6-8c29-16658e7d1d09": "sofa_chair", "1f52b97b-2ce8-452c-a9cf-3e4729fa9a46": "bottom_cabinet", "193b4097-7917-40a0-99d1-ff43c94d92c2": "bottom_cabinet", "31d26191-80f6-42ad-b334-cfc1ac9d371c": "sofa", "5e29e54c-5215-497c-a9a6-a1162d0ce5f1": "chair", "1125b207-30eb-41f8-9164-05630e87f80d": "coffee_table", "a5930683-dab2-4541-b49e-1f0d96bb0ac1": "chair", "6226c8eb-1c45-4eda-bb03-32c395340a4b": "coffee_table", "f3c77c13-9f3e-4a54-9197-064daebcc21f": "bottom_cabinet", "67607957-ec4d-4eab-a76d-857d725f835f": "sofa_chair", "118a44f1-d0b0-4a76-a03f-2ec796642fd2": "coffee_table", "2e622929-fd01-41a0-befb-087ad737326b": "shelf", "e7dead2b-9620-4deb-a49b-cd9c1eedf3d7": "coffee_table", "a94e04e1-611f-4adc-8642-47c4169fbedb": "stool", "3c019f22-6b94-41de-9fbb-99a631a8fb4a": "sofa_chair", "53276cc2-ec07-4b36-9946-5f14d8a38305": "coffee_table", "e7509d44-ff5a-4033-9ed0-6d4f73a43282": "bottom_cabinet", "06cead8d-3a07-466f-a141-4cc4c792d3fd": "bed", "38153b7a-429f-3088-88f0-f56b2602400d": "chair", "48ac9e6d-38b4-43e1-92d6-c3f44ccab9b8": "sofa", "22b3c7ae-7661-49e1-91e0-6dd3b1a06fb6": "sofa_chair", "9439bfd4-9d1a-430a-9c5f-acc038e13823": "ceiling_lamp", "557af7c8-934b-3ab4-b66f-e3562bc06bab": "sofa_chair", "6c7e1f2c-d0a6-495a-8b5c-8197b1d90999": "bottom_cabinet", "0809b1e9-de54-4bb4-b71f-67f25ae21b00": "sofa_chair", "26fcbc81-34c4-4d12-a89d-25fb0df9c8ad": "table", "737e10df-4083-4f63-9d0d-9a78f138be46": "coffee_table", "46d77799-d852-418e-98ed-b5d6797bfc34": "bottom_cabinet", "6fe5453c-1831-4cb2-99f7-14f78df71985": "chair", "569036c4-ebff-4415-aa05-8540e90b6889": "sofa", "b9313455-e3ed-4b51-a5bd-232d453121eb": "sofa_chair", "734721b2-0891-452d-b982-51d62f9d7714": "bottom_cabinet", "36ddb62a-cab7-40cd-8299-253129271d07": "ceiling_lamp", "74897c09-e0cb-4746-a1f1-bd8061bf4611": "bottom_cabinet", "446a01a9-d91a-4846-9d9d-d5263403e9c0": "shelf", "3f308c49-1bfb-4770-8571-a147581f65cc": "ceiling_lamp", "a2c84eb6-8c78-4082-9532-e00350b01434": "sofa_chair", "8e7862c4-2a9f-4e9e-ba9b-04c7503695d0": "ceiling_lamp", "fcd7f3ae-0c21-4230-94e4-3a0e12ebcc78": "stool", "7bd3ed94-ca36-3166-8d5c-e536b2f2a931": "chair", "6697b428-2d47-3340-9ac1-340343afb571": "table", "e39beb94-ce4e-4775-b30d-9faaa6e9b058": "table", "8c2cded0-a94a-4c7b-b5be-d8e31a408732": "coffee_table", "3757821a-3581-48d3-8cac-46a638b84482": "shelf", "d77fdba8-263e-4bcf-b4c4-4c92a72a91cd": "shelf", "64310e42-7094-440e-abe7-caaff3a0c1e8": "coffee_table", "cb8db969-8844-4673-b5db-fe3212f58e59": "bottom_cabinet", "7a36f8ed-14f7-3c35-b080-30c2721f938a": "chair", "0555093c-514c-4558-88a7-e069f5eb0d43": "bottom_cabinet", "131a515f-b042-47f2-87d8-172614306394": "table", "c79e1500-1f1f-4768-ac14-984477a8c042": "coffee_table", "9129c153-38a4-4b23-97c8-90b3b9fc4e06": "shelf", "5561010f-038d-47e9-95c2-662ba8fcaa94": "shelf", "a1e3cde8-6ddb-4e6a-897c-ecf4819761f5": "sofa_chair", "abacccd6-abbf-4001-8323-0d8a9cb3cdc1": "sofa", "4742c7be-149a-4663-8f55-25e06476d50f": "shelf", "18d02c7b-f561-43bb-933a-d788af8d90eb": "chair", "43049607-a7d6-46f4-9c73-3eb56101c535": "bottom_cabinet", "037c739f-4653-41d5-936e-d1d7102bccb0": "chair", "c995be32-e10d-4d5a-a2df-5860163faddc": "chair", "b79acbcb-474d-4d68-a0e9-3f3a507ae9c1": "ceiling_lamp", "1456d6b1-e19f-485a-be95-a0f79ecf2051": "table", "fd76a1f0-0d77-4315-9d88-46be1f9b5b82": "bottom_cabinet", "3f4d9136-8cc9-4b63-a04b-98e2141f964f": "bottom_cabinet", "81e68235-20fa-4895-ba44-2397c530cfcc": "bed", "7c733b95-5fb5-418d-b622-b3d72514d1eb": "coffee_table", "9c3a1b9d-e217-4bda-b6e8-50e637807803": "sofa", "7f50c600-5ed8-4bcf-afac-c29763638a96": "bottom_cabinet", "055f37b8-af39-4baa-8c31-ea11a449be94": "table", "7400940b-2129-43d9-ab09-74c3d83adc97": "ceiling_lamp", "e0755599-37cc-4c96-945a-34cdabb8252a": "bottom_cabinet", "7a01b7bf-3e97-4fa8-be61-da5d161ace85": "coffee_table", "24d58179-b687-4920-8652-a66745d787d7": "bottom_cabinet", "e9b6f54f-1d29-47bf-ba38-db51856d3aa5": "table", "9190da8a-beca-4bd6-ab42-0a0519a3cec7": "ceiling_lamp", "1a42ea1e-7d95-42ff-a00a-bc8203b43338": "coffee_table", "d10e01de-1a0c-4ab9-977b-6a551fdcb78b": "ceiling_lamp", "39a8e6fa-0980-411d-b13f-15699650dda3": "coffee_table", "91aa1fe2-b1c7-4b34-bf47-72b8870a6459": "bottom_cabinet", "e37ac22a-cd47-422c-b725-70fb09d8fffd": "shelf", "617472a6-2db0-477c-a549-6c058444d96f": "bed", "72873f4b-0cb4-41d4-9700-062ff52f545e": "bed", "cca277c5-6a69-42d1-9e28-3bcec3a78ff5": "bed", "be381670-e762-4b0e-b825-9095c8aee519": "coffee_table", "74d3a1d3-7a60-4050-b82a-0132eb97ad71": "sofa", "147224c8-4374-40d9-8242-330cda9e2044": "bottom_cabinet", "612e4bca-7a39-454b-beb9-3dba762dcc89": "stool", "b30c3638-8f73-4b0c-b7ce-39d682058a88": "shelf", "67a54e6d-5866-4ebb-8f4e-2315939d005c": "ceiling_lamp", "4ddf942a-a9db-4b0f-86f9-87f94881f88f": "coffee_table", "571a41e0-015f-44d1-afcc-7d63d167eb60": "bottom_cabinet", "19eb06c7-b5c7-4efc-94c8-7602b5a23a3a": "bottom_cabinet", "781d8496-b299-3333-b2ca-29c5d425567d": "sofa", "2caa7fad-b64f-490d-9bdf-8dc93d3ce262": "bottom_cabinet", "6be90f6d-308c-4f57-abcf-536c0170d658": "sofa", "71677d07-c6a9-4b1c-95d8-72b60a2435ee": "sofa", "52659618-5e84-424d-9d5e-7a6b04296eb1": "bed", "5f48737d-0706-424c-a0ff-41f19ee90ab8": "bed", "1b457472-4a8f-4712-b172-3b8224383c69": "bottom_cabinet", "c0701cd0-dbd5-4401-aaa7-f1087ef77b64": "coffee_table", "d500da56-153d-47a9-80ba-6722b05193d0": "stool", "419f8d5a-7d1e-4762-ad3e-abd968f868be": "coffee_table", "ed6b7f1a-345d-4d23-869d-3ee34716a759": "coffee_table", "03d94c39-cd75-42ad-b298-7f96d98197f9": "bottom_cabinet", "28ad3cc1-41a3-3cf9-81ba-b242b75e06a6": "sofa", "704c2394-c7f5-3c5a-bd4c-bc0cbd1d718e": "table", "0883d358-904d-4e6b-9bac-66ad28c5621e": "bottom_cabinet", "6bcb0872-4280-4a6d-9dd7-703af3487783": "bottom_cabinet", "4e7ac52e-76a2-4b86-a114-10fdd2391a20": "shelf", "807b7caf-fcc9-46f4-98a4-3ee2a7ce87fa": "coffee_table", "2992f7f6-b4d4-433a-8056-9568a080b7aa": "sofa", "2bdc5abe-7b30-4137-ae96-eb71641b944f": "stool", "a9ed597d-812b-4c2c-95c4-2fdd02077446": "shelf", "6f1a3a0a-314c-4c39-b990-dd74d97cb335": "coffee_table", "147c6e84-4be0-42dc-8182-b067d0fac836": "sofa", "72ef73cc-1d89-449d-8651-227bf4012d31": "bottom_cabinet", "4d638e18-d7a9-42a6-bcf0-a171a2dc733b": "sofa", "006cb2b3-e9e3-34e3-9a0e-f93fa04f344b": "table", "1668af72-ceb3-4359-8fc0-1397bcbf41d5": "ceiling_lamp", "ca1f9be7-a10f-4ff3-b4c2-5e16f3946502": "bottom_cabinet", "be5d7ab4-33ab-47d6-9649-31185682579c": "shelf", "eeacf700-56a4-4245-8720-25deaa2ad398": "chair", "21839bde-a699-4bc9-b8a0-a2f3b850c8ef": "table", "d10e4af9-745c-4e53-bd61-a39b49097bff": "bottom_cabinet", "5e0662ef-fc73-49b0-8824-b8dfb5504dfc": "sofa", "ea9dd496-0e86-4c21-bb2a-49375dcf4ba8": "bottom_cabinet", "1d1d342c-71b9-4598-8fbb-d1b1d4c6caf7": "bed", "0074c049-c0d7-46e0-835a-bcae2416b859": "bottom_cabinet", "22eaee6c-18b0-4612-a1ef-15bd2d1b1a07": "bottom_cabinet", "5461a290-6357-41fc-96a6-a7f4c31cea83": "coffee_table", "0b433747-5a83-348f-a967-68c0af86d75e": "shelf", "253e9caf-59f6-4a57-a2df-e559a9b615bc": "chair", "7f9b80ca-50eb-450f-af3a-a0838bb5abad": "shelf", "4dd15ac0-c18b-43d7-81d4-44ec40d8ea3c": "shelf", "0ad7bad9-c1fd-4057-a73c-a6296202a479": "sofa_chair", "133b3428-3227-46e7-8a5e-b58e44edddee": "table", "03950c96-b39a-4440-a8de-846923c8a84d": "sofa_chair", "96c675a4-c849-4af9-8f52-bca18725afd8": "bottom_cabinet", "4b0ea7e5-aa34-4131-b512-d34ef754846c": "bottom_cabinet", "b8691383-7782-4e7e-9198-2475e987f082": "bottom_cabinet", "5ef07e46-a04c-4c68-a7b0-0fe373068a0e": "table", "03ca78e6-7f5a-47d5-b956-b8ae08730b2f": "bottom_cabinet", "6ac7a87f-1c90-4bf0-8195-504538d3cbdb": "ceiling_lamp", "3d798477-2a40-4da2-a6fb-91cc638ff2a1": "bottom_cabinet", "c038d3cf-722c-45d9-88db-45ede34c5cb9": "bottom_cabinet", "fe4b70bd-0f28-4d61-bd69-cc8f3dc3c3b6": "ceiling_lamp", "5807cc9e-d971-44ea-a0e6-a304e3228e1e": "chair", "42de7d8c-69e1-48b3-8fca-f9f3f1c40337": "bed", "7fb2cca9-2458-47a1-b8e8-994852bcd479": "ceiling_lamp", "0075c272-7659-4f43-89f5-8589d2036930": "bed", "fe8f3664-81a2-4378-8125-b7ec392315d2": "sofa_chair", "5f3db3aa-328d-4e5f-a039-3ae371b63679": "sofa", "5bf59af8-b08b-4f04-aad2-08db505f1418": "ceiling_lamp", "2b4823c1-5447-4df5-b997-4dddc8f0fa93": "bottom_cabinet", "17d7e17f-3c37-46d2-b606-2b81f7a1a3eb": "ceiling_lamp", "0960c31f-e79b-4bc9-8cff-2d5575e1fbb9": "sofa", "9040d01f-be51-4e9e-b299-86c92cbdf65f": "bottom_cabinet", "03329697-7726-41f8-948f-9607d0c61fac": "shelf", "9d0f56a7-c2e4-41be-9033-8ac51ed033fc": "coffee_table", "090f33c7-1f11-4200-8b6a-a44e3ccd8797": "bottom_cabinet", "d254f79b-17e1-4afe-ab30-40d32041facd": "coffee_table", "a47ae982-caab-4b01-a6d7-6cb8eba88974": "ceiling_lamp", "80a21ce9-e036-4005-8039-927a719e8e86": "bottom_cabinet", "734b2469-ff27-4288-8bde-f9561bae1370": "bed", "bb6bcfe0-60c4-4e01-b416-ec4bae39c99c": "bottom_cabinet", "06520b1f-f153-4a98-a89c-6561ec40b318": "chair", "c1221b18-80ba-42ad-af16-0abf3eef03b8": "bottom_cabinet", "dd430ed4-f896-4083-bc3f-6b97b143e22e": "shelf", "56ace909-e472-4588-bb83-20fdfb3a1b94": "sofa", "77fc10da-e8c1-41a5-8335-72253865e7bb": "bottom_cabinet", "a0a9f9d8-de26-4768-beec-cf31ff07c272": "sofa_chair", "020186ad-8a54-3b21-9fca-ac8e5cd18b67": "stool", "ece88c15-2270-42a9-8d97-e56296100ff1": "table", "5598a511-6cbc-47ae-8ac8-c7b8fb777530": "sofa", "1b7ee226-90aa-453f-bc11-8ad0110e4cff": "sofa_chair", "69c544a9-6dc0-4ce3-a6b3-e987a6f37a7a": "bottom_cabinet", "8d47cb7b-eff9-46e1-924c-2e33eed6f20c": "chair", "cc9740bf-12a5-4072-88da-f97f18dff746": "sofa", "55560a81-bb16-47d5-bb6a-5c17b3312887": "shelf", "476a97a6-7d20-495e-9be7-e6bcc471fa77": "sofa", "3fece9bb-d525-45f7-be2a-f63b0b33eed5": "sofa_chair", "d77eeaec-ba82-47ec-b69e-b5123b6d2f60": "ceiling_lamp", "b12b4b4f-a0fe-43a7-add2-f95e0eeb1835": "ceiling_lamp", "488c69db-0577-43b6-8824-93c1a9bf0872": "bottom_cabinet", "559ff846-1bbc-45e4-88a5-c2b973653d56": "table", "9abb77a4-2594-4ab2-8feb-02c6a7ef8a13": "sofa", "61afa1c4-5ea0-3a76-a919-bceb388265ea": "sofa", "732191c5-9236-452c-a02c-6cb63f1e2fd3": "bed", "321ae24c-7dbf-49cd-a771-a6ceeff98950": "table", "2b8843f6-a232-4e01-9514-1929e1a0073e": "bed", "c45e62f8-590d-4ec1-a316-94336a2a5980": "sofa_chair", "93e52a11-6fa9-467e-8da1-95b53e3286bb": "chair", "3e622db8-3971-4468-9403-ef8aa4171f88": "coffee_table", "fac74057-7e53-4874-8b61-bc0732d0a212": "coffee_table", "4486a0c5-0c5c-4788-a77f-3c9bdc3204a7": "bed", "6e1efa9c-2f15-4553-abb9-c948253f2929": "bed", "590c3d6d-02c4-439f-8293-44a3420a333c": "table", "db49e6e7-e9bd-4be8-bce9-8eb2e4938618": "sofa_chair", "d4fa7384-8d3a-4651-b9ec-b91f8fb8db53": "coffee_table", "39d7fa5f-1d5a-4537-85ec-409015ce78c2": "shelf", "44b4655d-55ac-41b9-857d-a51255447f70": "bed", "11532ebf-98d0-4dc1-80d3-2909f4aca485": "coffee_table", "60b50da6-5098-497a-9392-073e5747c08c": "table", "4048fcf9-1937-4a23-af7d-6982626ec2f1": "bed", "223ac9d9-7ed0-4376-aeb8-ecf31d563d61": "coffee_table", "3fed7e15-a750-4c1d-b979-cc4258359ff3": "sofa", "71a24a70-356a-41ab-a371-4d761791edb7": "sofa", "850a6f49-9530-4230-ab43-ae33528706c1": "sofa_chair", "418b9718-f234-49e4-aaee-7a78e0ff1ea8": "bottom_cabinet", "7423e139-439d-4675-87ad-0a9221cd03f8": "coffee_table", "28d193d3-6996-4122-ada0-85658c38bb09": "sofa_chair", "6c91c05b-d2c9-4281-91d2-47d4baead8ac": "stool", "bd77218d-333c-489e-a5b9-cf9f9c1a34ec": "bottom_cabinet", "688acc5a-522c-4e59-bd28-b9bfb9809698": "table", "4c9c11ff-f385-4be3-bba4-ccb70ecba2df": "chair", "1518a63b-608c-4cc2-bd2c-37529837db95": "sofa_chair", "22b56773-8cd2-4da9-94bc-baeda184a00f": "bed", "32382aca-a6fa-448d-a82c-63ff517fcc37": "chair", "748816f1-3ae4-3481-a977-18e1511c1c33": "sofa", "bb6cbf83-5781-4689-aa0c-f45063d615aa": "sofa", "b899c743-57d6-4703-ad65-8faf594c51f8": "ceiling_lamp", "790ae6a2-37c4-49e4-a510-0537920a3e18": "table", "65df3dbc-6e8e-46a7-8b77-b025798a85ef": "coffee_table", "80947687-79a8-4ce4-94fc-a5b54a3a22ec": "sofa", "50cb25a5-fdf4-44aa-a9f5-746af15f1e8c": "sofa", "6a272f30-de7a-433b-a778-4c53737b8e5f": "coffee_table", "49869010-7f1a-496c-a0ec-cd159e30ea41": "sofa", "ae063003-4748-4bfe-8d71-527598317fc4": "sofa", "197139e1-54f0-4875-a1fa-d28622dfa36c": "shelf", "79ee00ce-77da-4fa1-965b-1f10aa38304f": "sofa", "c15020e3-9e39-4da3-9a97-00679203579c": "shelf", "3eb21f09-daf2-4060-8de8-23b61957ea90": "bed", "f3ee29d4-161c-4d52-b0a6-f92105c5f269": "bottom_cabinet", "7549a14b-833b-48ea-89a5-8893f67e1daa": "sofa_chair", "0076eaf7-105e-4df1-b6d0-d0d5fd15f576": "sofa", "045d681b-c15f-4e25-b86d-9a759766af24": "coffee_table", "70b30bb6-d938-4874-9aff-a7298c604d21": "table", "a3dc6693-247c-402b-bde6-088b41e2b943": "shelf", "23560881-3f9e-4c9d-9989-611f34036975": "chair", "fa3f26ed-dc84-4819-b5fa-9b4e6c664e6b": "bottom_cabinet", "06ed337c-0db5-40be-8114-884082e0edb4": "shelf", "13a27b6d-74a4-4eff-8766-1ef0f01e3aad": "bottom_cabinet", "2d1906f1-628a-4b9a-8607-47a215e6e671": "sofa", "0b618eb2-4a1c-43c4-bee7-205c5a6a08d0": "bottom_cabinet", "61a32c28-44bd-4c78-b398-7385bc6a123b": "coffee_table", "8092255a-555f-3ccb-b8a7-050b812dd83a": "chair", "4a3c1778-0e62-4071-9edc-f5b52f0c7293": "table", "e6cea7d6-0701-417d-b52d-9759ec66e1bd": "chair", "62ddcbee-7efe-4005-bca0-ea600b8161cc": "sofa", "77022c23-c492-4ec4-8ac2-e617ed70fa5f": "coffee_table", "2a9d64f4-5ec9-4bab-8e99-0d50bf648451": "table", "6208ede8-20e8-486e-8548-1a8171ce31eb": "bottom_cabinet", "7928346a-7078-466e-91e2-5f2a38ed2cf8": "sofa", "0a9746e7-e3d6-439d-a8b1-9800effe330b": "bed", "64424d1b-9ab0-4e98-a67d-0e55f6e246d0": "coffee_table", "02c42ff4-8c7b-4eb1-97e2-b40ed18b02eb": "bottom_cabinet", "6405364a-09f5-4cec-aa54-57c29285c338": "sofa_chair", "20b3cb94-6487-41af-9226-7946cd14ed1b": "ceiling_lamp", "7de1987b-c150-489b-baa7-0cf57f0dcf3f": "table", "c0d1a000-3445-435f-8db4-d701c8d4b762": "ceiling_lamp", "e821070c-319f-4205-a717-23e3740713b3": "stool", "0922ac3b-a69c-472a-91d9-e07b48b68f4f": "sofa", "19f47b83-3a3e-4f63-b9c3-a421468dbd7f": "chair", "2da09b49-7b5e-4777-ab7e-b128ba816932": "bottom_cabinet", "1c4b5e84-7607-4ec3-ac8f-c255134cc977": "coffee_table", "fec2a457-251b-40ad-94b8-ee4760e78153": "table", "bfea3860-6588-4034-8cae-12d94b4df59f": "sofa", "2c33a1bd-778f-4ad0-9439-e65bae1a9784": "chair", "dbcaee52-cb35-46b0-a220-c9bd9dcc8c9e": "sofa", "0c64b5e0-2f99-4c17-bd22-345131e20f72": "table", "b420cdd1-cdc3-4e18-83cd-b22b4a1cad39": "bed", "bf9c9441-6e59-4396-ac9c-8416807485ee": "bottom_cabinet", "022752c5-25f8-4cd4-af6d-c593465f8ad9": "coffee_table", "7f218a39-77e5-4b59-a050-02f6d22ca224": "shelf", "4413254f-8b73-3a49-b71c-5f8bb8876aac": "sofa", "1abab334-35fc-4dec-a8fb-bbe6b46866ba": "bottom_cabinet", "40f6e595-b2f6-41b1-81b9-41d8342ae635": "bottom_cabinet", "2f42f011-9f7b-49a5-b7aa-641b7e2dbe98": "shelf", "13148444-7625-461d-9db4-fae186c8a9f0": "coffee_table", "5f647e91-185e-4daa-819b-4de676e55627": "bottom_cabinet", "5b03414c-a131-4c05-9824-1322521f9c3a": "ceiling_lamp", "2321f625-3721-495e-a83b-fa2f9fd06430": "bottom_cabinet", "012ce7a5-9c00-4af2-b293-cb54c42cfe80": "shelf", "70dd0970-aa27-4365-b15b-a4f60cedbeee": "coffee_table", "40536da6-7369-3ce2-8742-2b86dd33090e": "chair", "5acb3f1e-90cb-483f-aeff-80b9cb3c2bea": "shelf", "4dad37c9-8260-34bd-90e0-30badeb18b98": "chair", "596e232c-b534-4af4-9c70-3d4182df3bb5": "shelf", "664996a4-155e-4096-a7d7-cf6650f02833": "sofa_chair", "7124c2c2-f551-4f3d-9875-8c0ad41f8271": "coffee_table", "aa497e9d-30f1-4b6d-8a32-25cd3d95d104": "ceiling_lamp", "20315f14-fb14-4ad3-90d3-1911c0a98510": "coffee_table", "7a548ca3-89e1-485b-9fc4-507837a37bd0": "ceiling_lamp", "7709ab33-f1ed-4f82-ad5c-5a25183e8123": "chair", "03aef343-b8a7-4beb-a2a5-d58a07761d3f": "chair", "84d02369-3a59-40c4-a38e-2bdf08bfe111": "shelf", "7dd86832-5c85-40f4-828f-a457a24ef17b": "shelf", "68036ef6-c3cc-4a40-9a29-b59db84472f8": "sofa", "a3f6781b-630a-4326-b176-f666cc2eecdb": "bed", "06750943-96f3-49e4-b60e-d95628458afd": "table", "d7a6d2b3-4192-4728-b3bd-c99dcb6a09f0": "shelf", "405a8fc1-9d46-48f8-99e8-ca3ab17b2a20": "shelf", "f69e5c36-8b94-41c7-ba54-c8abce0b525c": "coffee_table", "44674565-5d1d-4773-b12a-27f4d366ebf0": "coffee_table", "3ebc47f7-2d1b-446f-8a08-849562610bac": "bed", "d819ad2b-4b47-400d-8e33-fcc741df85e6": "sofa", "03d02fff-4997-4176-98a7-4880126e1957": "coffee_table", "269b409e-c8bb-4737-8546-0a47ae202cf0": "bottom_cabinet", "00ec4eee-6cb2-415b-ab42-23b92e077cb6": "ceiling_lamp", "3f041025-cfe9-41fd-be52-83c4bb5454b1": "sofa", "af64b95f-8309-4ea3-ba49-e144dfeb86c7": "chair", "cfc2e43c-5237-41c9-bd74-eeae1610dca7": "ceiling_lamp", "f87cd562-016f-4da4-a08f-13debf311708": "chair", "5729adbd-d618-4aab-83db-6ccaf02c4c4c": "shelf", "6441b02e-6d7b-43e4-a465-761edb92b239": "shelf", "6379e340-fa69-4f51-bf10-2a9620ab9895": "bottom_cabinet", "64921698-980e-4f51-a07e-ebafcaebe3ca": "coffee_table", "2059a952-2259-4ce0-a10c-e55e6bac44b4": "stool", "f987e497-087c-413e-ad61-66cdfbc04ec6": "sofa", "61a961c5-804b-4ac7-852a-add6313315cc": "bottom_cabinet", "2fde8ddc-7e0b-4967-865f-dc2e190c0d6e": "bottom_cabinet", "d29c310b-3447-4fed-a240-cd0ea23e12ec": "chair", "708a1e91-8d63-4426-a6ef-d64218fb4bf0": "shelf", "079431be-2e6d-4ff0-8c0e-7b80e764bf59": "shelf", "f8a8bba8-970a-44f3-aa1c-4a6bbeac6c77": "sofa", "2557e1ed-647f-4bf8-84e6-1057f72a39e3": "coffee_table", "29792d36-c2d5-4b65-a03e-bdd1360b4977": "stool", "09dacb7b-65e9-43c7-9642-d36673a126cc": "bed", "47d7e740-92fd-4687-8977-c1baa6cea843": "shelf", "8531e316-2cc7-4917-89f7-c6697f6513da": "bottom_cabinet", "5bfa3133-28db-49f0-887c-1e904ee70eb9": "ceiling_lamp", "3d002fec-67b6-427d-a442-3734aed858d9": "table", "1b5cbe2f-1e06-4d26-9d42-959cbec1ed6f": "bottom_cabinet", "f745c13f-eee3-494a-9206-a90cb530c76f": "shelf", "a6101b2f-ad45-4054-9239-10bb0a1f9a4e": "coffee_table", "3e402a11-d765-4691-848f-ab3f96f85f0f": "bed", "0a4431a4-7214-32eb-88ff-6954da29a2da": "chair", "62893e33-8821-4942-9272-3dca43765835": "ceiling_lamp", "291af851-0bc1-4801-946c-8d812302a558": "ceiling_lamp", "1d4fa17e-fd0c-4722-a0ff-8aa46bd73a90": "bottom_cabinet", "65c3f5e9-fb92-4e27-921c-cc44d711d61e": "bed", "6c72dee5-ad5b-4061-9f57-ff39506af543": "ceiling_lamp", "cd3e8ef6-936e-4654-b793-3133191cb1ef": "sofa", "c8924f25-d350-44a7-8db3-531d735ce385": "chair", "2ef39c4c-d2ff-4378-907a-a26fff4ab1a2": "ceiling_lamp", "054692bc-e025-4cae-8661-b9eab6e9ccfd": "chair", "c3eda37b-cfd5-4c98-868b-cfd7415e5cdf": "shelf", "71507924-b2b4-4cf7-ad97-7c442f8d58af": "table", "64fbe801-fc54-42c9-ad09-bcf7756c4677": "bed", "6cb10f32-1a3d-4356-be5a-6ac50d1e268b": "bed", "c3e9bea3-dc25-4b23-a26f-793bfa8310d0": "shelf", "6c185b06-6b95-45d0-bad2-fea9895e1e5a": "bed", "78f9ba88-446e-4ab0-ac9d-304862f86879": "shelf", "97606825-00ae-4fea-a421-804faeb73d44": "coffee_table", "51ef1baf-47f2-4be4-9186-fffff7d5f2a9": "shelf", "9c460ed2-4d9e-4e3e-b48c-63ddf08bd2ae": "stool", "6cd5fb63-2f8e-40c5-8106-94a112d791d2": "sofa", "e6f4ba87-3b03-4c86-80aa-db75c552980d": "chair", "76dbde4a-37f6-45b8-8f2a-f9aa8c444fe5": "bottom_cabinet", "5ff30d43-0c5d-4a9b-8da4-6b22f9520354": "sofa", "3bfeed24-ef65-45ec-b93f-3d1815947b02": "coffee_table", "4b8f438d-47ef-4bd1-aa8e-b9b13e1c53c7": "bed", "b4a4c789-bc17-4d91-9496-22a4ebbfc655": "coffee_table", "ecbcdfaa-65b6-4170-8a3a-b1c1de6b9932": "sofa_chair", "52be025b-2d5d-474b-9fb5-597b2acf3ca9": "sofa_chair", "3a62779a-2c7e-402b-a097-8d379a23adaf": "sofa", "491e56b4-94d5-451b-b70e-a491bfdb51fe": "bottom_cabinet", "47313e81-314d-4f8f-b530-566efc54d4d8": "bottom_cabinet", "0bca869d-b715-4795-b911-9de38f642f22": "chair", "984f69e2-8aa3-4a3d-98f5-5ff2a7751d76": "ceiling_lamp", "ee10ac88-e99c-41bd-8579-ee0626924007": "bottom_cabinet", "5d0e2d10-8378-4c09-9b7c-36b0a3332808": "bed", "0b8fd0fd-4f20-4d3a-bf70-e20f52b13c12": "chair", "3f9e87db-3d14-471f-8b95-bc0d9751b540": "sofa", "0f010d09-cd9b-3ec4-be50-93299471651e": "chair", "523ab5cf-85dc-4964-b60f-e9b0daad290b": "table", "4600cfc3-cbea-40de-ba7f-3fbd4dfd4d56": "coffee_table", "e16fce0c-4ed7-412b-816b-f5afef2f0922": "ceiling_lamp", "857f3505-5bc6-41bb-8b2a-0eecae6f5b4a": "bottom_cabinet", "7a2fa21c-29ba-462e-bae9-c4319375b608": "coffee_table", "45c28bfb-f639-44f6-bd10-895774536533": "shelf", "6530b06e-6ad2-4033-b061-f127f1460953": "bed", "14368243-4ce3-3bdb-98fa-5a352f19edb4": "chair", "b0972679-bebc-45ab-89e8-f35b006e7010": "sofa_chair", "5d6b0f8e-14ef-45c2-80c0-f951f9d05eea": "coffee_table", "e45dc5d0-b8f4-4273-b657-cb2e05a08ef7": "sofa", "680ad79e-60c9-4170-a8c9-1a81a9c4425c": "bottom_cabinet", "ee6bfb2e-bc0f-4d43-9343-47ff415b3b24": "coffee_table", "6db16164-83af-4223-941c-bd254b4a6598": "ceiling_lamp", "9c3f697e-c3b1-4158-b9f5-9afe733c9eef": "coffee_table", "f8d8856a-5d51-45e9-9fa8-49c074994101": "ceiling_lamp", "879a0e5f-27e0-46e3-bb43-95390ae7bfbc": "chair", "706c1543-1bd3-41ff-9c6c-6a00ccc30163": "coffee_table", "52b81c7d-a623-4c6b-9d18-01ed00dc4885": "bed", "5dd34946-e294-4dd4-90fb-715417f123ff": "sofa", "b93b389d-14d3-4489-b11e-e6f7f60e5190": "coffee_table", "f3cff390-f52f-4646-ae59-bf9a8d32f5d1": "ceiling_lamp", "7ec80499-7403-410e-b80e-b54660c52133": "ceiling_lamp", "3913c596-ce17-444d-a3e2-516fd68a5cb5": "bottom_cabinet", "29d5bbf7-f577-4f5c-baa7-1ed3f9817a67": "bottom_cabinet", "3ce3cc7d-fadd-45e5-8312-0915a357103c": "bottom_cabinet", "5bb9096f-8836-487c-a1b1-e132c124e318": "coffee_table", "a2ac585a-4a8e-442a-8824-bf759e6ccdbb": "table", "22efd2af-798e-4915-91c7-ab5aec1b56ea": "stool", "070c3dec-0acd-3e75-ad61-8ef2ff3972a1": "chair", "25291e3b-297c-429d-9afb-e3b026a0a8c6": "shelf", "fe996e0c-1969-48fa-8bdd-73659d85bd50": "shelf", "dfc77c59-b8b3-4592-9f75-8e5e3b722779": "sofa", "a7380f05-ecb0-4014-acf6-e69ecea2f57f": "coffee_table", "0578c7ef-888a-43f0-aa8b-e248816a40b9": "sofa", "089ac3ea-b510-4235-91b8-cf6d168adf7c": "bottom_cabinet", "d028ddfa-e149-4ed5-87c4-cd9e31d1265c": "bottom_cabinet", "6686ae4b-16e1-40b4-921d-c1238dfc3afd": "chair", "9343fb43-976a-43a2-b04f-b15da9841d7e": "coffee_table", "e53951ec-a58e-4058-b3c6-cd62debd8e23": "shelf", "cef6b89c-8afb-479e-b844-aedc7f1ce19a": "shelf", "78ccd091-a276-44ad-b87f-ed984d24caba": "bottom_cabinet", "59b95376-f918-4700-a253-5d6243f1fd0e": "table", "772e338e-3907-48ff-b695-5d0aa0088c51": "sofa_chair", "2eb00a66-316e-45c0-b762-2c6562eb9cb7": "ceiling_lamp", "3e18af7a-f84c-41d0-8e7f-691e6db4cc55": "bed", "cdbee3f3-750f-49f7-9cb4-167c7788b522": "ceiling_lamp", "6497a976-e87a-47a7-90bb-e69b45620131": "shelf", "43adc992-e772-4763-a7ad-36eecfde3e5b": "bottom_cabinet", "8443fddd-96e9-4b7a-84bd-10768d7f3843": "coffee_table", "80ed505d-06bd-45c8-b4ab-aa28d172bc09": "coffee_table", "98c75be6-578f-4a44-9c7f-4e9148fa3d7a": "shelf", "1da4d744-9c9c-4173-a98a-fa71b5ebd6d0": "bottom_cabinet", "57992c2e-6dc8-40da-b72f-37ded9f01c43": "bottom_cabinet", "e81dc459-9b32-4753-a0bb-09ef0c64f0f7": "sofa", "6616f3c4-6e5c-4349-9a1c-6f4e03e5c1c1": "bottom_cabinet", "611dcd46-d08f-48d2-a935-c90e83be6914": "shelf", "b9328b70-0477-40eb-bb02-a0002db27381": "bottom_cabinet", "76a2be55-eb07-4665-8a5a-19c03aa2f6c6": "sofa_chair", "926d4bf3-2522-46d0-abf2-c6729a7fc017": "bottom_cabinet", "779996fd-864f-4920-aeab-dec65d8156d9": "sofa_chair", "2c0d595f-c2f4-4bf6-b81e-af86475d0d21": "bottom_cabinet", "67606a33-44a2-4f1e-bd05-e2903298cca6": "table", "6a1b87d1-9be4-456e-aeb5-5005614cdc6b": "table", "61825154-0b83-3b9a-acf9-2b4d7e1e9096": "chair", "62108982-7bd2-4d96-9e1e-f1883cef0fa0": "sofa", "db7e29f1-359b-4cd3-8372-d51484da8a6f": "shelf", "28f855f2-fadb-4d8d-917c-44d90ce964bb": "bottom_cabinet", "1a55111c-d745-475c-b3fb-884f7bb102db": "bottom_cabinet", "12c73c31-4b45-42c9-ab98-268efb9768af": "bottom_cabinet", "c1388904-9d7b-4f22-94f5-48e5778ebc4c": "sofa", "6bfd8a50-5063-4b1f-bce8-63fa33ddee35": "coffee_table", "5f2bc214-dc50-4d8d-8c24-16843cedf370": "bottom_cabinet", "e1b8cf75-8dbd-47e5-801f-224c9eacff96": "bottom_cabinet", "446f9903-16a9-4dcd-afa7-f12738865a95": "bottom_cabinet", "c899366c-4578-432d-8c65-bef87b826be6": "chair", "a16eea89-aa75-494c-8937-2a8a7d65b9f8": "ceiling_lamp", "70a7ba8f-0dfb-4690-8915-efb66271c776": "bed", "bbf14626-92ab-47f2-a2e9-650a786e29c2": "coffee_table", "44fcf4b2-748c-4a90-9b32-483850b29fbe": "sofa_chair", "0f5b3d0c-9eb7-4de8-ba59-ec3b7a3e426c": "bottom_cabinet", "0bb806d9-0f7a-49f4-9cf6-495559349461": "bed", "097dcce8-78a6-4dc8-90c9-ef8395e75ec1": "bed", "269eb070-9b47-4bc8-b511-e6d6724fcefb": "sofa", "69386c43-d08e-4f47-b88f-8087541d20c7": "bottom_cabinet", "0629cbd0-8721-437d-a34a-952a9e2b2f5f": "bottom_cabinet", "521b52b9-5024-4ecf-8fae-3a448c205686": "chair", "3afd2355-4ea2-445f-b815-2d142abd0e72": "coffee_table", "a3e97293-0ba0-4446-90a5-952c96b15ad0": "table", "6bb7ac84-841f-4929-a7fc-bcd55bdcdfc4": "bottom_cabinet", "e64a66ea-7f81-421c-b903-3802e0b2bcf7": "coffee_table", "5a7cbc05-740c-436d-9291-33b1f930a6c2": "sofa", "1c757655-00c1-469a-828c-16a4a4e5a9aa": "coffee_table", "476ecc07-d410-4841-adbb-78c357e13bca": "stool", "4953d51c-39a2-42a4-be96-5b0d8362aff0": "sofa_chair", "224ec44b-d2f9-43a0-9db5-0e6336eafb76": "bottom_cabinet", "00c0cffb-dcf2-4a2d-86d0-9d4072d5f449": "sofa", "b9f96f80-07ac-445c-893b-fa02173345a0": "bottom_cabinet", "0b0946c0-3835-4207-978b-c5f93b8c6c71": "coffee_table", "862649d7-4054-4f87-a4ef-4256dfc058bc": "coffee_table", "0125c477-4efc-3cbc-8422-0f80b7de9eb0": "table", "051e058b-d604-4b7e-8bea-bc6dc1d43d1d": "sofa", "22a234bc-ae89-42ea-b091-847019bea405": "bottom_cabinet", "0058c439-768f-4553-9990-557954f0e4c3": "coffee_table", "41d9f67d-7064-4a54-9181-83ea2403dc63": "bed", "9b316b03-aa55-4c1a-9275-39ac09cd4c28": "coffee_table", "5a02164f-8fa8-4b7d-b654-aaf0afd9823b": "chair", "59d0e33d-7c55-4612-81b1-251a71018dad": "sofa", "496400ff-4540-4911-a1c8-a5ace630cf89": "chair", "c3d4dc00-ce19-440a-b2e9-6bd71dddd189": "bottom_cabinet", "007d0585-9b54-4918-87f0-38da23ddecd2": "sofa_chair", "2b9c7121-51cb-4cb2-9475-ae93cc049313": "bottom_cabinet", "74d1f77d-3af6-47ab-a850-1c0a4d439e84": "bed", "49b5e490-cc9e-44eb-a4ed-fde6117b58f8": "sofa", "6c039ec6-9393-4b51-9046-0bbc09dca79f": "coffee_table", "6e331032-ba44-3adf-9019-3342950441c5": "chair", "818ff115-688a-4b02-ad78-9a30539eb018": "chair", "ef46c2d8-c0e2-493b-b759-337d848a95ba": "ceiling_lamp", "86b18e65-1cdc-493d-8189-fe7766b76d40": "ceiling_lamp", "f9f94564-94f5-483c-8879-981613070970": "table", "0fe0f46d-d3c7-428c-a0a0-e18f549279c7": "table", "9be47561-99e8-4b41-9859-21c991ddd63e": "shelf", "de5d892b-107c-4525-885e-53585305b655": "shelf", "994cc393-42b5-480e-8185-a054a10192af": "shelf", "bbf92d04-dfc7-4e19-8fe1-b86312790dbe": "chair", "0cfb3592-473a-4647-8767-475ddad8fff9": "sofa", "280cd02b-0197-4b0c-b572-effb80d8a9f2": "sofa", "42676343-11d0-4f4c-bdab-c59770135088": "bed", "c97da9c9-c3c8-418e-a401-d62b21059dea": "ceiling_lamp", "76436dd7-77a5-45c4-a226-7d4b875429d3": "sofa", "52f2b488-ac2a-4273-9ee8-4b8c17537536": "table", "63c55a89-8f69-3d71-ada8-80c5cfb01e6e": "chair", "0f78b360-17e1-4812-9710-6a53a486de16": "table", "b0f5ab15-ffb5-492f-9241-387546931dd5": "ceiling_lamp", "80b12c00-811b-4be4-a070-de7e56081994": "shelf", "52824459-a268-4a34-8416-6478f7c2aded": "sofa", "c20b7c71-59b4-4377-ae94-90fb68365a24": "stool", "2286f5b7-d882-4c44-a354-e2d795eb7893": "sofa_chair", "58deda98-46e2-44ef-b2c9-13b0239ce627": "coffee_table", "487ef439-405e-49f6-a67d-b9a38ec99088": "chair", "d9333ede-6d96-4f36-b8e2-9c13c6798645": "ceiling_lamp", "852f1348-8a33-3fd6-89a0-a8acb499d079": "sofa", "64961d48-fcc4-4b5c-9c18-642969959afd": "bottom_cabinet", "044d36af-6260-47b1-b5ed-5fbe749c9c55": "bottom_cabinet", "409b7c91-ccab-4131-bd99-2da5320c2ce5": "table", "ac2e38b8-fe04-4a6e-a89d-e5948e210163": "chair", "849584a3-0a9f-4e53-9859-3faf71d6ee2b": "sofa", "b9638563-60a7-4592-9d69-8b03a5a2a34a": "ceiling_lamp", "fab0ea41-c522-453d-940b-adf66bf0f86a": "sofa", "1e68987c-5c7b-45cc-954b-830e1c28db10": "sofa", "9b5bbf71-3ba0-40b0-86e7-b295b23a5e86": "ceiling_lamp", "d8f932e5-b24e-49d9-9b9d-dbedd089627c": "sofa_chair", "c6e032a3-cd3d-4bb2-b4f9-caab2f27a9d0": "bottom_cabinet", "10376a00-0f8f-48db-ab89-ac0bd7180da6": "bottom_cabinet", "08f8b55d-deb5-3163-8d28-d1a0cde2be6d": "table", "59ad3fdf-2984-46d1-a07e-236b33a80b84": "ceiling_lamp", "f2a8446a-00fd-4543-8c74-db2b565adff4": "stool", "0f1346bf-0fbc-4dca-9e90-a6224f6fa012": "shelf", "748ef8d9-1b29-4bde-b8bb-41ec47ee38d4": "bed", "e68fe496-a9c9-4a0b-b00a-1bbc5aab885d": "sofa", "adcaff86-4aa5-43e2-bc95-d7f822f68d01": "chair", "bf861c3d-da49-4325-aa7d-eedcb398bacf": "shelf", "455dad1b-183e-4329-a743-e9fc81ebf6e4": "bed", "2d1aac23-76fe-4efd-b82c-f7be383e1958": "sofa", "6785fcc1-27e6-4fe7-a609-df015e5bfd05": "sofa", "1547d37c-f6e7-43fc-8e09-8291fb4066ae": "stool", "d7e2c96f-76cd-4699-bbe7-c65f7cb8b8cd": "sofa", "fb17ffa2-7ee0-4c65-a86f-c3c9b6c61c2c": "ceiling_lamp", "22da2ff5-6dd3-4c99-b179-b075a35eb3eb": "bed", "f8715e49-72b3-42ce-9e46-86c1f99db085": "sofa_chair", "26514721-8967-4ae2-ab37-b70bfede2873": "table", "3e44eae9-3e3c-49af-86e8-dc21bfc8725c": "bottom_cabinet", "590a7525-1214-49a8-b9b0-585a86c7197e": "sofa_chair", "31c78caa-3c39-4449-a382-7fc65c640120": "coffee_table", "3da1c61e-1dca-4dce-b020-efb217d96001": "bottom_cabinet", "6909b251-4795-4514-abe9-52499e6211be": "sofa", "f0ab528b-13e0-472a-873a-628c834a5839": "coffee_table", "b3f647e4-c603-40ac-97b0-0755fe41cfed": "bed", "9bdf90b3-25a9-452a-86cd-4f51fee4259c": "ceiling_lamp", "abe13e1b-16b8-4389-a9bb-ba8ad3b2afc2": "bottom_cabinet", "4baafa04-a9f3-453b-8c8b-5633de41435e": "table", "4d079123-d24f-41f0-822c-b2140ea44fac": "table", "f389f433-428d-4c44-b0fe-a25c81f7ec64": "shelf", "5d410dcb-6a88-4ef9-a993-c1cff9f05db1": "bottom_cabinet", "412f0245-abe1-4a35-94b1-288796c1aae1": "shelf", "c0756420-7f61-4f93-83ca-b44e99075bef": "coffee_table", "1d44fed8-1f0a-34c4-877c-882d306f37ac": "chair", "3e7893eb-8ffb-421f-b56a-f64f0ce633cd": "shelf", "0fd3efcf-72b5-4552-bbaf-6913e8f3c352": "chair", "1cb65fda-95d6-40cc-befc-5d04ede8fc2b": "bottom_cabinet", "c2aa13c4-04be-4bb3-bdbc-b118feeef460": "bottom_cabinet", "279e224b-8295-481b-89b7-7e6e5981e586": "table", "50282c8f-43c3-31ff-9cd5-bd7c8b11677d": "chair", "5d953b94-1e87-37d6-afca-dc497dacf7b3": "sofa", "7ecdc7a6-6153-4a17-80e8-080c6055d7a0": "bed", "293b0f61-70f1-4e66-b381-70c3cf3c290e": "sofa", "7cb7d3d9-aa6a-4554-bed4-e92d6e8e40c8": "shelf", "2cb959b1-87ff-4b6b-b6fb-ea3a8d1dab36": "bottom_cabinet", "0d46061f-d479-4575-9f31-c48589cc9d39": "table", "0ecff51f-5f8e-4ac7-b28a-d98d19446ff2": "bottom_cabinet", "a69767bd-2655-4aa9-a77b-24f1c7f64adf": "bottom_cabinet", "bdc36c2b-f121-4455-8bfa-2c35871dfc6f": "coffee_table", "795b55df-4a0d-40e9-8458-8af1657637e7": "sofa_chair", "477acb1b-c703-45ed-9e3e-50756027ab7e": "sofa", "d4b6dacb-ad36-4b38-a196-be4a82a19cd3": "bottom_cabinet", "39aa13ff-3ec6-49e3-837b-57b6b2d5f960": "sofa", "08aaba68-e6e9-44c0-97c5-9e76defcf5f0": "coffee_table", "17a16eec-c2de-4063-b92b-53c5204088bf": "shelf", "fe7f9a02-218e-4513-8c34-4e87545af25b": "shelf", "0ebe26b5-633f-42dc-b503-e1ac377674f1": "shelf", "120d5511-675e-46a5-b886-1a31d1a06ffd": "bottom_cabinet", "4715ca99-094f-4b4b-b99a-8c7202e53eba": "shelf", "e68b1384-ad17-41d5-9e5a-d3c998b209a6": "bottom_cabinet", "27ddc96d-8bae-4b03-8fc7-619880bc563c": "coffee_table", "5812b1d9-ebf3-4915-9a39-e37920945199": "sofa", "2b3562c2-03a7-4a81-92d2-e658f31b11b9": "sofa", "e406b2db-5855-4c1d-ad60-82ccfd8f2868": "stool", "1c68f89f-7af0-4d07-b051-fcf6248e9563": "coffee_table", "67f46837-0488-3782-8832-4c27c1bea65e": "chair", "3b98997c-021e-4840-994d-81512494b4cc": "table", "aca90e4a-d361-431a-af5f-8a3ef3fcf31c": "chair", "72dccd01-4f58-410d-8c6f-987f39356749": "chair", "4be08e4f-77ec-4d01-83ba-68c002e24fff": "bottom_cabinet", "43e59ffa-27db-427d-b9ea-91273ff18fb3": "sofa_chair", "d150b794-c363-4de1-841b-581a0e7de3a9": "bottom_cabinet", "2e6700ec-8bae-47f7-b805-8be47e3529da": "bottom_cabinet", "65131084-9406-474d-a15f-4ee23a2ba1c5": "bottom_cabinet", "a779b65c-2f81-4532-bfe9-cee2c56eaac6": "chair", "56052a97-8088-4273-b77a-dc9202eb5124": "bottom_cabinet", "05bd9b39-5166-4730-8707-038fbc78c986": "bed", "ea8a86f4-bcb6-48d0-b129-cfd57a1c57bb": "coffee_table", "47c7dbf8-9e99-4707-a03a-b089fa0a5949": "sofa", "850e13d2-8cd3-49bf-8a65-d183f83e0eba": "coffee_table", "a7ec3e75-6508-4d4d-a467-1db6bbf6410a": "bed", "f76c65cb-2e93-4e45-b582-943ab828748f": "ceiling_lamp", "64227952-d60d-4c1d-8f08-745914b95954": "bed", "d7b7be7a-5ed6-419e-8d47-cfa909735db7": "coffee_table", "1d3ddeb3-afd4-48bf-ac67-146637c70422": "bed", "77fd6f28-1138-42c3-8105-82c0e818ae31": "sofa", "462b185d-114c-4320-bf26-d872abb310ae": "sofa", "346eb388-299e-4236-895a-7a527db53990": "shelf", "446a1b2b-d522-4302-9735-ad2791c07f69": "ceiling_lamp", "bef42425-94cf-4583-9b0e-7d71e8137ca8": "ceiling_lamp", "c4217943-56b1-42e6-a004-65b114ade8b6": "ceiling_lamp", "ed3e8674-d042-40f4-bdc7-423cc63d98b2": "sofa_chair", "8d395ed3-def3-4f91-9173-e243e52ded0d": "sofa", "39358b78-2735-4705-8811-35a255de7abd": "bed", "40a838f9-b128-43bb-8f5b-ee5559ca0cbe": "sofa", "0911df1e-413c-4f2c-81e3-9660926c10fc": "sofa", "d53ffa68-36ce-4241-b9c6-760d132e8a5d": "chair", "5c226f2b-aad3-4371-a3f9-ea2ee9a63327": "sofa", "8093b9f5-835f-42d8-80c3-43e402519a0a": "sofa", "c50d2aeb-6229-412f-9089-9580934f1dcd": "stool", "062d9bec-df16-4fd6-98ad-57ebc1b71753": "sofa", "3f62e5f1-dafc-40db-9d2e-0cf798b69dcc": "sofa", "00c43d91-9332-434c-8170-1ad77f5f2051": "coffee_table", "1e66214b-4c7f-4ce7-9a37-c41dcd7eb98b": "bottom_cabinet", "9f6d32cb-a960-4924-92b3-eaebeafa0a6f": "chair", "e406c699-f51a-4813-87cc-9befd03a3b69": "sofa", "9b644dba-2db0-45c3-ac8d-8b54175e8589": "sofa_chair", "539cbbdd-4a2f-4405-a5f5-2011494583ac": "bottom_cabinet", "07ce940a-2a2a-4bfb-bc31-e23bc38f6ddf": "chair", "286d18bd-dfd1-4713-ba8c-9bb470c06e8e": "coffee_table", "1518ca4a-ebf0-4e7f-90bf-83a589bac550": "bottom_cabinet", "73a85910-2860-49b2-b00b-2ee02d05884c": "sofa", "b89365d5-59dc-41d2-9480-4e042b284d1c": "sofa", "619eee82-a5bc-4d06-9c15-403e63c0f764": "bottom_cabinet", "28bbffc9-02da-405d-957f-1988e5719fd2": "chair", "3e9db45d-9666-4e32-9690-66dfb84ebca2": "coffee_table", "4260f1cf-57c4-4409-9693-531fcfdafc51": "sofa", "17b67419-54f1-4d14-ad37-b1ada00f4d4c": "sofa", "51deae78-e860-4aee-a9a7-0f5c8bfddb5d": "table", "4e74cca9-f876-4811-abc5-54d745e84780": "sofa_chair", "24582f50-e36a-4306-a5d6-c03013fe23d7": "coffee_table", "3d222a55-1adb-4cbd-ab3e-0f36b82db03c": "ceiling_lamp", "0e259558-e927-4c08-8372-9b19688957d1": "table", "551401cb-b56e-4be3-89f6-9a8b3dfe48f3": "bed", "ca08dab6-2ce0-47ad-a597-c3c69ab03c6e": "shelf", "84d77d86-bd10-4185-9b08-a0fdfc242e53": "sofa", "48a77f0c-62cf-40d1-b617-587e30b4efbc": "bed", "72a03ffa-697e-39e3-99d7-b232ddb53e2b": "sofa", "1853111b-fec7-445e-b834-ae4997e1685b": "table", "32bb58b7-743b-40b3-9848-b1c13c7fa904": "bottom_cabinet", "603dedd3-3ef5-4ab1-87f5-fd93182150e8": "sofa", "11a35e5d-f69e-4663-b164-b99492419929": "ceiling_lamp", "6a4e1071-4421-44ad-8e16-f9c059c8a2eb": "table", "544b5284-24ab-4085-9527-62325c3915d2": "sofa", "87a4cd8f-06e2-4b10-9086-c462edaa9c67": "sofa", "ad4fabfb-d26e-447d-8088-7ae71ae6552e": "bottom_cabinet", "b0e7e16a-35fe-402c-864f-5c96d6889cde": "ceiling_lamp", "d559efac-6999-4439-ba44-88bf0e973544": "stool", "0a876e37-2979-3a9e-8dba-e307462fdda7": "table", "6bc9a4cc-08e4-34ae-904d-f5e7c8867566": "sofa", "81e24ee8-39e1-3831-97a4-a389679e3a0e": "chair", "277ccdab-ecc1-4e27-bb04-e971e7d538c7": "bottom_cabinet", "aa887227-4365-4950-a559-8042a9d379da": "sofa", "ab94bb57-2f95-4090-8eeb-f9dea82e3289": "shelf", "4f5aef43-e6fc-40e3-bdd2-6fc1a5c1b9ee": "shelf", "2b3da3e2-901c-442b-957e-954619d933ac": "sofa", "6217e2ce-c016-4f05-bf2d-430a1108ccd9": "bed", "c5108085-0047-4db0-a300-c44c6c3723d1": "bottom_cabinet", "52d45e8d-127b-4bd8-b1fc-d5217856af3b": "shelf", "b390b695-5ce3-4de7-9753-ca4b45fde3bf": "coffee_table", "128135d4-1a6a-425d-b2d8-3ffeeb692ae0": "ceiling_lamp", "34a5b5b4-b2fd-3bc6-8637-561616a163a6": "table", "052065aa-8642-4969-abb0-98e429eb4360": "ceiling_lamp", "76fb0a4d-eb99-4c88-ad5b-b2f40a72426e": "table", "1ceec1be-2c14-4d19-afac-de93a03321c2": "sofa", "96d948e5-ae2f-464b-a4e5-17936bdd4b2e": "coffee_table", "5dd46e7e-7425-475b-88c6-736b17fda9c6": "bottom_cabinet", "f359bfc0-b006-43c6-95b8-49980a14f14a": "sofa", "808eee53-1193-4903-a12b-6cd9ad837af7": "coffee_table", "40d203c0-5ea0-46ab-9213-a073aafb192b": "bed", "4948b9f9-bc22-4682-99f1-5703fbc9b458": "bed", "2dc70dca-b773-4a78-a6b2-5a215273ae18": "sofa", "511ca9b2-4849-4eea-a48a-a9374edc1968": "bottom_cabinet", "1079ffc4-4203-42cd-a881-9c36137d6e9b": "bed", "ce02906d-dc0f-416d-b673-1212e274999f": "ceiling_lamp", "02ee277f-5c0e-42d9-8174-34a6205a3ef5": "shelf", "47212f24-4bce-47d2-a2fe-ab3e6c9158b0": "coffee_table", "d9047545-2d36-41a5-83a6-58b152bcd786": "sofa", "cfb03ca0-a999-4e9f-8db1-1f6caa667aa8": "bottom_cabinet", "438078a4-92a5-4248-a7ff-d5a46799b955": "chair", "8f9a5eac-4837-4868-86fc-06a92fafab8d": "shelf", "1f3392c9-be69-48f5-8f8e-c0af53ee7a9c": "bed", "6e6ae029-62ff-4f0c-8f8c-42a1db699b45": "sofa_chair", "2c7d302b-d750-48cd-97c9-e13f6da9c783": "chair", "7cccc3c6-589d-4997-b130-16f370fa8d81": "bottom_cabinet", "24277836-46fc-4e83-9372-d43f8d2c8387": "sofa", "04ec5533-0048-46c0-b52d-2950d9abf323": "shelf", "47aab5cd-73dc-4bfc-ba36-15f35168b51f": "coffee_table", "5f9f6640-7006-4c96-a1d8-eb6f0d13fff8": "chair", "c93a298c-e769-446c-bb8e-83ed98320181": "bottom_cabinet", "0b7dfb5a-03f5-44b9-8cdc-591efea5f003": "sofa", "03c297d3-c451-3ae2-b310-cf4d493a6a3a": "chair", "138916bf-5068-4922-bddf-455be830b853": "bottom_cabinet", "7c562d19-717f-4b7e-a961-4b04d042a224": "sofa", "8a7ad4d1-7f2e-46d5-b0a5-8debd800e222": "chair", "4db035bd-3603-3ae3-98e3-b3e8c61dbda7": "chair", "45113567-caf1-3757-8b25-fcb18504b64f": "sofa_chair", "9ec3b578-c1f6-46c3-8fc4-08aeb8749fac": "table", "47ffbe6b-d081-4f8d-801e-ba0fb6153a01": "ceiling_lamp", "0acc134e-65bc-4b68-b836-c591935bdec6": "chair", "5b064413-e20c-4579-aed0-e591a9e86f32": "ceiling_lamp", "7ce3cd02-6734-456b-b13f-88a4a553252b": "bed", "57f7e7c0-8ca3-4eee-b127-5a44c76a9a61": "bottom_cabinet", "e186be0c-8ba3-4b13-b324-78c6a0e3eca1": "sofa_chair", "0188e055-34ac-48e5-ae53-3489fbc47328": "bottom_cabinet", "34c387e7-626b-4b6b-9ccd-21f50ab1e1b6": "bed", "3fa94918-af18-4916-98ef-5df6ed673db5": "coffee_table", "3d9950f3-d678-4705-9544-5a48c3cb5e6a": "shelf", "69b9f034-c557-43e2-94bb-fd742cf57a77": "coffee_table", "1c648cfd-6eca-4a84-af58-b62a3a4d173a": "chair", "71255f80-7280-3555-a566-a1076389c3dc": "table", "4ca6e261-d6c9-4bc8-aba7-570a7c5c477c": "bed", "a61408cc-a2a7-4132-a440-7e002b81efae": "sofa", "1c5b15ad-aba5-4804-89c5-7fc30e562931": "shelf", "2a2e98e8-78fd-439c-8cc6-6a92dec7d1f8": "bottom_cabinet", "5f6ef37d-5525-497b-87f3-b6cce3d5f676": "bottom_cabinet", "28aac113-f859-4e71-8ea8-63e7c18cdaaa": "bottom_cabinet", "e20992e8-7b0b-4367-996e-e88375f37a9b": "coffee_table", "a9926762-1690-441c-b11d-c47181f309df": "bed", "689463e0-f435-424a-bf21-9f7d8c876632": "sofa", "59c49e33-ce76-45fa-a310-2ad3e97a73a1": "bottom_cabinet", "3e39820c-1095-466d-af99-9d87e7c7907c": "shelf", "00e2173a-9048-3ee9-b02c-86fb88b14ad4": "sofa", "2cfeec8a-fc3e-44fd-b368-bab20dfa6c33": "shelf", "ac47f2a6-0cac-4648-b698-0233c34f7f70": "table", "0e011eab-116b-48ed-bff3-217dd74134ea": "coffee_table", "f19a4050-ae11-4f66-99ce-13a576ec63ee": "coffee_table", "5badaa53-ecaf-32a0-8fcf-de91daf19fe6": "sofa_chair", "fb17273a-ea90-4c7b-ba02-06dc63a95604": "bottom_cabinet", "e70ac069-5476-45dc-b5bd-53e7d6338564": "shelf", "8b7d2814-3d01-4359-9947-f7203b99091f": "ceiling_lamp", "c04c4c9a-30f0-46ef-b541-7f16f1c1b5c9": "sofa", "57cd5fa8-de34-40f9-a614-c36e1fb9cddf": "bottom_cabinet", "71cc5c99-c363-4782-b7ff-2faf45de6af8": "bed", "e9d87768-d768-4d5e-80e2-a8278b1b338b": "sofa", "06bc6193-058e-4183-8981-fdad7b5c5507": "sofa_chair", "c63fd353-cd8d-461c-99e4-a80a83fc00b3": "coffee_table", "38ef2f93-8af1-44c4-bafb-8ae6e6622d3d": "stool", "72bfeae7-61de-4129-b9ef-1f23b912ab5d": "coffee_table", "3f819689-ad91-41de-9418-b228b184ad01": "coffee_table", "0fee7a5a-5478-4c0d-af5f-e6dd0159bf6d": "bottom_cabinet", "14330155-30eb-460b-ab15-58fe6fca5d5b": "bed", "6aad9e85-2fe2-4005-a901-b41697b96a7f": "bed", "c46d3093-8589-438f-adfc-6f481c203c0d": "coffee_table", "1fdc7c64-be84-4a2f-aee8-80c315e902fc": "coffee_table", "b07abbd1-22cb-48ca-8f0d-47b5ff0924cc": "ceiling_lamp", "6d8cb6d1-1ed9-4af9-9249-ede2906b0834": "coffee_table", "9bb3a083-2b92-491b-b5dc-a4514f2ba56b": "ceiling_lamp", "8f1f1817-89c5-4729-abe2-d4a806241456": "ceiling_lamp", "6ddcaa37-e965-473f-aca5-d5ce218e757a": "bottom_cabinet", "259ffa6b-ab5f-4974-b880-cccc0255ad17": "sofa_chair", "97c76c43-bb65-4f05-9f16-d67695f8f397": "sofa", "8e58fb02-90a0-42af-8f99-2ec9556061e4": "bottom_cabinet", "7f3277c2-9e5c-40c2-8b45-c4436fc147e6": "bed", "1cd6e42d-5ab6-3b3a-b009-40e91404d44f": "table", "06d581b5-5fb7-42e7-8903-2406d513d1c7": "bottom_cabinet", "38549bd8-8b13-4ba9-bd07-ccc282b10e83": "bed", "dd17e4d3-7038-41d9-85e4-5742cc82986e": "coffee_table", "ae10e0c0-cd42-4f10-ac2e-6a39152d9162": "ceiling_lamp", "65a49e31-1bb2-470a-9f55-01e842a49cee": "sofa", "08eb8501-2902-468e-b3a6-6e31e423edc2": "sofa", "5f06224d-307a-4d16-8a1d-9e893b2bb87b": "chair", "858e25f7-b5ba-4f5a-acb0-f5ef714ca4df": "bottom_cabinet", "8b0dad02-3ca9-4b41-a8b4-f476f27b25e8": "bottom_cabinet", "3f85c43c-b568-4e21-8c7f-7806e513c099": "stool", "7dfc9af8-27f3-4d65-9c56-e5f84b8a0d6f": "sofa", "d2717b6d-5894-4998-a7e2-fcb5b81f2d38": "ceiling_lamp", "0dbd0e22-0e25-439a-8472-fa3cd394c9ad": "sofa", "bdfa3934-5614-4e78-b514-1422e72145c2": "sofa_chair", "172c35ee-d2c1-4176-8201-67b94892bc3f": "sofa", "1fc1d19b-87b5-4d16-8cfa-69d642a37dba": "bottom_cabinet", "2d97a5e7-75a3-42d6-ba9f-545d15ac7a0c": "sofa_chair", "e0505826-d306-4ab4-b521-882523c917d8": "bottom_cabinet", "8fe935cc-88c0-402e-b419-021f7dab656e": "stool", "a5942497-91fb-479e-9afd-779b9cb469fb": "coffee_table", "bda4a699-2966-41f0-a12d-fe49a330eef4": "ceiling_lamp", "7628153f-abf1-4569-8829-6004cb29cd0b": "sofa", "0c3f2528-7b8a-451f-8aad-3a0264eb1fb8": "sofa", "17316e7a-6008-49c1-88ee-bfc409885a1a": "coffee_table", "1b0777ac-4d5e-4f61-b103-2ba2411549db": "bed", "4cd4b03e-f857-4576-ae81-68d42d4f6500": "bed", "40e5ff75-d988-40ec-92e3-cb3ab899da83": "sofa", "819a7ad3-3945-3848-b380-9be5ad6a420e": "table", "04c2b45f-2148-45c9-a597-65f5e295cd0b": "ceiling_lamp", "0c3d3ac9-f9f8-3002-ab41-d3753ebd970b": "stool", "b3b7e415-b77b-4dc5-8bdf-7673a00f2b0d": "chair", "4220d3b4-88d2-3fd2-bc91-c55a1ff0ced1": "sofa", "d0f44fa3-1cf1-4cbe-ae92-1feadb36258b": "bed", "f32d99cd-42c0-48f2-a484-686d093bb466": "chair", "44f07dce-c460-4b4e-b8b0-aaeab02b46cd": "chair", "1fc51a9b-ef9d-3acb-bb6d-9abd155cf3aa": "sofa", "c435cc5e-9755-41c9-85ab-e803e85d86d4": "coffee_table", "41ff0656-d9c7-42cc-a431-e6d2b23081ae": "bed", "9a7c4a80-b79b-42e5-9a4e-8ad6fd2da77a": "coffee_table", "7531c5eb-894f-4baf-b745-29e49b5239fa": "ceiling_lamp", "0a06d217-39dd-4d9c-8685-4926da21abf3": "ceiling_lamp", "2c0a99cb-b1ef-46e6-b553-a3648794c0d7": "bed", "6832992f-56ea-4eaa-a7a8-a97ce55d59bc": "coffee_table", "ab7b6d2e-f0bc-4920-90d4-9f972a6e6db8": "table", "a474c86d-ab78-46c9-ae20-8693a48fb396": "bottom_cabinet", "2cef68b1-0d36-47cc-863a-640a65d547e6": "sofa", "44d7529c-c2c6-44c9-a0f5-5759e210a957": "coffee_table", "cece9bf9-5306-4727-ab59-f6411676fdd3": "sofa_chair", "5c19e757-5134-44cc-adee-6831e74096eb": "sofa", "24397ff7-b6b2-4692-b506-71db97a6d81a": "bed", "9ebebacb-1565-4e04-98e4-6fd15dcfcd30": "sofa", "edba419d-3616-46fc-9917-ec26f246da54": "chair", "8ad2e04d-cc04-4582-af59-41b82eaa3039": "shelf", "096b167c-78fa-4ea4-a839-89629a076a8f": "bottom_cabinet", "ec7533e4-557a-4f24-8200-a26e977363be": "bottom_cabinet", "6f99d15f-0ff4-40b9-a49e-7f5ac23519f9": "ceiling_lamp", "e1f5ee41-c42d-4c24-844c-c3093d3ef3da": "chair", "26b439df-fba5-3b38-b6c5-bc6a4c1fb0a0": "sofa", "bb9242fc-b626-468e-b849-2f0b93c683e6": "shelf", "148d2b3e-8b52-4610-9ad2-a583ddd41735": "sofa", "727a59d9-8a55-4f5e-ae3c-55ef1f7adc79": "bed", "6a20719b-c911-4fb5-9873-5103e0ff5dce": "bed", "dcc0d9be-f097-4c42-9ad9-ce7289cb2a00": "coffee_table", "0b6b6c39-4388-41d7-ac61-265e567c75e8": "sofa", "ce8e11e9-b0c2-4076-9585-29e2b1ddd87d": "bed", "02ec9206-7267-45c2-9fa7-2f738586542f": "coffee_table", "d741142f-53e8-4b53-8e21-cb05db7981bd": "ceiling_lamp", "2924a537-18e9-428d-9922-ab1460e1f58b": "bottom_cabinet", "5ba9e800-ee53-4eff-8cc6-ba73b55e2cab": "bottom_cabinet", "d9595bce-2715-4965-85cc-5956b1169dbd": "table", "300c9220-a845-47b7-8050-207265fb44c5": "shelf", "2858fddc-7b35-4fb7-9eb8-78e7194b34f2": "sofa", "e12f66cb-4bf5-4f9e-92dd-1cc9407f85c8": "bottom_cabinet", "211361fc-1db9-4d5e-8a0c-f79751519a1a": "table", "04b8f221-06b7-42c7-a762-780898b8f7b2": "stool", "7b3232a2-1f5d-400a-bcd9-daec4da68410": "ceiling_lamp", "3dcdb2ae-6e3f-407b-8122-e70e42b2eab2": "sofa", "52614a91-6257-4101-862b-54e4a20b7422": "stool", "7bf721bf-8839-4343-95c5-b6e852805ad1": "bed", "52f6a224-a4a5-3ac2-a7e1-23c799f0f33a": "sofa", "bb397616-a53b-4731-a171-b365d572bafe": "bed", "19d684d8-49e5-43d2-9b51-95a328b10038": "sofa", "88fdd335-d975-4c77-bf41-722973bc0f4b": "table", "24bb8530-2012-4c89-8c6c-b89eb993b072": "chair", "4a5c3ddc-7e08-4d57-930e-87ab143d37ab": "bed", "0a90b536-0604-4488-be8e-61f4d38014c5": "coffee_table", "06fa510a-de04-45f5-b54b-d1ddacc27a4b": "bottom_cabinet", "819e046e-91e1-4c13-a827-720fc775859d": "sofa_chair", "816680d7-7bc7-4264-b451-33c24f0a2174": "bottom_cabinet", "7a1f4069-0253-46b2-8be8-a93ad0a09355": "coffee_table", "8138ddfc-d618-4ae5-b76f-1fd40bcfe58a": "sofa_chair", "8b089f0a-3600-4932-845c-74c8c680cf7f": "ceiling_lamp", "4309c121-3bce-4a55-8dca-7dd5a54513df": "bed", "07c5d97d-c953-434f-9c6b-ef710159a8f5": "bottom_cabinet", "b5c2be8e-ab60-4cb8-bb59-abf7d26cef40": "coffee_table", "5a26dcc3-f0bf-406c-b6c7-cc52e2154e0c": "sofa_chair", "fa90fa64-0a7a-49c4-96f8-530fd880c3a5": "shelf", "246f667f-ed18-4a87-9751-bd6b078a7ed2": "sofa", "a939be24-9c3d-44f9-b713-e74ddee892df": "table", "c49a5bcf-1419-4b1d-90e8-71335389e550": "coffee_table", "2de026d4-b7d4-4ac2-931c-b256fba2e059": "chair", "619a822d-dd10-49d2-8ede-94aaa700984c": "bed", "ae8020c8-8084-40f4-baac-af8ae542aaaf": "bottom_cabinet", "67b3853e-bdf7-4f39-9a52-0165e540a79b": "coffee_table", "758b7302-a6c5-4281-9939-2eebaa6ed2b9": "chair", "cde8a26c-1ec9-4444-9f89-f0ed2156f6b8": "bottom_cabinet", "0da7563e-ddd6-4e67-8e4f-e5f7f7772108": "coffee_table", "55235cc0-4d6b-4d69-8145-d0018023dabb": "bed", "aa5d6f54-98dd-4204-8350-a80b6f218df8": "chair", "45a280bd-6586-4752-879b-bf671cfbfbf8": "coffee_table", "252d3179-b10c-4f66-a15d-cb43e84bc675": "sofa_chair", "167bf773-7de8-48a5-bb5c-d58345130ed7": "ceiling_lamp", "a717108e-362d-4b90-823f-1b590b3e1638": "sofa", "6063cc59-ff2c-4c3a-a58b-f6aad91157f9": "coffee_table", "803d908f-6f5d-3138-9bce-87febbd42e5c": "sofa_chair", "7ec57ec0-f033-43af-9713-0be6943843e3": "bed", "df7eb50b-47db-42af-9513-3a2cdca11138": "shelf", "a73e4832-ee52-46c3-a6e4-a2249db7f793": "sofa_chair", "8396f9e8-020d-3f12-aed8-f3c03f1afc25": "chair", "d764f12f-755c-40e2-b7bc-4fc2e9e3f9fc": "sofa", "00da6e71-e633-480c-9102-5e1f5423cf5d": "ceiling_lamp", "9f3034dd-984c-4621-b10f-87e77e5a1020": "sofa", "258a8e6f-8aeb-44f4-817d-5de493bb21a9": "sofa_chair", "6f2fd9fa-4696-4420-9cf0-386347ef1515": "shelf", "30943e24-eeba-44c6-8f46-eb86c4b187fa": "chair", "77298766-32e5-3e79-970a-35fbed132ccd": "table", "639d65ed-a275-4f06-94e0-ebaaa3bd5d86": "bed", "527c0abe-71d3-4129-9521-d7a618f172ca": "sofa", "ce962157-8182-4d60-9d4e-5b6a35324d36": "bed", "abf6ffbf-c6d5-4b1b-ac86-e1743d4430e4": "ceiling_lamp", "3b92b678-a005-40aa-af39-8d5ec22dd0d1": "ceiling_lamp", "213f605a-eec9-4832-85b6-8a4cde08c4cd": "bed", "7f340c08-c1a5-43c8-915c-364ae43458ed": "sofa", "0f3a2591-85c9-4b63-b3bf-8ced7fa2a843": "shelf", "158c6274-e688-4147-9d49-5ed5155b8c30": "ceiling_lamp", "78e30bd4-f86b-49e4-904b-672cedb887e3": "sofa", "2b34acc5-526b-4a6f-a4a7-ea1bea9bfbe2": "bottom_cabinet", "c889966b-a66c-4484-9a10-12e521c1555c": "ceiling_lamp", "4d1bb8ba-381f-4944-935b-29a015bb619f": "sofa", "22877321-a17c-4e5c-a741-0b17ad75d3d4": "chair", "66541ec3-6b0c-4de4-8b67-c15b8063913b": "table", "4994ac08-4716-4741-a656-fec52f79eec6": "sofa", "cf1b305a-818f-417e-bfa9-0dba25edff8f": "shelf", "f350c1ba-8040-4750-9e6e-f45cfbf916a4": "bed", "7ec7761b-f803-4062-ac46-05d7eb771020": "stool", "19035101-21a1-4495-ae95-90d8d1ccd108": "bottom_cabinet", "4fff0d90-6b23-4321-b9a0-ed974b23ee97": "coffee_table", "0f57a6d3-b79d-4005-b67f-3818637e8c0f": "bed", "2abc7203-96f0-4323-9c68-b329de367474": "sofa", "196b2b95-2b39-4fb1-8fd4-14b5a2ab5ff8": "bottom_cabinet", "a19ecc5f-8e37-4b4d-82f7-0a0710ed03dd": "bottom_cabinet", "1c1382fd-5526-497d-b73c-c75fb431fc5d": "table", "29d59e13-e812-4d51-8a62-c575ef1e9458": "coffee_table", "8d36ee59-4316-4ec5-9aab-b03242410ffb": "sofa_chair", "3ed8b0f2-68be-402f-a320-4996be9abeb4": "table", "b669c249-8016-499f-b389-d9f3f42a3a63": "bottom_cabinet", "0c075bb6-83b9-464d-9220-820e67274c05": "bottom_cabinet", "0be706f6-4326-4279-8e09-7ad7177b9c3c": "sofa", "d811913f-1255-4f61-8646-6cb1a6b64151": "sofa_chair", "86106205-3d91-4f5d-9064-297dadf61d08": "coffee_table", "49de7550-9378-4f68-81f3-de1dbd7281a0": "shelf", "e68047e8-6f14-4908-8c5d-46e6dc057a61": "chair", "b0497bbe-cdf7-4ab0-8b5c-714ea8a3abb9": "ceiling_lamp", "742e82eb-83e0-40e1-8cf1-f445ad831703": "sofa", "0737c1e0-1376-4a7c-867b-d2cc813922fd": "table", "93e8be7d-0f5d-423f-be8d-3e54cf1fbaed": "ceiling_lamp", "2bf217bb-d8d0-3693-a06f-9bec9a3ac8f6": "chair", "183da335-3641-49c3-92c6-6d3bde30c4db": "bottom_cabinet", "9f0bb3f2-f8bb-4cbc-9ba2-9d1f3933ce69": "ceiling_lamp", "98c3a8dc-12b0-451b-90b7-2da5e794de2f": "sofa", "26ab6047-002b-443d-9c07-793edd23e893": "sofa_chair", "98ebdadf-0fc2-4245-8c40-d5c7db5e56ba": "shelf", "d54bdebe-984f-491b-9767-ea909a6966eb": "shelf", "d7c59b53-313d-43bf-a712-f042efe58d99": "coffee_table", "578224e1-3072-4b25-b5fa-f67acd9136ca": "sofa_chair", "bedc24b3-00e4-44dc-b102-d642b4677895": "sofa", "4386c8db-55c1-4e04-a713-f11315eabbff": "coffee_table", "fcf6e2d7-7215-46e9-a957-73f47accebdd": "sofa", "284277da-b2ed-4dea-bc97-498596443294": "chair", "db597b90-0780-4340-8708-71db3f4b55f9": "table", "189a8d02-410b-4c15-898b-cbe706235c60": "bed", "175c3581-d44b-432d-b417-2202780ecd17": "coffee_table", "9a0cadcb-952c-45f8-b9ff-fc696b3a5b8d": "shelf", "d9f7d4e3-3c09-40e9-9b3e-7d39ee79ef88": "sofa", "1e762459-504b-4746-86c4-16a75fee0c5a": "coffee_table", "0dc42694-5351-491c-bbbd-0673e4900dd6": "coffee_table", "833ebdfc-650b-4470-bca9-55ccb1861f32": "shelf", "bb77b52c-806a-440c-bef2-dd11a69bce25": "stool", "fe39a502-4349-4ab9-a8f8-471557d3dc29": "sofa", "a05950c1-d397-430a-a84a-f186f6e26b7a": "ceiling_lamp", "662f2103-0631-4618-8aa1-8afbce4968ca": "bed", "474fa09a-647b-4828-9ab2-6f5894f966df": "chair", "65939fd7-81fe-41be-ad82-ac1b2e306560": "stool", "6458c103-7613-425c-b491-6294f65e1d53": "bottom_cabinet", "d673e433-609f-4f69-8a08-780a89795757": "table", "083a7a9e-641a-4c8a-a684-a353d10ccfc2": "table", "2be3d20a-f8b5-4d29-b821-8b00bd3e425c": "chair", "08389a32-693e-41f5-86ca-2fbe14d49a3b": "sofa_chair", "ef95daa9-89ba-4b05-9594-40257e0e9a0f": "sofa_chair", "0ddf811b-7cc6-420b-aee4-90b335012f4f": "table", "34defcbe-6f8a-43a1-a385-cdb6755f295f": "table", "0b2cf6c9-2464-4219-8233-198a1f29776e": "bottom_cabinet", "042badc0-128e-4abe-8ce8-5fe3e538b4fc": "ceiling_lamp", "aed7216d-f364-4a12-8b0c-421bb7438cd7": "shelf", "0266e4a3-26e6-44a0-8259-f5d05befe81c": "sofa", "447e7b39-e2a9-3857-b889-1088270d771a": "chair", "616e7447-d3aa-3919-aba0-d4a6809fcee8": "table", "a331f264-48f8-4304-a9c6-f5426f5aa51b": "shelf", "981ea3ef-dca2-4eab-934f-3b247585d9c5": "coffee_table", "65d15d52-b6f5-4ecc-bdd7-bd044ae3a95e": "bottom_cabinet", "45ac0c68-6109-45b5-98dc-456f579113c0": "ceiling_lamp", "5654d23b-b5db-4746-bafb-fef701cdbe53": "bottom_cabinet", "d47b027b-cf6b-409b-be35-aa7ab0203534": "bottom_cabinet", "f8b74702-bfc1-4b83-a135-7ce30d23f527": "ceiling_lamp", "8650549b-8b7b-3195-b85e-d6f104935dff": "table", "98ba3852-91b5-4d51-b29a-8e0253b4dcad": "table", "0fa76181-70c5-3a77-be66-eeb7e2368fad": "bottom_cabinet", "14132991-8e49-45ed-82d0-f48ba5903b8f": "sofa", "b74eca44-dbd8-4f28-a11a-ff514f86996c": "chair", "7848d795-4c75-40aa-887e-073529c3fa10": "bottom_cabinet", "ad6c9cfb-e61f-4e14-bca3-777d00a8dbee": "bottom_cabinet", "91ff0272-bd21-4915-8fa9-21dcc3088268": "coffee_table", "6898badc-cf55-3bbf-a498-cbfd128c698c": "table", "7875b4cc-6b7f-403d-b2e6-964c63e63343": "coffee_table", "01dc4d95-41d5-4602-a099-10a1ede9303c": "bottom_cabinet", "02a64bc1-70d6-4da7-98c8-19038cfe95ec": "bottom_cabinet", "1b6ecc74-a53f-4130-9435-6945256ec225": "sofa", "52a12fa9-5024-43de-8acd-1ab9acf26b56": "shelf", "30e7d74d-1989-4cab-b5a3-d4345c9654e7": "bottom_cabinet", "ab9f4f35-4a0b-4f6a-9bc2-ffbe57705edb": "coffee_table", "ce00c57d-7a1b-4b94-b93b-0fd7dafeeb9a": "coffee_table", "05929327-fc23-4b20-9741-b94c24c2932a": "sofa", "5d133cfc-f99f-4fc0-b5c8-a45a212e1de6": "coffee_table", "4052c199-a88a-4327-9cd5-7bfd2ce9100d": "coffee_table", "62117100-7bc5-42c8-b8ce-626d46400970": "table", "780d5b90-9cd4-4ccb-9b91-90d333a01a60": "bed", "2e815c2a-94ee-43a4-a182-7eeeaff16c48": "coffee_table", "299d19d1-7ea9-4293-9111-a177c61b8545": "chair", "8ce53b55-e134-4a6a-950c-99ac6e14e6bc": "chair", "14dabc5f-d720-4651-b0c6-9366f1e56360": "ceiling_lamp", "2b9049ed-ce3c-4e7c-993d-bdaac379c5f9": "sofa", "566772d2-93d2-468d-88f3-bb76cb106d8c": "coffee_table", "c0c595fc-888b-4e96-9a9c-5118a2ffa254": "coffee_table", "3182c059-d339-4ac0-87f1-bfbccfb3a9ed": "bottom_cabinet", "27b4ca36-2df0-42bd-8f52-b12efe735536": "chair", "4bf63403-5701-4d34-b5aa-07de863aad0e": "bottom_cabinet", "013e03b1-98e4-417c-9609-b132c92094fb": "sofa", "60698fbd-8409-4d94-b5e2-6c2476864f84": "coffee_table", "7197b946-9549-4df7-a0fd-5b89f1cc09f4": "chair", "9c3fb391-b0b2-4df6-944a-d9e859de2d39": "ceiling_lamp", "65e724c5-4988-448f-9587-29e78f6b65d8": "table", "2b6d628b-8615-405d-aa45-46124cae7213": "bed", "098262d7-13a8-4e32-b4de-2d021a770029": "shelf", "59eb8be9-fb11-474e-957e-721ba1b1d491": "coffee_table", "5a916a3d-2f7c-3b5f-bd9e-e1f7e51961d1": "sofa_chair", "69f0e57d-a0ae-3d14-88a1-061c2a1a8bc8": "shelf", "0654977c-00ef-4c03-bc5b-084d98f88612": "ceiling_lamp", "3b9c922c-2257-3a04-a382-ae23b4fdec13": "table", "79a43b72-d1db-4873-8eb1-09a7e93d5842": "sofa", "efdb0067-0e99-4db1-802b-8f4694fa3cb9": "bed", "aa12068b-9f9a-4fb3-8fcd-b70f22249e9d": "table", "70f3d11d-a240-43cc-afe6-8b641a6d9823": "bottom_cabinet", "76283d41-6726-4b7c-85d1-9779741c8539": "coffee_table", "e22e6b7c-ede8-4021-a395-16eda100bb70": "coffee_table", "3fd7dec6-20b3-4b6d-8115-49a0472944e1": "stool", "f43310eb-270b-49ec-aef9-11103921b224": "bed", "75abc26b-5348-42f1-ae37-6dc6b8ab3377": "sofa", "e40f2a24-f9cf-48c0-89bc-b71b795c3d5c": "bottom_cabinet", "b33deb5a-4a01-4e2b-be82-3f4a5ea98fac": "chair", "56016410-a544-45b4-8b71-7a8a34e9f265": "sofa", "e86c03d0-53b1-49df-918f-ad6cc1c437c0": "coffee_table", "b2110add-eeeb-407f-b7c1-eecdf697aa84": "sofa", "c0400f98-e68c-47f2-84ee-c760323486ec": "sofa", "f8f39965-5c5a-4079-a3bf-0f5b5153ac6a": "sofa", "738863fd-155e-415e-80a5-45b17e2c3cf2": "bottom_cabinet", "b5c60f50-7e44-4d76-8866-13a85cdb5b74": "stool", "395703a4-ba72-4f9b-a0de-9d9fcfb17159": "bottom_cabinet", "8114c27f-5daa-322a-8a49-dee253a81e60": "table", "5b9df1d3-7bf8-4edf-ab16-8139e5e2c11f": "bed", "5ddb0d99-5ed5-3489-af65-7c1ed3626f30": "sofa_chair", "7995a7fb-f901-4eb9-958f-ba37cc37f827": "shelf", "27a67198-1d19-424c-ad83-623386e48fbb": "chair", "f2eb0d6e-85da-4511-abf6-68f3079665d3": "ceiling_lamp", "46fc8baf-b028-4069-80bf-3de526309963": "bed", "709e101f-390e-4bd0-9f43-fd1689c834fd": "sofa", "feef7fa8-de52-4fd9-9bce-38c9750378d2": "table", "79dd4777-c925-4a73-933f-5016c353ca6a": "coffee_table", "47d2bec4-7605-41c1-a316-2c1206ea383d": "sofa", "cae612b3-ea54-4f07-9df3-47ef82aa2de8": "sofa", "4dd99418-d4cb-4b1a-affe-d022495cd4b1": "sofa", "efc0ad60-ff78-43c4-b824-f347c3f2cbad": "chair", "b143c4bc-2f4f-4729-97be-6d509734b09c": "ceiling_lamp", "8ce4a7f7-d2e6-442e-bf80-7beb738486df": "bottom_cabinet", "0e1517db-dfa3-485f-9ccb-45a2088b011a": "chair", "8c9586a4-6dce-49c7-a3f8-415e3eebf113": "bed", "d567a5a3-afc6-4d2a-8f7d-9d5614ea3cf3": "sofa_chair", "0a2378ae-4042-4411-91cc-5e9d868ec63b": "coffee_table", "a788be97-952e-455e-99f2-b998ab873acc": "sofa_chair", "1a8e0879-55bb-4eeb-984d-b1ffa2bc44ee": "sofa", "d0ab249c-830c-4f5e-aa0f-3fa975c93c95": "coffee_table", "1e226ede-517a-4bc2-806e-aa5b8a0bdb78": "sofa", "91c70485-7fbc-454c-93ce-124e59ffbdb1": "coffee_table", "7898e53a-7395-483f-9694-66727298b472": "ceiling_lamp", "1573812c-d11d-33e0-bfa5-2ba29b32f55f": "table", "0f4227d2-88a2-4c39-bfd1-6d8603c9f0eb": "ceiling_lamp", "1e85357c-97cc-4d7a-9c76-1eb285807849": "shelf", "09b1579d-74e0-49a1-b247-56f66f076006": "sofa", "99bf7309-d542-4111-baf8-019506103c9f": "table", "10e65d7c-09a7-4192-b016-43aac97d139c": "ceiling_lamp", "c922708e-0db4-4ad3-a225-04a7a2a7500a": "ceiling_lamp", "eceec9a5-be0c-47a9-a168-a541a3eee215": "coffee_table", "be434854-faee-4d0f-a948-84818b44a4f7": "sofa_chair", "43ba505f-1e4e-41ce-aabe-b45823c6b350": "bottom_cabinet", "62443957-1c5a-425b-9527-3f2fed78eb12": "sofa", "e4c41bb4-dbc8-460a-8f45-a4c63b06774b": "chair", "4fa07778-81ac-4522-9a9d-8ca9f2f55cc6": "table", "55a8c415-70bb-4874-aa05-de73f4e976db": "shelf", "7833b0da-a1f4-3c79-8608-4c9b11f3efd3": "sofa", "4ad68bb5-b071-4777-8669-30212d494e4e": "sofa", "1f7e9f56-c6ea-441a-816d-a4546230b783": "bottom_cabinet", "99c67388-82ea-470f-824c-fc5035b66ae5": "sofa", "fd3fa0d2-6621-4379-9d2a-046bf6b25e62": "coffee_table", "f2904fa2-ff2f-4b50-a136-c9a5dd8496c6": "coffee_table", "21e0b94d-aaf3-4ef8-a004-f446e9c0dec9": "bed", "1f04134b-e388-4630-8f9b-49a549397dcb": "bottom_cabinet", "842dd2a1-f34c-4411-9bf4-8887fa5ac8aa": "sofa", "1faac20f-0b8d-4632-8ef8-844ccb3b4375": "ceiling_lamp", "7bff0ce0-c1aa-4604-b7e2-cdd4d1fdd80f": "chair", "77dcc4f8-98ae-43aa-994b-c1874f9a00b7": "chair", "f08e6d50-fdb1-47db-a243-e05a308a3d92": "bed", "0da850e4-3dac-469c-b3c2-dee8713c3e5b": "chair", "eb611801-95d7-4fa6-8e12-56cc473e319d": "sofa", "5adbb127-4932-482e-987b-8e9137112a3d": "bottom_cabinet", "166bb241-756a-41d9-8397-b17b23cfe7de": "coffee_table", "93809fdc-38d0-4bb6-962c-83d8c90e6682": "chair", "1f99f669-6844-4e5b-8a21-1b10b4f154c0": "table", "28ca9bd1-e10a-4c41-a580-9654e8a6d06b": "coffee_table", "56067f71-a8f6-3b86-a473-f3ebc13947a2": "table", "383f2172-6382-4629-a54a-0480a8793622": "stool", "956a804b-0348-4722-a693-7fb3c42ca627": "sofa_chair", "f51cfecb-1a80-49bc-8312-dcd2c5a15e0d": "sofa", "186286b8-93a9-4da6-bc7a-8002a3dc9204": "sofa", "a7e7f3f0-774d-4e24-9c1a-15cc64634ba6": "ceiling_lamp", "a2843527-230a-4a2e-9054-7623f1edb592": "ceiling_lamp", "7337b046-99ed-4320-b0f5-6c5076fc2e46": "bottom_cabinet", "58995980-0d81-4c5d-95d5-e78f16e18964": "coffee_table", "94b412c3-6cbe-4dc3-848a-08b1be142d45": "table", "e6bd21d3-4e04-4288-82cd-e14e74d3371f": "bottom_cabinet", "118a46ee-7a10-4fd5-838a-e4bdb9939a38": "sofa_chair", "53f70c7e-f3a8-4a7c-9b23-b697e78fd125": "shelf", "fa43582d-90f7-4b53-8c0f-9d9a8ef6e264": "coffee_table", "e8377393-7872-423f-a4b7-286b5489a3d7": "coffee_table", "404b6c7e-5c72-4167-bcb9-3dc347997552": "ceiling_lamp", "a6ccdbb9-f0ac-4931-8a56-9e186cb3ba8c": "ceiling_lamp", "987da1e6-eccc-4f43-a911-55ef1cd7c5d0": "coffee_table", "e1810cba-0bcf-4460-b3ed-39e741d12c40": "chair", "ff453a14-c904-48bc-8b79-410a55694cbd": "table", "08105e17-9e57-354d-b6e2-22c2ffd287ae": "chair", "d659fa13-00cd-4d3f-aaa3-8f903ebcefab": "coffee_table", "12c01371-0ab7-4bf1-939a-461982b78e83": "table", "db75393f-2248-44c5-9cb3-16a451a5941f": "bottom_cabinet", "7aeeeedb-d586-429c-8ba4-8f80ddae02bf": "ceiling_lamp", "dfa244cb-7980-40e5-82cc-c9e29a543802": "ceiling_lamp", "b99335b6-10e9-471d-acf1-e167ef80419e": "sofa", "3818dfe8-0127-44f8-af3b-6d6742a24f30": "sofa_chair", "ac31e601-ca70-4ca7-bec1-6ae033370398": "shelf", "2c8e4321-b9ca-4d71-9168-15c85f860667": "bottom_cabinet", "4ed16fe5-6e95-49f8-bf35-f536f10d34a9": "sofa", "143368b6-f9c6-4013-b24b-ef638dcb8f30": "chair", "0f49ec5a-5bec-4edd-98ac-abb7039b8e3e": "sofa", "431f43ba-a46b-499a-a764-6755b6f90634": "bed", "7c358cdd-5a8e-33be-a949-b288eb5ca080": "stool", "0fdbc33f-7c4e-33ef-8349-284361e6cf93": "chair", "daf40b43-40bd-4e53-9acc-119fa93f4b77": "shelf", "14acad2c-8b8a-4ed8-a083-718cbeb4d72e": "sofa", "ebcb383f-0a48-4714-9dac-b39e05a6a903": "bottom_cabinet", "b684d542-d55c-4751-bc9d-9c3a971cdd5c": "shelf", "aed9e91e-bd31-4699-8d10-bfb354af6ee1": "bottom_cabinet", "d33f4cbf-bb69-48cd-94b7-334d0ea644ba": "shelf", "2465c974-4398-41e0-9a2b-dd073d94b260": "shelf", "4f9b3021-87c1-4754-97bc-ffdae9278fda": "bed", "45015f90-242f-3ce0-a78b-37b3fee5df9c": "table", "eeec8ccc-2909-407b-bd92-7e6c560baaff": "bottom_cabinet", "065ce67a-19e8-4a6e-bb60-a23e64d214ee": "chair", "40eb7172-370e-36d8-a79d-5485e3df0da0": "table", "4779b09d-b40b-4c97-9bdd-a743e3bdc66a": "bed", "218f80da-41a8-3112-8a82-4f74012f4361": "sofa_chair", "5b41309d-6818-490e-ae38-ff695263ad2d": "sofa", "d23f1e0f-e453-409a-a190-64fcc467a7d6": "shelf", "796140c9-fab2-4d2b-9c6b-1493fcb4dc3d": "chair", "084713b6-e700-403d-a2dd-8050c5df1416": "bottom_cabinet", "dc82b2cf-008c-4055-baec-efff0040f3ae": "chair", "234d0e19-e0ba-457b-b01b-304a7029c324": "coffee_table", "305588a8-3874-4e78-9d2d-05ca3b426a2d": "sofa_chair", "1b53087b-d704-4e2c-b8e4-b842c04b5124": "bottom_cabinet", "0ac24c3f-9d22-4585-8101-5fb158a5425e": "chair", "f741c7dc-be51-4e60-b173-31c982c7f18c": "sofa", "64665ed8-e8dc-4a58-b529-c0318daf9428": "sofa", "047464cd-5011-48fe-b229-fb36a71ba9f6": "sofa", "20b9a2fa-2146-4a2e-9652-86a64e415479": "bottom_cabinet", "2a17cf5f-ec24-4ee6-87fa-a504712a45f6": "chair", "449e0248-fda8-4ed6-9078-6da052da19d0": "sofa", "79b58fc0-c0df-3405-ad20-8c3d51581bb6": "shelf", "7e42325b-eaed-4929-9002-84cdac7f1d9a": "stool", "fd051811-ca26-48ab-80ad-78a8a1ca7822": "sofa", "2c76bb70-3db3-4971-b6bf-6994701f93bf": "stool", "de36c11d-4ca3-4819-8940-78de5eb81e6d": "sofa", "a14cc963-79d6-4475-a34e-69b8d729d149": "coffee_table", "86048a28-ad43-4957-b37d-2217f0c10211": "chair", "8c08edb3-513d-497c-8380-43e75f0e7ac3": "chair", "4a1bca02-fbe1-4d5a-8ab8-73cf01b50396": "bed", "7ae7e6d1-db4a-4615-956e-3fb72e374068": "bed", "17fefd05-26c2-46aa-8dde-155642ebd129": "shelf", "aad4424d-e7f3-4559-a380-27eabcda4112": "table", "5e07415c-f8f3-4c15-b30b-cf8fd34312f0": "table", "2a06c499-62e1-490b-b102-c887656ca28f": "stool", "614265f8-7f8e-421e-a125-97c58b82e02a": "bottom_cabinet", "c0ab0567-80cd-49df-9bf3-625b82753d96": "sofa", "13430054-6b72-4d11-98db-a45a5b42ce4b": "bottom_cabinet", "ddef48db-000d-4614-94c4-67ce114bb0e9": "bottom_cabinet", "4cef0011-b611-4309-825c-d644af9667c7": "bottom_cabinet", "ca051e8c-0402-4400-b02e-6aa3fc6b89f9": "bottom_cabinet", "22c6b203-3c28-4716-8d62-e15004acd8cd": "table", "0a544415-f0ff-4f8f-b0f5-7e43312807ec": "table", "38a0eb5c-4858-47c2-88aa-aeae16a613cf": "sofa", "b63d2ebf-36b4-4a0f-8c80-3cb2fa8516ff": "bed", "47d40cd4-1ae6-4dbb-87f4-cf0f715eeff8": "chair", "22c1b237-0364-4c1d-b9cf-83296265aaf9": "bottom_cabinet", "92635bc5-153d-4f6f-88e2-fd3e7200513f": "coffee_table", "1ccf7503-24cf-4127-a545-3ffceb6b9bc6": "coffee_table", "9d02356e-4491-44c2-ab71-3a1d2dd51364": "coffee_table", "fb15b296-cd83-438f-8260-7fa4161de9f7": "ceiling_lamp", "eb603ea3-2ff2-49e4-ac13-62ec51df98a6": "ceiling_lamp", "5bc7a57c-4c5a-4bfe-b377-2709bcd02a95": "chair", "82b311cc-e33e-4402-b631-e951740e998a": "coffee_table", "0700a450-c65f-4e4c-89b5-85bfb76cc8b8": "shelf", "2cff958d-5385-4554-9ddc-597a56a49886": "coffee_table", "2cb84b41-9cbd-4224-b7e8-acb34573d020": "bottom_cabinet", "0a3d54c6-c030-444a-aa33-4ba6db9110f6": "sofa", "1c5e4480-dfc6-444e-9aab-b8075b0127a3": "bottom_cabinet", "4de374ed-e836-48e1-824e-6d1ddbe438ec": "bottom_cabinet", "266b2811-09f5-4eea-a552-bcf65375b755": "bed", "04a5173b-47a3-311c-80fa-925bc924b296": "stool", "a8ae90b2-02a0-4bd9-9dd0-724fca3dce07": "table", "4b40568b-0701-449c-99e7-37645669bdd9": "coffee_table", "33c25d3a-2758-4fde-936d-a4665a606318": "ceiling_lamp", "c671816b-ef3f-41f5-a18c-5b2aac4a0f15": "coffee_table", "97869792-3bcc-4cbb-bf32-1065ce976dcc": "sofa", "c6b5cd1a-3e5e-4499-8d75-69562e7826a0": "shelf", "9c16c6ec-f124-4c8d-a3c3-694b1b8a2244": "bottom_cabinet", "66ef4624-3459-4589-9c49-7f0368c467d7": "coffee_table", "67690c71-9680-4ef5-9a48-79296a4dfbde": "sofa", "664fdc2d-3247-4424-97ad-2d8d66367404": "table", "88980778-45de-433a-8266-31daf7295686": "chair", "58d90d89-23bf-4e58-a62e-34390202d000": "bottom_cabinet", "553d4b43-1517-346b-9ba0-14efa2c68d14": "table", "98d79c07-d61d-4849-9a96-78c9c1ab0466": "bottom_cabinet", "80abf09b-8c3e-4025-8c1e-5e518eb11594": "bottom_cabinet", "1ccd78c6-5826-4450-8fa4-e251ee103e53": "sofa_chair", "c430f507-2b43-44f5-9f4f-2244900cb4ff": "ceiling_lamp", "768c0f66-5062-4bbc-9140-d8fbd2346c63": "chair", "76e7c3a9-8667-4095-89b7-0f6092343c65": "ceiling_lamp", "68a38341-eee4-3b17-ba1e-9096451d74a8": "sofa", "5c2f1032-2e00-4e7e-8cbd-c9e871346337": "ceiling_lamp", "27d2fbe3-91c3-4521-a2bb-3386e7fba42a": "bottom_cabinet", "6ae66fb5-1231-4217-8326-10ccc372098b": "bed", "8ef8c764-2b68-42b7-8624-71381d87f14b": "sofa", "6421e7af-f99c-47e5-ac20-1c6b1b68ead0": "coffee_table", "4ce252ed-bd40-44f6-92fa-f6e13f73f545": "sofa", "6170b3c0-e6ca-45e0-a539-11c6dd063672": "bottom_cabinet", "10219887-d944-4d18-a2b3-d43376b0b089": "stool", "e4eca056-8cf3-48c3-ac4b-9901c53c0b9d": "ceiling_lamp", "0dd1a2fb-d656-4408-a1b6-54f86785e012": "bottom_cabinet", "24e0fbde-6fb9-4312-8e48-2b01531e46c2": "bottom_cabinet", "cb14810f-5a60-4565-b45d-6ff4fdba6155": "sofa", "5eea9ea7-f143-47f1-97d9-3fb4a3a98703": "bottom_cabinet", "dbb2c59f-f13f-4579-9b81-28df2e11a0da": "coffee_table", "9a504de5-e8fe-4414-9c56-adc46438a5ba": "sofa", "65c3b1ff-a0dd-41f1-8f00-27633cb33902": "coffee_table", "293a53e3-09ac-4041-881c-49f0f751ddf4": "stool", "87941f28-6bc6-4c51-8143-9d6695c618cc": "ceiling_lamp", "58611f22-e2b7-479a-8ff4-186926c28a2e": "bottom_cabinet", "6c217555-bab3-4a04-99e0-694e48ec7339": "bed", "687de1ef-6f28-45b1-ba81-bba9546c719d": "coffee_table", "1bee9d53-59c1-313c-95b1-0098998d74ec": "chair", "6ced1032-d38c-4f35-bd6b-1db28ee2b8b2": "stool", "4b8f4ab6-ef15-4338-a6ec-7419db16382f": "chair", "6fc88555-621a-4163-ba73-1207b5f6dad0": "bed", "d55c9a2c-d5ec-4045-ae76-b3e1f69e770b": "shelf", "26df8f51-1552-438d-8da7-a1213f6640b2": "bottom_cabinet", "7609f402-54ca-4d06-9551-93e16da368e2": "stool", "06cab26d-008a-4063-8602-965e21304ae3": "bottom_cabinet", "95bff1a8-1fec-439c-bf0a-fd33a15f6283": "sofa_chair", "83c55c72-174e-481e-bf89-d5497477ec18": "bed", "1d5e6679-71c8-4604-b554-db30f29cd5e8": "sofa_chair", "4a9b3bbb-1910-4c91-aedf-bf035b9f8f2e": "shelf", "32c85da7-b64c-4fb7-b890-d3f94268e16c": "ceiling_lamp", "d67f36a9-eb5a-4980-a8d7-a94f470de352": "table", "52fba740-b148-4e7d-a837-23b7570e11c8": "coffee_table", "10d8b28c-5bdb-4e06-98b7-666404ffcf9d": "sofa", "5c142ce1-10aa-49c5-8142-e364dbfb0548": "sofa", "803d34b5-0502-408a-8e23-67042ad90548": "bed", "996ab5da-dd34-4635-a505-d230c5b08a52": "ceiling_lamp", "b88860c7-c936-455d-a41d-1f6772afb376": "ceiling_lamp", "562d1d5b-505d-4828-912b-f72d39a14964": "shelf", "00289456-13dd-4742-bdbc-b22758005a2f": "sofa", "79b3f406-e0cd-4dac-9aec-cc8a836453aa": "table", "451b8cd3-e635-4e6e-ab7a-ae91ca251fae": "bottom_cabinet", "80fb06af-fab1-3df5-9a9f-d871b73e5429": "chair", "610419be-6a45-462b-852e-f76413e99dad": "sofa", "1690e7fb-5340-429b-b3c8-0ab7c20455ae": "sofa", "410abca5-34c1-459d-81f3-4a36fe6d9d25": "coffee_table", "c7e2a95c-d603-4f46-9f41-3ff22fdf3f01": "ceiling_lamp", "1b2bf67d-8d28-488d-9550-2e61d050a2de": "table", "3ab2e104-be5b-4617-a849-306ccb29c0ac": "chair", "12b75af7-2b2e-4c36-85fa-2713dbe75f63": "sofa", "1ff36fb5-8aca-3bf7-8683-44606e1e2142": "table", "05a1022b-8ae9-437f-8913-e2a337780905": "shelf", "c1406df0-2c65-4fbe-813f-8d613877cd4a": "sofa", "1538bd72-9cf8-375a-8e30-e38608ec9b6d": "shelf", "35aea6cd-36c8-4240-b8e9-33da974b70ce": "ceiling_lamp", "a454de07-1d86-4590-95f5-93e6eceabba3": "bottom_cabinet", "26d454a6-308d-3c4f-a871-df9e29e70d63": "chair", "ba952631-d266-36af-8036-ac2e8bd638ca": "table", "497d9da0-809a-4736-a336-f94e623103b2": "sofa_chair", "c60d884a-e722-460c-8cde-d1b1f54dae49": "bottom_cabinet", "f77887bb-8e4c-4609-8b3f-b0614d9fc670": "table", "3e47bbd6-1e7b-47cf-88e3-80d2735119cf": "bed", "5554e6fe-082d-31ce-a307-0394e3d80206": "sofa_chair", "080d9677-bd32-4bf7-b24a-217b21c0ca52": "sofa", "229a9614-f7bd-4e78-ae14-5b36c827cf88": "table", "6763c31f-255b-490b-b9ae-8e710f68d78c": "sofa", "1269b743-a5e4-4367-8d62-3e9f1d894ce4": "stool", "5bd0661c-1e5a-48ac-9419-90da4d9b01e7": "coffee_table", "43011bff-ea0d-4285-9d31-fc8c3a028f3f": "table", "d269fca6-d843-4aa6-b8bb-7be327223d62": "ceiling_lamp", "2033c954-5a48-46d7-a20f-907d39171d1e": "coffee_table", "1ff04aec-2aa8-417a-a19b-6e5e6ae1bf1d": "bottom_cabinet", "7851f25d-5241-4a2f-8662-a985f96187a9": "sofa", "b846852c-6c55-4dc6-a665-de1c0883325e": "shelf", "23d376d3-407e-3a9a-99c3-52ba88a76767": "table", "22aa4051-ddfa-4bd5-a093-e11b5831faf8": "sofa_chair", "26a88598-9a62-4403-992f-25b351e8ba18": "table", "23707481-453e-40af-9813-32dcc6488ba8": "sofa", "7584c98c-c346-4f8f-9f64-acf03b58c441": "coffee_table", "4d763507-ca63-437a-827e-e66fcececbe8": "coffee_table", "f110c0e9-910c-40a8-b0bd-9ffd5215a467": "bottom_cabinet", "9cba2ff3-4b9f-49ed-b5f7-c526ad7a4e24": "ceiling_lamp", "44e1a843-75e9-4214-b376-c04b97d5a014": "sofa_chair", "943dc565-915f-4f6c-80e7-7eb7b84137af": "shelf", "011741b3-f906-4884-8daf-da72ec809d5e": "sofa", "65bf39ff-f2bc-43c8-be15-05cc37d78c2c": "coffee_table", "0e357885-feaa-405c-8df3-2a51866ac4a9": "ceiling_lamp", "5f05cfda-4d85-4688-a70b-3baa33dc2673": "ceiling_lamp", "d8997d66-b900-48d6-9503-8629dddfd847": "ceiling_lamp", "cebf5ef0-da78-4a8a-ad63-718b4188558a": "chair", "8d2d36b5-5ac0-4822-b4d4-43f172341359": "stool", "c7f29efd-c57f-45d5-b30d-b8c06f897994": "ceiling_lamp", "9ba960e7-9f08-49fd-900d-80e86bccb902": "bottom_cabinet", "4fed5a4a-b52e-4226-a6ae-d3a102b602ac": "stool", "663a12ab-2250-42bd-8fe1-4cefecd798fb": "shelf", "00063df5-b7d7-42af-a11c-ac8a690272fd": "ceiling_lamp", "773583e4-d6ef-4d1b-aa33-f6f20158e86e": "bed", "eb3e7ea0-e2de-48ef-8c0a-8953b51399bf": "coffee_table", "4528e99b-ccdb-415c-907c-70679cc252a3": "ceiling_lamp", "2df6a25f-d796-4118-bf48-7f796a0c1cbb": "chair", "2399c8cb-b40b-3800-9c2b-58cf368d2cd5": "chair", "af22d4a3-6e34-45d2-afef-c3e9f6838043": "ceiling_lamp", "7c776785-d4c2-4679-afd8-362191042eb5": "coffee_table", "55ba0859-3d39-4a04-a1f8-e934087ab599": "sofa_chair", "66b7ebc2-54a3-408c-b7c6-d6d066b847cb": "sofa_chair", "7e741478-236a-4e64-add8-7584d0a597ea": "table", "d1f20bb4-fadc-4a0e-b30d-dee918288935": "chair", "a5316f71-67f0-4773-a987-c2b979b8f106": "stool", "146cea9c-0e87-4c90-8526-e5f7e5340530": "bottom_cabinet", "f21f4e6b-7167-46c0-bd00-cf7c50c8713e": "coffee_table", "129a993b-1a2b-4a1d-9a4d-fb1a014a34f1": "chair", "aefd2c9d-0ccc-4d3f-871e-365fbb0bfec0": "coffee_table", "76ea1494-a5ad-46a8-ad29-fbde851b263e": "bed", "6da3766b-1e21-3481-a0c1-9256e09f3bc2": "chair", "47685d2b-ec8d-49b2-a61c-18b6d735642a": "bed", "84e979f3-e295-424a-bff8-4d7ccc938352": "sofa", "60d66fea-b63a-43f0-b85c-748a3adc0391": "ceiling_lamp", "10e00ea3-2ad5-4fb1-a887-4b76d81b40b5": "bottom_cabinet", "ef292341-44b2-4ff5-989f-1cf78ffaf7f0": "chair", "ba4fda30-970c-4538-8527-b39b4c1bed60": "ceiling_lamp", "5793b31f-8c59-37f8-a06e-7ebaaf61d132": "chair", "0435932f-1354-3393-9ad2-5ad495a5ab7c": "table", "9b4d8975-bb70-430d-98c8-47da905385a4": "chair", "0f08354f-9be9-419d-85c0-e6f219691b79": "chair", "85c5d5f9-3461-37ba-afa1-b0799dce0139": "chair", "336fad5c-9843-433e-accc-7c98a17c6e9d": "ceiling_lamp", "7cf19c44-6cc4-3ef5-88bd-10cd98157ee3": "chair", "1805382c-8d97-452a-b546-59fdd5ddfeeb": "chair", "0876978e-762f-3ffe-ac4d-aab1fd65d033": "chair", "d86f40f4-2945-42e0-9d11-5620a72358fc": "ceiling_lamp", "c390f121-819e-4405-896a-1e60a357edcb": "bottom_cabinet", "3acedaa8-64a2-4307-b8ae-c5d64d79098d": "shelf", "5017c427-aea3-4865-ada2-aea099dd0fb7": "shelf", "0bd02aa2-56aa-469c-85d1-415434bec8c5": "sofa", "815965b3-4143-471f-9906-735925b80a52": "bed", "0d5bf690-d1fb-4a20-a228-42604c8affdf": "bottom_cabinet", "8a43b8a9-2146-4ca9-958f-4e560173c04e": "chair", "fb84f58c-6029-4f37-bd73-6705c29617a1": "bottom_cabinet", "4056383b-df35-4d60-8ff2-e66dd9b8c293": "coffee_table", "2ea96c19-76ad-4b78-98f8-a3123334b5cc": "coffee_table", "82639297-50b0-44e1-952d-7db272642f51": "chair", "e90574de-09da-4b81-b5a5-fd2913e16544": "ceiling_lamp", "9bc20594-9766-4179-8010-33ef09465095": "coffee_table", "5085dd07-d57c-419b-81d6-b7f6415be780": "bottom_cabinet", "27c36a2c-9a12-462a-83e8-0bb0e4505de6": "sofa", "4fae225e-caed-4ddc-889a-e2788b22187c": "bottom_cabinet", "c8f389f7-e410-4680-a9b4-ac4291ae74c8": "coffee_table", "6fcfce03-f2c9-4927-97ae-364536d0083f": "sofa_chair", "021b6af9-a974-4f7a-bf46-e2e33615e733": "sofa", "4c20cd40-f3fe-4284-937c-202f3243a3b8": "table", "1800ff3b-46e1-44bb-be1b-7922d59a160e": "chair", "2db83be2-32ad-4566-84d2-f0586f69b6e5": "bottom_cabinet", "575a5bec-20b9-4769-8cd7-d5d243cb19eb": "table", "1d2b4af2-df25-3d90-8672-2084950c5caf": "table", "7e50436c-29a3-456d-803c-406ef7a88810": "sofa_chair", "e6731970-b449-4537-ae45-98ca4baa2ec3": "sofa_chair", "9fb1f9ad-1375-431a-a65c-8cf467dfa968": "table", "01005129-1184-48a3-9aa3-aa6d83793a0a": "bottom_cabinet", "5e0b6ac4-1465-3e95-a275-b92c4447bc18": "chair", "240ab78e-b247-423c-9dea-8e784afc655d": "sofa_chair", "406a9ad3-aceb-4705-be4c-5afb6a96af8b": "coffee_table", "aa93c992-d55b-4107-9077-3ed1c094427a": "chair", "05593295-1c01-4c2b-9838-3db5b22451af": "coffee_table", "574d68a2-9a3a-43c9-af9c-84509012db13": "bed", "a820a795-bdc8-4e1b-97d9-5193394f31a7": "bottom_cabinet", "59944dd7-228a-46b3-ad62-8337f836d527": "sofa", "211afccd-ca29-3845-958d-2325f600929e": "chair", "5e74276b-933b-41fa-8378-bd9a462ccec1": "bottom_cabinet", "d8633416-c410-435e-8816-d96e548473bb": "ceiling_lamp", "595044f4-bda8-4262-8de7-fb9119dd679b": "sofa", "6c7d01ad-7d17-4209-a542-4435ce4a01bf": "bottom_cabinet", "344c28f2-2354-4ef8-a706-74eafd4152cd": "ceiling_lamp", "ebbcb7c8-6e55-4ae7-a451-9b33ec3d5515": "coffee_table", "692bf4d9-dee4-4bf1-9e6b-7377cc37434b": "table", "dacd01de-292f-4192-b159-f93728452831": "coffee_table", "944b7d0a-fcbc-4c27-bfec-3d2440f0ccce": "coffee_table", "5c6a1cd0-5f6b-42b3-96ef-fc1e4ef7d067": "coffee_table", "d8f18019-7b99-492e-88aa-2be0613dc92b": "table", "9097c36d-77d3-4e3b-a8c2-eacdbc6a821b": "chair", "55f0601e-a5eb-41be-a096-5b60aee05622": "bottom_cabinet", "452a269a-8731-4498-aa51-106e03b841a6": "bed", "aaca783f-2512-48b5-bb9b-ae642c52f901": "bed", "f7a37f58-7612-4c4f-b24e-15165d788663": "coffee_table", "5d445b8d-6756-4aaf-8c66-8b1ed942576d": "bottom_cabinet", "cede2c1a-8176-438d-84e8-7952434327b7": "bottom_cabinet", "ef14301a-3bad-4e12-9407-fc8253bbb374": "bottom_cabinet", "43a92e5c-88da-407b-8c29-c5b4938f7e7f": "bed", "383d59b5-ad3d-482a-bf2a-cb6570540b27": "coffee_table", "e447a3e2-1079-4bed-97a7-daa8cd862438": "sofa", "6c4bcb68-0528-4edf-a2e6-5ae186a6e8dc": "bottom_cabinet", "52223d6f-5f03-4b70-9a49-92805098c2b4": "chair", "80d1eb0d-3d7f-44b6-84e2-9a3a4788d006": "sofa", "76ac34be-3cd0-43d7-8dcc-397cda694664": "coffee_table", "79465c7a-26ec-4e33-8f3f-5e500bbdd541": "sofa", "5c6edb70-b212-4579-abbb-04540151a0bc": "table", "b31f5748-be20-477f-98d4-00311258080f": "shelf", "4b03142e-9b61-4118-a49a-e19409d1bda2": "bed", "56ff88dc-2b3b-495c-9ece-a6df6c2218cc": "chair", "6cc24456-7782-446a-8109-2a2be1576c55": "sofa_chair", "53d02a81-22f8-33aa-bbb4-24cf0b8b3920": "stool", "cb94534a-c439-455b-b948-20e70cbdf55f": "coffee_table", "72f5dd06-06c1-4b7f-8d4b-ad557641b619": "bed", "2db5d8c4-5f06-40fa-bce8-7ed3561d3d12": "ceiling_lamp", "e2ef0d6c-4942-4abe-b178-a435c0c23bec": "bottom_cabinet", "0491bf21-8fda-4e70-9bf1-87bd2987ad10": "coffee_table", "50c673fc-01db-47a3-8276-fd714922c1e0": "stool", "5fe741d1-be2e-494d-b2ae-7127f84a50e0": "bed", "9646f746-37c9-44aa-a3a6-8189729f3281": "sofa", "771f29ec-7a0a-4593-9f1a-6a31d281fbd0": "ceiling_lamp", "e2a1c029-9de5-434b-9796-8ccbed32e557": "sofa", "5e68ed73-0e57-41b8-ab4b-528f674cf184": "bottom_cabinet", "6c936c38-a3a4-4363-ace4-d61eba858d7e": "bed", "61244c9f-3151-46b9-a8ff-6dd8b2e290a8": "ceiling_lamp", "9d841ea8-c3d2-494d-a7d9-ebbc5076869c": "table", "9e576e17-1234-4813-8b05-1b8e0f12636a": "sofa_chair", "6da96b77-fadb-4842-808e-85bdd2c30594": "sofa", "831cb998-98b7-4fa6-a643-e6e365d45825": "sofa_chair", "41f95e55-3ce3-4ba9-9153-fa9a9f904229": "bed", "565c1660-66a9-40b3-836f-69247918a221": "table", "ecc3d7e3-8890-495f-8a77-420aab645a99": "shelf", "25606e3d-1684-42f6-95d2-d0b7f0cdba5a": "ceiling_lamp", "444ee0b1-1ca6-4861-9b4b-208337ed27ab": "coffee_table", "9fe45e19-303b-4d1b-992d-d26451eefee2": "ceiling_lamp", "6f90c6a9-f37c-431a-85b5-a74f48149e90": "bed", "5f76fa2a-0a88-40c8-a7af-39cfc01aaaa2": "sofa", "f4b66843-e104-4a61-b0c0-177749bcb3c8": "chair", "b29d6634-1afe-4198-8588-4caf825010f9": "chair", "9f409aed-6fb4-4b8d-9abf-fa22fe1a8533": "ceiling_lamp", "f903af41-5cd2-4528-b160-8b0c5f4b88ef": "ceiling_lamp", "478e021b-a2a5-4051-85b5-c2f6c8bfc677": "sofa", "6b2d2463-e861-4e0c-af8f-7980092f38a4": "sofa_chair", "99fa9aa3-af8f-4f5c-bd97-238593242b50": "sofa", "028321de-918c-45d3-bb08-e499bf9a1c49": "coffee_table", "08982d71-ab53-431b-8038-2e0a0b54daaf": "sofa", "2bf29b69-4835-4a5f-a994-871fd7327628": "bed", "438d8d9a-7aed-4775-8188-6dba39471a93": "bottom_cabinet", "8ac734f2-d852-48ad-8642-078abe6a7329": "coffee_table", "ff08c008-5931-4268-82cd-e91b95c53bb4": "sofa_chair", "6b1f181e-85a9-48be-9464-2004e13afee4": "chair", "e488902f-4d17-4793-86df-67e23b9d94ad": "stool", "0d3745eb-68c4-4252-802d-0c91c2e7b2f3": "bed", "c9d93142-6292-41f5-90ca-cd68d31cdcec": "shelf", "8e2dc0e3-d513-4fc9-911c-dccbbe635b11": "shelf", "a66b7e66-538c-478b-a150-ece7dcaede6f": "bottom_cabinet", "8616658e-3dd5-4215-9940-f540664634e8": "bottom_cabinet", "44d5eada-7a86-40b2-9861-3e2f38e162a1": "sofa", "56e4474c-78e0-4692-97f0-957dfae95802": "bottom_cabinet", "e1f69b2f-5ff5-45f1-ba2b-da94a87230df": "ceiling_lamp", "56c10802-e905-4c8a-af4e-39229cce0a9b": "bed", "7445b1b0-ce5d-4dac-9665-6e1211d7d454": "bottom_cabinet", "5a0f473a-5b91-4f8e-91e8-a9429d0fef72": "sofa", "983fc7f4-335b-4f95-a6d4-abbb97265c9c": "ceiling_lamp", "61de8e4b-63c7-4854-805c-c8c652b248ca": "bed", "a38a5aef-c889-4690-af9a-77f40f6547f8": "table", "7e908bee-db00-36aa-9883-77e8fdfed531": "sofa", "6a9a400d-10eb-450b-a120-37b5eb1dd19a": "chair", "eb63d61e-759d-4c44-8945-d022fa7e507c": "shelf", "63952377-0848-4a26-ae70-a4d01f259ac4": "bottom_cabinet", "50fea5da-e376-4860-8906-21d4e9395d3e": "sofa_chair", "1bf7cb00-0113-3971-8fef-842ac086281d": "stool", "28678d69-d2a9-459d-a096-e9b7c8a2cfc8": "sofa_chair", "b09c05f7-b254-4ef7-8b7c-0aa06d0e45c0": "sofa_chair", "743266c4-7096-41e7-b812-82310c4ee393": "shelf", "97d47716-c1d9-4fea-baf2-60a0fec7712c": "sofa", "62a4bcd0-a0c9-4ded-ab61-62c06063cef7": "bed", "76d94f2c-e626-46e8-b3cc-9c2532d7a6ac": "sofa_chair", "652a25e5-0f15-384f-b57a-4400cb800545": "sofa", "5c569464-c0a0-440f-9c03-71e8d57e05fc": "ceiling_lamp", "a7903e58-7858-4418-a957-2ce88806de53": "coffee_table", "4054215a-9c91-4590-a2e8-4b2c20cbb5f0": "sofa", "73b31642-d004-451f-9286-9ad5a26554f2": "shelf", "1e5bb567-b530-3b98-be29-d7b563c41930": "chair", "d6740fcc-1946-4bff-9efa-677f452e2e53": "bottom_cabinet", "7ef1aa26-a6ef-487f-bc25-4c263ddaf672": "sofa", "3cbc1192-41b0-4a88-91f2-40ae432f6315": "stool", "7ce0d1c5-7cd9-4404-9e1f-7c8811314ddb": "bed", "29fd3dac-d939-433c-8e16-65696776542c": "bottom_cabinet", "6c5ead8c-e88c-49dd-bb19-53b5ac4e6f5b": "bed", "0ddb98a2-234a-340a-b63c-530dd3dc0ac3": "sofa_chair", "daeed374-84ed-4a16-ba18-71c5c79b6034": "table", "04c289ae-17fc-4c4a-a3b4-c5ecae294da8": "bottom_cabinet", "91241816-4526-4352-a559-44c06aac505d": "ceiling_lamp", "22a4bd03-9adf-4e3c-8540-f3d1b20ac3ff": "bottom_cabinet", "05571815-ab9a-3526-8fba-ed9c18e9d3d0": "sofa_chair", "8860dfa2-5713-405a-bed1-04dd55a5dd69": "shelf", "1e527594-16ee-4d5e-97b3-3aa6930d03f5": "ceiling_lamp", "4483a0f8-e95b-4dc3-8796-03e2a55d5fcf": "chair", "a875c2c5-bd1c-48ad-9f07-3a042bcf55e6": "ceiling_lamp", "63083cb5-29b7-4693-b8a8-d37f77a3b35d": "shelf", "37eb8e2d-319f-4c1a-88b3-c12978eb4d95": "bottom_cabinet", "7007099e-4dff-4dda-8aaf-23139d3c2a32": "sofa_chair", "24f8d680-1061-401b-ab15-2321501031e1": "bottom_cabinet", "0d643ce3-0a98-4663-8d8f-69b201266375": "ceiling_lamp", "522af54c-7156-4289-a59f-aef8cb000d83": "bottom_cabinet", "2cc391e3-020d-48fb-8b8a-d37aa294af3e": "sofa", "4059e4f6-a319-3144-93e1-9a6a284c5334": "sofa", "5e093f91-25c1-3185-afc2-f63093a88948": "chair", "629d9996-8b8c-4422-81b3-5418c05d9160": "sofa", "6b07985c-cee9-4e95-a59f-0e74e788e8af": "sofa", "1ff4f2ae-8a16-4230-9d14-43731c1d3fb6": "bed", "141021f7-0e6f-4b5c-80e4-cb0d4b3b7b99": "chair", "4b35d386-fbfd-4afe-b850-7fbae8fbeab9": "sofa", "73d76c19-2e12-4efd-a0f3-7ffe054b881d": "coffee_table", "2ae81529-1493-4568-b78e-e5946b182098": "chair", "6854c811-e417-47fd-8329-9eeccefa9c24": "bed", "34b289bc-f237-4d8a-aafe-706f1afb17f1": "sofa_chair", "28dcdaa1-7388-4157-afbe-9ab5fe16ef61": "bed", "00d8b27e-4e05-47a8-b191-519aaed28575": "sofa", "aafe7bca-8478-45b3-8a51-2799e2c04911": "bottom_cabinet", "5631b63c-24b2-4074-857b-425794858ca9": "bottom_cabinet", "54681d75-6559-4263-ae9c-759d57db7d22": "coffee_table", "321bbcbf-4e4e-4920-af76-14544b24df9c": "chair", "cc2046fe-59a9-4d17-87de-2f3e727473e3": "shelf", "38b5bc9a-5c59-4cef-87e0-aba437acbdd2": "bed", "ee523542-4af9-49a6-b48c-30b58308f414": "shelf", "6c19c49b-9500-4f27-9ffb-f6a7a032a406": "bottom_cabinet", "0f17b0de-610d-4ed6-accc-e19c9ac0a900": "ceiling_lamp", "66e4e6f3-a058-4043-8838-8b1b25ef1d03": "bed", "a6bb7b34-43ec-489a-9a92-e9eff5c4eca2": "bottom_cabinet", "b56bbafb-152b-4e25-baa6-d2a5f443b529": "sofa", "1c6de7ae-48d8-4930-b3ef-e32fb4dfe51f": "bottom_cabinet", "1b6c15b4-d58f-4a06-9f98-988666ce82d8": "sofa_chair", "3aec0b0f-c2a3-4093-809f-e344527530f4": "ceiling_lamp", "122b69db-88d0-4927-ba01-15dc17194c78": "ceiling_lamp", "0f803c4c-86a4-4bc5-a73c-d37175b60235": "bottom_cabinet", "cbea2557-48ef-476a-8d8f-ba22d41c9bb6": "stool", "2be802d9-22cb-467d-a1e3-d463b7a839e6": "sofa", "09e093c6-45f8-3381-9466-a74d3e0dd195": "stool", "a38e8a36-f00c-4c3c-90e8-3b5e0903d900": "shelf", "f7809159-cac3-402c-8bb9-cc1d7bf11a97": "coffee_table", "77bdd2b5-553a-43e2-a96f-15285ec87d57": "coffee_table", "8b847a09-1736-476f-8aba-ba6da836c998": "ceiling_lamp", "3deb5075-c1ea-4ac6-af79-44da44c6fd5f": "sofa", "c005077b-afd8-3a6d-a4d1-f2781a7ded93": "table", "57a048b0-eea3-4c8f-8681-b4fe938e0185": "chair", "47570843-03a5-4f5b-93cd-4a98057eb81e": "chair", "112faa66-051e-360e-9d2e-4f7b09c74b67": "table", "43cb86ce-5ccb-468a-afd1-0b901fc858c8": "bottom_cabinet", "2dcfa0f5-71a0-4849-ac2a-d0a2d0fb1bba": "sofa_chair", "3b432937-2152-4148-af17-b800b0fda5f8": "bottom_cabinet", "d7dbc1d7-3c46-4658-8ef1-c57610426886": "shelf", "805dbdc9-0f7d-4224-be07-8dd7b3446331": "table", "d607185d-ff97-479f-ae0b-587c46fc0f7c": "shelf", "23c641e7-189e-4dd4-a211-1d8dd731450d": "bed", "455a2d55-06a7-426c-8b52-0427bdc4d1d6": "bottom_cabinet", "056e6841-842f-4dbc-8ca9-3c7b11256f43": "bottom_cabinet", "2a7fd249-5ac6-4e46-a12f-dce1cdefd840": "sofa_chair", "6121172c-95e6-4f95-b5e2-709369a26f8a": "bottom_cabinet", "2dee0e1d-28b4-4f64-832e-783dc196b536": "stool", "9bb6bc0f-1a6f-4a44-91cc-86099a886530": "bottom_cabinet", "9b2c3161-c6d7-4090-bcbc-6389e6c44177": "bottom_cabinet", "ed492c97-a9dd-4239-a5f1-c044b3ae4fc4": "bottom_cabinet", "666060f9-39fa-4b69-bac3-ebeeb30f566b": "table", "467663a0-3056-46c2-bcde-237c4324db8d": "table", "245bf1c1-0c77-4285-b511-cf1599ba7c80": "shelf", "69f9b1dd-3822-4daf-be8c-43fc964801a3": "sofa", "47e6d877-ad10-4362-bb51-beceff6b844b": "coffee_table", "a349bffe-efeb-4c23-96b0-b729b5aa9f41": "coffee_table", "7b0b621b-5e2f-4452-b2ef-937b593ae499": "stool", "10b936ba-4406-45cd-ad4e-5db603105cbf": "bottom_cabinet", "0e998b52-072c-41b6-abb0-d8a66a39e004": "sofa", "5a72a795-d8e5-38a2-8ae8-a0d6b88fff8c": "chair", "26eec936-848b-4896-a686-e4fd2928bd4c": "bottom_cabinet", "e3d33704-98af-4bb2-afde-fa8079694aff": "bed", "536437f4-e3ed-4b31-b839-f502a8778150": "sofa", "32f14e25-b2c7-45e9-976f-4743ae0efd30": "coffee_table", "432c231c-52c4-4f1d-9210-d066d87560e5": "shelf", "bee3d6c4-f2ee-474e-bc3c-aeb7eace4177": "shelf", "03669aed-7a95-43cb-888f-6cbc2efd2df5": "ceiling_lamp", "1fbe850a-8237-428a-86e0-c9a903c67364": "bed", "b29b8ea2-c7b3-4c3d-8b8a-a6b99ca190f7": "coffee_table", "2bb4868e-4580-4a9c-8c63-0566a448668f": "shelf", "13c16368-42f4-3d25-9472-76ee7725ab51": "sofa", "72f0d68b-a9c1-4b86-8851-e837ecc35903": "sofa", "60c13bc2-8703-4cbe-88d5-36b63f3c9ec8": "sofa", "a3e8bf5a-c3dd-4211-bdda-483818d9d354": "shelf", "6a4e8023-740e-40e6-8cde-823b0485177c": "coffee_table", "1b1c2e2b-8d32-4768-8af3-0e7b82a148b7": "chair", "2cdddd47-c27e-4059-ac82-47649c890217": "bed", "e4e3e639-5dfc-4a6f-950b-a2ae741af1af": "ceiling_lamp", "a1c93b90-1672-4892-87b7-84aab0d640c3": "sofa", "5ce37013-bdca-48e7-99bc-7ea3dad0fcae": "table", "70b85202-1ead-30c9-a687-1013a0f0e452": "table", "5fcab5b4-d357-410c-b633-6037ee6bb29b": "sofa_chair", "46258671-33a4-44ae-b45a-49e0de548077": "bottom_cabinet", "be3cd1f4-7f81-494a-8c30-6a2d1120ca5c": "sofa_chair", "39dbd927-53ab-40a3-92b5-e215d686b576": "sofa_chair", "f72aa1f8-ced5-46b5-a07f-936b4b79689c": "sofa", "5a73580c-9f1a-40e5-b63b-62e559543514": "bottom_cabinet", "4e64a24a-10d1-49d4-abd5-0300653c8126": "sofa", "d6fe7d67-e167-4a63-9df1-8ad55418105f": "ceiling_lamp", "1abf87db-9e18-3a7b-a4fe-c1325d269fd2": "chair", "3f12b1c4-1723-349e-8a9f-bb946768d6d9": "table", "29237075-e095-4f0a-a8ec-a0dd24b5882d": "bed", "6bdf1e36-4df2-4486-9783-acd3f5ed86b9": "bottom_cabinet", "77547de9-6416-30c5-a590-bec3aa10b7d9": "sofa_chair", "59e2cf82-8b0b-4495-89b5-6ae9382f00a8": "sofa", "9582f63c-7e72-44c6-9373-3e229f9ff7ef": "ceiling_lamp", "f3f17edc-96ce-46a2-80a8-f43aa9f1ae5c": "sofa_chair", "8c9d507b-6ce9-4247-9bf6-10a5ba25cd32": "sofa", "46c5cbbf-2266-4dc2-8e2f-5dc1aa281af8": "sofa", "0917783b-5104-41bd-8273-af6be2f39534": "stool", "482a093c-bce5-4d5f-a293-a9deb9a95892": "chair", "ec53081b-d6e4-49cf-b448-9f97b3fbea7a": "stool", "208d701e-50c0-4651-9dc9-d7bf7c28b851": "chair", "4b9c54b8-2b9f-3da6-8395-b13dbe268eee": "sofa_chair", "38d649b0-6766-4253-b975-31f6750e34a5": "sofa", "b81e75ee-2ea2-4b8a-b5b3-690211e1424b": "ceiling_lamp", "cbf28f30-1aa8-46d3-bdf3-8c96d8134bac": "ceiling_lamp", "9aa2d8a5-82f2-403d-89c3-1917dae9b46a": "shelf", "5e77e909-a5ac-4ab7-90c8-5c5187dc3309": "ceiling_lamp", "58fb4bae-3c09-43f8-9b61-42799c0edfe9": "ceiling_lamp", "4bef5bc5-e8b7-4af6-8bad-1f674f0651c3": "coffee_table", "09fab2ad-8561-3fa8-a512-d1737f573b3d": "table", "bfcb3603-3239-48c8-951e-c0d861a018de": "chair", "de88dd8c-2b9b-4ee9-90ab-77aeb0d5b5ac": "ceiling_lamp", "1d24fd7b-4ed9-474e-8155-ce0d9def78b7": "sofa_chair", "076e553f-b67d-4b5e-9b0d-a6d4aea3402a": "bed", "8720182a-6ef5-4680-b164-192b9b0e8626": "sofa_chair", "1493c4dd-78c3-47bc-9820-258a55114510": "bottom_cabinet", "4ecfdba8-5420-343d-af07-cbf6df2facc6": "sofa_chair", "19a342d4-6317-4946-8b99-53e50f0c9a85": "sofa", "50b91183-abd9-4f3e-aa37-dcb0662ff15f": "ceiling_lamp", "501c775c-f2b5-4145-b5ae-3bb35f9e6bf6": "bottom_cabinet", "76c5a6b2-0a6c-3a28-b627-0c2babaaf934": "sofa_chair", "b3273495-41a9-4997-8651-b9713accfaa2": "sofa", "090d63d2-0d46-42b9-8e0e-8f3c54a4b9c2": "bed", "06e80991-bff5-46ab-bb8f-93e270f61a1c": "coffee_table", "1ddf606e-c12d-4b00-8970-61863c774519": "bottom_cabinet", "4da220f3-080c-4ed7-801e-12c264f90c6b": "table", "1a9e0a1a-c6a1-4c43-8352-9d391907d86f": "bottom_cabinet", "373f425d-8082-4cfb-b711-b1407a4ac0b7": "ceiling_lamp", "00d8b611-0950-4bf4-8087-89d472c9aa9f": "sofa_chair", "818123a5-0874-48cc-a71a-f314afa39ded": "coffee_table", "058581dc-2c4f-46b6-8648-7637dec10d07": "chair", "4700b3ed-0d33-434f-bf15-1edee1cb65b3": "shelf", "76183784-e968-443d-a3ac-3f25e8609e23": "sofa_chair", "29863aa8-d674-49c2-b3c9-9c4a1d8b01c7": "sofa", "4e5b9827-137f-447b-b740-371e0405a6a8": "bottom_cabinet", "b846f09b-b91f-44b0-9a85-5181f385302d": "coffee_table", "27d683f3-1218-4742-9551-7706cb869e3b": "bottom_cabinet", "3e1c35f5-c1f9-4dad-8cd1-1649e72f182e": "chair", "0dad7f30-4de1-4052-b592-e01344818bb9": "sofa_chair", "07be7bf4-c318-4055-9272-c47e5ab532bf": "sofa", "c55fda9b-6637-45df-b0d2-487695e90410": "bottom_cabinet", "1bbf88b5-359d-4210-a7ce-35ddeb2c0717": "ceiling_lamp", "d7c0c76e-abb6-4564-8871-15a54ca92697": "stool", "81848c23-1c7d-3ea8-a764-e9caed065190": "sofa", "6600bc80-8df6-4a7d-a92f-5d1457709624": "sofa", "0738eb4e-fcf2-4b6a-96a0-f5702b8e5365": "stool", "27e7b15e-4823-370c-acf3-e3260a16c00f": "chair", "e767be05-ec88-49a9-acbd-9281759d0545": "coffee_table", "6fbbc33c-bbc6-4558-b888-5a6ff4004cf4": "coffee_table", "6914bc9b-d7f3-3d85-9fdf-a8e30b54ed35": "chair", "2ba16f0f-5837-4f04-9526-227e5aa6fc1b": "sofa", "3ed85212-0160-4201-ba07-ac76a61a575c": "chair", "c7ef1cf9-d0e3-4fab-971a-887a37f020e3": "stool", "12b1ce0f-3d2a-3211-9e05-a537e5a43e20": "sofa", "c8ba1d71-85a8-4166-84f0-d2c0ba323899": "coffee_table", "7a6a4023-9d5c-45cb-904d-3ea1729291ab": "sofa", "c4d96e9c-54ac-4a70-8159-233f0a365983": "chair", "9b15b6dd-779a-44bd-9d88-1bc6f2e31311": "ceiling_lamp", "aa87fc10-19e6-447f-a3e5-c62bf2334e5d": "ceiling_lamp", "6ba7a3f6-cc18-4ad5-ba69-9e21692b89fd": "bed", "0e29e910-61d9-4261-8942-a1728d211847": "stool", "2bc40317-96e2-4832-bc95-e8b706d92ddc": "ceiling_lamp", "10d53fd0-b0fd-4498-8cdf-41e10a6fc1ac": "sofa", "32693fc0-0411-49da-9a62-81c74251be96": "sofa", "6a66e11e-b412-32b9-862a-57d3e8f7ee77": "stool", "5c942af5-0b68-4ed8-85cf-40ff509b52f0": "chair", "85a68385-4bef-4aa2-9469-eedff668a91a": "ceiling_lamp", "d3e083e2-c57a-4aac-952f-162432b22514": "shelf", "3070ce7c-8866-42aa-8a96-a9b84ef1088b": "sofa", "fd0e3b8d-965e-4ae3-8a40-d0979ec9ff3c": "chair", "09e9dd4c-e512-3477-8d7b-0729f4efb5f5": "shelf", "a1458bfd-2d20-4f23-895b-7b5e7e638b6e": "sofa_chair", "7be1e3cc-8ff2-4699-a6c9-16b1934c5a76": "ceiling_lamp", "da8570b9-119e-4a21-a23b-ca8b94000c30": "coffee_table", "684c4288-c5e1-4cce-8937-cf4234b6d426": "stool", "81aec6cd-34d7-4619-81e6-56bd1cdc1265": "bed", "86ac306d-f0e4-4683-99df-e75d3de32643": "coffee_table", "19607e0b-6c17-4a77-9a2a-8179b5c7cc67": "chair", "729cb450-34d4-4ab0-ac94-e7279f07c31e": "stool", "096f5522-de33-45cd-a50f-8a4508c03988": "ceiling_lamp", "fde6ef15-7c23-4cce-98c7-b5213ce55cd3": "bed", "a613d0bd-b565-4626-bc3f-c772e2aca348": "shelf", "8573432c-da1d-4cbb-8732-f1a799c84bf2": "shelf", "78200e82-89bf-4ae4-a2fe-7f3449c48fdd": "bottom_cabinet", "e0cda557-3927-4473-8c01-5903e91f5045": "shelf", "803d2fa0-6380-4436-a548-604a0a70f2d7": "ceiling_lamp", "c6740a83-5265-488b-adb9-d571489727ac": "ceiling_lamp", "2464c0cd-fb2e-4228-8a9e-6e997c798c72": "coffee_table", "d9b14683-501d-4690-9232-f1e59aca3b7c": "bottom_cabinet", "f9316fc8-9550-4147-a381-fb752df5cb01": "sofa", "75aca66b-7852-4d21-938b-d6cb9ea77002": "bottom_cabinet", "adf75fe7-4869-4bea-967a-4f1c6404c7ba": "shelf", "0a5a346c-cc3b-4280-b358-ccd1c4d8a865": "chair", "2a1d6ff4-f273-4bfd-be38-077294f17415": "bed", "5486f184-3f77-4176-8b75-ded62cb0a9d1": "bottom_cabinet", "8244237b-0c1a-3f11-8254-087c78d7476d": "chair", "29570056-ebce-4b38-b9f6-550b3253cd67": "sofa", "8d88a0e7-c261-4ac0-93cb-39b3264bf7b5": "table", "6136d2c2-7bae-4011-b17b-a1f83fabba6b": "shelf", "9e5c0313-b76c-4ae6-8e15-87f7e8263a80": "bottom_cabinet", "c5e4d7da-3b81-4642-96b0-c2db55ac4c02": "shelf", "0e15f37a-98c1-4d3a-8822-6a554c08a838": "sofa", "11818c8f-82b6-4f07-854d-bbe1a0a26ef0": "chair", "11f6b8b4-2209-4e77-9817-5634adaf3651": "table", "b9229f4f-f133-4535-a4b7-0e9f260a2a9d": "ceiling_lamp", "d1d0b72d-4100-4d07-8f06-4475aa215bb8": "coffee_table", "cf51c0d0-ec0d-4be7-a33c-f432993f9448": "chair", "62dbfe30-7b17-45d8-b761-e46951475dc5": "bed", "748112f7-945f-4d03-bac9-95afd7031c5b": "sofa", "333a6624-7745-402f-886c-24661b60a126": "coffee_table", "71b110a5-4ea0-42b5-afc8-5446c6e28d83": "stool", "50e6b76e-6c76-46d1-b8cb-5d1af3e98984": "shelf", "a9b4fcd0-3343-4a36-88dc-f9e9cd9ce0e0": "coffee_table", "0d826263-1fce-4f30-9031-7dfc250c7a6e": "bed", "c9024d8d-f420-4f3d-a4f7-780786ceb014": "bottom_cabinet", "4f24ec89-511a-43ec-a3a2-bdc5c98f0175": "chair", "0570edf6-aa2a-47d2-922a-fb5ae29fdd99": "bed", "2982979b-1bb0-4816-a735-0048832e5225": "bottom_cabinet", "5126dfaf-eabd-45e3-b976-04dd27606caa": "bottom_cabinet", "1ed56a08-924c-4d20-9633-12cbcd5dc4e3": "bed", "beead7bc-e52f-4375-a43b-77d48355716f": "shelf", "6b39114f-2001-42fb-939a-46ddbb667a36": "bottom_cabinet", "6f69a3c8-d4b8-3a77-a61a-5457d9919af8": "chair", "6e937d33-357b-49d3-83f2-dd92ba11162a": "table", "18bebe48-e3b0-4a88-b2cc-8cebc44e1a36": "bottom_cabinet", "0acc4e96-4730-4daf-be8c-3f15552ee820": "bottom_cabinet", "eb2fe98c-e20c-469a-8c1d-a936cabf9a3b": "shelf", "547d4497-7700-4f5e-aef0-abca272fbc8c": "sofa", "b51f8488-d6ba-44f6-ab06-df617ea2b767": "shelf", "7a080daa-c02f-43f0-8394-5c943d0f68c9": "sofa", "badee8ce-ba11-484c-91df-c3b10a27619f": "chair", "1f3cd790-4f0d-4cef-ba58-d33e43451637": "shelf", "806a3644-ac12-4b1f-a69c-6285bc0e28ec": "sofa", "99a8d692-aee1-4366-9a4f-a6af3ea70b6f": "bottom_cabinet", "e28b25af-1d80-4663-a87e-05ea59e2f0c1": "coffee_table", "bd736985-025a-4d60-865f-d8cab731280b": "chair", "eb276b8f-03df-404e-8c7f-8624600f26d7": "ceiling_lamp", "50b78c96-34b2-42f5-bc6d-2ab24913e1b5": "sofa_chair", "6a2ffa42-89dc-4c83-9ed2-24687af58911": "bottom_cabinet", "5e4c006a-4a50-32f0-b64a-a3826a0d9196": "chair", "6661478f-db0e-424e-a8a4-588790106bb0": "coffee_table", "b627ee54-6ccf-496f-8a81-931938e5e4ec": "sofa", "cfd1cc3f-b464-44fd-8662-8fbe1a5885b1": "coffee_table", "8ea548a9-f28a-4a2c-9621-4e84304d2612": "chair", "b0537ad1-162e-4887-b638-c0c2302035ae": "table", "28746bea-d522-4135-bef3-14fadc523f40": "bottom_cabinet", "5980c1d7-9167-4862-b1c6-29bb00447576": "table", "8e787ff9-dc42-4a9d-afd5-783cbd642924": "sofa", "53cfd3bb-3df5-4726-a8e8-41507bc87881": "stool", "c69159f0-d657-48dc-b941-62666a88b59b": "coffee_table", "04066588-9ccb-4324-89af-110210697471": "coffee_table", "fc28b230-ca8c-4b9c-8190-79c0db522b3c": "coffee_table", "6c746334-5d9f-3e7d-8f7e-1951b47c91e8": "chair", "53efea48-b11e-4043-bd7c-996f2c9d2fca": "sofa", "74dec72e-277b-44a2-86ca-abf22b6ce41d": "shelf", "f7b9d8f5-1458-4a0d-a753-0a2a4f377e31": "chair", "efe1857b-d46a-47bd-b92f-0dc81a4eb620": "chair", "85c9f502-4deb-496e-9bdc-ae8a4f0a632e": "sofa", "79867c45-2168-4507-8d38-5a323c86df76": "sofa_chair", "4a6aea75-8b07-426e-aaef-8f4a1841d513": "bottom_cabinet", "76d0d420-8127-4ac8-9917-a75923cc5ee9": "bed", "1176d6ce-69ea-4b87-8cae-1a2b9848c207": "chair", "1af90188-a986-4823-ba28-98ea51939a60": "ceiling_lamp", "2e49a855-3789-3437-8164-f1398ed0b715": "shelf", "73d6f8a3-87b9-47a7-a5e8-398e11baa379": "sofa", "3dec3032-05a4-4cba-932d-48c6b12ebe5e": "bottom_cabinet", "5a070537-1a46-4dc1-924f-ea06ba1e4719": "stool", "61e7a2b9-98a2-3502-834c-38450d198544": "chair", "6942e2c2-de23-4ffc-95cc-6c41b64df530": "chair", "281aa29d-1370-492f-801f-382ef4ef66f4": "bottom_cabinet", "7495ba4c-14e0-4f29-a864-6564524e8afa": "bottom_cabinet", "40efd667-96ae-4b1f-946c-dd9c1479b8c1": "sofa", "23bf7255-9658-37c7-9440-bdf470dee94d": "shelf", "4f5f4392-8808-438e-84fc-517f12f50d2e": "bed", "0931ee7c-70eb-4cb9-9e4f-7f7ae9bf44bf": "sofa", "eb39a6b3-8db4-455a-9259-549c5d7e8385": "ceiling_lamp", "18714417-784d-47fc-9970-b0c4eb1bc353": "shelf", "485d233b-2a47-451a-8a47-67c9d5e4de83": "ceiling_lamp", "782f69e7-5988-37a0-95cc-36de0b2e43a6": "chair", "e6c859db-475c-4257-abf3-8f4f379737d9": "shelf", "f2e2649b-ed26-403d-b491-2bd61773c81d": "stool", "c24eb44b-b8f5-4307-ba47-38d860465d4a": "coffee_table", "bcd6a9a4-acfd-4bf0-8344-ad4cbfe0b189": "bottom_cabinet", "4f3fd5e8-a423-4d7c-8d55-ccb67b1ed230": "bed", "c95ec7f0-08ca-4a71-998f-b2fdf0dc329b": "table", "5885fad2-4f02-4e3e-b474-d33f126a6b84": "coffee_table", "22dfd45b-e37d-4ab2-a0fc-2642694b1a80": "sofa", "fcde5055-8e86-428b-acb7-7d96b1d4b1ff": "chair", "48d707fa-87fb-42c1-9609-20eb7bdd48dd": "table", "84bf5c56-1451-451e-a1ec-c0d131d7391d": "table", "9ede8992-7ad2-48d5-a119-bfce07d8d371": "bottom_cabinet", "100f8655-1af5-48b6-86bf-e8453a780abe": "table", "d7db0156-40d2-43a2-b4e9-16a86321011c": "sofa", "2a1d5a51-7863-4b3d-80d0-2ada403f2ec5": "bottom_cabinet", "dfb42b02-33c5-4f43-bc91-a34c0a09e9bf": "ceiling_lamp", "5e90feae-b672-4d02-9bd8-7b6f0690d73b": "bottom_cabinet", "c4a6b030-7fd9-4fe6-811f-3d7cb2bfd408": "bottom_cabinet", "b9b0c8a3-d8dc-4503-a4c2-2606d71cb0a9": "sofa", "219bf1c4-c574-3082-9628-55a6c6ba81e0": "chair", "a4df9d54-2dad-4dbf-a4b2-c942ccb8288d": "bottom_cabinet", "2b2b65fd-f53e-45fb-b7ce-9b4251b2c8a3": "sofa", "691fd80f-9208-49f2-b4ec-5f56ba4788d6": "bottom_cabinet", "1b42f74d-6456-4ddd-87cb-80e8b4eec53a": "chair", "11c84801-6a2d-4662-845c-11663ebcb49b": "chair", "bd4870eb-112f-4668-8a75-ff14db286664": "coffee_table", "23ae48ab-bbd1-4ddd-9eb0-a8fda9798f90": "sofa_chair", "bfe62151-9b1c-42de-8dbb-67ad5a356beb": "shelf", "23e350e8-5360-4398-9d04-a82e554461f1": "sofa", "a0019fb6-7b26-495d-aa1d-bae5fe684297": "shelf", "bb9598e5-69bc-46e9-90c6-c6fb93f96ed1": "bottom_cabinet", "39412e5f-0053-4a56-b9ea-63af68632e20": "bottom_cabinet", "5befc930-7aeb-4271-b007-ad9b0b22bec3": "sofa", "0da2a2ff-fd2d-3cd3-8dc9-9303c7a80814": "chair", "24ca1642-27a8-4725-9611-a00f6d3dd347": "bed", "3a3667c5-effe-49b1-bff3-e5df44fd4e9e": "ceiling_lamp", "9a466557-20da-4b73-aae7-4b1102e30d17": "ceiling_lamp", "f2ecc636-3b30-4f45-96f0-5bd3fcd85a1f": "sofa_chair", "830d2fb2-3b5a-4581-b8d4-15509bb4c21c": "bed", "76a4e349-e557-4568-a4b3-b9af6467b3e3": "bed", "69c5c5df-0514-4e6c-ae3e-4c307ed01dbb": "bottom_cabinet", "d7810383-c7d5-4582-a311-35d4d779bb2d": "bottom_cabinet", "2ce80ba2-bac8-424d-a0c0-a94af01496aa": "sofa", "d19afa9b-9b7f-4ebe-bbb6-c8217f7de797": "chair", "70ff871c-77af-4e48-974e-6fb4244a943e": "chair", "4fa42038-9ef5-4910-ad4b-2cd474bdcba5": "bed", "7444ccb3-989a-485f-a0ac-f9702fcb79f3": "chair", "5e0ce7b5-63d4-4d93-8728-fb075e3ff248": "ceiling_lamp", "b49efa64-17b0-4b07-bb16-a64fc4a03f80": "shelf", "08907cb7-81f4-4c9b-a1f4-eefe29eb4b6e": "bed", "6bb50c30-efd9-4082-b152-4786c36de318": "bottom_cabinet", "f00494e5-a9b6-4e74-936f-ea183df00996": "ceiling_lamp", "4d1ea991-1d26-40f3-bf8e-f813bbf2fed2": "shelf", "ecbe987e-9923-48e6-9ef3-56af6d1b920d": "sofa", "7b805dfe-868b-4bf7-84db-f49054f97d20": "bottom_cabinet", "134861d0-d3a8-4d4c-acc6-fd7e76b69d51": "bottom_cabinet", "4ef6afe4-115c-40e2-821c-dbaa37785467": "sofa", "e50ffc76-6993-44ac-ad07-978a9d03f6df": "ceiling_lamp", "fadafd96-5405-47db-bbf2-201fd3a9ccb0": "sofa_chair", "5f1ff483-ad10-4b63-8c35-75702d6c4b03": "ceiling_lamp", "72d524a0-4ea5-36bf-9965-2b0ef48aefda": "chair", "37ebcfd3-9804-439e-89f1-d62f2c4e1b1c": "shelf", "65cd365c-f230-4a70-916f-b9ef5265c202": "shelf", "5177c343-8247-4db1-a0d9-40347ffc5102": "bed", "437fb0e4-9eda-4313-9311-37c3c286049b": "bottom_cabinet", "1b90c04d-6f39-3ad6-a557-c0819ba30f81": "table", "a8db2878-a32f-41b0-8971-9ae1d0f478e5": "table", "d36ed0a4-986c-4f35-9505-0c86b2f43532": "ceiling_lamp", "38560cc9-e290-4b12-b3ce-f4c82d504043": "coffee_table", "59ab5bfb-1d3d-4df1-a054-e8ca1afe5c17": "sofa", "a85a3fb5-aa29-430d-90fc-1c1b6e4333b5": "bottom_cabinet", "f23ee173-3379-4480-b53e-260ce435bc77": "shelf", "6b87c6c5-29c9-3843-8c07-764439a6dbf1": "sofa", "b0e659e5-08c2-44f9-aeae-888ca079a95e": "shelf", "8a31d51c-2306-439f-90c6-650be7284975": "shelf", "8ed56745-059f-4c36-a608-eddb0147b361": "ceiling_lamp", "21071e0d-8228-4651-99d1-6c503fe1ed2d": "ceiling_lamp", "1ebb6b08-3d2b-4d1b-8777-683e0f064fe2": "ceiling_lamp", "38b5da6e-ebf3-48b6-b73a-728afc770b6a": "chair", "d451d4cc-7abe-4252-99b1-6dd6c5c1acb6": "sofa", "a6f12011-4a57-4471-8640-a4b22ed24be8": "chair", "1ead30d0-b899-4318-b72e-9aedfaffe9f7": "table", "67b419b2-41df-4b94-a8b6-440455819427": "sofa", "22890a64-ec71-32a8-bec1-6ca045052c36": "chair", "ec856859-b0dc-4681-8f48-91a8260912b1": "chair", "58df4af8-53de-42ca-a7ca-0861ff45f397": "bottom_cabinet", "1e266fe5-e096-40b3-9d98-830c941e29ef": "coffee_table", "031e135c-7937-449d-bfba-fa29f991c535": "sofa", "ebdea042-022e-454c-bd82-c538063e710a": "ceiling_lamp", "37c539ec-3bb0-48fc-b91c-6bea3fc6115c": "chair", "dcb08327-326a-44d6-b926-f1c5c1af72e9": "shelf", "1feb0ade-8650-4ffc-829c-511f8b8eb215": "bed", "74334eea-8e8d-435e-884b-90aa58af8dfb": "chair", "57ca041c-ca7f-4215-ad86-66e792e42e4a": "bottom_cabinet", "0e13d9b7-7f11-3b4c-b59e-00b3de772847": "chair", "25c14c1e-4767-485d-a3e1-a5874efb7395": "sofa_chair", "8075c656-aa3e-4341-ad25-c0bc88206cee": "coffee_table", "3f7d26ad-491a-4de6-8f41-b81e9f094016": "chair", "e6f49a2f-b414-40a0-a998-d5eaaa790734": "bed", "4318d141-3af0-4e4a-a3a2-4151ec41a6b6": "bed", "f7dce3bd-31e7-44ac-ba84-c5098c46f6fb": "sofa_chair", "162e1aed-6e96-4503-ba3c-adfe8b07b429": "table", "a2e48bd4-ce55-4cd2-b3d1-5fc18fc0e7a2": "bottom_cabinet", "7a2608fc-73a6-4cc1-84eb-bef1abf8f933": "sofa", "53cabf7c-7121-4c80-b33d-b7cfe9aac430": "chair", "98542840-6e7a-4764-b3e1-2580defff484": "ceiling_lamp", "99199859-6258-4202-b97a-99a8bfa8d02e": "sofa", "a1dfce55-6eeb-4713-b0e1-3e1f0d6e784e": "coffee_table", "6cad26f4-7d64-44e8-96a6-431f00e039ad": "sofa_chair", "ded01c90-1a6a-42a5-b340-9e9972d83ace": "sofa", "a9e662be-94ad-43bd-a135-9862e1defc1f": "shelf", "c98747ea-468c-464a-98a4-88cd67058776": "chair", "0f5b963e-e3db-41b9-b753-fbd783b1ce41": "coffee_table", "019c82d8-1522-49ca-bf38-b09e55a063e3": "stool", "0631186c-1f4b-48fe-9285-52f5214af737": "sofa", "3c1395dd-00a5-4953-979f-6ab2c0bc6fbe": "ceiling_lamp", "f9f48d60-7095-45e9-b8e6-bbae308ea40d": "shelf", "63791e3c-0b3a-4f0e-8cc6-b4b06a653f7f": "coffee_table", "12d840b9-5eba-41d8-976d-d93fd0ae8d85": "coffee_table", "c3762ae3-8847-4cc1-8e39-0ff3e09c47e4": "sofa", "0708dd7c-e021-4954-9801-bd3cd8b0ad25": "shelf", "4aafdd05-b120-4722-92aa-8dab3d920053": "sofa", "7af981e3-4988-4bd7-a6dd-c514b2faaf8c": "stool", "f4c89ec6-3ecf-45e2-a6f9-1b7591f4c57e": "sofa", "78c4727f-0190-45d8-ad95-75e2a2ff9d13": "shelf", "26fed367-1189-49af-ae0c-e218cdf80bf0": "chair", "0dc0268b-2836-4538-94ac-b389acdedfa4": "coffee_table", "943c7c74-86e7-4197-8716-38842121ac8d": "stool", "cdb92528-cf52-4fdd-b3cd-1c368f7d9284": "coffee_table", "368126ad-e669-3651-b160-d01180b3a422": "table", "64c32b95-8784-4cef-b87a-91e37a3d9561": "chair", "5e3ec2e9-d0c2-4e19-80c9-594aca914135": "bed", "0decf86f-3a22-41aa-85f8-0d8935fad2ee": "sofa", "7a65282e-f111-4b67-ab6b-48785b7a6f1e": "bottom_cabinet", "d2f151e6-1233-4b56-b228-c1fbae3b8549": "ceiling_lamp", "6a353b76-4f16-42be-a986-58475ec87eb8": "sofa", "7144f0b0-660e-4451-887d-da8f2285c28b": "sofa_chair", "6d486dd3-8a92-4d27-b989-d5bb8a2ce25b": "stool", "296d4178-4861-4866-8fe3-fc93a00f55f6": "ceiling_lamp", "31fc0baf-3bbc-360f-aaa2-e21d4b26eca4": "chair", "536e8106-0fc5-4e2b-92b8-1760eccdeb48": "sofa", "5cdf3ffc-0280-4bc7-9a5a-fe12b3e9a021": "chair", "47a20db0-13e0-4e6a-86b6-6db0d6ec2df1": "sofa", "77d06c4e-a411-46c4-9cc5-fd6c2742a618": "coffee_table", "f628bf7a-7101-4002-b13f-cb92e9ed4566": "table", "5546cfbc-bf92-453e-b8c7-9bcf9489e458": "coffee_table", "238c3d4e-2c08-4d8d-82c4-b06326568e27": "bottom_cabinet", "b8926d8a-d765-48c7-a5dd-80b197cdf4b6": "ceiling_lamp", "2d7292d5-62ff-45cb-a2c8-c7dfef438da9": "sofa", "27dd0e32-8854-470a-bdc9-62c10aa45a89": "stool", "0ad663fa-87da-47b0-a522-478bd75ed23d": "coffee_table", "cbe54d15-8b76-4269-8970-5a384b91d170": "stool", "cd9020ee-8fda-4162-a232-36398b246e16": "coffee_table", "b274aeae-e7c2-4b02-86a9-65248ac1e6d4": "bottom_cabinet", "5dceea43-d17d-3b2c-a9ed-2e62782ee43f": "chair", "ace0eb31-1a94-4125-ad36-33e374ab62bd": "shelf", "3fd377e5-28ce-429c-a142-c429c1b85461": "coffee_table", "7b0a184b-7cc9-459d-800b-37c270bfd62d": "coffee_table", "9357cf8a-b6e3-491b-91d1-1774aae0ee17": "sofa_chair", "189b4c48-c93e-31ac-be11-087e861f5b86": "chair", "2912b191-5e67-4c56-8d98-190114819122": "coffee_table", "6f5d3f77-fef6-492a-a073-602ba134a420": "coffee_table", "2b9f5705-f6bd-48dd-acf1-257c8ed0b9b3": "sofa_chair", "49e8f3e2-52ad-4c16-864a-4ea7f7478313": "stool", "7a138300-14a5-4c61-a5cb-5c0cd25ed0ef": "bottom_cabinet", "c449f264-f242-43c0-b747-1c007eb2ce41": "bottom_cabinet", "51811dd2-7615-4943-9b8b-123bb44cadd9": "coffee_table", "f5383416-0d83-45bb-b4ae-35787cdc2ca8": "table", "7c9e0c69-073a-45bc-9ed7-178822c878bd": "bottom_cabinet", "7e71549a-0591-4491-8a05-8e03487a0de0": "table", "8a3e5140-e9eb-4cf9-bbef-07b00c259f2e": "chair", "01efd00d-e214-43f4-b2e9-2c288d677aed": "sofa", "d6b8d980-efda-4984-bee3-e7fd750e88fe": "sofa", "6e898703-342a-4886-ad43-794337f55cdd": "coffee_table", "5dc37eca-0a23-42a8-9a2e-f8296d125977": "sofa", "7f602f0c-f8f4-4e2c-92aa-054652d17993": "stool", "787de2ad-7ad3-4b6d-95f9-da9d3554ad56": "stool", "5bc98dcc-616f-428c-9e01-f3cdfd559b74": "bed", "dafe7784-aef4-4afd-a31f-6a9f79a50bb7": "chair", "9600708e-c589-4924-9dc8-c2fe3286497b": "bottom_cabinet", "195a3017-eefe-4cea-b140-c9f271aa6469": "coffee_table", "bc0b1c5e-57ea-4a5e-afa4-779906d08994": "sofa", "6cc1c4c4-5b3c-4210-9b2c-20043874c1ad": "bottom_cabinet", "1cad6c4d-48ac-45a4-80f2-f4b66c09826b": "ceiling_lamp", "470c931b-30d9-4817-8040-4bca427ee2aa": "ceiling_lamp", "2f247606-3729-4b96-a660-056a9d5bc76e": "sofa_chair", "8800ce18-adb2-40c0-aead-6e3ac8b42a4b": "chair", "d2af55dc-deaa-4b24-9b3d-2632038c61b2": "sofa", "05a5e69e-bab7-4b3a-b89c-fbc54f63c3ca": "sofa_chair", "3b9b33a7-792e-4692-b7b9-c1b56a02e71d": "stool", "8aa5d694-f1ad-3af7-811c-7341c44c1928": "table", "6949cc85-3d5c-43f3-b3cf-9b1d0a68a5e1": "coffee_table", "03375fab-55d8-48da-85dc-4d3876da4f67": "shelf", "664f5826-d09f-349c-8265-447f23fbaf65": "sofa_chair", "036f162a-6fbc-4fd5-837e-74341b8cb980": "ceiling_lamp", "5225ced7-7ee3-4b5f-98fe-127a94e9a2d4": "bottom_cabinet", "319bbcac-84a5-41c1-84ad-49b63b3f1ffa": "shelf", "6e8a91c8-ce26-493d-87f4-df89ae7c3407": "bottom_cabinet", "52773855-35bf-486a-86e1-8da6f2b0f949": "bed", "b8307272-f3bc-4b03-8dc7-d12231fbd96d": "bottom_cabinet", "04ba615e-ee8d-49f2-96f0-52a16f8993ca": "bed", "efee4898-cecb-4ed5-938f-239931c5886c": "table", "605eeaba-408d-4040-a1a9-e94b438592f3": "bottom_cabinet", "12579879-7c06-48e3-8018-c8a038984c66": "table", "ee7b15ba-d172-4a32-b1d3-ec7aefc8fee6": "sofa_chair", "0561f98b-635c-4d62-8ab7-c7724511b785": "sofa_chair", "7f0315f9-2cf5-497e-9bee-f52948484c08": "coffee_table", "43733ff6-1f45-4c56-89bf-619e8d9f7853": "bottom_cabinet", "6cfad637-9ad5-4ddd-971e-a1777bfb4218": "sofa", "ea30661d-7921-40b0-965c-3a0715440ab9": "coffee_table", "13f9a010-1c1f-4755-846f-38c69593a47f": "sofa", "b0f83038-eda6-49c1-a8b9-3ba218106955": "coffee_table", "777d4706-f9bb-4d30-b1af-3be93ed9f5e5": "chair", "e6807698-c57c-45e8-a2b8-7ee12fa8345a": "table", "a44054d5-9370-4353-9bc8-c73709d82d65": "ceiling_lamp", "22791c11-c190-46f8-996f-a7e5583c3056": "coffee_table", "ce74e7fc-0485-4bbc-ba5d-f2efc5fca354": "chair", "f85fa790-aed8-4e1e-b2d0-16c97d77c1c2": "bottom_cabinet", "15476b5c-7173-41e9-953c-333818c25bff": "sofa", "f3fceff6-41e9-4994-b79d-faad21aa0fda": "ceiling_lamp", "9d877812-b514-461d-8405-0d9305a65304": "ceiling_lamp", "4208bb28-b006-4701-affa-c5df5f1f2f86": "sofa", "6781a962-7ea5-4119-9a48-7147e936e19d": "sofa_chair", "821cc811-9bbc-49cf-af6a-c1a595a116ee": "stool", "b332d456-bfbc-43b3-86f7-52a64d482262": "shelf", "ac903435-733a-450a-9353-70e135c4db1f": "sofa", "99fa4ecb-4998-48b8-b17f-ffffa6bb1722": "ceiling_lamp", "01687395-14ca-4ed8-8e51-b18463d630dc": "chair", "b37986c7-b76c-4d31-9f2c-ef1e861ec72a": "ceiling_lamp", "08ef7379-aa9c-3f4a-988b-e4834c4a3ae9": "chair", "a8bff7a3-6e3e-4928-b943-a265b2bb9773": "sofa", "51f88f6e-27b1-4cff-94a0-1d64dfac3172": "table", "486e87d6-3e65-4d79-8863-cb12ead2dc88": "ceiling_lamp", "0424edd1-b8d0-41a3-a705-09200a44445b": "bottom_cabinet", "6595c7b4-6f3a-4f0a-bf48-e5e52212042a": "sofa", "f8b2d9b1-4eec-43f4-9eeb-d4db35f8be1e": "ceiling_lamp", "7a4df5f7-1c73-46c3-ae6a-c0aade5d6767": "bed", "543075c6-e948-4a8a-a9e4-bebc988b3996": "stool", "18fadbac-327c-45c6-b1c2-b9e8597158f6": "bottom_cabinet", "7caffde9-5096-4053-bd6c-d2437e15f09b": "sofa", "11960890-cd65-442e-9f36-5bd2d8336f0a": "bottom_cabinet", "38e8874a-0c29-4d46-8ad6-4ae7d050c462": "bottom_cabinet", "41dc35ec-0839-4667-83ce-d358a5c5dcaf": "bottom_cabinet", "5ad97bd1-0f41-4d4d-b6f0-c8580a8353c9": "coffee_table", "0415b54c-9fbc-4261-b9e9-018e3910d63e": "bottom_cabinet", "0ce8692e-8050-4fcd-a86c-ebe8e32db354": "chair", "3989579e-0f89-4d43-b451-51a4dae3d2e1": "stool", "07f7b6e7-999f-4bf3-8336-455febdcb23b": "sofa_chair", "ce5d33c2-796a-4f6c-a36e-81eb84b6c875": "sofa_chair", "a11fbb79-e677-4f4e-8f7c-94b99434f1e9": "coffee_table", "c2d0bceb-84a6-4fcc-9d24-ef7e34a6666d": "bed", "a8f8397d-0fdb-4ccd-985f-54771dbeb186": "table", "43065d31-4404-4eb9-95e9-85bf6f5d4522": "bottom_cabinet", "acdef222-48cf-47e8-a7ae-9b23568651a2": "coffee_table", "f0b346ac-4c07-4fde-8eff-9c3537304525": "bed", "1b98b0ec-0397-4241-99cf-b342bc319359": "table", "7a276f3a-d7a6-4af6-9505-5c108d59e84e": "table", "8d351170-7ae8-4080-a1c2-796980d8c463": "sofa", "c6cb7406-f11a-401c-9010-4ceb76dd889f": "table", "470dba8a-9f91-4f6e-bf27-6aaed43846db": "shelf", "c2a14887-ae1f-4b8c-ab37-bcb949229616": "chair", "26c7919c-b7b2-43f3-a335-d4534e32e8c3": "ceiling_lamp", "b7868906-f9a9-4e0a-9ae9-d60e12f41afc": "ceiling_lamp", "8b622586-023a-4858-a402-9e7d0b12bc4c": "chair", "7e79e5f8-d94b-4807-9676-4eb0e4e142aa": "table", "4577aaff-6511-40f1-b574-ae8f24e5e832": "sofa_chair", "dcda2b87-93fa-4056-95e7-f7844785e187": "sofa", "ba6ae635-b166-4331-9714-c5b5cfe01a8e": "bottom_cabinet", "8ac99877-4ebd-4a4c-a06e-5673fc1c158b": "coffee_table", "2767c5cc-24b2-341c-b76a-e0f5c2153b0e": "chair", "70795ab4-6613-4f2d-9010-b5c2e660982c": "sofa_chair", "12491fd8-0e23-4f2a-bd9a-d1ec4b203565": "sofa", "05f3ad13-7ced-42f9-baa0-340bbac7f98d": "sofa", "62cf0e93-d73e-43e8-bb30-113ae0dd7a1b": "sofa", "7938dfd9-5e46-4b29-96ba-6db9577f9368": "ceiling_lamp", "22e5f69a-dba4-4d48-b4f4-8459b5fd799c": "ceiling_lamp", "42061aa6-19bd-44f8-95db-e91d3fc90d54": "chair", "f366b9ef-9127-405e-b263-58db5a986fcd": "bottom_cabinet", "70fb47a9-3173-4d04-9d7d-f79da172a999": "bottom_cabinet", "0ff29889-665c-4b9f-93a3-3b1a9ad0c688": "bed", "54bbec00-286e-4e5a-90a5-5682caf5053a": "coffee_table", "3778f63e-b421-474b-9b88-b06e6502018b": "shelf", "b63299fd-c11b-4a1d-8511-31cbfe11bcea": "bottom_cabinet", "0b148b31-c178-4da1-898d-a38cbd4e2754": "bed", "7b16303d-fe2c-4e81-a6c8-b9b758ab455f": "sofa_chair", "d0488331-92cb-49bc-976b-5a407e4da864": "table", "d7d77585-2064-4254-8c65-2c46c13167ff": "bed", "115a30a5-785f-4229-8fed-470d4860dbdc": "sofa", "3257cbae-4b6a-4494-a859-071bae4c65b0": "bottom_cabinet", "6c4bcbcf-da1e-4d66-8cef-3d3941a55f56": "bottom_cabinet", "3e36f8bc-83aa-497b-8179-92c76f2d7d56": "chair", "bb0a025a-2bee-4a6e-96d3-9559d8a56e3e": "shelf", "706d0a67-d418-42a1-af06-922c47841a31": "sofa", "842bedb2-5379-45f6-9678-c5f385ddba53": "shelf", "bbe81028-38da-4ca2-b6a9-7afc0a6eb6d1": "sofa", "85c6562f-1e32-4dbe-a2f4-f2e7ad32ab02": "bottom_cabinet", "4e0171bf-e343-4963-921d-86022ad4a063": "bottom_cabinet", "1ea295c5-c220-4e65-8245-7db92b6d246b": "coffee_table", "4d597dc2-b07a-39ee-a775-2bd021887902": "table", "15795b72-071c-4965-b374-8699477523b9": "bed", "22e2d45a-0854-4bec-b9f6-271223d321a1": "table", "68af35cd-4b88-4c0d-914e-5a713a4c69a0": "bottom_cabinet", "273009eb-d503-4ebd-aa3c-2f1b4772e7ab": "coffee_table", "68c8a024-dfb2-4afb-9744-c057bf9e09a9": "coffee_table", "3da90446-a1e7-4f5c-b4cf-372fea72e9bd": "bed", "4159b181-95ea-3f6a-b68b-8131e75c755e": "sofa_chair", "13d01cc8-b080-4e03-85dc-eff4a65b0716": "bottom_cabinet", "46244e8e-fb9e-4a3d-9448-4f1c3bb5b159": "sofa", "84ce2744-2c18-4fc1-b8ce-6a34908fdedf": "sofa", "3664dd1d-7fd1-49b2-b5d4-8b9c613c1fcd": "bottom_cabinet", "e536ff89-c363-4c5d-886d-25777ed2e66c": "chair", "087c2571-888d-46a2-a6c3-d0a9c6988a4e": "stool", "6b07fdf9-3353-4f71-b919-12d9b6e725c4": "bottom_cabinet", "6016e4da-6365-4b64-a6c1-468be224aa11": "sofa", "e4b2f668-097d-43c2-b784-27918a8fb6aa": "ceiling_lamp", "9930c8fc-c0fc-4298-ad0d-100f42af4b62": "sofa", "02f2de57-d296-44f3-b2bf-dd56f7ebffb9": "bed", "dcd62f60-0954-4573-a995-0abc96367f1f": "sofa", "a0520a51-a1dc-4a46-93a0-dd8f326c7a55": "stool", "caec9173-0f6a-4cbd-9d6e-036f13c9994b": "stool", "57641687-ab8a-435d-abb9-83c9398fd313": "bottom_cabinet", "2e4a41c1-dcc6-48f5-87da-8216011f697c": "coffee_table", "20256e43-e58d-42d6-8f21-0810936def36": "ceiling_lamp", "395251d5-2f67-4b6f-addc-b3cfc149fa99": "bottom_cabinet", "99e35a9e-b125-4334-949e-5845f987a53f": "chair", "e2e1cf45-ef0b-4f5f-9383-114324ebe919": "sofa_chair", "f6564ed3-2f2c-492b-b0b1-6c78cb9d66eb": "sofa_chair", "41743f1b-a039-47fb-9f11-d4048acdf0b2": "ceiling_lamp", "2d30236d-a98b-48b4-9610-bd309395a465": "coffee_table", "0b6d6dfe-8e30-3259-87f3-bd2f2181f780": "table", "b3d5c356-4f91-4d01-a8b6-f76b5c7c289a": "shelf", "d7cd8bab-72ad-4d13-8753-a9780013210f": "ceiling_lamp", "a6740956-d396-4a32-8339-60d811de1a53": "chair", "5a04bc49-3476-4d7e-9538-d000162fa449": "shelf", "54b533c9-fbc1-4c08-b7b6-845a2bbbafbe": "sofa_chair", "f742a3b6-410c-436f-80b7-5c62826c2e20": "coffee_table", "4b134ef0-f2c8-48f8-8e06-3fe393ea249f": "sofa", "409e5829-c368-40c9-ac6f-767fb19b4d54": "shelf", "0510dcc8-b034-4af5-870d-37f4a3294f19": "sofa_chair", "a6501eed-b1d9-4cb3-b95d-69ff6cd72855": "ceiling_lamp", "e44318ac-6453-499e-a90e-1324258f1bce": "ceiling_lamp", "88bab778-aa61-4ae3-9fac-b7ff21d7a626": "ceiling_lamp", "eeecca29-8bd8-4050-b6f4-b96ee8cbdf50": "ceiling_lamp", "10cc5317-ba78-4a28-98f9-78ed4d1a2195": "coffee_table", "6dc64c6c-cbd9-4693-8f82-efece82f6b6e": "sofa", "34c07366-eabe-485b-b51d-1a21970c778b": "coffee_table", "864f85f8-c330-4049-9458-f953b3b4d00e": "chair", "26b41b0a-b94f-48ad-ad4b-2940ff9e845a": "bottom_cabinet", "3b59e670-4d6b-4671-8302-95b273504aa7": "sofa", "1b30b6c7-b465-49d8-87e6-dd2314e53ad2": "chair", "460b959b-cac5-471c-bbf2-e6e0ffa22b86": "sofa", "aceb3c1e-f44e-4cb2-a333-bbca53405db2": "bottom_cabinet", "81bc5e73-0531-4482-bcaf-ef021db827d7": "ceiling_lamp", "5248bb82-aece-4429-9b83-3940578043e1": "table", "5d9ed4b8-593d-48ea-9c92-e5bcc4c2d238": "chair", "4d9f88b8-4fc4-43fe-b6c4-978311646225": "ceiling_lamp", "71cae2e2-a584-4adc-88da-e0d67c85ca60": "ceiling_lamp", "f7b31c07-0d77-4ecb-80f0-57584cac8070": "shelf", "0f675b38-d77d-4056-916d-28378e208dbc": "sofa", "794faad8-3dbb-45ea-a753-eedf1d1f7295": "sofa_chair", "0533cf8e-77a2-483e-8fce-543bd63adb18": "shelf", "5e64ff8a-11de-3abd-9bd6-b00c1a675231": "table", "054ae257-bd69-4e8c-b8aa-70430ee6a3d8": "coffee_table", "3124954e-9fdd-4935-8cba-c4c3c2790dac": "table", "5115cc70-7dd2-4653-9921-a7c3afb35f0e": "bottom_cabinet", "1aef5e72-a67c-4d87-8204-45439beabed9": "table", "44ba4588-9692-308c-bffa-b559e874f8e5": "chair", "4f91cb82-0031-41d6-b592-c20c21826dcb": "bottom_cabinet", "a9e66980-644d-4c3b-acb4-e9331d5326c3": "sofa", "85b6f2c0-968a-489e-b37e-4c3a13daf790": "ceiling_lamp", "643832f7-01af-463a-b30a-262090ff1d8c": "sofa", "e6c86a3a-1c64-465f-8ff4-467687511d11": "stool", "259189ef-c572-4db8-b0b3-41be520eb20b": "sofa", "7a435d3a-94da-481b-93d9-dd724616b2c3": "sofa", "ef3feea3-635f-477d-b3e2-9f8c29172dde": "stool", "de7594cf-da6b-4fdd-a201-603bb5df11c1": "coffee_table", "5dd30134-a823-4250-ab37-85b66bf4f598": "bed", "b22c6b14-354a-4014-b3f9-b1081bc7d6be": "coffee_table", "3960d4eb-0cce-45b6-9072-38be678779fd": "sofa", "771db944-ff6d-4f3a-a105-b6109575d476": "sofa", "b398bd45-5fed-471b-ae00-02d7b698adb1": "sofa", "2049860b-939b-305a-b051-6a95b4558fed": "chair", "5ce0286c-a161-4473-82c0-febd82bc2233": "table", "65660d98-3afb-33f5-afbb-41899bf888b4": "table", "74a0cfdf-797f-454f-8027-971a92c13711": "sofa", "0cd14fb8-c9bf-48be-99d3-ccdf38a7f017": "shelf", "732f3a72-7536-446d-b765-e96d99ac8e94": "table", "52207c6e-798a-4bdb-b662-fd21b1de678f": "bottom_cabinet", "3a431666-c294-41c8-85ca-2247a19e3671": "chair", "3e11a8f4-5d82-4bfe-9ded-9c89dedb1462": "table", "6af8c568-058b-4be1-90cf-6a5eddb90642": "sofa", "0319e2eb-8b39-40e6-81cf-4b8e4cde6fa7": "coffee_table", "7af83e1e-358d-4ed9-a146-93b6f5650e1a": "shelf", "e4b57600-7139-4529-b4dc-6bbb463309d3": "bottom_cabinet", "9f779d41-bc21-4c26-8f47-01418cdbc595": "shelf", "8c19055b-5cb8-4544-bd8d-e7cbf938fcae": "sofa_chair", "c4d463e5-67a1-4e2e-ac3a-464660039dd5": "sofa", "54a99429-d19e-44d8-9222-3d6c5080e8ff": "coffee_table", "8637f137-48bf-4605-902c-d47a2ff81e9a": "bottom_cabinet", "8c4ad2c8-5ba3-486f-8744-b766058ff974": "shelf", "31eb1058-315f-460d-911f-9dd4d4b80a3c": "shelf", "3fa617e2-72a1-4d55-96c0-40965ce36e52": "coffee_table", "c6655160-2753-4bb8-b1d3-13130af98015": "sofa_chair", "691b49fe-42a4-40cd-a784-c38df5ea9d15": "stool", "e78b5220-37e4-49e0-abe9-851704b0a8bd": "chair", "608751a3-c396-44d2-b44e-a3148b724c4b": "table", "663606ea-7234-49aa-a361-a0e2d5555675": "ceiling_lamp", "6073ec34-5258-4d93-a970-f1c04f24062e": "sofa", "c2fca76d-7e53-423f-a35c-98b4a4c32dfb": "sofa", "f4b1c97b-ea2d-4911-8fe4-a8368e426781": "coffee_table", "b46ddea5-fe2a-4699-b0c3-e50683375999": "coffee_table", "73bffbd5-74a1-3efd-87d4-a8f0c0b7ac1d": "chair", "00754f96-5380-429c-9a20-50b67d8a51f0": "sofa_chair", "3ed16418-d4f6-4e06-9ea2-fe47c9b0d2d2": "bottom_cabinet", "587be7f1-bbfd-4948-82d8-217d70e27fdf": "stool", "2c12b4a1-a364-4653-aee1-fe96c466a98c": "sofa", "6052bb84-e1a6-3071-874c-5ae10e3e12ea": "sofa", "74bceb63-6d67-3971-89a0-bb4a12122d06": "sofa", "1270af0d-9133-447f-8556-aedc9eaa4d0b": "sofa", "2d9188df-b68c-4c52-b107-9d035451a959": "sofa", "01ccb00d-2cc9-464e-a250-42adbf4eb646": "coffee_table", "deed08ce-fe58-43d5-9cc6-a03a0c999481": "shelf", "d89ec2d4-ca71-4332-8d2a-ad67251baa0a": "sofa_chair", "47a11128-1de8-4624-aa37-226979c7a248": "table", "a530a844-9026-4caa-b238-4afec94879af": "bottom_cabinet", "2bcec827-4fb0-4861-a75a-17d1ac733de2": "bottom_cabinet", "b328cfe4-5621-493f-994f-24740d65dcde": "shelf", "05ed4b24-6e66-427f-9c2c-7b429a5807fd": "sofa", "653f2baa-60de-4d5a-b0f4-c3f1b5461e92": "table", "9fd58502-e7f8-4d8d-aa3b-c7eb513648bf": "chair", "297bf411-0477-4ae3-afd2-f25344209549": "bottom_cabinet", "c8a4c36a-45ec-4ae0-adb4-a6bdc6b89533": "sofa", "dd5f5e5a-c20c-4214-b16d-749940738759": "bottom_cabinet", "f8cf8ab1-7d50-4cd3-8120-0d130bc27d14": "table", "d293a3c0-72e4-43b1-b188-cf905a23af1a": "bottom_cabinet", "50ca90b4-ca3f-4b10-8754-18d0d0fcdbf0": "sofa", "0fc7452c-650b-4ae1-9190-11949e669499": "stool", "c4b7ea85-4dfe-4588-93a0-7a7b6eefeaae": "ceiling_lamp", "b9b68b7a-3045-4d2d-838d-f5cc17f8358c": "bed", "2fe8d64a-5ea2-4901-b7dd-04a26c568014": "ceiling_lamp", "74c91fba-a354-4975-b3f0-55d13ff4a383": "coffee_table", "1c56ac9b-0c64-4ee6-a735-1899f97854e1": "bed", "0ec37814-fac1-4cdb-b945-b890f1310a7e": "chair", "04f692c5-b4da-44ae-a74a-1d95b8f264d5": "ceiling_lamp", "34cf6d9d-b643-4e94-be4a-082733a297d4": "ceiling_lamp", "acc60b8a-47a8-4bf6-b0f4-9eb4ffce2f32": "chair", "153d3ca2-02ed-460a-bc48-c5a5f472d5c1": "bed", "37ef9777-84f4-4858-ba7c-491796e6fddf": "shelf", "e48d2ba1-64fe-435c-967b-4c5bb2d7df59": "table", "7a5089b3-6631-4b2c-9ad9-a819d57bacdb": "sofa", "61062201-7a64-484b-b02b-460946b66dcd": "coffee_table", "b532ba4b-ccd6-481f-a097-69247e5f196f": "bottom_cabinet", "68cc0244-6327-422b-8dcc-fbe6373df0ed": "sofa", "8e5d7139-69ea-4ed4-abb7-1bb047c378c5": "sofa_chair", "5698039e-91f4-4e52-b39c-f6a79c03b9c2": "bottom_cabinet", "581a9a69-d4a0-4025-afaa-6cf6854661c5": "bed", "7fdf4e54-7b30-40c1-97b8-aef918e0131d": "bottom_cabinet", "552404dc-9ac1-46b7-91ef-3b8bd642dc79": "bottom_cabinet", "6897f186-ba4b-3e26-a0c1-401bfae54af6": "shelf", "24ae86f8-6a16-49a3-b0e9-f35bfe9dfb3f": "coffee_table", "af727019-da70-40fb-87c4-97870423fd65": "stool", "8c9c75e8-d0d1-4da2-aa99-bdba646ae63e": "stool", "6df723b6-51ec-4339-9efa-912110603763": "bed", "59ae2bd3-3a02-37a5-aeb2-7927ec8a9099": "bottom_cabinet", "7eefcf00-8b7d-46c3-9241-e8b086f47c14": "sofa_chair", "1ca9ff35-404f-4276-a4a0-ac2800f7aab2": "table", "7a23f714-0bce-4123-8054-dc7b517e6415": "bed", "cfa158a1-24a3-4f00-a999-ef7c64aa4f44": "table", "7f74594e-2d69-4195-b163-668b0c8e6dbf": "sofa", "e465837d-ff86-44e0-9f51-592910107e4f": "coffee_table", "13c62b58-7cc4-4bf7-80d1-3d5f05080f54": "chair", "05b03925-70b7-4dc5-afaa-60567e89bb0a": "bed", "00dd3e56-a852-43fe-b5e1-b9ba98772755": "shelf", "d9f24b25-58aa-4bf2-9810-37a02046abc4": "bottom_cabinet", "8e87bddb-4980-4393-aef9-a4475c6a7d84": "coffee_table", "fa806a59-4b25-480e-9502-35d15427ac14": "bottom_cabinet", "68b71f89-0b42-4e75-ac75-a3f3f5588bbe": "ceiling_lamp", "f9685d74-8637-4d22-8ee1-fe144ec8aac4": "sofa_chair", "6872c816-e88d-45f3-9465-f856e58504b3": "coffee_table", "563dfa58-4257-4ada-a3d1-c7f07d746af9": "bed", "8260a9f1-59be-4e81-8696-99995fe82e25": "shelf", "a6b7b3b9-c061-4c3a-be8f-e380b93694ca": "coffee_table", "c93297f5-50a4-4f80-8bfb-085f61af44a2": "ceiling_lamp", "f2c5deb2-67eb-49a0-af58-19c92a87d280": "ceiling_lamp", "5d0106a3-9759-4d7e-8682-9ac96b210779": "bed", "08857c2f-2242-4178-82e2-c2a96d735fd3": "coffee_table", "7875ba68-46bf-4e43-b409-761dc4a0f7af": "coffee_table", "c06d74a6-6d02-45ab-92ca-c443ff5b4f9e": "bottom_cabinet", "9e9f4548-4d07-4e9d-8da6-aa0b516cfd01": "sofa", "55450b11-37ae-48d8-ae54-4243bcb537fa": "sofa_chair", "b130163c-7c15-4f9b-9294-5c81fd23e968": "table", "13ecac9c-5aaf-490b-80ac-39d8af0890d7": "sofa", "3eafb8d4-0afb-4439-a020-395f3c7da7f2": "chair", "b51031f3-d86b-4c52-a1f3-0917aa2e0844": "chair", "75eaf425-4852-4096-a44a-876a42522e74": "sofa", "57f6f3ad-238e-4884-93f5-84cd9f36ddb0": "coffee_table", "e664d640-6a5b-4d18-9d1c-b28ae9ba0f28": "sofa", "74945ddc-5a90-48d1-a658-7799ade4b206": "sofa", "559f97f2-e1a8-4edd-aab3-a74b7eae1fe2": "sofa", "f8c3c03e-c471-4823-8588-1216d68e7e90": "coffee_table", "8d6f86e0-429b-4137-bfcf-361b610433ee": "coffee_table", "09e66e82-b652-31df-aecd-f3c468264c62": "sofa_chair", "007a52b4-27db-4430-b754-4fc5f254e917": "table", "00859a4c-8945-4665-92e5-69ab8fba6593": "sofa", "3c6a5d71-fb59-4e09-8e30-73ad7d5120a7": "ceiling_lamp", "7e4d8f59-4e46-441a-ae94-259f0d61d04b": "chair", "65ecdbb8-77d1-46d8-9cf4-0bf305496615": "bottom_cabinet", "1ee229b7-e7a8-48a2-96b5-a3ca063327e3": "shelf", "793417c0-aea5-45b7-9d08-908f24535abe": "ceiling_lamp", "1f4c4bcf-eabd-4b01-89a7-0040213b3ad0": "coffee_table", "601ba512-15fa-4e0e-9230-c4b99f0610a1": "sofa_chair", "58808826-073f-4cc6-9060-920f50b9a403": "coffee_table", "93488703-4eb8-4c88-bfd0-ae3c1be9516f": "shelf", "6340af53-5094-4570-93d6-63ddbc0c6cc0": "ceiling_lamp", "ffc2d6b6-17a4-43ef-a7e2-e85e63e74a1d": "chair", "949cbcce-6629-4b0f-b2bb-fda5a49b9061": "coffee_table", "047b54f0-4ee4-406f-a25c-b3f12cfa88a1": "sofa", "b5c1677b-8398-4332-9e83-e85c789ee209": "chair", "37261dcc-f6eb-4b5d-9365-68a9496e89f0": "shelf", "b6d34142-e8df-47e0-8340-01f38359fcac": "bottom_cabinet", "1dc3ef65-a72a-4c6f-b878-0e86b7e5c964": "sofa_chair", "332a5983-809d-3ca1-b25f-02f517fde295": "chair", "3e5f007f-3630-4ef8-a5df-5effdd975c3d": "chair", "81a16c65-26ec-454b-8822-a13fedd4272a": "bed", "4dee94a8-547e-40e5-8e69-72f5b30251ad": "sofa_chair", "f42becb7-8aed-411c-9968-43b350e658f4": "sofa_chair", "e4700dc9-291e-493b-af80-524329c405fd": "shelf", "9270ae91-dd5b-452e-ad61-03b5760bf025": "shelf", "00fbb26f-13cf-4916-a8b0-f6241482abb4": "sofa", "0c2ffcbe-eb69-4531-b4ae-05be4830a2ee": "bed", "65680246-0eaa-421b-a0eb-77c46c80d2dd": "coffee_table", "4d82ea89-c529-4b3c-940c-4acb045844de": "stool", "46788be0-14e4-4d73-a3d3-a018b29ffcc4": "coffee_table", "ed18d608-4fa6-4fde-a7ec-e89385f7a1f7": "sofa_chair", "c039a9cd-5325-4fab-a530-328384540029": "stool", "63a7baaf-6c6e-4c64-92e8-9c0a35bbc968": "bottom_cabinet", "d1c36ec7-90df-4b54-917a-6ec1782dfe9d": "chair", "5d2dcacc-9ec4-4375-89f6-09aea58bd68b": "ceiling_lamp", "c073fddb-cca6-4a1e-b864-b4fdb4d12b29": "bottom_cabinet", "a8cd2277-de84-417f-a03e-bd017ad4e7e4": "chair", "8f699cfd-5905-474e-aab1-7fbbc40ef7a9": "stool", "1261c3e5-9d31-4474-abe5-da2c1668ef63": "bottom_cabinet", "b1bca4f2-cf88-4b8b-9a99-7bdb33e71a95": "coffee_table", "dc3da40f-423f-42b3-b6e3-adc0096feaa6": "coffee_table", "6a75a795-2595-4710-95ce-a069b0bb3546": "chair", "a3fbcddf-b550-4d48-9709-34962ae0b426": "chair", "4391f854-89ed-41a5-aa3d-c77447b63b9b": "bed", "d3cd293b-736c-4336-908d-3bf63837719f": "shelf", "21c8059b-9723-437a-ad8f-526b5d736ab8": "coffee_table", "c80c5280-12fd-4220-896b-db6f372f4b96": "coffee_table", "7346bc8a-577f-4d5f-a1a1-497a2b5cd7f3": "coffee_table", "173eb984-a4e8-4907-9353-4ecc1977237f": "ceiling_lamp", "56346505-d188-4586-a21c-f39b05274562": "sofa_chair", "777f06bc-a1ef-47ca-bef8-fb127f7bb17e": "bed", "5bd2ff09-4b68-48a4-b91b-4325eb14e2db": "coffee_table", "4b45f81f-09e3-4a25-8d6a-0cf08002db93": "sofa_chair", "29f53b62-90e7-43d8-a3d0-ee04fe692f4a": "sofa", "a29f69f7-9df2-4038-bb61-122c9f6f907d": "chair", "2489336f-43ec-4e9b-85f6-b7615bbea9c6": "sofa", "4167131b-293a-4c3a-bea1-7c59d3a5a6a0": "chair", "7bc1df8e-8bd5-47da-bd76-7fed0b1fce83": "shelf", "6b264b9e-9c11-41a6-a600-b370abe6a231": "sofa", "75f47372-de54-4ba1-99fb-f48347428072": "sofa", "38fa85aa-6bda-465f-8e51-b582e2616067": "coffee_table", "7bad5463-b249-4fd7-84a9-6de02b0060bd": "coffee_table", "57a4a270-d34f-4d32-8d61-56d2cbc63b9f": "sofa_chair", "e378c461-b73e-43ff-aa47-bc393b097fa5": "coffee_table", "956197c0-1ffe-4707-91da-37660fe8eb52": "sofa", "487e3552-1f49-3925-8993-967b148de273": "sofa_chair", "4cf8178c-7c07-41f3-aa07-9b64458b6ae4": "bed", "a6707409-ce9c-4873-b65b-c594e1a1b67c": "bottom_cabinet", "58a4a8c3-3c68-396d-8e3d-b357a2eec0c8": "chair", "4f6da8fa-e161-4292-8fba-e6f8b1c2e4dd": "table", "67df8de8-fe77-35e0-a7d4-b54552e0e36b": "table", "51c20876-8a24-446f-aef5-9b07006ad01b": "bottom_cabinet", "8154f369-214f-4885-ab84-752a7109bf4c": "sofa_chair", "8304f2a2-e191-4987-9af7-bdf6384495bf": "bed", "b862ca4b-207b-4e8b-838b-c99a5e502daa": "sofa", "565d9237-b322-43ac-b0e2-c6b47ea728dc": "sofa", "97d2da13-f9ad-4b3e-ab62-f0ea0c7d066d": "chair", "5e45fbb8-da62-4d69-a204-0a6821cec957": "table", "0eac6b3d-dc20-4937-9005-40fa478b1d60": "coffee_table", "94f9004e-46c6-49e8-9cdf-2beb6f96af8a": "sofa_chair", "763ea3ee-03bb-4897-80e8-fc27824f1615": "sofa", "5cbc3982-865e-4d61-97f1-564c0497ac43": "stool", "5f4e4280-71c5-37e6-967c-c6b8f21a0b92": "chair", "679047ae-ee91-4605-964d-4c7e2e21b938": "ceiling_lamp", "731509fc-6200-47cd-9e69-5d8ef55c3f8b": "sofa", "27908d6a-1195-4538-98ac-1a072798e58e": "ceiling_lamp", "c671e3da-9c20-49c8-b79a-a357ac447c38": "coffee_table", "0512aee9-b2e3-41c8-8db6-b93247318c97": "stool", "1f26832a-db11-4d1b-b44f-b4f99d548d5b": "coffee_table", "80192f3b-4d5e-4263-8544-a0fe51c6796f": "bed", "8b338186-9acd-433f-99ce-d156a84e27c5": "chair", "25c924ef-cd89-4e88-88da-2f379e67c717": "bed", "0d151f94-1e99-41d4-a9de-8c674d54f503": "bottom_cabinet", "85813056-b5ba-47e8-a940-9c3540ea9cb1": "coffee_table", "62eb1d41-b20e-4ea0-8d4a-10f9665c4a01": "stool", "78b78ae1-7363-42d6-9d92-3e435563b8aa": "bottom_cabinet", "eaf67de4-9ff4-44ca-919f-7afe10ca560d": "chair", "63e2c3db-648c-4fa6-9be8-5802ba48e145": "sofa", "bec02087-aeef-4018-bd2b-90a141cf75d8": "sofa", "4bc0b1d1-ce6a-4b7b-8eeb-4da336ea53a7": "table", "825d5591-8b48-4f21-9edc-98c0f33d6e0c": "bed", "26ceb30c-01a5-448f-9714-85759b08abd4": "shelf", "4d5da561-8adc-4c16-8eac-593740646701": "bed", "1b8736b6-b495-4a46-b9a0-ba8a7e23c861": "coffee_table", "6d2b4039-8a5e-42f7-94c5-2600d6e2925b": "bed", "64ff9c08-80e7-4d0e-9456-105230bd2de1": "bed", "4e6a3c9d-2d94-4457-90e1-adfaa7037de4": "coffee_table", "6fdd09dd-4767-4820-a879-9683dadd1879": "bed", "b0243319-1b93-45e6-b7af-8efc2ad9aa9d": "ceiling_lamp", "d561f190-a983-4ec2-bb30-5d917d513e83": "sofa_chair", "3ee20c12-cd65-4d9e-8c47-b22c26ff7ff2": "coffee_table", "551dfab5-0210-4a1f-b213-8cc230f44d3b": "coffee_table", "e597e9f5-8599-4fd3-8818-bb3839f07519": "ceiling_lamp", "47ef6062-e3dc-4eb5-8aaa-350e857eae40": "table", "7c320ea3-63be-431c-ac85-b0f29d7e4697": "ceiling_lamp", "fb338f53-00f1-43ef-a6b8-ad249ce6b951": "stool", "76c240f7-f21e-4226-9cc3-d489940c1d3d": "bottom_cabinet", "3b24e2fc-2f7f-49b3-bf76-81b226a74046": "ceiling_lamp", "15b94a23-059b-4c12-98f8-bd651083d20f": "table", "98f5ddf3-8303-4dc9-829d-e4ab70db3f16": "coffee_table", "99b09c57-c42b-4288-98a6-6ad2e01d6708": "sofa", "f3733cc8-415b-48fd-9f0d-0d2682d036e5": "bottom_cabinet", "d96542a6-0e17-4076-948f-b09f0891ea60": "sofa_chair", "a0a4bcc3-a960-4f09-9ee2-458f57b0c997": "coffee_table", "40799068-9192-4e25-8744-6ce5f388930c": "bottom_cabinet", "89e435d5-f2eb-4554-a6fb-e48a5001d09b": "shelf", "3d88f944-0702-4e86-bccd-4ece63efafe2": "sofa", "eb402770-81d8-4111-9e23-7ed62aceeb9e": "shelf", "8fef3232-a16b-4bc2-bacd-b2738aeed388": "shelf", "bd30f23a-e2c7-4704-b1bf-b9e7278f5b55": "coffee_table", "28249cf6-59be-495c-a98a-8c23d29dbdaf": "bottom_cabinet", "563ab134-a24f-4b12-85cc-1cba68b1d9fa": "table", "2502bec1-6813-4048-afa7-7d84dd95cbbe": "sofa", "22a8bd60-7b3d-45a9-bdfd-b7c4b85f066b": "ceiling_lamp", "21dd8290-cbec-456a-b881-fe327a9b7c63": "bed", "5bb21669-d969-4507-94dc-1bd9c806806e": "coffee_table", "d59b107b-663c-4b56-8dd2-f26493d8abfd": "shelf", "557b3fd4-da5e-4503-9592-ca65a9648a1e": "sofa_chair", "66be50ba-9d16-4518-8f57-887cc9dd8b18": "sofa_chair", "663dcac3-9c51-4108-ba87-673e54f44637": "bottom_cabinet", "1986f65b-be81-439d-bb1b-5dab26214e57": "bottom_cabinet", "073e761b-b9c4-4e9b-af2c-4e65f7f1a9bf": "bed", "919025e6-660c-4583-a892-ec3709bee55e": "table", "1b7c7f4d-b801-455a-ab56-8e29286ea59c": "sofa_chair", "6aaa0e94-f338-446a-b640-52a0de8a505e": "coffee_table", "08b50ec7-f8ce-4859-afca-24e840343dad": "ceiling_lamp", "1a223c39-32ab-4caf-a528-60373012ac13": "ceiling_lamp", "9fe7e3db-4713-48b0-8d3b-ad182529efce": "sofa_chair", "684a0dc3-a955-43c7-b40e-e215909fce11": "coffee_table", "09397f3e-1b54-4056-b03e-00e174c639bf": "coffee_table", "d90a1757-89b7-4bb5-a281-8e643b4735fe": "bottom_cabinet", "a975e5f0-d61d-4fed-ae91-84688aef8437": "ceiling_lamp", "81b63911-a15d-421d-b400-bea2e1e094c0": "table", "29852e58-6589-4486-bd9c-3821e3db58ac": "shelf", "352eb2b1-5fb9-4b3c-8253-ddd5462f7747": "ceiling_lamp", "f25c4fa1-d5e6-4eb5-ab32-ca56afa96cd3": "coffee_table", "23ce18cc-557b-44c4-9b4c-5fa1f1ef3c0b": "bottom_cabinet", "8962bdd6-ad30-4d05-aeef-9878951c6c5e": "table", "7b44b535-cb30-472a-8b6e-df6fd31c848c": "ceiling_lamp", "03d2c211-6bb1-475c-8a61-69246f5e0483": "sofa_chair", "77a87475-7ea9-48cc-9dbd-6ddeea06364c": "bed", "002cd3a1-78b2-4a2e-aa01-5947dbe994f8": "chair", "46ff8f18-6ccd-4712-acd5-58d00ddb0807": "shelf", "d8be3f19-74ff-4495-82e7-a69a7f679678": "ceiling_lamp", "4b613fb2-4e15-4b2f-8b8c-f1a9302cc4f1": "bottom_cabinet", "48261cc3-38e4-4cf5-af61-a16ae090eaef": "coffee_table", "2503a513-954d-458b-9714-4744ba64cccc": "bed", "75026e8e-44de-495d-b111-7db007821b16": "bottom_cabinet", "b9ab752f-8cae-4a6b-80fa-2a5a9e8d6435": "stool", "16ad2792-36c1-4264-baa4-dcc5ca224f47": "ceiling_lamp", "002c9b8e-f05e-4ecd-8d35-0e5a4b1a0ad4": "sofa", "2c5c4934-16a8-4eb7-b9a3-08a40388b184": "bottom_cabinet", "f4bd26a5-6b6b-4c70-9cf9-09b8310c4454": "ceiling_lamp", "5052f549-d8bc-4230-b8fe-b98846154a60": "coffee_table", "b24b1afd-b058-479d-a227-1b433b71d695": "chair", "32b2c762-ee42-46da-bc23-eaeaaf60496e": "sofa_chair", "654a82af-b367-4d52-a7f1-d1c2782fe3ea": "coffee_table", "5c7191b4-297f-41bf-a280-0bf54a42fc2c": "ceiling_lamp", "38cbe8ea-c0f1-4459-9c0f-3fc276d0388c": "bottom_cabinet", "6e9e1e84-ca99-4ae0-b082-9feb3f962879": "stool", "13e76b19-025c-4909-a65a-1055e2f62471": "bed", "5357ee78-a830-436d-b36e-d83b088788dd": "ceiling_lamp", "6e2c0320-48c7-4d7c-bd98-0d0a35148714": "ceiling_lamp", "05667d56-f53a-4d86-a7ab-382140d2eeaa": "bottom_cabinet", "cd51a757-f111-4b48-b2a9-e1817c2ead92": "sofa", "23da5e52-d5df-4007-b419-27cf43cd8644": "sofa", "7a64e890-4891-3865-93f3-e12a95027455": "chair", "e41079ab-5497-4a1a-8357-47f65117b343": "chair", "74b409b1-9e04-4abe-89b8-a953a9b1337d": "coffee_table", "5ef74c88-1042-4b3c-b8ae-8e7bdb0735a3": "bed", "e914e4f7-9047-44e6-9a8a-19b64427ad37": "ceiling_lamp", "28b7ed8a-0382-4fe5-82fe-8fbfd34a9c08": "ceiling_lamp", "4245a717-b7e9-4ba2-a46a-56eed1b2ba63": "sofa", "b21aac6b-bee4-49ae-bc59-f8aea8bbaa90": "sofa", "1e5cf667-e6d5-40ce-a579-7f4c1ca84b76": "chair", "01ed86b1-ced4-4912-ad00-bc6f577b0d2f": "ceiling_lamp", "2946a5e8-d81d-4768-ae28-f27ba8886410": "bottom_cabinet", "00680be9-2ac0-4a4c-ba1a-528be9f0a15b": "coffee_table", "65220997-f0e3-431d-8544-e4c3d6cb64a9": "sofa", "076491e8-2208-4c5a-ac25-53b4c423da93": "table", "01fe3767-6f21-49cf-b8da-e16b53267dc8": "chair", "548b5fbc-607b-478d-95d5-af870aa65291": "bottom_cabinet", "002740ba-6fca-4258-b631-cf031c2adbdc": "table", "49ea9e72-099f-455d-8df6-5e259542e73c": "ceiling_lamp", "05d1481f-8a79-4995-ad2d-1a43212830a1": "ceiling_lamp", "6fe37444-dcc0-4571-82ce-abf0a35bc07d": "chair", "b55392b6-47b3-4166-a4f7-500b7bb16120": "bottom_cabinet", "2324b33c-f9eb-3640-94a0-04a67d9d8461": "chair", "845058b0-62be-4742-8643-de78ef916a6a": "coffee_table", "b2c8bb99-b0c4-4bd1-8b5b-8358001a1e9d": "coffee_table", "4d36ad1a-1766-333d-b930-190a3ae5ea67": "table", "5935de3b-36df-4797-a022-e53ff4703095": "bed", "0b35e9ce-25e2-4996-9307-53472bf36c61": "stool", "d1506e67-9729-4377-94a3-ab8e3dd6e929": "coffee_table", "4c95658c-d590-4e4a-8605-bd422615de68": "bed", "f6a3fbf9-b41a-4597-b53d-482ca03053fb": "chair", "5ce0fea7-afe8-4836-be0e-948f041aaa83": "bottom_cabinet", "fc948a2c-b0e1-427a-992a-9eba96f5903e": "ceiling_lamp", "abece5ed-58c3-432b-90be-34be9df01164": "coffee_table", "2fd5c449-667b-418e-b53d-3596f954eab7": "bottom_cabinet", "1eaf6625-0487-4378-8532-79b77a856b50": "bottom_cabinet", "c71892d6-a237-4cf3-b9e4-1fe8cb9086ac": "coffee_table", "c6ab0aed-c966-49d1-998e-315213ab1500": "shelf", "2d6429e7-a25c-397b-aae8-abb949c84eca": "sofa", "30504177-1412-4369-8604-50e687cced55": "coffee_table", "24360a57-5ce1-33fc-aac6-085f5c9619ad": "chair", "8f4eb5e2-337c-45f5-8b64-803c6ecdc760": "chair", "bbd7e529-c0ff-4fe7-93cc-ff5f4c35ac9f": "bed", "29e03813-a974-4241-a643-22c38ff69172": "sofa", "3ebd0665-940a-4367-905a-80de34f71036": "coffee_table", "0fd58d11-12ed-421e-ae1b-9efaf355257c": "sofa", "a41e0581-73b0-4a28-9226-f0931fd74b4c": "coffee_table", "18bb8a8e-007d-4a10-b723-6023676b5215": "coffee_table", "2924c470-d123-48de-bbc4-af3ec50872ff": "stool", "3f63acc6-1241-471b-b4ca-202b5cddd4a0": "shelf", "117d070e-fdcc-4a11-9f30-3734a8cc5455": "shelf", "0e699251-a38f-4a93-8ddd-e465504cdaf7": "sofa", "420a215e-1f22-4f2f-a6ca-cdb37f7f0b03": "sofa", "709bb15d-00a9-4da6-9f92-e18e9391a525": "bottom_cabinet", "6d518ae9-c407-3782-b245-3ff053feddc8": "chair", "5b8ba1e5-30b8-448f-97e6-50a6741500f3": "bottom_cabinet", "62fd8089-01eb-430f-832e-f87d4d0f5aa7": "ceiling_lamp", "c5727da4-8c89-4d09-b8dd-fe70583e8155": "bottom_cabinet", "be4c05d1-de37-4dad-99f6-5024ab8a61e4": "shelf", "68bd1ed3-c256-4d0b-9fd9-b46370b41df0": "bed", "481fbaf7-add9-4f68-af6a-2e4d51162439": "bottom_cabinet", "84213a41-9152-49c3-9663-7a7817572638": "ceiling_lamp", "ac2296a2-a820-42ef-8d64-04f9ec65041c": "coffee_table", "f10369ae-7b27-46b9-aeeb-3ef930a70aaa": "shelf", "1dedd172-9399-4d74-8df0-72a6c0d98c4b": "bed", "e37c33f8-068c-47ea-9df3-fe257c8a93db": "bed", "41da43a9-5bbc-4517-ab9e-49b02e8caf12": "shelf", "45ce7918-611e-41ac-be6f-3ff01fa26869": "sofa", "7f41377c-e9d3-4900-b280-7eec67bf13db": "bottom_cabinet", "0f492e81-8540-4b4c-a481-c526bf75fd80": "sofa", "42de14d1-7d7e-35c9-ac44-fccac9cf19ba": "sofa", "108bbb43-5203-44b9-b61d-18c8d9f965f1": "table", "61844206-d82e-480b-9f49-98c5177310ef": "chair", "24ced1ae-9fa9-4e1a-8c42-5520f2f9e791": "chair", "661719bd-2859-4c82-908e-9fd1264e331b": "chair", "7245092f-2809-4805-8aca-44ab393c3c86": "coffee_table", "16d3031e-f056-4bfa-a9fd-3624b43d7e32": "shelf", "fd9e7915-339d-4ad9-9071-d55c9631764a": "table", "2138ef44-a995-43ae-a69e-89c68b79c10d": "table", "84e42153-bfb5-4f05-8e28-84e4772351ae": "table", "7c15367a-925c-4b89-8f0b-d46e2a386f7d": "chair", "1d6852d8-305c-3204-9880-b6a283f74f0c": "sofa", "62dd931f-1d9d-456f-bb9a-e3898482d24f": "sofa", "2201315e-a0ec-481e-8de0-20a0d75286db": "bed", "7cb0ab45-a470-4f26-a951-3d5988ae0f48": "sofa", "5aa84345-6b02-4d43-b87f-eed0af5c3db8": "sofa", "565c79ae-7602-4f3c-99d5-df732037e69e": "sofa", "23c21d6f-f275-47af-a8d8-a64910fcbcef": "sofa", "10b38d44-c3ae-385d-800a-10d7fa215dac": "chair", "516f087b-a170-4a2b-ab4c-b74913c2e926": "ceiling_lamp", "af132cf6-232e-4772-96ac-a75a18a21382": "table", "d80a50be-8a31-45b1-a661-649089f050bc": "stool", "7e8a8882-0bcc-4f42-9f03-42d03c1f0e79": "sofa", "c9209ff9-97da-483e-886d-08e3e64ec171": "coffee_table", "972a6ea3-2881-472d-ab5f-ac987aedf51a": "sofa_chair", "6d865182-4747-470e-811e-de741b7d077b": "table", "4a211f95-0657-366f-943f-437290133b8f": "chair", "49d42ed1-8516-4228-9c3b-1331fac12715": "coffee_table", "069c9c06-cec6-456b-b07d-d668ba08e7ea": "table", "e9b47622-2f29-417b-9bd4-617acb720633": "stool", "5a066efb-314d-3f13-98b4-0fa4ec7c32ad": "stool", "70b47a80-458d-423c-864a-4d21924570e0": "bottom_cabinet", "b8bc0f0f-104a-4a88-8faa-57240690950c": "sofa_chair", "15a04335-6294-4394-bc92-77e716e64226": "chair", "64c7b51f-5d88-4771-b8cd-5533c64dcbb1": "bottom_cabinet", "48fe0333-9c9a-47d2-938a-b093a29af8d1": "ceiling_lamp", "0eda6797-989e-426e-8f96-4e1c6c85aff5": "table", "978dc980-b198-472f-b04c-cdacf7d0e968": "chair", "57f08c70-969f-4320-9fc4-fb83447094e8": "bed", "205aca9c-7f0e-4eeb-a80c-31efe81f6951": "sofa", "5efd439d-6a3b-484a-b79a-7074666759b3": "ceiling_lamp", "c0ef8486-2c81-460a-9d19-350e4cf78a47": "sofa", "eabf16b3-31a0-401f-9538-55fadad9e166": "ceiling_lamp", "22678585-1ef7-43c9-86cf-5b312e86afd4": "bottom_cabinet", "37495c95-4930-4511-89e4-f56faa2ad0e7": "coffee_table", "4dd5b2de-3ec3-4e13-9d5f-b374bbeaf6de": "bed", "c87b799e-11c3-48f4-a1e0-c67cdf9e5b00": "sofa", "15d9cd02-9336-412e-a078-c5c0cea63527": "sofa_chair", "bb136700-4185-4376-ae5b-3de6080e4e57": "ceiling_lamp", "4893d1b2-647b-4f0f-9bca-3123fb28c881": "stool", "645a27ec-5dc3-46d6-bbe6-be6d8cd53c85": "bed", "46468927-49d4-4c59-9807-9c38bac3f916": "coffee_table", "bce3ba30-2b07-4e36-8444-f3ab430f6c67": "coffee_table", "4e347050-97fb-42e5-aa10-7d43bb151446": "bed", "eb0e6657-8c1c-406d-8fb2-625bf09cbb1c": "ceiling_lamp", "9cc4cbf6-c2d6-4c20-93a5-f7603c8cd6a4": "chair", "0d4d8459-04d5-4737-97f1-114854c673c9": "shelf", "1d920ba1-6a64-4834-b9f9-737fb7660bcc": "ceiling_lamp", "f21eef99-e223-4ac7-95d0-8c9e1a19c712": "bottom_cabinet", "efb5dd5f-118e-42a2-9ce1-210140baa01c": "ceiling_lamp", "03608677-5363-4a95-ba5c-a7a0b112db56": "bottom_cabinet", "8cbc55e2-b535-4fef-99a1-c03e792948fd": "coffee_table", "2ce68f62-b78c-348d-a267-a090468db8af": "table", "4e520d58-3e82-4361-93f1-ace258ba2f62": "sofa", "119abe6a-8111-4a91-9ba9-40b37a4bbee8": "coffee_table", "145fc897-83b2-43dc-9133-83f415995bde": "sofa", "b9a0f504-7385-41f7-9cf1-c7c5c6e7dd96": "coffee_table", "13031c58-7951-4044-8bc8-9e47cb42742c": "shelf", "0ba987fb-1ff8-4bcd-9e6b-637a1ec78201": "bed", "5bc62618-76c5-33de-bb2d-9ec00b1b4086": "sofa_chair", "1397e7ab-a767-325d-a201-88639093e90f": "bottom_cabinet", "832f0ad8-c172-4109-9dbb-415b122572fe": "ceiling_lamp", "3804111f-592c-4b84-aa3c-5e1f47ee4ff9": "table", "090fd738-2c0f-4cad-99b5-c9d2c43d4289": "bottom_cabinet", "ecde40bf-2179-4bc9-8a58-1a5d666f0944": "shelf", "04b6ce7d-3ec0-4b8f-977b-feffd8198bcc": "bottom_cabinet", "6f3873d8-0c7b-46dc-9a64-928ab7aa4059": "ceiling_lamp", "121556d8-0b94-4320-9f82-b31977dbf9c1": "ceiling_lamp", "194aa7f6-0754-4fd6-ae65-a2a3ec0e27aa": "chair", "fb2c12f1-6169-41d3-b739-e5a48aea86c9": "bottom_cabinet", "38dc6b77-bf8c-47ba-8c68-356c8c672c31": "coffee_table", "766d644c-97ce-42b1-9a15-323bc70db244": "sofa", "9fb1e141-de8a-4b4b-8db8-abaa38eacb9a": "bottom_cabinet", "644d8471-a5f9-431d-bee4-96cd759572a4": "chair", "7be78e99-5ace-466f-84bf-e4509dabebb3": "ceiling_lamp", "f75ac3f3-3393-40dd-b4c3-69c9275832d2": "bottom_cabinet", "779b8e4d-5888-4f5e-879a-0e072d6d9791": "sofa", "7d19fc57-09a2-493f-9f78-09867463380f": "coffee_table", "90510de5-90ed-4cf2-b81a-f0d8295f2a1c": "ceiling_lamp", "d271f860-bff8-459a-8ba0-defdf223c4db": "table", "0b5ea81c-754b-425d-b7ea-cf559300b43b": "coffee_table", "05a94943-152e-49fb-bcf3-2ffd258f2ba6": "sofa", "6a7da9c2-0fbc-438b-bdf5-8a17bd50d1b3": "sofa_chair", "81340393-8e2e-47a0-9ea9-0d09de2fcc83": "coffee_table", "56a87f3b-06a6-4315-afff-def1f708533a": "sofa", "63d8c852-8d9c-4fa2-ac30-f123e6db9265": "bottom_cabinet", "a99959a8-7d64-4433-968d-34e923fdf1c2": "sofa", "cac2df2b-5839-4b08-8212-2c07e14621e5": "chair", "188665f0-d79b-4324-a29b-11dc27cff384": "ceiling_lamp", "8aba8742-6711-4330-9e1a-4b6a387f3f97": "ceiling_lamp", "d05c8c6d-f420-413a-9da7-b9fddbbcd993": "shelf", "0c082461-ad71-4823-abcd-426acf1d88bc": "sofa", "df67f0bf-1b5d-4413-96d3-b90ec572ba26": "table", "328026c4-f745-40a8-ab1d-8433330ec839": "ceiling_lamp", "652a02e8-1f3d-473a-8385-0aba748e75e8": "bottom_cabinet", "c30a1453-1dc0-4a98-bba3-2455a7092ba3": "coffee_table", "79bddc14-d901-4c81-8fef-f0badadd6194": "coffee_table", "80f00afd-2296-441d-9fe0-87670ea02a1f": "bed", "66c09795-3451-408c-8f0d-67fa7e078a1e": "bottom_cabinet", "581e044d-dc9a-474c-add8-27bbeca85a56": "table", "83cb51c3-94b9-4b00-90f0-95d205ce6a9d": "sofa", "5591d9e6-ae6f-445d-ae57-1dccb4a4ee5e": "sofa", "82044272-791c-47e8-aa8a-c91545aa0c9f": "bed", "5d5cde24-113b-427f-99bf-bae0aacd9afd": "sofa", "cdd49b30-a0fc-4c88-97e0-d3246c3aa0e1": "ceiling_lamp", "63739ec5-4027-4ed8-8083-4f121afca0b4": "shelf", "a5c3bb2a-b632-4fa6-af1b-bf03eefb12de": "shelf", "4deb8513-ee9c-4bf3-a20c-c32d21cd2ea1": "coffee_table", "905a38be-aa93-4a91-aaef-83b38ee3ff79": "sofa_chair", "c744f59f-6133-4131-a131-88209820de61": "chair", "695c6d25-3d96-3946-bd75-d1ac480cacd6": "bottom_cabinet", "67182dbf-fe69-4751-99ae-4bc3db114e99": "coffee_table", "407b59df-eabe-49d1-9952-8747e405711e": "bed", "29c2293b-d96c-43e9-92b6-149ed65b63c6": "bottom_cabinet", "a0f9ef23-e4ef-43bd-be1c-6589f3770210": "ceiling_lamp", "a723b457-7c26-4cc8-916c-0355a5690fad": "sofa", "2cb1497c-ace1-4c70-a098-abb80aeace79": "bed", "0b909b21-f15d-4bab-8ec6-d7a3dd288fef": "chair", "bd45178d-ae3f-4980-b62c-d27351e34e83": "coffee_table", "d942c7b1-fb0d-4f76-a45c-1a3c1f1b8498": "sofa", "1064988b-1363-45f6-96c9-f429e47e510a": "bottom_cabinet", "60c22b15-4d9b-4783-a069-1e8cab3d2bb2": "bottom_cabinet", "3ec677c9-c683-4345-afad-c1ae45780cf1": "sofa", "69d929c0-b3bc-4df1-933f-944af1e59160": "sofa", "7db135d1-496d-4bae-924c-54e6e6d945ac": "table", "20a3d79a-96fd-4817-a3fd-ccf2f7f86cbc": "sofa_chair", "03b201b3-3fd5-4b0c-9e59-96d75e6934ec": "sofa", "53b2a761-f9b4-4015-926d-8e910b905881": "sofa_chair", "90619437-788f-4bf9-894e-5523634d2d6d": "sofa", "6fa92cec-9814-4f21-b188-368353de5970": "coffee_table", "65444aca-6dc7-46bb-b572-655ff682ac96": "ceiling_lamp", "5ad2308d-0033-433e-a061-830b28f61ede": "chair", "c6612ec0-a735-43dc-bde7-1094d2ae344f": "coffee_table", "0aab9dbc-ada7-439f-8ebe-742d076ce617": "bed", "60ea772c-6686-4692-bfd6-3870bb49f079": "sofa", "5db840b9-e7b3-46f7-8694-b2d00d63b6e1": "coffee_table", "ff9bde70-32ee-441f-b1d3-217a7c43e081": "shelf", "52c05357-cec5-4c75-ab77-7cf030cb64d3": "shelf", "559e7fcc-08cb-4790-a094-19f528bf7369": "bottom_cabinet", "92dfeb3a-1e7a-4184-9a21-689d5fb81036": "stool", "595b053e-1ccf-4e4e-ac22-068980c9e82c": "coffee_table", "af41d8eb-90f5-4218-ae73-a4475d63728f": "ceiling_lamp", "f80d2849-b104-42e5-b86e-d930ef6d3645": "bed", "0e44b3e5-df80-458c-ac9c-c1381eaf010a": "bottom_cabinet", "641767c4-11cc-4a5c-ad87-e392ce092ee5": "bottom_cabinet", "d51e0c97-4cf0-4a3d-9020-f86996cea4ce": "shelf", "ee837fa2-dacd-4b6b-a312-c3c0576ecda1": "bed", "85bfe4c6-a82e-4aed-ad08-874a33a164f1": "bed", "27d38363-b33d-4708-8873-f4a4bbafdada": "bottom_cabinet", "f829b69c-028e-47c1-bb40-9dc9e61cf61e": "ceiling_lamp", "8b60e5d8-f711-4653-9eb3-d2dee3f8f001": "sofa", "bf174969-9764-46ce-a0ab-4cb566cc3c87": "coffee_table", "d771112a-29d3-47c2-b8b4-0856af6fb2b4": "ceiling_lamp", "ed85d5d4-7b3e-4355-ad0e-b8b0ea52d7f7": "chair", "cc4117b3-1387-4e20-8c61-d9d12ef36194": "bottom_cabinet", "69000889-212f-449a-9851-48c42ed12f3f": "shelf", "b194249c-37de-4769-9d47-579544cb7540": "stool", "0bcccd3e-2f61-49ec-8b00-ded62b84d31c": "bed", "7de13f22-abff-35e4-b9fa-f00577dbafaa": "table", "75de60a8-2a5a-4f2d-8aac-844e130ce7eb": "coffee_table", "f8741138-071d-4c3b-86b9-142fbc623f93": "ceiling_lamp", "bdac1ce4-9007-4922-9d36-e878b80bdb04": "sofa", "278e81be-6b75-453a-b282-1968caf19808": "chair", "73dfcc36-ab85-45e8-9063-bc1c4bba7aac": "ceiling_lamp", "b147a1aa-4943-4798-b043-9cb1274e9aa6": "sofa", "47c031ec-2445-4f3a-a582-4d0c34c394fc": "coffee_table", "5d4278dc-d238-4b95-89ca-87582b59c149": "sofa_chair", "3ace9236-7387-41d8-9398-1ab8a902c6a6": "stool", "a466bb96-f98b-4d1e-8c6b-466b057b65f4": "sofa", "d8d6b164-38bb-49f1-8f6c-85e234c7514f": "bottom_cabinet", "b376fa33-9f48-43d2-9907-5ca265dcd24a": "stool", "5345e23f-c624-4501-b7eb-15a7283afcd3": "sofa", "714aedb4-4ed8-4ee1-a8be-cffd3dfdb290": "bottom_cabinet", "ce3763a5-53d2-4e5f-a6a1-19a41f31b26e": "sofa_chair", "00ceae85-1f3b-471d-87ab-60672115b82f": "ceiling_lamp", "42b9f0b2-f610-482b-b62b-cb00765398ed": "chair", "bce2c4a0-01d2-4705-aa38-1612c193008c": "shelf", "c09d56c0-4bc9-492c-800b-3ce782ab8007": "shelf", "1b0f739e-76bb-43b5-8620-96dda71fa18c": "ceiling_lamp", "18dccc4d-b6b2-44af-8af1-5bc573ce276d": "sofa", "5a69f591-27a8-4629-88da-afb0f58976c6": "ceiling_lamp", "5627d0ff-abbc-4c53-81b0-8a2b07b58ba4": "sofa", "12123d1b-b5d0-4448-a61b-92ead240a229": "chair", "78d8e3dc-8305-30e4-9d9d-e61eb78cb75a": "bottom_cabinet", "cf3811e5-6b86-47ee-a495-451388f676fb": "bottom_cabinet", "77708b87-0f98-4481-b09f-f9f49c57cb40": "table", "4811c0a9-2a43-4517-8900-316af368302f": "bottom_cabinet", "f9cafe53-a055-4059-90b2-892a14e3b750": "bottom_cabinet", "200c7ae6-a733-4ced-852c-dab54ab95c16": "coffee_table", "e0550007-70fe-44c1-8721-f14b11a14c23": "sofa_chair", "163c8606-0607-4f3c-a1ec-e97c17f11be0": "sofa_chair", "dce45bd9-5dd7-44fa-bd87-a272fec00cb5": "sofa", "306febbd-0827-4d7e-9901-7a50780c8694": "shelf", "2ab65a52-51ca-3e2f-b1ac-315e93f40773": "stool", "8bf7a9d8-3f54-4af7-a1a9-304788f23e09": "sofa", "ea5bc5fe-3697-4469-bc82-8bd7af443037": "sofa_chair", "295e9bbf-a1d8-4fe7-8727-68e97c8da4ec": "coffee_table", "1aed6852-ee09-31b6-a260-9679d7d543eb": "sofa", "498f3546-9b5c-3e58-a87b-6cf7dd6379c0": "chair", "bbd64595-79a3-4f53-8a2e-a0e40fe98879": "ceiling_lamp", "73a7f22c-04d3-48e3-a0dc-ed78880cbc10": "ceiling_lamp", "4f29377b-3127-4aa2-a082-89df9245f564": "sofa", "40d3ac4e-bb90-4053-a1d0-624abf505322": "coffee_table", "0d6b7d49-1bbe-4183-b416-f02771767245": "shelf", "3eade32b-1859-4ecb-a38a-885d7f6d33ce": "bed", "126908c4-e8aa-456b-b459-7b3b0527de6f": "table", "fc806b71-f117-4e7f-8259-4501dabf706c": "stool", "4be6873a-f3e6-4c34-b56e-5fbd5b73cb80": "shelf", "6addb703-3dec-4782-8d00-b84780364557": "sofa_chair", "2609f0aa-53b8-4cea-84f2-9030eb5c883d": "ceiling_lamp", "0b745b71-47a0-43b3-8f1d-c7310031c965": "bottom_cabinet", "0c8d40c7-e246-45c1-a492-1606d6b7014c": "sofa", "62476440-9d7c-47d5-a489-ecb2732c500a": "shelf", "12c085fc-2f54-4b13-95e0-0e00733e1bc1": "sofa", "4180f35c-7921-42a7-b72b-1452b34b194d": "shelf", "c602569f-4db1-495a-bd2c-47dec23907b1": "sofa", "2364f982-e6ae-4752-bd43-d683b666975b": "bed", "3c4ba909-83f9-4a79-9804-45b90b909e3d": "bottom_cabinet", "7929523d-e948-4525-b56f-c483577208bc": "shelf", "42220d5b-dc49-47ae-9620-43f91a99a530": "chair", "38ff93cb-c0ea-392e-8dc7-2376c306bf8d": "bottom_cabinet", "17ef5f35-9921-4f60-87b0-5cdce1fe929b": "coffee_table", "b8cdfe23-59f9-43d5-9d4f-d8f3bd406b62": "ceiling_lamp", "83811b6c-c9fc-4b08-9f8b-366ae24b368a": "sofa_chair", "fd1551fb-5b7b-4d10-8e60-9a734269875b": "coffee_table", "29bf1199-060a-427f-9d85-d76ba4322c40": "bed", "abe230df-0b8d-4947-bbd4-c3b2b81311a6": "bottom_cabinet", "7def288b-8f42-4e26-acde-9206f10b7011": "stool", "99e19c41-1c71-4c36-8781-0b534c3c05e5": "ceiling_lamp", "064b7591-f01f-4520-8690-ead009ce8b7d": "bed", "50187eae-e45b-4722-bc08-ea646fc01483": "shelf", "4d235558-b9ef-4a6f-9b31-7bf16171f81c": "ceiling_lamp", "686acd03-2e85-4290-9a19-d40196209a57": "sofa_chair", "de2a27c9-aa87-4ca4-b1e4-6f3e814a093f": "ceiling_lamp", "19ab83d2-3378-479d-94ac-ba2930d6874d": "coffee_table", "d3902c3d-06e1-46d4-8f86-d9475dedf1c9": "chair", "b2a26a03-b549-4123-883d-01ea91624770": "ceiling_lamp", "1effa5b9-0e7b-497a-9900-f05599eb0603": "shelf", "7aecc515-4898-4fbd-9694-dd28845ad8aa": "stool", "0bfd4d0d-df44-4f44-b3ea-806e1db198fe": "stool", "513b0848-dae4-421e-9a3d-b0354e49867a": "sofa", "72db2b25-9bf3-4c97-9fe7-dfd96dbb833d": "sofa", "4229f29b-b36f-44e9-900d-15affc9b323c": "coffee_table", "b5d2e954-516d-4e2a-b1a5-ff4687e211c9": "stool", "0f6c8d55-eef7-4414-b6c7-eb40ab2a3f7f": "bottom_cabinet", "db20bf46-340d-4f0c-b5c5-df429b5dbbd4": "chair", "44aba579-04a7-4f54-832a-108775a28ff4": "chair", "1a887d22-b5eb-4de8-975e-c4d0be888537": "coffee_table", "4f7ee4d9-92b0-4e9d-a651-10b63805cddc": "bed", "017e5119-b882-45b6-8d38-c412c441c328": "table", "565d66b8-7caa-4275-9146-0290738f028f": "coffee_table", "ad0f7d81-bf19-4dc5-a7b9-81fac28c84d1": "ceiling_lamp", "557f5058-ddf9-4273-b6ca-bd7fffb9d456": "bottom_cabinet", "27284726-6e38-4cb9-95fa-bc33a46c6cd8": "chair", "a155a902-6ffc-4f61-9429-59d0717c754e": "table", "c96b81b9-51f5-4ac6-b737-8e63d09feee8": "bottom_cabinet", "113b1fbf-cc94-48a2-b387-9d82c30442c6": "bed", "3da79a03-ae6a-448c-953b-089a9410fe6f": "ceiling_lamp", "612309ac-d00e-4742-b5ec-4ce20977f507": "coffee_table", "94e8c062-c563-467c-be7f-a333df1b0bad": "shelf", "642db79d-aeba-4071-a9cf-08980d606e18": "bottom_cabinet", "2c482955-6a67-39f8-bd39-dd129f9869a9": "chair", "6340374d-9b45-46d3-b698-a0feba472348": "chair", "247b6396-9e9e-44df-a9fa-ce1b16676a4f": "bed", "02257385-803f-4d93-b4f6-156ae1c5b8fa": "chair", "b2110fad-744b-4297-90b9-093fe5482d7c": "table", "0c51740b-7fd0-4b11-91fe-fb35553d6b4e": "coffee_table", "0fb022ab-d0ba-4048-a3bd-9fc76b6d95f0": "coffee_table", "ec3697e0-ba56-4291-aef8-3cb4beff1355": "coffee_table", "315e89f4-775f-44b0-88c7-3ff00cd42320": "bed", "c1945e48-2eaa-4691-a77a-89eaf1179df7": "table", "e811f6b0-d002-4b76-8c17-3d99e93a98f8": "chair", "7c1b5b39-a2eb-4c7b-93cd-36cbe448edf6": "sofa", "7fad5a07-4705-4000-b379-dd93e4262dd4": "shelf", "59c20fb1-33bb-4b8f-9f73-0ee53a79264f": "bed", "5f042093-52d7-40f3-bf43-e256195fbfef": "bottom_cabinet", "43b7ae4e-cd9e-43e8-aff5-ec0213828902": "bottom_cabinet", "80f782cd-025f-4b67-930f-5abf46c1ee5b": "sofa", "20e18a2d-50d6-40a9-9129-4428c5fa4cd7": "sofa", "861c72d1-5988-423c-8f8c-eaf77e3868cc": "coffee_table", "30658f7b-6cd5-4a7c-82a1-af2e7adc7b1b": "coffee_table", "7a07c30a-d0da-3f97-9141-41a6d4fa16ba": "shelf", "8f023476-c786-4183-b745-6844ed4626b7": "coffee_table", "a0a475d9-474a-4733-aef8-3d592adf489b": "bed", "af457c93-97ea-4067-9281-ec2fe19b8b83": "coffee_table", "24ce56dd-6d29-4e0b-bcdd-a8fd28e6d7e1": "stool", "1eb72d99-ee51-4583-8eec-0fad9c9b4bd8": "stool", "563b2eb0-b3a8-473c-b6a5-7ec3abb41317": "chair", "1555ff47-5b66-4808-af99-232f3dad61c7": "chair", "a816872f-79cb-4c4c-bc79-e316d9e0a032": "table", "0b36f29a-b271-4c3c-862e-f1168c5a5cad": "bottom_cabinet", "85c56fb2-ff7a-47d4-84a2-199e61d6159f": "chair", "14115c0f-f5aa-3401-8930-b641d04c0a5a": "sofa", "b5c0dec2-fe6f-4f82-b682-413837b9d814": "coffee_table", "1c9f4cca-38f6-3237-bb75-5be336f9881a": "chair", "e53fb75d-0ab2-49bb-8534-e24ae64342fd": "sofa", "5bcc0a96-c054-47c6-880f-61a8a5392a06": "sofa", "651e9c46-e4a8-455d-9f69-be7f4ce3a422": "bottom_cabinet", "240750b2-2a9f-4eb8-b61f-40505cd8936a": "bed", "e8a58568-fec1-4527-9c69-b64213490a8b": "coffee_table", "30706b0e-77ce-46db-807b-35a9ece03c4a": "sofa", "e5fc4a48-5120-48c7-9f72-b59f53a5c34e": "chair", "98e41ce7-78d3-4cb6-a16a-a73f8839a49c": "chair", "3dd71ead-91dd-4b8e-80e1-35e676c5255e": "table", "3e43785c-f09e-4325-97a1-440287025360": "bed", "3c719903-f9ce-4451-a955-2c4031301b08": "table", "f50c5818-540d-4067-b2f4-79c25c9fbd9c": "sofa", "4b59eaaa-cca4-4152-b20e-6792257721ff": "shelf", "1d0d50dd-ff75-33ad-ba7d-e69012ca79e1": "chair", "08b2a48d-b4b5-4f64-9f84-fc77ae7135f8": "bottom_cabinet", "fe08bbed-0cf5-48eb-8d21-6590797cfc51": "ceiling_lamp", "522ea16c-48fe-449b-82ad-d0dca77281e4": "coffee_table", "0c99466c-7e8a-489e-afc7-6d05ae090a1f": "bed", "c587a72d-3210-4024-baa1-7db05714cd15": "chair", "fec8436d-cf62-4a7e-899b-3bea10deb5ec": "sofa", "06d0beb2-9724-4e98-929d-80b23a31775a": "bottom_cabinet", "4307324d-e6fa-4d7a-b235-2d334ea77e58": "bottom_cabinet", "06d5595f-679e-423c-b011-9619edaaac60": "shelf", "33355828-c98b-47f6-a748-4539b1ec471e": "sofa", "1c7c14b7-9483-4265-bb74-67954641d8d2": "bed", "ecec4a34-88a1-472f-bae0-95fdaf63cd23": "sofa", "0c0c2842-496f-4679-9b8b-f28c0903e438": "coffee_table", "c4c25221-2bc0-444b-a41e-6b19a5065324": "bottom_cabinet", "23716c11-4f82-4534-b744-e9e11e9912ec": "ceiling_lamp", "606c7d0c-75f9-4969-a524-b2dd9f71e2ba": "bed", "5bf8b0e3-5def-4829-86f7-cbc168274dc0": "bottom_cabinet", "490fe1d7-daac-4230-be02-cdaaffb8af32": "table", "1bb4fda2-3438-4c26-8aec-a9190705fa44": "shelf", "07e050f2-15a2-4c83-b484-b3a022b2ba02": "bed", "e000c278-fe59-44e3-8cdf-c60823bbf17d": "coffee_table", "711916a2-c204-340e-ab97-72101593b89e": "stool", "1ea67d92-da40-4f0a-a17e-fe5f40cc466d": "sofa", "9bbf1170-6dfb-41f1-bc10-a8b45163e95b": "coffee_table", "07c36b71-6e62-4d33-97dd-b38ae69118d6": "bottom_cabinet", "36a408f4-6c1f-4628-bbae-24cc5fc811ce": "coffee_table", "32475a7e-a379-4f2b-9666-1ae76cb94b98": "ceiling_lamp", "2e644b55-8538-463b-98c2-8172678362f9": "bottom_cabinet", "a04ed588-e991-47a8-aeb8-0346001bcbbf": "bottom_cabinet", "f783bc85-89dd-465f-bc92-6bfb7c2f83c7": "chair", "6259842e-4bda-46b5-a577-1bc8cd940de3": "sofa", "6a51033f-8e6c-406f-ae43-44a9a83327df": "bottom_cabinet", "7cbd1940-e203-4bb5-bb6f-d89ce943018e": "table", "4a5e3b4f-7e00-481d-a666-ba5f5cf627be": "sofa", "e7dce8aa-c8cc-43a3-924d-c0355946410a": "stool", "7c676fc1-4e6a-443f-8c38-f24c0d993250": "coffee_table", "5045c2af-930c-44cf-a24d-1fc5afcf4444": "chair", "4efd1db2-3b39-49b3-a23a-96f791d981b0": "chair", "42ae9c73-6930-43b5-be00-51232949d22f": "coffee_table", "f5f8df98-704b-45bc-bb76-5446de45e309": "bottom_cabinet", "6494f33c-0c80-3b87-934f-2645b515f81b": "sofa_chair", "79b54dd6-6816-3533-a026-d031e0cb3f1e": "bottom_cabinet", "29ed0e9c-02ae-4404-a8dd-f6f178dc79b4": "shelf", "0809c20d-3204-448d-92e8-4ad9165c23dd": "bed", "20eeba56-cf65-4738-8d1b-76cc473cb018": "sofa", "0ea10ffb-60a0-48d7-9c79-f272bfd5ac77": "coffee_table", "3f546069-dc34-425c-87d0-f1cc1f858a5c": "ceiling_lamp", "22caee27-9cb3-47ba-90c2-ba17560d039c": "bed", "e9d83d45-dfa1-4224-85e1-bd9f82e42144": "shelf", "0f95f670-3100-4cbd-85bd-e2d2167dd450": "coffee_table", "42914a23-3866-4467-8c58-f66ae08c4de6": "coffee_table", "7ae94335-929c-41f6-a573-3e433f10afca": "coffee_table", "636c291f-f5d0-4dfd-a470-d165b68f1710": "bottom_cabinet", "d6b60794-13f9-4838-a8ba-42728549a252": "sofa", "52222b25-3e02-470b-885b-192d125ed738": "coffee_table", "101fa2fc-b9c5-4f99-9512-d30bd184c5c6": "bottom_cabinet", "b4c62110-65cd-4ced-9329-0e7e6731cbf0": "ceiling_lamp", "6171046c-0df0-4bea-91fa-8b65612aaabe": "shelf", "ea92f9b0-cb40-4f19-bc79-369d8e6520dc": "bed", "66829e44-415f-4e19-9d58-0564eb8f42eb": "sofa", "516df560-ce7d-48a4-9775-cc5780987424": "bottom_cabinet", "24624dae-698b-4c70-957c-a67531aac5e4": "sofa_chair", "1f85dc7e-f9da-4237-8fd3-7d4a87484f57": "chair", "2dab35dd-3675-452b-8c0e-845e2d9526f8": "table", "35582533-0bd2-4ade-998b-0fa0a73587b4": "chair", "6dccfbc5-4ad1-4db9-8eb1-dba8ae0b6275": "ceiling_lamp", "56906fc2-4c27-4c13-ab5f-bf7b562e4b2c": "sofa", "436dded5-ebdb-4dfa-8210-89d137b4005d": "stool", "f54ecfc9-f3bb-4033-b94f-3c2e85f6b32d": "ceiling_lamp", "568b82b3-c65c-3a7d-b845-8702105e3cb0": "sofa", "5fc8fb35-60d0-4e73-a68e-be5181f22af7": "table", "24256cdd-d004-4eda-aea6-3eb94dbb4326": "sofa", "09379704-5da1-36b4-9eff-3a68424e2d91": "table", "8617e472-10f1-49c7-9273-8e394349d7e9": "bottom_cabinet", "b19cee34-19d4-494a-8ae9-ee8c5db216fa": "coffee_table", "b338f1a0-d6a6-4786-b83b-7272ff085b85": "ceiling_lamp", "80b3c1bd-cd8b-4866-845f-e44b767fd92c": "bed", "83e28659-3753-3acb-9db8-755dba85fc26": "sofa_chair", "28ef3e6f-d5b0-4354-804b-b84cdaf687f8": "coffee_table", "fec67886-6bb1-43d3-a044-b99255ab4f45": "shelf", "a8497f1e-1f63-4a82-b750-1c924a20b142": "ceiling_lamp", "7fe838b9-c3a8-4f7f-9b08-012f6ba079ac": "coffee_table", "c59517d1-5c5c-49a4-a09a-aa32c548e91b": "stool", "54c1926b-e406-40b2-97a4-8f236fe1c701": "bottom_cabinet", "4d46ad3a-750a-4f8f-afff-534a0fe3eec8": "bed", "0115036f-8abc-4cc5-99a3-d8607500d213": "bed", "1e44aa33-9566-44c1-ae03-8f83a5aa282c": "sofa", "e44cc071-e02d-445a-bcba-3246883a3a6b": "shelf", "64a5a791-bcca-4a49-9abf-1a1d5d854a64": "bed", "d52bdd98-ee0c-45aa-8af9-647a9ac37faa": "chair", "7cee09b5-a07e-4538-b050-9b728eac946e": "sofa", "c02d4213-31f1-4bf5-8290-6d4d5783a624": "bottom_cabinet", "faa6f628-cd9f-439a-9dc2-c483c9c3854f": "ceiling_lamp", "49516675-f65f-4a6f-82cb-4b8583a5cc70": "coffee_table", "55e76b41-00fc-48b9-972b-7ed6d9093092": "bed", "b32c7221-08af-455b-969b-3af0debd32e9": "stool", "09f4d4d8-30ad-4280-b2a0-f5ed8fa03aee": "sofa", "4832fe88-10f4-485b-b030-ea50af4706ef": "coffee_table", "e47e357e-bb7a-4a28-ad69-e32f9313f0a5": "bottom_cabinet", "ec527f87-44b7-4f2a-9176-9d07576fe204": "chair", "560da735-af01-4a65-a3b3-af77ad54726f": "bottom_cabinet", "27a808c6-af2b-4f1b-b9f0-c22ccd8dadda": "chair", "a6f9adf0-6bf7-4e54-9867-6201fa0858f1": "chair", "90193267-035f-446f-abb5-bada9547d0f0": "coffee_table", "242fc996-7aa9-4e3e-9570-2b0373d86602": "sofa", "08c37d84-bbff-4589-8467-98a0e206a177": "chair", "5ce1f588-2a65-47c9-8f5c-d1d17d17dd0d": "bottom_cabinet", "18b04ca5-a96c-4458-ad5c-22cbafb81396": "sofa", "1e5d424c-4fc7-40b9-be85-34053fb75a64": "bottom_cabinet", "3cb3fed6-4bc2-473d-b916-7d49bdaa66ce": "stool", "4c1bc225-0287-481b-80b3-c5f30c6d6ed9": "shelf", "0e020c15-965b-4cf1-afe6-8bd544226e44": "chair", "2579e690-d251-457f-aed2-175651c1ae9c": "sofa_chair", "5f5949dd-e1db-4dcd-9328-cfa5d3e0b224": "ceiling_lamp", "2217e43f-b40f-40d9-9c08-84ccfb4c2c0a": "table", "9bd804d5-5ed5-4768-a3b6-03da546f03f7": "coffee_table", "08b49386-dff3-327b-aea1-3726e74922d8": "chair", "f03ce316-d31a-4369-98c1-3874df499738": "sofa", "6aaca249-a267-46c4-90d8-13e0e3654b83": "sofa_chair", "44c0faa6-9d85-45f7-bf87-cf583e6ad88a": "ceiling_lamp", "18b68a1e-d2c5-31e8-9e29-277af73e71d4": "chair", "7b42d5ab-ed37-40e9-b366-e049c5c15dfe": "bottom_cabinet", "5c2c41c5-a831-473b-a714-e6e54219e5df": "bottom_cabinet", "84ae0a43-d7e9-4ef2-93c0-b56eceb530c7": "coffee_table", "40860cf0-4d90-409e-92dc-14e57ee94d70": "coffee_table", "fb2ecc58-2c2c-4110-8418-b0291667704a": "ceiling_lamp", "534272f5-d0b5-4079-acb4-1aeb9f788bae": "stool", "21e4ddc9-0c60-4b02-b152-211700f96343": "chair", "6ccf5881-8519-4b21-9c35-942f95925282": "coffee_table", "e407fb7f-cad6-41db-b055-b53cec937796": "bottom_cabinet", "4fca0f54-f388-4796-8da9-72ad2c2f585b": "sofa", "2f213b1d-c3d9-401b-9876-bc0146fe6be3": "shelf", "57c82f77-15c5-49f4-86b0-352c00c7fb99": "sofa", "43104ac8-7491-4081-85a9-3bf2497cf714": "bed", "3328d309-b3d5-301f-8537-f52409f35906": "chair", "195d7577-46eb-331d-afb2-5213917aa50d": "sofa_chair", "9546ee09-dc87-45f4-8fa3-a09a57981b1f": "chair", "1b507132-a38e-48d0-8f65-8cb7510b2aad": "bottom_cabinet", "338d750e-56e8-40f9-a2ea-9a819ee4de78": "sofa", "ccb73d13-49fd-47da-84bf-255d28892cc0": "shelf", "637fbe20-e30b-44a6-9755-3a64c32580c6": "bottom_cabinet", "f9d3218f-d816-4fa6-8859-612ab5c010f3": "bottom_cabinet", "55bfa2e4-8231-4808-b517-5148b14540ba": "bed", "635a65fa-6a73-4133-b32c-625044a7906b": "sofa_chair", "932caad9-022d-4a6d-a5e9-32145b16833d": "chair", "d870d4e4-3ee3-4f14-840d-4283545babf8": "coffee_table", "0ee31b4d-48d9-4d32-841b-315ee6fcdc23": "chair", "fd46a167-e39b-4cc7-8240-9c8f067d9a32": "ceiling_lamp", "4eb55fc9-1a1a-4371-baf4-8f61f3ece58f": "sofa", "57bc4eec-bff8-48f7-b034-f9611a3cfa37": "bed", "43b8afbd-6b9e-4392-b363-dc09dfdc3473": "coffee_table", "38e201f3-bdea-4f19-9c1a-80af7fabe38c": "ceiling_lamp", "1f21d52e-7b78-43ca-aef8-d5dd939f3e35": "ceiling_lamp", "570d1db8-abab-4dfe-95f3-20713b876114": "sofa", "c79dc60a-0b18-44f8-b73c-6351917ca0e0": "stool", "006a08bb-914c-49b9-93ed-4de256ae74c2": "bottom_cabinet", "239ce4a3-256c-4b04-b578-caeb52fb87ba": "coffee_table", "1cfc6e9c-3c3d-48d4-81b6-f1981007d2ae": "sofa", "d5663f07-64a0-495e-a020-f3a85818d71a": "coffee_table", "e31f0e4c-5ca4-408b-9e5b-8671a5a17635": "ceiling_lamp", "cbaea642-4eaf-43dd-89b9-84f9160f7d74": "coffee_table", "1fd55b49-a16a-46b1-a196-e6d00b4ec179": "chair", "6cbc5509-607f-4ae1-bee0-897c3e12c435": "bottom_cabinet", "973e5393-a935-443b-b7a2-10a29752ce24": "ceiling_lamp", "841327aa-856f-49f0-8d0e-3644370c3df9": "sofa", "aec2a17b-33d6-486a-8ebe-f1d573e6932b": "ceiling_lamp", "3c046cec-52cb-4b97-9b39-53e549807679": "ceiling_lamp", "1b0a455f-be44-4cee-ad58-00819f8ed76b": "coffee_table", "f7fbaf28-7bf3-4ecb-a0aa-8ac142d49d4c": "bottom_cabinet", "4cb91f59-3349-4336-9cbf-c0222380de18": "bottom_cabinet", "0e03db4c-d23b-42af-91d1-576a5c444a6e": "sofa", "1aa3e255-58c0-41fc-9dac-6380664bde7a": "ceiling_lamp", "6a3ea151-bb07-4aaa-a893-1b3b5f9413de": "sofa", "66694225-b430-42f5-b977-aa94af9836ba": "bed", "07a1f3b6-920f-478a-b9f6-fee53fcb4bee": "bottom_cabinet", "d4ec48b6-6c6c-4925-a60f-c5c75dbad291": "sofa", "505114d5-c069-4a99-9ddb-10335671caa0": "shelf", "2d623d6b-03f6-4cf9-8daa-5d7d399d9716": "table", "1e70c6ff-a1c1-4993-b942-cb899e1895e0": "sofa", "44c0a3cc-5274-400b-b89c-1c7028c43b0e": "bed", "d3b585b3-2396-4371-a076-d93c99d87bb4": "stool", "6f6fa6cb-11d1-4213-8a1e-3d6bb602f82e": "ceiling_lamp", "a2c446e8-02f3-418b-9f39-0c645379f13a": "shelf", "81cb331f-7f1c-3506-b245-a71d9b609a06": "sofa", "f7e80eca-5c89-4298-9ed2-aa3eb778de5e": "ceiling_lamp", "941a14b9-ee31-4001-8f93-d42059cfe59b": "ceiling_lamp", "ab36deca-be9b-431c-a62c-fb33eee925cb": "shelf", "db6f6739-0a6e-436b-b6b6-9c470d21ee87": "table", "003a85cc-1a58-4b93-8b5c-11ad960aded5": "sofa_chair", "8164e0ef-5dba-4ca0-888b-54706c212df0": "coffee_table", "7ea9aaf2-ed80-4b8a-a174-a7c6b7685e2d": "chair", "227f4bbd-a26a-4210-9c59-a5926dd35638": "coffee_table", "0be4e7f3-4e00-45b9-a2cf-90de436cd6e4": "sofa", "03051836-f41b-4fb5-88d9-de7fd5ae86b7": "stool", "6c6c6dbb-63e9-4b2e-9657-2612c77e7c11": "stool", "8021117c-9470-4ce4-b752-0b5b8a26d501": "bottom_cabinet", "dd18ce90-ccc9-47f3-bd96-aefb0b818e89": "shelf", "8672958d-cd54-44cb-a4cb-133c50eb9f00": "bed", "6148ff4e-94a8-4e28-a167-c3c6985fea6e": "ceiling_lamp", "0af8c872-c38e-4bca-bede-c3fe2bb869ad": "bottom_cabinet", "1849c9f0-fb98-4f43-932a-78e6595e481f": "coffee_table", "0b5b4459-b235-48ff-a94e-d9ba18b54246": "bottom_cabinet", "7badddc0-8005-3fda-99f3-1d36316c9df8": "chair", "9a352498-e18f-43aa-a9b2-93b680fed9f9": "sofa", "2f63796a-cf73-4578-b8be-8bd47f335acf": "bottom_cabinet", "8c14a633-3a0d-4fba-abae-0687b9e5a840": "sofa", "e471da3d-4933-44e6-97e8-f5139ffdb6a2": "sofa_chair", "46efcafc-0622-4a48-880e-451e28e15008": "bed", "72c0dd85-07f6-4e72-b215-ba47cea35c1d": "table", "4d113a95-9e56-470b-948d-dad192a1de6b": "sofa", "09c19175-7135-4bda-ac94-2fe6b4b80279": "chair", "761dea3b-2580-4828-b3b7-51636b1d1c4a": "bottom_cabinet", "7564abda-4eec-4595-8545-003d483d29dd": "coffee_table", "0bf8244f-8803-47a1-afa6-07330c2b847f": "bottom_cabinet", "b845987c-209a-450a-b95c-4fd1e5b9c7de": "shelf", "7300d786-565f-4a84-84e3-fc4a12ac2238": "coffee_table", "bee0e60f-5e51-4e90-9656-0be2a1305f50": "ceiling_lamp", "60b455d4-974d-433e-b9e8-9c476e12d51d": "shelf", "1434ad5c-71fa-4f80-a4aa-23fcef90437d": "bottom_cabinet", "29beef4c-4986-4b51-9bfe-1c5ec4f81a15": "bottom_cabinet", "8378de7c-d7a9-491c-a5e3-f6f6525af424": "sofa", "05b20215-776e-320f-be17-798787b531a6": "sofa_chair", "63600695-59a6-4faa-8d60-78545571d34f": "ceiling_lamp", "ad1fc8bc-27f1-499d-9a43-ef3c1fc53a3a": "bed", "55f7c741-d263-4049-bb8a-168d9eea1c77": "sofa", "b786764e-9230-4f1d-b462-fb6ff5c669b7": "coffee_table", "2bdb1631-3521-4a00-9d7e-2c34b06da2a9": "bed", "de339f05-f202-3267-a2c8-2804d97abb24": "table", "f6f83e87-1924-4688-9d30-a9eced33863a": "sofa", "44ee4c77-0c89-4b0d-8898-fcec29a4adf8": "ceiling_lamp", "b315e0cf-2c07-443e-a874-ce3c7095f9b7": "sofa_chair", "7ae9b2cc-5d63-4435-9f77-98115610e2dd": "coffee_table", "6fff3381-4bcb-463d-a558-df4d2d45bf06": "sofa_chair", "3daa45c8-b9c7-4d7c-9d03-2f1c9d1c85c0": "ceiling_lamp", "35e16327-efbe-4dde-93f8-42c88b501659": "bottom_cabinet", "73990f52-832d-4551-9188-3954ff3704a8": "bed", "ee62edd2-bf12-49cb-805f-c3be34e30bdf": "sofa", "7e121ae7-c1ec-3aca-a497-70879061a219": "chair", "5c09b659-0639-4f3f-8a0c-ba51839a8bdb": "coffee_table", "777433e0-25b6-4270-843e-c929aa5a8797": "ceiling_lamp", "3901466f-6f27-481a-8013-80fa6e1719e0": "shelf", "30817808-0301-447b-b14e-703d98aa9ae5": "shelf", "2974f5a3-ab9d-3de4-a7cb-37896f20e959": "table", "668a26bd-243c-4dec-8f48-29dea4ba6522": "bed", "2210ca84-730a-463d-9ed0-b34477a428b1": "coffee_table", "7958de23-7f1f-4cfe-8da0-9ee07389d272": "bed", "f2f69e20-cd92-422b-b4be-366d6339b1be": "bottom_cabinet", "a7784e04-80e6-467a-93dc-eac88ca21fae": "bottom_cabinet", "c2d7281e-a0ae-4b33-8a62-2fde4583a787": "bottom_cabinet", "6fb3b21a-2804-4ae3-bd58-54b90cde264a": "bed", "36704e45-f757-48db-9383-77c58d2a8e4e": "stool", "11de1fd6-72bc-4ac2-8a68-5b1f9084bbb8": "sofa", "2f5020c7-934d-4139-9b75-585d99cbc3f0": "sofa", "f3860efc-610a-47c8-ba94-f016835ecda2": "ceiling_lamp", "8105b670-faf1-33e0-b9e4-16c199cc11ca": "chair", "e5591415-83d4-4a90-ab48-273288ced28d": "coffee_table", "2ae6ab10-1876-4f27-b80b-e85dda03d5ab": "coffee_table", "91eb00d3-114c-4b0d-a2ff-09742e54de8b": "chair", "83c665db-6a47-3479-ac5c-b6500ed88b09": "coffee_table", "22eec0a9-17f7-3866-bddd-24099b98dfe8": "chair", "21133073-d078-40a4-a21d-53d2fa4d989c": "sofa", "68a4cb7b-21d7-3027-b884-e154df99ad1e": "sofa", "33bd5381-f53d-4395-9620-6b6ba083cb0c": "shelf", "25996fe5-5445-3aaf-8d55-6c728b2847d4": "stool", "5364b5cb-fa9d-4d2a-a65e-699d5c5342c7": "bed", "0eb963f7-bc2e-460a-9018-b5ba97149980": "ceiling_lamp", "56a54578-a4cb-4a0a-ad61-39f9f89e1270": "shelf", "afcf6dfd-730f-4ba1-b8c2-158804fb6886": "bottom_cabinet", "3336af2e-3b1f-4ac6-9f77-5531f7a4a761": "chair", "3143c794-758c-4be8-9bb3-b4ddfdcb5935": "chair", "76d858b4-1471-4be4-8c6a-7805bc77dff7": "sofa_chair", "6b81fda0-ac94-4196-a7fd-0d831297937b": "ceiling_lamp", "50503c5b-ad1c-42a7-976e-ac03e9856518": "sofa", "2aef1e27-cb69-4aa8-a81e-71e17c7dd2a4": "shelf", "89b7c9e6-dc40-4e23-b64b-0c9876967430": "shelf", "2721a924-1b5b-4e8c-9d7b-fe3aa4a5fc5f": "sofa", "1f0cfe9c-bf69-49ca-af62-687cac458307": "chair", "5842c4d2-f2da-473e-91dc-48395b63f382": "bottom_cabinet", "5d8e7816-838e-45d8-b0db-5cc6f503cb22": "sofa", "5d89b348-e093-44ad-a108-c8be4a30eadb": "stool", "7e98b04e-db7c-4ef1-9b76-a8db0ab8075c": "chair", "4e7c13bd-1179-47f4-984c-26dcb4aaefab": "table", "18fb275b-e855-46fe-b6bf-b8a69a2de2af": "bottom_cabinet", "1afc1dc1-f024-4f5f-aa68-6f4ef927866a": "coffee_table", "50fc4654-7e22-3590-8ca4-651e29e5932b": "stool", "14143c76-a561-4d76-82fe-a152cd24efd7": "bed", "94b58384-4db8-4abe-b63f-dc40f15aa0f0": "coffee_table", "28d3a35a-0ccd-42a8-9052-24322cd7b8ed": "ceiling_lamp", "6f9912cf-7212-48a3-8660-88e21cd9952a": "sofa", "094c8e50-1e26-40a7-940a-531170f0692d": "coffee_table", "ad930160-d122-4a7c-aaa3-c3e1b1892052": "bottom_cabinet", "de5d2f45-3cb5-4835-92e1-73e171558979": "bottom_cabinet", "2cd453f2-df6c-4eda-8015-a9e147374b4e": "sofa", "f2fdae96-ce29-4d4d-bf17-5ade2d057be5": "bed", "28e685c5-a57f-4c36-b4f4-87c07013c9c3": "bottom_cabinet", "30f97f08-a05b-4f64-a9d8-2f14e291bc88": "coffee_table", "10d6680a-57bb-4ed5-9254-a10969ec7ab8": "chair", "5521b2ea-22eb-4fa0-97e7-b3321da969a4": "ceiling_lamp", "1d9f5493-9722-3e65-b82e-445148100577": "stool", "4cd0fb8c-80b6-4a8d-a38f-dee8119461a1": "chair", "8d599e4a-10f9-454a-a986-33ff6e35697f": "coffee_table", "e1ffad37-d420-4a79-a034-0a8e2ac787cd": "table", "23fc4096-69d8-45c9-9684-c8daa8774f2d": "chair", "7fabb243-e90c-4dbb-bca1-03a94462bde9": "table", "ecf49a6a-bd1f-4141-9f8d-3532ac60c013": "coffee_table", "2c325e75-6597-44be-8c2d-4c1450be4201": "sofa", "aa4714b2-e1f4-40b9-b680-5ee2d82c920b": "bottom_cabinet", "dbabee15-db4b-4d5a-b578-fd03cbef9519": "sofa", "7f00ef33-2c75-4e4d-8d47-1a434524dfaf": "bottom_cabinet", "74859a50-43a7-4e9b-8050-4d8cb7292dd5": "bed", "11dc0f11-0b3e-42fb-badb-2a7b64d11d89": "sofa", "43c941c5-9eb0-3bb1-b7d1-d9d4f3eefc65": "table", "6ee12c70-d29e-408b-999e-19c015833ed6": "sofa", "fe4e698c-0e01-4f32-9393-b28ee13ea005": "bottom_cabinet", "9c587f60-5d5c-4e8b-893a-232728564717": "chair", "3abe9540-7459-4a1d-beca-ab678d7543b8": "sofa", "074ef4d4-cb22-4a0e-a611-3a579b9b21a2": "ceiling_lamp", "81d8d70e-f651-4062-b6f2-85607f0af09c": "sofa_chair", "cb57c543-0cfd-4446-bd7d-7f3c27f00c37": "shelf", "76d0a744-becf-4852-83c8-25d793d438c5": "chair", "02b26e96-d260-34b5-86c5-ee000e395642": "table", "44250601-aacf-31a4-87e6-6ceb20d50bf0": "sofa", "31c3c91c-7fce-4784-bbf6-15eb8279bfc6": "bottom_cabinet", "c6773b91-36bd-4441-bea2-e1b5a1ce6527": "bottom_cabinet", "b20ae8b0-0d97-4823-961f-32c74db9c231": "ceiling_lamp", "258cc528-3276-4346-8469-af9daee2308d": "coffee_table", "f91cfa55-133f-4a61-b54d-a2ad69106b79": "ceiling_lamp", "654dfdac-77ab-4c7a-ad4a-98a0dda486d7": "coffee_table", "1a3f15e5-0c08-4975-a4ea-c2f993b84b92": "sofa", "75fe4187-164d-4d8b-8e4a-25340b3c0857": "ceiling_lamp", "1cd5ab9f-8b14-4894-8d4d-319cba4cb0ca": "shelf", "e638af2d-c579-40c3-9912-a7119d70d578": "coffee_table", "64dd3025-263a-3535-b70d-fe0c8da3d37a": "chair", "2bc8e31d-bc22-41eb-bfa1-645f5a99e76d": "shelf", "82628cee-09f0-472c-9969-e8e492f6ce70": "coffee_table", "ffc06c81-eb80-4c1a-8163-2416861f4265": "coffee_table", "71ffa3a7-4235-4b4a-a615-2656fca6f860": "sofa", "ccb192ec-a525-4f30-b998-64d88890495c": "coffee_table", "553fd456-0d2f-31d4-9f31-26a3b79dd205": "chair", "46933fb9-cae0-43ec-b601-f7ad644b2c0f": "coffee_table", "018bc154-9b1d-4095-b59a-3748266f54d7": "bed", "28e2e0f8-3e31-4322-bb50-08f846fb3731": "bottom_cabinet", "8dd3797a-d0f9-43ca-bc00-7a96cfae58c4": "shelf", "0b6897e9-3f39-4141-8c16-8bd639bd8a56": "bed", "0e52b4f2-06df-4339-bb20-5772d740ed82": "sofa", "448ed8cb-405e-3673-857c-bcc03de9c8ae": "sofa_chair", "15673874-6a7b-42cc-a937-0d745efeaab5": "coffee_table", "a5c38131-14a7-41d9-878f-916383285f23": "sofa_chair", "2ba069ff-2472-499d-860b-4965de105205": "shelf", "53fbc88a-2ad9-42ce-a78f-568cca0f8ce8": "chair", "6e6bf386-cd00-3b40-babc-61f3bc4f1946": "sofa_chair", "7beaae7a-db75-4db1-b72b-5c7af7a00101": "coffee_table", "1e1d6fd2-b0bf-4686-80e4-ae2b8ccccf13": "chair", "a376fdae-c5de-45a3-ae45-cbb1654b49ab": "ceiling_lamp", "c2fecd9b-c61e-423a-a48d-08c63931cd1f": "bed", "7ff61f65-2460-37db-bb55-4da380a92de1": "sofa_chair", "812084ed-dd1c-3c64-8cf2-b6897bf003c9": "chair", "8bce5a0f-7695-4b4e-9cd1-98529f41c16a": "bed", "e6f0fc32-aa55-427f-a014-f265af3fbcd6": "chair", "c3b2dd0f-33e8-45d6-afb6-6e603151b626": "chair", "904bbde8-4912-464b-a58a-6e8dc8dc280b": "bottom_cabinet", "22496d43-4610-477a-98d9-fe6e97ede751": "sofa", "73f0f55c-4c6c-4931-9425-98e2cd2923bb": "chair", "72ef43f5-ea82-43b4-81c9-11f713843d8e": "table", "3f790857-3677-41f3-bec0-88425a12095a": "bed", "84747a8e-dcad-31e5-b7dc-413e30a247c3": "sofa", "e7b17552-131f-4d3e-ab1b-f80eb8bbabea": "coffee_table", "0f4e373c-4249-4140-bccb-7a058609932a": "chair", "788783c2-df6b-4356-ab9d-6dc059711c00": "bed", "4e4b3a9c-5df4-4d0d-970c-7b80b2d3af16": "table", "be2c296c-01bd-4438-ad09-4dec13f769ea": "chair", "5b767119-7fa8-48b0-a646-28af049330fc": "chair", "3b7c9375-f400-40ce-86db-996760e827f7": "sofa", "26c90452-a6f2-38fc-9052-499b4b1d3e63": "shelf", "c8851c3a-dd16-425d-a580-ba2fdbe6b7a1": "bed", "83c442a2-645a-4e4d-a3df-94a52aabc006": "bottom_cabinet", "4516c059-8701-4a74-af10-c9056073eae3": "table", "75f44c81-4e41-41f3-bdd6-fd244239b5d0": "bed", "dd945004-8d4d-45d0-908f-3ff3bd97f9ef": "stool", "43627085-4737-4395-bfbd-04aac285c338": "coffee_table", "03db2587-8f45-4154-9736-557f6256ae1c": "bottom_cabinet", "28449ed2-369d-4733-8419-4d64b0d5a05d": "sofa", "13c94d6f-45a8-48f9-ae54-9fef107efa86": "stool", "63cb7a6a-c4b4-47fb-9360-3f9b04622b37": "table", "5aa35ed1-4b4a-445a-a8aa-c8dde92d1156": "coffee_table", "39b300af-f15e-4dc8-84ed-e85d36e95a42": "sofa", "2bba3e93-a195-4af7-949d-ab8b3e9c64c9": "bed", "7111004b-23cb-41f1-bf0e-0f8aee195967": "sofa", "742e05fe-6602-41b3-a17d-663411244c5e": "sofa_chair", "43b586c5-37b3-4c9b-bf51-7bcde22b28b7": "sofa", "6e16ad24-712f-4d40-abe6-93ecdf10bcb9": "shelf", "6ac38df4-d64e-4aa4-b31d-ee57a33c5d7b": "coffee_table", "e19805a1-ff5b-454e-a81f-b1a21fcbf7ef": "bottom_cabinet", "007498dc-954a-4ddc-b318-164b7e4dfefc": "bed", "7c29eef5-3651-40dd-a677-535bf5e7d6ea": "bed", "71cab17f-bef2-45d9-834c-f83ded9a78ba": "bottom_cabinet", "1adb3607-0e2b-4f35-8a7f-9c5018c0d2bb": "sofa", "50caf37e-e0b1-4aa7-93ef-93c474f3f4d2": "chair", "6fcf49d0-f5c8-4eb0-b136-60be2ea1b217": "bed", "12682f54-bdc8-36e6-9174-15cb1c54dfa3": "chair", "ff9e915c-cc7f-4857-8f85-502847be127c": "ceiling_lamp", "0d2a0949-3f36-49bc-ac19-5fac830c592f": "coffee_table", "ed3217e9-adaa-4e05-b7cb-d1e2a9b7bbf1": "coffee_table", "bfac22d6-69bc-4439-9d68-f341f17b8858": "coffee_table", "841cef2e-5841-4b34-aea1-088603507aa8": "bottom_cabinet", "9154c59a-3d62-4b0f-a102-5e06e0797849": "coffee_table", "f7aedd93-e069-46aa-9136-85ba2eacd672": "sofa_chair", "50ccc44b-eaf3-3dd1-819f-a9de5d8be620": "table", "a61d62b3-f40c-4099-b55f-0ca94c30e1aa": "bed", "2859e48f-0e8d-4df7-aa65-2087688ae123": "bottom_cabinet", "26ef0653-d7b8-4eb5-9d89-81c12224e20a": "bed", "c56b454e-5c55-4dcb-bccd-3c67357bc9ec": "table", "58428270-0994-452b-b33b-300c3ab4d3e5": "shelf", "4d10c966-115e-46aa-a4b1-0585539e84ba": "shelf", "9c949ef1-f9ca-4505-8107-1e87a1568fc7": "bottom_cabinet", "e74be68c-9f40-3764-b844-e42ae4bba17c": "table", "56a135e4-e4c5-429e-912e-ee4542a24450": "sofa", "606addac-1451-4150-8b84-70b99864db9a": "ceiling_lamp", "833b3ddc-3cf4-3411-aad5-e3e7fc9856eb": "sofa", "52ff57fd-1934-41e9-913a-ee6443dd8f3f": "coffee_table", "36a4de8e-bdc1-410d-99d3-5acb5dacc5eb": "bottom_cabinet", "82b10620-66a0-474a-9667-c87bd8ea0c7a": "sofa", "e8798eef-1d0a-4bb4-8f20-da38b09ec561": "ceiling_lamp", "03370373-5e38-43f0-8133-07fecdd6159d": "coffee_table", "3d7ae1fe-3ea9-42ea-a315-323a10e30f2f": "sofa", "149033c9-04cb-487c-984d-10cadcc4ddc0": "bottom_cabinet", "2752265b-7c05-4e4a-af81-0501f729e01e": "coffee_table", "7c5d0663-d9bc-461d-b8d9-eae52ed09b66": "coffee_table", "3062da49-9d90-3894-8c6a-207b131a7f1f": "chair", "1ade0286-c9ac-43e4-9011-c9c83edf4b3e": "bottom_cabinet", "6aa9828e-dfee-488a-a1c9-5f3b8fa4b210": "stool", "c4f6373f-946f-4115-95d9-9d8f55f09e4e": "coffee_table", "db06f39b-2088-48fd-a143-9dc4a8e2b44f": "coffee_table", "088a3089-2875-459f-b5d4-031f0323e559": "bottom_cabinet", "04d0f36b-09ea-468c-96f2-d393c8ae8f62": "sofa", "68f7b11e-55bb-4869-bc6a-2081cd575f93": "sofa", "ee2879d2-1c30-4669-9936-9beb37b38026": "sofa", "82f5db42-ab72-4b68-a7db-de5be6a14cf7": "bottom_cabinet", "44e3d608-f46b-4dd6-a6bd-1841d11f3719": "bottom_cabinet", "2094694b-d636-4cf5-9242-332a67020a98": "bed", "62b4b5ed-be64-4b5a-9f26-ab341d7c2cb6": "bottom_cabinet", "0eafbc4c-760e-4f66-b149-78fb144fa9e7": "bottom_cabinet", "70456aa8-10b4-403b-ae01-8f4f2a288e1e": "sofa_chair", "1d2430da-2222-4e2f-ae23-37a31ef7cb1c": "shelf", "881ef752-48e9-454a-a1cb-d9a650bbef24": "stool", "267e349d-12f3-4f67-bde2-a9e307ae9c73": "bottom_cabinet", "678e885a-5c6e-4b67-9199-7af839c8ef20": "bed", "5f86cea2-bb34-4b39-9c62-2505417ac7c7": "stool", "42542349-bc25-4b1b-9034-78fb9c905433": "sofa_chair", "ee70905c-37a8-4661-93cc-92f23e9453a5": "bottom_cabinet", "21f34649-749e-4481-aef4-abf73263c950": "bed", "4811feb8-3e44-43ad-ab37-5a82e47a2ae2": "stool", "1c992756-170b-4f94-aaac-788c02cfb649": "bottom_cabinet", "ac57e7d0-51d7-45a1-9816-0f6e1b1b7b9e": "shelf", "5b76ee55-d45f-4001-aa26-ae7744feba1c": "sofa", "f34f07c9-536e-4d87-90f8-b53b328f5d8d": "ceiling_lamp", "094ed7df-1568-457a-aa01-478b98bc896a": "coffee_table", "4551d472-b45f-4136-9b48-52c357db2994": "coffee_table", "145a4323-43c0-35c5-9f1c-95ad5c7398e5": "table", "24a7dac1-c5cd-4631-94a8-439ef02bca77": "ceiling_lamp", "4219c88c-a6be-4c0d-813c-dbaf934dab46": "bottom_cabinet", "3ffaa0a4-3ff5-364e-afec-0835c098d1ff": "sofa_chair", "539fe43a-a9ca-47b7-817f-b2603adcf3a8": "shelf", "85c43042-acce-3f68-9fb1-f6b2e1f0effb": "sofa", "97292c06-c1c5-4863-8429-84c83e2246b3": "shelf", "9a7b95c2-d2e1-45a1-89a7-b24bbbe7b2c5": "sofa_chair", "4e1f8c18-bedf-43e0-a74f-bb2588be2c9d": "bottom_cabinet", "34e5b695-1212-4cf3-9d9e-50314061a036": "bottom_cabinet", "ee877136-4de7-4e39-8e32-33df9475f084": "bottom_cabinet", "ae70cd6c-2be5-417b-b68c-173da0125450": "coffee_table", "64556062-aa99-333a-ae2a-bd214a499099": "chair", "9c50b151-ec2c-47d2-9e09-a69b2fe768da": "coffee_table", "6dbce80b-e290-4a7d-8670-e1242d496ac0": "coffee_table", "5d8f1711-260e-3487-b4a3-9956a5b5c29a": "sofa", "c5a7c8a3-61d3-4d03-9da7-0bf320879d7e": "bottom_cabinet", "be1eeab9-bf0f-44dc-af86-03f674fa9bce": "sofa_chair", "74fd46e1-fdb4-4d54-81fe-566bf3290a5d": "sofa", "275969aa-20c3-4cb6-b7ee-29761775b5af": "coffee_table", "0c4f330c-787d-4fd9-b36a-a1308bfce2e8": "chair", "e45372f2-a22d-4769-8f0e-afa8e4117970": "sofa_chair", "d758e991-d125-46a4-85ae-c21253840c5a": "shelf", "4896b67d-8d64-4a67-b5aa-7703288dcbad": "bottom_cabinet", "7b4cc7d7-a08a-4085-a9d7-ddbdce78245c": "bed", "2046863b-b103-395e-bc9b-91cf5ad009c9": "table", "aeec6eaf-8b51-4e55-b7b4-d839da8fcd6d": "sofa", "cbb9fdce-e6f0-4c03-91b3-af9a1d81e8a5": "sofa", "0b9360e9-4f81-4176-81aa-99bdc0d62892": "coffee_table", "3e923a32-8ec9-338e-9699-fd7ea37777f8": "table", "98e10094-bd8d-49b7-a01f-c5050f7ddf4d": "bed", "79f8eeb4-9d8d-47aa-91ad-9ffb3860d29f": "chair", "5f167060-de78-4a9a-bd89-9f9fac511460": "table", "d796c38f-932c-4a13-9640-90c15cc90e3f": "sofa", "21af7203-f97e-32e4-b0a1-3ed957f2edb0": "stool", "69cafc94-8036-4e4f-b1cf-eeef93ad002f": "shelf", "756c401b-b000-4183-9d1f-7c87900bd91d": "bottom_cabinet", "c3b4eb1f-283f-48f5-9144-781581187840": "sofa_chair", "f1c1764f-4627-4382-a546-2bb071e8ebff": "sofa", "75140bce-2f13-4c9e-8d76-1747163d7232": "bed", "1fabeadc-efd8-4b75-a865-3da667a63d6f": "ceiling_lamp", "bdbebf89-4395-434f-a409-da0219e71164": "sofa", "69cd87bf-5d95-45ca-97a4-5f538d72bd68": "bottom_cabinet", "65e6859e-b3f9-332b-bcc8-c712feb808c0": "chair", "131f323a-5470-40fa-93ca-30f58ae7f001": "ceiling_lamp", "4b632dc2-95c8-46ea-9301-4083ced7edd0": "coffee_table", "2476d7c4-b428-3e8e-aa11-997c2bd9fe53": "table", "a73b0ce6-2c73-46e1-93d5-4ac85d63ba89": "sofa", "d39ae154-797b-4e05-9054-037d7c64bc10": "table", "06cf2c51-14c7-4d67-9ae3-f86f9738e52b": "table", "26618081-6f80-4b90-a149-b57f18ba9a9f": "shelf", "15f76e07-8716-40a8-8d34-01f2158b95bc": "table", "f2e08623-4743-47d7-91b7-4c015aa1fdc0": "chair", "b50ccd2a-3aaa-4693-8cdc-7090f78204cd": "sofa", "6f2cc2ba-6d8d-4a20-8707-4b2d12edf23c": "bed", "d80e9d77-c728-4d39-82b1-84485899ac7b": "sofa_chair", "025c16c8-6ce7-4eb5-8817-2f299f4bad84": "bottom_cabinet", "436dc837-ccec-4d21-a779-8a4a8323c3fc": "chair", "7ffe52d3-e4c0-4785-8afa-76c012e022a2": "sofa", "44103553-6112-42df-a6c2-cd94399a76db": "sofa", "d974808f-866f-4ae1-94c9-2ee7b8c5cd1e": "coffee_table", "807a5aab-58e3-43f8-a6af-d335e8f3323f": "bed", "69e41e39-4b12-4ac1-a5d2-40c7e633aa9a": "bottom_cabinet", "50a738d9-8aa0-428a-86b3-315f385242ef": "chair", "ebd9448c-1f2c-4ecf-bec9-0b0fac31b951": "ceiling_lamp", "3e83bd4f-6802-437f-a8b0-e115d57d7b97": "ceiling_lamp", "11743de3-3c46-4d31-801a-2573bff963dd": "chair", "14758dfe-bedd-4b90-b8c9-bf3c45203ca8": "bottom_cabinet", "4e203e35-931d-4731-8fdc-1812687326c0": "coffee_table", "0eb3a2f2-f3d9-4d99-a22f-44929f0419ee": "table", "13ea1157-9143-3b97-b0be-4a1e88780c2a": "chair", "48b6a0f4-8455-4c28-9144-2d90b08711b2": "table", "6f53aa4e-429d-3eb3-ba2b-1256fba47a6e": "sofa", "4cd22dc7-62c2-42a5-89b7-6b3d3303fd40": "bottom_cabinet", "eed30d6b-2e8d-43ae-ac1c-191bf6d8d17e": "sofa_chair", "37d91629-46db-4979-8525-42d124133e39": "ceiling_lamp", "cd150ee7-5b6e-478a-a3be-057ca7a3180f": "bottom_cabinet", "06d73a72-69bf-483d-919f-8e7084968b8c": "table", "fe5ddc95-f552-4b06-af45-2c7a55da94e9": "coffee_table", "38f18f26-24d7-4108-b820-6eec943ac593": "coffee_table", "02d15e1b-09d5-425c-8323-0a423f655615": "chair", "22daa173-eebd-4d39-a8e1-4711c0bf3cd6": "sofa", "ce2ff684-6d76-409d-82fc-75a204afe64c": "table", "20316a10-7760-403b-a9eb-6dd72c936d39": "bed", "4d7483cb-2cbf-4859-9614-a13375954f48": "sofa", "7eb8707b-2853-3455-9c6f-09313fc2b4e0": "sofa_chair", "11eb3a31-340f-4b54-9b18-97185b87b27e": "table", "19581a7b-6f35-4527-a931-0504111a95c6": "bottom_cabinet", "5be0460d-2d5c-4b39-bbd1-97eac6b70a3a": "chair", "3e71de39-8a26-4124-a3b9-f3a13c7c8512": "sofa", "13256e16-3b76-4fa3-ad28-3f476ad0e338": "bottom_cabinet", "cb2dd77f-9201-4f7d-a264-2079a733c199": "table", "01e2dd49-dbbd-3bc4-84f2-ebeef1447f55": "stool", "796eb74e-4df4-448b-807b-6539c7aa49e4": "sofa", "ca4119e2-1788-4f22-9f7e-7c11972519c9": "shelf", "841a2bc1-8e73-4e3e-9084-dae9c67f2b0b": "coffee_table", "5aef28fb-0071-4c76-aee9-db196fd2bd7b": "sofa_chair", "ab48c542-dfb3-4617-96de-478ba09d1e29": "bed", "aeef9192-6656-4d48-ae21-db87267aba94": "bottom_cabinet", "65d94be6-74d9-4f3c-a7ce-fffe1f25ba15": "shelf", "23ffc5e8-5b6a-415f-835d-db3e65d23501": "ceiling_lamp", "3c0bc607-b9e8-43d8-a520-038385a97cad": "sofa_chair", "e83eaa01-64ec-4396-a51b-a1ce74aba294": "sofa_chair", "48180489-7bc0-4f98-b51d-f047f8b5f7ee": "bed", "ef925bf6-7316-44c2-a1bc-d4c9affee562": "bottom_cabinet", "7ad112f4-24de-4fff-9571-115b3d70bff4": "sofa", "899b2af9-a84b-479e-ad12-1696f554a53b": "coffee_table", "59719d96-c93f-4c19-84f3-cdb9c4287664": "coffee_table", "59c1ed05-d289-4a09-9786-62f72bbfd0d6": "chair", "1a258aa9-1d34-4a88-a801-3c94adefd3fd": "sofa", "1e5cddb9-68df-3efa-9443-7adfc3930a08": "sofa", "cf7b801c-9f8e-4ed3-85b8-f73175315728": "ceiling_lamp", "e848dc0c-ca5a-4d63-8020-bdc6da04f801": "chair", "878fce18-92d4-4a8d-9d79-0b117591168e": "chair", "fa892aee-16e1-4410-b8e1-1196e89e4455": "coffee_table", "2869c66c-5c15-3266-84ea-5743335e155e": "bottom_cabinet", "d41a6fb2-c508-4114-b5c4-2b60c3d97f64": "chair", "54dede58-1168-4a6a-9059-5791f1917b21": "coffee_table", "2f595420-934c-426b-8397-b25b10d3b1af": "sofa_chair", "a29fb22c-8b0e-41bf-9211-774c1b1f5946": "chair", "3a63507a-37b9-4306-a70f-23397ad6ff72": "ceiling_lamp", "e06e81e5-9229-4bba-9090-bee0ad85073d": "chair", "17b89600-f089-4e90-bec6-799298457ed4": "shelf", "1533e0be-e5fc-42a9-8af4-ad5776a9199f": "ceiling_lamp", "ef917afd-ad81-4e88-99e3-519f71937dff": "ceiling_lamp", "1d739bde-633e-4a4e-907e-4af10e556799": "sofa_chair", "80d36ff8-de60-4fd9-8f2e-1cca84d4ebbf": "table", "84ad8cbf-d1bc-4d19-b96f-d9e89652e3cd": "sofa_chair", "f4b2a2d0-88b7-4444-9171-6999e2efdd4a": "bottom_cabinet", "5285bc52-c5cb-48d4-a0c2-bde9b827686d": "coffee_table", "e14d89ec-42a6-4dec-995a-63d7feb3c89b": "bottom_cabinet", "6ac7b3b2-cd64-4de9-a2fa-a09bf3513ada": "sofa_chair", "6ba54d19-b186-4a8e-904f-1989f9c94033": "shelf", "01482e2c-b64c-4e31-866c-cbdebe08d5d5": "coffee_table", "24f7d921-f36e-4182-8853-39d54b82ab16": "bed", "19b8f3f9-961f-4fae-8540-ad5dd5600e04": "coffee_table", "65daae23-8075-44ff-a845-91614d2debff": "shelf", "6670bd30-fccd-448d-b540-61dd538832fa": "coffee_table", "5c9615aa-a953-4ec1-91f7-ce96c54381d0": "shelf", "23281f81-d550-4f4e-a17f-92b63006316c": "sofa_chair", "7a9cdb6f-47f8-4f99-a661-fa793b2928bb": "sofa_chair", "fa2bd949-3008-44df-8633-3e452dd95992": "coffee_table", "835f1b5d-cb60-4164-a1cd-927bad7f3dbd": "bottom_cabinet", "e5b506e0-891f-4403-8bf4-30a365157df4": "coffee_table", "86e02d2a-22f0-450a-97da-86424c4b68a2": "coffee_table", "24d3c100-8272-48cb-9f5b-bda7822febd2": "bottom_cabinet", "74d854cd-c006-4164-ab00-39549af4a140": "sofa", "a2b2b89b-8e65-4102-9701-9177f1492e72": "table", "18d54650-68ae-4d4b-8079-1f050b267153": "bottom_cabinet", "2548400f-f2a5-479e-ba3b-0d8ab01d72f9": "sofa_chair", "c82426a8-b300-4082-8be3-fae454dbd511": "ceiling_lamp", "1e5df219-dc2d-45ac-aeb3-0023b628bf14": "sofa", "d0a80bab-3684-4a5e-8c9d-d2d406a12f98": "coffee_table", "fc7eb06e-b6ac-4dfa-8a2f-ab378b3eb177": "coffee_table", "dc491b13-cc1e-44af-90a2-5db342132f50": "stool", "13f80249-f81e-4e97-8c91-a175125e1b46": "sofa", "28e8b0f4-18df-4205-90ee-4464a317eb89": "bottom_cabinet", "020e7a6d-d655-449f-b048-9054d00d0994": "sofa", "4b638089-b181-47a2-97b3-5d395a887857": "sofa", "75bf62b4-3a67-44ca-aa9c-72944e3817a0": "bed", "2a70d37c-b58a-481b-b960-73321437df59": "sofa", "021998d6-2d2d-40d4-ba50-888a0bda1ca4": "sofa_chair", "58ecbc56-5006-4a7f-ac04-e98246d13126": "coffee_table", "c88f25fa-d2be-4cea-b89f-ade61071a917": "sofa", "4b88fa1e-fb5a-3441-b977-20f11f2126b7": "sofa", "5fd84e6a-b92d-4373-92f6-ba7d7aa562a6": "sofa", "46a9eeed-d3f1-4353-9ff8-808547935c6a": "shelf", "e95f8ddc-4c2c-4c4f-9c7b-8c812b5eded3": "stool", "4584676b-862d-4372-928a-a62579b72d03": "bed", "5f63a45a-b86d-4b1d-a6e3-7d8116b2f38d": "bed", "6c411311-29e0-4111-8c91-46ff1d0f8f66": "sofa_chair", "67c5156a-dbce-49fd-b848-0c5b169c2122": "sofa", "5af7dda1-dd1b-3318-a3f9-6a4f70190ad6": "table", "f6ce13a4-03f3-4ca2-ac18-f5be26e0909c": "shelf", "318f6349-44bb-487e-aa44-4c2649e9e348": "table", "62f5d5a8-253d-442f-90b5-a86943b9972c": "sofa", "4aee4c5c-cf71-4084-a2ea-9e7d35900f97": "table", "767c965b-ce4a-4187-8508-9406d7a95652": "bottom_cabinet", "c3d71b27-489a-46e0-bdda-4ea285d1cefe": "bottom_cabinet", "0d76011d-07e9-46a9-bb68-58c9817c073f": "coffee_table", "ea33993c-e458-452e-8193-1afcac00d836": "bottom_cabinet", "29ff5eb5-53e6-4c70-8f7c-e6f57ba4bc32": "sofa_chair", "9799d72f-cc26-4259-a063-90122905c778": "stool", "67f94294-ce00-4106-92c5-603858b5a73d": "coffee_table", "26a519d3-8191-4536-9ba5-1b18e2a04aba": "coffee_table", "22280199-72eb-48d7-bbd0-1760bf6a94c7": "coffee_table", "d7313fb2-845a-42b1-9a78-3116034d3569": "stool", "525e3db0-5f7a-349b-b18e-f54d36a82d22": "bottom_cabinet", "5600e7a8-3772-4e17-8ad8-a5d8b2a01e88": "coffee_table", "1f5410a5-1b98-4ccb-974c-7eb6be918d84": "stool", "6c93a5d6-d44e-45e0-84c8-cfc1629438c1": "chair", "79e5cd95-d841-48f3-98ae-2e71e2089896": "stool", "06213f44-aa13-3208-a360-bff6a1df41ac": "sofa", "0a6ce4c3-1fbd-4135-b441-40a07c634660": "table", "196b1362-48d8-4fa4-9713-a5885add02ab": "ceiling_lamp", "2b214c3d-bab2-4bed-b285-8c0d11df2ba7": "bottom_cabinet", "b9237c75-6b5b-4c0f-a776-5ab036c5fb22": "bottom_cabinet", "8e604449-9d9f-44ad-baf5-a9fabe9350b0": "bottom_cabinet", "71fbdc29-958b-4021-84eb-f8ed917391db": "coffee_table", "1b872790-c442-47d7-9cfb-f7ac71468a9e": "table", "4a150921-6380-4fa4-a92c-3ff7991a3875": "bottom_cabinet", "bd68e830-18a3-4b11-bab5-0065a5531d83": "bottom_cabinet", "224835f3-556e-46f7-94b0-5cecec1cedc1": "bed", "1192c99e-03bf-4e1d-beae-1f1137b36474": "bed", "9c9f6b41-6c0f-45d6-803b-f4d6bb0d3399": "coffee_table", "431e3530-40b1-404a-bf3b-d6a2fee00a65": "sofa", "064bdaa9-b5a4-4c51-a8a5-bf56e37e61d8": "sofa_chair", "52052edb-9113-475b-bc2d-e0eba1629052": "sofa", "c757c32e-17fe-4776-8ff9-ba828726297d": "sofa", "3f3b0d64-ba24-45fa-9a65-cb4255a9da63": "coffee_table", "03f1de79-858a-4a41-82b3-626fba494705": "sofa", "3d41a66b-08b3-4be0-a6f0-84cac4df3be5": "ceiling_lamp", "73bd5cf2-aafd-4cd8-87cd-585024e40df6": "shelf", "2846a9c0-4d47-42c8-9cd4-53a64d86a65e": "stool", "0efb7d52-0d59-49b3-800c-161aaa388ed1": "sofa_chair", "0f5493f5-073b-4039-b6e2-64caf80cec5b": "sofa", "60742bea-912a-4cde-93eb-0d7ddf459fa1": "chair", "5746f841-ebfc-4485-b85e-55d930150297": "stool", "b142d37c-62f9-4f14-a757-356310a8e346": "coffee_table", "17c203fc-33ef-3c53-8e15-da86e53d3fdc": "shelf", "2391032b-b1a8-4359-a9d9-b31ac4b12fe1": "ceiling_lamp", "8d5b1271-2db2-4c85-8f4e-0aa3e0524289": "ceiling_lamp", "7bb2ad87-4811-3766-a763-dd8fcc1ce11e": "sofa", "59986133-548d-4bf9-b2be-9f36eb125d45": "sofa", "0d7421d4-2656-435b-9eb1-8884b4b3dcb3": "shelf", "5e1becdc-0f4e-4f2a-a8b7-4f8ba0e28f24": "table", "cca35343-7ce0-46a9-b7ae-0bbf59af899a": "bottom_cabinet", "2cd827c3-ea0b-3714-a639-3e348b3da3c1": "sofa_chair", "7130b8ad-e98d-438b-bc75-a81ad004d4bf": "sofa", "159a35f3-5a01-467b-a08c-2597bab7c3d6": "bed", "7b4611bf-d658-4e0d-963b-a71db15a45df": "chair", "50823ece-f1e0-4a8e-b7d6-312953939076": "bottom_cabinet", "b543003a-54f3-42b2-bf47-29370f97414b": "ceiling_lamp", "6fde7263-f1dc-424c-a9d1-45364df35ec0": "chair", "71f2fc44-a558-4633-88d0-52c66519b966": "sofa", "65cb55e0-bd19-4554-83af-93ef592cc292": "sofa", "9e0dfc29-e55e-4db2-a58d-f91595be12db": "ceiling_lamp", "c41efea1-9cab-4ce0-9189-c784f19a4da7": "bed", "854b1e42-7c3f-492f-97ea-83553ed76609": "bed", "63082f75-e273-4a2a-b361-e19b3215d20e": "table", "7e8d08f6-0f42-46a9-9259-27a67e19b8d8": "sofa", "8bcfbbc3-fb54-46d6-b9f6-8029c2fbb3b1": "bottom_cabinet", "13105ace-7a19-4e5c-ae04-66fa58770e0e": "ceiling_lamp", "702b103d-9b81-4b92-b435-1c8e592f7098": "sofa_chair", "c68d16c3-982d-4dba-85fd-a6a1414f7341": "coffee_table", "990ec0bb-377d-40e3-9798-2dde29ab853e": "bottom_cabinet", "2381ff90-f4cc-4930-8245-78dfadb35245": "bottom_cabinet", "1927715c-71b3-438a-8044-c8e5208f6e52": "sofa_chair", "7eb59a31-260c-4137-91b9-52a8cc478b58": "coffee_table", "650fec0d-8577-4afd-b42a-47bf8132e31c": "sofa", "68e41dbc-1f12-447d-bffd-d1864fa2a7bf": "bed", "6a82eedd-a73b-4704-97d1-2b7576199f6b": "ceiling_lamp", "f5619c81-fc74-4a08-92bb-333c5fd27866": "coffee_table", "261e1312-1981-4dda-87bc-458a8c68e007": "sofa_chair", "3c66f616-9f55-4651-8097-b9580d615d76": "coffee_table", "61631b16-afe9-426b-9351-c753acbf0731": "sofa", "5e3a4347-58a1-4424-87cb-6147306cc9d1": "sofa", "81251bae-95f0-44c2-923d-439a38549886": "coffee_table", "5fcf6263-4774-4123-950b-b1e68ccbb50d": "bottom_cabinet", "23b828c7-3550-3aff-b339-0bc0225c0373": "chair", "be16ce5b-3558-49aa-9e10-ffd10cb2666d": "bottom_cabinet", "0c71044a-3672-44cf-84f8-796b5c45d93a": "ceiling_lamp", "8bbc5728-2827-4bc9-971a-ba23ae82e170": "bed", "04110701-f3d8-4dd6-9ef3-95fa6c10ee94": "bottom_cabinet", "8fe8d1f6-4daa-451b-9db7-e2b7df2c36a3": "chair", "7d0493ec-7c6c-4d2d-a45b-b20a6f520ad8": "ceiling_lamp", "2b6216ea-23a2-435a-b6be-1f32aed4cad4": "shelf", "e575394e-287b-4d1a-b631-75b0a7f7c2a2": "ceiling_lamp", "ac7d2819-cae6-4551-b03b-21e973a5e166": "bottom_cabinet", "52f31197-5e9b-4e8e-84e2-339cb6446016": "ceiling_lamp", "23aeb441-8914-3497-b5f5-3d834a0d45d2": "chair", "17ebff72-48fa-4ab7-a912-9bdbe64df4d0": "ceiling_lamp", "e9c02f97-2306-45be-ad3e-7bc2c6697857": "bottom_cabinet", "e712c3ac-bfc8-4382-b267-d413df5df2d6": "stool", "7ced9cbb-76b5-4ddc-bae4-51b91148addf": "bed", "f357a38b-c67f-4f52-8989-5f48f06fee1c": "bottom_cabinet", "ec54569c-c758-3d66-971b-e6f14a16c7e2": "shelf", "137b2dda-9f69-4e1a-a576-ea00e62ed75e": "bed", "9486a91b-c306-40fd-9ea8-5aaf950d21cf": "bed", "0cc9c249-9b8a-4f43-8999-3f0336cb1e77": "bottom_cabinet", "3fbc0d9d-b383-40d4-a5a3-9a7a493ecf87": "bottom_cabinet", "81d1ecd3-9a1c-4ee2-be0e-de9c6c121ed3": "chair", "8b8b9a9a-2221-4715-98bc-2b2f206db088": "coffee_table", "1be824c7-f2d5-44d1-8916-c88ec9a70468": "sofa", "8fe26c63-f744-4dbf-9149-ed8147275bed": "bottom_cabinet", "628fa2e6-3dc5-4e99-8e6c-830d2de24fd6": "coffee_table", "ad54eb72-682d-4c51-bb95-d02a543d648c": "table", "efaeabac-2ede-4050-a9e7-c6a926bfbb11": "chair", "91529269-ea9c-4809-9629-8e60a957b34e": "bottom_cabinet", "8335733d-e23b-4b34-99dd-68e1f886f80f": "shelf", "8634ce95-386e-328b-9f08-dbc03452d6f8": "chair", "8314e676-c506-3017-b1d3-08d8b7625d85": "chair", "a777eb62-7b38-4a0a-b0a2-cbbc9f9dbf3d": "table", "610c2c7b-7558-4e43-9b25-7588b4feeae4": "sofa_chair", "9c1a14d3-690d-4206-8286-ed1bb27bad97": "chair", "cca8222a-eff6-4142-9907-f57c15554033": "sofa", "455e63a9-190b-4863-a444-bc58a7f6a78f": "table", "ce2fddf4-5119-44dc-9b2a-7f8485634b28": "shelf", "896ae8f9-c09d-4d09-83df-d78b46c5ab12": "shelf", "5d20f0b7-b24d-4d1a-894b-0c3899a3ba23": "bed", "1422901f-c991-47ab-a20a-abcf2bc2b164": "coffee_table", "599b4170-24b9-455b-86cc-5e9e7007472b": "bed", "999da3e6-3125-48f1-bc1f-b542a789ecbc": "coffee_table", "009ac457-0558-494c-bffa-72c4c0960649": "coffee_table", "c6477eff-05e1-4022-9c94-7f773fc0a1f5": "sofa_chair", "e7d832ce-83d1-4211-af05-15647bcc59fe": "sofa_chair", "cf24f58a-04eb-4e36-8d6c-a42688541c0e": "shelf", "6c5db1f5-380a-4fcd-a2fc-b17b62a5b176": "sofa", "aec4451a-1143-44e8-857e-9b2c3c7b9cf7": "coffee_table", "c1dfff67-871a-467b-aa2d-8cddf7043582": "coffee_table", "bbf6a85c-16e6-42ac-8754-f74d51bc17ce": "bottom_cabinet", "77185b15-66a6-45aa-8ef7-514b4b374ecb": "bottom_cabinet", "187f9f51-4778-42bb-959f-47e4f71636fc": "bottom_cabinet", "718d3c86-4d20-4376-ae91-c497e482c722": "bed", "e55b9d48-5b48-47b2-a75c-79e3d1de19fe": "bottom_cabinet", "01519e3f-6a69-4f66-9e5f-2b54894ca901": "sofa", "65d7e9e1-9278-41af-bd9a-f0e23eb97d79": "shelf", "3d135fd7-0f66-4d70-ba63-abaa83c76bfb": "bottom_cabinet", "e5098ff7-3cfe-4e8d-9412-2b35a4465283": "stool", "c1a085ef-ff8f-45c2-b19e-1b472056a59c": "table", "4c4426eb-7afa-4cb3-a0b2-4dcb9cbca290": "bottom_cabinet", "6d1b37f6-429d-3035-adaa-e2372bca3f72": "shelf", "283a58b0-3075-457f-b29e-fe3a7ba69d68": "shelf", "16153397-131d-499b-85f4-a0d28f199b75": "bottom_cabinet", "8d4810de-1c7b-4ace-b9b3-edf23619b063": "bed", "39057a21-0a68-3494-8522-2e473dd6a38f": "table", "43c9fc03-735d-4c5c-b83d-41a25f7328de": "coffee_table", "56eaae01-bc14-4eb1-a1d9-75cc4bb7f0ed": "sofa", "0ca57bbc-70e8-43c8-8945-38659f619027": "sofa_chair", "67755a6e-0332-4866-9744-60c6ca8b4683": "bottom_cabinet", "a5861df3-2ccf-4dc1-b882-a376699a7fab": "sofa", "641de3dc-fcae-40ee-85ed-1747f46551b0": "bottom_cabinet", "30bc2d85-ef26-45d5-8fcf-f48d23c49a5e": "sofa_chair", "5d40d146-8be8-42a1-81cf-7cbee8d86c26": "sofa", "4d24044b-8ed0-4623-8bf2-fce87aaa3766": "bottom_cabinet", "d2232ce3-668a-4511-826d-36d66dacc98c": "ceiling_lamp", "2b308f89-9b94-3d94-a7e2-db47476330e7": "chair", "1c5fc5b7-5ff3-4440-9da4-ca01502adcd2": "sofa", "4c7852d8-a55d-466b-ac5b-8ad9dd1aa242": "shelf", "d4765df3-c7cb-4161-b00a-1652af698cc2": "table", "68bb91ac-bb28-4126-b904-28565fec4350": "table", "d97195f1-c010-4d18-a002-7820e8082bc6": "sofa", "b3f39468-d393-471f-b877-d18f885877fb": "coffee_table", "76975bca-bfa9-40a5-af8d-0ff2101ac652": "bed", "73b20377-3d6f-4218-80db-7c4cfc9be138": "sofa", "3853e55a-8057-4db9-a704-573e05710dc5": "table", "b2b201d2-a252-4dad-b4c6-26fc50f70e3f": "table", "1ebb42d5-c360-4b6e-814b-a80e00972e90": "bottom_cabinet", "40083db3-c14d-3c8c-8621-0a02a6773ba4": "chair", "07ced31c-ded5-40d4-93d2-0b4ebc719001": "coffee_table", "5891960e-a387-4cab-a086-f8ca5aa1fa03": "sofa", "433123cb-172e-49ed-be20-24ca9159b0e4": "bed", "77cf2ded-170a-4786-b3ce-9ff05d368cb7": "ceiling_lamp", "1e8c9540-406d-415b-ae7c-47743f6c92ac": "sofa", "cc00eba9-17d5-4b1c-ba26-04036b471f8c": "table", "3677859c-a5ac-44c3-ad0a-53116d53edd8": "sofa", "f19829e2-601b-4118-a179-4e65ccca8279": "sofa_chair", "4d48203c-9e9b-4765-b44c-9f8387932370": "stool", "621858df-a521-47c5-b7db-0e7dd9e4d331": "table", "acbfef7e-341e-4577-b14c-969b3f90c466": "bottom_cabinet", "b66fccb0-d2b1-440c-85d8-47cbdf72c3fb": "stool", "14483243-3183-489c-bd6b-fe502cfe32cc": "bottom_cabinet", "57f418d5-60db-43a0-8c50-dd9ad661f322": "chair", "49265336-2062-402e-9957-a18fdc5bb4ac": "ceiling_lamp", "1cb20780-66d7-442a-a013-4e5e2f99caad": "ceiling_lamp", "43388928-4fb1-42ed-85d2-513abeba766e": "sofa", "5346074f-fb50-4e93-82df-739ea17b7b6b": "bottom_cabinet", "553c84cd-98c7-41ff-99ad-31e6687cd57d": "chair", "293c8cbb-a7ca-484a-8680-760d04777721": "chair", "3ef48664-ce00-4c66-8f3e-c39e139b9cd4": "sofa_chair", "eea883d3-9d0a-48d3-beb9-1732cd3ebf4f": "bottom_cabinet", "35cae47d-d625-484f-babe-7993f35148d8": "bottom_cabinet", "78a99a80-1866-4677-bde8-2234c7025024": "shelf", "93a7847f-b482-44c9-8bf4-0417d174f4a7": "chair", "8e8ffa10-6b88-4633-8bc3-77cf34979877": "shelf", "510389ef-a72b-4009-8e68-7107469187be": "chair", "adb163e8-b558-4292-a52b-8f6cff7156bd": "ceiling_lamp", "da77d625-9ff4-4fbb-b016-8f7e45ae4dec": "coffee_table", "719b6e52-d85e-4e4e-ae53-cafedfd2ab15": "sofa", "56a2b156-4b47-4cd2-98a5-ba309a34e6e8": "bottom_cabinet", "13ef77d6-e50f-4b71-912f-4f56b5c469ce": "bed", "adc07286-349b-4ff6-8902-c57e9e6ca77d": "ceiling_lamp", "745d57f8-2c5d-407a-b485-d054b9a543ad": "sofa", "94dc7b45-f5eb-40fa-85ca-63eb6519f883": "table", "394935bd-b98a-40a7-b835-c44a42ffc7ae": "shelf", "24ac0705-9227-4780-88d9-c1d9426935c0": "sofa_chair", "290ad037-4370-3ad4-9926-369a00b569b5": "stool", "79b5982a-1302-4080-9cab-306c8e3e337e": "bottom_cabinet", "64c3ec5c-aa56-445c-9bcf-478f8e876a26": "bottom_cabinet", "41e46b9d-b459-4a29-ad2f-2ca8c1fced9a": "table", "7af70c72-f14b-47e8-b346-3cf98836fc17": "sofa", "8a61f12e-eb69-46ef-a427-b22216cc5aed": "sofa_chair", "73f747d5-d635-4d0b-a098-03ce859c54ce": "bed", "0479899c-c096-47c6-9a2b-25d49f1dcbc6": "bottom_cabinet", "0e0e01e3-6e59-4438-8d4b-af0de9f8cde3": "shelf", "bcdd266c-ded7-47b0-962e-aba98f16afa5": "shelf", "427fe3cb-5879-4165-b678-9cf106f66e06": "coffee_table", "e9c241c7-0466-4a2d-8489-11dbd8191dd3": "coffee_table", "cdad1263-61c4-4452-9fcc-b463daf92a47": "shelf", "7ca8f7ae-eea3-49e5-9388-89447bc422f8": "ceiling_lamp", "236ffa12-8887-4376-a67f-16f1f17f18aa": "shelf", "7d4d3e12-cdbf-4947-ac28-8bb639b7636f": "bottom_cabinet", "ef2b382e-3172-4973-9e5e-91d13c417938": "ceiling_lamp", "8c8693e6-6073-48bd-870b-a683fca6013c": "shelf", "7ce5ff71-61c4-4099-ab85-2dfa674e933f": "coffee_table", "1d424467-b46d-415f-b9cb-c5151fba71f1": "shelf", "501f8db3-e981-4320-96a8-449e392a6369": "sofa_chair", "c2585426-1d3d-4772-bd27-dd0e4e74e61d": "shelf", "68e36e87-90f0-4ec8-97aa-4d018ddd3118": "bottom_cabinet", "c8bae597-b6ba-453f-a34d-39ce4eb82d2a": "bottom_cabinet", "7642c1ce-55aa-4cda-9238-31b1cafc7989": "ceiling_lamp", "c18d1a3d-c11c-4d6e-9be2-d196fed48e82": "sofa_chair", "0fb0494a-7124-462c-865f-22b33eac8329": "chair", "5a384fd8-747b-4eab-84a7-3f4bf1f9180b": "bed", "e133bb16-3b87-45aa-a9f1-92e422fb7f8a": "shelf", "32bc0f2c-959f-44e1-888a-ff928185592c": "chair", "a4d6dfab-0f58-4b5b-9255-59b9d0a38855": "sofa", "a79ae28f-e391-495a-a259-6eeb308950bf": "chair", "140689ca-0f1e-4b8d-bac4-3b679d3f6ba1": "bottom_cabinet", "e24b02cb-019c-4e35-8784-710437764448": "chair", "cbe4bcd1-70b0-4fa1-874b-6c1c7219f734": "stool", "56ec8ff8-b055-4681-b9b2-7f2f50159d0d": "shelf", "8e1d0985-a787-43c7-8d93-fc8687f765b6": "table", "cecbfc82-19fb-4272-a055-c3fd1d04c9b0": "table", "b06fbb8c-e3d9-4d1c-bd48-4a94a93a5610": "sofa", "7eb0d057-2b98-43b7-90aa-077205261a26": "sofa", "58f2b921-f488-480a-a6ce-099715ea4eab": "shelf", "49126819-12fc-470a-a809-fcd9102ce88f": "ceiling_lamp", "4a011462-bbfe-4430-b9e7-b3629bc87395": "sofa", "5949e07c-612d-4f06-826f-5150b5435890": "table", "da7a073d-0e36-493b-9b86-7e96af2b3e3a": "table", "6c04211f-96df-37e7-a700-b1155fb24923": "sofa", "096593da-5aef-4858-bab8-c6760311ef43": "sofa", "272cd115-4eee-37ac-9591-19defec3bbe7": "table", "b70bd195-d4e7-4d46-ba57-7c053351c461": "sofa_chair", "5206872c-1674-430c-8d34-e46d5843fe07": "chair", "4096d027-c7b6-419d-86b1-c5b22943871e": "sofa", "5b93fca9-e11d-45e0-af11-e6b884f7fd3c": "bed", "6a0fc647-ae35-41d0-be97-3e98c1814fa9": "bottom_cabinet", "5eda7ff3-b6bc-44a1-ac85-c9a9d35fce34": "sofa_chair", "f95ac914-f9b2-4160-aa2f-f7be9cf8daa0": "sofa", "1072a3d9-aff2-4030-9148-7f1e4aaf15f6": "table", "d4bcb6f0-6baa-4d8c-8745-bac3614b26ea": "coffee_table", "8af59c12-464d-424a-a866-7a7df87ca3d8": "chair", "67d97e73-4eac-4ae9-9ff2-db1127dd5d03": "table", "b383098b-3379-4216-9883-24ddc0bbf73c": "chair", "1774cce7-da69-43e8-8e68-595bc305ebe0": "coffee_table", "443a14f4-44ba-4e1b-a73b-c8fa77e92e21": "sofa", "214c4c33-af26-45c2-ae83-d32a433ce543": "shelf", "677c83ec-7de6-4d7a-a26a-43af7906c9f2": "coffee_table", "733a042a-fe2c-48bf-96e8-9b9b94e286b4": "coffee_table", "c6fc874d-c963-4eba-9956-956241dc5c32": "shelf", "7e17329f-820d-42e4-a289-bdfd49a33195": "sofa", "81a8dcd4-9de1-4fdc-8780-b07883fd48ee": "ceiling_lamp", "ba2ed410-f349-4ea9-9ba6-de9f678c68af": "sofa", "155de1e3-3f28-4127-81c9-9ff5cd2cb1d2": "coffee_table", "85fa6c39-7260-407f-b831-a9e7113d25bf": "ceiling_lamp", "700e09db-0606-3f27-a61d-acdd563cb2f2": "table", "76e0d12a-1643-4c91-974b-c52cb70ef876": "bottom_cabinet", "9bded2cd-199c-4c00-82f2-e1169634de43": "bottom_cabinet", "59f24c07-96da-3402-8947-65f5a1fc48f3": "chair", "18b5b81f-7860-449f-87fb-5552e3a96fb9": "chair", "08f6e8e1-2eb1-401a-a1b6-35d0d734eac4": "sofa", "bb80b7ef-b815-4ca0-a3d9-89658080cea8": "ceiling_lamp", "76741704-e1bd-46c5-a816-d65369c36eac": "coffee_table", "0827d723-3b66-4db4-954f-f586aa59fba7": "bottom_cabinet", "9b303b73-1cbd-4de0-b651-3e3b82f2d5c4": "sofa", "80044f0e-0052-4e23-9107-e8af7a343c67": "sofa", "5bb5b80f-d0e7-402f-87fe-1848455915e4": "ceiling_lamp", "f6962e45-f344-44b1-bfea-15f3cd9dbb34": "bottom_cabinet", "64f86d6f-5091-42c3-9385-ae9655bbca81": "bottom_cabinet", "3d375ba6-b294-44ec-afa8-b28694d06615": "bottom_cabinet", "0956955e-54b9-4ac1-9766-6fcd24df6a95": "bottom_cabinet", "9110001b-e49a-4703-aebe-ee2e61d6f469": "ceiling_lamp", "43f83fe9-ab65-4d67-816a-1e6e3c1161c2": "bottom_cabinet", "6f5fb822-333e-4ee2-ad9f-694d76de8e16": "shelf", "27195304-e542-4ad0-90e8-69c9eb662834": "coffee_table", "d0d69216-c681-49f6-8bb1-5d745ed3de39": "stool", "23739d34-2a4a-46e0-a32f-2261e6dd915c": "shelf", "e3cd71a4-5bf1-4e46-8370-bf7427d31f80": "sofa", "032c235f-47b4-4827-a9d8-77230cbffd1c": "bottom_cabinet", "218cb5eb-18fc-486f-857a-53007f719f67": "coffee_table", "7f76342f-ff02-477f-aba0-5f7ca235f177": "bottom_cabinet", "3db020fe-44a8-427d-840e-8ab9cb1ca01e": "sofa", "7e6da177-e9cc-4631-a07b-40aef2265b16": "ceiling_lamp", "5c612000-adb5-4951-85e4-c10004f1581b": "sofa", "2708c786-c710-4230-a351-77b7234a89a9": "table", "235a9a69-8756-4391-9ccf-df601fe349f3": "coffee_table", "0e4c4d43-c3fe-4df6-80d1-01cad2dcac84": "coffee_table", "867cd75a-2644-489b-8820-90e85fbd97d4": "coffee_table", "7e539db1-689e-4916-9283-c0e08c61e3e7": "shelf", "75e6ab89-3162-417f-a32f-6da2c1a0c614": "coffee_table", "baa3522b-8136-47e2-b401-b413906edeb0": "chair", "dfdf7878-6443-4611-b0b1-3ec086e6e56d": "coffee_table", "6acebd04-bd05-4231-858b-81bb980bcbed": "ceiling_lamp", "af4566ab-f47a-406c-af9b-36bf3bbaf3fe": "sofa", "0158dc1f-f6f4-49eb-98db-ceee9c737a74": "table", "1ddad3b5-789d-44a5-a4ed-fc7f7a0950db": "table", "a9983074-f063-43a8-950e-a8a861a313ec": "bottom_cabinet", "125e34c0-0d27-3f7b-80a0-80709f652073": "sofa", "75e5997f-3425-473e-bd0e-a04daf66c2f1": "coffee_table", "57fcf466-f39b-4bc9-8f0c-13db9c9a0675": "bottom_cabinet", "e1e408a3-7668-40fb-a008-776cefdc30ef": "table", "e44f4796-3c49-41d9-8eae-2d8fdcf6f44e": "coffee_table", "7fdd4112-7d50-4793-a18c-23c6920b7306": "bottom_cabinet", "d72b7ee3-e39b-42e7-b796-e7ec9d23fbd7": "chair", "281043c7-4430-4b31-91b0-3c24f1bc13e6": "sofa", "cf94412f-a729-4247-9fb7-79a8678cff25": "bottom_cabinet", "d7d12035-4747-4d6a-add4-2fc07f944792": "bed", "5e93fd42-7c32-47eb-9071-e6e325c9303d": "sofa", "561516af-3d72-4bfe-b73c-882ddf9dc95d": "bed", "7d1fb480-5b4a-45d7-bded-7f4e179337b9": "bottom_cabinet", "27749ead-7e38-3ad0-bc3f-cf4950fa6dd5": "sofa", "635e6bb1-bf8b-4979-bd5d-ad26357cf3d3": "shelf", "1f489655-9024-402b-9541-788a543cc972": "ceiling_lamp", "4305d959-6146-3639-8697-a45e5043b5bc": "chair", "511658a2-d60b-4d71-8f5c-40f1f4306474": "bottom_cabinet", "23a484e2-ef9f-4262-a41c-c37f2a683340": "sofa", "68ea46f4-8229-45c2-bdfe-3b42a1100f90": "bed", "46005c45-ba17-4233-949b-d55e6c8374bd": "table", "ecd3141d-7753-4ecf-bc9d-590ba78cc465": "sofa", "60b09d35-461c-4cdc-a640-3ce738a5f81d": "table", "68ab2927-a20c-4ec0-ad4b-ef2e2b357b47": "sofa_chair", "18fa4d81-d200-492e-9e5d-f05f714a880b": "shelf", "022378be-f0d1-431f-b4b1-0f75f0c4397f": "sofa", "06502e02-e43f-4371-9ef9-293d62827bfb": "coffee_table", "19e1a64d-a87f-4d82-8834-5c34b889a059": "ceiling_lamp", "e29480dc-51b0-4548-965b-705c70ce9c66": "bottom_cabinet", "9f637598-a8d1-42ac-9bca-8dec361ecbb2": "shelf", "1dd88270-c9f5-4c73-8c74-5193053cf0f6": "sofa_chair", "05101287-941c-4442-af2e-0eef69f136b6": "bottom_cabinet", "923138a9-7e73-4913-9df7-493569726af9": "ceiling_lamp", "297ecba4-d2a9-408f-b52b-fa6277611011": "coffee_table", "0bb51857-09db-4dc5-9977-ef019aeeb82f": "coffee_table", "0e5ef578-6056-4b90-b62c-2f17c807b2c7": "bed", "106b01bb-95ec-417f-bb82-e0225f518853": "bed", "22869864-791b-4d0a-aa60-b0a85a5f4c8f": "sofa", "62f5098f-7bf1-4b95-bde0-8e7c06ba3367": "sofa", "280b1e36-a9dc-4162-8c06-b7afdc20f9d4": "chair", "7dd73f78-75aa-48d3-8dce-4e8c9459cea0": "stool", "520e9e37-b5bf-4209-8ec7-a3748a4e9f5f": "bottom_cabinet", "427ec02c-54b7-4ec0-a0c4-570512d1b186": "bed", "ef8594be-a7de-469c-ba15-7c3304de6613": "sofa_chair", "274c7578-e068-4852-8674-af79428e25e1": "chair", "0ce9c013-c520-42a2-b3b3-ca36090ec092": "sofa", "e4b0dc19-5f8b-4ffb-8ab3-4b88847a710c": "chair", "1fc97bfd-2d83-4ddf-b80b-34d2f341343a": "ceiling_lamp", "99768957-1d6b-4fe7-9ef2-65d8b6e7babd": "coffee_table", "0ba48071-5092-4c99-a43a-cfd7f607ddad": "sofa", "53882316-252e-4c87-98fd-e42247f74084": "sofa", "999f5c03-73ad-411c-881a-64f005bc2758": "coffee_table", "be1e44e1-36f3-4c56-9422-12f71e4e2346": "coffee_table", "153adf3f-0fb3-4077-ba95-df83304a612a": "sofa_chair", "afccf279-c980-4d14-ae09-f712c1bbb45d": "chair", "0bfc7747-1832-49a7-8599-e203db437b7f": "ceiling_lamp", "5bead3a8-0491-43a1-a5e3-8b9b94b74451": "sofa", "1923bd0a-8b61-498e-a42c-249418ed5551": "sofa", "2d206e2b-325a-3780-9304-3dbdf37b7d8c": "sofa", "7f695a66-fd55-310b-90c7-58ca4843f8be": "chair", "698c968f-43b4-3538-81ab-db75e337dc39": "shelf", "050ff629-dcb5-4e2b-853d-f4dbc440e20e": "bed", "134b2e64-dd23-4cf8-9ff8-39f4b7de45c2": "coffee_table", "de2bbb3c-d07a-4384-86e2-e09a35484fde": "bottom_cabinet", "0afa8ea8-d8d9-4e55-8e6c-f47362e6e2ac": "sofa", "645b08b3-d3cf-4948-906e-2e1ce721977a": "sofa", "877293a1-df79-4a77-a420-495fdb1e4933": "shelf", "fa0d0092-8dee-439f-b5f2-b5c2e05f7add": "table", "2898786a-32b2-4281-a7e1-4f900081186b": "sofa", "56441da5-3a13-47b8-ad95-50df8613d6dd": "chair", "8233c9cc-28af-4693-a41b-b647f7785f79": "bed", "6d80b238-ff4d-4603-8c71-61787cbab5cf": "coffee_table", "467633ae-39d1-476c-81b9-ca40078ed3d2": "coffee_table", "ff3c38d4-f2b1-4a7a-9216-7caf091d75c1": "table", "b70c7a16-9310-439a-9b7a-de07e03a21d6": "sofa", "b8b746a5-bf6e-4679-a702-e783140cc4d8": "sofa", "1bc7ff20-2031-44e9-91a9-4dd7bcf1b679": "ceiling_lamp", "f2389f72-3e9a-4de6-a967-b5a4eb2f542b": "bottom_cabinet", "79282835-d265-347e-a050-b777e7962150": "chair", "6321e604-9437-4090-ba2c-af5567201483": "bed", "183b00de-007d-411b-b412-19ada1b691c6": "chair", "4762e7a9-d4be-4e0e-a75e-b1179bf576e6": "bottom_cabinet", "ee5804f4-45c4-4a99-8443-76842171ecc7": "sofa", "bf7c6d54-127c-426f-8e66-3ecc2325f7bb": "table", "1b319f46-729a-4703-a97f-f2e538ff8869": "bottom_cabinet", "11710d4f-b5a6-4f42-9149-e6d5c898bdf4": "chair", "9fd6826e-413f-4e0a-be90-7486cee637d9": "chair", "6c6f53d0-c27e-497a-8f82-fac9d2ac4b25": "bottom_cabinet", "9b33044e-7e28-4516-acb9-efa399bd2bd7": "shelf", "2f75dae4-23a3-4d8b-9c09-60755a2d098d": "stool", "a8affecd-7ecb-49ac-998a-fad79a84fd5f": "bottom_cabinet", "a808729e-5695-4799-8da1-89675b81b147": "bottom_cabinet", "5a2bd3ba-50ca-4bae-95a1-81f1151f0d3b": "sofa_chair", "15c56627-711e-4d33-a435-3599ad97eda8": "shelf", "3a3aade2-0ba0-4345-9c43-65e8fded45c2": "bottom_cabinet", "552a7ab6-a0d2-4ea8-b30f-43f10e0591b0": "shelf", "1dcd2467-e18d-4b63-abf9-353e0fd8e102": "sofa_chair", "409e7d25-c45c-4127-a303-e6f24c55192d": "sofa", "4dcd088e-8ddd-487e-9217-6a86e68f4bbf": "shelf", "b5c1b81b-1ea1-4ba4-be62-d0b54b70432b": "chair", "8991cd3b-dbdc-4c46-8d19-5ce32b63b77b": "coffee_table", "1ca44b26-d4c9-4358-845a-b51b73547e5d": "bed", "25323205-d327-4d38-b703-059a4cee72dc": "sofa", "fd192377-d3ab-4d7d-8855-aa4bd3b8c47e": "sofa", "77c8d965-9d21-4ac6-9213-7a20ea56b3fb": "bottom_cabinet", "6a6a6e04-7ca9-47b2-aacc-e6452da4e8db": "stool", "81af1feb-181f-4047-9b6a-214757293820": "stool", "e2524211-121f-4c50-ad6c-aaa9005e9f27": "chair", "7540d720-2d60-4ad1-a0f8-69b006f2e9e8": "table", "5be080b9-c58c-3162-a2b2-43bd1a9713ca": "chair", "5fc28ad6-07f0-4863-8f84-621a0ffe376c": "bottom_cabinet", "c1ee0255-52ba-4cfd-b3bf-c20906fac5b0": "chair", "6e31af89-62e3-4ec5-9718-4448bcba6557": "coffee_table", "6db0b801-cb63-4490-b937-0d94825fe7e7": "bed", "56408f83-c4d4-3108-b609-dbd022f84ace": "sofa", "27847521-2303-43c0-bc6c-8a9ea13ade95": "chair", "ca52f083-d5d8-435b-8cc9-c1ebc84bc3bf": "chair", "048191ba-1356-38d3-985b-514f70c1a684": "chair", "1a5f7399-0e69-4e94-8546-8fb228d8d73c": "bed", "051a9bf5-104b-4189-9449-8ff98812cd54": "coffee_table", "7cc60589-1c0d-4942-bc46-616e54845b66": "sofa", "2db9e7c7-c7b0-40fa-954f-3e077645fe8d": "sofa", "44318f57-0e37-49cc-9a8e-1f07abf75fb2": "sofa_chair", "3cb67131-d5d1-4c81-8b75-572572ef8cf6": "coffee_table", "48461d6a-32f7-4d20-9e35-b817ef0f1478": "chair", "83572250-288d-39d3-b336-463672cf3d97": "chair", "3e5d4c86-68e2-4605-b11f-c8c8154e2f85": "coffee_table", "7b4a43cc-9ac2-49e7-9058-32ec8d9793f0": "bed", "8eb2b743-9a0c-4dce-96f6-1662205836b8": "chair", "0590988e-aad9-39e2-b613-b9787ecdfa52": "chair", "0ab0164f-ae57-4896-886d-b44e0976c33a": "bed", "0fdf5edd-bb94-4ebf-b724-87ea1fc17ccb": "coffee_table", "06f22c3b-f7bb-4c24-9e00-14034c01e956": "bottom_cabinet", "f60edc39-ce3a-4dfd-aa70-57389932b8bb": "sofa", "c9cf2b56-d3c4-4a47-949a-4cd80f8dfdaf": "bottom_cabinet", "aef5f7e8-7353-4655-8fb8-1e7d605a606a": "chair", "8da9f8b9-8a39-445d-b338-992338003e7f": "chair", "737200e6-f598-4510-811c-a15d6246b3cd": "shelf", "207906b4-16e6-492b-8dec-1af312c2c4a2": "bottom_cabinet", "f5675233-21fa-4f6e-9f0a-bc1d5ba45e63": "sofa", "e4accb44-ea51-425a-ae27-3dac83db46b4": "table", "1eddf36f-868c-3d18-9308-fd184b18fbc3": "chair", "1a06af05-9dec-4e14-b09e-3e9def0f4ad3": "sofa", "7a57580e-5d17-4f91-9c3e-d5a1d332e630": "bottom_cabinet", "3ee919ad-3774-4d02-9cc0-9f687808eda9": "table", "361d8d34-5dae-4e60-b153-d6580ec7373a": "table", "8f4810fb-e4cc-419b-85c3-6f1b6e7cd88e": "sofa_chair", "111226c4-e22a-4cea-9675-7d460a020ff3": "bottom_cabinet", "aef907c4-fff9-4101-a633-8f834f6f55cb": "bed", "43ea5d5b-8896-432b-b71d-2dc2bbd36704": "stool", "e38d5d57-429f-42f3-b1d5-f6ac48563e53": "ceiling_lamp", "d06b8d93-5b1d-435e-ad69-887e83036c93": "bottom_cabinet", "5474896c-d215-486b-8c86-5344072c7c38": "chair", "4dfddeed-17ba-4893-a7c3-9e2db2623bb5": "ceiling_lamp", "c2989bf8-2122-4204-9fa0-5cfe7a054777": "chair", "8bfd9a3a-4609-40bb-93bd-1b833e08d950": "coffee_table", "ce99aab4-dc1a-4e62-aadc-63b0ab6af869": "bottom_cabinet", "3b608f3a-6b8a-4f51-af1d-fd6db66cf4a3": "shelf", "51cf674e-7f84-4e50-8deb-11ec4a9ae4de": "sofa_chair", "f7e667ee-f042-4428-b29b-6a89d81a48d9": "bottom_cabinet", "4e7d021f-2d88-3c67-83b6-81592780bef6": "table", "7fb52d24-368d-4597-86df-902cf60fa10a": "table", "13490e21-9626-4f68-8783-39ade4e0b732": "chair", "085e4d1b-f84c-4a5f-afaa-1fb07261f9b7": "sofa", "addd5afb-8f7e-4675-a94b-3f35c4b4b6b1": "sofa_chair", "cd3609d2-da15-4417-a128-d16f80ad087d": "chair", "4cc66d8f-970d-488f-b09a-1485aa3b999a": "shelf", "db007a3a-3298-412f-8eff-eac2dac7270f": "bed", "c3a62426-8efa-499f-8c07-7fd5e1e299e3": "sofa", "eec6e9e0-052e-4686-9aa3-482df27ab167": "sofa", "808c5f39-733b-3eca-a3e6-8b19df8abfc1": "table", "4febf26e-dfbc-428b-8982-2aacfaefd317": "bottom_cabinet", "51a33bb5-097f-4c72-8fcd-df33a019034f": "sofa_chair", "792c5fc4-ed5c-439b-a9c5-f116ab93ab09": "chair", "dd841437-d8be-420c-87c6-48ebec60dfb1": "sofa", "10821dd8-229a-480c-b6fd-68b4d7d20bc0": "bottom_cabinet", "cedd4ac8-2347-4dc0-b391-772248e58ede": "ceiling_lamp", "40c3ae30-f7fb-412a-bf7a-a20fd94ed601": "coffee_table", "98e118f7-edd2-47ec-9912-3a2954477cdb": "chair", "50fa8256-7f36-4e99-8599-e0130cb67480": "bottom_cabinet", "5b5cbb1a-9216-4e14-994e-9f3f374b074a": "sofa_chair", "d82775c6-d7d9-41d6-b844-83c2a481ea4b": "sofa", "49a279d9-c02c-4477-b7b3-abfbdbf25316": "coffee_table", "556cbad3-e56d-40c5-9a39-590beb82be7a": "coffee_table", "478b4688-875b-4dd9-872a-bcf208426ab7": "ceiling_lamp", "788ca091-7b59-46bb-93da-22d374547b65": "shelf", "66f70fdd-1f33-40e7-97b0-34828475e585": "sofa", "5afbe4c1-3cb0-460f-a7c1-14ca60bb2407": "coffee_table", "dcd12165-add5-4fac-997c-64d13ccdf2dc": "table", "0541491e-21a3-454c-8c78-acfafaffc6d5": "bottom_cabinet", "27afe8b6-b7a6-4b44-a916-788b9aa27ed1": "coffee_table", "688881f2-459e-4802-b1a0-f6a517b25edb": "bottom_cabinet", "67da2b33-aa93-4df6-921a-d26e42feb1d7": "bed", "a2e681fa-e610-4f99-ae95-415d06220c8b": "bed", "95275a31-a770-43f1-9abc-758655a1391c": "coffee_table", "7a20dc56-2f09-42fa-81f4-7356519d8ced": "coffee_table", "f07659e7-cb2e-4a07-9fbd-397b33b9360b": "chair", "3a5ede7d-a24f-4a13-b44e-83914fb4c796": "ceiling_lamp", "42936f41-3c98-48f4-80d7-f97fcc41d084": "bottom_cabinet", "7a9bb448-b103-4de3-8fb3-0683ce36d661": "coffee_table", "21bf59a1-ff5f-40a5-8700-df838dfb2cb9": "sofa", "2857ed67-fc07-44de-910d-82a5b0e6678a": "bottom_cabinet", "1c0e5450-b180-4a7c-9aed-fd2b16ca1763": "shelf", "7f179935-a6a3-4188-a4ec-e5d734002b07": "shelf", "742fc623-9841-304d-abde-52bc600a0311": "table", "155ab62e-4ea5-4539-a5bb-a0833c93bc82": "bottom_cabinet", "510147e5-323e-47a7-b745-be8054710766": "coffee_table", "26c2c0ce-084b-41a5-9686-577a452844bb": "bottom_cabinet", "6e527916-62b3-4934-b4ea-eba5d4c7242c": "sofa", "c4b1e776-0cf2-4db0-b303-5ff29d0be5fa": "shelf", "a9bd67e4-1b36-4a61-9e47-8ec18b57ecf7": "stool", "b6da73c3-f57b-49d9-926d-b4165ca4fd25": "sofa", "65850f85-f51c-4ee3-b2f5-64ba41d749fc": "chair", "bfb894c1-9458-4a21-8105-1102251c809b": "bottom_cabinet", "e319c3f4-fc83-4f7b-b9c4-5365c6193037": "coffee_table", "08ca9934-55a8-4d6e-ba0e-6d2c4fe64c67": "bed", "d1da9705-6ec5-4905-b211-b681c5091068": "sofa", "699d902a-f6d3-471f-a3ad-184ea7fe6666": "chair", "5ff46298-7b9b-4ef4-926b-f6a59490f796": "sofa", "7734a9f8-3617-4962-9e92-2314c9feebe5": "bottom_cabinet", "dcada3bb-39e5-4ad6-9dae-11fee68726cf": "bottom_cabinet", "9ae7ae8d-8b27-4cbc-b57b-3c0b3cffb9e5": "shelf", "6cce85c1-50b5-49fb-9b4b-c3a7aa3baa73": "bottom_cabinet", "b969f128-d6ab-4df4-93c3-ce842b5667ff": "coffee_table", "e31b30e4-8efc-4ecc-b3ec-19db19ffa98f": "sofa", "3d98430c-9006-4e79-984c-f2a131d99333": "sofa", "6af892f2-291e-4e45-8230-d1239c330e34": "table", "e12aebb3-8ebf-49db-a778-b5aaed6f8dd8": "shelf", "1d4497dc-d858-4ef9-a807-3fa7b10a23b7": "table", "2d727755-2c8d-44f1-8912-3bce1b2d8862": "bed", "20f9153c-a7ab-4d56-a8ab-b39daaa0ba7e": "sofa", "7145f234-af1b-4100-873a-1301b8faf77d": "sofa", "423d01cf-db98-46e6-84c4-ca317a6761f6": "sofa", "0b41bf1f-4ca8-4cee-be17-4b2b02be0503": "ceiling_lamp", "4808dc50-1f16-4a33-91e8-a93c1c9f2881": "ceiling_lamp", "8b8cdbde-57e3-432a-a46a-89a77f8e6294": "bottom_cabinet", "fb427e8b-ed62-4957-a8cf-3d1b0095fbaf": "coffee_table", "1237d52e-316d-4a34-8a91-75c88560fc83": "sofa", "eda3f823-4d9d-47ef-9a7a-554d1d286f1a": "sofa_chair", "591cab06-d6a9-4d83-b6dd-bf66ada3bd1d": "bottom_cabinet", "2564da60-f12c-47d1-9455-76ed3fc7628e": "bottom_cabinet", "4b916923-9e2b-4f6a-b3bf-28e5f421151c": "shelf", "0c90d1fa-20dc-4aa9-bad9-78550f373d62": "coffee_table", "4f1109e1-7b9f-4663-8357-e3b665f62821": "shelf", "7b10ec70-d032-4c75-a1bc-8fa6ea7f8ca3": "bed", "0a237bbe-d40d-4689-8747-d4fc2afa6da0": "sofa", "23a7cb80-0331-33d1-bb9c-557a74821587": "sofa", "d5be814e-7107-43c1-821d-9e32a01af878": "bottom_cabinet", "005bafee-92c1-41db-ac9b-dab97ef3756f": "sofa", "dc270f56-2ec4-48a3-a437-346647ed9799": "sofa", "81f43633-75e5-3daf-97c8-36519a17237f": "sofa", "36178363-d252-4b82-968d-a4bfcac1d9cc": "ceiling_lamp", "5d662608-e130-49bf-9ed1-e8ce759df64f": "chair", "00775a07-b5c9-4020-94c7-2cd698d668f6": "chair", "fad76641-9a2f-4d00-8e2d-832c48bbc173": "bed", "faccb889-ee52-4fa8-9b1a-856b0f273257": "coffee_table", "2c06c345-24a6-39a1-985b-92f65f107790": "stool", "05866acd-800e-4ec0-83b1-e0243a54bfe3": "table", "51495151-f01a-4e69-8d06-b62b3cc5ef00": "bed", "2940d1ec-9fd5-484e-ad2e-cf77746f42d9": "bottom_cabinet", "4067e2aa-b63f-45b2-b339-d8a8a0f2fc91": "sofa", "e8172cc1-fa04-49c8-aaf6-50874a0bc0f6": "bed", "089fa9ca-178d-48f8-b78a-34a907d4e7ff": "sofa", "fffd4028-7f01-46c7-96d2-36c3f51b5ba6": "bed", "d53ddf4e-fb97-4efd-a9ca-6f3ea0debd87": "sofa_chair", "e63a7a5d-9b44-4395-a320-fc04623ad374": "bottom_cabinet", "986a7091-335d-4ad8-9844-1252049970c6": "coffee_table", "9009bf15-6028-49e1-a037-cb1b2f20e7bd": "bottom_cabinet", "420d3333-253b-3794-be1f-fc8e257ef4dc": "stool", "c1987240-9020-4576-8050-bf4790baeb25": "sofa", "f3271cac-dcf6-4545-a92c-74d997310f74": "stool", "60d1e421-af4e-4c72-8207-818d3216dd98": "bed", "26ca941d-fb40-4f85-87a3-3a4094ead91c": "chair", "27efb948-15fb-4820-bb45-f0ac1098bdd3": "bottom_cabinet", "c1184cf7-bd66-4d6a-8755-05d9303d8eb5": "ceiling_lamp", "4ade3c3f-e0e2-4dfa-a5fe-b097e85cab20": "sofa_chair", "a660ccb3-645b-4f12-843c-55a221a88433": "shelf", "820c3394-9ee3-41b1-9a0d-dc893d447c78": "coffee_table", "05ee1cfc-6b3a-45b5-8e99-833cd6a4d2e1": "shelf", "6fffb1d4-2373-4eb4-86e5-33236fc05b2e": "coffee_table", "080c1050-98fd-422f-b525-25d9f8ec8b64": "shelf", "9806da70-b9e4-4a6d-93f8-e1b9198714bc": "table", "97dc9747-7cf6-4b10-a4fe-887e99d0fa0b": "sofa", "71bff38d-42e6-46f1-994f-6b6ed3c21fd6": "sofa", "34c3c0d1-4884-4b61-b9cb-d88d64fe02f9": "coffee_table", "6db6e68a-a5cb-494e-b68b-45e638e3d929": "shelf", "766d2c3b-8d0a-45e7-99c1-bda197986422": "bed", "5e9edd5e-2c35-409a-8865-51cc243a31f6": "shelf", "4c4778d7-a5af-4e90-a5b9-cb2ebd283a53": "shelf", "b6eed575-7905-41b5-bd6a-66c6a538f125": "coffee_table", "77e8423d-8b63-4c49-9b8e-b0f8c119cef0": "sofa", "63d8b411-9737-43f4-8dc1-8ebcb008b61a": "table", "4d571177-0b55-498c-9457-6bd8f600973a": "bottom_cabinet", "db6ac1ed-a70e-4c48-b573-1ab3e2ff626b": "ceiling_lamp", "16d4b23d-4170-467c-8e48-9d35c8d740b4": "stool", "9e50f69b-1a65-4862-82f9-9b9d8fda478a": "bottom_cabinet", "19df9f15-e923-3992-a5fc-c3465d41c978": "sofa", "2bbc46d5-bbf7-40a0-87ac-bbcdb96d890e": "bottom_cabinet", "e71bddb5-4bf7-40e8-83fe-e69bf4d69ac7": "bed", "1471b8e8-b619-469d-8fb4-4cf167f7f90a": "bed", "cee0c32c-cb35-419b-bc93-17315153a64c": "shelf", "cb2fad04-e0d2-4b01-a8c9-21c96ce9a715": "coffee_table", "3a412bbe-1de1-412e-bb31-d544c5e2eeb0": "coffee_table", "f1cb64aa-3841-4fd3-9e5d-7fa0fd691b53": "table", "06ccac96-3ca8-4bd0-aee2-64f1b495f485": "bed", "0bc23ca1-4d02-4b82-9982-89174544f170": "coffee_table", "c992fdb2-074c-4d31-bf93-e015f6b43c76": "coffee_table", "6401ad46-fff0-4270-af45-485a25fd140c": "chair", "691949c9-551d-4df3-9f12-f32772a893e9": "sofa_chair", "7c1e5c1b-7961-4fc0-96b7-f5d0a6c533af": "coffee_table", "f87a36da-776b-4265-86cb-984d3f6f8e8d": "ceiling_lamp", "765564c9-3ac3-413d-a83f-b77282e75273": "sofa_chair", "780bc20d-e0d5-4207-bc1d-0c025677c5aa": "bed", "69fea616-7551-4924-88ef-80d103ea26ea": "bottom_cabinet", "9603344b-99b8-43db-abf0-73c7eaf0ea5f": "bottom_cabinet", "0f3ad2d0-9f46-4fa4-999b-bcdced69f8e9": "coffee_table", "633e5cca-018a-4867-9531-c8c677f4f4d9": "sofa_chair", "20fb1c4b-96da-4f80-bfa7-4c37339a7b9d": "bottom_cabinet", "4ec6e318-cd8c-49e0-b102-0c5c5cb8b42b": "sofa", "e21c9912-e107-407c-b9ed-7f723e887c92": "coffee_table", "3866379b-9add-4643-b39f-f09284254c85": "sofa", "0aa20dad-4049-4ebb-b7a5-e00eb76ff5e9": "sofa", "a2b4213e-fa5e-4e7b-bf5f-e0767a6bef2c": "sofa", "65bb64d0-3648-4471-a63f-c8bfe7e6662d": "sofa_chair", "78ef86c1-ab26-4e9d-96d3-c9669c4065e4": "coffee_table", "2623d1b0-2250-4199-8d6d-493e34bc5fa3": "bed", "697a1396-5e87-4761-b8b0-844b64c87a4b": "coffee_table", "4236a3e8-a20f-4d9f-99b1-e1141c28c145": "ceiling_lamp", "4b505ab9-175f-4a1e-9832-b39a05dc397d": "coffee_table", "033280d4-d766-4edf-b499-6c1c1c402c50": "bottom_cabinet", "ec2537ec-6180-4fb9-b3bc-2b34202e4ff0": "shelf", "9b686bf7-b0b9-4d4e-a160-fee03ebc0df1": "ceiling_lamp", "2439e21f-2c7d-4fea-ad39-d21539945f13": "sofa_chair", "236f857c-b77d-4f7a-9af8-c19fdd42b818": "ceiling_lamp", "0ec74252-7b40-4da1-873b-ce6d11db99de": "sofa_chair", "77ec0491-2716-412f-8bc8-42c617b533f2": "bed", "628993d4-fa68-454a-b72b-57ac15d7b8a0": "sofa", "be5b3d10-d630-4c86-ae25-6a79d5fc9c09": "sofa_chair", "34b0864f-9f1e-40a6-a1fb-379d4380c3eb": "sofa", "32025285-a0ca-40b6-9924-dd4e003013f6": "coffee_table", "6314e07e-2f5e-4b0b-9eee-8892fd4f5e50": "coffee_table", "581fa64e-ab79-428e-9876-0e0d6c1e72fc": "ceiling_lamp", "5e52a3db-d8d5-41a2-b4af-bfe85d8b6707": "coffee_table", "5fa17694-bb76-4822-a483-5f11f5aa2ee5": "coffee_table", "5b63924b-8323-4687-8f75-93f768e72628": "sofa_chair", "80133614-d043-401a-be51-86fadae7cb0a": "bottom_cabinet", "8f8c83e2-5d2a-4b7a-9543-a9fa11d0e525": "stool", "03a586ae-5555-4244-b756-3fda0d09d91a": "shelf", "50130809-38e4-4ace-92c1-bcc36d83ff26": "chair", "66f31cc3-4f55-4a48-b149-248ca8154fa5": "table", "ab93058b-a3a0-4485-a536-52c5bbaeaf1a": "chair", "220b5f5e-a3b6-439f-a7e7-e8f58132870a": "bed", "2e25c455-7a42-48f4-8dd9-4ea6a19c6ec4": "chair", "4e32c0c1-7ba6-40d3-9d8b-be5c471b9ac1": "sofa_chair", "f6c5cf11-b40d-4a27-9c78-72590409b626": "ceiling_lamp", "a283755d-c3e6-4c69-ac07-9fe7ff6d3f6f": "shelf", "2c43c760-2340-4151-becf-27ca4fb194f4": "coffee_table", "2ac67c87-c768-470d-91d6-cc018259f6fc": "shelf", "ffdfd7be-01aa-4445-9ece-546494e97983": "bottom_cabinet", "44012364-4d47-44c1-a8cb-9e848fe6def7": "chair", "80ce3fc7-bb8e-414e-b39c-a638b76ba9de": "bottom_cabinet", "5a1f6c5e-1d58-45e3-b9ff-26eba3d80e86": "coffee_table", "6ce0a155-6e62-4843-9ce1-91a18bea843e": "ceiling_lamp", "fc8607ad-b4b7-40ae-b33d-18f8a0896c50": "coffee_table", "5fee4e63-1120-44d3-a690-c256b2b17edf": "coffee_table", "5af3529d-3170-441c-a361-159fc821f962": "shelf", "3a78e14c-171d-451f-b4ad-41936568aba7": "coffee_table", "14a727e9-2ed7-4a09-b2cf-1826fea59cb2": "coffee_table", "17c5fa6f-277a-4a2b-9160-7bae21de15bf": "shelf", "f1bdbdd8-f00b-4ad8-8bd0-74f5c283776e": "stool", "286aa3ce-1c17-4e86-9feb-08d7828b08ac": "bottom_cabinet", "70f67b2d-4baa-43c8-82cf-1165a00973c7": "sofa", "0f915db9-fdf2-4315-ac8d-a1f26f88799f": "ceiling_lamp", "0a1d56a4-2fce-4c35-bba1-bf6127457b4c": "bottom_cabinet", "13aa7f1d-5655-490e-8f3d-4f58a395efae": "ceiling_lamp", "c11addea-f150-4f7c-9a98-be3815842f2c": "coffee_table", "1d98af0b-9e19-4ec7-b006-5d1f53b6b44d": "bottom_cabinet", "74c0a336-7cd7-4d7f-b89d-015ae3914880": "sofa_chair", "e0d0379b-0835-482f-836a-5803975ade24": "bottom_cabinet", "7e259fdb-ecdc-4498-bdd3-b95c1218fb89": "ceiling_lamp", "0f995539-333b-4b7a-a327-fca47930b3e2": "chair", "a520a8c8-1df1-459f-9927-eb47a454dd89": "sofa_chair", "0fec1c2d-e016-4d9d-a406-ed34a14ccdc2": "bottom_cabinet", "4cca747a-135a-4c62-863c-60104538be9b": "sofa_chair", "06ac81e0-b5f5-4269-9540-885408b03d4a": "sofa_chair", "06fb812d-213f-4928-bd37-8d690b11c2fa": "bed", "278bc115-a727-4ff8-abfb-647e45bdab46": "bottom_cabinet", "2e1cb7d1-97d0-4e29-91ed-d8ac86655c68": "bed", "55e07144-49b1-43c8-b3b4-21a60c362f2e": "shelf", "55a8be79-e081-41ed-a9b8-2254f8e69ace": "bottom_cabinet", "7fe8f8c0-c922-4329-a886-ac5861ef0942": "sofa", "1b38e80a-c066-4905-bed8-4888d2668ed1": "coffee_table", "0585a449-af43-4e62-a137-037b7c70997f": "sofa", "2a89f148-8de5-4100-a6f4-e0019bd6e57b": "ceiling_lamp", "096802aa-59cf-36bd-adcb-9c730e3bdb9c": "sofa", "240da6e5-af4c-420f-adbe-cba77ab1408d": "coffee_table", "591eef6d-e524-4245-bf63-62f9c0763975": "sofa", "0ce6a44d-0f0d-439e-913a-94ede34471ca": "table", "2ac6c7d0-5302-4435-8a4f-2f2cbe8b5886": "stool", "ca401fa0-7da7-4985-9231-60d43a9510f5": "shelf", "0f8fbd4d-6aa6-4f53-92e1-7fc5bb28eaf2": "sofa", "863747ea-4502-49d3-bd2d-98e2551b586a": "coffee_table", "4cd8beee-d10d-458b-9c8c-a2955108fc6d": "bottom_cabinet", "6f150d3f-ca23-4811-9d23-49eb7c67106d": "coffee_table", "b2b66d78-5e60-4f75-b608-754b63710f67": "stool", "adc6550b-67ea-49f3-80a9-e7f93fa45c18": "chair", "a4876bad-812f-492c-9c0e-35293918aa31": "table", "fe662b9d-7948-4c39-ac66-ff477cac0f2b": "coffee_table", "7a2a6bd5-9ed1-48ba-8ec0-acc33d1e9bb5": "bed", "60bd4423-bbe8-4595-9f57-15783f43cfde": "bed", "12ebe333-23d5-4c8b-b704-d22f82491577": "bed", "68cdef2f-2b73-4a17-af99-2e8ca53e65a2": "table", "dcec4382-3c0e-421a-ab8c-5f353f343213": "bottom_cabinet", "354ce96d-d417-4228-9488-ed38d22d3167": "ceiling_lamp", "466fd05c-415d-4ff8-8539-9062d0b88ae9": "bed", "0bb543c5-8b17-3fd2-a1e7-76b65a2ae317": "chair", "d80a82cc-19ac-46a7-95b9-9a51b07018a6": "bottom_cabinet", "1c4de6f8-1017-3dd0-b98e-fbefff1778ff": "chair", "9fab9660-b270-48cd-92d3-609dde86b896": "ceiling_lamp", "fd501ee5-68f1-4f73-a3c5-675bcc9991f1": "shelf", "ff576b2e-d6c6-4d28-b503-87108a652398": "sofa_chair", "9f2e7ad8-d19f-42a7-bf3d-5d8e2033e1f4": "ceiling_lamp", "51145439-b400-412a-b8e0-d67e653a4c59": "sofa", "9c86d068-7a48-4bde-a551-ae176c26f263": "bottom_cabinet", "5865dd7f-5634-4df3-acd8-6eb5f62a6381": "sofa", "f066bff4-b33c-4af9-ae6b-0f854e90a36b": "shelf", "117a0036-5723-461d-8fff-fda45b0a4a23": "bottom_cabinet", "7190b61b-985f-455b-91d9-cfba4fd7c2f3": "stool", "ea5e16e9-4e2a-4110-9f71-4dc8334e6d4e": "ceiling_lamp", "657d03a0-52ae-4fb0-8a59-b3633a03c2ad": "bottom_cabinet", "041a916a-a746-4f7d-a07a-ac58c5aaed19": "coffee_table", "6e70ab90-8424-4080-988e-be07af2f458f": "coffee_table", "6e45e554-7bc1-304d-a333-26ea6271e6b0": "shelf", "ac406073-7b17-4547-9faa-6af8f2068bad": "sofa_chair", "130dfcdc-c79a-4594-8c94-12faf8f537c2": "sofa", "2b0148ac-6174-4e59-a40f-935c0c98c2bf": "bed", "464e7480-0261-3b67-aeb2-e45bc695d601": "chair", "9cee1f25-d93a-4bc8-9348-591c79520972": "coffee_table", "5aa1b510-1f7f-4cc8-a018-b92c395afec1": "bottom_cabinet", "b4f6e770-6862-4e40-895b-5db208765c80": "shelf", "10a99aac-9498-4086-bae7-1148248a9345": "chair", "37c1c3e6-600a-45bb-9ae6-9c8a8845745d": "stool", "2810b2c4-8026-4eba-92ff-a9a29876f4ec": "shelf", "45d865a4-455c-40be-9946-04d83c422e4c": "chair", "eb369a6a-230d-4231-8cee-0f54201ae975": "chair", "0dcad060-ffe6-4eae-893f-bd6932263950": "shelf", "79b95088-5c33-493c-8bdf-63d5666da947": "bottom_cabinet", "b91b536c-c861-4412-a452-9c6e18f0a0ea": "stool", "325efbab-7eb5-4f8e-bdf8-b16b7a0b2aeb": "sofa_chair", "eb4c39b1-ee24-40a5-8bd7-9e8d7faa98ee": "ceiling_lamp", "b37d957b-ec73-42a9-97ee-acf99ba55acd": "bottom_cabinet", "5b7b119c-68ee-4e0c-957e-0d92a4125f6d": "sofa", "abe3740a-c178-478b-936f-0f59b24e77b8": "stool", "318b79f2-7859-4850-8b3e-109ad3225dc4": "sofa_chair", "5c6d5e5c-b26a-42b7-8050-2041f105c7b7": "sofa", "7da9fc1a-a7b3-4208-8b4a-8cbba6e371a8": "sofa_chair", "a4f6e4ad-5bee-4817-babd-c3a1418478f4": "ceiling_lamp", "7b929eeb-1969-4942-8287-d92eef727467": "coffee_table", "10a98c06-5475-4882-920d-740de5ad1167": "sofa", "3f3730f5-9ebd-409b-9802-310dcbe14ef9": "stool", "2ffb99c9-a11e-46be-900c-9f20f24602ca": "coffee_table", "71c4791c-25f1-4fa7-ba4c-0287c9dd81ad": "bed", "8afe5eda-388d-4853-abde-4d86d0ec3fa3": "bed", "c2e796eb-2640-463f-9873-f09822a372a9": "bottom_cabinet", "42ea9018-cefd-485d-a09d-90898cba02e6": "bed", "5e10381b-a2de-4cb4-86cc-b3033a12de45": "sofa", "fbbb2bdc-5e66-4173-8cd3-3702e0037bb7": "table", "288493dd-0154-40ee-b8ec-43c42bb7bcba": "bottom_cabinet", "e45c34fe-8856-4cf0-9452-c3517cfc9ac2": "bottom_cabinet", "00661c5b-bb1e-49ca-a5c2-480dbe12a344": "bottom_cabinet", "698c5f06-44f4-41bb-9000-52b3d9cc7d4a": "chair", "9270706c-a301-46e9-b3d0-59b14ea3a085": "sofa", "9d40d9be-42d0-4dbb-9fed-0a57143f4e34": "chair", "59fce13a-3c19-4cc2-82ee-d53b3b9182d3": "shelf", "515ff780-6ec0-440a-968e-d2c4a73583c4": "coffee_table", "e0aadec1-12e3-484b-8f81-d3cefef4e2c2": "chair", "429a6413-08a6-4723-8a52-55c3e40c0cc2": "coffee_table", "c5ddf01d-ec26-47fd-b7cd-040a398cc12e": "chair", "18a160ad-e189-431b-9191-365f62084a5b": "ceiling_lamp", "4f5f2706-c5fb-4591-8926-8cf7c5ab5ec6": "sofa", "13536180-222e-4f51-bc29-9e2aae52a6c1": "sofa_chair", "757958e8-0ae3-4fdb-8d86-cae4961534b0": "coffee_table", "fb669034-ca92-4c3d-823d-a38900b28d9e": "coffee_table", "1fc096d4-f7de-4d56-8c98-ebd3863838fc": "coffee_table", "5b3455ac-d245-4f1c-89f1-8f8f6502e642": "sofa", "d6141075-cfb2-4347-9d9a-7e657ede7276": "ceiling_lamp", "f6966990-3df5-4daf-b4f0-569393d8dea0": "shelf", "6b5c22de-2646-4909-8a57-f7ce38ac17bc": "chair", "420cd15a-4ae4-4bc1-8fa1-5b0bb5bd3e04": "sofa", "df95ad28-aa55-4529-a62d-66d04e654fd9": "table", "a6e1d36a-03e8-4613-9fd5-26ff77f10bb1": "chair", "85088488-cf38-3193-ad59-0363a33681c3": "sofa_chair", "7e7f1f8e-812f-402b-b5fc-406719e9ec43": "ceiling_lamp", "fb6d84cf-0b11-4ae8-9727-88827cad30e0": "bottom_cabinet", "802c8d05-4c80-4cce-88e9-b225bd3243de": "sofa", "18b82049-d1d2-4285-ac7c-18f452592b0f": "shelf", "7aecd672-7b37-41ed-9674-43e0a4cb0845": "bed", "57c14c3b-71ba-440f-a2f1-a46aa6821c4b": "bottom_cabinet", "5f76aa30-b920-4c2d-a9fd-d12b8faadb57": "chair", "2f9faa0f-1e3e-4bdb-a37f-43e669615d8b": "chair", "f2933a38-0651-46c9-af0c-726ae5a88e6f": "ceiling_lamp", "ebf99b54-5dc6-423e-a9a9-f957c9124cc0": "sofa", "76305e86-69b8-4986-a2f7-65b1e8c43ca0": "chair", "08aacb04-7ef4-4881-8d0c-c2b05092abed": "sofa_chair", "a7b8bb01-f966-42da-adcb-086e198fbe87": "chair", "b5211b91-9b43-4c02-bed9-16b2d9966ad7": "bed", "e5a42f97-dee7-4289-9ad4-96f463a8b4c2": "bed", "edf114fc-9811-45ff-acd1-8a7fa7b6b9cb": "ceiling_lamp", "6eac64cf-aa74-4d5c-b0ab-bbfca75e06c6": "bottom_cabinet", "7b473a04-8597-4fd0-86a6-5dd824518011": "bottom_cabinet", "1163a85a-fa15-45f8-bd67-7037f76c7b97": "shelf", "8c6f3610-97de-4ece-8c78-809f3574746f": "bottom_cabinet", "77fc7fe0-c95f-4dd0-ba4f-4de602ead19f": "sofa", "19efa364-5660-4da9-91b2-4914cfbeed6e": "ceiling_lamp", "1bc49dd2-fbac-3c84-b674-18e33520100e": "sofa", "43e74fb5-7546-462c-a484-730c3581fe79": "sofa", "eaa895b6-dde2-4904-97bd-8ecde12028a8": "coffee_table", "97e79e2d-298e-42a9-a742-bf7159fb068d": "ceiling_lamp", "54201f14-8563-4ddd-b7e6-6247c53ec731": "sofa", "56f8d695-62e8-4b02-a091-a326b9ff7fef": "coffee_table", "15992c1d-4e77-43c2-8064-73a2e9cfb394": "sofa_chair", "1c2a2b53-fed2-49f7-b0ae-f40028fd1c44": "bed", "8da6d336-60e5-498f-9aab-14c1a1a09c49": "sofa_chair", "a653beec-e5d5-4390-8463-bf3940006bd3": "chair", "b6418fbb-77ac-4cac-ac09-13af9abbda78": "sofa_chair", "4f4f8527-9b6f-498b-859e-0e2574ec536d": "bottom_cabinet", "0a05ba24-fdc6-4c42-a8b3-6e26422c9f67": "sofa", "f98d8bef-2e17-4931-98f7-a03ae0ccf442": "coffee_table", "5ac05fe8-b550-4786-8e8c-c5a43c30d112": "sofa", "1f103dc9-48e6-4eb2-8b37-0124b68e5401": "sofa", "8c45fdf5-fc7c-48ed-86fc-6ecfdc098485": "sofa", "0858d6e6-004a-4ab9-bb73-6a54b6f228e3": "bottom_cabinet", "4d5a0347-ad0b-4296-990d-06b4fa622ba2": "sofa_chair", "e9c758c0-a9f2-4f0a-861d-287a6f34fdbd": "chair", "02bb6c69-603c-4d60-ab2d-1c4f129acca2": "coffee_table", "5279c5f2-dd43-48e8-a4d2-b8d90770c961": "bed", "80c66afe-a38e-43cc-b423-5d86f3fc4b41": "bottom_cabinet", "5b3e36a4-4283-47f1-92ee-c9226cf02621": "sofa", "d9895a36-92cd-40f7-9743-c156748d2d2a": "ceiling_lamp", "9b0da6c3-f776-4ff4-b3b5-de22c3c8176b": "stool", "32000c95-20b9-4e41-8747-4f404a806056": "shelf", "58ce0893-d787-4f80-807b-e0f96baca1ab": "bottom_cabinet", "5892dc93-a5af-433b-8577-593dbc1daf43": "sofa", "0f01a988-ab48-456d-b60b-ea35beb99dce": "bottom_cabinet", "9e665ed7-28b0-4809-8898-35d291d0b798": "bottom_cabinet", "2c5e4742-bfa2-46f7-9387-9c8985d68104": "shelf", "6d9a20ba-6bca-4875-8581-5ddde17c215f": "sofa", "7a2d6a8d-6929-4d68-a070-75bd3f614026": "stool", "55ecdc0c-0965-4c1e-9047-195a695cb4bf": "sofa", "1a661e4c-3c65-41f4-b46a-b275f12456b9": "sofa", "09f18111-d73e-4e87-8b9b-c8e585701ff7": "bottom_cabinet", "c900392e-ad30-4389-ac10-4a96d67948a1": "coffee_table", "a6380746-8bb5-4686-8cbf-9058eda4c022": "shelf", "6dd3a9bf-612b-44e6-85bf-cfc02a55c377": "sofa", "0bdfc3b8-825e-4edf-8373-1d95f53d377d": "sofa", "780f9f9f-d48b-45c3-9171-c5e133fe81f1": "coffee_table", "03e631cc-ee14-4be0-9c53-1ad7ca7fc661": "sofa", "172f65bb-736d-47e5-8b8f-6ded1d701a44": "shelf", "6d8b1aae-c4f8-3b6e-93e5-d5df230ab180": "table", "461b31ac-0d06-3ee4-b371-9d31a3ab0b39": "chair", "22cc59fc-087d-4f2d-99c3-21bc21346ec3": "sofa", "98895ddd-acf4-43bf-9ad6-2c9bf98866cf": "bed", "4b3361d8-5759-4433-9784-04af559dc33c": "table", "38ab0c3e-aea1-4ad9-9bcd-be2b37263b39": "coffee_table", "1849653d-6daa-406c-a09f-f2646f2194a6": "ceiling_lamp", "a10991d3-264b-4b77-81d0-42b3059bf639": "shelf", "147fb31a-fcf2-4b58-8c0a-6ff888abff04": "chair", "6c265549-4946-41d2-96b0-0e0bd3d2089f": "chair", "4df2df89-68ab-48d3-a042-e730ba05aa55": "sofa", "6874aee6-1300-491f-bd49-0f4ff2340425": "sofa", "4fd9300c-e1de-495a-9bf3-0b736abd8499": "chair", "974cff78-8715-49a2-a726-f4ace9abdfa3": "coffee_table", "895d8a11-aa16-45b9-8228-696c6ee54b32": "sofa", "cdf5a1c6-65d0-4d18-b1d3-0ad01a2d0365": "sofa", "9ff76d8d-af20-493d-a17c-a4aaaa94114a": "table", "5dc90d8b-ded9-406b-a1a5-33eb6064a3de": "sofa", "cfe5cb38-74d7-4077-8f7e-a384b7f4505a": "ceiling_lamp", "01ddee89-26d2-48e5-a413-959b26472bcf": "shelf", "842b6114-9b09-4cdd-bbc6-dd99cdc36a66": "bed", "7bf4cdb6-776a-4762-8eda-47f0e8ca530a": "bottom_cabinet", "81600723-1163-48e9-a848-28aaf43adc9d": "chair", "24ed8c8d-11e0-48ba-afe6-d0619025772c": "table", "7b2a8853-5434-4ede-ba20-aa3f8375497d": "bed", "70b242c0-af2e-4303-ac07-c70c0a7ba7ea": "chair", "2bc4fa22-52e1-4ff9-b1fd-cfb74c5925d6": "chair", "055b3004-35c6-46eb-98d5-fc442d86d504": "coffee_table", "4dce6ef6-b2dc-44fd-b930-e0fff8dbfe8f": "sofa", "7bb1794d-3a37-4455-a801-abe31de2ce8c": "bottom_cabinet", "40837289-6d12-427a-a450-18b2f9af3784": "ceiling_lamp", "66f2d4ab-20a3-47df-addc-480a83bf5289": "coffee_table", "d72250f6-0422-4e0c-9a75-96d2b2b481e8": "bottom_cabinet", "e53b1bce-5055-45fe-b611-dd195b9d2269": "chair", "732c16d6-712a-4ecc-8354-ec72c19334f1": "bottom_cabinet", "6de64919-5417-4897-b181-6de6eda0f98a": "coffee_table", "020238c3-1401-433f-91dc-4bd1936a4cc4": "coffee_table", "0b233069-9e14-48d1-9c13-1c80311b8e24": "bottom_cabinet", "de1f0505-4d1f-45f1-81d1-69b2bd3d8467": "sofa", "2c009f4a-2c5f-4b3d-8cb2-389a3000bfa4": "chair", "caece73c-46ec-4277-8735-b6f1626747e7": "shelf", "838c3a56-c2b0-42dc-a4ec-6b88e9cc24d5": "sofa", "2d5ffffd-9294-4dfa-9200-68f65d449a7b": "sofa", "e009febd-9660-4f86-91a5-74b27ae78382": "table", "3727f54c-3936-4cfe-ba18-13995e0aec5c": "bed", "54cd9418-b83d-417c-bfc0-5595cd6fb924": "coffee_table", "44e44923-2a1a-41ac-ace1-e8d67966e2e0": "bottom_cabinet", "13090815-9f7a-4150-a7a7-4108454f5251": "sofa", "937e614a-58a2-42fa-aace-802ca23d7b67": "table", "262bcf58-f0c2-4a7a-bd98-aafac3be14a8": "sofa", "1a2d4f9e-9c8e-4efe-a7b9-8f8d8bdffb64": "sofa", "cdd5c579-ca66-47af-980f-2b3b302e25fd": "ceiling_lamp", "2b04d38b-74e3-447b-b3d4-d955e5fc0c59": "coffee_table", "7a6cf709-1d8b-4f76-9df5-f420cc9eb713": "shelf", "7694f6ff-467e-4bf0-92b2-161cfdb13118": "chair", "447072e6-0d0a-3366-acce-9e3c604499f5": "sofa_chair", "42b587ce-612c-481f-8234-ccf35b6ab1bf": "table", "22d5e24d-7f06-4383-ab8f-25f9ee8d26d6": "coffee_table", "c94c58ed-23fe-43a6-a80e-92186f15ede0": "chair", "38575091-b358-4201-b610-a91f60014398": "shelf", "5f5746fc-1a91-416c-a7e5-5cd1c125fa46": "shelf", "736eb459-c78a-3cf2-a067-cd464ba4dd45": "stool", "d2eb176f-93bb-4409-a12d-d5657b26f9da": "sofa_chair", "75c62a2c-4f6e-46a8-b11f-5d718ce86132": "stool", "d8794280-c6ed-4004-b33c-53cf8d93140b": "coffee_table", "177002fd-1796-432a-9324-18d83c1e5d41": "table", "b270023c-c898-43c1-b58d-967e1c5f2e70": "bottom_cabinet", "4bf7f34e-9f1a-4448-9228-fd523ddcdbef": "ceiling_lamp", "9a88b82f-bc7c-4282-ae71-c91d58c07708": "shelf", "b8e5dcb5-a141-4f35-a41f-034a702bf56c": "bottom_cabinet", "d860c249-91c7-4612-a207-e9713905c063": "coffee_table", "1c1c88dd-39bf-4a6b-9b46-e2699b3a98eb": "bottom_cabinet", "6bf1f088-3ef4-479d-8e1b-9b58d0eb8b0c": "coffee_table", "27f4b8c5-44d2-455e-99ef-ea7ea31f7d93": "sofa", "cd8080b9-0e90-43bc-9c54-e4392acc80ee": "sofa", "5f0baa1f-c6d6-46ad-98ec-18a50abb2572": "bed", "368d46ff-ea2b-45e2-a119-f0fd6edd5baf": "coffee_table", "006f9cee-42d9-49ae-bd2c-b790f96a404a": "sofa", "274bd1e2-020a-4f61-9d98-fe792f764ab8": "sofa", "45d36d0a-d5f4-4d0d-b577-fd52821e67e8": "sofa_chair", "a32b0fc2-b052-451f-a741-7f3af815f1d6": "sofa", "5ee08b67-382f-48a3-bcc4-54140a17de47": "shelf", "5b1ecc1e-41db-4212-92d0-acc52af7392c": "table", "22bc64cb-8240-4092-a2c4-5953181517a2": "sofa", "6ad4145e-3017-4519-8089-a5b0f6605de5": "sofa", "c644c60e-586d-4ba7-88b8-29df766860f6": "sofa", "e75846b1-e2ca-4763-8559-28a651debf84": "stool", "4fefb13e-3e17-40bc-93a0-1d61b4645844": "bottom_cabinet", "18c7d01a-28b0-44e8-829d-272efb815b9a": "bottom_cabinet", "84ed9b28-95fe-4e00-b4b3-e4f16ad6def9": "bed", "94813526-a5f9-48b1-b6c8-f03a45f6e84e": "ceiling_lamp", "e1153871-277c-4c00-8201-e9d12271670e": "stool", "75373602-61ce-45df-8a9f-de721e3e47de": "sofa_chair", "4f6df54e-b8f4-426e-8533-f6b4a88b7aa7": "coffee_table", "58fabe3e-ceb0-4886-a702-45a948d0af2e": "ceiling_lamp", "48a657af-018e-4b42-8555-0d70bb947aba": "coffee_table", "2b7b13d1-acee-3331-8263-7244d9d47902": "sofa", "453a46b9-48f5-41ff-9b6c-464abbc84886": "bed", "07d28f5b-d9e3-43c7-a782-d6a7f8ce4221": "sofa", "087ab7ae-de84-47fd-b420-3dfa3ddd9bc4": "sofa", "56393cfc-2737-3b41-9152-8a0397e78a68": "shelf", "6ce85b7a-5281-3957-b287-88b610e7791c": "bottom_cabinet", "54e13710-db1c-460d-a52e-bf2bb22d19c2": "sofa", "4fc39672-368c-4411-afc3-01da2544827e": "bottom_cabinet", "a97f9900-b489-498b-8973-cb1a69690d35": "ceiling_lamp", "9090ae7e-815a-412c-8610-0233ae8b4db5": "table", "f50dada9-bd80-4461-a2b9-4cc55cd5d0b6": "ceiling_lamp", "d599e0f0-0b03-401e-838d-6d7a67228a35": "sofa", "e6e161a1-1219-4c79-886d-4f6b7ea28c39": "sofa", "7191996d-fa91-41f5-876b-4c3075fddd3f": "stool", "4fbaa69a-f362-4ebf-b8c5-8ad49b309fec": "chair", "81c40313-4ecf-47e1-8e5d-0fb7155721fc": "bottom_cabinet", "03d5f978-339f-43a2-9cf4-890f8d8f8530": "bed", "6a9e7882-45f4-4940-b55f-47cca4635340": "coffee_table", "4847f8da-749d-4408-a3d8-f6cb7e124fec": "ceiling_lamp", "630555c7-4b0e-3718-993b-24796d0fc0cd": "table", "771e1e7a-b1e6-4e9d-a17e-a4bfb9b81e4e": "ceiling_lamp", "733832f7-e5d8-4580-b8eb-d20c6ad02217": "bottom_cabinet", "6e005734-0392-4bff-8756-6584ee3723ca": "ceiling_lamp", "40654b1e-a20b-4210-beb0-eceedac7644c": "coffee_table", "3f341df8-c46e-4d07-8f3c-d3bb2daa6410": "bed", "13802fb0-a0e6-495f-a0e8-0280a83902c1": "sofa_chair", "258cace4-4d87-4cac-a4f6-1e47e3708f73": "sofa", "447de5e7-d1f0-407c-b740-53371c59e590": "bottom_cabinet", "2c0792d2-d775-4b6b-b941-731fb4c295db": "bottom_cabinet", "0d8ad8d3-d1d5-45b1-a7fc-71c3bc5eaaf1": "sofa", "34c75d65-9192-4a9d-933f-37d8069fba11": "shelf", "5a798fbf-b342-41cd-b88d-a073cd52f3d8": "bottom_cabinet", "71d1a9f8-ee3a-4a5f-89d8-d08c12a75f78": "sofa", "50033605-c925-4572-a44d-db05a8b08f85": "chair", "0154b34b-cbbc-4ed4-8eec-04468a0f7e05": "bottom_cabinet", "33452cb3-0c05-43c9-a34d-fe4bfc3979f4": "shelf", "0902b5ae-6c89-4ad5-bff9-637f35c2fd85": "table", "7323940a-859f-42f8-9747-f70107614c63": "sofa_chair", "ed3f4f51-8748-4296-8f61-ef733510b31b": "ceiling_lamp", "0034935b-20a0-45e6-b2a5-9bff89a94198": "sofa", "08f24535-b7a8-48c7-9790-9323adbdbdf8": "bottom_cabinet", "11211c63-ff61-4ccb-afe1-36c8b41eab13": "sofa_chair", "1189d1b7-81f3-469c-8e1d-fe1db897ed04": "table", "734359ee-98d2-4f0d-804e-5483a2099667": "sofa", "55b617c1-72e9-43c6-8781-2f2589be6de3": "bed", "68501be9-0dcb-44b6-988b-ac1677cb2a35": "table", "275d9252-24dd-3a14-9df0-eed49aaefb59": "sofa", "5eb24b39-0923-45dd-b754-d656f3e4d1ca": "bottom_cabinet", "8c94a5c4-b94c-42f9-a212-ef4303b2313a": "bottom_cabinet", "4dbdbee8-8445-440e-858f-90a0a045d212": "coffee_table", "743d8e1d-69b5-4b6a-9fd6-03a1352f5e51": "bed", "7f78a965-20cb-4bf8-9993-a94083ed21ad": "bed", "9286eb05-1487-40a4-9187-6f9f1256450e": "sofa", "4c0f8629-a4e6-4a9e-b8d6-7012f3ad4c69": "sofa", "3ca48e55-e0f5-4630-abd3-4c9aad11194b": "ceiling_lamp", "dd252f15-42af-427b-8acf-04e3e58442ef": "coffee_table", "abf4d68b-4155-43b7-871d-60d43d918c80": "coffee_table", "bbe291a9-0a24-497f-b4e2-7b543b916d72": "chair", "4d0d25d1-8d56-4ab1-8d05-02aad0a6d985": "table", "29400afc-3763-46a2-ab59-b6153ce88961": "bottom_cabinet", "4f223b22-c4a0-4ae8-8c74-c2679ea4eb6a": "sofa", "3c3a0879-ed80-4d2a-8d4a-1f6ddc81df1c": "sofa", "6d9b2c0d-0aab-4a55-9ca5-24b8f6d87eda": "sofa", "48b5ee7a-e3a5-4701-b27b-e2850f43d558": "sofa", "ea9f8fc0-4564-40d4-b994-e192a9280bad": "ceiling_lamp", "1f1d040c-a1d7-41d2-ae34-0b236d374997": "coffee_table", "596a3416-dc20-4927-8d29-b4c4fee8ca74": "bottom_cabinet", "1032767b-b1ee-46e7-b0c2-813b4f9ce2d4": "sofa", "7246fc9d-1c74-4f70-b4dd-feb12bd62c6c": "sofa", "54aac193-b73b-4c2d-aaa7-ba78c974318f": "bottom_cabinet", "646cc2d8-cf72-4d53-ac0c-ca11f20af175": "bottom_cabinet", "447bbfc6-8987-48c2-8c0f-19e222f14704": "chair", "a9c33714-e2b7-4450-82d3-058505058706": "coffee_table", "db17de9f-ed6b-4774-aad6-c34f69a4c1a6": "chair", "4b064dbd-3cb5-3f5a-a32d-15e0fb5adc4f": "chair", "8b3c235a-1844-4941-9bea-dd9e8cf72f1f": "sofa_chair", "1a7259e3-969e-4eda-b2ea-1312c55965f4": "coffee_table", "6af44d96-2d68-4ac7-9724-0b838523cfa3": "chair", "00a91a81-fc73-4625-8298-06ecd55b6aaa": "chair", "9005bfd5-ff7b-43da-9530-c2d3568d2875": "sofa_chair", "0090501f-8484-44b8-9f53-9f6ecbbe73a4": "sofa_chair", "0c7d295e-f2a1-488f-ba3c-2e7350f46b5e": "table", "e6cbc211-fd84-42da-992a-e856042d1445": "shelf", "3f699705-981b-4915-b217-91ab7b31eeac": "stool", "c671f37a-6907-43f0-a2ab-4f5da0686b3b": "ceiling_lamp", "df5706b1-53b9-43af-ba30-76c6401fd327": "ceiling_lamp", "620b0c30-77f4-3362-8a72-c02be814ba4f": "table", "5609970c-6ee7-39a6-9f76-95c4d7a28650": "chair", "a2b5bc66-1a5b-4631-be87-dc504e6619e7": "ceiling_lamp", "6a05bcba-8816-3cb1-a37c-5f7756389c58": "sofa_chair", "428825d5-0253-4c71-9fe7-5ff834c8264d": "chair", "70e2459b-41a9-38c2-81a1-efc9e7e76dfd": "sofa", "ff565b24-e5ae-4536-a1b2-0538fdf3a7fd": "coffee_table", "7e599b3f-60f2-4e3a-aaf5-dbedfda52c8f": "chair", "4675ffbf-5c9c-4458-8ea7-a715fdf642b7": "bed", "a4906939-5cb0-4d38-9bff-2c3d68da34c8": "bottom_cabinet", "14b73ed1-f8e8-40ea-9ea6-b6004b06ce52": "sofa_chair", "423dcbba-41b8-4532-8b07-40503215220b": "sofa", "2250c149-cae7-47b1-b2f6-061f171b3198": "shelf", "b8db10ea-142f-49f1-b6a5-2e57827c6b52": "stool", "73254188-802f-44ad-b62d-683bbe0b10b2": "table", "096ad075-29cd-40c1-8f16-ea04aad52844": "ceiling_lamp", "2667043c-e39c-457a-9c02-e7edb058028f": "sofa", "07ce6712-4b46-36ea-b991-b3876f08d904": "chair", "26afb29f-d893-44dc-b311-53fdf34cf832": "shelf", "2f99733b-065b-4b84-8e92-9bd036573016": "stool", "43e57655-af74-4d61-b1e4-a6afa47cf093": "sofa", "f97e8bb6-e442-498e-97b6-fd43d6c2f5f7": "shelf", "cab119c6-8cbc-41b8-81e5-6432ce86c1ca": "ceiling_lamp", "dd1ac041-341f-4993-a696-e5b9a78dba67": "stool", "e2551b13-172a-4e79-b17d-4823c0fba30a": "coffee_table", "01dd14a2-922a-4f8f-b762-81a29e2de200": "bottom_cabinet", "f0e405d5-66e9-40b4-b1e7-54e1bf5ae757": "coffee_table", "4413da86-d22a-4168-8423-65c09dadf568": "coffee_table", "2950a86f-501d-4802-9865-cc1848f709cf": "coffee_table", "641098e6-4b56-4a6e-932c-17e7b7a3832e": "bottom_cabinet", "6f5fe168-2150-43ed-97ba-8d24fd3fe69a": "sofa", "021a2836-75da-4cee-8496-4f5d82317be9": "table", "5b2d6f6d-789f-4b24-a907-93fc6a026bcb": "coffee_table", "3c163dbf-1558-4a9e-8690-f3c7126d1f29": "chair", "55653e8b-300a-4b21-bc1c-6588324c9fc7": "coffee_table", "6d0a625e-2493-4451-96ab-8e4d6076dc58": "sofa", "ab7d73b7-00ad-44e4-bd83-8113c6d61985": "coffee_table", "9ee40a01-165f-4aaa-abef-ee0d21b0b445": "ceiling_lamp", "f63b0dbf-ce94-4ab5-92fd-a2a1abca4298": "sofa", "077ac9ee-77b1-4ca7-802c-7fa7b7207d22": "bottom_cabinet", "d923a5a2-d65b-434d-ab54-0a17e27647a5": "sofa_chair", "7d1a380f-bb60-3ffa-ae12-96b6d23d8c64": "chair", "6f0122e0-7043-31c7-b432-dd33542559a6": "chair", "3db8d396-f996-45ef-b4e0-95dd9ffdde2c": "bed", "39a386e1-029e-4dfb-af6d-af19ae1e198f": "bed", "8506ba9c-acd3-3da5-be94-1eb701246c46": "chair", "6e6776a3-cd00-4733-b409-646607dcceee": "sofa_chair", "36932e04-26c0-370a-8771-60ab821e4a63": "sofa", "4b4bedee-f3d5-4d44-94e1-08d3448953cc": "coffee_table", "3bfdd478-48a3-4b89-a080-ab1711e98c0e": "stool", "ac5cfaed-83b7-4fc1-9390-e9b1b6f88bc7": "coffee_table", "0a42986e-556c-4afa-9973-86f93de5fa76": "bottom_cabinet", "11f4aa43-c1e0-47e9-b69b-55f052d1a317": "bottom_cabinet", "46e1956b-5f00-4064-a41a-b7dd01aac830": "bed", "f6490401-342f-45ad-a804-f6fb4994d470": "shelf", "0fb25207-a5bf-45cc-8b52-cce170f682da": "sofa_chair", "04bc088f-f644-397d-9d92-4d7fcc976ae5": "chair", "7ccab3a1-fcb1-4999-a281-b92fff887053": "coffee_table", "874869e9-91a6-49bf-b2d3-d216948e4639": "sofa_chair", "8998df0e-d34f-4783-b5ae-7d21e3ec3258": "bottom_cabinet", "46996477-2110-4bc7-8fdd-2538845e0940": "sofa_chair", "7b0dee9b-06ef-3032-8c07-53fe471aa410": "table", "66dc3538-e02c-46d3-aa7e-f486dc97d406": "sofa", "3f6764c2-a9d4-4cf0-9be7-0ceb1689ca4d": "bed", "9b42d6ed-1749-4fc6-b1a5-9086a9cea6b4": "chair", "c979d04f-1a34-4f91-b18a-34ec9f3e8154": "ceiling_lamp", "506cf979-ba31-4671-b8fd-9b9b1d50b319": "bed", "4bd1d500-c9f1-47e8-9230-ece80ac6d961": "coffee_table", "4bdb8763-e976-43a0-ab37-23bb156cd742": "ceiling_lamp", "7a1be132-84dc-44f6-9768-8eed5e562ae0": "bed", "5a1519a1-907b-4dec-a294-02545967adcd": "bottom_cabinet", "de056690-50c2-4e34-a88a-32080d2cc9ae": "bottom_cabinet", "5b812e8c-aa9d-4f8e-a29e-bd9a0c658719": "bottom_cabinet", "54bdc70d-0304-3e7d-a159-ff86cfa54871": "table", "3fd00270-5536-4b3d-be5a-3a1e298cbd91": "bed", "63778055-ee13-44e5-9c83-14c26e15210d": "coffee_table", "b5c0dfbc-7118-48e6-9168-df0c173029f2": "sofa", "7fbf9b07-66e2-4888-812e-9830e73ec213": "sofa", "8f437209-8cee-44af-861e-db81f489a70b": "chair", "c34c0997-0288-4a02-be98-a94112a28a93": "bottom_cabinet", "a00198d3-e618-45ba-9900-c4a216380943": "coffee_table", "61e55d19-0535-3a12-82b5-5b03434a3b33": "table", "32da1b30-359e-4a3c-afd0-2c148988c358": "shelf", "40893a52-bd55-48ba-a4b8-9cb51f43fa1d": "sofa", "a4632de8-8892-4f16-8100-82edb8b2fb40": "bottom_cabinet", "34bd8afc-dd97-3b13-8d19-3fa28f025e51": "chair", "660ba44e-3831-49ae-915a-6d9ae3d52a10": "bed", "1d92408e-c218-3627-bce8-0a372883a817": "sofa_chair", "5ac8f833-5342-41dc-8906-974efdfe81aa": "bottom_cabinet", "0eefa70c-dc58-423f-a41b-633f81ffdf76": "coffee_table", "2367712e-695d-4b3a-bc44-a2711b48c3dd": "bottom_cabinet", "553eb677-6660-4280-b1a1-d233dc9e4bcd": "bottom_cabinet", "edf66837-14bc-417f-a8cf-e48635eaadc7": "bottom_cabinet", "44bff814-95c9-3f47-85ea-f488b05f8d33": "sofa", "025336c8-61ba-4cb9-b844-a67ae7d553ff": "chair", "29b870d3-cd51-3ca9-a377-1e5875cc34e0": "stool", "720e59cc-7787-4b35-a6cd-deb78a73cc99": "bed", "710f4b97-34d9-48d1-b8a3-f880725f28bf": "sofa_chair", "48143f7f-fa2e-4475-979b-dd713e48a5dd": "sofa_chair", "74b4bce8-b46d-4bfa-8604-844a5a1bca3b": "bottom_cabinet", "6e49b3d8-7161-4ef1-8d6d-bc3c8301dee2": "sofa_chair", "925a2ab4-6002-45fe-847e-68db1ffed28b": "ceiling_lamp", "71088ccb-a42d-49e2-afc4-d7640c5941fc": "ceiling_lamp", "71eca80e-ba2f-40bc-baf0-f3a1de58a375": "stool", "0e622d86-7b3a-457e-bdcd-5df230e8f700": "shelf", "8f7ac9ce-7610-4367-a8c7-5645bb4fbd1a": "bottom_cabinet", "4fda6101-c5d1-4419-8b4e-f563f4787cfb": "bottom_cabinet", "77cfb369-499c-3f0e-93a8-5c1da9dc380f": "sofa", "68c271cc-f65f-48b6-8ec2-4dc624a62e53": "bottom_cabinet", "782fbbae-ce29-437f-8f98-f568a50772ba": "sofa", "2d82fafe-2527-44b0-94df-b2cabf061bc2": "coffee_table", "53ea4e17-1e00-457a-9035-81b375eb9056": "coffee_table", "68b3c32f-6c5e-47a1-a751-40f7d86fb1a1": "ceiling_lamp", "38daf573-ce59-4df9-bbab-341cbc5c6aad": "sofa", "1d2cdf9a-ae99-4ef7-b855-5ccd499863d3": "coffee_table", "200917a7-ee45-45c6-8e9d-0d9cfee1fe20": "ceiling_lamp", "18d1248c-f19c-49e6-a0c2-99a306733b56": "table", "04b815c0-e6a9-431d-8a48-a6e06e97573f": "ceiling_lamp", "11c67a28-db9d-31f8-9876-a55e3df0efd4": "chair", "59240966-d827-46e9-beee-a9d928f63569": "bottom_cabinet", "0f76fd99-97fc-4c98-b20a-d3d869e2f9b1": "bottom_cabinet", "7f773d7a-dbc5-4427-b732-263b0e5e2a9d": "bottom_cabinet", "46fd79fc-9522-4381-9049-e54f61b211fb": "table", "3501c287-5c95-47b6-a25d-ba20f12bd6e8": "coffee_table", "4b4bf7fe-8f9b-42de-b072-e54ead8a57c3": "shelf", "202be378-8e97-471d-9041-8f24d8c3df00": "chair", "28d53c9e-4f9f-48c4-9b88-3238876f7ad8": "chair", "9c535c3b-7700-4ee9-bd00-2e81212090c4": "sofa", "8f395a56-5523-4a6f-b1d6-867aa2e5f8cb": "bottom_cabinet", "0d9d29e3-9033-47f3-8b81-a37c278e6ac6": "ceiling_lamp", "95125b09-8703-4088-a2d4-f202bd08d0a7": "bottom_cabinet", "e8a4a08d-0fe7-47a1-acfa-33f33dbf5a84": "sofa", "1887ddcc-00c2-4e95-8813-b57c6cba8d9e": "coffee_table", "66fbcf32-4f04-4065-a576-eff15f25f4b4": "coffee_table", "5a60379a-8c3f-47bd-97c7-8e6102b75fdf": "ceiling_lamp", "725ce92d-a851-48b9-964b-f1bad8fc8307": "bed", "c5e847c5-b603-4ca9-b535-d0970f06b0a4": "bottom_cabinet", "8920cf8d-0867-4593-af5c-aa83ac6aba0e": "coffee_table", "3b4b35bb-23c3-4f75-856c-5eb219124141": "chair", "0cd0f02c-7bf9-46b2-ac69-680349b0d84a": "chair", "644682b4-3cde-331d-93fe-b78c90291396": "bottom_cabinet", "ec02d1e6-ced9-481e-a616-44c0e9e1f04e": "coffee_table", "952368a4-9815-40ea-868e-11f5f2744c51": "chair", "fe280494-8346-47c2-a1f5-74dcd5952213": "coffee_table", "a9e03517-ae16-42f0-a529-ce10f9dc5c02": "sofa_chair", "a56bece0-8439-437a-ba6d-a8812f5dd3e7": "sofa", "170ddd27-66a6-4772-8f5b-5c301b58a330": "sofa", "17988333-b8c0-4a0a-8576-506ad93270db": "sofa", "b5a6381c-1185-4b43-bd02-eea87a944c96": "sofa", "c2e49cf1-7c5d-4979-ae7f-837bfb79acd6": "coffee_table", "04c3af22-bdb4-410d-b328-a59eb263d750": "sofa_chair", "1399927c-483f-44d5-8e83-344ac05d4e1d": "chair", "0b0bf50f-da8a-4de0-af9b-1260ea7682c7": "sofa", "00fe956b-131d-40fb-a3e3-483a9f157a40": "shelf", "c47f09f6-18d1-4ec5-ad33-571d70a32659": "sofa", "578e7075-3e4f-4738-b099-109be93e9d27": "sofa", "3fffac2a-6770-45cb-8201-def5390c8478": "bed", "b3097f98-d093-42fd-b7b0-12143f9f666f": "bottom_cabinet", "487092ac-5c24-48bc-a957-95be07cd9be5": "bottom_cabinet", "67f465f4-220c-4f6f-8c7f-0bd2d8b1401d": "coffee_table", "df17cbc5-4cbd-46aa-8366-5fb3e0ba9735": "chair", "7acf98b8-349b-4b03-86a5-5fda22cf7818": "shelf", "9c4424b3-ed58-4cf8-b1b5-7c75dcf54286": "bottom_cabinet", "06509395-ad6d-4511-a033-99cb87b77406": "coffee_table", "20eec04a-a4c8-40b6-94cc-bd4d9387f966": "table", "1250ec24-c010-4578-9fee-d6852135bed1": "sofa", "792e64e0-70f3-4c39-a77b-48a514a68fbd": "table", "7fde7e39-f5a4-4311-a2b4-015cc2e7be09": "table", "41355b4d-e87a-4d7e-a0c5-a67340963ccc": "sofa", "f843d3af-efe2-4ae6-bbdd-44cb05e14e16": "table", "4c9ac6a1-2643-4484-952c-395892f5bee8": "sofa", "c3eb7a1d-d1bf-45e3-ba45-0286a589032c": "coffee_table", "a2a90336-2260-421f-a403-945c03be35c0": "sofa", "fe17af6e-8724-4357-b600-e5e7abb5db5e": "table", "634c1828-000f-4000-93ff-92cb3be24036": "ceiling_lamp", "08f6c6fa-703f-487b-b13c-71fafda05a9a": "sofa", "447b8dce-9b43-4971-b864-8adc25ec8d17": "ceiling_lamp", "95625d50-3350-480b-add8-dd1001fdd612": "bed", "1b1788c6-2ce2-4ddb-b8b9-7776bc0bb88d": "bottom_cabinet", "66be8e9c-8fec-41e1-b851-336e8389e65e": "bed", "1a114a3e-b623-350d-9318-50ad5be10fb5": "sofa", "1d225c81-9e90-35a6-8358-e9f50115e0f8": "chair", "6d9ca14e-8ade-4133-8b5e-878335cfc722": "bottom_cabinet", "52cdb70e-5cb3-41ce-9d39-b8d7dc8a4513": "bed", "459e687e-e452-42b0-9c30-896d97bd545a": "chair", "2dfdc0ca-0f0e-4b0a-8314-aa90d6544e0f": "shelf", "c894d593-ad87-445a-b795-9a1a7e4294b3": "ceiling_lamp", "802a349d-e90e-4ae2-b5ce-18ea92d00578": "table", "54dfefa8-fa6f-46fa-b3bb-c8a9ef848196": "ceiling_lamp", "e26c147c-e231-4351-96ac-d73eaeebf873": "table", "cb8ef374-1462-4eb5-ae5e-689da0abec7d": "table", "806f5a9c-9459-4d57-8879-1dd967932d65": "bottom_cabinet", "b1dc7525-dccf-4dd5-b7b5-7f259ec832a4": "sofa_chair", "2bed5f1c-b612-459f-b6ba-a5eebbd90e09": "sofa_chair", "5d66657b-1cf5-4607-8c8c-32330701b595": "sofa", "63887ac7-711f-4dec-82f2-1aca98aac980": "chair", "65ca0194-3c30-4c3a-a687-cea75e3a8b53": "shelf", "92dd4cbe-1b97-4756-b620-481ab8c8f01e": "sofa_chair", "76c55e1b-71ca-3af4-9eaf-4c040567ce02": "table", "e392d741-035f-434d-856e-25594458d98a": "coffee_table", "443da456-d458-4d43-aa07-639f5076448a": "ceiling_lamp", "85f87c09-9f44-4dc2-9157-3615ca5cece7": "bed", "8524ac54-815f-42f2-bc34-0505f3298198": "coffee_table", "767f0288-4e9f-4784-b32d-6661f807f1d4": "sofa", "7d8ad918-f0f6-4b6e-9a47-183ed8d8006f": "bottom_cabinet", "e1d522b1-c962-4364-afe2-a5486e70c1e9": "chair", "215b3ef5-83d0-4d82-9ed6-1f73a6d2f751": "chair", "6747867d-877a-478c-be5f-5571e81309d0": "bottom_cabinet", "26ace8fa-1053-44d2-b080-f5754e4d1f6b": "bottom_cabinet", "84414228-bebd-42d9-a5c3-2f1707bf1f12": "bed", "6bdb4906-8320-445b-a3cf-c0b35c7c2c96": "stool", "ca146453-5c77-43d8-a8ba-d4d804161005": "coffee_table", "6e891688-d3da-4a0a-8cf4-12fd81146502": "coffee_table", "d4973a02-0ea5-47a5-987a-7ab6bc2b2ed9": "ceiling_lamp", "af909f60-fbc5-4722-b5fa-68b4456d170d": "chair", "195ac979-7df9-4813-a2a8-9fef063a5172": "sofa_chair", "52f55100-1eca-4f2e-ac2b-0bb8671c91db": "bottom_cabinet", "7bc4692e-32d4-45ce-9b5e-0c05407e97c8": "shelf", "fcd82692-9c3b-4343-be82-0e61e6cebc54": "shelf", "de91ad29-c2f7-41e6-b314-3e0eba11dace": "ceiling_lamp", "7715b221-963c-4977-82c5-14ff46dabf7b": "chair", "6904414d-2cca-37d8-98e9-71eecd9f6928": "sofa", "76c01e5e-cd9a-4766-929a-9a9ce2012de0": "stool", "18971be9-a137-40f9-89ac-69b7330da081": "bottom_cabinet", "46068f55-d219-4e02-8abb-94c837757fd2": "sofa", "1b5f244d-7a2f-4087-8e7b-3a8f8369cb08": "bottom_cabinet", "0118e76e-26d6-402b-8d37-6aa00b1138c8": "ceiling_lamp", "2f67162f-e536-43aa-a81d-3b764b653def": "ceiling_lamp", "4ff7e87b-b451-40d5-9213-50605b2bfedc": "bottom_cabinet", "452793a7-feab-4004-b144-fa7e7a6b8705": "bottom_cabinet", "12e30110-5cd0-4507-9aaf-ad33bf29e80e": "coffee_table", "59782bb8-9ef6-4baa-a28d-ea0f0cc35b4c": "coffee_table", "5c12bb5b-3ae0-4e07-acba-059ac03f0850": "bed", "7b1bea23-bb61-41b4-a587-96adc2688e6a": "bottom_cabinet", "5273567a-5d9f-426e-9eed-a0d2e7bff941": "coffee_table", "cd5a2339-68f2-4b0e-8e6e-babeb9a96816": "sofa_chair", "c935e532-8237-451b-885a-68cb11218a1e": "table", "926b5688-f248-47d7-8cf7-b84c814cd4e6": "ceiling_lamp", "2174747e-042c-4695-8b8e-2fa6200af0f8": "stool", "c1cdca71-d544-4300-8351-f4034eb140b7": "sofa_chair", "5b7b9fa3-2e64-47a2-b418-250f114cd2e2": "bed", "72ceae36-37b8-4b8d-9549-ceea4b653229": "bottom_cabinet", "19cbc224-ed8f-42d4-b03d-d6ecdb715946": "bottom_cabinet", "94935355-4c7a-4f16-8296-851f54151ad7": "coffee_table", "8b6f639d-8b97-46df-9612-88ef535bc191": "sofa_chair", "6f02d910-2ab0-4540-897d-3510e3274b2b": "ceiling_lamp", "dce6c138-1b81-4a6a-bfa6-2565313c784b": "sofa_chair", "4c64e029-83ce-4755-8f96-6ec65972e0ba": "ceiling_lamp", "5c4ae868-8014-4a53-9976-287157adbbba": "bottom_cabinet", "8490804f-12a5-4653-82fc-da4ad88cd486": "bottom_cabinet", "9e3fb0f9-1462-4d5f-8338-0b2c44364f36": "ceiling_lamp", "25df26c7-e799-45fd-91bb-fd208d6bdf0d": "chair", "4491b8d3-23ad-4f4b-97d8-1a17f76cc682": "bed", "b9dca0d1-6166-4ac2-a048-3051c19b362c": "ceiling_lamp", "792e7db4-96c3-46a6-adb8-27fd40036740": "bed", "201f281e-52d6-41cb-87c3-1e00b9282d9f": "sofa", "dd6a79b2-61cc-4d6a-bf7d-7acc8e752f51": "coffee_table", "ba094176-5166-4451-9571-560648063b57": "stool", "9e71a205-0332-4821-b304-cd0406c6fb20": "coffee_table", "19001862-72fc-414b-82e2-f2eafc343a09": "sofa", "4a3ddfa6-ec55-4703-9ce6-f02366d31e3c": "sofa_chair", "7e400cb0-57a1-4f3b-a328-c3dade29b927": "coffee_table", "0a43b5a1-84f0-43d7-a083-0be70bca5b29": "coffee_table", "7152d3d7-463f-4e37-8419-ac72418e3de2": "sofa", "003eea79-6ec0-4731-b5fb-acc09dc59898": "bed", "02b8f6a3-9abb-4d3d-8950-8b7a7c81b40e": "shelf", "588bb6c1-22e2-4ba8-b6a1-456fbe823be2": "coffee_table", "b9db14f3-27a1-4325-b212-9bf82352d66c": "bottom_cabinet", "47dba9b3-0e38-455e-9d48-6ca79a31d0ea": "sofa", "8af3c9ea-30f7-46b3-8055-9708a9025e3a": "bottom_cabinet", "af93e490-fcca-4484-b64b-c7abeffb6b48": "table", "5ec4a22d-b147-41e1-9bb5-7f71a341d6bc": "shelf", "8225d304-2d16-419c-b9e7-9634a68e2f42": "shelf", "79e00af8-d9ce-3612-9019-e923a9adb9c2": "coffee_table", "a0223cf8-70eb-4cac-aedc-97b9f28a55de": "ceiling_lamp", "35065fb7-ade6-40f9-bbdd-eb68357dad73": "sofa_chair", "cea9efce-7e04-438a-8e02-6d8b3431c526": "sofa", "a83cffb0-a1a7-4617-bb45-d9ef6d106525": "ceiling_lamp", "cdee58c4-c2cb-4533-86ff-96331d5e0374": "sofa", "50c81514-0d1d-48fc-befe-ac9fa917022c": "sofa_chair", "2badbe2f-1835-4480-bffb-87db504b5357": "bottom_cabinet", "d3822e74-0975-40e8-afcd-941b36163c1c": "table", "27460e0c-af6e-49bc-8737-a8049a14759d": "sofa", "c1a6195f-e42e-45bd-8fd1-57e451e36fe1": "sofa", "ff792696-fc1a-404f-8d1c-c5b745f2be39": "coffee_table", "5e15b4b1-3160-4c80-bde3-e53322a72fa0": "bottom_cabinet", "c613ab4c-e49b-43ec-8edf-cb7f5356b0e1": "coffee_table", "da696e88-ffee-425f-aa60-d84c7f0e84ec": "bed", "6be2b343-1c87-4d61-8949-ea9aa9fcd259": "ceiling_lamp", "1a9c2d94-d577-4246-9829-75e26ad1cfe3": "bottom_cabinet", "f302f87c-7732-48ae-ae7e-dd119a8c1ef0": "shelf", "47d829d9-4d88-4c03-a07f-0c86a1e9777e": "stool", "7179289a-666d-40a9-bf9c-65047236f5a5": "coffee_table", "d1086485-33e6-4658-a2c6-a1271f1237ca": "sofa", "97dc7e5b-68bc-4e1f-ac9b-b5de5e69819d": "bottom_cabinet", "7c418d2e-974e-4a2e-b286-ad5043eb7d95": "bottom_cabinet", "fa2b32c4-66d1-4f1d-bbc5-6548e661a683": "stool", "69ee653a-b440-4a5c-beaf-b9268b6705ee": "coffee_table", "0da0ff5e-6562-42cd-9260-a14660b9421b": "chair", "63333ca2-b482-467d-a077-2846a157ae76": "ceiling_lamp", "42c1d0f7-4208-4a87-82c8-c3efdbfb006c": "sofa", "eaad2321-5f98-4e47-ae8f-0a0748e0f6d5": "chair", "8cc6e458-7470-45d0-93e9-7663c4f9719f": "sofa", "5bb0539e-b47c-436f-b27d-ddcccaef1fbd": "coffee_table", "90863d56-f498-4eb4-96dc-ff39996bedea": "sofa", "7b06046a-b009-4b08-8407-ca1b4bd535e4": "ceiling_lamp", "2cedb8d1-4ede-4509-8463-19337112b381": "bottom_cabinet", "7c2437f8-bda9-3e14-b812-6532e5e60870": "stool", "03ed697f-5668-4abc-bb3a-d9d0accb92bf": "bottom_cabinet", "001663c3-d459-4fbc-8563-89592fd21d18": "sofa", "d4585471-281f-4cd5-b094-2091dbc20107": "shelf", "6983d098-d395-4c4e-9fd5-8f7daac89b8a": "ceiling_lamp", "acae46c2-7f42-4f28-abd8-ce440d125de3": "ceiling_lamp", "860976a3-3b54-4409-b197-6b2cb3a0eed2": "coffee_table", "df5a6399-3e18-4c64-ad4e-726b50d1150f": "shelf", "6672409c-e786-42c3-a679-a0a27d1691c1": "sofa", "141b9d01-93b9-42ac-bc26-4fbb81c27799": "bottom_cabinet", "d6467f06-ee74-4d5b-bc29-82dd531e2549": "bed", "4874d831-e295-4d5d-a427-88e7414698a2": "ceiling_lamp", "766c7432-9c33-4a3a-9fe6-2dd330847cf1": "table", "6a5d45c5-bb91-3677-b053-d2a70c8657e8": "sofa_chair", "db27ec00-3452-4f98-98a8-7b06bc9e4860": "ceiling_lamp", "7d9ed100-9897-4d06-8f1d-00fc9260ff9d": "ceiling_lamp", "510d41a1-4327-4f49-ac6b-2c738b4a026e": "ceiling_lamp", "8295296e-3f80-446e-9ddd-091c78beec05": "stool", "875394aa-b493-43a0-a53b-d09e9162ec1c": "chair", "1e877dfb-d2c9-4cee-81fa-9fec903be9a0": "chair", "2acd94bf-8534-4edb-ab8d-288c6cb8be2e": "sofa_chair", "a2d573fb-1db6-43c5-8707-7dcff80125c6": "shelf", "b0575de4-7b5c-4de2-821c-c2828cdec47c": "bottom_cabinet", "844217fb-83bf-4bf7-88b3-a100dd883fbe": "sofa", "246fa886-d307-4438-8cca-2f10aecc75b1": "bottom_cabinet", "5e4c8a81-79dd-43c2-a117-f3b9bda9e560": "bottom_cabinet", "aad4dcfa-287f-44e3-8f53-ac8856e8e6ac": "stool", "85bf43f9-8086-422c-87b3-69d0ead9d4bc": "ceiling_lamp", "7a7032d9-bd16-45cb-b815-3c23bfb97c14": "ceiling_lamp", "3fb65cf5-f329-46f5-b12b-31ee1cccdada": "bed", "4198a69c-3720-475b-87fa-0fa4a1d0052e": "bottom_cabinet", "d34cb48c-4668-4253-982e-3136f7df22f6": "coffee_table", "50fdbd0d-1ae5-4e5c-89c2-8fc2e0eb05a7": "ceiling_lamp", "4bae3bd1-cd56-4520-92df-5da0ff28e7b9": "bottom_cabinet", "6ffcea7d-4355-3af5-9373-8b21e82e0ff8": "chair", "f6e743d8-ac38-4bbe-b419-366e6ba9bd37": "sofa", "7ce4c47b-1839-4e85-a803-c11403de14aa": "table", "460e6208-bd39-48e6-87ef-c9e15c240671": "stool", "81f45f40-f24a-4973-aac5-6a91e0799c89": "bed", "8ae20f2f-2c44-4bb8-854e-11b4387350ed": "stool", "23718c27-06a9-3565-9e4d-35562f803e3b": "shelf", "38a1efa5-3453-40b5-ab8a-067bd844d2db": "sofa", "7df23cf5-1e4d-4c6c-b680-84c80e92830d": "sofa", "09e0094a-0615-4623-97ee-85f3ddc87032": "chair", "658aad90-c413-431a-a577-eff5b6eb0bfa": "sofa", "aa97aff7-f746-4fa4-bc60-162280966691": "chair", "737c5b12-3df8-4224-b200-c447b1daa811": "sofa", "e2d8ec53-224a-46a5-9269-06b72b160ae2": "sofa_chair", "91e45e60-ee09-497c-a348-dcf9fb314f2e": "bottom_cabinet", "282a4ac9-94ce-48dd-a17c-8bb119febd1d": "sofa_chair", "6dc9ee3b-b184-4b93-b8a6-ae0bbc00f12e": "sofa", "725c06eb-411e-4f33-bf85-12c8abc37a0d": "sofa", "33370c02-3a8e-4b8c-9522-3fce38a03a12": "sofa", "36df9d95-c1a4-47e7-8e68-7d1e4b9ea4ca": "bottom_cabinet", "ceaa2d37-5d41-443e-a4c9-12335d372c5f": "shelf", "22c76adf-5cc5-4e19-b56a-777900040d76": "shelf", "2e5ed04f-68fb-4145-a4b6-d284756b6baa": "sofa", "a3193af8-a798-45be-8fd0-60ea70daa7fb": "sofa_chair", "4a4a11fa-9359-4f65-a68e-6dfc9908af1f": "bottom_cabinet", "624203b2-cda9-4405-b89f-7877676728a4": "chair", "1666cf88-ef4f-4472-a2be-14a43831dbe6": "ceiling_lamp", "466dafa1-fdad-4dcc-84b1-308b3684b685": "chair", "857a9c57-c9bb-4bbf-9480-d762aabdea51": "ceiling_lamp", "70b0dd2d-79b3-416e-88e2-49f2eda5a75f": "ceiling_lamp", "0d7553f6-ec5c-4472-aed6-1e9766b69ab4": "bottom_cabinet", "edafe9da-56cc-400b-a101-f5bafbe4cea5": "sofa_chair", "632dcee2-c530-463e-9854-5519e09d9f5d": "sofa", "17e28885-225b-4e7b-9acc-0e49d88544fc": "bed", "19d7dbf3-695c-46da-b6bf-e5b67a3e470a": "bottom_cabinet", "e41fca1b-02a9-4ac0-a7b6-3d01d931347e": "sofa", "e1c89c2d-3d5e-4a13-ba37-18c01c002e4f": "ceiling_lamp", "3aed8cb0-da5d-4f31-ae74-4b68faaa29be": "ceiling_lamp", "0e25e454-e81d-4050-bfd1-d2d560b25777": "bed", "50c7e1c4-92fd-495e-bc0c-f43fa5f06735": "sofa", "1b0d1b9f-918b-4423-bf26-71b1ad2dd5b3": "ceiling_lamp", "483e39f8-3ced-4795-a1a9-1edc54f92c82": "bed", "b5ab5c8e-f881-4b4e-8ac6-c4c28a4ffa59": "coffee_table", "3d1978d2-e10b-4989-af91-8fafb5931f04": "bottom_cabinet", "5fd76c43-8738-4938-9c27-3f7dddd1ac96": "chair", "186dc52f-806a-4064-b5a1-f22a95aa17f7": "bottom_cabinet", "297ae078-c07a-4181-8a8d-a680f5691d5e": "chair", "69a248bd-182e-436a-b4c1-01eae7b06156": "sofa", "05291d86-5851-4077-b7a5-7ce7130e7306": "sofa", "5deb7ce0-95e5-4a4c-b9ab-e5051f9e21a8": "bed", "b97af9d1-8f6b-47bd-bfff-71245aa1b72f": "table", "2c54a73e-a92e-3bcb-bef3-208d2530870d": "sofa", "fe76837c-7750-32e2-881f-037298bb327a": "table", "579e331c-f5a0-308f-9c70-af9da3dd37ac": "stool", "ccd3c0bf-dcbb-445e-9d60-bda6461fe1ea": "coffee_table", "660681f2-625f-46bd-b261-caa306cc5968": "table", "2d24bed3-d8e0-4f5e-908e-fead12f26138": "bed", "2714d969-1c6c-4bc6-b5e8-c5f1f1cafec7": "chair", "4df73dcd-8406-4c85-951f-3f6b9c41deb9": "bottom_cabinet", "3dbe6fbe-7993-4eee-a8e3-34b69bf94299": "table", "8161a64e-d421-4cfa-8f17-e8b42c2969af": "table", "36d25f51-163c-4068-85e1-6cd556b127b0": "chair", "2e7fa383-83e4-4a05-9b65-3b03d2758346": "chair", "e6557158-fa0d-49da-a4e1-4be5b4315239": "shelf", "8632ffc6-59a7-3c91-a29d-5eee927bf335": "table", "1c9f791a-a92f-4727-91c9-4474946e63d8": "bottom_cabinet", "102c7436-d583-4de3-bfd6-1409f3ab9f52": "coffee_table", "58d54c95-c306-4d51-ab1d-90edad0644a4": "sofa", "4e200c6a-d235-4f50-871b-b63d0d85bc97": "chair", "8647d988-aee5-43dc-8581-5f1a88ca548e": "bottom_cabinet", "5b0e6dd0-a559-4110-a89f-266bb211526d": "sofa_chair", "fece5db1-0118-497a-a482-6b817243ff2c": "sofa", "d4768a2a-c1dd-402d-bd34-8b842880c508": "bottom_cabinet", "68b37ea2-082c-4024-9e0b-c2d78ed9c32a": "coffee_table", "6bf4fdb4-8457-43d7-9a81-41b24675c22f": "bed", "5a94927e-6e62-4ecf-b7d4-bb05a6e49881": "table", "53899cdb-44a9-4bfd-b231-1c6a27c8bad4": "shelf", "af600d41-7558-4ee4-bbe5-b86258e7e751": "ceiling_lamp", "dca5cf61-b4a6-496c-928f-890bbdec31fe": "sofa_chair", "b5f97d3a-4eec-40e4-b1cf-b320639c2043": "sofa", "53ce7c36-6831-4913-b826-e6723794bf49": "shelf", "e122455b-d067-40c3-b28d-2b4f8505098a": "sofa_chair", "936c6cb9-129e-4bb0-9d86-6587ca83b952": "ceiling_lamp", "38a4a1b4-4f01-4a58-8ef8-7887ad680420": "sofa_chair", "8574f9eb-9e9a-4efc-a912-53a5da581942": "ceiling_lamp", "dc09a231-d0f1-4b05-90ce-1068d0834355": "ceiling_lamp", "9304828e-e551-4297-a092-4320771ecf80": "coffee_table", "85f69b12-395c-3f6c-b363-75a2f1c076be": "sofa", "f92e4a5d-691a-4555-a4e7-e09aa1dfd80e": "chair", "6c3e445b-31cd-4576-9339-864924524b5e": "sofa", "1cf70bff-57a4-4ff9-a91b-364c2f60dd13": "ceiling_lamp", "5eea8819-77a2-46e9-9a98-8c9bfaf6e4c7": "shelf", "7c667cab-d303-4bc1-aaf8-1f8a37edbe6e": "sofa", "3c399aec-1df8-49d4-845d-62de44e4951c": "ceiling_lamp", "bddfe394-975f-41a8-92c9-3ebe7f315c60": "bottom_cabinet", "4fe9276f-aad7-46c3-b448-5fb171ce5670": "bottom_cabinet", "7a161a4d-e174-44df-97f6-daa1e7b8dccd": "chair", "f4783a01-3f03-410b-b940-6bfda75f6b27": "chair", "4f7c6596-347d-49cc-8f05-c001ed654955": "bed", "ed80ee78-d781-4ec3-b911-634a6c44cce2": "bottom_cabinet", "02dabe94-29fe-4f44-a7b0-8d12b6281806": "bed", "94757edc-09ee-40f3-8d90-5d22cf8c90a4": "ceiling_lamp", "a706a607-7e31-45e0-86f0-08573486871f": "shelf", "563df485-3708-44c6-9415-04623d0713db": "sofa", "3a9a9326-b1a7-4c19-a896-31055ef0aaa3": "sofa_chair", "6c6d7462-349a-4ef1-b50d-b1fa13038c21": "sofa", "0e4809e1-40c1-429d-8515-6f96c3327775": "bottom_cabinet", "105e7858-e3e9-4c72-a8ba-d3a97a910b81": "bottom_cabinet", "e0b56d4d-fabe-4b8a-b298-08db814f851a": "ceiling_lamp", "35822bac-01f3-45fb-9ccd-381c34c44d76": "coffee_table", "39870622-71aa-445c-9579-a44e03974cd8": "sofa", "4541194c-5e86-48ab-89bb-a45aa9308093": "ceiling_lamp", "bfb1a81f-0ba4-416f-9d72-dd9f511604e9": "stool", "d2f22074-c90f-48a9-9114-8b748a110616": "bottom_cabinet", "d7ea79e0-cb4a-4640-ad77-e9b2703ed084": "bottom_cabinet", "50d8868c-8fc8-3c8d-9ac7-262542379876": "shelf", "2c822a1b-0173-45ec-a4be-205892a08072": "stool", "4ffcd836-60a2-4b5f-96d1-6cf30800d995": "sofa", "1b34c0ce-ef67-4685-99fd-27f6b82a46b8": "stool", "576b23e6-f0a6-4b24-a87f-81475a0513b8": "sofa", "42320ae3-53af-4d30-a965-4208aed12fb5": "bottom_cabinet", "3b9774a3-8dcc-46de-b58d-50d2baffde5f": "shelf", "06cf411f-a021-4bf1-b417-26ca819591f7": "sofa", "02057cc8-a1d0-43bf-b8b8-3e1a8aacfe95": "ceiling_lamp", "578ca58a-dffd-3c7b-91cd-11321e6a21a3": "chair", "4554100f-78e3-4e67-8069-60f220417bde": "bottom_cabinet", "70c8a0f7-6c69-4a7c-addf-d4ebc60c4634": "stool", "0f8c4927-c030-4138-8171-50bb41559f9b": "shelf", "4e527a02-c289-3a12-b4ae-308ed5dc150b": "chair", "81b674a0-9c41-4c5b-9bed-241b997a7111": "bottom_cabinet", "9781ed2c-7818-4b52-b522-39a482301131": "ceiling_lamp", "8118a31b-f6c2-41cf-8dc0-bd72fe26a369": "chair", "d52d512c-981e-48dc-a742-c93bfc57236f": "chair", "c1ceaf47-6898-4699-95b1-7aa9a48d5cdc": "stool", "94d07fac-1f98-45a8-8433-a4ee5a71881d": "bottom_cabinet", "1d135528-c365-3d6c-b4e4-80dc3ee56af9": "chair", "7599c6c3-3472-4237-8ee5-7b77f3934fa4": "chair", "04deacdf-0326-4851-879d-bfedf1ad967b": "sofa", "42be6988-1258-49f3-804a-43fb3bb66c6e": "shelf", "53355018-a7cc-4b39-a674-35c57be57f52": "coffee_table", "b3e45859-0476-42df-bc84-b8625b12b929": "stool", "066ab8fb-dcad-40b7-9404-15f40f1d8e99": "sofa", "2a821bb0-4c82-4b72-9974-4ece7f2d2316": "sofa_chair", "93156256-40fd-49c8-8da6-0cdf582377d8": "shelf", "44b8dd59-8e5c-4fb3-a3ca-dba9b7419cd2": "chair", "cce1fd70-24b6-479e-b26f-aabc32036838": "ceiling_lamp", "1094cc34-da3b-40fc-aab0-8418ea823046": "shelf", "41b538ee-8789-4275-9bd1-98a563722dea": "sofa", "3cbe01fc-2f48-40e6-8a0a-b57f8e6635c7": "bottom_cabinet", "33a9642a-e699-4426-9bcf-0f2d1ba483f8": "bottom_cabinet", "5d4aba96-9229-4a1a-ba17-5228ba29b798": "coffee_table", "3efa3d50-1a11-450d-a0a8-a2893ab7fefc": "shelf", "4b6de243-ba0f-4185-81ea-18d549bd2357": "ceiling_lamp", "b11cd798-ce24-4442-8778-cc1df18886ba": "coffee_table", "507e7199-d7f5-4e9b-8874-07171bea4249": "bottom_cabinet", "85aeff7b-2ab2-41b2-86e2-c41e652750b4": "stool", "c232b13f-bc23-4d4b-9fec-ed6f9cf782d9": "coffee_table", "2a3a8ec9-05b7-4174-9aa4-dc8fcbf167ab": "bottom_cabinet", "784b0ec8-c1ab-4273-80fd-906adfad3321": "sofa", "64cec723-95f0-44ea-97c4-a77146147f07": "table", "2c97ef89-5aba-4f59-a58b-2347df3d783b": "coffee_table", "05353a05-dec1-449a-bce5-9159bc345c9a": "coffee_table", "51800492-43b0-43a7-a20b-cfb38c405a98": "coffee_table", "0898bdf2-fd42-45ec-979c-080b91ce320b": "sofa", "c67f852c-de9c-4699-89f4-a6d4284c5f9d": "bottom_cabinet", "64e0707e-bb25-4e19-a116-e689cda5c883": "bed", "00777e3d-1a47-4193-ad13-43e8881ca6b8": "bed", "77f1d8e7-4860-46aa-90fb-ad0295c4034c": "shelf", "458140b8-8552-498d-9fe6-0cdbd22acced": "chair", "30bbd754-24dc-46f4-b093-c870660bf179": "bottom_cabinet", "523d0df7-e1a7-3d3e-afad-7ebae91903b7": "shelf", "6b59000a-6589-478f-ad1c-ac4814479953": "bed", "755a8747-7c75-41d2-acb1-e0d1adbb7a17": "sofa_chair", "055bc151-65bb-4ffa-88b1-8d33de4bf6f4": "shelf", "916105d3-57be-473d-86f1-3235e0bb831e": "sofa_chair", "61dc295c-de0f-4947-aff7-14b9e095f011": "sofa", "6958e562-68ca-48b8-8e74-2a678f22c8f7": "chair", "8352b20f-d22e-4c35-8277-cb1da2a7b84c": "chair", "91e1294f-04d6-4c01-b542-34125a347d3d": "bottom_cabinet", "602042be-a5ea-47e8-93bc-9a8a9270aa45": "table", "1856bb7a-3a5c-4d2f-a0d6-63c050256865": "shelf", "548332e1-68ae-34fa-a8a2-82ce4daeeb4c": "chair", "fc948084-5412-40fc-9309-d889f45e8c62": "chair", "944d689b-db92-447d-98a8-2efb6a44d111": "bottom_cabinet", "3e9d66fc-2218-4bbe-89ed-943c063e588a": "ceiling_lamp", "83f0d0c1-9a17-4c56-aea4-21c5183346fb": "stool", "fe8c3645-20c5-45d2-9195-3b0e8e699f3f": "shelf", "6fc09eec-2b2a-460d-ab3d-edde1f477712": "ceiling_lamp", "9c202e86-37dc-46c2-8c30-81cbac856a5e": "bed", "2c38c03f-66bf-4a06-93b2-724c996d0998": "sofa", "240bdf42-3221-41b7-8da9-b751031b772f": "chair", "9c62fb18-f0b7-4ba4-abca-bc60d19b2a42": "ceiling_lamp", "be19ca05-cffc-4619-b950-33bebb7b403d": "bottom_cabinet", "0b8e6d9d-436e-41e4-8ef2-8fc231668ed3": "coffee_table", "5ab6a9bd-8f66-4a50-9ae1-028566c1ab73": "sofa_chair", "c2f29b88-e421-4b9c-ab06-50e9e83cf8a1": "bottom_cabinet", "34253a57-677e-4c85-b5ab-569405827135": "shelf", "7d0a56b4-29b3-40ba-970b-850a5791f020": "sofa", "20849fea-97d7-47f2-bb5e-7d3819482b9a": "bed", "04345f2e-cf98-4061-b1b7-98612d7bf344": "sofa", "cf42607e-1745-45a0-bda3-f382c6d54eb3": "sofa", "408772b5-e55b-4514-9718-10cd5de2c44b": "coffee_table", "8cb61cda-3cc3-43a3-a845-85ab017a97a5": "sofa_chair", "51db0597-5ed1-4529-93e6-fa6386be744f": "coffee_table", "19d24c9d-eed2-4cb9-98ef-d2bdfa95d746": "bottom_cabinet", "0220bd66-882a-4f00-9009-f5788caeab72": "bottom_cabinet", "808d18b1-8d1b-401a-9304-22239bfed4a4": "bottom_cabinet", "a97c79e2-8e09-4670-ad86-c5f6e2a5610c": "table", "76c562ae-3ffe-4fc3-b02a-4a62b7f314da": "ceiling_lamp", "c02373ba-90a3-4030-b4bb-3e1ca0000956": "coffee_table", "4c86f547-da68-4e15-9419-c34fb96e4660": "shelf", "799afe9e-984a-40e4-8997-f953a55044e3": "bottom_cabinet", "d7b98bde-9f84-4c4f-be6d-472d8c63e4e4": "chair", "889d46f4-c6fd-4f2f-87d4-54c9bdc34f6c": "bottom_cabinet", "003b19cc-fd43-4995-9e19-1ac41f84e83e": "bottom_cabinet", "30f80fbb-ca6f-406d-a578-05818474be48": "bottom_cabinet", "44a785fa-1afe-465c-90ea-5847592b334b": "bottom_cabinet", "7bfab3be-a34a-4d17-9d57-641e0a7f8108": "bed", "878f7eb2-b0c6-4e56-9610-75af19099346": "table", "24b4b76a-65b5-4774-8797-726bd6abe893": "bottom_cabinet", "2159deb3-5035-4ab1-a405-b1f81fe56f17": "coffee_table", "e7cbab4a-1acd-4bd9-a96f-06ff4ca3f756": "sofa", "3f28bad9-5771-40b9-bb9e-491b7ba3449f": "sofa", "a1373edc-fe7c-42de-a859-ed6e3ef88f24": "shelf", "501a1164-cde8-4261-9ba8-cd5ebf59d6c4": "sofa", "a160dc40-921c-4d75-b112-5a3533d15356": "sofa_chair", "a2683395-3f61-49c9-8d11-5ff89a9f7f7a": "shelf", "3822e68e-4089-4795-acf1-7af53e09cc06": "ceiling_lamp", "25b62afd-aed1-3633-a457-a65e37a3d6ce": "shelf", "122e2399-d839-416b-b50a-4eedf8b98510": "sofa", "50b08a7d-05e0-4499-9625-92ee6bbe02e6": "sofa_chair", "e9edec64-5668-40c2-a4dc-378a36d7a11d": "shelf", "b19945bf-2410-459d-9fa1-11817d36a113": "coffee_table", "0eda5ad3-4138-48dc-9ab9-a078cca3d7e4": "shelf", "e31f203d-3def-4de4-a13e-752c70be9033": "chair", "3f85a8b1-ccdc-47e9-87ab-480c3166d668": "chair", "cfbbc59a-80c7-44ff-8a5f-1e150937b731": "coffee_table", "da317987-48ab-42b5-a210-d89481f7501b": "stool", "bdb61f2b-081b-4a1e-8a4f-2cb4ef6005ff": "bed", "5ce0dd83-b7da-420d-b419-a70a64a8f675": "stool", "4c1abe21-7444-3f00-b774-c15c8319960b": "sofa_chair", "eb58d595-0923-4e20-9320-4e5bc141dee8": "sofa", "63a62192-fc4b-42dd-a829-5bf3dd00ec2d": "sofa", "8b814b90-c4ef-4276-be4b-20ac374a14b6": "shelf", "83c1a434-7611-4cf7-8009-51728755daff": "sofa_chair", "932d44f7-8cbe-4377-8737-9a89e857e191": "table", "a4efb359-1764-47fc-8dac-4cf01bbc10ce": "ceiling_lamp", "bdb14156-5e8c-4f35-a064-be724505d5aa": "bottom_cabinet", "6aa24c17-8976-44be-b3ec-e66c430512f0": "ceiling_lamp", "443263b3-8955-4cee-b6e6-7396116a9222": "coffee_table", "72c699a6-53c6-4b0d-b430-e14f2e15ff91": "bed", "3d90ac60-0a44-3fbe-85f0-b445b07ab3f0": "chair", "8d0fbbfd-a898-4d51-bdbf-fde2b361e54e": "chair", "24adeee8-399e-46e9-8d8c-aa641084c1e1": "bottom_cabinet", "3fc86cd0-23ad-46a4-893f-df1659c566e8": "bottom_cabinet", "aa3f16ac-5e38-4742-ade1-dfab91532a5c": "shelf", "e363968d-4177-425d-9fc5-fc572a1f394d": "table", "8bba3d84-9d53-4dc6-ad3e-dfac6907b177": "ceiling_lamp", "10f69c0e-69c6-3ada-9d87-f8459a3a8071": "chair", "0ac939a0-68a1-4144-a562-78b48c79adb2": "sofa", "01dbfbe9-8648-49bc-9e9c-edb5e631c566": "chair", "0679c9e0-e5f1-4644-934b-28b8b9be3ec0": "bottom_cabinet", "c3a85c3d-46a8-4793-b088-44ff50b37f37": "shelf", "a89f8139-b23c-440f-85fd-973d39dc5bbb": "ceiling_lamp", "3dd4bce8-4f46-4947-8783-e85fbde6a487": "sofa", "436dca96-2efc-467a-b04e-485a835adcfc": "bed", "b03115f0-8e50-4527-8f1f-42c3bc99e0bc": "table", "094e1cb8-4a48-446e-a88c-ddee36aba955": "bottom_cabinet", "79e1f797-c5a9-48d2-84fa-c8abc35643cf": "bed", "06dfd96e-44c4-402b-896a-c895cd537929": "bed", "6701a9ea-119b-41c8-a8cb-99cb7e76777b": "shelf", "6f9d738d-0a0d-4712-bf41-46ce4816039e": "bottom_cabinet", "02f82ac8-f8a3-4220-831e-f6d231cd3dfb": "bed", "91d60046-262d-42e3-9a28-373088e204c4": "sofa", "a860b888-024e-4b83-b289-9c1bde1225d4": "stool", "6e63d677-66c4-4c0a-9ecc-60d69c4c3a36": "bottom_cabinet", "fc706327-7820-4829-b0e1-e029c807cebd": "stool", "dac46aab-e370-49a7-b58b-43dbebe199fa": "sofa", "5afb9006-256c-4e28-9c3f-8eeb10cc2994": "sofa", "00334c6e-72f8-4fb6-9e11-ab011bf6c3a7": "sofa", "3e834a1d-5eb1-4355-97a2-e4ed18588c32": "shelf", "29f29f33-8395-44a1-a3ae-6d5049482b36": "sofa", "0b9f51f9-93c6-307a-9fe0-8d03f7eff4b8": "table", "4b8dfa86-bcb8-4eaa-989b-08c439e52452": "sofa", "1304be14-bd5d-4bf4-bdf3-a30cdae5fcb7": "chair", "260e0d5e-8e20-46d0-92f4-02fed10fabb5": "ceiling_lamp", "55b9b7e6-5a72-4276-b76d-35cb7bae88b3": "coffee_table", "5c099dfe-b099-480b-bb51-e16c276b30da": "sofa", "86639504-1bf1-4b57-a4ee-dfb2828b1705": "shelf", "753be339-69a9-44e1-92cd-e7471161a7d0": "coffee_table", "101adcf1-613a-4b96-871e-b7e2b8f6b50c": "chair", "5a1642b0-2865-4705-83cb-a50901ac3b49": "bottom_cabinet", "201226d3-7b96-46ff-b4a3-9051f28f4817": "bed", "41dce00c-6a26-4480-a569-4ab8e6e74d67": "ceiling_lamp", "421f8a79-16e8-4064-8a49-3b2507f76f6e": "ceiling_lamp", "dfe3be37-140f-41e1-87a9-84fa20eec21c": "shelf", "b6fce482-1137-422e-b44b-69c6037a6022": "bottom_cabinet", "b568faf4-3150-449a-88f2-3c2a7f4bfc17": "bed", "eb056d82-3318-44f6-96f6-6e49090468a0": "chair", "af9688ce-a55b-435e-b81c-b4dbfa712f08": "bottom_cabinet", "769ab34b-95b7-36c3-bf07-71c9c7a89494": "chair", "816a8b03-5a6f-4651-84b0-2b73c2e11b23": "sofa", "6934dea0-1d66-49c4-82c6-4d54d41f9707": "ceiling_lamp", "6f5d55b8-dd45-4a11-a9ce-9ab34de20a2a": "coffee_table", "5505368e-818d-449e-95a4-b22fbdf3c97c": "coffee_table", "2903d674-c7d8-47f2-bd7e-a802c5b15c65": "shelf", "bac97278-657c-4254-bf42-2c9e5bd3636d": "ceiling_lamp", "147ab68a-6da7-4420-a6e4-a42e379a661b": "sofa", "abde719b-87c9-4c6c-a7d1-f09dc5de0c0e": "stool", "c37f4c52-c520-4455-a790-54c70f533a07": "bottom_cabinet", "70f49095-cc81-45e0-8892-a3a246502fde": "bottom_cabinet", "8bc6081c-33fe-4d27-a977-2ab8c98475f8": "sofa_chair", "589d864a-67dd-462b-aa1e-43b3a50d7ba6": "sofa", "00e371c6-da47-429e-b0cd-2ba243912ee8": "sofa", "7c093e19-ba9c-48ab-8f70-779ad3a184be": "coffee_table", "81959338-1781-3b3c-93f6-ff1e43a13e06": "chair", "74d99874-a5a0-4b96-99b5-77308d71dae1": "sofa", "e476d639-209f-46fe-b90a-1a04eed8409f": "chair", "bc87c192-15c0-4967-a2ce-b496ff29c404": "ceiling_lamp", "e40258de-5c0c-4ce7-8b85-2953d498ac77": "ceiling_lamp", "8e227e9d-221d-4375-abea-6fd25e2eb19d": "ceiling_lamp", "08cbdd45-a3d0-400d-b943-b742999bfe6e": "bottom_cabinet", "0ad4b786-da76-4971-88dd-a46d52d8a5b4": "ceiling_lamp", "9e5e579d-95bc-41fc-98f9-8b02c4bca4f2": "sofa", "7200c9a9-0ef1-40a0-b9ab-6773f2d34a81": "sofa", "000ffb60-6414-41b2-80cc-e38879db8fe8": "sofa", "c5960c63-aaaf-4999-8520-6612317eae37": "coffee_table", "f9829fcd-7995-4c6b-b035-124e26f87e80": "ceiling_lamp", "40c746f7-2f0b-4dab-9463-73c259a8f3a3": "bed", "219ab3a0-989f-40aa-81f4-f1dba609f50c": "stool", "2ddc834b-8c0e-4652-a83e-959087fcf028": "sofa", "c159a208-6146-410d-afcd-3558f491e235": "table", "88cef8fb-224e-483f-ab9f-143ac3a81e09": "sofa", "311ff139-b90e-42cb-9ef6-bb95f6567ca7": "bottom_cabinet", "5ef10029-a87b-4fc5-8b53-99f05731fc00": "table", "8369890a-2ea4-4adf-9306-90c1aac6eaca": "ceiling_lamp", "1bd84ea4-b626-43c0-a80e-ecd2d607a75b": "bed", "114169a4-522a-44db-8c6a-0c1ab6822e94": "sofa_chair", "4644c440-8fd7-4044-9909-e848c3af29ba": "sofa_chair", "4f6d6c68-3d03-4cbb-8c09-5640e564b74a": "bottom_cabinet", "31120a4d-2be1-35b8-8bff-f80557d7463b": "chair", "2b6ddc8c-780c-4b2b-9195-609279aad321": "sofa", "98bd39e2-1e03-4140-b223-0637679ceab3": "sofa", "0e58f271-f7fc-42b7-b98b-9eaf1d93169a": "bottom_cabinet", "7cd6945d-1587-4694-866c-fc03869da71a": "coffee_table", "86205f15-d65f-4dd7-af0f-08b77a32097c": "table", "4a997e08-109d-3e9b-839e-143cdb7dcdf0": "sofa_chair", "609953ec-e335-4f4f-8132-59baf2430518": "sofa", "8eaddda9-b186-4f68-8655-bb7a6e152a9c": "table", "4675212d-0ed2-480f-80e6-2b6007747c4a": "bottom_cabinet", "28822bac-780b-4505-bb68-a071c356ce46": "chair", "4fed340e-6d64-4328-ba85-d0152a1b7f36": "bottom_cabinet", "7a8b15fc-7a53-31fe-9ff9-0f734f1a55f6": "sofa", "70865842-b9d4-4b18-96b0-0cb8776b6f71": "chair", "fbd95d52-9b0d-4088-ba64-15b42a0f79c4": "coffee_table", "335aeb92-efa6-4820-be2d-9fda6bb549ce": "ceiling_lamp", "bdd9a7c7-026b-4100-a44c-21c7c0510dcd": "coffee_table", "2c647c28-8f73-4c55-a543-8e489acab98a": "chair", "17e325e5-1142-424b-9b11-c782aed19521": "bottom_cabinet", "6cefa84c-81f8-424a-8da2-9965c1cc742d": "chair", "4510155b-ef5f-4f5b-bd43-2b9e756c0598": "sofa", "05dc963e-e0e3-4148-902d-f38dee2eafb9": "bottom_cabinet", "86244b09-0b05-4965-948c-57eb9a38c721": "bed", "579ae452-3a55-4dcb-8104-251e99423153": "coffee_table", "f5a92e10-0d6a-4080-8dc1-6e7c996f482e": "shelf", "c2a52d98-de6d-4a53-91f5-2394d1987836": "chair", "b44e175e-11ce-42dc-834c-95a5b5a3e17d": "shelf", "645abe09-6bd5-4c3a-9f25-578d0d59d13c": "sofa", "77d741a1-4a55-477b-a645-481bed08fd0f": "ceiling_lamp", "99a1b7c8-b3fe-47f4-851f-0bab93344121": "ceiling_lamp", "cd470226-4ae8-4473-bc68-7bcf5b856abf": "coffee_table", "8b3ba12f-8453-416e-8cb8-64e092478004": "shelf", "a3a2abd1-a36d-4658-b179-3c28e4fd88c3": "ceiling_lamp", "6ead3dc4-3e24-3cb6-a47b-2dbb951fa42a": "bottom_cabinet", "274f5f8b-70a7-4961-8f2a-9ab9d119efcf": "ceiling_lamp", "f38eafe7-dd04-4bd5-97c3-d62f615b7339": "chair", "6756a871-fc8f-4db3-8692-dc9c512d4ad1": "ceiling_lamp", "0a58acac-b026-49eb-8d09-042cdb30abbd": "ceiling_lamp", "d352b145-e384-4090-91e6-f01b13bfb99f": "sofa", "6f9f4aee-dc7b-4749-a98a-67fd52cd55b6": "bottom_cabinet", "fcbcb5bc-5680-408e-85fe-489ea6fbde8d": "sofa", "c1afdceb-913a-40b1-9e43-c84b08c12d0c": "bottom_cabinet", "83227860-e5d5-4da1-9a00-1521b2bffa5e": "chair", "4cde752e-623f-4072-a3d0-1517aafd4cc6": "coffee_table", "508aa612-8dda-4528-aee2-62712203ae48": "sofa", "62ce5421-bc66-46ef-b797-a809ca70d250": "bed", "7b119cc7-1fcb-4aac-8d5f-d832e1cfe208": "bottom_cabinet", "677efaf8-0db4-47a2-83e5-cffea0f6d59b": "shelf", "699cfe7b-cdcb-4bea-b1c3-db5ee7f3240b": "stool", "00c90f7e-2b91-44e7-86f0-0fa00268e63b": "sofa", "85502557-96e1-4840-83b8-6aad2298d6c7": "chair", "540182ba-8a9b-4857-906f-b5770cad878b": "ceiling_lamp", "db02d51d-99d7-4d62-818c-d70cce2e7f31": "sofa_chair", "71590a01-e0f2-4877-bc92-8a1088bf4a74": "coffee_table", "767fb808-cc4d-43ab-aadb-54a324570ecd": "chair", "6bfecc53-56aa-444f-8787-4bb5c1da3edb": "coffee_table", "511856d4-8231-3b72-a6a9-0500ee4e5c4d": "chair", "5a9f88fe-7fc2-41e0-95b7-25401e2bcde7": "sofa", "547bd93e-18e2-4f22-9399-37ffc466d9bf": "chair", "77d0cb2f-157a-4e7b-a3ba-9d1fdaa125d2": "bottom_cabinet", "d7768e49-b2ff-4821-9e21-8e94b2575c68": "table", "32c069ba-2719-443e-913e-57c5bedd7990": "sofa_chair", "6895b871-ab6f-4abb-b45e-0e33abb6b7fa": "sofa", "bfc1cd6d-3638-4cd2-9506-61fa2a144a91": "bottom_cabinet", "2bcd3a77-71d3-4353-9812-7ade8d6ca625": "ceiling_lamp", "6e1223c3-1e6b-4c9e-82d2-9e643d9e344b": "bed", "28de5ed1-2567-3bb5-bb7b-7fb8c41ca50e": "sofa", "ffe5bff5-656c-4b0e-836e-44e098bbcfa9": "sofa", "a74a6616-45c2-4a17-8387-c221ab63a721": "sofa_chair", "733bdc73-7161-40c6-a4e7-85b173b913cc": "coffee_table", "fa23acbd-54fb-4cd5-9caf-33b7867474c1": "coffee_table", "0bfee146-32dc-4288-a80b-f25738dc419d": "chair", "e1571151-263d-4e01-b760-50b292a243c3": "ceiling_lamp", "40db4732-2f69-3b1a-ab17-63cb5fd2f099": "chair", "82ce3056-03b2-4ff8-9ba2-f4afb9456e45": "bottom_cabinet", "3dba4e85-3c36-4cf3-a7c8-8e3f1235bf0f": "sofa", "6bdcb84a-76d5-40f0-96a7-21e4552c585c": "bed", "69d407b8-a0d6-42ff-9e89-5593eeadf394": "bed", "5aefbf12-5f0c-464a-b90e-8c69ea4f2c37": "bed", "4cbf7115-025b-4337-b827-067d6440f57c": "ceiling_lamp", "65303fc7-e257-44ea-a715-b8de195ed0d3": "bottom_cabinet", "01244633-0eab-43c7-af22-aab45596262c": "table", "ee987d00-75c6-4f8a-838b-9b41c35059d4": "sofa", "03802a6e-f815-4eb7-b494-3cc108ffbbfe": "table", "5bb674e5-86c7-4abc-b63c-37996d6e5f4a": "coffee_table", "5604bb8b-e57c-4eff-aae6-abdd037adfb9": "bottom_cabinet", "6e82e3ea-4751-4750-9778-8dee579b8663": "coffee_table", "8cda950c-f8c8-4e30-9671-0df124bdacf3": "chair", "4d22dfea-3801-423a-94bb-9e74ef874bdd": "shelf", "6ae65fd1-f937-4b0d-ba6b-54b75022bb79": "coffee_table", "ca436b28-1913-4726-90b5-93c052244fef": "ceiling_lamp", "b133cefd-2243-4914-9d26-be1a36b092a9": "ceiling_lamp", "11bc7917-2d4e-4912-a469-39d530eb0e65": "bottom_cabinet", "0f55cd8a-f4c0-303a-9122-2ad909e4fb06": "sofa", "40e06c21-1f26-343c-b419-ec677f6c4d8c": "table", "8ae27420-3ab5-4648-8e67-749b6c1a2cfb": "coffee_table", "7c746b37-65f2-3b8b-83a8-c627a499ed84": "chair", "0327502e-993e-42f4-a9d3-85593c561ae7": "bottom_cabinet", "1fac9d1b-274b-4e9b-9cd4-8845c4356f75": "sofa", "d0681e95-d3a1-4461-8f6e-dff29ce7da47": "table", "0fddda67-0340-3fb4-af5f-b5edb4665510": "chair", "8a737f44-4f63-4fcb-ab50-ea429b04deae": "chair", "230489b8-2c6f-45b0-b25c-46dab6160496": "sofa", "52215c3e-e2d2-4c7c-955a-b0c765bcfda5": "coffee_table", "fd14e55c-9ed5-44ed-82b9-a006356d4d1a": "chair", "2483eae7-22c7-40e5-a0eb-56dece52afac": "chair", "51b655da-26ca-4489-9af3-53a006edd491": "sofa", "d7064e71-4304-42bc-b960-cdecbcccb7a9": "sofa", "299c8af2-92ce-4efb-9788-7f97555643d1": "bottom_cabinet", "368ec9b4-3ee9-4ffe-b789-e56921e74656": "shelf", "bed567d7-2fd8-4f6a-a50e-27bf792e60eb": "stool", "5385c838-e127-4676-9a90-1563226c4881": "sofa_chair", "58961b54-d044-474a-9498-80a6f31cf10b": "ceiling_lamp", "bcea2130-344c-43f5-9235-3097f1da584d": "bed", "45295e19-b9fe-48e7-b819-70a393fd4818": "bed", "aa6d228c-fc58-4e80-b1c2-ecb2e6fb25f8": "sofa_chair", "aac51183-f0f0-4246-9342-bf1682044fc5": "shelf", "0e73b8cc-6265-4b2a-9e5f-834cc20bf791": "coffee_table", "dfcb801c-33c0-42a7-91d4-a646df767ea3": "stool", "56bd94af-7f97-30de-98f2-e50af27d0c5a": "sofa", "91abd8fe-2686-4c18-ba2e-50579bdc2b3a": "bottom_cabinet", "efde2983-456d-460d-88a8-07f10e0f54eb": "coffee_table", "075506a7-2ab4-4905-b156-fb1d93069fcc": "shelf", "da234115-b5ab-4c7b-9485-41a6fb7ed4e0": "chair", "9f62b75e-3c8b-4be2-87d3-84ea43e7c4e8": "coffee_table", "7f065772-c89d-42d2-94cc-062ff234920e": "ceiling_lamp", "2c6f3def-7015-457a-8210-5f4c4ce1e5cb": "chair", "08f0e88a-cca8-43c2-947f-9a8062d342b6": "sofa", "f72cfd0b-5219-49cc-a9a2-9f90421efb6e": "bottom_cabinet", "e7173cfd-6168-41e6-b031-c05d40e3bd98": "bed", "05c2ba89-d3ef-47d9-b272-149712dd9b1e": "coffee_table", "fb337533-20ff-4930-9b4a-e6486c275f4f": "ceiling_lamp", "6951eb82-bfb8-4c94-9a7c-27082111137d": "chair", "34fe2a0b-7134-447f-9271-386a676c563d": "coffee_table", "15b75afd-fa5a-4ac6-8561-bfae9c454a68": "coffee_table", "73c0f57c-5cb7-4440-8d59-6dee85f358de": "bottom_cabinet", "d3518738-2a88-45af-9701-784a6cd49d35": "stool", "5074ce71-5ebc-45b7-8fed-2651725d74f5": "coffee_table", "a8c34fc0-a9b7-46a7-9f77-a3e5ed3bba12": "chair", "1d50f97b-dea0-41b1-b9bf-ec2fbe90a3f7": "sofa", "54f59f79-4925-457b-827c-dc7ed7605a53": "sofa", "7732876a-fcd1-3e50-9506-81fc3d367f6f": "chair", "940f50a6-b09d-41eb-9b38-073a64530373": "bottom_cabinet", "9fd8f2c1-293e-4ebd-9376-294ae52f3f58": "sofa_chair", "3feda997-0e98-427f-8f0e-897b36dabdab": "bed", "1c0e2658-703a-4c00-b1a7-601db6806fa7": "bottom_cabinet", "0e2b963d-66ab-49e3-8cf0-f90fd919bce4": "ceiling_lamp", "10297250-34ce-37b0-897b-e588570b3adf": "table", "1c552409-3f35-3cf3-8a44-5ff38204d644": "sofa", "c40d9eb6-2a60-4738-9d5b-3ffa4410ab54": "shelf", "261628f0-9c0b-4cb5-b07b-b7f633c08825": "bottom_cabinet", "30d47372-0e23-4c31-8de6-edaf2cd42b86": "coffee_table", "9290f528-c4eb-4cc9-8af7-797a55543bc9": "table", "97c76356-1d93-4887-ab6e-0e9334e6cf3e": "coffee_table", "c50fbcbc-3aff-49a6-8af9-c7b9993f3040": "chair", "21521120-cb75-3838-a105-7cb2d020a73d": "sofa", "a3d8da3d-7458-4755-83a0-9af43322499f": "sofa", "d9c9ebe9-de0c-4576-aff0-fc5b7fa30b14": "sofa", "b2547f60-2576-4001-8cf7-831fedeed1ce": "coffee_table", "e69e0894-4ef6-46d5-86a9-33c66fdb53b3": "ceiling_lamp", "092693c4-8bf7-4fc6-8908-48aa4e27e0f3": "stool", "75f1026d-65a5-4cb6-a40f-7cfef0893cba": "stool", "631ce87e-431f-39d3-8bec-a090b03a1298": "chair", "9f60056d-5e15-454d-8668-a5d670a16bde": "bottom_cabinet", "98c8eeb5-c58b-4885-841c-dbc7bc89f187": "stool", "1b36174b-6e8b-498d-9c04-a37396663bc4": "bottom_cabinet", "a86c2ff3-207a-4b64-b6f4-8514d4fd9000": "coffee_table", "936f6bd4-d0bf-4aef-b724-7232665437fa": "shelf", "cb15e988-1d6c-4d2e-985a-eed8003e09ed": "shelf", "faa8986c-d632-4b7c-9a25-659e48c42d0a": "table", "db18b256-bdf0-3625-94b4-531d21ba3ff9": "chair", "fd364135-ccd2-41d8-8905-aebfc30735cb": "shelf", "196b04c7-206b-4d72-bc1b-85cfb21420f6": "sofa", "2f77e6db-9e31-4b42-9813-850a9d5ef7a0": "bottom_cabinet", "eb0f2ec5-10d5-42a4-bd5b-e5ebf8d7aae1": "ceiling_lamp", "02ab9d20-ee01-40b3-b3bc-9bdcc066d382": "coffee_table", "016514ec-7131-4828-b090-22429ed678d2": "bottom_cabinet", "0df956c5-ee8f-4659-8b97-d29f27409f97": "coffee_table", "dd49b740-7632-4928-adf1-3fd853decb30": "sofa", "6859b850-a5ea-43c5-bbdb-393615ba4c1b": "chair", "2b55c539-e64d-488c-852f-24bbd831b909": "sofa", "57f2a1f3-ea70-4960-9445-24042158a0a7": "sofa", "a5bda7a0-dc26-4ff5-9bc0-4c606c508c92": "sofa", "dabce2fe-9fdd-40d4-b028-b010b4252a91": "sofa", "0daf8303-95ae-426a-bc31-efd3fb007b79": "sofa", "0cce0700-cc02-4617-89e4-aefc02fe2918": "stool", "20fac546-3f84-4075-90d5-b4e167dcfefe": "bottom_cabinet", "05c3feb9-8e55-4a23-beb7-bd8698791e2c": "bottom_cabinet", "46ccda99-78ee-4aec-84eb-0618a74fd06c": "bottom_cabinet", "fb71b194-f607-4271-b8e4-8c82c7e606af": "chair", "2c71c8c2-04ff-46e8-bfa5-698b8ae0de0f": "sofa_chair", "1dad86b2-b916-45cf-8c43-4bedd5469c40": "chair", "a0f4720c-c9ea-48f0-a4c3-8e9786d01589": "bottom_cabinet", "717cb342-9948-41e2-bd4a-7e7ac2097478": "bottom_cabinet", "46592c84-472e-4354-9c4e-111258007a43": "bed", "10f5a34f-ae03-4195-bdb3-1b351eb00555": "sofa", "047b23e6-5057-4a1e-9c5a-23244a62a006": "bottom_cabinet", "0c71a9d6-a637-4f1a-aff1-83940165a85e": "bed", "a6355af5-6c60-45bb-90ba-c0734e0ea278": "table", "9aaa05f2-d0d8-4511-9b53-bdcb3082e96d": "ceiling_lamp", "18e2be8c-ecb1-4a9d-a177-3b543f5c3c0c": "bed", "dd9128e2-d08e-4110-895f-af34c39eb231": "stool", "72366b16-480d-4a80-ad7b-e70801f44b0d": "bottom_cabinet", "533c5084-bb73-4a6a-aa4d-8ff6b7b009bd": "sofa_chair", "4b584db8-5099-4709-a7da-7be121ca2892": "sofa_chair", "939608e2-f989-4f7b-bb7b-3778938b438f": "sofa", "1d64bc46-4760-44e9-a8b6-7d999058127c": "coffee_table", "fd8faee8-5dd8-4a00-ac74-00e0d8c1cf1f": "chair", "98105891-1421-4f66-a513-0ac57aa3bf54": "bottom_cabinet", "4092c1d2-0789-45ee-bb72-207f617b5fa9": "shelf", "139e7bfc-1d9f-45e5-accf-795e4a2c2af8": "bed", "ff5b83c7-ca6b-451a-94e7-8e01980a008a": "ceiling_lamp", "269e77db-cbed-40ab-ad62-b3aada84acd8": "ceiling_lamp", "b1b4050f-6c93-46ee-b5a1-a5e6ce36aafe": "chair", "f5788f2b-43a4-4740-8509-1326aa2db98c": "sofa", "121f609e-9d6f-4a5e-8f8b-9c1220e7c23a": "coffee_table", "27d32b81-fead-492a-9d13-bfb88f9b8196": "bottom_cabinet", "c15f137c-e3fe-4427-b214-322bd762a0fd": "bottom_cabinet", "42e02828-636f-46e6-97d9-a0ba6f97354f": "sofa_chair", "8dd38766-e021-4b24-afa9-e697b3063dcd": "stool", "c446ead2-1d5b-4726-950e-47d01f4ba7c1": "sofa", "f3a448fe-ce0e-4aae-a7f7-509baac3406e": "bottom_cabinet", "37e97473-18ba-37ba-990f-d2eef9332ac8": "table", "b8166c30-9880-4498-9b71-4373adc11832": "sofa", "40f62301-945f-4c0d-8995-f5dea1a89f30": "bottom_cabinet", "322810cc-2f52-4efc-bfcb-55e2523da817": "chair", "1ea566c6-6d1f-4aaf-b2b3-d1c8301ef13d": "sofa", "b0f50473-fa44-3a42-b398-597cba88f3fa": "table", "fad585b9-df56-4b87-8a82-5130d5273c9b": "chair", "506d43c6-854f-45ae-aa86-809e0512fa2a": "chair", "66373c84-4872-433b-a949-c4e5ba43e363": "shelf", "064159ad-2984-3042-a961-7ec585e55ee9": "chair", "2673eb72-13e3-4bda-8566-52e037399053": "sofa", "4232a474-2661-44b7-becb-0dba932629b5": "stool", "1a4303b5-a796-3f42-95f8-f1d881d3b7d6": "stool", "e67ca81a-1ebd-4f05-a4d6-da0bb945ace1": "ceiling_lamp", "719e550a-d7e7-4a73-b6b4-97218ed5e6c5": "chair", "7542671c-3e71-42a1-8bd5-168397468d3d": "sofa_chair", "95af3782-0ff7-435d-afb1-eaad6a41959e": "sofa", "067772b4-1484-4d66-9ccc-2d2513ee93f8": "sofa", "967011ed-753f-4eb2-8505-feefe3f33f88": "bottom_cabinet", "3b0f16c1-2e0f-4c52-ba9c-3c69c50e3ec4": "shelf", "0bd4c3a5-444d-4848-8a5f-9724bd3bb146": "shelf", "56816c22-457e-43df-94bf-2e78baa8c928": "chair", "6a0c7b88-98b3-4d9c-b40b-f951731e7c21": "table", "6e7d323a-de8d-424c-bcd9-384c7540b55b": "bottom_cabinet", "7495d339-f90a-4773-9fd0-3e4b857ce9b3": "bed", "039a62e2-6a6c-498a-8ee4-0bb99ea5cdec": "stool", "4904e47a-a6fb-4432-857b-ef0effe9a515": "sofa_chair", "85639811-624d-4b98-8f08-b43bf43aeb80": "table", "7fb021fa-9d67-4193-9b65-e6895d1dc071": "table", "4eac74dd-6c66-3667-b465-0ce546be2dfc": "table", "24fcbe13-7323-459c-b14f-b2ee42bb6538": "bottom_cabinet", "786f57be-dc9f-4ffe-a5fd-4b061e0deb54": "chair", "466388a7-42f4-4469-95f9-4d89cf0bd16f": "ceiling_lamp", "0651a152-fea1-4062-a6a3-758ddb3a1d3d": "sofa", "b1ff08ad-36a5-4e40-9ff6-fc8b2a7531a7": "bottom_cabinet", "a1134fbd-3471-4531-aafa-dfe0c7e4b395": "bottom_cabinet", "0e46f349-afe4-4970-ba3c-48ac7665d8f2": "sofa", "5f2ae658-6fa3-4b0e-a39b-25cc86287f29": "ceiling_lamp", "6b26027d-6e4f-4a17-8337-202d697be15f": "coffee_table", "040d99d3-ee9c-406b-bbca-6c812323badd": "stool", "389abaca-ecde-4b38-a5db-709fb346921a": "stool", "81b3c553-9bc8-4e9e-bbc3-0309d488aaa3": "bottom_cabinet", "6595fb13-1e56-41f9-985d-dc9e7367210c": "sofa", "05f6eb5a-60a8-462b-ad0e-cfdd7f526e9c": "bed", "00593873-bfa3-4cab-8efe-3528312a6257": "sofa", "275b8925-2179-4431-aa28-ee370564b793": "bed", "5b2ed8ea-f321-40f5-bb00-dacb518753d8": "bed", "592fe7a9-4678-4145-aaae-6c98ebc9bddd": "bottom_cabinet", "c58ab69f-d138-44ed-a9de-9aeff0c8c836": "sofa", "2919b6e8-2469-4874-b4c6-ed99cd4771a3": "ceiling_lamp", "53d2904d-607a-450c-9b37-1b4af7b96127": "chair", "cd25f4ca-1752-4d12-9845-e8dbd9e9dd50": "ceiling_lamp", "22c61a0e-246b-4d8e-99f0-a52c2478cdd4": "bottom_cabinet", "1a415244-2e5d-4177-9885-1f12e28dcbc3": "sofa", "a00c3f8e-1cbc-4df0-a9dc-899c71950ab3": "bottom_cabinet", "0946ef29-2944-4a75-8636-560ce566bc8f": "bottom_cabinet", "5676b325-81ea-4079-b717-9603c586b572": "sofa", "7e05411c-6d0c-4067-be31-75e2567527f1": "table", "dc85e2fa-3da0-4e20-adf1-af35fa088bf3": "sofa", "4b600aed-51ed-445c-8c08-283ea0d5b53a": "chair", "18b0e90b-ac4f-47f6-9afd-85a6641c0d4a": "bottom_cabinet", "1b75a261-6622-41e6-8225-1a41e6a04050": "bed", "7f7a8610-d4b8-4a98-8955-c98b1a34c6f7": "sofa_chair", "68716fd8-adbb-423b-9a96-4b5357bb0052": "ceiling_lamp", "54b43c47-400b-440e-b88d-27cff6ab1483": "chair", "4a435ea6-6a96-4a45-8000-5602f0732e41": "table", "288ac6f4-47ef-418d-87d0-6cc1365a98f4": "coffee_table", "8747917e-ce72-4735-a25d-ee450f236b50": "chair", "d3eb636c-fd8e-4fcb-a102-49812171f23a": "ceiling_lamp", "aa56886c-8f6f-42bf-ab86-f2a99e086d89": "chair", "52a7986a-d2a3-4492-8d4c-ac7a06fcd3b6": "bottom_cabinet", "5fa11d54-53f7-4b9e-9d8f-07012eba4e90": "chair", "7d44ca1b-9422-378f-938a-02b60eb59953": "sofa", "c8d25dfa-8d2e-453a-9df6-3f94cfa6493b": "ceiling_lamp", "295d2e22-8732-4a2f-9c71-b6300ac0a416": "coffee_table", "562b0076-3ea9-4ad3-ba04-35e41d2bf8a2": "table", "138024d2-847c-45fd-b173-7ce070d4b2de": "chair", "7be168e2-57a7-4719-b2d9-541ffd10f011": "chair", "cb2ee933-da2f-4048-b4a5-cca085874fc5": "chair", "4ba17651-93d0-4b32-bb3a-d6de5b761da9": "table", "0ed083fa-fab0-494e-a36c-8ff630b676c7": "stool", "03312b51-719b-4f64-b130-798301de5212": "sofa_chair", "47d4bcfd-a8ab-4439-a704-1b85eb90c06d": "bed", "0ec7fc7d-8e05-3f6f-832c-f2ad1b4b1769": "chair", "011b01ee-dd87-451d-96a4-d4b8b1af5a3d": "coffee_table", "27a26a80-217e-48d5-b9e2-72fb73cd4dd4": "stool", "848132bc-fcaf-4770-98f0-77c622a9704a": "ceiling_lamp", "594a44b8-da84-45b3-b448-8ad6d355290f": "chair", "0911a656-0d84-43fc-b176-cf2085ec0ca0": "bottom_cabinet", "49a1cb9d-71c4-4e91-8fad-b4a963422c57": "shelf", "94976888-1d1a-421d-a4ea-d60ebf5f7775": "chair", "441e1921-ed75-4191-ad0f-397b884d1021": "ceiling_lamp", "27f11b18-2514-4ead-9800-fbaf65e20329": "bed", "cee77dc8-ba79-49e3-adf8-0f70168dcead": "sofa", "414e93ba-cf64-44d9-92d4-cfc5ff09731f": "bottom_cabinet", "e2b4cf55-bad1-48f0-a486-9791e6802c14": "bed", "8358b15a-1a44-3670-a93f-02d45ed2a5c1": "chair", "d0dae903-414b-414c-8bfa-8f105e79844a": "sofa_chair", "b9c7a6aa-06f0-452f-b43c-ac5dc5e0ce24": "sofa", "392da8c3-da90-478b-ac7d-4e3b3ffe3e87": "bottom_cabinet", "aba17e44-719f-41c9-83a7-dd2ba2980e97": "sofa", "066db2c2-ff15-40d2-9da6-651eaa28e31a": "ceiling_lamp", "2afd2edf-1a32-4427-91a2-48110d874ecc": "bottom_cabinet", "8aa68338-d11b-4180-a15a-5313f5876ac0": "ceiling_lamp", "ed42a4ca-48c6-44b4-a9e0-0fde2501e66e": "table", "d5e7e555-b89f-4ada-b721-c015753a94d7": "coffee_table", "8181d2e8-080c-4afe-931a-b1a8acf96e24": "bottom_cabinet", "0d521015-9097-4339-8960-ae1a366d1a65": "bottom_cabinet", "cb120641-dd18-450e-bbe1-93496e7e5a7a": "coffee_table", "05bdab52-1b44-4183-929f-eafba68391f0": "bed", "72df2a49-425e-41f6-a65c-6d8514f4bff2": "bottom_cabinet", "9c617ad9-d176-4b62-bd29-383e6a4e5d6b": "sofa", "1cba05cf-7cce-4578-9f7f-856442eb8762": "coffee_table", "c5937f46-595a-4ac6-984a-fc6611d604fe": "chair", "82574b5b-0ef6-3f42-b0d2-b0b135f78ed1": "stool", "226745c3-3118-4501-b90c-8f7f8a89331a": "sofa", "ad7a4df3-d162-4fc7-924d-b76f2014d184": "bottom_cabinet", "fcb7b0b7-e74f-4397-907c-37cd2fe9efbc": "coffee_table", "5a829b8d-4fea-361b-93de-5af6fbd16481": "chair", "3cc05e45-1d67-425a-a99c-3e8cfe4f533a": "bed", "cfa45fc2-9dd3-41f4-ae34-8b16f03d96cc": "table", "7f4a635f-ac2d-403e-bf22-6b8f8d7e0dbe": "bed", "21ebb733-0355-4299-8f7a-52865417b8a3": "chair", "f9b23849-d9ee-435e-9668-676a5cc8e594": "ceiling_lamp", "6a4f622c-95f0-46e6-9e22-2d5ef711b27b": "shelf", "0b8f9a08-7f2e-4167-9f91-8058c8955b81": "coffee_table", "54e9a71e-d4eb-43e2-bede-5b4c406894ea": "bottom_cabinet", "4385e5a4-61ce-4976-b9b6-3733ca3eaf0a": "bottom_cabinet", "080b92e9-ec14-43ec-81d7-835f4b1ebb40": "bed", "e72c1b48-89c4-408f-831c-9a2ff6ffb291": "bottom_cabinet", "6863834d-718a-4e93-be23-aa2fb45b6b51": "ceiling_lamp", "e3560eb3-d4e1-4add-8b51-b3dd5ec6943b": "bed", "72e08436-c969-414b-ad6e-d3eba114220b": "ceiling_lamp", "7ec19d9e-19ca-31b2-a4f4-93fb12a9f27b": "sofa", "5798c184-9021-3555-8ee7-f376815d0076": "sofa", "c83b3213-33ac-4b92-b9e2-77baa86cf1ff": "bed", "9df1ad87-bcd6-4fda-ab1e-cc67eece0880": "ceiling_lamp", "07b75cfa-1b61-4b7a-8a32-223ad4c18409": "chair", "8c832312-91b7-4034-a8a3-72a664fa6bb3": "chair", "0aa5431c-5410-436c-a7ca-a332d1379ee7": "chair", "746f9f7e-b54a-4607-a3bf-07c91a397eb2": "stool", "5c84e17c-a2e4-48f9-8b00-bcaeaaa9373e": "sofa", "e0c1c56e-10f3-4b38-a9c3-9ac704fd5768": "coffee_table", "1aa6abf4-2464-4d91-a283-f38c6d33f592": "sofa", "96f2f1f6-8dfd-402e-af95-4f6e6af203c8": "bottom_cabinet", "1fba3582-9fcd-4609-bf19-3b8bff77a5de": "sofa", "3cb2af3d-0728-47d2-beb2-1c442e3f1d2a": "shelf", "4b0d7eb3-a00e-4211-bac0-a21513cc55c6": "bottom_cabinet", "5e5731fa-3e5a-4169-bae3-966c08290aac": "sofa", "a73611c9-2e6c-4a93-ba67-11d95c482710": "bottom_cabinet", "1abc5a82-85a1-3fb9-ae88-792ad8fddcac": "sofa", "542495cc-d00e-3712-86fd-c2fe6e103e66": "sofa", "edd946e2-e35d-441f-a7b7-90b5476c61c1": "shelf", "3be52a81-804b-44a6-a0f1-c8bbc9639a3b": "sofa_chair", "b837e50b-2a7d-4b3c-b321-495f261acd2d": "sofa", "82838375-1b97-4cb0-902e-e978b528e317": "coffee_table", "1cd5a0b2-8876-4f25-ba64-a6268edb3e64": "bottom_cabinet", "567b90ca-3733-4dc1-8968-3c4ed4ffeba4": "chair", "74fd7665-fe72-3b6d-bbb0-a759dece6457": "sofa_chair", "635c3cd1-a3f1-4ede-a0c3-540631c7feca": "sofa", "2a602a2c-37b2-4e5d-bab5-394d706d06f3": "ceiling_lamp", "58194c8d-803b-49a0-8a36-6347afe7bbbc": "coffee_table", "f08a44ff-5840-4d58-ae07-f21e80e1194c": "sofa", "9bfac98c-e636-4633-80db-8e625b344823": "bottom_cabinet", "57c01ed5-a5e2-4221-ba84-545d2ddc0c17": "bottom_cabinet", "58904320-f2d9-4088-8cdb-9196fc99cb91": "ceiling_lamp", "192febf7-cfa8-4325-8c0d-e020e92dea63": "bottom_cabinet", "66abd0f6-acc6-4f2b-80f5-867210ccb2ee": "shelf", "5dcdeebd-5b85-4d01-abb9-dc1b38c7a778": "sofa_chair", "4cb0cff6-41e7-487c-8476-9253a21f88f4": "shelf", "4e4a697b-e59d-4ca3-880d-cb6ed4f60237": "shelf", "a22ad830-f2d6-4afc-8d48-af1a79593e97": "sofa", "18005d32-1e3f-49b0-88eb-dd3081433cf3": "table", "9874b942-70b0-40d3-915f-a015dc9bf489": "sofa", "ad019f8c-2c85-48ae-90b8-4287ec72e9df": "bed", "78bcc4b2-d186-4f0a-98aa-09d77cd397ea": "sofa", "2e20ed65-b2ff-4c1e-afe9-240ab855daad": "stool", "c77abd27-6278-4472-b4ab-1464c7644307": "chair", "484680bb-f5f9-4dc9-b40e-22844b32c83f": "chair", "10e0fd38-6a35-4635-81f1-5bf18e741fd3": "ceiling_lamp", "06bb1295-131b-471a-8e97-66251b0f79fd": "ceiling_lamp", "e287c8cc-ba68-4787-972a-008f36f39000": "shelf", "84e912d9-105c-43d3-b0ae-be0e754cd486": "bed", "06c15b5e-2354-43f0-bef4-82ec94ee9ee2": "chair", "793506bb-13a0-4f1f-96a9-04b600300585": "sofa_chair", "e961b6cc-44ed-4525-b3bf-d7a45cdaf9e9": "chair", "566ef201-0d00-40c4-9f24-d89a679549e8": "sofa", "56d90ed2-7488-4a58-9464-5731b74e7d64": "bed", "72436392-4e6c-3a01-952a-eae941071c98": "sofa", "39cffdb6-c2c5-49f3-b987-6d4d09718bfc": "bed", "0f2d04fd-dfbc-443e-87e8-4df92160cc45": "shelf", "61e67dd1-ad02-35f1-9232-8839d71d2ddf": "bottom_cabinet", "64548939-41e3-425b-b358-0d0e916a516d": "stool", "8076578e-eacb-4865-8d1e-4b977bbe8a61": "shelf", "b2e724c7-33bd-47aa-8113-af03aa790934": "sofa", "1d3db9f7-0a1b-487b-b6d3-a70db74e1349": "chair", "adc5fb68-cf1e-4017-aead-49ba64734db9": "shelf", "6592885d-d992-3520-99af-68938059d874": "stool", "386f64a3-b66b-4f6d-b09e-b57fbae35a32": "sofa", "5bebb1eb-9efe-46f1-a995-fb381e4a7a62": "bed", "27ee0648-009f-42de-a19f-2887bab6ed49": "sofa", "72a765a8-ebb5-4b01-898b-95dbf84dfc15": "shelf", "f818405e-5146-4440-9e37-1e5af11da1a4": "stool", "060c4f7c-0640-4e5a-884e-36250b2527f4": "shelf", "f83f04a2-736b-406f-be90-8023a96aeda7": "ceiling_lamp", "5a475ced-bb47-4c14-aaf9-55f665dd5468": "chair", "47ef9a66-b01c-4763-b415-09292d54512e": "shelf", "5e74793b-1a0d-3d51-91ee-6179a204c07b": "chair", "215f41e9-f851-40f1-b2a2-d9daacaae1b9": "chair", "484b1fe3-4aa1-40d2-852f-00048cd1b1f5": "coffee_table", "98b7ef33-70f7-472d-8787-f4c97bd1cacb": "chair", "9fc7379c-ef9f-4973-87bf-42565f410663": "shelf", "7e0db7d4-cbf1-4c7f-9787-048cccf32d8e": "bed", "806d3a54-d3e5-45ed-a912-cb46793d0a76": "shelf", "940fd971-7295-44fc-8c5d-3f8462583da2": "sofa", "1aa71039-c31d-41c5-bddb-e9bce0adef45": "sofa", "ed26c82d-abad-4b7d-85ac-13aa5d333d20": "bed", "2aae5836-eca9-45f8-aa3f-f95dd9b57458": "shelf", "87fb9f00-c2f8-4d16-8f75-ad56e1e3412c": "coffee_table", "bd480c30-db5e-4361-983b-a8373f8441ef": "chair", "804fa634-6715-3ca6-9113-2eef6d83438c": "sofa", "45bb8a3c-4935-414e-8204-94631efefb9c": "table", "43972619-2408-442b-afac-c0e0f51b344c": "sofa", "3cd3e784-08d3-4b29-9081-9fb299081d57": "ceiling_lamp", "40b47eb6-9abf-49c4-82a5-9644deb2c40f": "bottom_cabinet", "9b139b95-4c82-4574-a575-805325525c25": "chair", "5550d8ad-da7f-4a48-b96b-5557ba83978d": "bottom_cabinet", "acd94a9b-a0d2-4f53-a734-b1a431ffd5f7": "coffee_table", "0ff2235c-d954-4b07-935a-5e4dd2c583a2": "shelf", "f94e9114-b6ad-4e39-b800-13e06f8da709": "sofa", "ccb08979-0219-49fc-9b4c-8cb4f5770647": "table", "5d05b0d2-afaa-3e9e-9410-34237bb98eff": "sofa", "0ac76760-7f74-45ce-8c78-761c131f5b19": "ceiling_lamp", "dbc49bb6-e9a0-4ffb-8fce-c4abfe1d0bf1": "sofa", "1143ecc3-183c-4596-a029-28afcb3e049d": "chair", "5921e731-07e7-42be-9b2b-b7e7025de569": "bottom_cabinet", "af899b3f-5bd2-4470-84eb-564fb87d56e2": "bottom_cabinet", "14e15ab7-0601-4f17-8cde-e249c2038048": "sofa", "9a8d260e-259e-4aa3-9972-7e987f0a5240": "coffee_table", "27a67254-913a-43b1-8292-ca73c8998f91": "coffee_table", "619aafec-5d33-4455-92f0-58c07fb3cb50": "stool", "b3451fff-be8c-4c0a-b653-0d767ffccedc": "chair", "4da192f1-bd83-4705-9b64-d28b51914450": "ceiling_lamp", "1a44b604-fd57-4736-809b-744950970253": "bed", "d1f19589-025f-4bb5-8aa1-c75ff2d04e37": "stool", "d9ad33bc-dc3b-4222-a28b-6eaaa96b5098": "shelf", "01c82c34-119d-4401-b403-44d0e2aba10f": "chair", "5ee9858c-f352-4c66-befc-695b65e5457a": "chair", "77b33125-7e3a-4e21-82b5-7dbc7b9a286e": "stool", "406fed21-44d3-4a4c-8bce-e942e80856a4": "stool", "677a320d-f001-3eda-92f2-0fe761cf630b": "sofa", "2cbbf03e-c688-465c-91fc-4352600fe485": "chair", "a91e11fe-c219-47c9-a0a1-5fa46b9a1af4": "bottom_cabinet", "5966378d-25e5-3b81-86df-f7114040c134": "bottom_cabinet", "4c9e5d2b-9976-337c-94cb-bb1d7597885d": "chair", "5a0f0f5e-56be-4e2d-a2aa-74e1a280a6d8": "sofa", "7c6fdfb6-e526-49bf-a733-14ebf0aee5fa": "coffee_table", "1e64fb2e-8995-45a3-b69f-d55d53ae8f38": "bed", "827ed0b7-67ef-41fe-b8c4-91e8a36abcba": "bed", "5e42db5e-3361-468b-8d82-d9c35a286b21": "sofa_chair", "1ab13bf2-6378-3ea3-872d-1a3d724f8954": "sofa", "73e85e57-b389-494b-81dc-5827c238cb1b": "bottom_cabinet", "7ecf90e6-79fd-4bf6-ab74-8b72600419b7": "sofa", "710ac4e9-9853-435a-b33d-3bed1f999957": "ceiling_lamp", "1fe606ff-0b70-4411-bccc-9951a7a3feb1": "sofa", "a87a9ae8-e548-488e-8769-b4bc530b35fa": "chair", "8da3c057-f472-49e7-a607-811d2b3dc90d": "bottom_cabinet", "4ec045ba-18f3-4d25-978d-36fea5a83a85": "chair", "89dad353-299a-4a67-8048-145ae09963cf": "sofa", "292c2ef0-f04f-4d1d-b051-b12dd7c47ff7": "sofa", "653efc24-a5c5-4f94-86d9-1256dcf4bc28": "sofa", "713059bb-b8b8-408a-9374-038df1deb3e2": "stool", "3667cf4a-21da-43ec-be1c-6728778a6a1e": "sofa_chair", "13b7fa75-c852-4403-bd63-2b0ffb0051ca": "coffee_table", "3f12bd1d-d542-4405-a12e-d91f0147232d": "ceiling_lamp", "2023ab55-4098-3849-9879-ea3f9f451223": "table", "39f28ac7-48be-4fb2-8946-da2130961431": "coffee_table", "deef724e-97ff-4e08-bb11-b2ccd3c6f86a": "bottom_cabinet", "9b6864a3-5a08-43eb-baec-dae80aad1f12": "bottom_cabinet", "8f384f23-6d20-4917-bff8-660fd9d65922": "coffee_table", "8cf0f886-0ee9-4f2d-8462-38783e39a9b8": "shelf", "9a65c8d9-21a4-49a3-9852-d0c78bcd8ec0": "bottom_cabinet", "631712e5-48b5-4f69-88bf-5016ef205328": "sofa", "99447c8e-3639-4726-9a8f-450b879a46ad": "shelf", "83c43ab5-7f54-4ee3-bf66-4bb2861a2324": "stool", "935df7d7-b1a5-44b1-8eee-7868db9e95f8": "table", "4e269ffb-09ac-4244-a680-db65bbc33980": "sofa", "5bf22970-ea29-4614-af88-d88cb25800c1": "sofa", "8b8e6917-51bf-43f5-a2ed-44822c0ad710": "coffee_table", "7f89ac93-4eb3-4701-85c5-7a03f4ec6a6b": "bottom_cabinet", "79ede4cf-04c3-4010-8dcd-6aa4e9f5eea7": "coffee_table", "50dabcf3-56e2-4b5d-af13-e25e7af0325f": "table", "4eac94f3-c301-420a-9a2e-c327db12b121": "stool", "486f51ce-1401-3d47-8cc4-27160b1194b1": "bottom_cabinet", "e4523470-d2fc-4e14-9e94-413100f9a059": "sofa", "e46792a0-8a74-4c53-a5bf-98ce52a3f203": "table", "76ef274a-3977-43f9-aa52-9056a89d8f16": "stool", "eddaa6f4-a280-426c-887d-447889d51461": "sofa", "cdd80b05-133b-45bb-9d17-61398161370d": "bottom_cabinet", "1c5527f7-42e2-48ad-be12-6a5f955f8091": "bottom_cabinet", "10922a21-0e57-4104-b368-ee425387dcbd": "bottom_cabinet", "03949e26-c747-4b71-8fb1-2799a07171b5": "sofa", "3d73cf6d-ccd3-4adb-8227-5639bcaa5a30": "chair", "9bab8067-6b18-4b4c-b980-92b690005387": "table", "30504ed1-078e-463a-b67d-29a311e6a81c": "sofa", "76d1b15e-667e-4b7a-b6dc-74bf7626350c": "bed", "2213c5f8-7a10-4029-8d4c-1cd44559a5a0": "sofa_chair", "46da3b9f-78ac-4e0a-aa6b-da85dbf6cb46": "stool", "6647b4a6-af32-4a93-b652-3d5fc4e1e9b8": "bottom_cabinet", "6e98b8e8-6feb-479a-a122-5523b9620819": "chair", "a2a8b471-48b3-4dd9-9ffd-dcf66d72dd58": "bottom_cabinet", "449c28c5-9a78-4c1a-a56c-c01b129b7b1d": "bed", "54d8c952-1a99-4fbc-9105-7249eea8f2a0": "coffee_table", "9e0ec8f2-7775-4b5d-9935-565970298699": "coffee_table", "4567b936-bbf3-4158-b683-ba74c5348930": "sofa", "241c55e2-7ca1-469f-9996-99374f1c03a5": "bed", "0aa3def2-8331-4898-a417-3d59a71de16b": "bottom_cabinet", "62d597da-8a71-4e23-a30b-2b229b55d970": "shelf", "78b0ba9c-b76e-49f0-88e9-118e59ab1914": "coffee_table", "3f59d8b2-c84d-4be3-8dac-902aae6f9fb6": "bed", "25d83f53-f68a-492f-8709-e846960e203e": "sofa_chair", "5acb2e1a-52a3-4c48-b1e8-cff8a8629fbd": "bottom_cabinet", "376f0d51-0231-35d5-b4f4-a25b6e7b7ecb": "sofa", "70e6bdde-3c7e-4561-b775-c0fdf72d837d": "sofa", "43703ab1-caf3-4f95-a710-2743e4cad4e1": "chair", "be834ec3-9886-4bda-9c7f-359ef7b350d9": "stool", "ab431a58-4ea3-4e08-9bcb-7de8e8046bec": "stool", "662b55b1-28bc-40cd-be4b-e4eac270c160": "bottom_cabinet", "4f501ce5-28ab-4d40-9547-5be1311dc29f": "ceiling_lamp", "d75f726a-9f38-4a89-bcd7-a3bd518bb670": "ceiling_lamp", "62fedc5a-f443-45cc-bec6-e924825755fa": "sofa_chair", "221f31fd-1759-4c14-b183-77a0ac51b55f": "sofa", "ce81a168-c515-4de7-a20b-e8ffe76d75ee": "shelf", "eb95db5a-76f3-49af-957c-b82056cff8f5": "chair", "51d8f810-d983-4ab4-a460-0f3c4c8efa30": "bed", "b4d96243-b31f-4b44-a194-a159627cc37a": "sofa", "810a0a22-4282-3538-a687-470dd3c4fd91": "chair", "d84dcb47-f671-4538-96cb-0cbac9ab1a65": "bed", "3b3bb273-5e5e-447d-ad41-1db7384ef8e8": "sofa", "dee3f212-4b3c-4ed1-acc0-2f7a4d19b116": "table", "37c98801-a6c8-46dd-a041-3799630a1989": "shelf", "a585fa24-e819-4809-954f-f0bd3162ee88": "coffee_table", "80eaadb1-6f24-4dfe-8922-7c9432871c53": "sofa", "0b2fe64b-e114-4f82-be7d-136d07e82e6d": "coffee_table", "fd8d88e1-10d4-4666-b544-e2419a0fb9b2": "table", "3d52bbd4-b771-41aa-8b06-407b40c35479": "shelf", "018cf659-b7a0-47cc-8490-27e3e00ed483": "bed", "b0fb44dc-9186-4de7-87f6-a5b6b3ded50e": "ceiling_lamp", "0ed07f15-7663-45aa-bf80-070a15f452e3": "sofa", "4a4761bc-9f6c-43d3-993d-ceab92569d3a": "sofa", "0dd4707a-459c-3947-a95a-77043abd7a01": "chair", "2c6e2df7-2279-3902-a444-e0245190dce7": "table", "441ef2a1-5f80-4eea-a7c0-176d1bcb9a8b": "stool", "4ef5530e-ccd4-4f07-8961-908d02a8e093": "bottom_cabinet", "2d2442a4-04a4-4e92-859e-a6bdc1b3e51a": "bottom_cabinet", "6fbc8e89-ab8c-4a6d-8a84-0846b46d2da0": "sofa", "063aa0bf-75fb-37f3-8b1c-6c977c9bfcef": "sofa_chair", "0dfad82e-ebf0-4d55-b1e2-c5bc75ab0511": "shelf", "35b9551e-9267-4297-b42d-1f8dd1cab089": "sofa", "1049ad25-2919-41ea-8e6e-d23555ca6d41": "ceiling_lamp", "7281cdef-1185-440c-8465-3e1052043ca6": "bottom_cabinet", "536ca8fe-8e90-4d9b-ab8f-a797f3974a45": "chair", "5941da44-f3ca-49f3-89f9-1f150ae26eec": "sofa_chair", "5d538b61-ef5a-4657-8ecf-6dc90002afaa": "bottom_cabinet", "67aa7939-195d-4bd6-95ac-45b173ca5f5c": "stool", "25225938-c47e-4f19-8816-1557d5bfb05f": "sofa", "6148201b-cd56-48e6-84c4-c08eee58b898": "bed", "f938d56d-3c3d-4ff8-a42c-d0d474d38e39": "stool", "04eeb551-05f3-4908-b820-c64d1f3ce63f": "bed", "130de557-bd34-4f53-abdd-7487447a007d": "bed", "61381470-da68-3ce7-98c1-9883c9cbc1eb": "shelf", "6b2ff6b4-f90c-45ca-ba14-3406bba8457f": "bottom_cabinet", "127406da-6400-4858-ba37-bb0ce96f773b": "chair", "7d60aa62-4305-4b6f-84e7-7fdc24790afd": "ceiling_lamp", "5a8d8098-cf8c-4109-89b8-39e1e937e8ca": "chair", "6e4f9e97-8e87-42dd-b78c-2d630a3b445c": "bed", "dde8dc65-731a-4c19-bf7e-f4ffdd6ae7ba": "chair", "0fad54ca-027a-4604-b1da-2956ff696e6e": "coffee_table", "76ed78f5-36a5-4bfa-b6d9-797182d70be7": "sofa", "0c409bce-5f41-4d5c-8b74-1577e843d604": "chair", "2f001052-5298-4548-bcc8-27aa9282b3ab": "stool", "143e78e7-19c7-4e36-a5fe-050ace140184": "bed", "a7621218-bd3a-48ab-9694-9f307bb4ba1e": "ceiling_lamp", "e8c3140c-053d-4b0e-969b-64c149d9720e": "bottom_cabinet", "63971f62-71c4-4673-90a1-38524836c0a6": "bed", "77edb23b-2a5f-4a4c-b6ed-8f96f5531a8e": "bed", "63fb829b-fe84-44c5-8449-ddabff483630": "shelf", "2adad0dd-7e7a-496d-847e-4d70eaade1df": "sofa", "63770650-a553-37a5-be08-99960d7d6ee5": "chair", "bb2babab-9064-4bee-90a1-ce4681d6cb1d": "ceiling_lamp", "3da11e21-92d3-4543-b342-105c324c39c8": "sofa_chair", "0ae519fb-7a9e-4788-966f-e90e21d13cb4": "bottom_cabinet", "cc00a491-43e2-4dd7-82fe-d756184b3363": "stool", "35b38447-4597-4297-838d-8392f62e37c3": "shelf", "49270dd7-7db1-496f-a619-1124e638d37f": "bed", "81c0f1b5-e03f-4524-b001-76217aa6bff5": "coffee_table", "473a97ec-e818-4b43-8510-88a00eccc52b": "bed", "ebc44285-ee7e-4cdb-968f-96771b761edf": "sofa", "6843ec0b-dec1-46c1-9d15-f84b308252f2": "table", "deb037a4-8082-48f0-9c6d-af866dc31c92": "coffee_table", "083e402c-d38f-4bdd-822f-e06465d46457": "bed", "58438343-a954-4e16-aa5d-80f00ed5a0b0": "sofa", "5b85e8ec-9aea-344d-8766-32f741f170a1": "table", "c2455922-3285-443f-886c-73a06874423d": "ceiling_lamp", "97f12f67-508b-4cdb-8e0c-ea0e20cc0805": "ceiling_lamp", "2c918c67-03a6-4451-94a0-d643d1abd95c": "chair", "0c2cf1d1-759d-4009-8ce6-499a21f1a3f2": "sofa", "30c91dda-6485-4980-8490-27541bd6710c": "bed", "1c07be82-8936-433c-abb5-ecbab233f3cd": "chair", "ad337b8d-db4c-420e-824b-c77b8a14cff3": "sofa", "2997b61c-85c2-472f-b492-bf25d20aae70": "bottom_cabinet", "7aa0c7b0-ee66-4c61-b03a-c594d9cc4064": "chair", "b78cf8d6-eb50-4977-b4ca-e05c68acf253": "bottom_cabinet", "38537074-3040-35ae-9908-0a729d498eec": "chair", "5e82b82a-c5cc-4d27-8082-202c55b56bca": "shelf", "0b2dce97-c99d-4892-947c-3fec708a8c2f": "sofa_chair", "90daab82-8a2e-4d46-8fff-1bf44f6723bf": "coffee_table", "754fd5e2-a3d0-4ce7-921e-9ac29558a03e": "bottom_cabinet", "0ea463c5-c7b3-4a8d-93b4-dbc6b0f356eb": "ceiling_lamp", "0484c891-8b77-4ffc-9488-0fb020589d7c": "bottom_cabinet", "c2dc341d-e8c5-48c2-afcb-791cd99bcc9e": "coffee_table", "226c643b-4a05-42da-97d5-3742c9d654d1": "sofa", "abd30bc0-35e4-48a4-9b37-9a8ac45dff0b": "stool", "597a845a-5754-4abb-955f-2e292c89b2c5": "coffee_table", "b76dcb44-579d-4f37-8ca4-8259ba37d6b8": "chair", "4d14baeb-0b49-4522-8792-b403a7ab67a1": "shelf", "2d35e882-8f86-375b-82f0-c9af2be7737a": "chair", "0ff9e550-d0a3-49ef-b996-471107204b5e": "sofa", "74ddb581-3e00-43c0-ac78-63f6f765d0d2": "bottom_cabinet", "2634aa6d-fa1a-4440-b2e2-0f19c0fff124": "table", "f7553373-a2d0-4d09-b431-85ad12e88eb8": "stool", "bbd0f2af-7e6f-4a2a-bff5-0eb73c2fc7bd": "shelf", "ef8be535-4561-4923-9bc4-e64312dda48d": "sofa_chair", "0ddbb652-14e3-4e01-8fd5-aae213910ac2": "coffee_table", "3ff714e8-29f7-303b-9609-8eea7c144741": "chair", "67edc3fa-0342-46fa-b7bc-73c4b64bc004": "chair", "fc6b1d8f-e38e-4bd8-914e-4e019105765e": "coffee_table", "a08867ac-8370-4645-915a-58f23d263b97": "coffee_table", "fc21d53d-30db-4a3c-a717-82359d2170e6": "chair", "7a14b8f7-4c05-470f-9964-9f5de7b34412": "sofa", "a8715d51-381f-4fd5-b744-ba8d96a60497": "sofa", "24de449c-a06b-4561-8641-f9cb6407b62c": "bottom_cabinet", "86f06454-e6e1-47b8-bf77-c2bc3640f09a": "ceiling_lamp", "5ffa7939-b0bc-40f8-b9a8-6281a66f6af9": "coffee_table", "57bc51d9-1f14-472e-8e5e-d4d3254e703e": "stool", "82a44a96-155e-4f95-a7ad-d1e22297cada": "sofa", "9edc708d-be83-41c4-9f8d-8f80ade68a4e": "bottom_cabinet", "5004e8f6-326e-4e46-8581-ad88f55c25b4": "ceiling_lamp", "559c6191-5328-489f-bd2b-29f7f80d979d": "sofa", "8042d0c4-443a-427a-96ee-1fa4fb261da6": "bed", "14db6149-925c-47ce-abb7-3683296e3252": "coffee_table", "9b666081-d547-44ed-ae34-e32f0c467755": "ceiling_lamp", "0d6dc583-09ed-4fa1-a45e-b30e82c94a2e": "coffee_table", "13527984-eff9-4dc5-b53c-3a0d615d0c78": "bed", "066a6e67-86a5-497c-93ef-95ee8cb3093a": "bottom_cabinet", "55a4dbfd-89c1-4f48-8542-0767b0e5b0e2": "coffee_table", "237836b2-7d7d-4469-9672-dff828358828": "sofa_chair", "27e5fd83-5383-45da-927c-6d2bc3a77508": "ceiling_lamp", "adf03899-13d2-4fef-b091-3d14af7cb807": "bottom_cabinet", "f25f7759-4878-4e5b-b3fd-83b8f912e28f": "stool", "1aa5dca6-9194-4508-a846-d6e198aa8823": "shelf", "da64b6ef-d704-404b-a0e3-866d0e091362": "ceiling_lamp", "64b44dd9-19ad-3235-b93d-c5f9c75e0257": "stool", "a2d6e01c-cac3-4706-bedf-59368d6638f2": "shelf", "795632a8-a440-4c80-9f97-68f856697c81": "bed", "4e4638cb-159e-3d49-a622-fbac394102e5": "sofa", "0207d0ca-ddda-3740-a866-8031de2f2ad8": "table", "a9f1edc1-db17-4a88-8cdd-e006d8cbc187": "ceiling_lamp", "57de3ee5-806d-4850-8508-ecb98356e126": "ceiling_lamp", "460d03f4-c8f8-3416-91eb-7d3690ec353c": "chair", "c97bf2e1-1fa0-4267-9795-b53b19655601": "shelf", "1c52c6b2-0e7f-496c-82ad-10636ee89e3f": "bed", "10ba4831-6d29-460b-8eea-7badcf25cef4": "sofa", "0cfd7b6f-d676-4625-8296-cf8bf990c7d3": "chair", "473160b2-afce-4bd8-9541-046cc37c9fd3": "bed", "11b006e5-9697-4146-808f-e1e73aa76fc4": "bed", "9b872898-f8a3-4e4a-bf1e-98b1c4fa0d3c": "chair", "556a3cff-2f81-484f-80bf-bc9a661d7d8b": "bottom_cabinet", "44be76b3-f4c8-4e23-a178-0768398674eb": "sofa_chair", "650ee22d-6dd8-4505-8e1a-77e7968c94b6": "table", "1338705a-26de-4b89-808e-687e243b46b2": "table", "66ab43b1-1944-49e9-9f46-7ebc80066f39": "bed", "a95d4ab3-e33f-4d38-a923-ccbe26f17725": "stool", "c7476973-4218-4687-abad-a35fd1ec99a3": "coffee_table", "3fc6a3f3-2f14-46b3-b06b-ce80ec5c7742": "chair", "fb81032a-9509-49da-a443-c58846129372": "chair", "1c680265-f628-441e-afc1-78d521ff42b6": "chair", "44b47cfc-3385-4ffd-a776-0021a3b7ce5a": "coffee_table", "bcfc7aa7-555f-4b9f-b242-2b78b4e6bd7e": "sofa", "55e423bd-8cbf-4a22-9bc3-7135bd92be7d": "bed", "80229416-b3cd-4db0-83ee-61c6645a04cd": "bed", "779cc50f-6bfe-41d9-8c27-7671bf77e450": "sofa_chair", "dddc3e53-d038-439a-bb3d-644945f20a1b": "chair", "66351e96-10d3-42fa-9edd-85ddb41f6467": "coffee_table", "5f41adee-8f09-4431-b246-6cf93d78f4d8": "sofa", "7ed123e8-b232-4e10-8c0a-cdd67c8d47aa": "bottom_cabinet", "79cbe7c9-c5a0-446a-8ce2-1ba3079693e6": "shelf", "a5835152-20a1-48c4-8104-3e9b924f1729": "chair", "f91d151a-f2bf-43e8-91ef-4e7e95728139": "stool", "f5c8c735-859a-43a7-9c11-00da41d2e73d": "sofa", "50e0460a-4b18-42b5-8eb9-e58953177b61": "sofa", "40aea91d-f454-4d67-bae5-cf05cdd799ee": "sofa", "3d86330e-9364-4095-981a-20d210d3b264": "sofa", "34f275f6-b8f3-45a6-b529-c87dc051d12e": "bottom_cabinet", "2804d5ab-87ac-4aa7-b13f-e6e85bb7f7f6": "table", "c67af1ea-fdbf-4fbe-9099-4962a781b43c": "stool", "61fae47a-8385-457a-920a-e462339a3381": "sofa", "b5f2a681-be8d-4b8c-9219-d19aa6ad8b9f": "sofa", "728b2ef4-01aa-30e0-83e8-571e4ea6cc8a": "chair", "d4c0ea3d-f9bf-4fe1-9db0-ba35803080fc": "bed", "3db3c2ad-1ee1-440f-9bbe-4b804afb8449": "bottom_cabinet", "6687199f-1e37-4eb7-bd46-35aa03c37795": "bed", "ec122679-f54a-4344-84da-7de8bb4cd4ff": "ceiling_lamp", "5ad1da74-541f-4453-8e99-ce8e66899018": "sofa", "21e5934b-dcca-401e-96d6-62523f2fa308": "bottom_cabinet", "43781675-a00c-427a-a7aa-255f4225e69c": "bed", "bcfa634c-2693-494c-9b20-c3eeb42f6a8e": "bottom_cabinet", "6fd571b9-2b81-4c58-9023-556628ecfdde": "sofa", "571fa98c-fe27-4f4b-a653-12a1517a646f": "coffee_table", "0bc4c410-240e-42ec-bf07-6589f94ef8dd": "stool", "47cdb25c-b39c-4f73-a132-6bc7deb39c07": "shelf", "0e2693d3-9009-48eb-ab59-f2b2f239f00f": "bed", "1c6f1892-23cf-41ee-b707-7d79fca07cf3": "sofa", "ee520469-b2d9-4552-b207-e674cd30a402": "bottom_cabinet", "cc58573b-1981-48f1-8be9-02e330d4aef0": "coffee_table", "21f7bc0a-44e6-4e8e-b3ef-b461b1089e01": "sofa_chair", "1a3d7384-e6ba-4954-9a04-8b75edacc994": "coffee_table", "952ee445-cf1d-4427-b69b-4c11bb08fb06": "stool", "778e16b9-d807-374d-b7bf-d4312a62764d": "chair", "3826da77-490e-47dd-ab86-eff80e251f15": "bottom_cabinet", "4d0767ac-5b1c-4cd4-b305-589fedddea98": "bottom_cabinet", "c3d16361-36b1-4954-85a4-2f8c64ab255d": "sofa", "2f0f9aab-258f-4be3-8881-0ddeada61e71": "bottom_cabinet", "736b0e6d-de6e-4045-91b8-b843ebee33b3": "sofa", "a743edde-1868-4368-86b7-c98dddecf265": "sofa_chair", "72ae3992-e1e6-47fc-b7b2-7123d234084a": "stool", "22f12a9e-f3a1-4fd4-b597-cfb8723aca74": "coffee_table", "b0729f86-70c2-45bd-85c4-2f32914835d5": "chair", "e3108749-98b8-45f7-8abf-e92677575e51": "bed", "7ae86203-21a7-451f-bfe6-ae2fde2f1207": "bottom_cabinet", "458be5f2-bdcb-4379-af73-94a13d153b44": "sofa_chair", "940e1dd1-e3d1-4afe-94a5-e7ed0e329b0c": "stool", "90cc27a7-81c5-4616-bf5f-08016a33c19e": "ceiling_lamp", "4890e48b-62ec-45a7-80eb-d9111b9619e7": "coffee_table", "5da5ca38-55f9-4818-90ee-20bc04a9cf2f": "bed", "8d2b167a-2712-4a6e-895e-96fcd9b2625b": "coffee_table", "d3d5c68f-5151-43ac-894d-9e1b511be372": "table", "790e4964-6e12-4e23-b44d-19df9a2fe4b7": "sofa_chair", "653f62e6-b6be-4b5d-825a-ce80c0193176": "bed", "a5b6a7ad-9bbc-4d55-95ab-5d2123b3d6a5": "bottom_cabinet", "44979314-e61e-447e-8b07-d96ef6a59a9a": "sofa", "1f83cab1-6800-4c47-a6a2-2530b1c84dad": "coffee_table", "527f2837-6bed-42ff-a917-45d55454e0c5": "sofa", "cd969ec6-5ff1-4aef-900f-cc2d320791b3": "coffee_table", "d4f7f73e-4017-421c-86de-e67cbfef6740": "stool", "0eca2caa-1ed2-40f9-a54b-57f613faa655": "stool", "c4a12796-d8c3-43b8-a7c3-659520f2c1c6": "sofa", "bd05d6c5-21d5-4d4e-b2d5-8ce1a51c3cfb": "shelf", "138c90bc-8505-4db6-8920-87a6421e66f0": "shelf", "ecf282da-737f-4269-a994-df00a82cad1a": "coffee_table", "aba876cd-aed8-4bdb-956d-ca3e3946c3f8": "bottom_cabinet", "7bcbfa10-cf55-4eb2-b3f8-00a90a912223": "shelf", "6f6c6f4e-3e4a-4426-958d-83dd81f293d3": "sofa", "59afc8a5-9b7f-42e4-a74e-6ced25369f59": "ceiling_lamp", "5c974638-7af2-431f-aa1c-57044deacf96": "bed", "00b8fe1c-2ba0-4a25-a7d8-44e278cd9f7d": "sofa", "e1389435-c8a4-4182-ad40-cbb2dbbefa05": "ceiling_lamp", "f563f18b-e429-47f9-b61c-eeba5726fce4": "shelf", "254b1e17-3b4b-403d-af3d-7e7767932249": "chair", "28168dbe-1c54-4d60-a796-a8409b875c49": "sofa", "46daaca5-c7fa-4db3-a2cc-74e891e98030": "sofa_chair", "b5e6468a-1f25-40e4-b38c-7e6969fc2605": "coffee_table", "4653b7da-d205-4380-a6e3-b0e2bdc475d7": "shelf", "2b7dae6b-46a4-41de-a2c5-3e2c557eaf2a": "sofa", "c28de481-41bc-4957-809f-251d66997a31": "bottom_cabinet", "bb429488-2de8-441b-88c6-91c8f562a60f": "shelf", "a86e27f5-9af8-45d5-ac87-6f67572002a0": "shelf", "f0193173-d768-4f43-93f3-5a1a9f1a97e3": "stool", "49810b6f-d8bc-45bd-9bdc-a1c1d4a97b45": "coffee_table", "1cfe1c8d-271a-46cd-b982-9bc91beb0c62": "bed", "7642699b-893e-4988-a7d9-73daa2f8f83a": "chair", "bc951ea9-e184-4504-9cf2-01273f51aab9": "sofa", "0a631571-4180-404b-9a26-24b37e7f1fed": "sofa", "db713c49-9294-4830-8c7a-88aaee741202": "coffee_table", "6ee570c3-4435-4b68-b1fd-65e6d34375f9": "sofa", "ce090c4f-3c69-430b-bb50-d6656edfc412": "bed", "250acddd-7d4d-4f22-8fb6-603ac07c8c39": "bottom_cabinet", "a521de03-ea95-4865-85ed-9b041eba1702": "chair", "cf98e3fd-fd01-4179-a68d-f66809c90fbe": "sofa", "57cb58f7-2362-4141-b971-d084b8775a7e": "table", "a0254598-4f8d-46be-a94e-bfd2f2e85114": "shelf", "e88490b3-d3ad-4e0c-aa4c-3eaf9d45834b": "shelf", "2b9af779-a73d-4f37-8d62-4a537bd041be": "ceiling_lamp", "2249b4a3-59aa-4dd8-98b5-97c09d22cb08": "bottom_cabinet", "572680b5-2a79-46e6-ab8d-baeff14b4cfb": "chair", "51db51b3-7a44-4755-a3a6-7b85a70abbd2": "coffee_table", "146d13af-5e0e-4032-8be3-71d8b6ca8406": "coffee_table", "c6d8d8a6-e89e-4daf-af35-ff9222d74e99": "chair", "00ac04ff-59b1-40f1-a95a-f1f6e61a6de6": "bed", "9dd3b6d3-9234-4395-a21f-b7514402ea17": "sofa", "e2138007-7c5f-41de-b6f2-c1428afc3978": "ceiling_lamp", "4fa9fd58-999c-4b46-a0a8-d43719916c41": "bed", "00033fdb-e9f8-4abe-aa9b-878761356d35": "chair", "a36dbd6d-ad42-491b-a1c7-7cd44579a691": "ceiling_lamp", "894bfdab-c7c4-4ea5-8624-a545b9dd8dae": "ceiling_lamp", "71665aa7-5aae-4f25-bb3d-1fecd0cebc84": "bed", "c6e3b4ec-23f3-43ab-989f-4bddbc0ae02e": "ceiling_lamp", "fdc1d46c-5602-437f-8181-68ad883e635d": "bottom_cabinet", "65854cf3-25d9-4c26-b102-65b72a2464c2": "shelf", "5d6b789c-3ee9-438c-9333-6f8f17b01c2f": "bottom_cabinet", "2d2782b8-f8ff-41bb-b580-1e4ba93bb841": "bottom_cabinet", "fdea2986-6f48-4d4b-b041-c7b91911b07c": "sofa", "14ec6485-34e8-45a8-af29-cee7aa38b610": "shelf", "14a8635b-e6ef-4561-88d9-6c21f09eda27": "bottom_cabinet", "02ca8be6-bd56-4978-8d94-a49dc559d60f": "coffee_table", "04dbb0ae-ef47-4138-9d8d-46dc6057b289": "shelf", "017779ff-603f-42e5-828b-283eade97439": "sofa", "a8be69dd-1ce3-430b-bb46-46399b41dfd7": "sofa", "013b91c9-b8d8-3ba2-9663-1912fbb240c3": "table", "67b0aedc-8931-428a-9f6e-e697034e1265": "sofa", "1e7b5aee-dd43-4066-b9e7-c00b435c17bf": "shelf", "aa975b88-c7ff-4818-815a-818d7620e6f5": "coffee_table", "65b5062b-666a-3c3c-a465-bb43291d0e66": "chair", "2b4bb1fc-31bf-4977-a112-a89e905eb075": "shelf", "588a688f-0e80-4258-bd27-2a3ade531984": "stool", "48102934-dbec-4278-b8d6-d4e3f85abc28": "stool", "1a236d41-577e-48b3-a4b4-2f20e58c4f30": "chair", "cff8873d-a673-484d-98a9-557b4b7fa6cd": "ceiling_lamp", "a68002c4-ac82-46e7-8946-0ee9f600e529": "sofa", "4dfe6574-1e4f-4150-9fb7-f42f2b0a88d1": "sofa", "d87992df-e08c-436c-a206-f0d27a45f2cf": "bed", "107eb290-6555-4fb2-91d5-837f1d6001d9": "ceiling_lamp", "1770f363-1173-45a2-b30a-83eeca8ba557": "sofa_chair", "5f18331d-da45-45be-99f1-c079cebf3091": "ceiling_lamp", "10f62e71-6e6c-4d9e-821e-c1837305f10f": "coffee_table", "9d3ca979-5a5e-4ed1-a45d-e8d4ca9b4dc3": "chair", "8fb52553-9433-4819-8393-2867ebf6ce46": "coffee_table", "a29a17dc-2c53-4206-bbc7-08fa4c4e30b5": "ceiling_lamp", "490c7957-69d7-4e48-9c98-c253e79fdf0c": "ceiling_lamp", "c52cef24-638b-4c51-be3d-2ce35f42083e": "coffee_table", "a4addf37-1b0c-43d1-9fb1-f272f14cba55": "coffee_table", "3071bdcb-4ce9-456b-8180-f39e52a59b65": "shelf", "e7defba1-6d30-415d-a374-a61af4e0b132": "bottom_cabinet", "dd7b660c-2613-4620-8318-13b5678232d9": "ceiling_lamp", "a4a3deb5-a21b-4c69-914b-3ed6e596aa4a": "shelf", "07d9fb2b-9d82-4ced-a712-19071abd9f21": "shelf", "ad0c247c-fc44-4c06-bbec-25a87c4bdefc": "sofa_chair", "7d72b38d-e5df-3c58-b7c7-3c494c00eeca": "chair", "29079d9c-88dc-4b71-98ff-8cbfdd8fbc75": "bed", "54cb266a-db46-4184-baf9-52794af15e4a": "chair", "62bf26e3-a476-4fb4-8119-8209d8c9c4e6": "chair", "56f8a323-faf3-4928-b531-a0850ebe1365": "ceiling_lamp", "3f012ebe-d552-40be-b18a-b9450b107996": "coffee_table", "0a9fe7e8-5be2-4d2d-bc9d-9e382f42725f": "bottom_cabinet", "02f7c147-a104-47a2-b8a0-438231c0a254": "stool", "28403022-e92b-49f4-9dbf-21c26406df1b": "ceiling_lamp", "1f70be15-f3a2-4baf-bd21-ec50974f6530": "shelf", "ca021700-dd65-42e5-9186-470cceae99df": "stool", "cefd834f-8ad2-4e83-a149-4f28002e0330": "stool", "82b18962-dfc2-404b-bed0-3dbc98812750": "bed", "79816d11-8b88-45fc-9994-45f1b10838b1": "sofa", "b1aac511-8300-4ce2-9c10-f3225aa3b259": "bottom_cabinet", "01839053-f5e1-4165-b492-85836be84194": "chair", "59623eeb-1917-40d3-af63-9dc6ab8a944a": "sofa", "4405b782-4c7b-44b7-9976-29a01dac4477": "coffee_table", "0c807cf1-8e2b-45df-8200-a5aa35f030f7": "bed", "738c7db8-7ce4-4b53-b9ef-bbf32be790c4": "stool", "c69c92e1-0ab4-4878-8b22-c9ac54103928": "shelf", "1978275c-8e55-49e4-aa8e-ba0c4800d40b": "bottom_cabinet", "cdb53cce-9109-4b96-94f9-155fdafc489d": "table", "59f2792b-9d76-42ca-affe-6bb91c4aaea4": "sofa", "02b5ff73-9a6d-4aa9-994c-1355acce88d2": "coffee_table", "02ffddd9-2746-4cae-8676-82eb2e5bf3ae": "sofa", "d0f797f9-0570-4daa-867a-c998beddfaae": "ceiling_lamp", "7295403f-5ae8-4e04-b687-8e3779ac41b7": "chair", "6fd4889d-a78e-44eb-954a-87ab758da765": "sofa", "dc910936-b670-4b12-9c25-213833940f11": "coffee_table", "a04ece76-2aac-46b9-9915-9f822867c630": "sofa_chair", "0911a15e-85ba-450a-950f-d4251bae7aa1": "ceiling_lamp", "f4d6aa0f-b83e-43b4-9639-eefa3cfec069": "ceiling_lamp", "2632ec72-e319-469a-a01e-21b0e1038a18": "sofa", "51bbd7a8-08e7-480e-9ddc-719cc023d552": "sofa", "40d2c9d3-d44e-46c9-bfcc-2a4555acf11d": "sofa", "97b2d0a5-9187-4374-afee-a6486cc78679": "coffee_table", "7f7f4e36-ed2c-4b97-93ed-53e9d90c5f27": "sofa", "29887be5-7b0e-4a29-98bd-b5fee65ad1b6": "bottom_cabinet", "125aaaa9-d959-4a02-b5b1-371419b0af97": "sofa", "6f091168-eacd-4693-b37d-94abbaa340be": "bed", "1eeb4740-0ba6-4470-a3e8-39a927b4dccd": "bed", "04be7b1b-0c5d-3f74-8dc5-63c17a7bbcc5": "sofa_chair", "e4f40540-ab9f-44eb-8373-27beb51d7641": "bottom_cabinet", "72de87bb-1ea9-401b-be22-398f777a6c6b": "chair", "72ccb288-b208-306e-bb02-0f0ca9ea5cd1": "sofa", "e1ac258c-b259-48e4-b5db-571c2c45e210": "ceiling_lamp", "c1ec8df3-e322-4f39-a807-ac5d91808915": "sofa", "53b342b7-f56b-405d-a261-0cad489479cd": "bed", "ff88f589-1b08-408c-a61b-5b860dbf512f": "shelf", "5a13e2af-8719-3c76-aade-07b20b2ff7fe": "chair", "46eb0d2f-72a0-430c-bafc-06cc63a9afea": "bottom_cabinet", "779bf8aa-ffe3-4ccd-a9f0-2cf4ebfbf0a9": "sofa", "f06419b0-bd4a-4a2b-9d44-7e5314ab8f3e": "sofa_chair", "7a8f0e9c-1c18-3cb8-a260-f748c793c2b1": "chair", "c13fcaf2-dcf6-4878-8770-52a05e5f8fea": "shelf", "3ff85f12-b172-4a20-bd0c-3f9dd222e0f9": "bottom_cabinet", "37c8590a-f99b-471b-835d-7457da2aeb4b": "ceiling_lamp", "bdce4e90-651c-4f9e-9ce8-2851b5d904f7": "ceiling_lamp", "f943f45c-8818-4bfd-a291-e3bd8b358d9b": "ceiling_lamp", "459a2ea4-6c35-4a2d-b0df-bc4aa237b957": "table", "7d9ee706-7c45-4b22-a4d2-1b33c6ccd9e8": "coffee_table", "9df43bc8-7d25-4ea0-a1da-46e5d73e9080": "shelf", "6ae28e0d-7130-4ea9-97fe-1ce592a81c47": "sofa_chair", "460d3c30-f894-4098-8df8-7f750b8fee6d": "bed", "3f79ba42-44ea-4720-939b-541221ccb4d6": "bottom_cabinet", "08011234-d5e0-4eb0-bd6b-bed34868ca89": "bottom_cabinet", "a0334ce1-f75a-4a4e-9b71-9a1dd0172d58": "bottom_cabinet", "0d77423a-c141-4b0e-9132-ce397a826db6": "stool", "38fe9241-6c23-4751-9224-390028b99cb6": "ceiling_lamp", "1f44b15a-8c3d-409d-80f1-20dc77cb9778": "bed", "077eab93-6117-36bd-8747-3c82cd8ae69e": "chair", "22b5726c-451b-42e6-8825-b90cd1cdbc35": "chair", "0d26f7ab-13d4-4233-9c98-348b70d8fc47": "coffee_table", "f1edd7ed-af4a-472b-93c5-49f209a8aac1": "sofa", "82a6b836-eef5-4d74-9405-e6f3def875d2": "sofa", "36927868-054e-43b8-990d-50d8918cc357": "coffee_table", "4303ee22-8dba-3801-8cae-7d5530062ab1": "table", "6b71c44d-2f9e-4747-8c4e-b3c834a907be": "shelf", "619637f9-6ab3-4635-9c16-8b0e53bc7e14": "bottom_cabinet", "6f5c5154-fa96-4675-8e1b-9c8d4151e996": "ceiling_lamp", "504e42cf-5a29-4c8a-b704-74074d2dbb35": "ceiling_lamp", "102210bd-29ab-4876-a687-93434f4a863b": "bottom_cabinet", "4e1c07c2-5511-4018-b809-b51695a10f4a": "sofa", "20ae6ca9-6eb4-4f2c-9606-82c7ad1074b0": "bottom_cabinet", "35e17ac9-b8ac-4980-a908-cd7b070cb718": "bed", "3d42021c-ef3c-423a-b20a-5027f512eea9": "ceiling_lamp", "b9a31abf-f88f-4c5f-9f39-21b4039283de": "bottom_cabinet", "7894eab2-aa6c-4880-9816-cca4bc091c91": "chair", "80bad779-5430-494a-8f69-b5b74eec3c19": "ceiling_lamp", "ad798efb-579a-4768-8f2d-13a96a0303d1": "sofa_chair", "6a143d55-67b0-4d1e-8fdc-63df7b749e5b": "bed", "c743b38f-6719-494d-a6ed-c078ba11845d": "sofa_chair", "4d495443-cb1b-42ba-b43e-9270f18555c0": "bottom_cabinet", "091c331f-557e-4c5e-b084-8eb0d938d298": "ceiling_lamp", "09f5441d-dd3a-494a-a930-06ce2f5f6ee7": "sofa", "3d751664-e48a-4742-9557-6c3d19cd241c": "coffee_table", "b6687762-7879-4c98-ba08-a087157a0a08": "coffee_table", "8d1df02c-9ab3-4d88-94a7-597a51acb30f": "table", "45e0eedd-a79e-4a8a-bd92-0f7b1f4931de": "sofa_chair", "20b95756-2099-4c80-b152-3e458f00de91": "shelf", "1b99f254-0d54-437f-a715-8d8351d99afa": "bed", "7a3abc50-ea28-4742-9cbe-f2b26cd7f599": "stool", "bb158b66-fcbe-4e17-8fd9-4e0be8932a23": "sofa", "6829306d-5d2d-46db-aef0-682cd9a312fd": "sofa", "191559fc-ad20-40b5-8390-2dd8b9b00466": "sofa", "4ba82cdf-553e-4548-9763-9e0e24d4105f": "table", "3765256c-e8e7-48ce-aeee-86718cb18aea": "stool", "aa4bbd58-d118-4e1c-b8b6-410b759beb86": "chair", "7f46b3b8-53a0-4f49-bb8f-599df2f2bf2e": "table", "aa3bc9f7-0f39-4a9f-a4d1-c255da20dd89": "chair", "8be25063-5397-40fc-808c-75ecd35ae133": "shelf", "0de33085-3bde-4f50-b924-c9b1085fdadf": "sofa_chair", "6289a052-b4a7-417a-b687-b22fddc14663": "ceiling_lamp", "91a197a3-a53f-4cad-a4a3-8b07408fb491": "coffee_table", "6b01e397-9ad1-4e4a-a5e8-2cbaea1da011": "sofa_chair", "570156ed-e3c5-46e2-85bf-ef08ca2a215f": "shelf", "4fb25fd7-4354-416d-a5d5-d8bb28d2f2c1": "bottom_cabinet", "ca80336b-4825-4ce0-b7c5-5621ce6343d8": "bottom_cabinet", "4f49c405-43d7-4efa-ba57-17f6c1914dc5": "shelf", "47c219c4-c2e4-472c-86c6-ea3f00b28fa0": "sofa_chair", "0f8326bd-3a89-4d98-9e78-d317e048c9c9": "coffee_table", "e2dcff66-7c81-4020-9cca-ac04b7af89bc": "sofa", "5fbe1e57-64f3-3b39-9e61-dc2aa2cf83f1": "chair", "731f0c77-d586-48bc-bd80-562fd7bf2840": "bed", "d4a77898-866c-47a8-ab0d-d5b6c3536d6b": "bottom_cabinet", "de710e3b-882d-48a8-a40b-2947631e71d2": "coffee_table", "5913fcd8-15f7-436c-a45e-996b40679eed": "sofa", "2755cd11-37b7-4dec-abd1-c6efa2dcd921": "bed", "8bc8e550-b56e-4998-8cb5-03938f552112": "chair", "0587b568-e7e7-4022-9e65-b2c7f53cd907": "ceiling_lamp", "60962502-e93a-41ba-a395-3f5a42ec1e6e": "bed", "4338d080-4cb8-424f-a30e-119638706f76": "bed", "05740eed-3ed1-472e-81b6-f651395c4ada": "bottom_cabinet", "ddd58ee7-a0af-4054-9a0a-82a2c8d67ada": "coffee_table", "02859936-a048-47cb-a157-f41f2da9826f": "sofa_chair", "5e36ae96-f772-4d2b-8146-c7861527c2ae": "chair", "926e9042-fe14-449d-bce0-764617826477": "sofa", "25d25b90-1efe-4b21-918d-fa7a4b3844c9": "bottom_cabinet", "755a5af2-6909-4951-89c5-39869a6ae73a": "sofa_chair", "f0f8b2c8-b7ce-45e2-9f30-2ebc7f69753d": "coffee_table", "123da801-f2e4-4556-b00a-f62ffee429bf": "sofa", "ff2077cd-3241-445a-b310-19cbdee0f66a": "bottom_cabinet", "798bde9b-6bbc-43eb-9456-9e0227fc0d1f": "coffee_table", "2cbfae19-2837-47b1-ac06-b3fc79e67bae": "ceiling_lamp", "6ee22227-ea06-4deb-b2ea-7ffe36e7499c": "bottom_cabinet", "0bad3e18-a5c4-4e86-a6a4-b83aa62d8802": "sofa_chair", "6acf53aa-eec7-49c9-8d6a-1604d806fab4": "bottom_cabinet", "685686ef-42b1-4de0-b09f-b539d1a23d5a": "sofa", "2fffc6f3-74fc-328e-aab4-942f37112f89": "chair", "83b4faf6-2aed-485c-ab1d-457848bea4eb": "chair", "1e817035-9f48-4832-a983-0ac44c243d12": "shelf", "3ed53c66-59e5-3aa0-8f2f-293a1573a4ec": "chair", "95275663-5ea5-46b1-ac8c-68b13405ff1a": "bed", "d8e16811-27c8-4f9a-8983-3f39aba223ad": "shelf", "db2d6abf-3da9-4760-b805-2c6eab0c8063": "ceiling_lamp", "540f57a6-f752-3f11-b11b-5521ac4a3f2e": "sofa", "0518c9eb-cc6e-477a-b1c9-0381ae26e3ac": "stool", "6503e9c3-9f65-45d3-bf2c-454360db055f": "sofa", "8139b26d-01ad-42de-99d7-cb23b9e4be93": "sofa", "2c8ea0e4-ec79-424c-a67a-69ecc4dab48c": "shelf", "e2816087-9a7c-4e59-82e2-abd3cfb529dc": "bottom_cabinet", "2e03c3a9-677f-4b04-b44d-e2aac7baf607": "bottom_cabinet", "07a4daba-df9d-461e-b18d-59834b7660a4": "sofa_chair", "71cab400-8371-3677-915a-fc03f86c10d1": "chair", "3b08dae6-44ba-40eb-a18d-84af0ac30255": "sofa_chair", "4ae32ad4-fb77-4180-ae97-9fc8293e3029": "bottom_cabinet", "908ee318-f4d3-48b1-8498-f4cb8627aac0": "ceiling_lamp", "6bd7abcd-2722-40b8-88cd-6ec6150a983e": "coffee_table", "0414d081-c8b8-4c29-b861-c92d0970b7ac": "sofa_chair", "0af6dbe0-0b1e-37e6-8bf4-12931ca32a7b": "chair", "daf3dcb0-04a3-4bfc-9147-c27660625943": "sofa", "167d7f1a-cd1a-435f-966d-d99f5ab982fc": "sofa", "769e8458-9d88-3154-a8c9-5a3b0b1da5d6": "shelf", "f615b69a-6791-408c-85e3-8ac19e33dda0": "table", "8fd16bfa-d663-4ed5-b2e6-7316638fb08c": "sofa_chair", "28b5b3bc-2852-43a9-bc08-0fb9b34732e7": "chair", "2072fbfa-9db4-4815-87eb-81db29ba7480": "shelf", "312ab765-8b7a-4f21-9c80-a8ee820e8c29": "ceiling_lamp", "4a18e45d-05a1-4d21-9fb3-b53996157b14": "stool", "1cb4be2e-745e-4a73-98f3-d6c1db63fcf1": "bed", "26098b5a-1e15-4c51-9312-cb6b4d83015d": "shelf", "0f0f8391-056f-439a-8c68-d1c132cd672b": "ceiling_lamp", "2e7269e4-2de4-4e73-b827-3751eef24314": "coffee_table", "8bfd9298-bc42-43e8-a93b-6f1eedb99971": "ceiling_lamp", "5f99048f-66bb-428a-9495-1150881b62ae": "bed", "4f97df72-b603-3d75-abcb-29ddcdaec8ef": "chair", "f0a61b2d-421d-4f3b-8e75-df01fce139f8": "bed", "31e4a90a-47ea-4afb-87c6-fe75c79a4bc9": "shelf", "ebd2a8a6-71df-4906-8633-8e5efb971f20": "bottom_cabinet", "fb50d640-2b54-4e5c-b9c5-05d881164464": "chair", "9d57ed1c-ba2a-4ec3-a74b-495766e787fd": "sofa", "0b093afc-dbad-47aa-ad4d-2afd0c16a49a": "bed", "1ae52831-1e4d-47c1-b46d-7b28eba7f099": "sofa", "7cc6119d-9105-435a-a0b8-35d800d31bf5": "bottom_cabinet", "729a0bf7-9d4a-4ccc-9363-e6a664f94b74": "bottom_cabinet", "064b6e1b-aa14-4eb0-8021-f3eb81a58c01": "shelf", "c6e3d7ea-725b-4449-babd-3bdaf15f52b0": "ceiling_lamp", "c459d148-1bd0-4116-a734-38a658f173d4": "ceiling_lamp", "e406c52d-750d-4837-ba30-6a2bc6f9de23": "sofa", "e7276bfe-8ee9-43d3-b927-1075e9c88f45": "shelf", "31792647-7bbc-4e20-b4a2-3ed97a4c87d1": "stool", "f1fba920-4996-4310-aa1a-a0c03ba80845": "shelf", "36a8ee08-14c3-4380-ae0e-1a66525aa7f5": "bottom_cabinet", "3a9a92e3-72c1-422e-a772-ffe37c212e34": "ceiling_lamp", "648885b4-928f-4e9a-8417-a60707dd2614": "sofa", "4a09b8a2-dce7-4912-9f95-a52d411de7f7": "sofa", "cd1b300a-06c1-442e-a2a4-530eb5f9aa60": "shelf", "41eaa956-e829-4852-88a5-313232ee75dc": "bed", "e13db93f-206d-404a-8931-6a453d13c252": "chair", "026d4902-3efb-4d3e-a5f8-dfc7998df47b": "sofa_chair", "2cf92156-35ee-45ea-9555-7883f374768f": "bottom_cabinet", "c7a3446b-aa05-45e7-836b-b2dfdd598f94": "sofa_chair", "c310fcb6-b6fe-4f92-a7c5-9537bbf04d4e": "coffee_table", "6c41d7bb-985d-4a52-bccd-759186381056": "coffee_table", "754a45df-a7d6-4cf3-89f4-750841b3868c": "chair", "27fa631e-8f81-4712-9f20-2e2eac0b1168": "sofa", "59f5603a-1c04-4c4d-a274-35b705e36038": "coffee_table", "6eb5add9-47f0-43e4-9397-a64861cb5783": "bed", "172d257d-5eab-4f7e-8671-ae3752a02b45": "bottom_cabinet", "1f4e8069-2e33-4e84-ad66-10b30884120f": "chair", "0223c3f7-887d-4093-bb72-7547fc7fccac": "shelf", "d11619c4-4477-465d-bb03-1f07dc51acfb": "chair", "8270e7a4-5580-4994-b894-42821f5b7f87": "bottom_cabinet", "11655eae-9ceb-44f7-bab8-4fb20d2651fe": "shelf", "046e2345-5d66-4083-81fe-3cf798b1077b": "ceiling_lamp", "7aa60c7c-a8e7-42e8-8235-7c0bf0572eb4": "bottom_cabinet", "e761c90e-d5c3-4efc-9194-436851afd50a": "sofa", "0855306f-0728-4914-9245-9ab7fcac9478": "table", "1791e0c9-15fc-4fa9-80df-e73332ed6ce0": "table", "060eba93-a0cb-4382-b2bc-a25e606a97e3": "bottom_cabinet", "6fe28e4b-da6c-4b5a-bc39-6eaff0322b34": "ceiling_lamp", "eb70d604-c5b9-4b6c-8383-6f6409ce7245": "stool", "9e62de1c-9e8b-4e39-bc9f-29bef87bb4b5": "ceiling_lamp", "c3c80594-d649-44f4-b92c-ffff3096b493": "chair", "7eb290b5-fc48-4981-bfe9-84ee0b34b988": "bed", "f467e918-afe5-45af-b778-2dfcd88680c5": "bed", "2be9c694-3e59-4e5f-b81b-f21b9a91cb9c": "sofa_chair", "f75bb347-d890-4648-ab08-31b682f0c995": "bottom_cabinet", "04ec6093-afa8-493a-a415-b0e0629ce7d0": "sofa", "dadc7a98-3191-48ca-979d-c7e8b92ea8da": "coffee_table", "5fed185e-16f4-4156-95fb-46bdc573523e": "shelf", "106b5555-7e93-4733-8994-fcb55eb2fdae": "chair", "9525e352-eb5d-4461-9fee-c9a43d3c31ae": "ceiling_lamp", "97e2052a-497a-4df6-8a82-9daa39ac7fc5": "chair", "40a8b7e3-1476-4eb7-b832-2300ad65b0e2": "sofa", "41dab4af-402a-42ee-a8db-44620405ee1b": "chair", "758c9eee-955f-3382-911d-d06c53807c63": "table", "5120acba-1895-3e27-9959-aee731cd666f": "chair", "114a6d94-4038-4eaf-8faa-c429cd5dc69e": "ceiling_lamp", "1bc67d0c-4744-452b-b015-41ff24d51613": "sofa", "5d450bed-7cb6-4fdd-aaec-3618e0674cfd": "sofa", "e65aa9d3-7f29-4795-80f5-eb47705ddb41": "ceiling_lamp", "5b357173-d1bd-4669-9c8d-78524864ae22": "coffee_table", "613a3bba-016d-4e1d-aa06-8dac504edfa4": "chair", "3c00db4f-d06f-4d4e-b58a-cfa7e2b93174": "bottom_cabinet", "7a76dd88-eec5-4673-b10b-519a9da5b51f": "coffee_table", "c3e5002f-9690-46f7-8ce7-206b4c01edcd": "sofa_chair", "c2499372-7330-4c82-9bef-ee65d35dc906": "ceiling_lamp", "6ea8f314-d956-4d96-b263-a688ad5d9f74": "bottom_cabinet", "53173a08-901c-4486-8eba-b9ed7b9ae6ae": "sofa", "2a04e84b-3f3a-41b2-82ab-6fd46a144988": "sofa", "247c449d-4acc-451f-b0dc-515165ea6a62": "table", "5a26b424-c0a0-4bd5-9f01-6167e9e9655f": "bottom_cabinet", "591b3d58-aad9-4d9f-8d81-c60db7fd716f": "chair", "a38c236b-5487-40c7-aedf-477f996c87c4": "ceiling_lamp", "4030b471-a352-40f7-9740-66c167f6a913": "bottom_cabinet", "4815c3ab-4ef7-4985-a354-c8a7fcb14576": "sofa", "843c016f-50c2-4c00-bb13-6aba0f124ae5": "bottom_cabinet", "340f5f1b-d35d-4f81-8d3b-f315382a9562": "bottom_cabinet", "61f6269f-d4fb-496f-b18e-c565316b6a41": "shelf", "2f636488-0952-4ed4-b339-ebcb181aaff1": "ceiling_lamp", "2c964b30-47bd-4ed9-9e46-552401ec3281": "coffee_table", "b07444ff-5d5d-4493-8616-c1eabe6a840b": "bottom_cabinet", "4945b111-b731-454f-b6c9-f7c22574c607": "bottom_cabinet", "81a73455-a00b-49d0-9817-fceeb7506966": "chair", "a6d45771-8bf5-4c80-b7d5-df3f3231069a": "shelf", "9581c8ef-1bec-488a-bb73-c44c5d067b2c": "ceiling_lamp", "4d221a11-c33b-4ad8-9349-f3d3c88a3c1d": "stool", "701e2092-2089-46f3-81cc-2a0997ac0d8e": "sofa", "0969bab8-7ffd-4297-94c0-08ac9a11ca9e": "sofa_chair", "d5c0c871-92d7-4424-9540-3493b7d66356": "chair", "58963c05-1397-4bd4-888b-ecb29a450d82": "sofa", "4b1b7c1e-3762-498c-aecd-b5eef1cea2b3": "table", "9506fdca-4311-4cd4-aff2-2ae7f32235c1": "sofa", "4d8853b3-95cb-49e8-ab8a-0b670a80a506": "sofa", "1caa1272-5ba7-4ed4-9e43-aae14247424d": "bottom_cabinet", "903fbd71-c8d1-4994-bd77-c7ab3384c10f": "table", "cba2bd19-4283-4bad-99b0-1408ba521ac3": "shelf", "1a2e9df7-e649-4f91-bed9-d0143f3b579a": "ceiling_lamp", "06658bda-8c15-4b6e-907a-5e0d307adf88": "sofa_chair", "082f1f77-d72e-431e-9ece-99a6db089a70": "sofa_chair", "5756e055-7ba6-4db6-91f9-35a208d8ff5e": "bed", "7cedd2dc-22aa-34dc-8c9b-c87fa3ff3b3e": "chair", "193b7a5f-6c0d-4605-afda-19bcfb341ece": "bed", "4319af27-28cd-477b-826c-58049e6871ea": "sofa", "c4fda120-f3eb-413f-a7ba-5cff189e4e89": "sofa", "530c3dbc-ae01-3b03-a52d-7d9e61fe4f7f": "chair", "9b2c63c7-8a00-4354-a072-33902e7f9bbd": "sofa", "a3a53214-cd88-4842-9470-f7c53f1ad39b": "ceiling_lamp", "4e796b2d-ccc7-442e-b482-eab901f3bf0b": "table", "3b63f9b1-e683-45b8-b6c4-cb6cc1a0b444": "stool", "0444c7ff-18b8-4829-89c0-a4f8002184c9": "bottom_cabinet", "63bfa1e7-b2c5-4413-aacf-c61bc9022e65": "sofa_chair", "209e62c8-e76b-4b6c-a4c7-192c28f5c5bb": "coffee_table", "28dc7820-e90c-43fe-9ffa-b7b55df0d268": "bottom_cabinet", "9506dff6-1503-4de3-a62a-95ad958b5751": "shelf", "cf9831ad-c48b-40bb-b33d-270de895b389": "table", "5ea6ea24-0f4d-406d-94f9-b04bc1ede3ef": "sofa", "0b5d4f2c-e5c9-4844-bde6-d11f41cb6df6": "bed", "c7208e3c-691e-4441-bc94-2527899d7bf2": "bottom_cabinet", "c7e5dce4-09b6-4358-8a25-90f1a66d6d21": "coffee_table", "6754730c-4b90-34e2-9705-ea406543a88c": "table", "bd5540f2-17a1-4485-970b-7b4277fc2887": "ceiling_lamp", "7a5f2dc8-4afc-4533-b62d-6f5d5d418663": "coffee_table", "18593675-46e1-43e9-bd4b-1a6a7c7a0d9b": "chair", "1f7a5b95-8c9f-4476-9db2-43a06738605b": "coffee_table", "6da2f6b3-b504-4455-9d7c-937b9818f7db": "ceiling_lamp", "4af5086e-858f-4778-8ed0-8efcbb996eb1": "bottom_cabinet", "fac3bb02-0072-4c73-9ba3-87453bd5477b": "sofa", "7e20b3c7-1a3f-4a74-8673-15449231a0ce": "coffee_table", "51c9c5ae-72c8-4182-aa8f-ece42a1bc871": "bottom_cabinet", "77fa7962-fbf8-4840-8d39-e0b4a454707b": "chair", "23ad5b5a-ecde-343d-a266-0faaf1ddec2c": "stool", "a6f5eca0-23a9-4741-9db1-07591845b24b": "table", "234e038d-ef07-4f9f-966e-cb4ba1413eb2": "coffee_table", "08e37873-2f0b-43df-8e56-e823a206882f": "coffee_table", "7ddcbf71-fcd2-4457-9647-a4418e546166": "chair", "7714d6f8-bef4-4ec4-ac6e-deb6644801ff": "sofa_chair", "7db22822-4c53-49bc-ba2c-f3e1907cead4": "sofa", "036460a8-4801-4d73-8e7f-39771c8ddcd7": "ceiling_lamp", "302eda2f-0c31-42b3-bfd9-ecf9cef8e999": "sofa_chair", "938d0d56-f9f2-46c2-8744-0ef2fe8af5b9": "shelf", "485394cb-8e71-4e46-b4c3-41d4366b7b19": "bed", "6e8a38f2-26cb-3397-95e9-8ec3be0e7640": "table", "bcbf90f5-7616-433f-8aff-741080850852": "sofa", "1bae26c6-c9ac-456d-8171-9ea8efb5afd8": "chair", "286bcbb5-0b8b-47c4-ae14-b5f71d4136e6": "sofa_chair", "5d7599de-9aa0-45f8-aea1-2d492aac6bcb": "shelf", "5259bd25-a96d-43b6-a04a-f23614b1f07c": "bottom_cabinet", "46459909-f4ea-40f0-817d-575bf9580b91": "ceiling_lamp", "cce74fb0-a4bd-4e1e-9af2-acbb5f2f3a20": "sofa", "5f175677-3321-467a-9a82-1ede16807be6": "bed", "50ba6dac-20b0-4b53-a446-f139ab94b61f": "bed", "382972eb-96cd-36e3-a0ab-62e73981ba89": "chair", "308fb003-2d83-47ae-b75f-f0eb1f0ff228": "sofa", "7ade5547-a4e4-4220-b1f8-ca8ac48f12f5": "bottom_cabinet", "cee47b9f-2746-44cb-b673-6ee8dd16a633": "shelf", "8271423a-cb03-4186-a475-1817bd9af3fc": "shelf", "7dce7d7b-1243-44cc-94a6-aaf3ab155f0f": "table", "13875681-782a-434a-9aa7-29209a362925": "sofa", "b405af47-a5cd-45d4-a558-fca13d9dac59": "coffee_table", "41067065-8063-4b68-9558-283d2304a603": "bottom_cabinet", "0ef90eac-08b0-419f-8351-4d88af4315c7": "ceiling_lamp", "04e36426-a6c6-4c9a-befb-e208c8ebf714": "shelf", "fceb575b-b8a8-44d8-832c-223933cd1143": "ceiling_lamp", "76d7a78e-2b24-45a3-aac6-f6ab2d7bcd57": "coffee_table", "3fd9b6da-072b-4f65-9015-4cd07b15e137": "bed", "23000814-7305-4ce2-bcdf-1be89f68fb57": "bottom_cabinet", "393d978f-75f7-4715-b890-83fcb1ddd843": "coffee_table", "68a8cce5-47fe-4df7-9534-beee2b1e49a8": "sofa", "2530fd29-db31-449b-96aa-16deff3d2446": "bottom_cabinet", "5fb91b28-9a25-472e-824a-20850d875435": "sofa", "83cae192-b11b-4cd4-b6f3-8d55ce211625": "bottom_cabinet", "4e3c5628-9222-44e8-bc56-6fd7d16abc77": "ceiling_lamp", "dd520805-5a8f-4ef2-b35c-82f57b55349e": "sofa_chair", "887b77fe-65db-4e9e-b8e9-363d7867a82c": "table", "7f2b4539-f05b-336d-9489-19c6f70823f1": "chair", "5e7c487b-1d01-3020-86b6-d776a24c87cd": "stool", "287e4cde-2209-4d5f-baf4-3b1077a01172": "sofa", "e54b8272-2151-4fc4-b2b1-252ed31acecf": "bottom_cabinet", "8c5c326c-eb22-4b85-b99d-49e5f623df18": "chair", "192fb546-8be8-44ca-97ea-b9549db58f0a": "table", "4268d448-ac98-4084-9c3f-df8ebda787d3": "sofa", "81022e80-4eb9-3b60-b002-d2e54aeba9c9": "sofa", "b7d1f388-5f43-462e-b4ad-8bf6489e368f": "coffee_table", "6a3ccc14-0ed6-435f-9182-bc6b1b8b3ca8": "sofa", "14ffd310-f562-381c-b6c0-9931deb76c1e": "chair", "226446d4-031a-469f-8c9d-6a635847bb5d": "bottom_cabinet", "dbfc3a53-2aab-403b-95b7-ad0d133ab58c": "shelf", "04ab3ea0-3b99-4b0f-bf4b-dee0ccd0e740": "stool", "0818b0dd-d191-4a84-8f5a-ed628721b3e0": "bottom_cabinet", "5f0f922f-25a5-47e4-a205-5b77447f5413": "shelf", "5f7696c4-4fb0-371c-804d-0894fbec0cdd": "sofa_chair", "69b0600a-479e-45ae-b7db-cb529d20d088": "shelf", "a77b38db-5ec6-4e00-b38a-102aed2b8b47": "bottom_cabinet", "ac063e05-e625-4ced-b04b-3e45b77c839c": "bottom_cabinet", "1efe3f03-84b3-4e74-9dd6-ed3c6f42cbdd": "coffee_table", "22db3bf7-ded6-4fb2-bd2f-35e951dd83a2": "bottom_cabinet", "31f19e77-a94c-4e87-95f9-2aaa8cd973ba": "coffee_table", "488bb246-4b78-4a4e-9b7e-27ae5380d0d2": "sofa_chair", "43fc8d6b-65b5-457c-b6ea-13575b4ff1bf": "sofa", "ebdd83c6-283b-4ff8-b2ba-0e83edd3ba9a": "bottom_cabinet", "f4415c22-7722-4616-9bb0-71ca2ab788f4": "ceiling_lamp", "72eafb54-7c4a-4b8d-922c-7a0418d43570": "coffee_table", "48c6f0f5-7dd5-4621-a134-502ced8638cc": "bottom_cabinet", "44f20bb8-a8bf-4d7c-bd18-19a5a906c9cf": "shelf", "774c1af4-6e8e-4219-8cfa-baca715221f4": "sofa", "f3e723dc-db3c-4309-a8b2-05008ba5e400": "table", "d3432a5f-a305-4599-b377-ae1006e7cf55": "coffee_table", "5748daed-f471-419f-b5e3-5a24a3d8f3c6": "sofa", "b520ee41-01c6-4e9b-9e82-a9cf9fca9317": "table", "5db96573-a895-45d5-89ee-ffa2a1605f3a": "sofa", "2cd54c2d-9a03-4eb4-9bb2-3c6695b9c18e": "bottom_cabinet", "63414d2e-db87-4033-9645-4157a6f30da9": "bottom_cabinet", "cca105b8-df2a-48f9-bc10-7935eb5b82a1": "shelf", "164dd95b-fd2d-495d-a1a0-6f80c02dd295": "ceiling_lamp", "1124049b-5c22-493e-b0ff-35e3229cb754": "sofa", "75ce72e3-f18e-453f-ba5c-35993f3f5a3d": "table", "71823f22-9b53-49c2-8708-fa7c89dde14f": "bed", "e581cc9c-21d1-4d16-85ff-782583e8399d": "shelf", "1a4f65d9-b743-47e9-bc5f-74e5af9b1d68": "shelf", "c6977084-5f7b-4560-90ca-8caf45f04db1": "table", "6b937749-c0d6-43fe-948c-efdf0c8fb3fd": "ceiling_lamp", "a0b67c64-15a4-4969-91a6-89e365d87d12": "bottom_cabinet", "65a01d8d-dcc5-45ea-9d41-55a34e3623e2": "bed", "74aa6cfc-8645-470c-8abf-60b42d65649c": "bottom_cabinet", "1baf5b9e-f889-45c7-99a8-6dd0e5a2c899": "sofa", "e3a5ecd9-81c4-4514-8649-43e90bb0dfdb": "coffee_table", "d66a74c9-7109-4bc4-89c8-2d6888ac7622": "ceiling_lamp", "27f0079e-2efd-4532-bb98-9bc9c30746ac": "chair", "6042a378-6361-42aa-8fd7-45ec7cd89be6": "coffee_table", "2c250bde-e75c-3738-b84f-d5f06337a04f": "chair", "06791438-cfa8-4e29-95cc-4ff8107e3456": "coffee_table", "0b6862e2-476a-487c-8b31-d2943ad94d66": "sofa_chair", "9c2424f6-5c02-44dc-a129-d43ca083ffe3": "bottom_cabinet", "2f57db3c-f773-4ce8-b914-17a891294ae3": "table", "3dc72ce1-1c86-325d-9192-5ec0eb7d6979": "table", "04b9e18d-20d2-4fb5-a055-de3459719dce": "bottom_cabinet", "de9d6511-cfcc-4894-82f9-8fe2f6d062d3": "coffee_table", "dd89f847-b508-4a2a-a014-8d8dbd885726": "chair", "c628c0ee-a5ae-4706-8802-90368fb49d3f": "coffee_table", "d88dba35-3d34-4a66-be61-805278b0d7b4": "bed", "c9102930-de4b-475b-9df9-e3b2385a14d4": "sofa_chair", "f5750fe5-bc61-4f62-b086-d41d6abfab96": "sofa_chair", "b36a24ee-3423-4f8b-95a0-f0bc8f4e7523": "coffee_table", "9bac5014-a50f-4b3f-b78f-e9c13f28b761": "coffee_table", "3a30caab-dd06-31f6-a81a-3162024f4c20": "sofa", "37f22d41-832b-44c7-9763-089149607594": "ceiling_lamp", "947ad72f-635f-4b84-9e8f-3da6a2e7ff64": "ceiling_lamp", "520db020-41a5-4b08-8bfe-fba186025995": "table", "05dd288f-ce85-4f1c-b218-f27354225915": "sofa_chair", "dba1acda-119c-4568-a24e-14cc17623ede": "shelf", "06a02e7c-af9d-42b9-a112-b0c7357c1bd7": "chair", "6b9df021-6ea5-439b-897d-c672b0727ecb": "sofa", "0aa4cb1f-6b1d-4f9b-ba8b-f7c6d35bba71": "shelf", "2cb294f1-54fd-4ba7-bde5-6fd6b588339b": "ceiling_lamp", "e4eac65b-d96e-455e-b717-972b0adf1793": "bottom_cabinet", "47aa7da4-f017-46ce-96a2-fcff918bc334": "bed", "51ba8bd8-7a6e-410d-a4e4-60ffb569ff27": "sofa", "1960f978-47fb-4612-bbdb-a6f81922d0d2": "coffee_table", "45f33ced-73b7-4345-bd21-09f4356398bb": "shelf", "2cd35737-3596-4f42-81f3-49194dae7600": "ceiling_lamp", "c2100a72-accc-485e-ac9e-3b8998392121": "chair", "70464ae6-cf69-4e9c-ac31-0482d2355288": "sofa_chair", "7646e095-6004-3398-a653-4d874554dd47": "shelf", "e1901a24-92a0-48c6-9d94-170924c21600": "bottom_cabinet", "52471580-07f9-4ed6-b6ae-7e3030f9b3ad": "table", "52161fec-d4a8-4456-9687-fbe15c82216a": "sofa", "6f083a06-9651-4353-a72a-690b26356964": "table", "0f83ce4d-dec5-4a5e-8b6b-fc00455ab9cd": "sofa_chair", "d1d091e1-69eb-4610-a62b-5179c70ed525": "table", "01fdf241-67bb-482c-844c-61e261b8d484": "ceiling_lamp", "3ea31264-a880-4b28-adc9-f9dc1a5420da": "chair", "1a261afc-a62c-4181-93ac-510d460247ba": "bottom_cabinet", "7cd595b9-9f90-477b-b2a6-3bca846609fc": "bed", "5c13170b-119a-4b1c-8b35-ff5a14a8403f": "bed", "e9c69651-0fc4-4a29-a586-1baf745617f3": "bed", "1e261247-2059-4560-8043-c4dbd5ea692b": "coffee_table", "8a53a72b-6007-45bd-84a5-e7ef49480399": "sofa_chair", "2913731c-740b-4f22-adb2-c94660c4189e": "shelf", "7d4713d9-c632-4b6f-8c3d-cf1c7b16113d": "ceiling_lamp", "54275b58-a2f9-4e32-9106-ca09282b9c52": "chair", "97164129-a744-462c-99da-22590c4631d3": "chair", "02bfd47f-1ca7-4ae4-b430-58caf73cc4a3": "stool", "0672476a-38c2-4f15-a2d4-ff0a06caf9a6": "coffee_table", "34f53bae-f817-45d7-b1d1-8b41f3265ee3": "bottom_cabinet", "55351be0-e453-4b67-a960-c3aca1840c27": "coffee_table", "794416b0-c03e-42fd-9a7c-48f5dc9517b1": "ceiling_lamp", "04dbc652-b127-4070-bfc3-c07fa5bc4ede": "bottom_cabinet", "87322ab9-e3a3-4f25-9782-86b6bb5f0f93": "stool", "275957cf-dbf6-4d3e-b139-5f14b653bab0": "sofa_chair", "f80c707f-cd4f-4890-aca6-f50aa8780bc2": "bottom_cabinet", "93e10bba-8f32-4ea9-8224-e9d2727fa3a7": "ceiling_lamp", "5ce26ffd-0868-445a-b5b0-23ecfaaed8f8": "bed", "8917637b-ee72-49d4-b64e-ab98df1ff762": "bottom_cabinet", "ae033a90-aa17-4634-bf74-20f80d0d6ca3": "coffee_table", "5d941393-ebde-4169-bf7b-ed2a22ff21f2": "bottom_cabinet", "661e51fd-f842-4ae8-b22b-81b9cf9b264b": "sofa_chair", "c0ea7602-0407-44c9-895c-1248b080fe5d": "coffee_table", "4e13b15c-29fe-4fb7-85e4-4aaa1b5513ec": "chair", "805e747c-fec2-44b8-a831-3ae3da3db3d3": "shelf", "99a900fe-8fad-4b3d-bfba-183c1840d4cd": "ceiling_lamp", "7cacdf4a-69fa-4a7a-a2d8-ab74724210db": "coffee_table", "2b9d4792-ba7f-4b5c-80f2-e0893786a203": "stool", "78ce05ce-c420-44b6-b7de-b9ab6c17622c": "sofa", "dc54f630-fefc-4f14-869c-7c6795273c0b": "sofa_chair", "4cda739c-8456-4437-ba83-e0b70c1f91c6": "bed", "fa6ceb17-c0ea-4cde-ae53-46ed84851db1": "bottom_cabinet", "5a50e751-cfb5-4ce1-9900-181cbf8e7898": "sofa_chair", "e6a4a044-6ee4-4901-89fe-5ab8b4bc8af9": "coffee_table", "49220bc6-1ae5-401b-b35e-3c3c00bfb935": "coffee_table", "19d3b4f9-b76c-4205-981b-977181f0da38": "chair", "47dfeb0e-ff9f-4b29-9d70-40cca6f0780b": "bottom_cabinet", "77e158c9-f444-4929-8c21-37c03de0fe2e": "bed", "a6e20b78-6405-4afe-8c64-65bd57a3caff": "coffee_table", "5567ff78-eec3-4c32-a1f1-bd34a7cd4a51": "sofa", "699f4af6-7f29-428f-9cfa-353020b58f6a": "sofa", "84ada08d-fc67-4d33-9305-d858494222bc": "coffee_table", "efd57f9b-c5e6-43c2-b6ce-be8b3ad405ff": "bed", "27ab6afe-7800-4a28-afda-77a8492ff9f5": "sofa", "d8f9ea65-c1e6-4d3b-b31e-72f866e5c629": "coffee_table", "51012e0a-9506-41b4-a2f9-460968e5f04f": "coffee_table", "29dce16b-6716-44b9-8aad-2bb55db63dea": "stool", "8e6d72dc-379b-48f1-943e-868bd94d1121": "coffee_table", "e735842a-ced4-40b9-be96-64dcca49afa6": "bottom_cabinet", "9395899b-6f65-4fcd-b352-8dd64d5098a2": "sofa_chair", "66c1ca6a-a090-47fe-a078-e298bf130348": "sofa", "fecd2ca0-c1a0-4029-b8b1-48cd4857dc72": "table", "26bd67b4-ad3c-46f1-b07c-6d7d50f877c3": "sofa", "cdc5ae7f-ec28-46f2-a253-7db08340ccb1": "sofa", "505b7b5c-4aa5-4fc9-8a23-1dbe4cdbb07b": "coffee_table", "3ff22edd-9433-457c-b482-5a77ad21fd94": "bottom_cabinet", "8ef6edb8-95f6-4f42-94b1-b219adbec145": "table", "43d85f7d-19d1-4a0c-90b9-ff054351a284": "bed", "3de9f23c-16f1-3880-aec0-197dd4a42a74": "sofa_chair", "0a05cf26-fbb9-4134-a793-e62915762d77": "coffee_table", "550ff82e-a5ba-4fef-a2e1-e87cd188ae84": "sofa", "26ca6f3a-1fa4-483b-83ce-5a3f4699dbd4": "chair", "8bf54b30-9829-441a-9a79-f17648f0966b": "bottom_cabinet", "36cafc17-ca62-4340-a6e7-16ed28a052f2": "sofa_chair", "c4591571-cb89-49a7-97d9-f42f41786906": "sofa", "25952ded-b344-3078-90a2-1726657ed542": "bottom_cabinet", "7865f7ec-bd8d-412f-815b-c3f9fca96a9c": "shelf", "07c19a12-0a59-4dfd-aece-57d19108b792": "stool", "55cc370a-e547-3b46-8f71-d165b46ca596": "chair", "ce7e520b-1804-4ebc-841e-0877a18e35c9": "coffee_table", "50bcae1c-3ddc-4bd1-ad19-6df738e9a1a7": "sofa", "5e2d8d3f-a62b-4a83-b240-3ca188691ed4": "sofa_chair", "272766d5-3e7c-4b6e-9e48-7aa29f0590fe": "sofa_chair", "8a431cf4-0476-4a50-b847-8c59edf5f3bc": "stool", "54b38089-e0d8-47ee-85f7-90968db3d577": "sofa", "902c3155-811c-4f76-bbcc-7ca57b6999a4": "coffee_table", "75fdbd17-c029-4a56-bafa-17a78cf0a8d5": "ceiling_lamp", "0a1e2fb3-3345-4483-a6ae-049923d15934": "sofa", "447091fc-d9b9-4d76-8586-e050501356ef": "ceiling_lamp", "1a1c11a4-9c90-403c-b7cf-70ee73b58cdd": "bed", "2d7ec2d0-fcd6-4943-9037-97a8e5ce3d6e": "bottom_cabinet", "2c4ecb63-70e5-4499-b5e3-be20da1d43ec": "table", "03324866-9cfd-4b45-8142-f009f2c0b4c2": "table", "078ff56c-acca-4bf5-9804-4ef17fee1d07": "bottom_cabinet", "08c6a3a9-e786-4991-9b07-da8689405c80": "chair", "5e645c37-6d4d-4790-9f59-dc0f2ffebb98": "coffee_table", "0bc7d4f6-629c-46df-af54-4907fedc12b3": "coffee_table", "1b27d33e-4bad-4df5-91f9-9ccf2447f823": "coffee_table", "714d9c1d-4274-49da-9637-49ee08455dc5": "shelf", "53f68f1f-4bcd-3cc9-a2c6-9c47aeccc09e": "table", "4165ab32-4967-485a-b1aa-1c0a7994d5cd": "sofa_chair", "4235984b-4f59-441c-bf4e-8775f3057db7": "stool", "b3ab3d07-f13b-4b5c-a1f5-1c8cd33cd176": "bottom_cabinet", "a2aa11ef-50e1-425c-94d6-960c19ad382a": "sofa", "599a4c66-2c25-4b7f-9064-84e033d1fccd": "sofa_chair", "0e34359c-ce52-449e-98da-216b3d344dd3": "bed", "7ebd0efc-86b4-4466-b6c3-a1284df00a2f": "sofa", "1867ae96-cd59-4900-aa1e-79aaa5686ad6": "shelf", "4a45a893-ed0c-4f36-9941-31fad9d03e53": "sofa", "de6fb1e8-9a21-498e-86fb-7cc34ec24229": "sofa_chair", "1f7034f1-311c-4f70-b507-7c7eef08c9fc": "shelf", "863adc8f-6382-4c91-a1e9-e5ff8ab6c343": "table", "7a2706a9-b7de-4eb1-8d4e-da519f8c9398": "coffee_table", "680c14a6-119d-478d-99fe-b0ad33220727": "shelf", "5f390289-f1a1-38c3-8729-381f368f122d": "sofa", "1e0e0370-5307-4cc4-8765-7394f10ffe78": "stool", "ec143962-2b2e-4466-bc8b-3afa4ed26081": "ceiling_lamp", "1809091d-f0e6-420d-bf25-7a55b5c4e105": "ceiling_lamp", "1170314b-4908-33b1-adf5-73a2a39a2309": "table", "79c78d51-1192-4f7d-ba37-9d7f7e949cbd": "bed", "3c35f189-830d-4f8e-bd79-743a487a1806": "ceiling_lamp", "6395bdba-e5f5-4975-899e-57f3a1687414": "bed", "2e1d86d2-6cec-379a-9f36-ad943ce2448d": "shelf", "009070c8-1246-4d65-8133-27cde12e274e": "bottom_cabinet", "63d29efc-3f22-49f0-be38-0cf4235ebfb5": "stool", "0a183ba7-03e7-4ff1-b82c-25fb0f6836d0": "bottom_cabinet", "3ff6eaaa-c772-4bf2-a6a3-98c1e611d1de": "coffee_table", "4e85e2a2-fbdd-4cf2-b72e-ecd4f25d26e6": "bed", "3e6c45ba-9989-4e6f-bc3a-63285ae10d6d": "sofa", "53eaf7fe-a4f0-47b8-8e8d-8892794398bf": "bottom_cabinet", "15b1eb53-47d5-4fd8-9862-99654a5b3b4a": "shelf", "73e0bfc9-ccc7-435a-bf6b-c456799853c6": "sofa", "0f4426b8-db5e-4cd8-b370-a941735f63d1": "sofa", "78293fe5-5cc7-4117-8083-d9fc3688d501": "sofa", "5b39f3f5-4c1a-4918-98cf-681bae59b4ea": "bottom_cabinet", "4331d6ff-401c-4188-acf8-bd44b96d5529": "stool", "80511050-1b90-38d2-9e8f-d10526a79ab2": "chair", "de585603-8b1f-485f-8c47-ade4bf7b57eb": "sofa", "71dd5d19-9ab3-43b3-af45-e7b7cd112bb7": "sofa", "f044ba0a-bb49-43af-86e8-d0db63dce574": "coffee_table", "f780034a-fde5-47dd-a4ab-079fda0e0502": "ceiling_lamp", "08a0aeb2-cab2-46a3-b392-9f69e7c2b823": "sofa", "5d59c748-ed7f-4809-ba97-f82f2005961e": "chair", "89eb27f1-dac4-45e2-93fa-4dc0f44e9793": "bottom_cabinet", "b5f3b10b-ded8-44af-a268-7361e05ac41a": "coffee_table", "0c7dc4b5-592d-4041-b3b9-8f4cdf2b30ea": "sofa", "cef4a05c-0eb0-47b4-8df3-57824eca7969": "ceiling_lamp", "2bd1dfa7-2747-4628-b83e-288d3d81946a": "bed", "7437b7b3-dae3-4e6b-9c23-aafe85beda87": "sofa", "47466fe3-2588-407b-a387-781df7bade38": "bed", "04b7beca-998e-4249-9aa2-8179e547f7fe": "chair", "f70d01ca-f3d6-4437-a841-d93a8e7b1228": "sofa", "b7dafd0a-f3bb-41c9-92b1-62925f0fb7b9": "coffee_table", "55b3d721-c41b-405b-889a-8a8b16023230": "bottom_cabinet", "722a8383-3ad7-4344-b2be-ebf1dd12f451": "table", "52b4311a-96e2-4a58-854a-7c01a9b70de2": "shelf", "fc92a67b-2e33-4a34-b4f3-b8b4c7e9ac9d": "table", "9c8f17d1-6051-3122-8c64-dff9ec99726f": "table", "e11b5f53-d9d3-4358-a54a-db8d8e1c906d": "chair", "31cfd838-9547-480d-bca3-6f733dadef93": "chair", "d42a8632-a9dd-4fb5-b5f9-8d779738b806": "chair", "485fa040-ac8e-4396-a3d1-36de9eefef8f": "table", "4e90c984-635f-4e05-9695-cacae33724b9": "coffee_table", "7db7a7dc-70af-42fe-9601-ea991cc9f653": "sofa", "016bc42e-c044-3a36-8bbf-5db79d89585b": "stool", "a00ba93b-9966-4589-a697-cdb7ddab9565": "sofa", "42ad6632-98b0-46d8-9969-ed8d67bfb2ed": "bed", "b24e5a05-9b37-49c9-be80-866e18368a15": "ceiling_lamp", "81a4c66f-fdf7-4190-990e-53086ad8d83d": "shelf", "d4ade599-2d26-4f15-9b52-f69a9b81d4f8": "coffee_table", "02190a8e-1841-4b11-80b0-c9c5e6e6ca01": "bed", "6aadf8da-aae1-47b3-a738-b1bf0f7a773b": "bed", "2736e048-b4e5-3ccc-a642-4da04847d417": "chair", "8f4f873e-6974-4126-8c16-ab7d85204903": "shelf", "54888c26-b8c1-4c6c-b4d9-1f8b081c7202": "bed", "447067e9-90b1-4a5d-8099-792da65a13f5": "stool", "ebb03946-5a69-4879-a992-f8a10df411db": "sofa_chair", "e3380b73-0f85-4e24-ba8e-66855eae3e5b": "stool", "8968ca4c-2f73-4a12-b5a3-7f95d9fb4e58": "ceiling_lamp", "674ec9db-2450-4514-9542-9646ce170098": "bottom_cabinet", "7da4a468-6552-4afc-baac-ba9a4e6c5a7a": "bottom_cabinet", "611473e7-176a-4678-9ae4-b8184cdf8039": "bottom_cabinet", "87b8a63e-06f7-470e-afb0-33191debb3f0": "sofa", "ed6e25e5-0497-4390-aa5f-2b3197f40a4c": "shelf", "785f9058-1099-4f33-a0a8-0846ca95b536": "chair", "801e10dd-f1ba-4e75-8d22-d5766ab90147": "chair", "a6023629-ef1e-4204-acd2-158e56133ffc": "shelf", "582aa35b-9184-3fac-98d7-b4abd3f2e985": "chair", "b3e73de5-e531-42e9-9883-fa9daabc0de7": "bed", "498a9312-e776-4525-9a9c-3225df3304e4": "sofa", "8ab37369-7af1-4002-8bef-c59b9cf86b0a": "shelf", "a32fbc3e-32e7-44a9-b947-306c42d3a34d": "ceiling_lamp", "fd86bf0c-12eb-49a3-a58b-cb42d5e979e3": "ceiling_lamp", "5a574d57-03b8-4a9c-b48a-b83bc69c93de": "sofa", "5f5d42ab-16f1-4d1c-a10e-89723ff9c05d": "sofa", "863eecdd-fefa-45cc-9a3b-467b4bd81d3d": "bed", "256e7cf1-9533-371f-b5d8-fef1ce0959bb": "table", "c44cfe6d-89b5-457e-8682-7075f2a50dbd": "coffee_table", "6345a6c6-be9e-46f2-a1ce-d44f8f80894b": "table", "3ea40316-35c1-4bf3-8d7d-ecd828f82a3d": "bed", "89190118-3e68-4f86-a6f4-10ad85be929c": "sofa", "6b7a05c2-49b8-4610-babb-85bc2dc549fe": "ceiling_lamp", "621210b8-9eee-4176-b940-fd2202842914": "coffee_table", "58470854-b3d3-4d63-a3e0-5f9bc1add260": "shelf", "a36292fa-9db2-477f-bb32-b2a7b520275e": "ceiling_lamp", "3f455611-b7ae-4d29-b5c7-249ae7f4b424": "stool", "8525c14f-b34c-3499-b48b-4aa79689dadd": "chair", "16cb7de7-b323-43d7-abc4-b10af95649df": "sofa_chair", "0882ad82-29f8-4829-931e-1a3959df88d8": "sofa", "c173a7a1-90ab-4bea-86ff-b07913d37893": "ceiling_lamp", "80908440-cf51-446b-b637-8ebd8ccc7f0f": "ceiling_lamp", "0986c15d-1e67-4b12-90f3-998619153ca6": "coffee_table", "4086d2fc-35f3-4567-8126-297feba30c3a": "bottom_cabinet", "7088299b-c3fc-452d-83ca-f5690d5e0a5b": "table", "c6a80f2c-1ed5-4593-89dc-84aadee33698": "bottom_cabinet", "43bd0910-1dd1-4b1e-9ba2-e9801e6b5761": "sofa", "dc93f346-4ca0-4f35-b362-0af393421fb1": "coffee_table", "5972b934-343c-4428-917b-e7f6524c4d89": "bed", "140096c7-ce2a-410b-a8fd-b2f771a540c2": "sofa", "866a37f8-d4cb-42af-a1fb-ec27030f536b": "sofa_chair", "64b3d693-e48a-3452-921c-2e3ebf5e6969": "sofa", "f4d86465-1f41-4562-9e3d-3d4e239a9d1e": "sofa", "5b48c451-3840-4051-9c78-100ed7fd4164": "bottom_cabinet", "0e90ef50-aced-4b4c-97b1-cd7ced5724f5": "table", "0a7af548-65ee-4e4e-8e0d-b0285f0e32d7": "table", "8d1d5369-b537-4585-ab85-55d77804a5a2": "ceiling_lamp", "72f09fc2-7f0e-44b6-9c60-f5bd9161696c": "stool", "03a33ab0-188b-47b6-8a4d-44e428670846": "sofa", "47babdd0-b7fd-416b-a257-fc23d885f4f0": "bottom_cabinet", "dba3e1bf-4e94-4497-bafe-d27fe3563d59": "ceiling_lamp", "eb8adc45-62a2-46ae-b880-bc79208f4b5c": "ceiling_lamp", "2eb772de-68d9-4437-8ba9-124989fbd7ce": "coffee_table", "da2f4cae-4c21-4671-aaaf-2eb1f5424f16": "ceiling_lamp", "62c3067f-9eb2-4558-9996-dfdb1051c37b": "sofa_chair", "9f6b862e-83ac-493d-9213-fd09c1ef21ae": "coffee_table", "cd7907d9-b554-4118-8b91-a4ccd5360de4": "sofa", "7d3a8795-c894-4d93-84b5-39047238e813": "shelf", "344d4b32-b60c-4ae2-b170-6dc33fee094b": "ceiling_lamp", "bb2a7096-97dc-4182-887a-d1fc7a2e3e52": "table", "508404d3-d635-4d5c-ae4e-e3d5d412958d": "shelf", "3728088b-f92c-48cc-9bd7-91b411890d9d": "sofa_chair", "6dcfcec1-7795-4324-a032-a32e2894550d": "sofa", "6f9bca5c-2c5f-4c9c-8898-bf3a1786e90e": "chair", "6ae6cebe-3fb7-48f0-b43a-6e1626ce3f9c": "sofa_chair", "c043997b-4487-4e03-9c29-8299829a0d5e": "sofa", "160cb7b0-aee3-3580-8fc6-1c067141f42c": "shelf", "40d61d5e-965b-457c-88e8-287cc69821c9": "bottom_cabinet", "7fe102e7-1b44-401c-a3fa-4362b5e2d77d": "stool", "ffef3d9d-ab7f-4224-8216-4f41178f7168": "coffee_table", "0bdedce1-da4c-403c-be4c-187376bf9b01": "bottom_cabinet", "df18ac99-a364-42a7-b66f-427d4fed2ef5": "shelf", "ac605485-baa7-4f0e-a988-8712daf16959": "table", "ee8f6086-64d6-4da4-bcd5-945490ec8b57": "table", "5029425c-701f-4cbd-bd71-2db071fcd19f": "ceiling_lamp", "14ed8ed7-0511-418f-9d73-d3feadddb331": "sofa_chair", "00585bed-3c7b-495a-838e-ff0c35cb03e6": "bottom_cabinet", "47f34fa6-cd94-4fac-8a76-7ed660e7718b": "table", "482d8cae-ecae-46fa-8a9d-4524734c233e": "bed", "01899124-9a73-4a42-bee2-ba55f6efb8f3": "stool", "d398b084-03cb-4457-bb44-da73540ee796": "sofa_chair", "82f392c4-3d5c-4559-a3ee-5c643500585e": "bottom_cabinet", "04bb0dd5-b86a-42bf-93c9-b5710faa9e57": "chair", "dc80ab4f-570f-435b-9357-46efc09077ef": "coffee_table", "b4578773-f0fd-4f0d-9964-acbef6aaf8c7": "ceiling_lamp", "588037d1-e7af-4fd4-bede-98ffdab78b23": "bed", "6bc00099-da47-4411-b73d-b9845ecb4631": "chair", "505fa793-9088-41e8-8a5f-a897487f2859": "sofa_chair", "408eb682-fb58-4be8-ae03-4ef613f8699d": "sofa", "710163bd-fdf3-4ca6-8b8f-1ebf70cc1d9c": "ceiling_lamp", "cf6531e1-a5d9-4125-986e-28608bf134d7": "shelf", "75d0ab70-5624-31ef-b86a-7e6a58e58ca5": "table", "67bd6ac1-a8d4-47d3-90d8-acb96ffe7867": "sofa", "6c097118-c8cf-475c-b918-189316a7fa3b": "bottom_cabinet", "708a73d5-bbcc-418b-8c1f-b5812fb26b72": "bed", "690acb41-1c8a-4222-b3de-859266dcee1b": "sofa", "03a8f97d-84f7-3f92-9511-cbe4fa4afbed": "chair", "8fa86ebb-d2ec-400b-b3af-be466d3ea2c2": "coffee_table", "5fa958c9-2026-4366-aff4-db59257d0427": "bed", "00f5aa82-1cc6-4049-96fd-903492344e38": "ceiling_lamp", "db94b918-4b53-42f9-839c-c18cc2c49e3f": "ceiling_lamp", "685df4a4-cd69-4f0b-82f5-675bd0738881": "bottom_cabinet", "6c21320e-69d2-4a57-ab32-28961792fbae": "chair", "0a79b3eb-03c5-3df4-9a60-b4b99c443d87": "chair", "91874d52-4f31-4c6c-a66f-a0a7dbd3e4a7": "shelf", "2733efef-df31-45f7-b427-c3dc7437a75b": "bottom_cabinet", "4289dfd7-63cf-47d7-ad83-39327850eb0d": "stool", "78c603ae-d755-41a0-bb7e-759220303454": "bottom_cabinet", "632e645f-97dd-4987-aef0-65a8ea2d3c59": "shelf", "29c28662-2840-4446-88f6-bdec3d2ce944": "bottom_cabinet", "7835bcf2-16b0-4835-bbba-2c7d9b36dd2c": "coffee_table", "0b32b9d0-2716-483a-a9b4-48c10c44dc41": "bottom_cabinet", "59d4a5f6-41e1-4efa-b280-0cf914bb084c": "bed", "e894d90d-960c-40fd-a6fd-c4d87b1dc2fd": "sofa", "67205d22-8f31-4c83-88d3-783aff8721a3": "sofa", "05e875a4-a420-4c81-bcb3-e985eb856f22": "table", "b50df533-8bcf-440d-8591-e0767ead1c45": "sofa", "0c6395de-94db-41bc-bb9e-390fb2fcd6db": "shelf", "5e11bbde-097c-4511-bf7a-16bedc856b03": "stool", "07c12b12-11ec-4038-89e2-760308edcd1f": "sofa", "6a860c92-b1da-4f65-806a-87027c0de85f": "chair", "5ab1f8b6-8f67-4792-be0c-1e447e205492": "bed", "d580e239-6a9f-4cd3-9bf8-22e21e14cc79": "coffee_table", "81bfea92-9a56-38eb-8bb2-ffa5b572fbc1": "table", "0a52cf6f-5039-4606-bf33-cb9057f26fb9": "sofa", "8416a2eb-56dd-321b-98f1-d75b316d481c": "table", "23361f63-47ac-49a0-aeae-b05e01d5626a": "bed", "6d2e5ee5-252b-4054-99ba-8ce18adc6ea1": "sofa", "b98b384e-3fd6-4af6-9b6d-b4c1f1441460": "sofa", "65a9645b-6d78-49a4-9704-e91176ac250e": "bottom_cabinet", "b7cc9510-0174-4c4f-8b64-f0a5d0eb4e4b": "sofa", "78b438ea-7c24-44db-a45b-1918cdc4a191": "coffee_table", "4a8b2e50-451e-4ee1-a509-697f87481545": "sofa_chair", "28e9a53d-28be-4d2f-bba1-6ef80204cd69": "sofa", "6591a032-de6b-4f47-ad67-7ca28584e65e": "bottom_cabinet", "b74de7fc-c3c2-4a58-849b-76f542ee332a": "bottom_cabinet", "c384f3e2-08d2-43e3-935e-3929028b2ff7": "ceiling_lamp", "31cd1c8b-74a7-4979-8397-2fbbd5274f80": "sofa", "45b0b83a-234f-4d95-869c-1b84eaae4371": "bottom_cabinet", "c1ddd574-e823-43df-8a17-11b93eeddc6c": "chair", "2fd20e33-b8c7-44f3-b2b1-de1877503ea7": "table", "4ab5b8ba-3882-4970-9e68-403298b70a80": "bed", "6988fb9a-1e97-402d-bbf2-6fbf46bcb117": "shelf", "38b1011c-7c71-4c0f-ae0d-f448baad0297": "shelf", "ca4bf9c4-48a4-4c2c-a6d8-2ef852d09cd2": "table", "34a3949d-ee04-4eb4-a003-b74c2c91c4a2": "coffee_table", "fb7fdd38-334b-4fd8-a56f-926067fe3bc1": "chair", "2403c725-cec6-46ba-8d43-b7b87834a71a": "sofa", "98b1ddc4-a86b-4c32-b245-95c8a8d49a2e": "shelf", "beb60ebb-89fa-46de-b9d1-7c34f04aad2c": "shelf", "634e0dff-c871-4ca8-9023-079fa733c82c": "bed", "6748f033-7e07-4ea8-8daf-ffb155b65067": "bed", "380319eb-c155-4ddd-b99b-54c538629e8b": "sofa", "dfd2e443-212e-47a0-a4e0-06486e20b564": "coffee_table", "ccb862af-0731-4ec7-bda5-9b11506190f6": "bottom_cabinet", "51373f5a-a662-4011-ab5c-596fd432a5f9": "shelf", "d48cb594-5258-4539-be4b-2889783cb0eb": "coffee_table", "e4883e12-0c7f-4397-9f0a-e8c424c7cd8c": "table", "4a584aa5-909b-4193-b1ea-3a63f6eb4faf": "shelf", "4779bf60-ffdb-40ad-9933-6ea65b0be9de": "shelf", "54053cc9-17bf-44a6-a4ea-f259c9a29db9": "sofa", "192ac441-48b7-4559-bc02-7c532171b531": "bottom_cabinet", "634aee31-c2ed-45ae-8e8a-e0a2e914cf63": "shelf", "bf92a921-f72d-4399-82a3-b63a171f8a88": "ceiling_lamp", "36dc4a3c-8181-46e5-a3aa-a69b01433827": "coffee_table", "5482d002-9364-48b6-a437-4aad9d4a5e07": "shelf", "c1e3919a-f707-4bc7-9b0b-e7c13c315bf9": "sofa", "66d08001-05dc-4f4b-a52b-5901b64fadeb": "bottom_cabinet", "c2f78b47-9870-4d18-b408-61b1521b5c0c": "bottom_cabinet", "7809e75f-4cb5-4490-9029-3c67e635ab5b": "chair", "3d90fbf5-64aa-44be-b8db-c4b0593aa6b4": "sofa", "c4c8ed38-7bdc-479b-ad41-40efb930aa35": "ceiling_lamp", "6c5ef170-3b11-4e6c-b20a-1b7cfedee2c9": "sofa", "01dfc00c-638a-4890-8788-ccd35e567602": "coffee_table", "be222e30-10a6-4e3c-85ee-8144f581482a": "ceiling_lamp", "6d7f6215-768a-431e-9e2a-29a66bcceee8": "bed", "b8cb3d8e-7d0b-45a7-ae4b-57c20c87275d": "bottom_cabinet", "60b85459-1e82-4cad-a03a-71ec484b5e31": "bottom_cabinet", "6a0b1325-4b16-4fd2-9f42-2742a8f8ca6f": "coffee_table", "1a09235e-b9a9-44df-8bbc-121b66ef9d29": "bottom_cabinet", "b73be77c-75a7-4c80-a15a-a963946f0cf9": "bottom_cabinet", "a419b5a4-4bfe-4e04-a3f3-7c7e3e9fcd17": "shelf", "6c2fd22a-75d5-4f18-bf23-d80347bb4f53": "sofa_chair", "0fc59610-c9d1-42b3-a536-c2b9e05c366e": "bed", "6a7eeddd-0155-4b5b-86ac-67e6a6ca9e39": "ceiling_lamp", "56bed37a-c205-40b0-97c2-ffd5c47b1b6c": "bed", "6bad9949-125c-42cf-9bb5-eeadca2343e9": "chair", "d96a5f99-7e09-4018-bf92-36669d13681a": "shelf", "6b12c1ae-f3aa-4a27-918b-8016f32f6264": "stool", "92678333-6047-45ef-88e3-dacea1bb04a4": "ceiling_lamp", "65052830-e94d-4398-b647-fab1406bdbc6": "sofa", "cee9eff2-0f3c-4968-9c8b-ea34f976c0e3": "sofa", "6ae84081-8907-4796-b732-c23949add087": "bottom_cabinet", "615fd1fc-cf8d-4f30-bccb-b049c977e80d": "bed", "0d108bf9-f65f-47a6-912a-d6c0727b4e30": "shelf", "f041de2a-4d3d-4669-ab70-84c24373f612": "sofa_chair", "8ef74600-39f7-43b4-9950-4766a8ec2abf": "bottom_cabinet", "04345dcd-9495-46bf-951f-3c055bdf185e": "bed", "65ff7ed7-5a6e-40d5-a30a-ec9c346d56c7": "shelf", "359b4dcc-8937-492e-b7b9-1049780b7357": "bottom_cabinet", "0fc8608d-4b89-47f0-ae02-f96d0f1ed849": "sofa_chair", "a9d3ec05-09b2-47da-93de-d9fb6104387f": "table", "49103a22-7e99-475e-8e8b-53bbd180f437": "chair", "6486b048-5518-4561-a3df-5449b3dae62b": "sofa", "e2a8b113-eeaa-4aec-8b3f-33d6819f346c": "stool", "52430fec-51c3-4556-a5f0-4835ee0eaeed": "sofa", "eb08c640-737c-4b76-a808-3fea37f657e5": "shelf", "77f25ff8-e3d1-3557-b056-24c2a7c5d17f": "chair", "3de8e726-0fd4-4325-b092-aa3658cf8231": "bottom_cabinet", "95f1f4b2-f600-49d9-af9d-e42b614292f6": "shelf", "d4c49505-8a5e-4766-b5cb-6b6fe7142292": "sofa_chair", "7496d387-d436-341a-9f14-eee699ad10ba": "table", "085bcfd8-4f84-46a6-a5cf-43884364d41b": "stool", "10a3296c-fcb7-303f-bec9-1928ff902025": "sofa", "e314cd3c-e309-4614-98d2-13f99208ced8": "bottom_cabinet", "4285f421-d8a2-4d05-99ac-3d6e504e10b1": "sofa_chair", "09abc58f-e1ae-4f8f-a7fa-136c6f8b3ebb": "shelf", "0b05744e-198a-4e9c-836d-a5095da21c78": "bottom_cabinet", "c0f53bec-ee1d-46c0-8f37-811e95c1cf09": "chair", "d8b554ad-633b-4dd4-91dc-f73d862c33a2": "coffee_table", "0ce53f9c-0199-477e-9c85-bfaa0c53d0f9": "shelf", "62cede8c-b7ef-441c-a04b-9ea21df139c9": "bottom_cabinet", "5dd82a41-61b0-39df-b8ac-007f773086fe": "sofa", "6ef878a0-03be-41db-abb4-60d454a231de": "ceiling_lamp", "e2fbdb1e-a6ee-4f0e-aa52-bb294b8ac3b0": "sofa_chair", "1e323e71-b339-4f5a-9d20-f073f8b7b946": "sofa", "678de75a-d639-4f18-832c-c02253eba82f": "ceiling_lamp", "0551fe88-da5a-4267-add4-428499e18cef": "coffee_table", "65d12783-db5b-30ec-843c-eef40abff476": "sofa_chair", "631fc71a-e898-447d-82bc-9ca9867c69fb": "coffee_table", "6eeef0a6-13c0-49d7-99df-f7d835f9970a": "stool", "d2268667-5751-449b-8f06-67017c7e82d8": "chair", "26ec6b73-48a6-441c-b005-61a2fba2e4eb": "table", "07d68c62-a30f-4dd5-92aa-28cc0b58bafc": "coffee_table", "f395c1e3-b015-43a4-9ba8-efad92bcb4e0": "sofa", "51bb6c7b-2377-4f89-898d-8cddbe1b17ae": "bottom_cabinet", "038b62bb-b277-4d92-8afe-3ff115add02c": "sofa", "445ed140-e411-4ec2-84a3-29ff27e39431": "coffee_table", "6cea7125-5624-321b-9411-1acf3f91e410": "chair", "d358cff2-1039-4836-bb26-b74a51ad207a": "chair", "faa72f09-2f6d-4a10-9165-d54b491bf64b": "chair", "e57d209a-0a16-4961-85e7-1aee139ef322": "stool", "12f172a7-7538-445f-97d6-b9854cd32255": "stool", "814056ef-5c62-4274-8dab-8523a82493a9": "bed", "d70fba9e-d546-407c-b1d3-67b4cb0d24dc": "sofa", "95e883fb-e51b-4d06-a1b6-1565f36a6506": "shelf", "5cf20093-e8c1-405f-aaf7-ede2c1ce2819": "bottom_cabinet", "05aca84e-9a24-45a1-b6e7-482380d34304": "ceiling_lamp", "2057d07d-11a6-4873-9199-8eca3f6fcb8c": "coffee_table", "6c110998-56b8-4ea2-9b52-0813e42da661": "bed", "eeb58e8b-e086-437b-b537-8e2004be24fd": "chair", "4af38ff6-c130-4c58-9800-d6b4e9f34b3d": "stool", "d571e838-c39b-4c1c-b008-f3d9c7a78420": "stool", "7c9fe3f0-ee1a-4dca-8ffc-0659c6035c84": "sofa", "e6157ec0-3a08-44c9-bfb4-0fd3d19ca60c": "chair", "11528d30-9182-44f3-a15a-8c0a8fc4132a": "chair", "4080ecdd-247e-41de-9060-62d79ea227cf": "ceiling_lamp", "0412cdcb-b191-4f49-a22a-e206e61ef1c9": "bottom_cabinet", "1e81f176-e7fd-4580-8697-aeff753062fa": "ceiling_lamp", "83db09d8-0c4c-4b13-8909-404bdf4ea3ec": "bed", "ec9190d1-cc42-4a85-bb1e-730ed7642f51": "table", "b45e964b-8727-461b-b9df-5bbe9a229302": "sofa", "74ae784b-9aa5-4da6-a814-11c57e980d9d": "sofa", "82823f7b-5be4-41c3-b72b-fd309bd910d1": "bed", "29e6f9a9-27ad-4fcb-a6fe-5bf122e70de5": "coffee_table", "88d60dce-8045-424e-9e6b-54eb79c22a4e": "coffee_table", "12ef1b07-8691-4163-a2dc-411ffc0fe964": "ceiling_lamp", "5949665c-499d-413e-ba9c-b8595ee700e5": "chair", "1adda571-cb85-4eb8-aee5-a30a010d70e2": "coffee_table", "69fb7c92-ef59-448d-888d-bd9d68927a2c": "sofa", "4e015268-8d2e-4d84-ba20-031dc2924370": "bottom_cabinet", "2972c0ae-70fd-443e-9a29-1cad1c1678b1": "sofa", "b8049a96-1941-4f46-a788-347f425a21f2": "coffee_table", "f5411f08-a573-4f9a-8c06-323e91a49997": "shelf", "5b8bdcc2-74e9-4f08-8f3e-652773b07aec": "sofa_chair", "c60a4fd7-6abc-429e-86fb-cc2b5010773c": "stool", "0353b780-27c1-42eb-8544-212c32c1afb3": "ceiling_lamp", "fa26a0cb-d334-4947-8717-5556fc5d28f7": "sofa_chair", "481e10c7-9e78-46ef-83f2-f69cf4198cc0": "shelf", "951da582-852c-4702-85c8-f2435a5e47b3": "bottom_cabinet", "27aaa3c4-1650-4c38-8875-140cd587b1c7": "bed", "de33297f-0b12-46d2-bc62-b0497dadf52d": "table", "bbbb9760-8ea5-4717-94a2-1ae3cb35e93c": "coffee_table", "41480acb-02de-49d6-87dd-0b39aa5cb32a": "coffee_table", "6dd08dda-261f-4b00-be86-363d926a0aa2": "sofa_chair", "51cfe8d4-e373-473b-89c3-ca0adf3d828e": "coffee_table", "1f1ed866-7031-4313-a60e-2af3ba476376": "bottom_cabinet", "ad37faea-9ed2-412f-a856-e4a4584c5e24": "bottom_cabinet", "a80632b4-90d6-4527-a7a1-28df26a72d53": "sofa", "e0e7bf64-ebbe-4fa1-9fa0-e7e28788ce7d": "ceiling_lamp", "f846faa9-017d-4f8a-81fe-e326b7e8b537": "bed", "4076cbe9-73a1-4f18-a941-21851fdf1962": "sofa", "e344ad1f-8dad-484c-a673-a25db3a441d6": "shelf", "22c239f7-1cd5-4e8d-a792-9a6d6bad3bf0": "ceiling_lamp", "1135b833-d8b4-4884-b70d-8e6e856feed7": "table", "15203101-e0f0-42ba-ba89-513f75bb137a": "bottom_cabinet", "5ae0d9c7-b509-458c-ac58-8a91322deb8b": "table", "b9191d60-af46-4d58-9ba2-e54cdf6024ba": "sofa_chair", "6997e6e0-758b-42be-9b48-5475ac9773f5": "sofa", "c168a654-71df-4d19-afc7-27936790e7f5": "bed", "7db50e68-5fe8-4b53-b32e-09c1bb9828ff": "bottom_cabinet", "1d1b823c-3f53-4cab-81b8-3a4b4f67b820": "sofa_chair", "9670b9b7-8743-421e-9a11-7360bbd595c9": "bed", "81ddf074-b7a6-4240-a931-f755a2e77efb": "stool", "08aa4869-7670-47e7-9aca-cc78b3de028d": "coffee_table", "27a9c7b2-01fe-47cf-8208-09d38eb5e84b": "shelf", "4b679027-5143-42b1-a331-8bac346207ec": "ceiling_lamp", "ecb51f39-b6ff-442d-8b81-dda39f6a4bc1": "ceiling_lamp", "1aa41018-8732-49dc-8a5c-949f038dd283": "bottom_cabinet", "fcaf5f7f-7ee5-4e12-92ba-afd64c6e9fc2": "sofa", "0af130ac-34bd-4ea2-8460-6f1820ca2578": "sofa_chair", "5d297a14-19cd-4952-8804-22fdd8b09ae2": "chair", "9a20628d-a93b-4b20-88c4-14a72c492e7f": "coffee_table", "4d5fb167-137f-4c53-9016-c8bd80bc4734": "stool", "6cb9622a-71e7-4940-bc40-9a1af4dff3b1": "sofa", "65fc28ea-ee35-4773-9439-21f9497424c3": "sofa", "8d299fcf-5e2b-4953-92ef-3970de46172f": "sofa", "611f89cf-c6a9-4c2f-b09b-0584d75381c9": "table", "032f82f5-ffc8-4240-9545-ec5311eaf01b": "coffee_table", "154c23ee-080b-3989-9278-68a26c379389": "sofa", "311ec0f4-b14c-43aa-858a-a1eb3b94b0ca": "bottom_cabinet", "610e35a5-595b-4919-91bb-de99ef9de8b8": "bottom_cabinet", "16254d03-ba33-4370-abe3-9ee27a774fc6": "ceiling_lamp", "b085ca1b-c34a-4d6b-94b6-9962bb99864c": "sofa_chair", "05e1e090-8fc0-357a-9ad2-19c4289c6058": "sofa", "e49f98f1-cf5d-4214-9fb7-83f7c4620d31": "chair", "06044eb3-2670-43da-ac45-f8db75729698": "bottom_cabinet", "cfc4944e-bb2f-47a3-9340-deb6998ec92f": "sofa_chair", "7a41ea52-0793-48b2-bc94-13dfb097a366": "sofa", "3a454725-d2ea-4946-b453-ec00e50fb65b": "ceiling_lamp", "0ac175bd-8a0f-4f81-87c8-aa2dc980bdb6": "ceiling_lamp", "831cbddc-22cc-4c7b-b4a8-2ff6f4825f87": "sofa", "5b655957-9943-41f5-85df-a0b5beba545a": "shelf", "61bbf21a-9491-4f0c-a82c-2f55def9ed95": "ceiling_lamp", "a6696ab2-7ab1-4865-a0ea-9b1aba908285": "coffee_table", "168702d8-2dbd-4cf0-9061-2db9a739b0ae": "bottom_cabinet", "f17561cd-0ed6-4bda-85ed-b2360990e04f": "bottom_cabinet", "c95a80fb-4900-49c2-958b-baac4aedaa14": "shelf", "0de40914-8d92-4168-96ca-3f2a5a9d9100": "ceiling_lamp", "e0088830-bce0-42c5-9051-5fcd4ec8f2a8": "coffee_table", "41f50a22-81b4-4274-9ce4-0cb6e2c0841f": "chair", "2e49bd3f-02c6-4010-95b9-a7e7375dd992": "chair", "6bdd7e5f-5dbb-479d-8a30-30ed9995cbae": "coffee_table", "f6d66105-5fa3-4bf6-b634-6429476a5b29": "table", "936077cb-b825-405d-a4aa-511afb102964": "chair", "5f4ce808-c936-49c1-a65c-87a48c3b5bc3": "sofa_chair", "444870b4-22a7-4161-a58c-87afe1336ab6": "sofa", "e2f556f9-8591-4dc2-a847-49fb1b8f2709": "bottom_cabinet", "69c5569e-2685-4fd4-b691-61e16a893b4d": "sofa", "aac7bf48-3144-4377-963b-137b12324255": "shelf", "b0a8e58a-bc9b-4720-88ed-3b99d53c6659": "bottom_cabinet", "e83af0bc-9f76-423c-a25b-1615a7f4384e": "ceiling_lamp", "7954392f-8208-42d1-8659-06e080c8fe50": "sofa_chair", "a4872807-d812-4a08-a1bf-cd958e8c33bb": "ceiling_lamp", "dab5ae00-0024-4e5d-a362-13e81efbf170": "stool", "6ccfb48d-0b71-4483-93ea-fb4be2cc2367": "ceiling_lamp", "eea54d62-f168-436e-ba5a-0d35ce9d1fa2": "shelf", "6d7294dc-7fea-4bd2-9789-a2f26fc6d362": "sofa", "08290e00-3e26-4b49-bbf8-6514e51aa40c": "bottom_cabinet", "da47801b-a9c7-4370-92b5-2c13bdfd6c42": "chair", "75c0391d-61cf-449a-9a09-b1550c8b5cd6": "sofa", "12331863-e353-4926-9b40-e1b0d32e3342": "sofa", "9a0fd492-82ac-4f53-b2ad-da3b3b56f5fc": "ceiling_lamp", "b9e4a47a-dcf6-4e65-8fa4-db1eaf8f9bc8": "sofa", "664b58cd-2670-40bf-9c48-5d4ce60bd91d": "sofa", "cf11a369-e0de-4ea3-80c6-913e1ed3288a": "coffee_table", "5c8ca8dc-a39e-4866-9611-77d7a02ea82b": "sofa", "3a9e2767-188c-4413-8f74-215515befded": "ceiling_lamp", "06bbaf72-56e7-4f9e-8be4-cb028c7b73de": "table", "20a1fe44-10c4-4685-bae0-5ce564e1a19c": "sofa", "9ec55a76-eae9-42af-a24d-9df9e232548e": "coffee_table", "43e87cfa-50da-4ffa-835c-bb39a7d05cb5": "chair", "da215b33-519e-41f0-bc09-ca5443d099f2": "ceiling_lamp", "26b3bd51-9ae6-42db-906d-fb27e2d0e7ba": "coffee_table", "46620ff2-f52f-4d9e-8da0-50b3f698b3b8": "bottom_cabinet", "747d8698-8c32-460e-911c-3dc8a1d3c988": "stool", "80ee0dcc-a5e8-400c-8d41-f04f8b1d937a": "sofa_chair", "025a63d5-0600-4101-8252-b6318f938695": "bed", "bc7c90bb-c1cf-4b1d-ae98-5f7fc5ba0dd4": "bottom_cabinet", "e45091f7-8083-490d-97c7-15e20c9004bd": "bed", "81c1c1f1-e65f-4d39-924f-ae77b420e904": "stool", "1bb1325f-22f8-448b-9308-76c2e30d269e": "ceiling_lamp", "90e003d8-6ee9-4d13-b19e-436de0c09d82": "coffee_table", "12f6166a-3223-4b42-8fe4-90036e374a4f": "bottom_cabinet", "ff2c5a07-f913-40c0-9a0a-51a01b8f1963": "shelf", "80a1df7a-a234-48ea-923e-0bead6caf719": "bottom_cabinet", "a3d017a0-f180-45c9-b402-4abf214e0b4f": "chair", "59e702ed-ba7f-3193-9131-064e86b0c831": "chair", "817a0809-f94f-43cd-9915-2b9e2d58b7d5": "coffee_table", "56b52214-e585-4207-a166-d076b9173bee": "sofa", "4b743cc1-b131-4e4d-bab7-7b0cdaf6d8b4": "ceiling_lamp", "e3494fe1-b96f-4c25-ab30-00e715e4fe02": "ceiling_lamp", "75b5ee8a-f4fd-4d36-8c91-a0542bc7c9f6": "sofa", "0ece6933-46f0-3ad2-a9c5-8daac15e5ad3": "table", "2220bef3-61ba-42d6-881e-2f3df67f83a3": "sofa", "5600f477-e7d0-41ba-8f3a-289175c8b52a": "chair", "002a0c8e-8a56-4b38-a6c8-75c339d48f46": "coffee_table", "7388a66a-0ef2-4c30-9274-24f575fa4931": "coffee_table", "7f0cc151-111f-4428-800c-a2957579a653": "chair", "102e207e-d7eb-4175-96b0-7b6e6f2b0a31": "coffee_table", "6cb2ed45-cf9f-4e53-89b1-02583f1e79dd": "bottom_cabinet", "225c9976-2a7b-4546-ab0a-c2f2a6b5de8c": "chair", "7f1ce481-2dc6-4360-8b0c-a12f754046eb": "coffee_table", "4ab299d8-9aba-3c95-94fb-be22b71a8161": "sofa", "b98f48d1-9b8b-430a-b803-c24d87a77386": "chair", "4bef95bd-6393-3a83-8168-ccf37034bf4f": "chair", "32773307-6d99-44f7-b717-f89619d98868": "ceiling_lamp", "19356d45-e02b-4597-9493-fcf990392566": "bed", "66e4702d-e391-37f2-86ac-fd3607bedcf1": "bottom_cabinet", "6d15d1bb-749e-3956-ad80-946cf649b869": "sofa", "972f278d-f277-4b92-a6ec-6fc99ed7e92e": "shelf", "6becdf72-2674-43de-b10d-ea8492bbe90c": "sofa_chair", "84d98403-de64-4376-b7c3-df693c816af6": "chair", "3c52cc2f-a786-438d-bea6-92cdafacefbc": "bed", "1f0c1597-17de-4bc7-8da5-d596fcc8ebed": "bed", "e8a962ee-be25-4f59-b461-10fd6e441f57": "sofa", "2719902f-d804-489f-bd0d-f4666cbc922b": "bottom_cabinet", "b734950d-92f3-4955-8d06-232dfc9c56c6": "bottom_cabinet", "713f01d7-8366-4bc8-89b6-1212da08663b": "bottom_cabinet", "5e6fda22-246b-4d43-9690-36cc3b44576f": "bottom_cabinet", "5465f348-7abf-403e-a689-31fc649b75be": "bottom_cabinet", "a6a1c4ec-a9e1-4135-bb78-8311278f3969": "shelf", "97b7ea2a-b96e-4568-982b-227233898e7a": "coffee_table", "2f8be13a-50da-4754-9026-4037f8fb0c45": "coffee_table", "852b7cd6-5f0c-4505-89b4-56db3ae7fa28": "ceiling_lamp", "03b5368e-9fec-30f5-941f-14906c0eb532": "table", "2d80e658-07ad-4f4d-8101-02f2192d0c3d": "bed", "38a842db-048b-4c9c-82dc-25ec5ae04072": "table", "b14fe1f0-f408-47f2-918e-1716703fe03c": "chair", "001dcec1-201e-446c-91d1-d349be1a42f3": "table", "cbcdcac7-0bd7-4068-a94b-6c5fb52639b7": "sofa", "71324789-d08c-4cd2-9916-8d97913b0944": "sofa", "95368c58-59dd-47d8-b164-c54336923836": "bottom_cabinet", "095c2a07-7f10-4e9a-b740-7bdbcbf4b2d6": "stool", "1b96c8bd-7425-4bf9-b00c-ff7c0ad7af5d": "bottom_cabinet", "895c8faf-f785-466d-858b-0eede86b0104": "shelf", "e94bb5c7-9122-47c3-8b30-0c6bc52041bc": "chair", "006c6db0-1477-4340-9163-d08a6cf72738": "bottom_cabinet", "3882182e-1382-4d4b-b280-ca9d76d990de": "bed", "08154cc0-a4b5-338a-bc23-234138f28b8b": "chair", "e48e3031-fa60-4c3e-9e65-d0d5631cae06": "chair", "90e7b378-a2c4-4fe8-a49e-568388a3860b": "sofa", "99bb0a0a-8d3c-4887-9014-d3ba91aacd5f": "bottom_cabinet", "1c81749c-8727-4692-aa5c-c748a3c32d51": "ceiling_lamp", "63af26e6-4d80-4c6f-b826-4d09c042bc2e": "coffee_table", "d83e0878-03b4-43f3-8035-0507eb7bb62f": "shelf", "53d98c26-9e60-41d5-b53d-8aa31d56d6c8": "sofa", "76ceda99-95d4-4e9d-9ad2-54708629149f": "table", "ba810144-5a50-4463-b6ef-b32c8b442107": "bed", "e7047394-9c2f-4456-8eb6-1d5531b1910e": "chair", "833b6c6d-dc98-4512-ab0c-abc92a162132": "sofa_chair", "099858f8-f2e3-43a8-a0fb-8f3230946dd3": "bottom_cabinet", "a0c6f147-7080-4734-9c52-ad0579662d3f": "table", "790d23da-e07b-4885-b80d-be1c28b54858": "chair", "008302cb-ff00-4f22-b076-044493a051a2": "coffee_table", "4b4beaa6-7138-47e3-b80a-6639c6cd0520": "bottom_cabinet", "88433761-5eb0-4d1e-bb75-1fe1eecf319b": "stool", "f5c6c11a-9a55-4f98-ad3b-3f7614e8885b": "chair", "2352f6ec-4d3a-4850-9bc9-dd10a67fefa5": "bed", "dabf5085-308d-496b-9a78-cdff7df6d619": "ceiling_lamp", "7b150f56-f06d-48da-b388-6fe7bd80c6f8": "ceiling_lamp", "e9851dbd-f6d9-49e8-a975-637b4e93f4d3": "coffee_table", "42ad62cf-f771-4ce2-b7c8-fdd0dea7c70c": "bed", "99e4f9ed-44d7-472d-a8da-70de37187238": "coffee_table", "5a21b67d-bac9-4e48-82ea-23a4ef265378": "shelf", "74d1fe81-5592-4cab-a187-ceb4b40035ae": "bottom_cabinet", "33061136-bad0-4ffa-b303-dd8543405dd4": "bottom_cabinet", "52368432-6240-4269-8237-4dd464b4a23d": "chair", "af0390e5-fbb4-4101-9fdf-947d29cda0f6": "sofa", "340637d9-d7d8-4bbb-a8b2-8b40e5453af0": "ceiling_lamp", "003573d9-a6ae-4bdb-a01f-156040f08048": "bottom_cabinet", "420c89cd-767f-4620-80a3-11628403c539": "bed", "19dc59f4-4db3-4180-8085-a3bfaeb3926e": "bottom_cabinet", "06b5cbc6-9ab4-3c9d-a4c3-de7391395590": "sofa", "473ae7f8-58da-4941-a1bf-f79dacfbdde2": "sofa", "7a39301a-3379-4c7b-bee1-1eb721048a86": "ceiling_lamp", "e30d1e6b-d98e-4048-905d-d454ce3e97f2": "ceiling_lamp", "c13078c1-d6e9-4ddb-ba2c-6d3bf3919d3e": "table", "32bc0998-c218-34a1-8954-f608c47fa7b8": "table", "f643700a-89bc-412c-ab64-166918920d07": "ceiling_lamp", "307dec24-4beb-4d07-8b06-d2c715a7b1a5": "ceiling_lamp", "d04d672b-5908-40b4-bdce-28b236ab9e09": "chair", "1b7f778c-b1ab-3f1e-8653-8349544cfc3f": "sofa", "1efe7e95-cc20-467e-a3e3-abc002af67ce": "sofa", "b41f5051-57aa-491e-8a33-2ac9e201173d": "bottom_cabinet", "f5c3d1ab-5434-4712-ae98-65ded6e5c166": "sofa_chair", "91f9c27b-d526-4668-9357-37e35148a54d": "shelf", "ee284979-0d7d-4c31-8fba-da441f2e7c6a": "shelf", "69a2550c-ec04-44d9-a621-e601330a9cb6": "bed", "21910dbc-4da0-3b35-a43c-e4b09ed594e5": "sofa_chair", "3dc8b61d-d325-3e75-95fe-11d53c60386b": "table", "2324e861-bac5-411d-9c27-d16063b1c516": "table", "bff6e7b4-4e17-401d-b684-dc768def3869": "bed", "0e770627-e23b-4b92-95b1-1260ba766abf": "bottom_cabinet", "b0c041ad-2cc9-4b5a-8683-a5de89006ef4": "table", "75b66c36-9d73-4f23-8d83-a4393567074d": "bed", "a6f7872e-491e-45df-b30f-a575911c6655": "sofa", "217bf2c3-d489-4916-aa42-a361a63b8682": "chair", "1a754a4f-7933-4e45-92cb-9e8075f180f5": "sofa", "c297b5cb-8b18-4504-96c7-921d9b7e8d4c": "bottom_cabinet", "afba1a29-9cd3-4f7d-8771-1d78883ca7d5": "sofa", "0c26f980-9c40-4bcf-969d-d315c9715ab8": "table", "a134ec19-ae4d-4ed5-9456-00e66fd76a79": "bottom_cabinet", "d973c9ae-fa9c-4028-93b4-f9d3ad61f4b8": "shelf", "2502cec2-3444-4046-b2c8-8afda329d115": "ceiling_lamp", "fc923002-f37d-4181-a50e-2ec3e54f4ac0": "table", "282893d8-f308-4bd4-a6da-a1d1a4a792e6": "sofa", "7d40c231-5f93-4fc8-9e74-7925b593a1c3": "bottom_cabinet", "49328e15-1016-48dc-9bd3-51d5af2b8edc": "chair", "ca5bf760-7a4a-4452-a69c-21a2f48bdc81": "chair", "1c33b2e8-6c02-3a72-905a-5bea4ae713d0": "chair", "f5becbc2-b8f3-4689-92ac-8aecc4a1bcea": "sofa", "03b036e6-e967-4525-8802-8fb57cb2dbc4": "chair", "7acfde9f-68ee-4be3-b818-dd4717d96898": "ceiling_lamp", "4b82d587-f110-41ab-a8cf-49e33db9bd37": "bottom_cabinet", "c19e1a69-5674-4883-ba96-fc4ee9e7ba85": "bed", "76820ac7-7003-438b-b449-77dafe208332": "bed", "c83adaa6-3842-4a61-94b2-3e9841166c40": "table", "b1cbab5c-316a-4fab-91ea-f75519686f75": "bottom_cabinet", "3ed36334-a9a5-4ca8-9a4c-d75ae4ef9dfe": "table", "b4739673-d393-452c-97f3-40f858bc4460": "sofa", "677b3a7d-585d-49dc-87db-37ea49bdadfa": "sofa", "1b2d3e96-9ec4-4ca8-be79-ac2f4aa9ff74": "chair", "9bbdeba4-2680-4135-a0f3-92874c8a60ce": "ceiling_lamp", "085a0299-9d71-48cd-8f4a-716cb3012978": "sofa", "896e0887-099c-443f-9c7f-bdebbc22788b": "ceiling_lamp", "70540c4f-9d4d-44f4-bc4d-fc835d5dca2c": "bed", "d42deb56-df6e-44ed-b34a-b54f76a8015e": "coffee_table", "788e3060-1ec6-4b92-aefa-b8a645728156": "bed", "5cecef46-561b-4a67-9f1b-87ca3d049cb1": "bed", "55d9617a-d707-440e-9cb6-080e5b85315d": "bottom_cabinet", "8550427a-0812-4064-a864-9dfb6e07b43b": "bed", "b84ecd71-d3a3-4693-8b67-b29dc33eaf07": "bed", "35621d9e-0f8b-402c-815c-3b2606ed7d44": "coffee_table", "7eee70e8-0f35-45de-b7c6-77a8311994a0": "sofa", "7a0ff9f9-85e9-4bde-93ca-c2c929233258": "bottom_cabinet", "53d8a7d2-1c47-4466-8e6c-867e3a63fe58": "ceiling_lamp", "2535584c-19aa-4cca-a35b-06b8dce3be66": "coffee_table", "c4bcf25e-e3a7-4e06-8dfa-17e3636a2968": "chair", "6df7fc8b-b817-49e3-9701-d76289273ef2": "sofa_chair", "f278510b-6089-4f61-a9c0-2a80c66bccb7": "table", "0130438f-1e1c-429e-8cad-b3a16eb00c96": "sofa", "016606df-0db0-33a6-a9d4-2aee03eec507": "sofa", "9f0d524e-3bed-45a8-aef4-042bb706e70d": "sofa", "df7026b9-9ffb-438f-8dd6-d40c8d54225c": "table", "0b76e291-6c33-45dd-8aef-5b83eeb60539": "bottom_cabinet", "11e48b3a-7f5a-4964-a56b-20b5313c1de8": "shelf", "af9e4300-62e6-4c4a-b4d6-1bfc9eeeeee2": "table", "07c890ef-e6f4-4739-bb42-ae9cc9dc3ade": "sofa", "423d39b0-732a-4f88-9f77-8945f91a0746": "stool", "a8b68865-cfbd-4060-9fae-a0181b0e452a": "sofa", "6bf691ae-482f-4bf5-baf3-ef0cc5a4754c": "sofa_chair", "d09614fd-4027-4163-b66c-78a9343008d6": "coffee_table", "ef7265b7-0d1f-42a3-9924-333a9f57750a": "ceiling_lamp", "51e09242-8239-49c7-bb79-2f235f4da833": "sofa", "847210c0-646a-485c-b318-537758e94227": "sofa", "07c11f6f-76ff-4237-b38e-ea55a81ec939": "bed", "54fa35d6-b93d-4684-9093-eef5338e3d65": "bed", "29b11ecf-e069-4f82-a09e-ffca1c9137b1": "table", "4ef5670d-67a8-4216-bb08-93e97d3677b8": "sofa", "572b7f3b-6722-48ed-956d-ebc7367f2cfd": "coffee_table", "47660e99-46b6-4d97-9f59-76f59dd36618": "bed", "673a0ec0-5d59-39ed-929e-1ab36f6a320c": "chair", "0891e3b3-7ec5-4366-940c-94b9a2381d87": "ceiling_lamp", "92e0dccd-1b13-4d1e-a96d-e3166ac4bebd": "chair", "a6f45652-6b5c-405f-b144-eec9fc3f03e4": "ceiling_lamp", "3f80a5f1-0c85-4b36-8ef5-0a020b6bd18c": "shelf", "436ce948-4578-4ef5-bed9-f929c3ecfa91": "chair", "2b36a187-3c66-3cef-855c-2158aa680b81": "sofa", "aab3d173-7393-4585-a105-8da4403ade49": "ceiling_lamp", "1cc42bb7-32eb-49a4-94a4-91ca5717be33": "bottom_cabinet", "a72e6ee7-4d7f-4e53-aa29-abb431c2d84a": "shelf", "c5d2b55c-30c1-4da3-928d-abc49b9936d4": "bottom_cabinet", "43e21b57-c207-426e-b7d1-10442437d2e8": "stool", "66006ad0-1f98-4155-818a-6c29430e5962": "bed", "b03af7d5-6aab-4a20-b2c7-7db05b0846e8": "chair", "418e5712-8bb5-487d-b0cd-2e23d29b8e83": "bed", "ed8f82db-c301-4b62-b9b3-90bdd40d0abd": "shelf", "7bc730a8-da71-4278-9eaf-f567a982b5e7": "stool", "5f717106-c3f5-385b-b706-2d004cf17eb7": "sofa", "2a7ad7b0-dc8b-4e72-b58d-fabb41a48cc7": "bed", "ffe83218-6f39-4093-a9b9-19f81465972f": "sofa_chair", "2b6fb0d5-2e87-495f-9abb-a6d1eccf5476": "bottom_cabinet", "71c821a0-41bd-425f-9311-c689a7d1528f": "chair", "c5aaee4e-fea4-4b99-9452-95d36e6b0a10": "shelf", "949a5f40-e2fe-4c6d-8a50-8decaa4ecd37": "sofa", "05940431-6b68-4a02-8d56-f4aa23e5d98b": "bottom_cabinet", "b9818aa0-fb95-4a9d-b4c6-c33dc37ec16c": "bottom_cabinet", "3fca3628-408a-3948-8715-4cc3925bf1e1": "chair", "63b3a5b8-61a4-495c-a237-4a26a8862223": "stool", "839333ef-96a2-406f-95bc-14564d340d5d": "chair", "250d5f66-17e6-4470-85f5-201a4d4263bf": "sofa", "98420a62-34ce-4a2c-926f-bf7300477f79": "table", "fc30791e-44bd-4450-a55a-eb4610fa22b1": "stool", "155f41cd-8704-44de-9d8a-423ca954ac23": "bed", "313bed5f-191a-443c-8144-1917d80587b9": "sofa", "a675f80c-b4d0-4429-8919-73b55e89a1b2": "sofa_chair", "b7fbba57-73b9-46ce-9847-6074568aea0e": "table", "6e561c94-34ff-4e32-a893-e20a22be3754": "bed", "dd972d97-3568-4b33-a716-f4bc753b2f70": "table", "7cc01f86-dd35-4f09-b6a6-bf0ac4608842": "ceiling_lamp", "4ff49173-3cbc-4513-986e-674ad6c8990a": "ceiling_lamp", "d32b7720-0288-4da5-bc3c-5412364b36d0": "shelf", "8142ffc9-be64-44b6-8d23-267c54f41bbb": "bed", "c7c94aee-60db-4f9a-a071-3e26387438bd": "bed", "0e1ecbef-632f-416e-a21f-09c1bf0468ee": "bottom_cabinet", "81a9c898-8bf3-47e2-bc0c-5dab4b1fdb9d": "sofa", "81e4fc44-062b-427f-affe-6339a7289307": "table", "61e113b3-9ce5-4a0e-aa18-9ea2f16227de": "coffee_table", "69648960-25c8-4508-bcf5-ab288c2f15f5": "bed", "e5313b6e-a14f-43ce-9857-68e9ce2c3430": "coffee_table", "808b1d95-02b6-4bf1-ad31-28b4b946baa3": "sofa", "7c433797-2547-4150-8e34-850a7f581f3a": "bed", "9f70adcf-79ce-4ec3-a958-942482f3451e": "coffee_table", "5b2d8863-28d3-401d-a1bf-55fc1b20b104": "bed", "5ee43159-6e09-412c-b300-032c119e651f": "bed", "1ec3563c-89d9-4a09-89ef-a1f9ca23b007": "sofa_chair", "216f7336-4e3e-4665-940a-d33ca4afb0fd": "sofa", "71a4d3f2-a09c-44ff-9b63-9f0f70098c5f": "coffee_table", "c194ac17-0778-4248-9d7b-1def29224871": "shelf", "abd45eac-f9c1-4244-be7c-9771da5b4e65": "stool", "8e8fa972-653b-47ce-a727-42a5ff5f6f8a": "coffee_table", "6952d5d7-d3f2-4607-8013-59dd3821c711": "table", "0f409e36-6119-482d-a8f9-558bc5cadce5": "sofa", "00c9b87e-defe-4f6e-91a9-e7e21a4e6497": "shelf", "b8c07dfa-00e5-4c85-b95b-051c04df8797": "sofa_chair", "f40dbe9d-9282-4dc2-ba19-38abfe6e7dbf": "ceiling_lamp", "a6b44420-4e2a-40f9-ba1f-9f5f51919e89": "chair", "a08373a6-e9bc-44c1-877f-1c078a9eb841": "ceiling_lamp", "faaf7e8d-5c83-4427-870b-4022238f5a98": "bottom_cabinet", "badfe7a1-83e5-483d-b3ff-c40e57ec29ec": "shelf", "5989c278-074e-3d9c-979c-05d6a4bcd3de": "sofa", "653e1a8d-df5d-491b-b6d6-e9cc5d012426": "ceiling_lamp", "658d62a3-855d-40c2-911b-38d51dc098fa": "coffee_table", "0f778b4c-7406-4120-8f3c-8a9fa867a2d6": "sofa", "4ab50b00-4880-4980-b663-c5078bf7a227": "sofa", "18306d26-ed26-4b58-9e29-40257519686b": "chair", "4446df24-ffa2-3ffa-b7c6-94ebad0fd701": "chair", "11c56326-9348-4bda-8732-380e10832e95": "bottom_cabinet", "53f66291-0eb9-42c5-a01b-bb08b2bc7e4a": "shelf", "2c98bcbe-0286-4264-8ae7-4a4d33d00dfc": "chair", "6e01d4b2-c436-4375-80c9-c6515b778fc1": "bed", "41c2b52c-7f09-4d4b-b301-a4d16e249c3c": "sofa", "00d778e1-69ff-4165-b026-ba56d74b46ac": "sofa", "86c99c80-ffde-3e4a-b530-716ea61ea8dd": "chair", "42e10d41-2ad8-4e0a-9616-b879cece0f3f": "bed", "5c376d24-8a36-43c5-966b-f29afcc3c30f": "bottom_cabinet", "434e4279-64df-488b-ba7e-c9398fd7633e": "bed", "a41c6a6d-d023-42bb-8583-9805ea427c10": "sofa", "12fb2134-8c4b-42ba-85ee-6854e7d3d944": "ceiling_lamp", "62892364-2d6c-3264-a4d6-8c50323c25a5": "sofa", "246ec99c-b64b-4c6e-bf5b-6208f0bcf843": "bottom_cabinet", "251be3a1-e684-4e30-a6fe-2ec57cc75cbc": "sofa", "5e46dbf0-1acc-397f-8c8c-8eea8d2ba581": "chair", "85520875-2e33-4385-b8ea-d4e8d27f1390": "ceiling_lamp", "852cb1eb-6ddc-4f8a-b254-46204f9ea685": "sofa_chair", "fc74e757-6216-4093-90ad-2fbcc0c2a6e5": "chair", "05f33669-6a06-4415-9a37-9fcff31c7469": "ceiling_lamp", "d118f879-f936-47fd-b194-bef86d67ecd3": "ceiling_lamp", "7fd826d0-57f3-4230-8508-d548824c740d": "coffee_table", "241a8f70-acb1-433f-9ddf-79b85020197a": "sofa", "8282f517-02b0-450d-8d9e-078212d52b72": "sofa_chair", "07f2aa32-9aca-4c21-8b80-9393b4439c53": "chair", "68faaaf2-7e71-4f9e-a0b6-1ed4d6291775": "sofa", "ccc359b9-be61-4af7-a2e2-0596636a3d38": "shelf", "bad6453a-6bd6-4036-bbee-f93077af4341": "ceiling_lamp", "66e40b29-af8f-49c9-aab8-7e77a886fb2c": "coffee_table", "7d41e08a-829d-41e4-a116-5ff0256c8e0c": "bed", "1d9698ef-2edf-4398-946c-e24de4d33c1f": "stool", "79364352-1dd7-34c9-8af5-6b17f69b9b02": "table", "57bf1111-1c8b-4c43-b7de-0ecb6d62c608": "bed", "47dd63ba-3b22-4d16-a0e3-a9513d1e1262": "table", "15870cc2-11b0-4b82-bcc9-27f6f6818dba": "bottom_cabinet", "6e78d98d-b928-4c02-a97a-9ace2b032589": "sofa", "45a08422-657e-4626-bcbe-c845e74ec809": "ceiling_lamp", "90a2df4e-5e45-4b20-8d77-7e3c4b42be12": "sofa", "0c72d32b-e98c-4212-9e68-e0b6573c6784": "stool", "29d1a4fb-d9df-4d30-ab0e-1e635b9a2850": "sofa", "e4242664-6b97-41c3-8f67-cb5045d98d68": "sofa", "26571b10-6720-48cf-a00f-53d66050bc96": "sofa", "21b7c9d6-c768-465f-a3f9-900f06d5fbc4": "bed", "1eeab3c8-8437-4218-aafe-44e7728d6f1b": "table", "555563e5-ed86-4c02-80d7-2b5d9bb74851": "sofa_chair", "6264afe4-444a-4574-a302-e5fbf86a2969": "chair", "953caf23-93ac-433a-b9f9-6f197b9c0b48": "coffee_table", "487b28a6-b0ba-425c-bab9-23f1fa3b24eb": "sofa", "5cbdcd47-3cda-439a-86b8-e39203612d71": "sofa_chair", "66e53d0b-9f97-46b9-873e-df25496281c9": "bottom_cabinet", "3588395e-d4ea-4965-8218-8607326e6130": "coffee_table", "77896d2e-0865-4117-928a-93d6a04659a1": "sofa", "449c4927-93df-4465-a43a-fffa5442cbbc": "coffee_table", "a7ab47ed-b75e-4852-aa4e-b78efe256aa9": "sofa", "cc345a49-f722-4834-8f83-76dbf1e16c0f": "sofa", "0b37f8ab-97fc-4fee-8303-18445e8b1825": "sofa", "acf77210-83af-4c49-b2dd-6495e115ac47": "sofa", "d08f1e60-7dc3-4270-82b9-a4ccc150cf46": "sofa", "6e5e0d45-da25-4d79-ac67-894e0f0c4343": "chair", "783d1153-f3cc-44f2-ac55-87f91edad828": "bed", "6067197c-1eb5-4288-9d8a-848445079944": "coffee_table", "ba1a52e3-32fe-495f-a350-e8ad8e57b07d": "table", "0db6e62d-bc8e-4768-8548-f0ebbec2f9d1": "coffee_table", "ce3dc75e-fad6-4a49-bcd2-b76a92a056c6": "sofa_chair", "3992f9cf-b6ab-4f2f-b678-c980391f2689": "chair", "9f7d8df8-5f33-4a45-95b2-03c8692847c2": "chair", "2987f74a-6a99-48e0-a15f-def10895ad06": "chair", "a4fdd504-6829-400c-a5e2-4a0cf82d84e3": "chair", "becee4c5-be8e-4ad7-88c6-fa7f45f3aaed": "sofa_chair", "14e0cd8e-92b1-43c6-9544-ab973375e6ac": "sofa", "99dacb40-80f2-4572-9806-c2a9c8692d0e": "shelf", "667b7778-de9c-4e50-80ee-0776a46b3291": "coffee_table", "cbfb77b6-92f7-4bb6-9160-eaa820606773": "sofa", "c2be36fa-91ee-44e6-9235-e044981d1746": "sofa_chair", "e5a73841-a628-4067-bc83-2e4b7922ffc2": "sofa", "638408fa-2023-4cce-9dcf-a378e28312d9": "chair", "1f163505-239b-4791-9d8d-83f756a74d61": "chair", "097169f3-ed0c-4b51-8e6c-cfe70989a202": "coffee_table", "57d68a37-ce3c-43f7-b79d-0d13178cd6d2": "shelf", "235b23eb-1a3b-4545-bb44-a549b45e13cf": "ceiling_lamp", "1abe6277-1847-457b-a3fd-5e7d3c1dc031": "table", "3fd5671a-9ba0-43c1-84a3-a7082b486a57": "bed", "efe46ff1-005c-4e59-be0b-f830180b2105": "coffee_table", "fa80d82e-4a40-479a-8a5b-c7eefa014964": "sofa_chair", "7a658b68-6752-490c-a9ad-2941ce1fb504": "bed", "ccfcf103-9409-47c7-9b4d-e5cfc6a6d36a": "chair", "61547c48-5f53-4507-ac00-a5ab7b84f221": "sofa", "46508972-4b98-489c-b272-cbeab01eb6f2": "chair", "67a9ff47-2bb9-478a-87ba-04d5482ed67c": "chair", "25f9860f-0f9c-4c6a-b01a-bce9cf82d97e": "sofa", "2c416f50-6360-499b-adc7-f0f7b6099982": "bottom_cabinet", "65242094-0077-4a9d-9057-d6e67eb54760": "ceiling_lamp", "1a84ab0a-f432-3693-a887-1d590288a54e": "shelf", "e7a194e7-45c6-4713-9016-55c542691f9c": "bottom_cabinet", "a6836878-bae7-4da6-ae1f-d8fc6cda4703": "coffee_table", "9440e496-19f7-4338-8a61-96be22579aa4": "bottom_cabinet", "4f8d1916-ba33-4e11-bcfa-bf21e0c22ae4": "sofa", "8144792f-4d0a-4f19-b724-a302a87bebb7": "coffee_table", "03c5b770-04d1-421c-960e-ff46a9f3a8cd": "coffee_table", "9b07bdb0-5645-4588-b202-9ef637971c46": "bed", "c8b017e7-7890-4e8b-af7a-b764f611cc10": "table", "e70b713e-2654-4268-9ff8-df51f7ac269a": "sofa", "4e38c28c-4661-4182-bf58-2ce346f27fe8": "ceiling_lamp", "004cb907-b124-423f-9062-163bf992693a": "sofa", "5e3027db-4d7e-43d2-b0f8-36151f3bc75e": "sofa", "cb62c10c-ccf5-41fb-a165-45f62d8e08df": "chair", "3c795266-3ccf-4a34-a60c-c5aefe4e4784": "bottom_cabinet", "a35752da-0ee4-424e-a1ec-40d75de65234": "ceiling_lamp", "95f1bd8e-0860-4581-af8c-d45d0e435f17": "bottom_cabinet", "7522d886-08c1-3c92-a18c-66767a454a85": "sofa_chair", "6f31bde3-88c3-4353-ab38-a6518f2518bc": "chair", "a209d423-8ff6-4e07-b5c9-56a75507058a": "sofa", "17a8e3d2-e3cf-47dc-99d6-a0bab700cdc4": "stool", "054cfcec-e51e-4764-b0e7-0804b251644c": "ceiling_lamp", "08033850-ac78-475d-a588-54a9ae21d711": "bottom_cabinet", "5df04d66-ff2d-4ae8-b087-a304a49576bb": "sofa", "714aa1d0-fda6-38fe-8971-2bf341bd9481": "table", "ac5ffdec-f9cd-4b7e-9291-654bd85672ce": "shelf", "7c9597fd-ca94-409d-a788-4268a4fa9096": "bed", "cb278d7a-eaf0-47f4-9242-5528fff569b4": "stool", "862dfaf1-0b67-42d8-a8fc-ef8c978a9195": "bed", "7220b2ab-ede5-4ec9-8770-fbf7d5ad71a9": "sofa", "4e8bddaf-088c-464d-b6ce-8d7e6edb3529": "coffee_table", "4a2a6bb3-4789-4816-aaaa-3e77244a8da5": "chair", "08c0e449-6678-48bb-b508-fdcec173f893": "bed", "496b7e7d-2798-41ca-ab19-1ac9c5701ad2": "bottom_cabinet", "48a406e1-6324-4d03-ba90-06eb371e43af": "shelf", "9bebce2e-7159-4bf2-8b42-05e4b68cd2d6": "bottom_cabinet", "7a476d09-68af-44f7-a02c-6b959cad4d28": "sofa", "63703299-e4c2-4156-8df3-180a070141c9": "sofa", "368e235c-d28f-4c7e-968e-1dc3fe6a09b5": "sofa", "2df04061-6e14-4814-a400-7215bd1d4135": "sofa_chair", "55393b72-abf5-4e46-9450-9ec5113137e9": "ceiling_lamp", "de5fba1c-ae08-4f68-8edc-79b97b3919de": "coffee_table", "ae5c4052-3b3b-484e-ba9c-6ece4f52d544": "bottom_cabinet", "1efcb537-1877-47cf-957c-0d0e91b325c5": "coffee_table", "ae9bafa1-399c-4a02-8815-2400a4d6ba0f": "coffee_table", "dbacecbb-f5a7-430e-8244-b1af523a6684": "chair", "b560803f-3cd9-40b5-b972-add3667d8ee3": "table", "9d28cd8d-49b6-4cca-9672-79f4d2069cf6": "coffee_table", "0e4e2ae8-2960-4e0d-9990-afefdc5a82f4": "table", "0d345c26-fedc-4f03-bdc2-80b9f27db831": "bed", "67ba2ce8-c6aa-45c2-a522-c615571348cc": "sofa_chair", "9bf5ab80-3c43-4147-b2ea-d792e42c6e0d": "sofa_chair", "6346eb3b-8049-44c0-9706-1161fa480542": "table", "69ca0537-9dcf-403d-9a25-ac58e28f436f": "ceiling_lamp", "82080b7d-e56b-4184-9ff8-62125cf62816": "sofa", "87cc9c66-81e8-4a2c-bce2-1f6001d6f7f4": "coffee_table", "6d22fcb0-05a2-46db-954a-ff5f206b4785": "table", "580a2ad6-9b06-4847-8e98-64de2cefe01e": "shelf", "0da0ecf6-7c20-38e0-afb2-8917852e4ff2": "table", "e73ff703-adb1-4d3a-993d-60f6d148bec4": "sofa_chair", "76a28268-6c3c-42ac-b215-c78cdbb937bc": "ceiling_lamp", "026b3a27-85f5-4061-9991-7d6182ad8861": "coffee_table", "3b5578c5-0a1f-4295-94e0-f694a89c55de": "coffee_table", "eed7aea0-aa17-48f4-bf86-fb696c2847aa": "coffee_table", "0d759977-35da-3037-b200-cdf9746e63fc": "table", "012679e2-1597-4fc0-93e0-62206617fb31": "bottom_cabinet", "d8e7d1dc-5e27-41fe-bb6f-c19319ba1745": "sofa", "13f8a498-2f31-419b-b31d-20683bcce9e7": "bed", "22635fd5-4e77-4fc4-bf0e-1cf06e4da859": "bottom_cabinet", "2d44f089-53d2-4eca-ac1e-9416e654e47c": "bottom_cabinet", "546f2a4f-4771-4c28-8af4-3d2870f65138": "sofa", "55993a8a-c095-49d0-8a87-a78dd4d9a4d7": "ceiling_lamp", "6a0b1a22-b45e-4dd0-869c-8ccea4fa6950": "bottom_cabinet", "7eab7c89-fcc1-4529-bc32-353cfa917a02": "sofa", "1a6d3e5c-8fe3-44e5-a233-2582a556d414": "bed", "1cd52ada-14af-4897-83dc-7ddf5a7a6cd9": "table", "32c3f7da-2788-4a14-9878-7e8f141d7d51": "ceiling_lamp", "0faa46fd-636a-411a-8a90-2022666271c2": "table", "06076098-db10-3e24-a871-ead183510996": "sofa", "93bf3dca-281a-4b0c-8a48-c751561eb4e1": "ceiling_lamp", "0a46f1ea-56e6-4504-9ba4-70e6ce886faf": "chair", "f0f37b4a-dc08-4539-9adc-4e4e1e54f667": "table", "83b9d5bf-98ca-4cf9-b42e-59b8ffcbbd81": "bed", "6bd9a579-43a2-4ed9-a217-0123eb3f3757": "sofa", "217a1377-a996-4b31-9145-07c1a3ad438d": "bottom_cabinet"}
\ No newline at end of file
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/utils/data/skirt.npy b/gibson2/utils/data_utils/ext_scene/scripts/utils/data/skirt.npy
new file mode 100644
index 000000000..bbb791e22
Binary files /dev/null and b/gibson2/utils/data_utils/ext_scene/scripts/utils/data/skirt.npy differ
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/utils/earcut.py b/gibson2/utils/data_utils/ext_scene/scripts/utils/earcut.py
new file mode 100644
index 000000000..1ca290bb1
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/utils/earcut.py
@@ -0,0 +1,693 @@
+import math
+
+__all__ = ['earcut', 'deviation', 'flatten']
+
+
+def earcut(data, holeIndices=None, dim=None):
+ dim = dim or 2
+
+ hasHoles = holeIndices and len(holeIndices)
+ outerLen = holeIndices[0] * dim if hasHoles else len(data)
+ outerNode = linkedList(data, 0, outerLen, dim, True)
+ triangles = []
+
+ if not outerNode:
+ return triangles
+
+ minX = None
+ minY = None
+ maxX = None
+ maxY = None
+ x = None
+ y = None
+ size = None
+
+ if hasHoles:
+ outerNode = eliminateHoles(data, holeIndices, outerNode, dim)
+
+ # if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox
+ if (len(data) > 80 * dim):
+ minX = maxX = data[0]
+ minY = maxY = data[1]
+
+ for i in range(dim, outerLen, dim):
+ x = data[i]
+ y = data[i + 1]
+ if x < minX:
+ minX = x
+ if y < minY:
+ minY = y
+ if x > maxX:
+ maxX = x
+ if y > maxY:
+ maxY = y
+
+ # minX, minY and size are later used to transform coords into integers for z-order calculation
+ size = max(maxX - minX, maxY - minY)
+
+ earcutLinked(outerNode, triangles, dim, minX, minY, size)
+
+ return triangles
+
+
+# create a circular doubly linked _list from polygon points in the specified winding order
+def linkedList(data, start, end, dim, clockwise):
+ i = None
+ last = None
+
+ if (clockwise == (signedArea(data, start, end, dim) > 0)):
+ for i in range(start, end, dim):
+ last = insertNode(i, data[i], data[i + 1], last)
+
+ else:
+ for i in reversed(range(start, end, dim)):
+ last = insertNode(i, data[i], data[i + 1], last)
+
+ if (last and equals(last, last.next)):
+ removeNode(last)
+ last = last.next
+
+ return last
+
+
+# eliminate colinear or duplicate points
+def filterPoints(start, end=None):
+ if not start:
+ return start
+ if not end:
+ end = start
+
+ p = start
+ again = True
+
+ while again or p != end:
+ again = False
+
+ if (not p.steiner and (equals(p, p.next) or area(p.prev, p, p.next) == 0)):
+ removeNode(p)
+ p = end = p.prev
+ if (p == p.next):
+ return None
+
+ again = True
+
+ else:
+ p = p.next
+
+ return end
+
+# main ear slicing loop which triangulates a polygon (given as a linked _list)
+def earcutLinked(ear, triangles, dim, minX, minY, size, _pass=None):
+ if not ear:
+ return
+
+ # interlink polygon nodes in z-order
+ if not _pass and size:
+ indexCurve(ear, minX, minY, size)
+
+ stop = ear
+ prev = None
+ next = None
+
+ # iterate through ears, slicing them one by one
+ while ear.prev != ear.next:
+ prev = ear.prev
+ next = ear.next
+
+ if isEarHashed(ear, minX, minY, size) if size else isEar(ear):
+ # cut off the triangle
+ triangles.append(prev.i // dim)
+ triangles.append(ear.i // dim)
+ triangles.append(next.i // dim)
+
+ removeNode(ear)
+
+ # skipping the next vertice leads to less sliver triangles
+ ear = next.next
+ stop = next.next
+
+ continue
+
+ ear = next
+
+ # if we looped through the whole remaining polygon and can't find any more ears
+ if ear == stop:
+ # try filtering points and slicing again
+ if not _pass:
+ earcutLinked(filterPoints(ear), triangles, dim, minX, minY, size, 1)
+
+ # if this didn't work, try curing all small self-intersections locally
+ elif _pass == 1:
+ ear = cureLocalIntersections(ear, triangles, dim)
+ earcutLinked(ear, triangles, dim, minX, minY, size, 2)
+
+ # as a last resort, try splitting the remaining polygon into two
+ elif _pass == 2:
+ splitEarcut(ear, triangles, dim, minX, minY, size)
+
+ break
+
+# check whether a polygon node forms a valid ear with adjacent nodes
+def isEar(ear):
+ a = ear.prev
+ b = ear
+ c = ear.next
+
+ if area(a, b, c) >= 0:
+ return False # reflex, can't be an ear
+
+ # now make sure we don't have other points inside the potential ear
+ p = ear.next.next
+
+ while p != ear.prev:
+ if pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) and area(p.prev, p, p.next) >= 0:
+ return False
+ p = p.next
+
+ return True
+
+def isEarHashed(ear, minX, minY, size):
+ a = ear.prev
+ b = ear
+ c = ear.next
+
+ if area(a, b, c) >= 0:
+ return False # reflex, can't be an ear
+
+ # triangle bbox; min & max are calculated like this for speed
+ minTX = (a.x if a.x < c.x else c.x) if a.x < b.x else (b.x if b.x < c.x else c.x)
+ minTY = (a.y if a.y < c.y else c.y) if a.y < b.y else (b.y if b.y < c.y else c.y)
+ maxTX = (a.x if a.x > c.x else c.x) if a.x > b.x else (b.x if b.x > c.x else c.x)
+ maxTY = (a.y if a.y > c.y else c.y) if a.y > b.y else (b.y if b.y > c.y else c.y)
+
+ # z-order range for the current triangle bbox;
+ minZ = zOrder(minTX, minTY, minX, minY, size)
+ maxZ = zOrder(maxTX, maxTY, minX, minY, size)
+
+ # first look for points inside the triangle in increasing z-order
+ p = ear.nextZ
+
+ while p and p.z <= maxZ:
+ if p != ear.prev and p != ear.next and pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) and area(p.prev, p, p.next) >= 0:
+ return False
+ p = p.nextZ
+
+ # then look for points in decreasing z-order
+ p = ear.prevZ
+
+ while p and p.z >= minZ:
+ if p != ear.prev and p != ear.next and pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) and area(p.prev, p, p.next) >= 0:
+ return False
+ p = p.prevZ
+
+ return True
+
+# go through all polygon nodes and cure small local self-intersections
+def cureLocalIntersections(start, triangles, dim):
+ do = True
+ p = start
+
+ while do or p != start:
+ do = False
+
+ a = p.prev
+ b = p.next.next
+
+ if not equals(a, b) and intersects(a, p, p.next, b) and locallyInside(a, b) and locallyInside(b, a):
+ triangles.append(a.i // dim)
+ triangles.append(p.i // dim)
+ triangles.append(b.i // dim)
+
+ # remove two nodes involved
+ removeNode(p)
+ removeNode(p.next)
+
+ p = start = b
+
+ p = p.next
+
+ return p
+
+# try splitting polygon into two and triangulate them independently
+def splitEarcut(start, triangles, dim, minX, minY, size):
+ # look for a valid diagonal that divides the polygon into two
+ do = True
+ a = start
+
+ while do or a != start:
+ do = False
+ b = a.next.next
+
+ while b != a.prev:
+ if a.i != b.i and isValidDiagonal(a, b):
+ # split the polygon in two by the diagonal
+ c = splitPolygon(a, b)
+
+ # filter colinear points around the cuts
+ a = filterPoints(a, a.next)
+ c = filterPoints(c, c.next)
+
+ # run earcut on each half
+ earcutLinked(a, triangles, dim, minX, minY, size)
+ earcutLinked(c, triangles, dim, minX, minY, size)
+ return
+
+ b = b.next
+
+ a = a.next
+
+# link every hole into the outer loop, producing a single-ring polygon without holes
+def eliminateHoles(data, holeIndices, outerNode, dim):
+ queue = []
+ i = None
+ _len = len(holeIndices)
+ start = None
+ end = None
+ _list = None
+
+ for i in range(len(holeIndices)):
+ start = holeIndices[i] * dim
+ end = holeIndices[i + 1] * dim if i < _len - 1 else len(data)
+ _list = linkedList(data, start, end, dim, False)
+
+ if (_list == _list.next):
+ _list.steiner = True
+
+ queue.append(getLeftmost(_list))
+
+ queue = sorted(queue, key=lambda i: i.x)
+
+ # process holes from left to right
+ for i in range(len(queue)):
+ eliminateHole(queue[i], outerNode)
+ outerNode = filterPoints(outerNode, outerNode.next)
+
+ return outerNode
+
+def compareX(a, b):
+ return a.x - b.x
+
+# find a bridge between vertices that connects hole with an outer ring and and link it
+def eliminateHole(hole, outerNode):
+ outerNode = findHoleBridge(hole, outerNode)
+ if outerNode:
+ b = splitPolygon(outerNode, hole)
+ filterPoints(b, b.next)
+
+# David Eberly's algorithm for finding a bridge between hole and outer polygon
+def findHoleBridge(hole, outerNode):
+ do = True
+ p = outerNode
+ hx = hole.x
+ hy = hole.y
+ qx = -math.inf
+ m = None
+
+ # find a segment intersected by a ray from the hole's leftmost point to the left;
+ # segment's endpoint with lesser x will be potential connection point
+ while do or p != outerNode:
+ do = False
+ if hy <= p.y and hy >= p.next.y and p.next.y - p.y != 0:
+ x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y)
+
+ if x <= hx and x > qx:
+ qx = x
+
+ if (x == hx):
+ if hy == p.y:
+ return p
+ if hy == p.next.y:
+ return p.next
+
+ m = p if p.x < p.next.x else p.next
+
+ p = p.next
+
+ if not m:
+ return None
+
+ if hx == qx:
+ return m.prev # hole touches outer segment; pick lower endpoint
+
+ # look for points inside the triangle of hole point, segment intersection and endpoint;
+ # if there are no points found, we have a valid connection;
+ # otherwise choose the point of the minimum angle with the ray as connection point
+
+ stop = m
+ mx = m.x
+ my = m.y
+ tanMin = math.inf
+ tan = None
+
+ p = m.next
+
+ while p != stop:
+ hx_or_qx = hx if hy < my else qx
+ qx_or_hx = qx if hy < my else hx
+
+ if hx >= p.x and p.x >= mx and pointInTriangle(hx_or_qx, hy, mx, my, qx_or_hx, hy, p.x, p.y):
+
+ tan = abs(hy - p.y) / (hx - p.x) # tangential
+
+ if (tan < tanMin or (tan == tanMin and p.x > m.x)) and locallyInside(p, hole):
+ m = p
+ tanMin = tan
+
+ p = p.next
+
+ return m
+
+# interlink polygon nodes in z-order
+def indexCurve(start, minX, minY, size):
+ do = True
+ p = start
+
+ while do or p != start:
+ do = False
+
+ if p.z == None:
+ p.z = zOrder(p.x, p.y, minX, minY, size)
+
+ p.prevZ = p.prev
+ p.nextZ = p.next
+ p = p.next
+
+ p.prevZ.nextZ = None
+ p.prevZ = None
+
+ sortLinked(p)
+
+# Simon Tatham's linked _list merge sort algorithm
+# http:#www.chiark.greenend.org.uk/~sgtatham/algorithms/_listsort.html
+def sortLinked(_list):
+ do = True
+ i = None
+ p = None
+ q = None
+ e = None
+ tail = None
+ numMerges = None
+ pSize = None
+ qSize = None
+ inSize = 1
+
+ while do or numMerges > 1:
+ do = False
+ p = _list
+ _list = None
+ tail = None
+ numMerges = 0
+
+ while p:
+ numMerges += 1
+ q = p
+ pSize = 0
+ for i in range(inSize):
+ pSize += 1
+ q = q.nextZ
+ if not q:
+ break
+
+ qSize = inSize
+
+ while pSize > 0 or (qSize > 0 and q):
+
+ if pSize == 0:
+ e = q
+ q = q.nextZ
+ qSize -= 1
+
+ elif (qSize == 0 or not q):
+ e = p
+ p = p.nextZ
+ pSize -= 1
+
+ elif (p.z <= q.z):
+ e = p
+ p = p.nextZ
+ pSize -= 1
+
+ else:
+ e = q
+ q = q.nextZ
+ qSize -= 1
+
+ if tail:
+ tail.nextZ = e
+
+ else:
+ _list = e
+
+ e.prevZ = tail
+ tail = e
+
+ p = q
+
+ tail.nextZ = None
+ inSize *= 2
+
+ return _list
+
+
+# z-order of a point given coords and size of the data bounding box
+def zOrder(x, y, minX, minY, size):
+ # coords are transformed into non-negative 15-bit integer range
+ x = 32767 * (x - minX) // size
+ y = 32767 * (y - minY) // size
+
+ x = (x | (x << 8)) & 0x00FF00FF
+ x = (x | (x << 4)) & 0x0F0F0F0F
+ x = (x | (x << 2)) & 0x33333333
+ x = (x | (x << 1)) & 0x55555555
+
+ y = (y | (y << 8)) & 0x00FF00FF
+ y = (y | (y << 4)) & 0x0F0F0F0F
+ y = (y | (y << 2)) & 0x33333333
+ y = (y | (y << 1)) & 0x55555555
+
+ return x | (y << 1)
+
+# find the leftmost node of a polygon ring
+def getLeftmost(start):
+ do = True
+ p = start
+ leftmost = start
+
+ while do or p != start:
+ do = False
+ if p.x < leftmost.x:
+ leftmost = p
+ p = p.next
+
+ return leftmost
+
+# check if a point lies within a convex triangle
+def pointInTriangle(ax, ay, bx, by, cx, cy, px, py):
+ return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 and \
+ (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 and \
+ (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0
+
+# check if a diagonal between two polygon nodes is valid (lies in polygon interior)
+def isValidDiagonal(a, b):
+ return a.next.i != b.i and a.prev.i != b.i and not intersectsPolygon(a, b) and \
+ locallyInside(a, b) and locallyInside(b, a) and middleInside(a, b)
+
+# signed area of a triangle
+def area(p, q, r):
+ return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y)
+
+# check if two points are equal
+def equals(p1, p2):
+ return p1.x == p2.x and p1.y == p2.y
+
+
+# check if two segments intersect
+def intersects(p1, q1, p2, q2):
+ if (equals(p1, q1) and equals(p2, q2)) or (equals(p1, q2) and equals(p2, q1)):
+ return True
+
+ return area(p1, q1, p2) > 0 != area(p1, q1, q2) > 0 and \
+ area(p2, q2, p1) > 0 != area(p2, q2, q1) > 0
+
+# check if a polygon diagonal intersects any polygon segments
+def intersectsPolygon(a, b):
+ do = True
+ p = a
+
+ while do or p != a:
+ do = False
+ if (p.i != a.i and p.next.i != a.i and p.i != b.i and p.next.i != b.i and intersects(p, p.next, a, b)):
+ return True
+
+ p = p.next
+
+ return False
+
+# check if a polygon diagonal is locally inside the polygon
+def locallyInside(a, b):
+ if area(a.prev, a, a.next) < 0:
+ return area(a, b, a.next) >= 0 and area(a, a.prev, b) >= 0
+ else:
+ return area(a, b, a.prev) < 0 or area(a, a.next, b) < 0
+
+# check if the middle point of a polygon diagonal is inside the polygon
+def middleInside(a, b):
+ do = True
+ p = a
+ inside = False
+ px = (a.x + b.x) / 2
+ py = (a.y + b.y) / 2
+
+ while do or p != a:
+ do = False
+ if ((p.y > py) != (p.next.y > py)) and (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x):
+ inside = not inside
+
+ p = p.next
+
+ return inside
+
+# link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;
+# if one belongs to the outer ring and another to a hole, it merges it into a single ring
+def splitPolygon(a, b):
+ a2 = Node(a.i, a.x, a.y)
+ b2 = Node(b.i, b.x, b.y)
+ an = a.next
+ bp = b.prev
+
+ a.next = b
+ b.prev = a
+
+ a2.next = an
+ an.prev = a2
+
+ b2.next = a2
+ a2.prev = b2
+
+ bp.next = b2
+ b2.prev = bp
+
+ return b2
+
+
+# create a node and optionally link it with previous one (in a circular doubly linked _list)
+def insertNode(i, x, y, last):
+ p = Node(i, x, y)
+
+ if not last:
+ p.prev = p
+ p.next = p
+
+ else:
+ p.next = last.next
+ p.prev = last
+ last.next.prev = p
+ last.next = p
+
+ return p
+
+def removeNode(p):
+ p.next.prev = p.prev
+ p.prev.next = p.next
+
+ if p.prevZ:
+ p.prevZ.nextZ = p.nextZ
+
+ if p.nextZ:
+ p.nextZ.prevZ = p.prevZ
+
+class Node(object):
+ def __init__(self, i, x, y):
+ # vertice index in coordinates array
+ self.i = i
+
+ # vertex coordinates
+
+ self.x = x
+ self.y = y
+
+ # previous and next vertice nodes in a polygon ring
+ self.prev = None
+ self.next = None
+
+ # z-order curve value
+ self.z = None
+
+ # previous and next nodes in z-order
+ self.prevZ = None
+ self.nextZ = None
+
+ # indicates whether this is a steiner point
+ self.steiner = False
+
+
+# return a percentage difference between the polygon area and its triangulation area;
+# used to verify correctness of triangulation
+def deviation(data, holeIndices, dim, triangles):
+ _len = len(holeIndices)
+ hasHoles = holeIndices and len(holeIndices)
+ outerLen = holeIndices[0] * dim if hasHoles else len(data)
+
+ polygonArea = abs(signedArea(data, 0, outerLen, dim))
+
+ if hasHoles:
+ for i in range(_len):
+ start = holeIndices[i] * dim
+ end = holeIndices[i + 1] * dim if i < _len - 1 else len(data)
+ polygonArea -= abs(signedArea(data, start, end, dim))
+
+ trianglesArea = 0
+
+ for i in range(0, len(triangles), 3):
+ a = triangles[i] * dim
+ b = triangles[i + 1] * dim
+ c = triangles[i + 2] * dim
+ trianglesArea += abs(
+ (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -
+ (data[a] - data[b]) * (data[c + 1] - data[a + 1]))
+
+ if polygonArea == 0 and trianglesArea == 0:
+ return 0
+
+ return abs((trianglesArea - polygonArea) / polygonArea)
+
+
+def signedArea(data, start, end, dim):
+ sum = 0
+ j = end - dim
+
+ for i in range(start, end, dim):
+ sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1])
+ j = i
+
+ return sum
+
+
+# turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts
+def flatten(data):
+ dim = len(data[0][0])
+ result = {
+ 'vertices': [],
+ 'holes': [],
+ 'dimensions': dim
+ }
+ holeIndex = 0
+
+ for i in range(len(data)):
+ for j in range(len(data[i])):
+ for d in range(dim):
+ result['vertices'].append(data[i][j][d])
+
+ if i > 0:
+ holeIndex += len(data[i - 1])
+ result['holes'].append(holeIndex)
+
+ return result
+
+def unflatten(data):
+ result = []
+
+ for i in range(0, len(data), 3):
+ result.append(tuple(data[i:i + 3]))
+
+ return result
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/utils/scene_urdf.py b/gibson2/utils/data_utils/ext_scene/scripts/utils/scene_urdf.py
new file mode 100644
index 000000000..225b89a2b
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/utils/scene_urdf.py
@@ -0,0 +1,134 @@
+import os
+import subprocess
+import argparse
+
+parser = argparse.ArgumentParser("Generate URDF for scene structure")
+parser.add_argument('--model_dir', dest='model_dir')
+
+viz_mesh= '''
+
+
+
+
+
+ '''
+col_mesh = '''
+
+
+
+
+
+ '''
+def get_component_string(obj_name, viz_mesh, collision_mesh,
+ shift=(0.,0.,0.), mass='5000'):
+ shift_x,shift_y,shift_z = shift
+ return structure_component_template.format(
+ obj_name=obj_name, viz_mesh=viz_mesh, collision_mesh=collision_mesh,
+ shift_x=shift_x, shift_y=shift_y, shift_z=shift_z, mass=mass)
+
+orig_urdf='''
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+'''
+
+orig_urdf_with_cabinet='''
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+'''
+
+
+structure_base_template = '''
+
+
+
+
+
+
+
+ {{}}
+
+
+'''
+
+def gen_scene_urdf(model_dir, model_name,component=None):
+ # get base urdf
+ model_dir = os.path.normpath(model_dir)
+ model_id = os.path.basename(model_dir)
+ base_urdf = structure_base_template.format(model_id)
+ # add all components
+ viz_meshdir = os.path.join(model_dir, 'shape', 'visual')
+ col_meshdir = os.path.join(model_dir, 'shape', 'collision')
+
+ meshes = os.listdir(viz_meshdir)
+ components = ''
+ for m in meshes:
+ if os.path.splitext(m)[-1] != '.obj':
+ continue
+ if component is not None and component not in m:
+ continue
+ components += viz_mesh.format(
+ obj_name=os.path.splitext(m)[0],
+ viz_mesh='shape/visual/{}'.format(m))
+ meshes = os.listdir(col_meshdir)
+ for m in meshes:
+ if os.path.splitext(m)[-1] != '.obj':
+ continue
+ if component is not None and component not in m:
+ continue
+ components += col_mesh.format(
+ collision_mesh='shape/collision/{}'.format(m))
+
+ return base_urdf.format(components)
+
+def gen_orig_urdf(model_name):
+ return orig_urdf.format(model_name=model_name)
+
+def gen_orig_urdf_with_cabinet(model_name,save_name):
+ return orig_urdf_with_cabinet.format(
+ model_name=model_name,
+ save_name=save_name)
+
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/utils/semantics.py b/gibson2/utils/data_utils/ext_scene/scripts/utils/semantics.py
new file mode 100644
index 000000000..edfeaedc3
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/utils/semantics.py
@@ -0,0 +1,215 @@
+################
+# iG Semantics #
+################
+rooms = ['bathroom', 'bedroom', 'childs_room', 'closet', 'corridor',
+ 'dining_room', 'empty_room', 'exercise_room', 'garage',
+ 'home_office', 'kitchen', 'living_room', 'lobby', 'pantry_room',
+ 'playroom', 'staircase', 'storage_room', 'television_room',
+ 'utility_room', 'balcony', 'library', 'auditorium', 'undefined']
+
+
+#####################
+# cubicasa mappings #
+#####################
+cubi_to_skip = {'SaunaStove Round', 'Fireplace', 'BaseCabinetTriangle',
+ 'CoatRack', 'SaunaStove', 'FireplaceRound', 'ShowerCab',
+ 'ShowerScreen', 'PlaceForFireplaceCorner', 'GEARound',
+ 'Chimney', 'Fan', 'ShowerPlatform', 'PlaceForFireplaceRound',
+ 'Misc', 'SaunaStoveRound', 'ShowerScreenRoundLeft',
+ 'FireplaceCorner', 'PlaceForFireplace', 'Housing',
+ 'GeneralAppliance', 'ShowerScreenRoundRight',
+ 'SpaceForAppliance', 'SpaceForAppliance2'}
+
+cubi_cat_mapping = {
+ 'IntegratedStove':'stove',
+ 'GasStove' : 'stove',
+ 'WoodStove':'stove',
+ 'Stove':'stove',
+ 'IntegratedStoveSmall':'stove',
+ 'Refrigerator':'fridge',
+ 'DoubleRefrigerator':'fridge',
+ 'Sink':'sink',
+ 'DoubleSink' : 'sink',
+ 'WaterTap':'sink',
+ 'SideSink':'sink',
+ 'CornerSink' : 'sink',
+ 'DoubleSinkRight' : 'sink',
+ 'RoundSink':'sink',
+ 'WallCabinet':'top_cabinet',
+ 'Shower':'shower_head',
+ 'Toilet':'toilet',
+ 'Dishwasher':'dishwasher',
+ 'CounterTop': 'counter',
+ 'Bathtub':'bathtub',
+ 'WashingMachine':'washer',
+ 'SaunaBenchHigh':'bench',
+ 'SaunaBenchMid':'bench',
+ 'SaunaBenchLow':'bench',
+ 'SaunaBench':'bench',
+ 'Jacuzzi' : 'bathtub',
+ 'BathtubRound' : 'bathtub',
+ 'Urinal' : 'toilet',
+ 'TumbleDryer' : 'dryer',
+ 'HighHeater':'heater',
+ 'Heater':'heater',
+ 'ClosetTriangle':'bottom_cabinet',
+ 'CoatCloset':'bottom_cabinet',
+ 'ClosetRound':'bottom_cabinet',
+ 'BaseCabinetRound':'bottom_cabinet',
+ 'BaseCabinet':'bottom_cabinet',
+ 'Closet': 'bottom_cabinet'}
+
+cubi_all_rooms = {"Background": 'undefined',
+ "Alcove": 'lobby',
+ "Attic": 'empty_room',
+ "Ballroom": 'undefined',
+ "Bar": 'undefined',
+ "Basement": 'utility_room',
+ "Bath": 'bathroom',
+ "Bedroom": 'bedroom',
+ "Below150cm": 'undefined',
+ "CarPort": 'garage',
+ "Church": 'undefined',
+ "Closet": 'closet',
+ "ConferenceRoom": 'undefined',
+ "Conservatory": 'undefined',
+ "Counter": 'undefined',
+ "Den": 'undefined',
+ "Dining": 'dining_room',
+ "DraughtLobby": 'lobby',
+ "DressingRoom": 'closet',
+ "EatingArea": 'dining_room',
+ "Elevated": 'undefined',
+ "Elevator": 'undefined',
+ "Entry": 'lobby',
+ "ExerciseRoom": 'exercise_room',
+ "Garage": 'garage',
+ "Garbage": 'undefined',
+ "Hall": 'corridor',
+ "HallWay": 'corridor',
+ "HotTub": 'bathroom',
+ "Kitchen": 'kitchen',
+ "Library": 'home_office',
+ "LivingRoom": 'living_room',
+ "Loft": 'undefined',
+ "Lounge": 'living_room',
+ "MediaRoom": 'television_room',
+ "MeetingRoom": 'home_office',
+ "Museum": 'undefined',
+ "Nook": 'undefined',
+ "Office": 'home_office',
+ "OpenToBelow": 'undefined',
+ "Outdoor": 'undefined',
+ "Pantry": 'pantry_room',
+ "Reception": 'lobby',
+ "RecreationRoom": 'playroom',
+ "RetailSpace": 'undefined',
+ "Room": 'undefined',
+ "Sanctuary": 'undefined',
+ "Sauna": 'bathroom',
+ "ServiceRoom": 'undefined',
+ "ServingArea": 'undefined',
+ "Skylights": 'undefined',
+ "Stable": 'undefined',
+ "Stage": 'undefined',
+ "StairWell": 'undefined',
+ "Storage": 'storage_room',
+ "SunRoom": 'undefined',
+ "SwimmingPool": 'undefined',
+ "TechnicalRoom": 'utility_room',
+ "Theatre": 'television_room',
+ "Undefined": 'undefined',
+ "UserDefined": 'undefined',
+ "Utility": 'utility_room',
+ "Wall": 'undefined',
+ "Railing": 'undefined',
+ "Stairs": 'undefined'}
+
+#####################
+# 3D-Front mappings #
+#####################
+
+front_all_rooms ={
+ 'Balcony':'balcony',
+ 'CloakRoom':'closet',
+ 'LivingRoom':'living_room',
+ 'Bathroom':'bathroom',
+ 'DiningRoom':'dining_room',
+ 'StorageRoom':'storage_room',
+ 'LivingDiningRoom':'dining_room',
+ 'Corridor':'corridor',
+ 'ElderlyRoom':'bedroom',
+ 'SecondBedroom':'bedroom',
+ 'Garage':'garage',
+ 'Hallway':'corridor',
+ 'Library':'library',
+ 'MasterBedroom':'bedroom',
+ 'SecondBathroom':'bathroom',
+ 'KidsRoom':'childs_room',
+ 'Auditorium':'auditorium',
+ 'Aisle':'corridor',
+ 'NannyRoom':'bedroom',
+ 'Stairwell':'corridor',
+ 'Kitchen':'kitchen',
+ 'Lounge':'living_room',
+ 'Bedroom':'bedroom',
+ 'MasterBathroom':'bathroom',
+ 'LaundryRoom':'utility_room',
+ 'EquipmentRoom':'storage_room',
+ 'Courtyard':'undefined',
+ 'none':'undefined',
+ 'non':'undefined',
+ 'Terrace':'undefined'}
+
+front_to_skip = [
+ 'CustomizedFixedFurniture',
+ 'CustomizedFurniture',
+ 'CustomizedPersonalizedModel',
+ 'CustomizedPlatform']
+
+wall_cats = ['Baseboard',
+ 'BayWindow', 'Column', 'CustomizedBackgroundModel',
+ 'CustomizedFeatureWall', 'Flue', 'Pocket',
+ 'WallBottom', 'WallInner', 'WallOuter', 'WallTop',]
+ceiling_cats = ['Beam', 'Cornice', 'CustomizedCeiling',
+ 'SewerPipe', 'SmartCustomizedCeiling', 'Ceiling']
+floor_cats = [ 'Floor' ]
+
+front_cat_mapping = { 'Children Cabinet':'bottom_cabinet',
+ 'Nightstand':'bottom_cabinet',
+ 'Bookcase / jewelry Armoire':'shelf',
+ 'Wardrobe':'bottom_cabinet',
+ 'Coffee Table':'coffee_table',
+ 'Corner/Side Table':'coffee_table',
+ 'Sideboard / Side Cabinet / Console Table':'console_table',
+ 'Wine Cabinet':'bottom_cabinet',
+ 'TV Stand':'bottom_cabinet',
+ 'Drawer Chest / Corner cabinet':'bottom_cabinet',
+ 'Shelf':'shelf',
+ 'Round End Table':'table',
+ 'King-size Bed':'bed',
+ 'Bunk Bed':'bed',
+ 'Bed Frame':'bed',
+ 'Single bed':'bed',
+ 'Kids Bed':'bed',
+ 'Dining Chair':'chair',
+ 'Lounge Chair / Cafe Chair / Office Chair':'chair',
+ 'Dressing Chair':'chair',
+ 'Classic Chinese Chair':'chair',
+ 'Barstool':'stool',
+ 'Dressing Table':'table',
+ 'Dining Table':'table',
+ 'Desk':'table',
+ 'Three-Seat / Multi-seat Sofa':'sofa',
+ 'Three-Seat / Multi-set sofa':'sofa',
+ 'armchair':'sofa_chair',
+ 'Loveseat Sofa':'sofa',
+ 'L-shaped Sofa':'sofa',
+ 'Lazy Sofa':'sofa',
+ 'Chaise Longue Sofa':'sofa',
+ 'Footstool / Sofastool / Bed End Stool / Stool':'stool',
+ 'Pendant Lamp': 'ceiling_lamp',
+ 'Ceiling Lamp': 'ceiling_lamp',
+ 'Cabinet/Shelf/Desk':'shelf',
+ 'Sofa':'sofa',
+ 'Table':'table'}
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/utils/svg_utils.py b/gibson2/utils/data_utils/ext_scene/scripts/utils/svg_utils.py
new file mode 100644
index 000000000..d4d272578
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/utils/svg_utils.py
@@ -0,0 +1,580 @@
+#####
+# Code From:
+# https://github.com/CubiCasa/CubiCasa5k/blob/master/floortrans/loaders/svg_utils.py
+#####
+
+import math
+import numpy as np
+from xml.dom import minidom
+from skimage.draw import polygon
+from svgpathtools import parse_path
+from logging import warning
+
+def get_icon(ee):
+ parent_transform = None
+ if ee.parentNode.getAttribute("class") == "FixedFurnitureSet":
+ parent_transform = ee.parentNode.getAttribute("transform")
+ strings = parent_transform.split(',')
+ a_p = float(strings[0][7:])
+ b_p = float(strings[1])
+ c_p = float(strings[2])
+ d_p = float(strings[3])
+ e_p = float(strings[-2])
+ f_p = float(strings[-1][:-1])
+ M_p = np.array([[a_p, c_p, e_p],
+ [b_p, d_p, f_p],
+ [0, 0, 1]])
+
+ transform = ee.getAttribute("transform")
+ strings = transform.split(',')
+ a = float(strings[0][7:])
+ b = float(strings[1])
+ c = float(strings[2])
+ d = float(strings[3])
+ e = float(strings[-2])
+ f = float(strings[-1][:-1])
+
+ M = np.array([[a, c, e],
+ [b, d, f],
+ [0, 0, 1]])
+
+ X = np.array([])
+ Y = np.array([])
+
+ try:
+ toilet = next(p for p in ee.childNodes if p.nodeName ==
+ 'g' and p.getAttribute("class") == "BoundaryPolygon")
+
+ for p in toilet.childNodes:
+ if p.nodeName == "polygon":
+ X, Y = get_icon_polygon(p)
+ break
+ else:
+ x_all, y_all = get_corners(toilet)
+ points = np.column_stack((x_all, y_all))
+
+ X, Y = get_max_corners(points)
+
+ except StopIteration:
+ X, Y = make_boudary_polygon(ee)
+
+ if len(X) < 4:
+ return None, None, X, Y
+
+ if parent_transform is not None:
+ for i in range(len(X)):
+ v = np.matrix([[X[i]], [Y[i]], [1]])
+ vv = np.matmul(M, v)
+ new_x, new_y, _ = np.round(np.matmul(M_p, vv))
+ X[i] = new_x
+ Y[i] = new_y
+ else:
+ for i in range(len(X)):
+ v = np.matrix([[X[i]], [Y[i]], [1]])
+ vv = np.matmul(M, v)
+ new_x, new_y, _ = np.round(vv)
+ X[i] = new_x
+ Y[i] = new_y
+
+ rr, cc = polygon(Y, X)
+
+ return rr, cc, X, Y
+
+def get_corners(g):
+ x_all, y_all = [], []
+ for pol in g.childNodes:
+ if pol.nodeName == 'polygon':
+ x, y = get_icon_polygon(pol)
+ x_all = np.append(x_all, x)
+ y_all = np.append(y_all, y)
+ elif pol.nodeName == 'path':
+ x, y = get_icon_path(pol)
+ x_all = np.append(x_all, x)
+ y_all = np.append(y_all, y)
+ elif pol.nodeName == 'rect':
+ x = pol.getAttribute('x')
+ if x == '':
+ x = 1.0
+ else:
+ x = float(x)
+ y = pol.getAttribute('y')
+ if y == '':
+ y = 1.0
+ else:
+ y = float(y)
+ x_all = np.append(x_all, x)
+ y_all = np.append(y_all, y)
+ w = float(pol.getAttribute('width'))
+ h = float(pol.getAttribute('height'))
+ x_all = np.append(x_all, x+w)
+ y_all = np.append(y_all, y+h)
+
+ return x_all, y_all
+
+
+def get_max_corners(points):
+ if len(points) == 0:
+ return [], []
+
+ minx, miny = float("inf"), float("inf")
+ maxx, maxy = float("-inf"), float("-inf")
+ for x, y in points:
+ # Set min coords
+ if x < minx:
+ minx = x
+ if y < miny:
+ miny = y
+ # Set max coords
+ if x > maxx:
+ maxx = x
+ elif y > maxy:
+ maxy = y
+
+ X = np.array([minx, maxx, maxx, minx])
+ Y = np.array([miny, miny, maxy, maxy])
+
+ return X, Y
+
+
+def make_boudary_polygon(pol):
+ g_gen = (c for c in pol.childNodes if c.nodeName == 'g')
+
+ x_all, y_all = [], []
+ for g in g_gen:
+ x, y = get_corners(g)
+ x_all = np.append(x_all, x)
+ y_all = np.append(y_all, y)
+
+ points = np.column_stack((x_all, y_all))
+ X, Y = get_max_corners(points)
+
+ return X, Y
+
+
+def get_icon_path(pol):
+ path = pol.getAttribute("d")
+ try:
+ path_alt = parse_path(path)
+ minx, maxx, miny, maxy = path_alt.bbox()
+ except ValueError as e:
+ print("Error handled")
+ print(e)
+ return np.array([]), np.array([])
+
+ X = np.array([minx, maxx, maxx, minx])
+ Y = np.array([miny, miny, maxy, maxy])
+
+ if np.unique(X).size == 1 or np.unique(Y).size == 1:
+ return np.array([]), np.array([])
+
+ return X, Y
+
+
+def get_icon_polygon(pol):
+ points = pol.getAttribute("points").split(' ')
+
+ return get_XY(points)
+
+
+def get_XY(points):
+ if points[-1] == "":
+ points = points[:-1]
+
+ if points[0] == "":
+ points = points[1:]
+
+ X, Y = np.array([]), np.array([])
+ i = 0
+ for a in points:
+ if ',' in a:
+ if len(a) == 2:
+ x, y = a.split(',')
+ else:
+ num_list = a.split(',')
+ x, y = num_list[0], num_list[1]
+ X = np.append(X, np.round(float(x)))
+ Y = np.append(Y, np.round(float(y)))
+ else:
+ # if no comma every other is x and every other is y
+ if i % 2:
+ Y = np.append(Y, float(a))
+ else:
+ X = np.append(X, float(a))
+
+ i += 1
+
+ return X, Y
+
+
+def get_points(e):
+ pol = next(p for p in e.childNodes if p.nodeName == "polygon")
+ points = pol.getAttribute("points").split(' ')
+ points = points[:-1]
+
+ X, Y = np.array([]), np.array([])
+ for a in points:
+ x, y = a.split(',')
+ X = np.append(X, np.round(float(x)))
+ Y = np.append(Y, np.round(float(y)))
+
+ return X, Y
+
+
+def get_direction(X, Y):
+ max_diff_X = abs(max(X) - min(X))
+ max_diff_Y = abs(max(Y) - min(Y))
+
+ if max_diff_X > max_diff_Y:
+ return "H" # horizontal
+ else:
+ return "V" # vertical
+
+
+def get_polygon(e):
+ pol = next(p for p in e.childNodes if p.nodeName == "polygon")
+ points = pol.getAttribute("points").split(' ')
+ points = points[:-1]
+
+ X, Y = np.array([]), np.array([])
+ for a in points:
+ y, x = a.split(',')
+ X = np.append(X, np.round(float(x)))
+ Y = np.append(Y, np.round(float(y)))
+
+ rr, cc = polygon(X, Y)
+
+ return rr, cc
+
+
+def calc_distance(point_1, point_2):
+ return math.sqrt(math.pow(point_1[0] - point_2[0], 2) +
+ math.pow(point_1[1] - point_2[1], 2))
+
+
+def calc_center(points):
+ return list(np.mean(np.array(points), axis=0))
+
+
+class Wall:
+ def __init__(self, id, end_points, direction, width, name):
+ self.id = id
+ self.name = name
+ self.end_points = end_points
+ self.direction = direction
+ self.max_width = width
+ self.min_width = width
+
+ def change_end_points(self):
+ if self.direction == 'V':
+ self.end_points[0][0] = np.mean(np.array(self.min_coord))
+ self.end_points[1][0] = self.end_points[0][0]
+ elif self.direction == 'H':
+ self.end_points[0][1] = np.mean(np.array(self.min_coord))
+ self.end_points[1][1] = self.end_points[0][1]
+
+ def get_length(self, end_points):
+ return calc_distance(end_points[0], end_points[1])
+
+class PolygonWall(Wall):
+ def __init__(self, e, id, shape=None):
+ self.id = id
+ self.name = e.getAttribute('id')
+ self.X, self.Y = self.get_points(e)
+ if abs(max(self.X)-min(self.X)) < 4 or abs(max(self.Y)-min(self.Y)) < 4:
+ # wall is too small and we ignore it.
+ raise ValueError("small wall")
+ if shape:
+ self.X = np.clip(self.X, 0, shape[1])
+ self.Y = np.clip(self.Y, 0, shape[0])
+ # self.X, self.Y = self.sort_X_Y(self.X, self.Y)
+ self.rr, self.cc = polygon(self.Y, self.X)
+ direction = self.get_direction(self.X, self.Y)
+ end_points = self.get_end_points(self.X, self.Y, direction)
+ self.min_width = self.get_width(self.X, self.Y, direction)
+ self.max_width = self.min_width
+
+ Wall.__init__(self, id, end_points, direction, self.max_width, self.name)
+ self.length = self.get_length(self.end_points)
+ self.center = self.get_center(self.X, self.Y)
+ self.min_coord, self.max_coord = self.get_width_coods(self.X, self.Y)
+
+ def get_points(self, e):
+ pol = next(p for p in e.childNodes if p.nodeName == "polygon")
+ points = pol.getAttribute("points").split(' ')
+ points = points[:-1]
+
+ X, Y = np.array([]), np.array([])
+ for a in points:
+ x, y = a.split(',')
+ X = np.append(X, np.round(float(x)))
+ Y = np.append(Y, np.round(float(y)))
+
+ return X, Y
+
+ def get_direction(self, X, Y):
+ max_diff_X = abs(max(X) - min(X))
+ max_diff_Y = abs(max(Y) - min(Y))
+
+ if max_diff_X > max_diff_Y:
+ return "H" # horizontal
+ else:
+ return "V" # vertical
+
+ def get_center(self, X, Y):
+ return np.mean(X), np.mean(Y)
+
+ def get_width(self, X, Y, direction):
+ _, _, p1, p2 = self._get_min_points(X, Y)
+
+ if direction is 'H':
+ return (abs(p1[0][1] - p1[1][1]) + abs(p2[0][1] - p2[1][1])) / 2
+ elif 'V':
+ return (abs(p1[0][0] - p1[1][0]) + abs(p2[0][0] - p2[1][0])) / 2
+
+ def _width(self, values):
+ temp = values.tolist() if type(values) is not list else values
+
+ mean_1 = min(temp)
+ mean_2 = max(temp)
+
+ return abs(mean_1 - mean_2)
+
+ def merge_possible(self, merged):
+ max_dist = max([self.max_width, merged.max_width])
+
+ if self.id == merged.id:
+ return False
+
+ # walls have to be in the same direction
+ if self.direction != merged.direction:
+ return False
+
+ # walls have too big width difference
+ if abs(self.max_width - merged.max_width) > merged.max_width:
+ return False
+
+ # If endpoints are near
+ # self up and left endpoint to merged down and right end point
+ dist1 = calc_distance(self.end_points[0], merged.end_points[1])
+ # self down and right endpoint to merged up and left end point
+ dist2 = calc_distance(self.end_points[1], merged.end_points[0])
+
+ if dist1 <= max_dist * 1.5 or dist2 <= max_dist * 1.5:
+ return True
+ else:
+ return False
+
+ def _get_overlap(self, a, b):
+ return max(0, min(a[1], b[1]) - max(a[0], b[0]))
+
+ def merge_walls(self, merged):
+ max_dist = max([self.max_width, merged.max_width])
+
+ if self.id == merged.id:
+ return None
+
+ # walls have to be in the same direction
+ if self.direction != merged.direction:
+ return None
+
+
+ # If endpoints are near
+ # self up and left endpoint to merged down and right end point
+ dist1 = calc_distance(self.end_points[0], merged.end_points[1])
+ # self down and right endpoint to merged up and left end point
+ dist2 = calc_distance(self.end_points[1], merged.end_points[0])
+
+ if dist1 <= max_dist * 1.5:
+ if self._get_overlap(self.min_coord, merged.min_coord) <= 0:
+ return None
+ # merged is on top or on left
+ return self.do_merge(merged, 0)
+ elif dist2 <= max_dist * 1.5:
+ if self._get_overlap(self.min_coord, merged.min_coord) <= 0:
+ return None
+ # merged is on down or on right
+ return self.do_merge(merged, 1)
+ else:
+ return None
+
+ def _get_min_points(self, X, Y):
+ assert len(X) is 4 and len(Y) is 4
+ length = len(X)
+ min_dist1 = np.inf
+ min_dist2 = np.inf
+ point1 = None
+ point2 = None
+ corners1 = None
+ corners2 = None
+
+ for i in range(length):
+ x1, y1 = X[i], Y[i]
+ x2, y2 = X[(i + 1) % 4], Y[(i + 1) % 4]
+
+ dist = np.sqrt((x1 - x2)**2 + (y1 - y2)**2)
+ if dist < min_dist1:
+ point2 = point1
+ point1 = np.array([(x1 + x2) / 2, (y1 + y2) / 2])
+ min_dist2 = min_dist1
+ min_dist1 = dist
+ corners2 = corners1
+ corners1 = np.array([[x1, y1], [x2, y2]])
+ elif dist <= min_dist2:
+ point2 = np.array([(x1 + x2) / 2, (y1 + y2) / 2])
+ min_dist2 = dist
+ corners2 = np.array([[x1, y1], [x2, y2]])
+
+ return point1, point2, corners1, corners2
+
+ def get_end_points(self, X, Y, direction):
+ point1, point2, _, _ = self._get_min_points(X, Y)
+
+ if point1[0] != point2[0] or point1[1] != point2[1]:
+ if abs(point1[0] - point2[0]) > abs(point1[1] - point2[1]):
+ # horizontal
+ point1[1] = point1[1] + point2[1] / 2.0
+ point2[1] = point1[1]
+ # point1[1] = int(np.round(point1[1]))
+ # point2[1] = int(np.round(point2[1]))
+ else:
+ # vertical
+ point1[0] = point1[0] + point2[0] / 2.0
+ point2[0] = point1[0]
+ # point1[0] = int(np.round(point1[0]))
+ # point2[0] = int(np.round(point2[0]))
+
+ return self.sort_end_points(direction, point1, point2)
+
+ def sort_end_points(self, direction, point1, point2):
+ if direction == "V":
+ if point1[1] < point2[1]:
+ return np.array([point1, point2])
+ else:
+ return np.array([point2, point1])
+ else:
+ if point1[0] < point2[0]:
+ return np.array([point1, point2])
+ else:
+ return np.array([point2, point1])
+
+ def do_merge(self, merged, direction):
+ # update width
+ self.max_width = max([self.max_width, merged.max_width])
+ self.min_width = min([self.min_width, merged.min_width])
+
+ # update polygon
+ self.X = np.concatenate((self.X, merged.X))
+ self.Y = np.concatenate((self.Y, merged.Y))
+
+ # update width coordinates
+ self.max_coord = self.get_max_width_coord(merged)
+ self.min_coord = self.get_min_width_coord(merged)
+
+ if direction == 0:
+ # merged wall is up or left to the original wall
+ self.end_points = np.array(
+ [merged.end_points[0], self.end_points[1]])
+ else:
+ # merged wall is down or right to the original wall
+ self.end_points = np.array(
+ [self.end_points[0], merged.end_points[1]])
+
+ self.length = self.get_length(self.end_points)
+
+ return self
+
+ def get_max_width_coord(self, merged):
+ width_1 = abs(self.max_coord[0] - self.max_coord[1])
+ width_2 = abs(merged.max_coord[0] - merged.max_coord[1])
+ return self.max_coord if width_1 > width_2 else merged.max_coord
+
+ def get_min_width_coord(self, merged):
+ width_1 = max(merged.min_coord[0], self.min_coord[0])
+ # width_1 = abs(self.min_coord[0] - self.min_coord[1])
+ width_2 = min(merged.min_coord[1], self.min_coord[1])
+ # width_2 = abs(merged.min_coord[0] - merged.min_coord[1])
+ # return self.min_coord if width_1 < width_2 else merged.min_coord
+ return [width_1, width_2]
+
+ def get_width_coods(self, X, Y):
+ if self.direction == 'H':
+ dist_1 = abs(Y[0] - Y[2])
+ dist_2 = abs(Y[1] - Y[3])
+ if dist_1 < dist_2:
+ return [Y[0], Y[2]], [Y[1], Y[3]]
+ else:
+ return [Y[1], Y[3]], [Y[0], Y[2]]
+
+ elif self.direction == 'V':
+ dist_1 = abs(X[0] - X[3])
+ dist_2 = abs(X[1] - X[2])
+ if dist_1 < dist_2:
+ return [X[0], X[3]], [X[1], X[2]]
+ else:
+ return [X[1], X[2]], [X[0], X[3]]
+
+ def sort_X_Y(self, X, Y):
+ max_x = max(X)
+ min_x = min(X)
+ max_y = max(Y)
+ min_y = min(Y)
+ res_X, res_Y = [0] * 4, [0] * 4
+ # top left 0, top right 1, bottom left 2, bottom right 3
+ directions = [[min_x, min_y], [max_x, min_y],
+ [min_x, max_y], [max_x, max_y]]
+ length = len(X)
+ for i in range(length):
+ min_dist = 1000000
+ direction_candidate = None
+ for j, direc in enumerate(directions):
+ dist = calc_distance([X[i], Y[i]], direc)
+ if dist < min_dist:
+ min_dist = dist
+ direction_candidate = j
+
+ res_X[direction_candidate] = X[i]
+ res_Y[direction_candidate] = Y[i]
+
+ return res_X, res_Y
+
+ def wall_is_pillar(self, avg_wall_width):
+ if self.max_width > avg_wall_width:
+ if self.length < 3 * self.max_width:
+ return True
+
+ return False
+
+ def split_pillar_wall(self, ids, avg_wall_width):
+ half = avg_wall_width / 3.0
+ end_points = [[[0, 0], [0, 0]], [[0, 0], [0, 0]],
+ [[0, 0], [0, 0]], [[0, 0], [0, 0]]]
+ self.X[np.argmax(self.X)] = max(self.X) - half
+ self.X[np.argmax(self.X)] = max(self.X) - half
+ self.X[np.argmin(self.X)] = min(self.X) + half
+ self.X[np.argmin(self.X)] = min(self.X) + half
+ self.Y[np.argmax(self.Y)] = max(self.Y) - half
+ self.Y[np.argmax(self.Y)] = max(self.Y) - half
+ self.Y[np.argmin(self.Y)] = min(self.Y) + half
+ self.Y[np.argmin(self.Y)] = min(self.Y) + half
+ for i in range(4):
+ x = self.X[i]
+ y = self.Y[i]
+ end = [x, y]
+ j = i % 2
+ end_points[i][j] = end
+ end_points[(i + 3) % 4][j] = end
+
+ walls = []
+ for i, e in enumerate(end_points):
+ if abs(e[0][1] - e[1][1]) > abs(e[0][0] - e[1][0]):
+ # vertical wall
+ direction = 'V'
+ else:
+ # horizontal wall
+ direction = 'H'
+
+ e = self.sort_end_points(direction, e[0], e[1])
+ wall = LineWall(ids + i, e, direction, avg_wall_width / 2.0, self.name)
+ walls.append(wall)
+
+ return walls
diff --git a/gibson2/utils/data_utils/ext_scene/scripts/utils/utils.py b/gibson2/utils/data_utils/ext_scene/scripts/utils/utils.py
new file mode 100644
index 000000000..0a975c615
--- /dev/null
+++ b/gibson2/utils/data_utils/ext_scene/scripts/utils/utils.py
@@ -0,0 +1,400 @@
+from xml.dom import minidom
+from shapely.geometry import Polygon as shape_poly
+from shapely.geometry import LineString as shape_string
+import numpy as np
+import random
+import os
+import cv2
+from PIL import Image
+
+
+def angle_between(p1, p2):
+ ang1 = np.arctan2(*p1[::-1])
+ ang2 = np.arctan2(*p2[::-1])
+ return (ang2 - ang1) % (2 * np.pi)
+
+def pad_to(im, size = 3000):
+ row, col = im.shape[:2]
+ pad_r = (size - row) // 2
+ pad_c = (size - col) // 2
+ border = cv2.copyMakeBorder(
+ im,
+ top=pad_r,
+ bottom=pad_r,
+ left=pad_c,
+ right=pad_c,
+ borderType=cv2.BORDER_CONSTANT,
+ value=[0]
+ )
+ return border
+def semmap_to_lightmap(sem):
+ def gkern(l=10, sig=5):
+ """\
+ creates gaussian kernel with side length l and a sigma of sig
+ """
+
+ ax = np.linspace(-(l - 1) / 2., (l - 1) / 2., l)
+ xx, yy = np.meshgrid(ax, ax)
+
+ kernel = np.exp(-0.5 * (np.square(xx) + np.square(yy)) / np.square(sig))
+
+ return kernel / np.sum(kernel)
+ kernel = gkern()
+ sem_map = np.array(sem)
+ kitchen_bathroom = np.logical_or(np.logical_or(sem_map == 10, sem_map == 1), sem_map==19)
+ kitchen_bathroom_filtered = cv2.dilate(kitchen_bathroom.astype(np.float32),
+ kernel.astype(np.float32))
+ kitchen_bathroom_filtered = cv2.filter2D(kitchen_bathroom_filtered.astype(np.float32),
+ -1, kernel.astype(np.float32))
+ return Image.fromarray((kitchen_bathroom_filtered * 255).astype(np.uint8))
+
+class BBox(object):
+
+ def __init__(self, raw_pts=None, zmin=None, zmax=None, from_dict=None):
+ if raw_pts is None:
+ self.load_dict(from_dict)
+ else:
+ self.raw_pts = raw_pts
+ self.z = (zmin, zmax)
+ self.init_box()
+
+ def init_box(self):
+ self.center = self.raw_pts.mean(axis=0)
+ self.calc_nrm()
+
+ def get_scale(self):
+ return np.linalg.norm(self.edge_x), np.linalg.norm(self.edge_y), self.z[1]-self.z[0]
+
+ def calc_nrm(self):
+ if self.raw_pts[0,0] > self.raw_pts[1,0]: id1, id2 = 1, 0
+ else: id1, id2 = 0, 1
+
+ direction = self.raw_pts[id1, :] - self.raw_pts[id2, :]
+ dist = np.linalg.norm(direction)
+ des_len = 0.4
+ nrm = np.array([-direction[1] * des_len / dist, direction[0] * des_len / dist])
+ nrm_start = (self.raw_pts[id1] + self.raw_pts[id2]) / 2.
+ cand1 = nrm_start + nrm
+ cand2 = nrm_start - nrm
+ if np.linalg.norm(cand1 - self.center) > np.linalg.norm(cand2 - self.center):
+ flip_factor = 1
+ else:
+ flip_factor = -1
+ nrm = nrm * flip_factor
+ self.nrm=nrm / np.linalg.norm(nrm)
+ # self.flip_factor = flip_factor
+ # return nrm
+ self.edge_y = direction * flip_factor
+ self.edge_x = np.linalg.norm(self.raw_pts[0,:] - self.raw_pts[3,:]) * self.nrm
+
+ def get_coords(self):
+ '''
+ Return the vertices of the bounding box, in order of BL,BR,TR,TL
+ '''
+ x = self.edge_x / 2.
+ y = self.edge_y / 2.
+ return np.array([self.center - x - y,
+ self.center + x - y,
+ self.center + x + y,
+ self.center - x + y])
+
+ def get_rotation_angle(self, CAD_dir=(0,1)):
+ # dir_y, dir_x = self.nrm / np.linalg.norm(self.nrm)
+ dir_y, dir_x = self.nrm[:]
+ #theta = np.arcsin(np.cross([1,0], [dir_x, dir_y]))
+ return angle_between(CAD_dir, (dir_x,dir_y))
+
+ def get_center(self):
+ return (*self.center, (self.z[0] + self.z[1])/2.)
+ def get_nrm(self):
+ return self.nrm
+
+ def as_dict(self):
+ return {
+ 'normal' : tuple(self.nrm),
+ 'center' : tuple(self.center),
+ 'edge_x' : tuple(self.edge_x),
+ 'edge_y' : tuple(self.edge_y),
+ 'raw_pts' : self.raw_pts.tolist(),
+ 'theta' : self.get_rotation_angle(),
+ 'z' : tuple(self.z)}
+
+ def load_dict(self, d):
+ self.nrm = np.array(d['normal'])
+ self.center = np.array(d['center'])
+ self.edge_x = np.array(d['edge_x'])
+ self.edge_y = np.array(d['edge_y'])
+ self.z = d['z']
+ self.raw_pts = np.array(d['raw_pts'])
+
+
+def polygon_to_bbox(Y,X,Z,rotation=None,flip_image=None, scale_factor=100.):
+ pts = np.vstack((Y,X)).transpose()
+ center = pts.mean(axis=0)
+ dists = np.array([np.linalg.norm(pts[i] - pts[i-1]) for i in range(4)])
+ max_idx = np.argmax(dists)
+ p0,p1 = pts[max_idx],pts[max_idx-1]
+ edge_y = (p1-p0)
+ edge_y_dir = edge_y/np.linalg.norm(edge_y)
+ edge_y_projected = np.array([np.dot(pts[i]-p1,edge_y_dir) for i in range(4)])
+ edge_y_raw = edge_y_dir * np.ptp(edge_y_projected)
+ mid_y = (p0+p1)/2.
+ edge_x_crook = (center - mid_y)
+ edge_x_raw = 2*(edge_x_crook - (edge_y_dir * np.dot(edge_x_crook, edge_y_dir)))
+ edge_x_dir = edge_x_raw / np.linalg.norm(edge_x_raw)
+ # so we have:
+ # edge_x, edge_y, center here
+ # Z is given as input
+ # we need to figure out normal direction (aka theta)
+ # and reorient X/Y accordingly
+ if rotation is None:
+ # this means that the object is wall/door/window
+ if np.linalg.norm(edge_x_raw) > np.linalg.norm(edge_y_raw):
+ edge_x = edge_y_raw
+ edge_y = edge_x_raw
+ nrm = edge_y_dir
+ else:
+ edge_y = edge_y_raw
+ edge_x = edge_x_raw
+ nrm = edge_x_dir
+ else:
+ # this means that this is a fixed furniture
+ forward_direction = np.array([1,0])
+ rotated = np.matmul(np.asarray([[np.cos(rotation),-np.sin(rotation)],
+ [np.sin(rotation),np.cos(rotation)]]), forward_direction)
+ fit_x = np.dot(edge_x_dir, rotated)
+ fit_y = np.dot(edge_y_dir, rotated)
+
+ if abs(fit_y) > abs(fit_x):
+ edge_x = edge_y_raw
+ edge_y = edge_x_raw
+ nrm = edge_y_dir * np.sign(fit_y)
+ else:
+ edge_y = edge_y_raw
+ edge_x = edge_x_raw
+ nrm = edge_x_dir * np.sign(fit_x)
+
+ if flip_image is not None:
+ if should_flip(center, nrm, flip_image):
+ nrm = -nrm
+ bbox_dict = {'center':center/scale_factor, 'z':Z, 'edge_x':edge_x/scale_factor,
+ 'edge_y':edge_y/scale_factor, 'normal':nrm, 'raw_pts':pts/scale_factor}
+ return BBox(None,None,None,bbox_dict)
+
+def should_flip(center, nrm, flip_image):
+ flip_image_np = np.asarray(flip_image).astype(int)
+ #plt.imshow(flip_image_np)
+ # normal direction
+ normal_dist = 0
+ width,height = flip_image_np.shape
+ for i in range(1000):
+ y,x = np.round(center + i * nrm).astype(int)
+ if x >= width or x < 0 or y >= height or y < 0:
+ normal_dist = 2000
+ break
+ if flip_image_np[x,y]:
+ normal_dist = i
+ break
+ # flipped direction
+ flip_dist = 0
+ for i in range(1000):
+ y,x = np.round(center - i * nrm).astype(int)
+ if x >= width or x < 0 or y >= height or y < 0:
+ flip_dist = 2000
+ break
+ if flip_image_np[x,y]:
+ flip_dist = i
+ break
+
+ y,x = np.round(center).astype(int)
+ #print(nrm, center, normal_dist, flip_dist)
+ return flip_dist > normal_dist
+
+# def squash_to_size(xmin,xmax,ymin,ymax,scale):
+def squash_to_size(bbox,scale):
+ size = random.choice(scale)
+ print('squashing object...')
+ x,y,_ = bbox.get_scale()
+ # print(bbox.get_scale())
+ if x < y:
+ bbox.edge_x = bbox.edge_x / np.linalg.norm(bbox.edge_x) * size
+ else:
+ bbox.edge_y = bbox.edge_y / np.linalg.norm(bbox.edge_y) * size
+
+def get_unique(doc, val):
+ it = doc.getElementsByTagName(val)
+ if len(it) > 1:
+ raise ValueError('value not unique...')
+ return it[0].firstChild.nodeValue
+
+
+def snap_out_of_wall(obj, wall, obj_poly, wall_poly):
+ intersection = wall_poly.intersection(obj_poly)
+ if type(intersection) == shape_string:
+ overlap_margin = 0.001
+ for move in [(overlap_margin, 0), (-overlap_margin, 0),
+ (0, overlap_margin), (0, -overlap_margin)]:
+ temp_obj = shape_poly(obj.get_coords() + move)
+ if not temp_obj.intersects(wall_poly):
+ obj.center += move
+ return
+ elif type(intersection) == shape_poly:
+ xy = np.array(intersection.exterior.coords.xy)
+ ptp = xy.ptp(axis=1) + 0.001
+ for move in [(ptp[0], 0), (-ptp[0], 0),
+ (0, ptp[1]), (0, -ptp[1])]:
+ temp_obj = shape_poly(obj.get_coords() + move)
+ if not temp_obj.intersects(wall_poly):
+ obj.center += move
+ return
+
+def snap_on_wall(obj, wall, obj_poly, wall_poly):
+ if wall_poly.intersects(obj_poly):
+ intersection = wall_poly.intersection(obj_poly)
+ if type(intersection) == shape_string:
+ return
+ elif type(intersection) == shape_poly:
+ xy = np.array(intersection.exterior.coords.xy)
+ ptp = xy.ptp(axis=1)
+ for move in [(ptp[0], 0), (-ptp[0], 0),
+ (0, ptp[1]), (0, -ptp[1])]:
+ temp_obj = shape_poly(obj.get_coords() + move)
+ if type(temp_obj.intersection(wall_poly)) == shape_string:
+ obj.center += move
+ return
+ else:
+ distance = wall_poly.distance(obj_poly)
+ overlaps = []
+ dirs = [(distance, 0), (-distance, 0), (0, distance), (0, -distance)]
+ for move in dirs:
+ temp_obj = shape_poly(obj.get_coords() + move)
+ if not temp_obj.intersects(wall_poly):
+ overlaps.append(np.finfo(np.float).max)
+ else:
+ overlaps.append(obj_poly.intersection(wall_poly).area)
+ snap_dir = np.argmin(np.array(overlaps))
+ obj.center += dirs[snap_dir]
+ return
+ print('No wall is found to fit the criteria...')
+
+import random
+
+def gen_cube_obj(bbox, file_path, is_color=False, should_save=True):
+ vertices = []
+ a,b,c,d = bbox.get_coords()
+ for x,y in [a,b,d,c]:
+ vertices.append((x,y,bbox.z[1]))
+ for x,y in [a,b,d,c]:
+ vertices.append((x,y,bbox.z[0]))
+ c=np.random.rand(3)
+ faces = [(1,2,3),
+ (2,4,3),
+ (1,3,5),
+ (3,7,5),
+ (1,5,2),
+ (5,6,2),
+ (2,6,4),
+ (6,8,4),
+ (4,8,7),
+ (7,3,4),
+ (6,7,8),
+ (6,5,7),
+ ]
+ faces = [(*f, -1) for f in faces]
+
+ if should_save:
+ with open(file_path, 'w') as fp:
+ for v in vertices:
+ if is_color:
+ v1,v2,v3 = v
+ fp.write('v {} {} {} {} {} {}\n'.format(v1, v2, v3, *c))
+ else:
+ v1,v2,v3 = v
+ fp.write('v {} {} {}\n'.format(v1, v2, v3))
+
+ for f in faces:
+ fp.write('f {} {} {}\n'.format(*f[:-1]))
+
+ return vertices, faces
+
+def get_coords(edge_x, edge_y, center):
+ '''
+ Return the vertices of the bounding box, in order of BL,BR,TR,TL
+ '''
+ x = np.array(edge_x) / 2.
+ y = np.array(edge_y) / 2.
+ return np.array([center - x - y,
+ center + x - y,
+ center + x + y,
+ center - x + y])
+
+def get_oriented_bbox(obj):
+ bbox_x = np.linalg.norm(obj['edge_x'])
+ bbox_y = np.linalg.norm(obj['edge_y'])
+ theta = np.linalg.norm(obj['theta'])
+ center = obj['center']
+ vertices = []
+ a, b, c, d = get_coords([1, 0], [0, 1], [0, 0])
+ vertices = np.array([a, b, c, d])
+ rot = np.array([[np.cos(theta), -np.sin(theta)],
+ [np.sin(theta), np.cos(theta)]])
+ vertices *= [bbox_x, bbox_y]
+ vertices = vertices.dot(rot)
+ vertices += center
+ return vertices
+def get_triangle_area(p1, p2, p3):
+ return np.abs((p1[0] * (p2[1] - p3[1]) + p2[0] * (p3[1] - p1[1]) + p3[0] * (p1[1] - p2[1])) / 2.0)
+# check if the 2D point is inside the rotated 2D bounding box of the object
+def check_point_in_obj_xy(obj, pt):
+ bbox = get_oriented_bbox(obj)
+ bbox_x = np.linalg.norm(obj['edge_x'])
+ bbox_y = np.linalg.norm(obj['edge_y'])
+ bbox_area = bbox_x * bbox_y
+ triangles_area = 0.0
+ for i in range(4):
+ j = (i + 1) % 4
+ triangles_area += get_triangle_area(bbox[i], bbox[j], pt)
+ return np.abs(triangles_area - bbox_area) < 1e-5
+
+def has_overlap(bbox_i, bbox_j):
+ coord_i_xy = shape_poly(bbox_i.get_coords())
+ i_z = bbox_i.z
+ coord_j_xy = shape_poly(bbox_j.get_coords())
+ j_z = bbox_j.z
+ if coord_i_xy.intersects(coord_j_xy):
+ z_overlap = get_z_overlaps(i_z, j_z)
+ return coord_i_xy.intersection(coord_j_xy).area * z_overlap
+ return 0
+
+# def has_overlap(obj1, obj2):
+ # obj1_bbox = get_oriented_bbox(obj1)
+ # obj2_bbox = get_oriented_bbox(obj2)
+ # in_xy = False
+ # for i in range(4):
+ # if check_point_in_obj_xy(obj2, obj1_bbox[i]):
+ # in_xy = True
+ # for i in range(4):
+ # if check_point_in_obj_xy(obj1, obj2_bbox[i]):
+ # in_xy = True
+ # obj1_z = obj1['z']
+ # obj2_z = obj2['z']
+ # in_z = obj1_z[0] < obj2_z[1] and obj2_z[0] < obj1_z[1]
+ # return in_xy and in_z
+def get_z_overlaps(z1, z2):
+ bottom = max(z1[0], z2[0])
+ top = min(z1[-1], z2[-1])
+ return max(0, top - bottom)
+
+def overlaps(bbox_i, bbox_j):
+ coord_i_xy = shape_poly(bbox_i[1].get_coords())
+ i_z = bbox_i[1].z
+ coord_j_xy = shape_poly(bbox_j[1].get_coords())
+ j_z = bbox_j[1].z
+ if coord_i_xy.intersects(coord_j_xy):
+ z_overlap = get_z_overlaps(i_z, j_z)
+ return coord_i_xy.intersection(coord_j_xy).area * z_overlap
+ return 0
+
+def get_volume(bbox):
+ x,y,z = bbox.get_scale()
+ return x*y*z
diff --git a/gibson2/utils/data_utils/generate_data.py b/gibson2/utils/data_utils/generate_data.py
deleted file mode 100644
index ceeff12d7..000000000
--- a/gibson2/utils/data_utils/generate_data.py
+++ /dev/null
@@ -1,94 +0,0 @@
-import numpy as np
-import ctypes as ct
-import argparse
-from gibson2.utils.data_utils.datasets import ViewDataSet3D
-from PIL import Image
-import os
-import time
-from multiprocessing import Pool
-
-dll = np.ctypeslib.load_library('../render/render_cuda_f', '')
-
-# In[6]:
-
-
-def render(imgs, depths, pose, poses, tdepth):
- global fps
- t0 = time.time()
- showsz = imgs[0].shape[0]
- nimgs = len(imgs)
- show = np.zeros((showsz, showsz * 2, 3), dtype='uint8')
- target_depth = (128 * tdepth[:, :, 0]).astype(np.float32)
-
- imgs = np.array(imgs)
- depths = np.array(depths).flatten()
-
- rpose = np.eye(4).astype(np.float32)
- rpose[0, -1] = 1
- rpose[1, -1] = 2
- rpose[2, -1] = 1
-
- pose_after = [rpose.dot(poses[i]).astype(np.float32) for i in range(len(imgs))]
- pose_after = np.array(pose_after)
-
- dll.render(ct.c_int(len(imgs)), ct.c_int(imgs[0].shape[0]), ct.c_int(imgs[0].shape[1]),
- ct.c_int(1), ct.c_int(1), imgs.ctypes.data_as(ct.c_void_p),
- depths.ctypes.data_as(ct.c_void_p), pose_after.ctypes.data_as(ct.c_void_p),
- show.ctypes.data_as(ct.c_void_p), target_depth.ctypes.data_as(ct.c_void_p))
-
- return show, target_depth
-
-
-# In[7]:
-
-
-def generate_data(args):
-
- idx = args[0]
- print(idx)
- d = args[1]
- outf = args[2]
- filename = "%s/data_%d.npz" % (outf, idx)
- if not os.path.isfile(filename):
- print(idx)
- data = d[idx] ## This operation stalls 95% of the time, CPU heavy
- sources = data[0]
- target = data[1]
- source_depths = data[2]
- target_depth = data[3]
- #target_normal = data[5]
- poses = [item.numpy() for item in data[-1]]
-
- show, _ = render(sources, source_depths, poses[0], poses, target_depth)
- print(show.shape)
-
- Image.fromarray(show).save('%s/show%d.png' % (outf, idx))
- Image.fromarray(target).save('%s/target%d.png' % (outf, idx))
-
- np.savez(file=filename, source=show, depth=target_depth, target=target)
-
- return
-
-
-parser = argparse.ArgumentParser()
-parser.add_argument('--debug', action='store_true', help='debug mode')
-parser.add_argument('--dataroot', required=True, help='dataset path')
-parser.add_argument('--outf', type=str, default='', help='path of output folder')
-opt = parser.parse_args()
-
-d = ViewDataSet3D(root=opt.dataroot,
- transform=np.array,
- mist_transform=np.array,
- seqlen=5,
- off_3d=False,
- train=False)
-print(len(d))
-
-p = Pool(10)
-p.map(generate_data, [(idx, d, opt.outf) for idx in range(len(d))])
-
-#for i in range(len(d)):
-# filename = "%s/data_%d.npz" % (opt.outf, i)
-# print(filename)
-# if not os.path.isfile(filename):
-# generate_data([i, d, opt.outf])
diff --git a/gibson2/utils/data_utils/images/scenes.gif b/gibson2/utils/data_utils/images/scenes.gif
new file mode 100644
index 000000000..9bad086d9
Binary files /dev/null and b/gibson2/utils/data_utils/images/scenes.gif differ
diff --git a/gibson2/utils/data_utils/train.json b/gibson2/utils/data_utils/train.json
deleted file mode 100644
index cc6101e33..000000000
--- a/gibson2/utils/data_utils/train.json
+++ /dev/null
@@ -1,32 +0,0 @@
-[
- {
- "id": "Norvelt",
- "name": "model-563",
- "split_full": "none",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 19.028,
- "floor": 1,
- "navigation_complexity": 1.392,
- "room": 3,
- "ssa": 1.607
- }
- },
- {
- "id": "Ohoopee",
- "name": "model-248",
- "split_full": "test",
- "split_full+": "test",
- "split_medium": "none",
- "split_tiny": "none",
- "stats": {
- "area": 322.951,
- "floor": 4,
- "navigation_complexity": 1.585,
- "room": 19,
- "ssa": 1.725
- }
- }
-]
diff --git a/gibson2/utils/data_utils/utils.py b/gibson2/utils/data_utils/utils.py
deleted file mode 100644
index db3e2e622..000000000
--- a/gibson2/utils/data_utils/utils.py
+++ /dev/null
@@ -1,12 +0,0 @@
-import os
-import json
-import gibson2
-
-
-def load_json(file_path):
- with open(file_path) as f:
- obj = json.load(f)
- return obj
-
-def get_train_models():
- return load_json(os.path.join(os.path.dirname(gibson2.__file__), 'data', 'train.json'))
diff --git a/gibson2/utils/data_utils/visualize_path.py b/gibson2/utils/data_utils/visualize_path.py
deleted file mode 100644
index 9a5ab4c5e..000000000
--- a/gibson2/utils/data_utils/visualize_path.py
+++ /dev/null
@@ -1,265 +0,0 @@
-import sys, os
-import os.path as osp
-import subprocess
-with open('path.txt', 'r') as f:
- for line in f:
- sys.path.insert(0, line.strip())
-sys.path.insert(0, osp.dirname(osp.abspath(__file__)))
-
-## The only way to get outer python env from inside blender
-python_path = subprocess.check_output(["which", "python"]).decode("utf-8")
-virenv_path = python_path[:python_path.index("/bin")]
-add_on_path = os.path.join(virenv_path, "lib", "python3.5", "site-packages")
-sys.path.append(add_on_path)
-os.sys.path.insert(0, add_on_path)
-
-import bpy
-import argparse
-import numpy as np
-import json
-from tqdm import tqdm
-from mathutils import Matrix, Vector, Euler
-import json
-import random
-
-
-def import_obj(file_loc):
- imported_object = bpy.ops.import_scene.obj(filepath=file_loc)
- obj_object = bpy.context.selected_objects[0] ####<--Fix
- print('Imported name: ', obj_object.name)
- model = bpy.context.object
- return model
-
-
-def line_distance(pt1, pt2):
- return np.linalg.norm(pt1 - pt2)
-
-
-def visualize(path):
- d1 = makeMaterial('Red', (1, 0, 0), (1, 1, 1), 1)
- d2 = makeMaterial('Green', (0, 1, 0), (1, 1, 1), 1)
- d3 = makeMaterial('Blue', (0, 0, 1), (1, 1, 1), 1)
-
- start = path[0]
- end = path[-1]
-
- start_loc = [start[0], start[1], start[2]]
- end_loc = [end[0], end[1], end[2]]
- end_obj = bpy.ops.mesh.primitive_uv_sphere_add(location=end_loc, size=0.5)
- setMaterial("Sphere", d2)
- start_obj = bpy.ops.mesh.primitive_uv_sphere_add(location=start_loc, size=0.5)
- '''setMaterial("Sphere", d2)
- setMaterial("Sphere", d3)'''
- for loc in path[1:-1]:
- y_up_loc = [loc[0], loc[1], loc[2]]
- bpy.ops.mesh.primitive_uv_sphere_add(location=y_up_loc, size=0.2)
- setMaterial("Sphere", d1)
-
-
-def makeMaterial(name, diffuse, specular, alpha):
- mat = bpy.data.materials.new(name)
- mat.diffuse_color = diffuse
- mat.diffuse_shader = 'LAMBERT'
- mat.diffuse_intensity = 1.0
- mat.specular_color = specular
- mat.specular_shader = 'COOKTORR'
- mat.specular_intensity = 0.5
- mat.alpha = alpha
- mat.ambient = 1
- return mat
-
-
-def setMaterial(name, mat):
- for ob in bpy.data.objects:
- if name in ob.name:
- me = ob.data
- me.materials.append(mat)
- ob.name = "PathPoint"
-
-
-def duplicateObject(scene, name, copyobj):
- # Create new mesh
- mesh = bpy.data.meshes.new(name)
- # Create new object associated with the mesh
- ob_new = bpy.data.objects.new(name, mesh)
- # Copy data block from the old object into the new object
- ob_new.data = copyobj.data.copy()
- ob_new.scale = copyobj.scale
- ob_new.location = copyobj.location
- # Link new object to the given scene and select it
- scene.objects.link(ob_new)
- ob_new.select = True
- ob_new.location = Vector((0, 0, 0))
- return ob_new
-
-
-def moveFromCenter(obj, dx=2000, dy=2000, dz=2000):
- obj.location = Vector((dx, dy, dz))
-
-
-def prepare():
- bpy.ops.object.select_all(action='DESELECT')
- if 'Cube' in bpy.data.objects.keys():
- bpy.data.objects['Cube'].select = True
- bpy.ops.object.delete()
- lamp = bpy.data.lamps['Lamp']
- lamp.energy = 1.0 # 10 is the max value for energy
- lamp.type = 'SUN' # in ['POINT', 'SUN', 'SPOT', 'HEMI', 'AREA']
- lamp.distance = 100
-
-
-def install_lamp(obj_lamp, loc_lamp, loc_target):
- direction = loc_target - loc_lamp
- rot_quat = direction.to_track_quat('-Z', 'Y')
- mat_loc = Matrix.Translation(loc_lamp)
- mat_rot = rot_quat.to_matrix().to_4x4()
- mat_comb = mat_loc * mat_rot
- obj_lamp.matrix_world = mat_comb
-
-
-def look_at(obj_camera, loc_camera, loc_target):
- '''Set camera to look at loc_target from loc_camera
- Camera default y is up
- '''
- direction = loc_target - loc_camera
- rot_quat = direction.to_track_quat('-Z', 'Y')
- mat_loc = Matrix.Translation(loc_camera)
- mat_rot = rot_quat.to_matrix().to_4x4()
- mat_comb = mat_loc * mat_rot
- obj_camera.matrix_world = mat_comb
-
-
-def get_model_camera_vals(filepath):
- all_x, all_y, all_z = [], [], []
- with open(filepath, "r") as f:
- for line in f:
- vals = line.split(",")
- all_x.append(float(vals[1]))
- all_y.append(float(vals[2]))
- all_z.append(float(vals[3]))
- max_x, min_x = (max(all_x), min(all_x))
- max_y, min_y = (max(all_y), min(all_y))
- max_z, min_z = (max(all_z), min(all_z))
- center = Vector(((max_x + min_x) / 2, (max_y + min_y) / 2, (max_z + min_z) / 2))
- return (max_x, min_x), (max_y, min_y), (max_z, min_z), center
-
-
-def join_objects():
- scene = bpy.context.scene
- obs = []
- for ob in scene.objects:
- if ob.type == 'MESH':
- obs.append(ob)
- ctx = bpy.context.copy()
- ctx['active_object'] = obs[0]
- ctx['selected_objects'] = obs
- ctx['selected_editable_bases'] = [scene.object_bases[ob.name] for ob in obs]
- bpy.ops.object.join(ctx)
-
-
-def deleteObject(obj):
- '''for ob in bpy.data.objects:
- print(ob)
- ob.select = False'''
- bpy.ops.object.mode_set(mode='OBJECT')
- bpy.ops.object.select_all(action='DESELECT')
- if type(obj) == str:
- bpy.data.objects[obj].select = True
- else:
- obj.select = True
- for name in bpy.data.objects.keys():
- if "PathPoint" in name:
- bpy.data.objects[name].select = True
- bpy.ops.object.delete()
-
-
-def deleteSpheres():
- bpy.ops.object.mode_set(mode='OBJECT')
- bpy.ops.object.select_all(action='DESELECT')
- for name in bpy.data.objects.keys():
- if "Sphere" in name:
- bpy.data.objects[name].select = True
- bpy.ops.object.delete()
-
-
-def deleteCube():
- for name, obj in bpy.data.objects.items():
- if "Cube" in name:
- bpy.data.objects.remove(obj, True)
-
-
-def capture_top(dst_dir, scene_id, obj_model, focus_center, path, idx, distance):
- def set_render_resolution(x=2560, y=2560):
- bpy.context.scene.render.resolution_x = x
- bpy.context.scene.render.resolution_y = y
-
- set_render_resolution()
- camera_pos = focus_center + Vector((0, 0, distance))
- lamp_pos = camera_pos
- obj_camera = bpy.data.objects["Camera"]
- obj_camera.location = camera_pos
- obj_lamp = bpy.data.objects["Lamp"]
- obj_lamp.location = camera_pos
- look_at(obj_camera, camera_pos, focus_center)
- install_lamp(obj_lamp, lamp_pos, focus_center)
- slicename = "slice" + str(idx)
- cut_height = np.mean([loc[2] for loc in path])
- visualize(path)
- cobj = duplicateObject(bpy.context.scene, slicename, obj_model)
- bpy.ops.object.select_all(action='DESELECT')
- bpy.context.scene.objects.active = bpy.data.objects[slicename]
- bpy.ops.object.mode_set(mode='EDIT')
- bpy.ops.mesh.select_all(action='SELECT')
- bpy.ops.mesh.bisect(plane_co=(0, 0, cut_height + 0.7),
- plane_no=(0, 0, 1),
- clear_outer=True,
- clear_inner=False)
- bpy.ops.object.mode_set(mode='OBJECT')
- bpy.ops.object.select_all(action='DESELECT')
- bpy.data.scenes['Scene'].render.filepath = os.path.join(dst_dir,
- '{}_c{}.jpg'.format(scene_id, idx))
- bpy.ops.render.render(write_still=True)
- deleteObject(slicename)
-
-
-def parse_local_args(args):
- local_args = args[args.index('--') + 1:]
- return parser.parse_known_args(local_args)
-
-
-parser = argparse.ArgumentParser()
-parser.add_argument('--filepath', required=True, help='trajectory file path', type=str)
-parser.add_argument('--datapath', required=True, help='gibson dataset path', type=str)
-parser.add_argument('--renderpath', help='visualization output path', default=None, type=str)
-parser.add_argument('--model', required=True, type=str)
-parser.add_argument('--idx', default=0, type=int)
-
-
-def main():
- global args, logger
- opt, remaining_args = parse_local_args(sys.argv)
-
- trajectories = {}
- json_path = os.path.join(opt.filepath, "{}.json".format(opt.model))
- with open(json_path, "r") as f:
- trajectories = json.load(f)
-
- waypoints = trajectories[opt.idx]['waypoints']
-
- prepare()
- import_obj(osp.join(opt.datapath, opt.model, "mesh_z_up.obj"))
- camera_pose = osp.join(opt.datapath, opt.model, "camera_poses.csv")
-
- join_objects()
- obj_model, cobj = bpy.data.objects[1], None
- moveFromCenter(obj_model)
- (max_x, min_x), (max_y, min_y), (max_z, min_z), _ = get_model_camera_vals(camera_pose)
- dist = max(((max_x - min_x), (max_y - min_y), (max_z - min_z))) / (2 * np.tan(np.pi / 10))
- cent = Vector(((max_x + min_x) / 2, (max_y + min_y) / 2, (max_z + min_z) / 2))
-
- renderpath = opt.filepath if opt.renderpath is None else opt.renderpath
- capture_top(renderpath, opt.model, obj_model, cent, waypoints, opt.idx, dist)
-
-
-if __name__ == '__main__':
- main()
diff --git a/gibson2/utils/generate_trav_map.py b/gibson2/utils/generate_trav_map.py
index 8921de68e..fa9547ace 100644
--- a/gibson2/utils/generate_trav_map.py
+++ b/gibson2/utils/generate_trav_map.py
@@ -1,16 +1,17 @@
#!/usr/bin/env python
-from gibson2.simulator import Simulator
-from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
-from gibson2.utils.utils import parse_config
-from gibson2.utils.assets_utils import get_ig_scene_path
-from gibson2.utils.map_utils import gen_trav_map
import os
-import gibson2
-
+import sys
import time
import random
-import sys
+import gibson2
+import argparse
+
+from gibson2.simulator import Simulator
+from gibson2.utils.utils import parse_config
+from gibson2.utils.map_utils import gen_trav_map
+from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene,SCENE_SOURCE
+from gibson2.utils.assets_utils import get_ig_scene_path,get_cubicasa_scene_path,get_3dfront_scene_path, get_ig_category_path
"""
script to generate all traversability maps:
@@ -18,11 +19,26 @@ script to generate all traversability maps:
for file in ../../gibson2/ig_dataset/scenes/*
python generate_trav_map.py $(basename $file)
+to generate traversability maps for cubicasa5k or 3dfront:
+pass in additional flag --source CUBICASA or --source THREEDFRONT
+
"""
-def generate_trav_map(scene_name, load_full_scene=True):
+def generate_trav_map(scene_name, scene_source, load_full_scene=True):
+ if scene_source not in SCENE_SOURCE:
+ raise ValueError(
+ 'Unsupported scene source: {}'.format(scene_source))
+ if scene_source == "IG":
+ scene_dir = get_ig_scene_path(scene_name)
+ elif scene_source == "CUBICASA":
+ scene_dir = get_cubicasa_scene_path(scene_name)
+ else:
+ scene_dir = get_3dfront_scene_path(scene_name)
random.seed(0)
- scene = InteractiveIndoorScene(scene_name, texture_randomization=False)
+ scene = InteractiveIndoorScene(scene_name,
+ build_graph=False,
+ texture_randomization=False,
+ scene_source=scene_source)
if not load_full_scene:
scene._set_first_n_objects(3)
s = Simulator(mode='headless', image_width=512,
@@ -45,14 +61,23 @@ def generate_trav_map(scene_name, load_full_scene=True):
trav_map_filename_format = 'floor_trav_no_obj_{}.png'
obstacle_map_filename_format = 'floor_no_obj_{}.png'
- gen_trav_map(vertices_info, faces_info, output_folder=os.path.join(get_ig_scene_path(scene_name), 'layout'),
+ gen_trav_map(vertices_info, faces_info,
+ output_folder=os.path.join(scene_dir, 'layout'),
trav_map_filename_format = trav_map_filename_format,
obstacle_map_filename_format =obstacle_map_filename_format)
def main():
- generate_trav_map(sys.argv[1], False)
- generate_trav_map(sys.argv[1], True)
+ parser = argparse.ArgumentParser(
+ description='Generate Traversability Map')
+ parser.add_argument('scene_names', metavar='s', type=str,
+ nargs='+', help='The name of the scene to process')
+ parser.add_argument('--source', dest='source', help='Source of the scene, should be among [CUBICASA, IG, THREEDFRONT]')
+
+ args = parser.parse_args()
+ for scene_name in args.scene_names:
+ generate_trav_map(scene_name, args.source, False)
+ generate_trav_map(scene_name, args.source, True)
if __name__ == "__main__":
main()
diff --git a/gibson2/utils/map_utils.py b/gibson2/utils/map_utils.py
index 869d685d5..7966543da 100644
--- a/gibson2/utils/map_utils.py
+++ b/gibson2/utils/map_utils.py
@@ -6,12 +6,14 @@ from PIL import Image
import sys
from scipy.spatial import ConvexHull
+
def get_xy_floors(vertices, faces, dist_threshold=-0.98):
z_faces = []
z = np.array([0, 0, 1])
faces_selected = []
for face in tqdm(faces):
- normal = np.cross(vertices[face[2]] - vertices[face[1]], vertices[face[1]] - vertices[face[0]])
+ normal = np.cross(
+ vertices[face[2]] - vertices[face[1]], vertices[face[1]] - vertices[face[0]])
dist = np.dot(normal, z) / np.linalg.norm(normal)
if (dist_threshold is None) or ((dist_threshold is not None) and (dist < dist_threshold)):
z_faces.append(vertices[face[0]][2])
@@ -21,32 +23,30 @@ def get_xy_floors(vertices, faces, dist_threshold=-0.98):
def gen_trav_map(vertices, faces, output_folder, add_clutter=False,
- trav_map_filename_format = 'floor_trav_{}.png',
- obstacle_map_filename_format = 'floor_{}.png'):
- """Generate traversability maps.
-
- Args:
- mp3d_dir: Root directory of Matterport3D or Gibson. Under this root directory should be
- subdirectories, each of which represents a model/environment. Within each
- subdirectory should be a file named 'mesh_z_up.obj'.
- add_clutter: Boolean for whether to generate traversability maps with or without clutter.
+ trav_map_filename_format='floor_trav_{}.png',
+ obstacle_map_filename_format='floor_{}.png'):
+ """
+ Generate traversability maps.
"""
floors = [0.0]
z_faces, vertices, faces_selected = get_xy_floors(vertices, faces)
- z_faces_all, vertices_all, faces_selected_all = get_xy_floors(vertices, faces, dist_threshold=None)
+ z_faces_all, vertices_all, faces_selected_all = get_xy_floors(
+ vertices, faces, dist_threshold=None)
xmin, ymin, _ = vertices.min(axis=0)
xmax, ymax, _ = vertices.max(axis=0)
- max_length = np.max([np.abs(xmin), np.abs(ymin), np.abs(xmax), np.abs(ymax)])
+ max_length = np.max([np.abs(xmin), np.abs(ymin),
+ np.abs(xmax), np.abs(ymax)])
max_length = np.ceil(max_length).astype(np.int)
- wall_maps = gen_map(vertices, faces, output_folder, img_filename_format=obstacle_map_filename_format)
+ wall_maps = gen_map(vertices, faces, output_folder,
+ img_filename_format=obstacle_map_filename_format)
wall_pts = np.array(np.where(wall_maps[0] == 0)).T
wall_convex_hull = ConvexHull(wall_pts)
wall_map_hull = np.zeros(wall_maps[0].shape).astype(np.uint8)
- cv2.fillPoly(wall_map_hull, [wall_convex_hull.points[wall_convex_hull.vertices][:,::-1].reshape((-1,1,2)).astype(
+ cv2.fillPoly(wall_map_hull, [wall_convex_hull.points[wall_convex_hull.vertices][:, ::-1].reshape((-1, 1, 2)).astype(
np.int32)], 255)
for i_floor in range(len(floors)):
@@ -62,17 +62,18 @@ def gen_trav_map(vertices, faces, output_folder, add_clutter=False,
cv2.fillPoly(floor_map, t, 1)
if add_clutter is True: # Build clutter map
- mask1 = ((z_faces_all - floor) < 2.0) * ((z_faces_all - floor) > 0.05)
+ mask1 = ((z_faces_all - floor) < 2.0) * \
+ ((z_faces_all - floor) > 0.05)
faces_new1 = np.array(faces_selected_all)[mask1, :]
t1 = (vertices_all[faces_new1][:, :, :2] + max_length) * 100
t1 = t1.astype(np.int32)
- clutter_map = np.zeros((2 * max_length * 100, 2 * max_length * 100))
+ clutter_map = np.zeros(
+ (2 * max_length * 100, 2 * max_length * 100))
cv2.fillPoly(clutter_map, t1, 1)
floor_map = np.float32((clutter_map == 0) * (floor_map == 1))
-
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (10, 10))
erosion = cv2.dilate(floor_map, kernel, iterations=2)
erosion = cv2.erode(erosion, kernel, iterations=2)
@@ -83,11 +84,14 @@ def gen_trav_map(vertices, faces, output_folder, add_clutter=False,
cur_img = Image.fromarray((erosion * 255).astype(np.uint8))
#cur_img = Image.fromarray(np.flipud(cur_img))
- cur_img.save(os.path.join(output_folder, trav_map_filename_format.format(i_floor)))
+ cur_img.save(os.path.join(
+ output_folder, trav_map_filename_format.format(i_floor)))
+
INTERSECT_EDGE = 0
INTERSECT_VERTEX = 1
+
class Plane(object):
def __init__(self, orig, normal):
self.orig = orig
@@ -100,20 +104,21 @@ class Plane(object):
def point_to_plane_dist(p, plane):
return np.dot((p - plane.orig), plane.n)
+
def compute_triangle_plane_intersections(vertices, faces, tid, plane, dists, dist_tol=1e-8):
"""
Compute the intersection between a triangle and a plane
Returns a list of intersections in the form
- (INTERSECT_EDGE, , ) for edges intersection
- (INTERSECT_VERTEX, , ) for vertices
+ (INTERSECT_EDGE, , ) for edges intersection
+ (INTERSECT_VERTEX, , ) for vertices
This return between 0 and 2 intersections :
- 0 : the plane does not intersect the plane
- 1 : one of the triangle's vertices lies on the plane (so it just
- "touches" the plane without really intersecting)
+ "touches" the plane without really intersecting)
- 2 : the plane slice the triangle in two parts (either vertex-edge,
- vertex-vertex or edge-edge)
+ vertex-vertex or edge-edge)
"""
-
+
# TODO: Use an edge intersection cache (we currently compute each edge
# intersection twice : once for each tri)
@@ -123,9 +128,9 @@ def compute_triangle_plane_intersections(vertices, faces, tid, plane, dists, dis
# Iterate through the edges, cutting the ones that intersect
intersections = []
- for e in ((faces[tid][0],faces[tid][1]),
- (faces[tid][0],faces[tid][2]),
- (faces[tid][1],faces[tid][2])):
+ for e in ((faces[tid][0], faces[tid][1]),
+ (faces[tid][0], faces[tid][2]),
+ (faces[tid][1], faces[tid][2])):
v1 = vertices[e[0]]
d1 = dists[e[0]]
v2 = vertices[e[1]]
@@ -165,7 +170,8 @@ def gen_map(vertices, faces, output_folder, img_filename_format='floor_{}.png'):
xmin, ymin, _ = vertices.min(axis=0)
xmax, ymax, _ = vertices.max(axis=0)
- max_length = np.max([np.abs(xmin), np.abs(ymin), np.abs(xmax), np.abs(ymax)])
+ max_length = np.max([np.abs(xmin), np.abs(ymin),
+ np.abs(xmax), np.abs(ymax)])
max_length = np.ceil(max_length).astype(np.int)
floors = [0.0]
@@ -177,24 +183,27 @@ def gen_map(vertices, faces, output_folder, img_filename_format='floor_{}.png'):
dists = []
z = float(floor) + 0.5
cross_section = []
- plane = Plane(np.array([0,0,z]), np.array([0,0,1]))
+ plane = Plane(np.array([0, 0, z]), np.array([0, 0, 1]))
for v in vertices:
dists.append(point_to_plane_dist(v, plane))
for i in tqdm(range(len(faces))):
- res = compute_triangle_plane_intersections(vertices,faces,
- i, plane, dists)
+ res = compute_triangle_plane_intersections(vertices, faces,
+ i, plane, dists)
if len(res) == 2:
cross_section.append((res[0][1], res[1][1]))
floor_map = np.ones((2 * max_length * 100, 2 * max_length * 100))
for item in cross_section:
- x1, x2 = (item[0][0]+max_length) * 100, (item[1][0]+max_length) * 100
- y1, y2 = (item[0][1]+max_length) * 100, (item[1][1]+max_length) * 100
-
- cv2.line(floor_map, (int(x1), int(y1)), (int(x2), int(y2)), color=(0, 0, 0), thickness=2)
+ x1, x2 = (item[0][0]+max_length) * \
+ 100, (item[1][0]+max_length) * 100
+ y1, y2 = (item[0][1]+max_length) * \
+ 100, (item[1][1]+max_length) * 100
+
+ cv2.line(floor_map, (int(x1), int(y1)),
+ (int(x2), int(y2)), color=(0, 0, 0), thickness=2)
floor_maps.append(floor_map)
cur_img = Image.fromarray((floor_map * 255).astype(np.uint8))
@@ -202,4 +211,4 @@ def gen_map(vertices, faces, output_folder, img_filename_format='floor_{}.png'):
img_filename = img_filename_format.format(i_floor)
cur_img.save(os.path.join(output_folder, img_filename))
- return floor_maps
\ No newline at end of file
+ return floor_maps
diff --git a/gibson2/utils/mesh_util.py b/gibson2/utils/mesh_util.py
index eb81f168d..98d1bb6fb 100644
--- a/gibson2/utils/mesh_util.py
+++ b/gibson2/utils/mesh_util.py
@@ -6,13 +6,15 @@ import numpy as np
from transforms3d import quaternions
from transforms3d.quaternions import axangle2quat, mat2quat
+
def xyzw2wxyz(orn):
"""
:param orn: quaternion in xyzw
:return: quaternion in wxyz
"""
return [orn[-1], orn[0], orn[1], orn[2]]
-
+
+
def frustum(left, right, bottom, top, znear, zfar):
"""Create view frustum matrix."""
assert right != left
@@ -31,6 +33,7 @@ def frustum(left, right, bottom, top, znear, zfar):
M[2, 3] = -1.0
return M
+
def ortho(left, right, bottom, top, znear, zfar):
"""Create orthonormal projection matrix."""
assert right != left
@@ -48,16 +51,15 @@ def ortho(left, right, bottom, top, znear, zfar):
return M
-
def perspective(fovy, aspect, znear, zfar):
"""Create perspective projection matrix."""
+ # fovy is in degree
assert znear != zfar
h = np.tan(fovy / 360.0 * np.pi) * znear
w = h * aspect
return frustum(-w, w, -h, h, znear, zfar)
-
def anorm(x, axis=None, keepdims=False):
"""Compute L2 norms alogn specified axes."""
return np.sqrt((x * x).sum(axis=axis, keepdims=keepdims))
@@ -82,11 +84,11 @@ def lookat(eye, target=[0, 0, 0], up=[0, 1, 0]):
def sample_view(min_dist, max_dist=None):
- '''Sample random camera position.
-
- Sample origin directed camera position in given distance
- range from the origin. ModelView matrix is returned.
- '''
+ """
+ Sample random camera position.
+ Sample origin directed camera position in given distance
+ range from the origin. ModelView matrix is returned.
+ """
if max_dist is None:
max_dist = min_dist
dist = np.random.uniform(min_dist, max_dist)
@@ -127,16 +129,16 @@ def _unify_rows(a):
def load_obj(fn):
"""Load 3d mesh form .obj' file.
- Args:
- fn: Input file name or file-like object.
+ Args:
+ fn: Input file name or file-like object.
- Returns:
- dictionary with the following keys (some of which may be missing):
- position: np.float32, (n, 3) array, vertex positions
- uv: np.float32, (n, 2) array, vertex uv coordinates
- normal: np.float32, (n, 3) array, vertex uv normals
- face: np.int32, (k*3,) traingular face indices
- """
+ Returns:
+ dictionary with the following keys (some of which may be missing):
+ position: np.float32, (n, 3) array, vertex positions
+ uv: np.float32, (n, 2) array, vertex uv coordinates
+ normal: np.float32, (n, 3) array, vertex uv normals
+ face: np.int32, (k*3,) traingular face indices
+ """
position = [np.zeros(3, dtype=np.float32)]
normal = [np.zeros(3, dtype=np.float32)]
uv = [np.zeros(2, dtype=np.float32)]
@@ -185,12 +187,15 @@ def load_obj(fn):
outputs['normal'] = _unify_rows(normal)[normal_idx]
return outputs
+
def save_obj(vertices_info, faces_info, fn):
with open(fn, 'w') as f:
for v in vertices_info:
f.write('v {} {} {}\n'.format(v[0], v[1], v[2]))
for face in faces_info:
- f.write('f {} {} {}\n'.format(face[0] + 1, face[1] + 1, face[2] + 1))
+ f.write('f {} {} {}\n'.format(
+ face[0] + 1, face[1] + 1, face[2] + 1))
+
def transform_vertex(vertices, pose_rot, pose_trans):
v = vertices[:, :3]
@@ -198,8 +203,9 @@ def transform_vertex(vertices, pose_rot, pose_trans):
v = v.dot(pose_rot.T).dot(pose_trans)
return v[:, :3]
+
def normalize_mesh(mesh):
- '''Scale mesh to fit into -1..1 cube'''
+ """Scale mesh to fit into -1..1 cube"""
mesh = dict(mesh)
pos = mesh['position'][:, :3].copy()
pos -= (pos.max(0) + pos.min(0)) / 2.0
@@ -207,6 +213,7 @@ def normalize_mesh(mesh):
mesh['position'] = pos
return mesh
+
def quat2rotmat(quat):
"""
:param quat: quaternion in w,x,y,z
@@ -231,7 +238,7 @@ def mat2xyz(mat):
def safemat2quat(mat):
"""
- :param mat:4x4 matrix
+ :param mat: 4x4 matrix
:return: quaternion in w,x,y,z
"""
quat = np.array([1, 0, 0, 0])
diff --git a/gibson2/utils/motion_planning_wrapper.py b/gibson2/utils/motion_planning_wrapper.py
new file mode 100644
index 000000000..15f91afc5
--- /dev/null
+++ b/gibson2/utils/motion_planning_wrapper.py
@@ -0,0 +1,585 @@
+import gibson2
+from gibson2.envs.igibson_env import iGibsonEnv
+from time import time, sleep
+import os
+from gibson2.utils.assets_utils import download_assets, download_demo_data
+import numpy as np
+from gibson2.external.pybullet_tools.utils import control_joints
+from gibson2.external.pybullet_tools.utils import get_joint_positions
+from gibson2.external.pybullet_tools.utils import get_joint_velocities
+from gibson2.external.pybullet_tools.utils import get_max_limits
+from gibson2.external.pybullet_tools.utils import get_min_limits
+from gibson2.external.pybullet_tools.utils import plan_joint_motion
+from gibson2.external.pybullet_tools.utils import link_from_name
+from gibson2.external.pybullet_tools.utils import joints_from_names
+from gibson2.external.pybullet_tools.utils import set_joint_positions
+from gibson2.external.pybullet_tools.utils import get_sample_fn
+from gibson2.external.pybullet_tools.utils import set_base_values_with_z
+from gibson2.external.pybullet_tools.utils import get_base_values
+from gibson2.external.pybullet_tools.utils import plan_base_motion_2d
+from gibson2.external.pybullet_tools.utils import get_moving_links
+from gibson2.external.pybullet_tools.utils import is_collision_free
+
+from gibson2.utils.utils import rotate_vector_2d, rotate_vector_3d
+from gibson2.utils.utils import l2_distance, quatToXYZW
+from gibson2.scenes.gibson_indoor_scene import StaticIndoorScene
+from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
+from gibson2.objects.visual_marker import VisualMarker
+from transforms3d import euler
+
+import pybullet as p
+
+
+class MotionPlanningWrapper(object):
+ """
+ Motion planner wrapper that supports both base and arm motion
+ """
+
+ def __init__(self,
+ env: iGibsonEnv = None,
+ base_mp_algo: str = 'birrt',
+ arm_mp_algo: str = 'birrt',
+ optimize_iter: int = 0,
+ fine_motion_plan: bool = True):
+ """
+ Get planning related parameters.
+ """
+ self.env = env
+ assert 'occupancy_grid' in self.env.output
+ # get planning related parameters from env
+ self.robot_id = self.env.robots[0].robot_ids[0]
+ # self.mesh_id = self.scene.mesh_body_id
+ # mesh id should not be used
+ self.map_size = self.env.scene.trav_map_original_size * \
+ self.env.scene.trav_map_default_resolution
+
+ self.grid_resolution = self.env.grid_resolution
+ self.occupancy_range = self.env.sensors['scan_occ'].occupancy_range
+ self.robot_footprint_radius = self.env.sensors['scan_occ'].robot_footprint_radius
+ self.robot_footprint_radius_in_map = self.env.sensors[
+ 'scan_occ'].robot_footprint_radius_in_map
+ self.robot = self.env.robots[0]
+ self.base_mp_algo = base_mp_algo
+ self.arm_mp_algo = arm_mp_algo
+ self.base_mp_resolutions = np.array([0.05, 0.05, 0.05])
+ self.optimize_iter = optimize_iter
+ self.mode = self.env.mode
+ self.initial_height = self.env.initial_pos_z_offset
+ self.fine_motion_plan = fine_motion_plan
+ self.robot_type = self.env.config['robot']
+
+ if self.env.simulator.viewer is not None:
+ self.env.simulator.viewer.setup_motion_planner(self)
+
+ if self.robot_type in ['Fetch', 'Movo']:
+ self.setup_arm_mp()
+
+ self.arm_interaction_length = 0.2
+
+ self.marker = None
+ self.marker_direction = None
+
+ if self.mode in ['gui', 'iggui']:
+ self.marker = VisualMarker(
+ radius=0.04, rgba_color=[0, 0, 1, 1])
+ self.marker_direction = VisualMarker(visual_shape=p.GEOM_CAPSULE, radius=0.01, length=0.2,
+ initial_offset=[0, 0, -0.1], rgba_color=[0, 0, 1, 1])
+ self.env.simulator.import_object(
+ self.marker, use_pbr=False)
+ self.env.simulator.import_object(
+ self.marker_direction, use_pbr=False)
+
+ def set_marker_position(self, pos):
+ """
+ Set subgoal marker position
+
+ :param pos: position
+ """
+ self.marker.set_position(pos)
+
+ def set_marker_position_yaw(self, pos, yaw):
+ """
+ Set subgoal marker position and orientation
+
+ :param pos: position
+ :param yaw: yaw angle
+ """
+ quat = quatToXYZW(seq='wxyz', orn=euler.euler2quat(0, -np.pi/2, yaw))
+ self.marker.set_position(pos)
+ self.marker_direction.set_position_orientation(pos, quat)
+
+ def set_marker_position_direction(self, pos, direction):
+ """
+ Set subgoal marker position and orientation
+
+ :param pos: position
+ :param direction: direction vector
+ """
+ yaw = np.arctan2(direction[1], direction[0])
+ self.set_marker_position_yaw(pos, yaw)
+
+ def setup_arm_mp(self):
+ """
+ Set up arm motion planner
+ """
+ if self.robot_type == 'Fetch':
+ self.arm_default_joint_positions = (0.10322468280792236,
+ -1.414019864768982,
+ 1.5178184935241699,
+ 0.8189625336474915,
+ 2.200358942909668,
+ 2.9631312579803466,
+ -1.2862852996643066,
+ 0.0008453550418615341)
+ self.arm_joint_ids = joints_from_names(self.robot_id,
+ [
+ 'torso_lift_joint',
+ 'shoulder_pan_joint',
+ 'shoulder_lift_joint',
+ 'upperarm_roll_joint',
+ 'elbow_flex_joint',
+ 'forearm_roll_joint',
+ 'wrist_flex_joint',
+ 'wrist_roll_joint'
+ ])
+ elif self.robot_type == 'Movo':
+ self.arm_default_joint_positions = (0.205, -1.50058731470836, -1.3002625076695704, 0.5204845864369407,
+ -2.6923805472917626, -0.02678584326934146, 0.5065742552588746,
+ -1.562883631882778)
+ self.arm_joint_ids = joints_from_names(self.robot_id,
+ ["linear_joint",
+ "right_shoulder_pan_joint",
+ "right_shoulder_lift_joint",
+ "right_arm_half_joint",
+ "right_elbow_joint",
+ "right_wrist_spherical_1_joint",
+ "right_wrist_spherical_2_joint",
+ "right_wrist_3_joint",
+ ])
+ self.arm_joint_ids_all = get_moving_links(
+ self.robot_id, self.arm_joint_ids)
+ self.arm_joint_ids_all = [item for item in self.arm_joint_ids_all if
+ item != self.robot.end_effector_part_index()]
+ self.arm_ik_threshold = 0.05
+
+ self.mp_obstacles = []
+ if type(self.env.scene) == StaticIndoorScene:
+ if self.env.scene.mesh_body_id is not None:
+ self.mp_obstacles.append(self.env.scene.mesh_body_id)
+ elif type(self.env.scene) == InteractiveIndoorScene:
+ self.mp_obstacles.extend(self.env.scene.get_body_ids())
+
+ def plan_base_motion(self, goal):
+ """
+ Plan base motion given a base subgoal
+
+ :param goal: base subgoal
+ :return: waypoints or None if no plan can be found
+ """
+ if self.marker is not None:
+ self.set_marker_position_yaw([goal[0], goal[1], 0.05], goal[2])
+
+ state = self.env.get_state()
+ x, y, theta = goal
+ grid = state['occupancy_grid']
+
+ yaw = self.robot.get_rpy()[2]
+ half_occupancy_range = self.occupancy_range / 2.0
+ robot_position_xy = self.robot.get_position()[:2]
+ corners = [
+ robot_position_xy + rotate_vector_2d(local_corner, -yaw)
+ for local_corner in [
+ np.array([half_occupancy_range, half_occupancy_range]),
+ np.array([half_occupancy_range, -half_occupancy_range]),
+ np.array([-half_occupancy_range, half_occupancy_range]),
+ np.array([-half_occupancy_range, -half_occupancy_range]),
+ ]
+ ]
+ path = plan_base_motion_2d(
+ self.robot_id,
+ [x, y, theta],
+ (tuple(np.min(corners, axis=0)), tuple(np.max(corners, axis=0))),
+ map_2d=grid,
+ occupancy_range=self.occupancy_range,
+ grid_resolution=self.grid_resolution,
+ robot_footprint_radius_in_map=self.robot_footprint_radius_in_map,
+ resolutions=self.base_mp_resolutions,
+ obstacles=[],
+ algorithm=self.base_mp_algo,
+ optimize_iter=self.optimize_iter)
+
+ return path
+
+ def simulator_sync(self):
+ """Sync the simulator to renderer"""
+ self.env.simulator.sync()
+
+ def simulator_step(self):
+ """Step the simulator and sync the simulator to renderer"""
+ self.env.simulator.step()
+ self.simulator_sync()
+
+ def dry_run_base_plan(self, path):
+ """
+ Dry run base motion plan by setting the base positions without physics simulation
+
+ :param path: base waypoints or None if no plan can be found
+ """
+ if path is not None:
+ if self.mode in ['gui', 'iggui', 'pbgui']:
+ for way_point in path:
+ set_base_values_with_z(
+ self.robot_id,
+ [way_point[0],
+ way_point[1],
+ way_point[2]],
+ z=self.initial_height)
+ self.simulator_sync()
+ # sleep(0.005) # for animation
+ else:
+ set_base_values_with_z(
+ self.robot_id,
+ [path[-1][0],
+ path[-1][1],
+ path[-1][2]],
+ z=self.initial_height)
+
+ def get_ik_parameters(self):
+ """
+ Get IK parameters such as joint limits, joint damping, reset position, etc
+
+ :return: IK parameters
+ """
+ max_limits, min_limits, rest_position, joint_range, joint_damping = None, None, None, None, None
+ if self.robot_type == 'Fetch':
+ max_limits = [0., 0.] + \
+ get_max_limits(self.robot_id, self.arm_joint_ids)
+ min_limits = [0., 0.] + \
+ get_min_limits(self.robot_id, self.arm_joint_ids)
+ # increase torso_lift_joint lower limit to 0.02 to avoid self-collision
+ min_limits[2] += 0.02
+ rest_position = [0., 0.] + \
+ list(get_joint_positions(self.robot_id, self.arm_joint_ids))
+ joint_range = list(np.array(max_limits) - np.array(min_limits))
+ joint_range = [item + 1 for item in joint_range]
+ joint_damping = [0.1 for _ in joint_range]
+
+ elif self.robot_type == 'Movo':
+ max_limits = get_max_limits(self.robot_id, self.robot.all_joints)
+ min_limits = get_min_limits(self.robot_id, self.robot.all_joints)
+ rest_position = list(get_joint_positions(
+ self.robot_id, self.robot.all_joints))
+ joint_range = list(np.array(max_limits) - np.array(min_limits))
+ joint_range = [item + 1 for item in joint_range]
+ joint_damping = [0.1 for _ in joint_range]
+
+ return (
+ max_limits, min_limits, rest_position,
+ joint_range, joint_damping
+ )
+
+ def get_arm_joint_positions(self, arm_ik_goal):
+ """
+ Attempt to find arm_joint_positions that satisfies arm_subgoal
+ If failed, return None
+
+ :param arm_ik_goal: [x, y, z] in the world frame
+ :return: arm joint positions
+ """
+ ik_start = time()
+
+ max_limits, min_limits, rest_position, joint_range, joint_damping = \
+ self.get_ik_parameters()
+
+ n_attempt = 0
+ max_attempt = 75
+ sample_fn = get_sample_fn(self.robot_id, self.arm_joint_ids)
+ base_pose = get_base_values(self.robot_id)
+ state_id = p.saveState()
+ #p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, False)
+ # find collision-free IK solution for arm_subgoal
+ while n_attempt < max_attempt:
+ if self.robot_type == 'Movo':
+ self.robot.tuck()
+
+ set_joint_positions(self.robot_id, self.arm_joint_ids, sample_fn())
+ arm_joint_positions = p.calculateInverseKinematics(
+ self.robot_id,
+ self.robot.end_effector_part_index(),
+ targetPosition=arm_ik_goal,
+ # targetOrientation=self.robots[0].get_orientation(),
+ lowerLimits=min_limits,
+ upperLimits=max_limits,
+ jointRanges=joint_range,
+ restPoses=rest_position,
+ jointDamping=joint_damping,
+ solver=p.IK_DLS,
+ maxNumIterations=100)
+
+ if self.robot_type == 'Fetch':
+ arm_joint_positions = arm_joint_positions[2:10]
+ elif self.robot_type == 'Movo':
+ arm_joint_positions = arm_joint_positions[:8]
+
+ set_joint_positions(
+ self.robot_id, self.arm_joint_ids, arm_joint_positions)
+
+ dist = l2_distance(
+ self.robot.get_end_effector_position(), arm_ik_goal)
+ # print('dist', dist)
+ if dist > self.arm_ik_threshold:
+ n_attempt += 1
+ continue
+
+ # need to simulator_step to get the latest collision
+ self.simulator_step()
+
+ # simulator_step will slightly move the robot base and the objects
+ set_base_values_with_z(
+ self.robot_id, base_pose, z=self.initial_height)
+ # self.reset_object_states()
+ # TODO: have a princpled way for stashing and resetting object states
+
+ # arm should not have any collision
+ if self.robot_type == 'Movo':
+ collision_free = is_collision_free(
+ body_a=self.robot_id,
+ link_a_list=self.arm_joint_ids_all)
+ # ignore linear link
+ else:
+ collision_free = is_collision_free(
+ body_a=self.robot_id,
+ link_a_list=self.arm_joint_ids)
+
+ if not collision_free:
+ n_attempt += 1
+ # print('arm has collision')
+ continue
+
+ # gripper should not have any self-collision
+ collision_free = is_collision_free(
+ body_a=self.robot_id,
+ link_a_list=[
+ self.robot.end_effector_part_index()],
+ body_b=self.robot_id)
+ if not collision_free:
+ n_attempt += 1
+ print('gripper has collision')
+ continue
+
+ #self.episode_metrics['arm_ik_time'] += time() - ik_start
+ #p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, True)
+ p.restoreState(state_id)
+ p.removeState(state_id)
+ return arm_joint_positions
+
+ #p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, True)
+ p.restoreState(state_id)
+ p.removeState(state_id)
+ #self.episode_metrics['arm_ik_time'] += time() - ik_start
+ return None
+
+ def plan_arm_motion(self, arm_joint_positions):
+ """
+ Attempt to reach arm arm_joint_positions and return arm trajectory
+ If failed, reset the arm to its original pose and return None
+
+ :param arm_joint_positions: final arm joint position to reach
+ :return: arm trajectory or None if no plan can be found
+ """
+ disabled_collisions = {}
+ if self.robot_type == 'Fetch':
+ disabled_collisions = {
+ (link_from_name(self.robot_id, 'torso_lift_link'),
+ link_from_name(self.robot_id, 'torso_fixed_link')),
+ (link_from_name(self.robot_id, 'torso_lift_link'),
+ link_from_name(self.robot_id, 'shoulder_lift_link')),
+ (link_from_name(self.robot_id, 'torso_lift_link'),
+ link_from_name(self.robot_id, 'upperarm_roll_link')),
+ (link_from_name(self.robot_id, 'torso_lift_link'),
+ link_from_name(self.robot_id, 'forearm_roll_link')),
+ (link_from_name(self.robot_id, 'torso_lift_link'),
+ link_from_name(self.robot_id, 'elbow_flex_link'))}
+ elif self.robot_type == 'Movo':
+ disabled_collisions = {
+ (link_from_name(self.robot_id, 'linear_actuator_link'),
+ link_from_name(self.robot_id, 'right_shoulder_link')),
+ (link_from_name(self.robot_id, 'right_base_link'),
+ link_from_name(self.robot_id, 'linear_actuator_fixed_link')),
+ (link_from_name(self.robot_id, 'linear_actuator_link'),
+ link_from_name(self.robot_id, 'right_arm_half_1_link')),
+ (link_from_name(self.robot_id, 'linear_actuator_link'),
+ link_from_name(self.robot_id, 'right_arm_half_2_link')),
+ (link_from_name(self.robot_id, 'linear_actuator_link'),
+ link_from_name(self.robot_id, 'right_forearm_link')),
+ (link_from_name(self.robot_id, 'linear_actuator_link'),
+ link_from_name(self.robot_id, 'right_wrist_spherical_1_link')),
+ (link_from_name(self.robot_id, 'linear_actuator_link'),
+ link_from_name(self.robot_id, 'right_wrist_spherical_2_link')),
+ (link_from_name(self.robot_id, 'linear_actuator_link'),
+ link_from_name(self.robot_id, 'right_wrist_3_link')),
+ (link_from_name(self.robot_id, 'right_wrist_spherical_2_link'),
+ link_from_name(self.robot_id, 'right_robotiq_coupler_link')),
+ (link_from_name(self.robot_id, 'right_shoulder_link'),
+ link_from_name(self.robot_id, 'linear_actuator_fixed_link')),
+ (link_from_name(self.robot_id, 'left_base_link'),
+ link_from_name(self.robot_id, 'linear_actuator_fixed_link')),
+ (link_from_name(self.robot_id, 'left_shoulder_link'),
+ link_from_name(self.robot_id, 'linear_actuator_fixed_link')),
+ (link_from_name(self.robot_id, 'left_arm_half_2_link'),
+ link_from_name(self.robot_id, 'linear_actuator_fixed_link')),
+ (link_from_name(self.robot_id, 'right_arm_half_2_link'),
+ link_from_name(self.robot_id, 'linear_actuator_fixed_link')),
+ (link_from_name(self.robot_id, 'right_arm_half_1_link'),
+ link_from_name(self.robot_id, 'linear_actuator_fixed_link')),
+ (link_from_name(self.robot_id, 'left_arm_half_1_link'),
+ link_from_name(self.robot_id, 'linear_actuator_fixed_link')),
+ }
+
+ if self.fine_motion_plan:
+ self_collisions = True
+ mp_obstacles = self.mp_obstacles
+ else:
+ self_collisions = False
+ mp_obstacles = []
+
+ plan_arm_start = time()
+ p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, False)
+ state_id = p.saveState()
+
+ allow_collision_links = []
+ if self.robot_type == 'Fetch':
+ allow_collision_links = [19]
+ elif self.robot_type == 'Movo':
+ allow_collision_links = [23, 24]
+
+ arm_path = plan_joint_motion(
+ self.robot_id,
+ self.arm_joint_ids,
+ arm_joint_positions,
+ disabled_collisions=disabled_collisions,
+ self_collisions=self_collisions,
+ obstacles=mp_obstacles,
+ algorithm=self.arm_mp_algo,
+ allow_collision_links=allow_collision_links,
+ )
+ p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, True)
+ p.restoreState(state_id)
+ p.removeState(state_id)
+ return arm_path
+
+ def dry_run_arm_plan(self, arm_path):
+ """
+ Dry run arm motion plan by setting the arm joint position without physics simulation
+
+ :param arm_path: arm trajectory or None if no plan can be found
+ """
+ base_pose = get_base_values(self.robot_id)
+ if arm_path is not None:
+ if self.mode in ['gui', 'iggui', 'pbgui']:
+ for joint_way_point in arm_path:
+ set_joint_positions(
+ self.robot_id, self.arm_joint_ids, joint_way_point)
+ set_base_values_with_z(
+ self.robot_id, base_pose, z=self.initial_height)
+ self.simulator_sync()
+ # sleep(0.02) # animation
+ else:
+ set_joint_positions(
+ self.robot_id, self.arm_joint_ids, arm_path[-1])
+ else:
+ # print('arm mp fails')
+ if self.robot_type == 'Movo':
+ self.robot.tuck()
+ set_joint_positions(self.robot_id, self.arm_joint_ids,
+ self.arm_default_joint_positions)
+
+ def plan_arm_push(self, hit_pos, hit_normal):
+ """
+ Attempt to reach a 3D position and prepare for a push later
+
+ :param hit_pos: 3D position to reach
+ :param hit_normal: direction to push after reacehing that position
+ :return: arm trajectory or None if no plan can be found
+ """
+ if self.marker is not None:
+ self.set_marker_position_direction(hit_pos, hit_normal)
+ joint_positions = self.get_arm_joint_positions(hit_pos)
+
+ #print('planned JP', joint_positions)
+ set_joint_positions(self.robot_id, self.arm_joint_ids,
+ self.arm_default_joint_positions)
+ self.simulator_sync()
+ if joint_positions is not None:
+ plan = self.plan_arm_motion(joint_positions)
+ return plan
+ else:
+ return None
+
+ def interact(self, push_point, push_direction):
+ """
+ Move the arm starting from the push_point along the push_direction
+ and physically simulate the interaction
+
+ :param push_point: 3D point to start pushing from
+ :param push_direction: push direction
+ """
+ push_vector = np.array(push_direction) * self.arm_interaction_length
+
+ max_limits, min_limits, rest_position, joint_range, joint_damping = \
+ self.get_ik_parameters()
+ base_pose = get_base_values(self.robot_id)
+
+ steps = 50
+ for i in range(steps):
+ push_goal = np.array(push_point) + \
+ push_vector * (i + 1) / float(steps)
+
+ joint_positions = p.calculateInverseKinematics(
+ self.robot_id,
+ self.robot.end_effector_part_index(),
+ targetPosition=push_goal,
+ # targetOrientation=self.robots[0].get_orientation(),
+ lowerLimits=min_limits,
+ upperLimits=max_limits,
+ jointRanges=joint_range,
+ restPoses=rest_position,
+ jointDamping=joint_damping,
+ solver=p.IK_DLS,
+ maxNumIterations=100)
+
+ if self.robot_type == 'Fetch':
+ joint_positions = joint_positions[2:10]
+ elif self.robot_type == 'Movo':
+ joint_positions = joint_positions[:8]
+
+ control_joints(self.robot_id, self.arm_joint_ids, joint_positions)
+
+ # set_joint_positions(self.robot_id, self.arm_joint_ids, joint_positions)
+ achieved = self.robot.get_end_effector_position()
+ # print('ee delta', np.array(achieved) - push_goal, np.linalg.norm(np.array(achieved) - push_goal))
+
+ # if self.robot_type == 'Movo':
+ # self.robot.control_tuck_left()
+ self.simulator_step()
+ set_base_values_with_z(
+ self.robot_id, base_pose, z=self.initial_height)
+
+ if self.mode in ['pbgui', 'iggui', 'gui']:
+ sleep(0.02) # for visualization
+
+ def execute_arm_push(self, plan, hit_pos, hit_normal):
+ """
+ Execute arm push given arm trajectory
+ Should be called after plan_arm_push()
+
+ :param plan: arm trajectory or None if no plan can be found
+ :param hit_pos: 3D position to reach
+ :param hit_normal: direction to push after reacehing that position
+ """
+ if plan is not None:
+ self.dry_run_arm_plan(plan)
+ self.interact(hit_pos, hit_normal)
+ set_joint_positions(self.robot_id, self.arm_joint_ids,
+ self.arm_default_joint_positions)
+ self.simulator_sync()
diff --git a/gibson2/utils/play.py b/gibson2/utils/play.py
deleted file mode 100644
index a18e21b3d..000000000
--- a/gibson2/utils/play.py
+++ /dev/null
@@ -1,181 +0,0 @@
-import gym
-#import pygame
-import time
-import pygame
-from gibson2.render.profiler import Profiler
-'''
-try:
- matplotlib.use('GTK3Agg')
- import matplotlib.pyplot as plt
-except Exception:
- pass
-'''
-
-#import pyglet.window as pw
-
-from collections import deque
-#from pygame.locals import HWSURFACE, DOUBLEBUF, RESIZABLE, VIDEORESIZE
-
-
-def display_arr(screen, arr, video_size, transpose):
- arr_min, arr_max = arr.min(), arr.max()
- arr = 255.0 * (arr - arr_min) / (arr_max - arr_min)
- pyg_img = pygame.surfarray.make_surface(arr.swapaxes(0, 1) if transpose else arr)
- pyg_img = pygame.transform.scale(pyg_img, video_size)
- screen.blit(pyg_img, (0, 0))
-
-
-def play(env, transpose=True, zoom=None, callback=None, keys_to_action=None):
- """Allows one to play the game using keyboard.
-
- To simply play the game use:
-
- play(gym.make("Pong-v3"))
- play(env)
-
- Above code works also if env is wrapped, so it's particularly useful in
- verifying that the frame-level preprocessing does not render the game
- unplayable.
-
- If you wish to plot real time statistics as you play, you can use
- gym.utils.play.PlayPlot. Here's a sample code for plotting the reward
- for last 5 second of gameplay.
-
- def callback(obs_t, obs_tp1, rew, done, info):
- return [rew,]
- env_plotter = EnvPlotter(callback, 30 * 5, ["reward"])
-
- env = gym.make("Pong-v3")
- play(env, callback=env_plotter.callback)
-
-
- Arguments
- ---------
- env: gym.Env
- Environment to use for playing.
- transpose: bool
- If True the output of observation is transposed.
- Defaults to true.
- zoom: float
- Make screen edge this many times bigger
- callback: lambda or None
- Callback if a callback is provided it will be executed after
- every step. It takes the following input:
- obs_t: observation before performing action
- obs_tp1: observation after performing action
- action: action that was executed
- rew: reward that was received
- done: whether the environemnt is done or not
- info: debug info
- keys_to_action: dict: tuple(int) -> int or None
- Mapping from keys pressed to action performed.
- For example if pressed 'w' and space at the same time is supposed
- to trigger action number 2 then key_to_action dict would look like this:
-
- {
- # ...
- sorted(ord('w'), ord(' ')) -> 2
- # ...
- }
- If None, default key_to_action mapping for that env is used, if provided.
- """
-
- obs_s = env.observation_space
- #assert type(obs_s) == gym.spaces.box.Box
- #assert len(obs_s.shape) == 2 or (len(obs_s.shape) == 3 and obs_s.shape[2] in [1,3])
-
- if keys_to_action is None:
- if hasattr(env, 'get_keys_to_action'):
- keys_to_action = env.get_keys_to_action()
- elif hasattr(env.unwrapped, 'get_keys_to_action'):
- keys_to_action = env.unwrapped.get_keys_to_action()
- relevant_keys = set(sum(map(list, keys_to_action.keys()), []))
-
- pressed_keys = []
- running = True
- env_done = True
-
- record_num = 0
- record_total = 0
- obs = env.reset()
- do_restart = False
- last_keys = [] ## Prevent overacting
- while running:
- if do_restart:
- do_restart = False
- env.reset()
- pressed_keys = []
- continue
- if len(pressed_keys) == 0:
- action = keys_to_action[()]
- with Profiler("Play Env: step"):
- start = time.time()
- obs, rew, env_done, info = env.step(action)
- record_total += time.time() - start
- record_num += 1
- #print(info['sensor'])
- print("Play mode: reward %f" % rew)
- for p_key in pressed_keys:
- action = keys_to_action[(p_key, )]
- prev_obs = obs
- with Profiler("Play Env: step"):
- start = time.time()
- obs, rew, env_done, info = env.step(action)
- record_total += time.time() - start
- record_num += 1
- print("Play mode: reward %f" % rew)
- if callback is not None:
- callback(prev_obs, obs, action, rew, env_done, info)
- # process pygame events
- key_codes = env.get_key_pressed(relevant_keys)
- #print("Key codes", key_codes)
- pressed_keys = []
-
- for key in key_codes:
- if key == ord('r') and key not in last_keys:
- do_restart = True
- if key == ord('j') and key not in last_keys:
- env.robot.turn_left()
- if key == ord('l') and key not in last_keys:
- env.robot.turn_right()
- if key == ord('i') and key not in last_keys:
- env.robot.move_forward()
- if key == ord('k') and key not in last_keys:
- env.robot.move_backward()
- if key not in relevant_keys:
- continue
- pressed_keys.append(key)
-
- last_keys = key_codes
-
-
-class PlayPlot(object):
- def __init__(self, callback, horizon_timesteps, plot_names):
- self.data_callback = callback
- self.horizon_timesteps = horizon_timesteps
- self.plot_names = plot_names
-
- num_plots = len(self.plot_names)
- self.fig, self.ax = plt.subplots(num_plots)
- if num_plots == 1:
- self.ax = [self.ax]
- for axis, name in zip(self.ax, plot_names):
- axis.set_title(name)
- self.t = 0
- self.cur_plot = [None for _ in range(num_plots)]
- self.data = [deque(maxlen=horizon_timesteps) for _ in range(num_plots)]
-
- def callback(self, obs_t, obs_tp1, action, rew, done, info):
- points = self.data_callback(obs_t, obs_tp1, action, rew, done, info)
- for point, data_series in zip(points, self.data):
- data_series.append(point)
- self.t += 1
-
- xmin, xmax = max(0, self.t - self.horizon_timesteps), self.t
-
- for i, plot in enumerate(self.cur_plot):
- if plot is not None:
- plot.remove()
- self.cur_plot[i] = self.ax[i].scatter(range(xmin, xmax), list(self.data[i]))
- self.ax[i].set_xlim(xmin, xmax)
- plt.pause(0.000001)
diff --git a/gibson2/utils/semantics_utils.py b/gibson2/utils/semantics_utils.py
new file mode 100644
index 000000000..b31a437d8
--- /dev/null
+++ b/gibson2/utils/semantics_utils.py
@@ -0,0 +1,19 @@
+import gibson2
+import os
+from gibson2.utils.constants import SemanticClass
+
+def get_class_name_to_class_id(starting_class_id=SemanticClass.SCENE_OBJS):
+ """
+ Get mapping from semantic class name to class id
+
+ :param starting_class_id: starting class id for scene objects
+ """
+ category_txt = os.path.join(gibson2.ig_dataset_path,
+ 'metadata/categories.txt')
+ class_name_to_class_id = dict()
+ if os.path.isfile(category_txt):
+ with open(category_txt) as f:
+ for line in f.readlines():
+ class_name_to_class_id[line.strip()] = starting_class_id
+ starting_class_id += 1
+ return class_name_to_class_id
diff --git a/gibson2/utils/templates/index.html b/gibson2/utils/templates/index.html
deleted file mode 100644
index 5c035adad..000000000
--- a/gibson2/utils/templates/index.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
- iGibson Video Streaming
-
-
- iGibson Video Streaming
-
-
-
\ No newline at end of file
diff --git a/gibson2/utils/urdf_utils.py b/gibson2/utils/urdf_utils.py
index 553ac9c5b..e39ffed48 100644
--- a/gibson2/utils/urdf_utils.py
+++ b/gibson2/utils/urdf_utils.py
@@ -13,6 +13,9 @@ import math
def parse_urdf(tree):
+ """
+ Parse URDF for spliting by floating joints later
+ """
# map from name of child to name of its parent, joint name and type of connection
parent_map = {}
child_map = {} # map from name of parent to list of names of children, joint names and types of connection
@@ -53,6 +56,9 @@ def parse_urdf(tree):
def splitter(parent_map, child_map, joint_map, single_child_link):
+ """
+ Recursively split URDFs by floating joints
+ """
new_single_child_link = []
for (joint_name, joint_tuple) in joint_map.items():
logging.debug("Joint: ", joint_name)
@@ -134,11 +140,20 @@ def splitter(parent_map, child_map, joint_map, single_child_link):
def round_up(n, decimals=0):
+ """
+ Helper function to round a float
+ """
multiplier = 10 ** decimals
return math.ceil(n * multiplier) / multiplier
def transform_element_xyzrpy(element, transformation):
+ """
+ Transform a URDF element by transformation
+
+ :param element: URDF XML element
+ :param transformation: transformation that should be applied to the element
+ """
element_xyz = np.array(
[float(val) for val in element.find("origin").attrib["xyz"].split(" ")])
if 'rpy' in element.find("origin").attrib:
@@ -155,59 +170,10 @@ def transform_element_xyzrpy(element, transformation):
*transform_rpy)
-def merge_fixed_joints(tree):
- while True:
- fixed_joints = [joint for joint in tree.findall(
- "joint") if joint.attrib["type"] == "fixed"]
- if len(fixed_joints) == 0:
- break
- else:
- fixed_joint = fixed_joints[0]
-
- joint_xyz = np.array(
- [float(val) for val in fixed_joint.find("origin").attrib["xyz"].split(" ")])
-
- if 'rpy' in fixed_joint.find("origin").attrib:
- joint_rpy = np.array(
- [float(val) for val in fixed_joint.find("origin").attrib["rpy"].split(" ")])
- else:
- joint_rpy = np.array([0., 0., 0.])
-
- joint_frame = get_transform_from_xyz_rpy(joint_xyz, joint_rpy)
-
- # The transformation needs to be applied to all positional elements defined with respect to the fixed_joint frame
- # This includes:
- # - link elements (visual and geom, we ignore inertia)
- # - next joint elements
- child_link_name = fixed_joint.find("child").attrib["link"]
- child_link = [link for link in tree.findall(
- "link") if link.attrib["name"] == child_link_name][0]
- parent_link_name = fixed_joint.find("parent").attrib["link"]
- parent_link = [link for link in tree.findall(
- "link") if link.attrib["name"] == parent_link_name][0]
- for visual_elem in child_link.iter("visual"):
- transform_element_xyzrpy(visual_elem, joint_frame)
- parent_link.append(visual_elem)
-
- for collision_elem in child_link.iter("collision"):
- transform_element_xyzrpy(collision_elem, joint_frame)
- parent_link.append(collision_elem)
-
- for joint2 in tree.iter("joint"):
- parent_name = joint2.find("parent").attrib["link"]
- # Search for a joint where the child of the "fixed" joint is the parent
- if parent_name == child_link_name:
- transform_element_xyzrpy(joint2, joint_frame)
- joint2.find("parent").attrib["link"] = parent_link_name
-
- tree.getroot().remove(child_link)
- tree.getroot().remove(fixed_joint)
-
-
-def save_urdfs_without_floating_joints(tree, file_prefix, merge_fj):
-
- if merge_fj:
- merge_fixed_joints(tree)
+def save_urdfs_without_floating_joints(tree, file_prefix):
+ """
+ Split one URDF into multiple URDFs if there are floating joints and save them
+ """
# Pybullet doesn't read floating joints
# Find them and separate into different objects
diff --git a/gibson2/utils/utils.py b/gibson2/utils/utils.py
index d4c7f664a..0e5bfa573 100644
--- a/gibson2/utils/utils.py
+++ b/gibson2/utils/utils.py
@@ -12,8 +12,13 @@ import scipy
scipy_version = version.parse(scipy.version.version)
# File I/O related
+
+
def parse_config(config):
+ """
+ Parse iGibson config file / object
+ """
try:
collectionsAbc = collections.abc
except AttributeError:
@@ -25,13 +30,16 @@ def parse_config(config):
assert isinstance(config, str)
if not os.path.exists(config):
- raise IOError('config path {} does not exist. Please either pass in a dict or a string that represents the file path to the config yaml.'.format(config))
+ raise IOError(
+ 'config path {} does not exist. Please either pass in a dict or a string that represents the file path to the config yaml.'.format(config))
with open(config, 'r') as f:
config_data = yaml.load(f, Loader=yaml.FullLoader)
return config_data
# Geometry related
-def rotate_vector_3d(v, r, p, y, cck = True):
+
+
+def rotate_vector_3d(v, r, p, y, cck=True):
"""Rotates 3d vector by roll, pitch and yaw counterclockwise"""
if scipy_version >= version.parse("1.4"):
local_to_global = R.from_euler('xyz', [r, p, y]).as_matrix()
@@ -43,6 +51,7 @@ def rotate_vector_3d(v, r, p, y, cck = True):
else:
return np.dot(local_to_global, v)
+
def get_transform_from_xyz_rpy(xyz, rpy):
"""
Returns a homogeneous transformation matrix (numpy array 4x4)
@@ -55,19 +64,21 @@ def get_transform_from_xyz_rpy(xyz, rpy):
else:
rotation = R.from_euler('xyz', [rpy[0], rpy[1], rpy[2]]).as_dcm()
transformation = np.eye(4)
- transformation[0:3,0:3] = rotation
- transformation[0:3,3] = xyz
+ transformation[0:3, 0:3] = rotation
+ transformation[0:3, 3] = xyz
return transformation
+
def get_rpy_from_transform(transform):
"""
Returns the roll, pitch, yaw angles (Euler) for a given rotation or
homogeneous transformation matrix
transformation = Array with the rotation (3x3) or full transformation (4x4)
"""
- rpy = R.from_dcm(transform[0:3,0:3]).as_euler('xyz')
+ rpy = R.from_dcm(transform[0:3, 0:3]).as_euler('xyz')
return rpy
+
def rotate_vector_2d(v, yaw):
"""Rotates 2d vector by yaw counterclockwise"""
if scipy_version >= version.parse("1.4"):
@@ -84,16 +95,19 @@ def rotate_vector_2d(v, yaw):
print('Incorrect input shape for rotate_vector_2d', v.shape)
return v
+
def l2_distance(v1, v2):
"""Returns the L2 distance between vector v1 and v2."""
return np.linalg.norm(np.array(v1) - np.array(v2))
+
def cartesian_to_polar(x, y):
"""Convert cartesian coordinate to polar coordinate"""
rho = np.sqrt(x ** 2 + y ** 2)
phi = np.arctan2(y, x)
return rho, phi
+
def quatFromXYZW(xyzw, seq):
"""Convert quaternion from XYZW (pybullet convention) to arbitrary sequence."""
assert len(seq) == 4 and 'x' in seq and 'y' in seq and 'z' in seq and 'w' in seq, \
@@ -101,6 +115,7 @@ def quatFromXYZW(xyzw, seq):
inds = ['xyzw'.index(axis) for axis in seq]
return xyzw[inds]
+
def quatToXYZW(orn, seq):
"""Convert quaternion from arbitrary sequence to XYZW (pybullet convention)."""
assert len(seq) == 4 and 'x' in seq and 'y' in seq and 'z' in seq and 'w' in seq, \
@@ -108,7 +123,9 @@ def quatToXYZW(orn, seq):
inds = [seq.index(axis) for axis in 'xyzw']
return orn[inds]
+
def quatXYZWFromRotMat(rot_mat):
+ """Convert quaternion from rotation matrix"""
quatWXYZ = quaternions.mat2quat(rot_mat)
quatXYZW = quatToXYZW(quatWXYZ, 'wxyz')
return quatXYZW
@@ -132,3 +149,14 @@ def normalizeListVec(v):
v = [val/np.sqrt(length) for val in v]
return v
+
+# Quat(wxyz)
+def quat_pos_to_mat(pos, quat):
+ """Convert position and quaternion to transformation matrix"""
+ r_w, r_x, r_y, r_z = quat
+ #print("quat", r_w, r_x, r_y, r_z)
+ mat = np.eye(4)
+ mat[:3, :3] = quaternions.quat2mat([r_w, r_x, r_y, r_z])
+ mat[:3, -1] = pos
+ # Return: roll, pitch, yaw
+ return mat
diff --git a/gibson2/utils/vision_utils.py b/gibson2/utils/vision_utils.py
index b293d7feb..25d59c95a 100644
--- a/gibson2/utils/vision_utils.py
+++ b/gibson2/utils/vision_utils.py
@@ -10,13 +10,13 @@ except ImportError:
class RandomScale(object):
"""Rescale the input PIL.Image to the given size.
Args:
- size (sequence or int): Desired output size. If size is a sequence like
- (w, h), output size will be matched to this. If size is an int,
- smaller edge of the image will be matched to this number.
- i.e, if height > width, then image will be rescaled to
- (size * height / width, size)
- interpolation (int, optional): Desired interpolation. Default is
- ``PIL.Image.BILINEAR``
+ size (sequence or int): Desired output size. If size is a sequence like
+ (w, h), output size will be matched to this. If size is an int,
+ smaller edge of the image will be matched to this number.
+ i.e, if height > width, then image will be rescaled to
+ (size * height / width, size)
+ interpolation (int, optional): Desired interpolation. Default is
+ ``PIL.Image.BILINEAR``
"""
def __init__(self, minsize, maxsize, interpolation=Image.BILINEAR):
@@ -29,9 +29,9 @@ class RandomScale(object):
def __call__(self, img):
"""
Args:
- img (PIL.Image): Image to be scaled.
+ img (PIL.Image): Image to be scaled.
Returns:
- PIL.Image: Rescaled image.
+ PIL.Image: Rescaled image.
"""
size = random.randint(self.minsize, self.maxsize)
diff --git a/gibson2/utils/web_ui.py b/gibson2/utils/web_ui.py
deleted file mode 100644
index a38000d98..000000000
--- a/gibson2/utils/web_ui.py
+++ /dev/null
@@ -1,72 +0,0 @@
-from flask import Flask, render_template, Response
-import sys
-import pickle
-from gibson2.robots.turtlebot_robot import Turtlebot
-from gibson2.simulator import Simulator
-from gibson2.scenes.gibson_indoor_scene import StaticIndoorScene
-from gibson2.objects.ycb_object import YCBObject
-from gibson2.utils.utils import parse_config
-from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRendererSettings
-import numpy as np
-from gibson2.render.profiler import Profiler
-import cv2
-from PIL import Image
-from io import BytesIO
-import base64
-import binascii
-
-def pil_image_to_base64(pil_image):
- buf = BytesIO()
- pil_image.save(buf, format="JPEG")
- return base64.b64encode(buf.getvalue())
-
-
-app = Flask(__name__)
-
-port = "5552"
-if len(sys.argv) > 1:
- port = sys.argv[1]
-
-if len(sys.argv) > 2:
- port_web = sys.argv[2]
- port_web = int(port_web)
-else:
- port_web = 5001
-
-@app.route('/')
-def index():
- return render_template('index.html')
-
-def gen():
- config = parse_config('../../examples/configs/turtlebot_demo.yaml')
- settings = MeshRendererSettings(enable_shadow=True, msaa=False)
- s = Simulator(mode='headless', image_width=256, image_height=256, rendering_settings=settings)
- scene = StaticIndoorScene('Rs',
- build_graph=True,
- pybullet_load_texture=True)
- s.import_scene(scene)
- turtlebot = Turtlebot(config)
- s.import_robot(turtlebot)
-
- for _ in range(10):
- obj = YCBObject('003_cracker_box')
- s.import_object(obj)
- obj.set_position_orientation(np.random.uniform(low=0, high=2, size=3), [0, 0, 0, 1])
- print(s.renderer.instances)
-
- while True:
- turtlebot.apply_action([0.1, -0.1])
- s.step()
- frame = s.renderer.render_robot_cameras(modes=('rgb'))[0]
- frame = (frame[:,:,:3] * 255).astype(np.uint8)
- frame = pil_image_to_base64(Image.fromarray(frame))
- frame = binascii.a2b_base64(frame)
- yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
-
-
-@app.route('/video_feed')
-def video_feed():
- return Response(gen(), mimetype='multipart/x-mixed-replace; boundary=frame')
-
-if __name__ == '__main__':
- app.run(host='0.0.0.0', port=port_web, debug=False)
diff --git a/setup.py b/setup.py
index 9dd95411c..288ed0991 100644
--- a/setup.py
+++ b/setup.py
@@ -112,7 +112,7 @@ class CMakeBuild(build_ext):
subprocess.check_call(['cmake', '--build', '.'] + build_args, cwd=self.build_temp)
-with open("README.md", "r") as fh:
+with open("README.md", "r", encoding="utf-8") as fh:
long_description = fh.read()
setup(
@@ -128,7 +128,7 @@ setup(
'gym>=0.12',
'numpy>=1.16.0',
'scipy>=1.2.1',
- 'pybullet @ https://github.com/fxia22/bullet3/archive/master.zip',
+ 'pybullet @ https://github.com/StanfordVL/bullet3/archive/master.zip',
'transforms3d>=0.3.1',
'opencv-python>=3.4.8',
'Pillow>=5.4.0',
diff --git a/test/benchmark/benchmark_interactive_scene.py b/test/benchmark/benchmark_interactive_scene.py
index 3bbf5e846..2d9748d71 100644
--- a/test/benchmark/benchmark_interactive_scene.py
+++ b/test/benchmark/benchmark_interactive_scene.py
@@ -3,9 +3,10 @@
from gibson2.simulator import Simulator
from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
from gibson2.robots.turtlebot_robot import Turtlebot
-from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRendererSettings
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
+from gibson2.utils.constants import AVAILABLE_MODALITIES
from gibson2.utils.utils import parse_config
-
+from gibson2.utils.constants import NamedRenderingPresets
import os
import gibson2
import time
@@ -13,9 +14,11 @@ import random
import matplotlib.pyplot as plt
from gibson2.utils.assets_utils import get_ig_assets_version
from gibson2.utils.assets_utils import get_scene_path
+import pickle as pkl
+import numpy as np
-def benchmark_scene(scene_name, optimized=False, first_n=200):
+def benchmark_scene(scene_name, optimized=False, import_robot=True):
config = parse_config(os.path.join(gibson2.root_path, '../test/test.yaml'))
assets_version = get_ig_assets_version()
print('assets_version', assets_version)
@@ -23,31 +26,35 @@ def benchmark_scene(scene_name, optimized=False, first_n=200):
scene_name, texture_randomization=False, object_randomization=False)
settings = MeshRendererSettings(
msaa=False, enable_shadow=False, optimized=optimized)
- # scene._set_first_n_objects(first_n)
s = Simulator(mode='headless',
image_width=512,
image_height=512,
device_idx=0,
rendering_settings=settings,
- physics_timestep=1/240.0
)
s.import_ig_scene(scene)
- turtlebot = Turtlebot(config)
- s.import_robot(turtlebot)
+ if import_robot:
+ turtlebot = Turtlebot(config)
+ s.import_robot(turtlebot)
s.renderer.use_pbr(use_pbr=True, use_pbr_mapping=True)
- if optimized:
- s.optimize_vertex_and_texture()
fps = []
physics_fps = []
render_fps = []
- for i in range(5000):
+ obj_awake = []
+ for i in range(2000):
# if i % 100 == 0:
# scene.randomize_texture()
start = time.time()
s.step()
+ if import_robot:
+ # apply random actions
+ turtlebot.apply_action(turtlebot.action_space.sample())
physics_end = time.time()
- _ = s.renderer.render_robot_cameras(modes=('rgb'))
+ if import_robot:
+ _ = s.renderer.render_robot_cameras(modes=('rgb'))
+ else:
+ _ = s.renderer.render(modes=('rgb'))
end = time.time()
#print("Elapsed time: ", end - start)
@@ -57,40 +64,58 @@ def benchmark_scene(scene_name, optimized=False, first_n=200):
fps.append(1 / (end - start))
physics_fps.append(1 / (physics_end - start))
render_fps.append(1 / (end - physics_end))
-
+ obj_awake.append(s.body_links_awake)
s.disconnect()
plt.figure(figsize=(7, 25))
- ax = plt.subplot(5, 1, 1)
+ ax = plt.subplot(6, 1, 1)
plt.hist(render_fps)
ax.set_xlabel('Render fps')
- ax.set_title('Scene {} version {}\noptimized {} num_obj {}/{}'.format(
- scene_name, assets_version, optimized, first_n, scene.get_num_objects()))
- ax = plt.subplot(5, 1, 2)
+ ax.set_title('Scene {} version {}\noptimized {} num_obj {}\n import_robot {}'.format(
+ scene_name, assets_version, optimized, scene.get_num_objects(), import_robot))
+ ax = plt.subplot(6, 1, 2)
plt.hist(physics_fps)
ax.set_xlabel('Physics fps')
- ax = plt.subplot(5, 1, 3)
+ ax = plt.subplot(6, 1, 3)
plt.hist(fps)
ax.set_xlabel('Step fps')
- ax = plt.subplot(5, 1, 4)
+ ax = plt.subplot(6, 1, 4)
plt.plot(render_fps)
ax.set_xlabel('Render fps with time')
ax.set_ylabel('fps')
- ax = plt.subplot(5, 1, 5)
+ ax = plt.subplot(6, 1, 5)
plt.plot(physics_fps)
- ax.set_xlabel('Physics fps with time')
+ ax.set_xlabel('Physics fps with time, converge to {}'.format(np.mean(physics_fps[-100:])))
ax.set_ylabel('fps')
- plt.savefig('scene_benchmark_{}_o_{}_{}.pdf'.format(
- scene_name, optimized, first_n))
+ ax = plt.subplot(6, 1, 6)
+ plt.plot(obj_awake)
+ ax.set_xlabel('Num object links awake, converge to {}'.format(np.mean(obj_awake[-100:])) )
+ plt.savefig('scene_benchmark_{}_o_{}_r_{}.pdf'.format(
+ scene_name, optimized, import_robot))
def main():
- # for i in [0, 1,5,10,20,30,40,50,60,70]:
- benchmark_scene('Rs_int', True)
- #benchmark_scene('Rs_int', False)
- #benchmark_scene('Wainscott_0_int', True)
- #benchmark_scene('Wainscott_0_int', False)
+ benchmark_scene('Rs_int', optimized=True, import_robot=True)
+ benchmark_scene('Rs_int', optimized=True, import_robot=False)
+ # scenes = ["Beechwood_0_int",
+ # "Beechwood_1_int",
+ # "Benevolence_0_int",
+ # "Benevolence_1_int",
+ # "Benevolence_2_int",
+ # "Ihlen_0_int",
+ # "Ihlen_1_int",
+ # "Merom_0_int",
+ # "Merom_1_int",
+ # "Pomaria_0_int",
+ # "Pomaria_1_int",
+ # "Pomaria_2_int",
+ # "Rs_int",
+ # "Wainscott_0_int",
+ # "Wainscott_1_int"]
+
+ # for scene in scenes:
+ # benchmark_scene(scene, True)
if __name__ == "__main__":
main()
diff --git a/test/benchmark/benchmark_interactive_scene_rendering.py b/test/benchmark/benchmark_interactive_scene_rendering.py
new file mode 100644
index 000000000..30d293e79
--- /dev/null
+++ b/test/benchmark/benchmark_interactive_scene_rendering.py
@@ -0,0 +1,117 @@
+#!/usr/bin/env python
+
+from gibson2.simulator import Simulator
+from gibson2.scenes.igibson_indoor_scene import InteractiveIndoorScene
+from gibson2.robots.turtlebot_robot import Turtlebot
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
+from gibson2.utils.constants import AVAILABLE_MODALITIES
+from gibson2.utils.utils import parse_config
+from gibson2.utils.constants import NamedRenderingPresets
+import os
+import gibson2
+import time
+import random
+import matplotlib.pyplot as plt
+from gibson2.utils.assets_utils import get_ig_assets_version
+from gibson2.utils.assets_utils import get_scene_path
+import pickle as pkl
+import numpy as np
+
+
+def benchmark_rendering(scene_list, rendering_presets_list, modality_list):
+ config = parse_config(os.path.join(gibson2.root_path, '../test/test.yaml'))
+ assets_version = get_ig_assets_version()
+ print('assets_version', assets_version)
+ result = {}
+ for scene_name in scene_list:
+ for rendering_preset in rendering_presets_list:
+ scene = InteractiveIndoorScene(
+ scene_name, texture_randomization=False, object_randomization=False)
+ settings = NamedRenderingPresets[rendering_preset]
+ if rendering_preset == 'VISUAL_RL':
+ image_width = 128
+ image_height = 128
+ else:
+ image_width = 512
+ image_height = 512
+ s = Simulator(mode='headless',
+ image_width=image_width,
+ image_height=image_height,
+ device_idx=0,
+ rendering_settings=settings,
+ physics_timestep=1/240.0
+ )
+ s.import_ig_scene(scene)
+ turtlebot = Turtlebot(config)
+ s.import_robot(turtlebot)
+
+ for mode in modality_list:
+ for _ in range(10):
+ s.step()
+ _ = s.renderer.render_robot_cameras(modes=(mode))
+ start = time.time()
+ for _ in range(200):
+ _ = s.renderer.render_robot_cameras(modes=(mode))
+ end = time.time()
+ fps = 200 / (end - start)
+ result[(scene_name, rendering_preset, mode)] = fps
+ s.disconnect()
+ return result
+
+def main():
+ scenes = ["Beechwood_0_int",
+ "Beechwood_1_int",
+ "Benevolence_0_int",
+ "Benevolence_1_int",
+ "Benevolence_2_int",
+ "Ihlen_0_int",
+ "Ihlen_1_int",
+ "Merom_0_int",
+ "Merom_1_int",
+ "Pomaria_0_int",
+ "Pomaria_1_int",
+ "Pomaria_2_int",
+ "Rs_int",
+ "Wainscott_0_int",
+ "Wainscott_1_int"]
+ rendering_settings = ['VISUAL_RL', 'PERCEPTION']
+ modalities = list(AVAILABLE_MODALITIES)
+
+ result = benchmark_rendering(
+ scenes,
+ rendering_settings,
+ modalities
+ )
+
+ aggregated_result = {}
+ for rendering_setting in rendering_settings:
+ for modality in modalities:
+ all_scenes = []
+ for item in result.keys():
+ if item[1] == rendering_setting and item[2] == modality:
+ all_scenes.append(result[item])
+ aggregated_result[('MEAN', rendering_setting, modality)] = np.mean(all_scenes)
+ aggregated_result[('MAX', rendering_setting, modality)] = np.max(all_scenes)
+ aggregated_result[('MIN', rendering_setting, modality)] = np.min(all_scenes)
+
+ print(result)
+ plt.figure(figsize=(5,30))
+ plt.tight_layout()
+ plt.barh(["-".join(item) for item in result.keys()], result.values())
+ for i, v in enumerate(result.values()):
+ plt.text(v + 3, i, '{:.1f}'.format(v), color='blue', fontweight='bold')
+ plt.xlabel('fps')
+ plt.savefig('benchmark_rendering.pdf', bbox_inches = "tight")
+ pkl.dump(result, open('rendering_benchmark_results.pkl', 'wb'))
+
+ plt.figure(figsize=(5, 30))
+ plt.tight_layout()
+ plt.barh(["-".join(item) for item in aggregated_result.keys()], aggregated_result.values())
+ for i, v in enumerate(aggregated_result.values()):
+ plt.text(v + 3, i, '{:.1f}'.format(v), color='blue', fontweight='bold')
+ plt.xlabel('fps')
+ plt.savefig('benchmark_rendering_stats.pdf', bbox_inches="tight")
+ pkl.dump(aggregated_result, open('rendering_benchmark_results_stats.pkl', 'wb'))
+
+if __name__ == "__main__":
+ main()
diff --git a/test/benchmark/benchmark_pbr.py b/test/benchmark/benchmark_pbr.py
index 06c6f00f4..5c10f73bf 100644
--- a/test/benchmark/benchmark_pbr.py
+++ b/test/benchmark/benchmark_pbr.py
@@ -1,6 +1,7 @@
import numpy as np
import time
-from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRenderer, MeshRendererSettings
+from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRenderer
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
import sys
import os
import cv2
@@ -56,10 +57,6 @@ def benchmark(render_to_tensor=False, resolution=512, obj_num = 100, optimized =
print(renderer.visual_objects, renderer.instances)
print(renderer.materials_mapping, renderer.mesh_materials)
- #print(renderer.texture_files)
-
- if optimized:
- renderer.optimize_vertex_and_texture()
start = time.time()
for i in range(n_frame):
diff --git a/test/test_house.yaml b/test/test_house.yaml
index 65567ea40..fd7ed5288 100644
--- a/test/test_house.yaml
+++ b/test/test_house.yaml
@@ -3,27 +3,27 @@ scene: gibson
scene_id: Rs
build_graph: true
load_texture: true
+pybullet_load_texture: true
+trav_map_resolution: 0.1
trav_map_erosion: 2
# robot
robot: Turtlebot
-velocity: 0.1
+is_discrete: false
+velocity: 1.0
-# task, observation and action
-task: pointgoal # pointgoal|objectgoal|areagoal|reaching
+# task
+task: point_nav_random
target_dist_min: 1.0
target_dist_max: 10.0
-initial_pos_z_offset: 0.1
-is_discrete: false
-additional_states_dim: 4
+goal_format: polar
+task_obs_dim: 4
# reward
reward_type: geodesic
success_reward: 10.0
-slack_reward: -0.01
potential_reward_weight: 1.0
collision_reward_weight: -0.1
-collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
# discount factor
discount_factor: 0.99
@@ -32,16 +32,19 @@ discount_factor: 0.99
dist_tol: 0.36 # body width
max_step: 500
max_collisions_allowed: 500
-goal_format: polar
+
+# misc config
+initial_pos_z_offset: 0.1
+collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
# sensor spec
-output: [sensor, rgb, depth, scan]
+output: [task_obs, rgb, depth, scan]
# image
# ASUS Xtion PRO LIVE
# https://www.asus.com/us/3D-Sensor/Xtion_PRO_LIVE
fisheye: false
-image_width: 160
-image_height: 120
+image_width: 160
+image_height: 120
vertical_fov: 45
# depth
depth_low: 0.8
@@ -57,11 +60,10 @@ laser_angular_range: 240.0
min_laser_dist: 0.05
laser_link_name: scan_link
-# sensor noise
+# sensor noise
depth_noise_rate: 0.0
scan_noise_rate: 0.0
# visual objects
visual_object_at_initial_target_pos: true
target_visual_object_visible_to_agent: false
-
diff --git a/examples/configs/turtlebot_p2p_nav.yaml b/test/test_house_occupancy_grid.yaml
similarity index 88%
rename from examples/configs/turtlebot_p2p_nav.yaml
rename to test/test_house_occupancy_grid.yaml
index 56d745821..95792ca36 100644
--- a/examples/configs/turtlebot_p2p_nav.yaml
+++ b/test/test_house_occupancy_grid.yaml
@@ -3,6 +3,7 @@ scene: gibson
scene_id: Rs
build_graph: true
load_texture: true
+pybullet_load_texture: true
trav_map_resolution: 0.1
trav_map_erosion: 2
@@ -11,20 +12,18 @@ robot: Turtlebot
is_discrete: false
velocity: 1.0
-# task, observation and action
-task: pointgoal # pointgoal|objectgoal|areagoal|reaching
+# task
+task: point_nav_random
target_dist_min: 1.0
target_dist_max: 10.0
-initial_pos_z_offset: 0.1
-additional_states_dim: 4
+goal_format: polar
+task_obs_dim: 4
# reward
reward_type: geodesic
success_reward: 10.0
-slack_reward: -0.01
potential_reward_weight: 1.0
collision_reward_weight: -0.1
-collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
# discount factor
discount_factor: 0.99
@@ -33,10 +32,13 @@ discount_factor: 0.99
dist_tol: 0.36 # body width
max_step: 500
max_collisions_allowed: 500
-goal_format: polar
+
+# misc config
+initial_pos_z_offset: 0.1
+collision_ignore_link_a_ids: [1, 2, 3, 4] # ignore collisions with these robot links
# sensor spec
-output: [sensor, rgb, depth, scan]
+output: [task_obs, rgb, depth, scan, occupancy_grid]
# image
# ASUS Xtion PRO LIVE
# https://www.asus.com/us/3D-Sensor/Xtion_PRO_LIVE
@@ -65,4 +67,3 @@ scan_noise_rate: 0.0
# visual objects
visual_object_at_initial_target_pos: true
target_visual_object_visible_to_agent: false
-
diff --git a/test/test_igibson_env.py b/test/test_igibson_env.py
new file mode 100644
index 000000000..92fbc25bf
--- /dev/null
+++ b/test/test_igibson_env.py
@@ -0,0 +1,77 @@
+import gibson2
+from gibson2.envs.igibson_env import iGibsonEnv
+from time import time
+import os
+from gibson2.utils.assets_utils import download_assets, download_demo_data
+
+
+def test_env():
+ download_assets()
+ download_demo_data()
+ config_filename = os.path.join(
+ gibson2.root_path, '../test/test_house.yaml')
+ env = iGibsonEnv(config_file=config_filename, mode='headless')
+ try:
+ for j in range(2):
+ env.reset()
+ for i in range(300): # 300 steps, 30s world time
+ s = time()
+ action = env.action_space.sample()
+ ts = env.step(action)
+ print('ts', 1 / (time() - s))
+ if ts[2]:
+ print("Episode finished after {} timesteps".format(i + 1))
+ break
+ finally:
+ env.close()
+
+
+def test_env_reload():
+ download_assets()
+ download_demo_data()
+ config_filename = os.path.join(
+ gibson2.root_path, '../test/test_house.yaml')
+ env = iGibsonEnv(config_file=config_filename, mode='headless')
+ try:
+ for i in range(3):
+ env.reload(config_filename)
+ env.reset()
+ for i in range(300): # 300 steps, 30s world time
+ s = time()
+ action = env.action_space.sample()
+ ts = env.step(action)
+ print('ts', 1 / (time() - s))
+ if ts[2]:
+ print("Episode finished after {} timesteps".format(i + 1))
+ break
+ finally:
+ env.close()
+
+
+def test_env_reset():
+ download_assets()
+ download_demo_data()
+ config_filename = os.path.join(
+ gibson2.root_path, '../test/test_house.yaml')
+ env = iGibsonEnv(config_file=config_filename, mode='headless')
+
+ class DummyTask(object):
+ def __init__(self):
+ self.reset_scene_called = False
+ self.reset_agent_called = False
+ self.get_task_obs_called = False
+
+ def get_task_obs(self, env):
+ self.get_task_obs_called = True
+
+ def reset_scene(self, env):
+ self.reset_scene_called = True
+
+ def reset_agent(self, env):
+ self.reset_agent_called = True
+
+ env.task = DummyTask()
+ env.reset()
+ assert env.task.reset_scene_called
+ assert env.task.reset_agent_called
+ assert env.task.get_task_obs_called
diff --git a/test/test_motion_planning.py b/test/test_motion_planning.py
new file mode 100644
index 000000000..499019f63
--- /dev/null
+++ b/test/test_motion_planning.py
@@ -0,0 +1,52 @@
+import gibson2
+from gibson2.envs.igibson_env import iGibsonEnv
+from time import time
+import os
+from gibson2.utils.assets_utils import download_assets, download_demo_data
+from gibson2.utils.motion_planning_wrapper import MotionPlanningWrapper
+import numpy as np
+import matplotlib.pyplot as plt
+
+def test_occupancy_grid():
+ print("Test env")
+ download_assets()
+ download_demo_data()
+ config_filename = os.path.join(gibson2.root_path, '../test/test_house_occupancy_grid.yaml')
+
+ nav_env = iGibsonEnv(config_file=config_filename, mode='headless')
+ nav_env.reset()
+ nav_env.robots[0].set_position_orientation([0,0,0],[0,0,0,1])
+ nav_env.simulator.step()
+
+ action = nav_env.action_space.sample()
+ ts = nav_env.step(action)
+ assert np.sum(ts[0]['occupancy_grid'] == 0) > 0
+ assert np.sum(ts[0]['occupancy_grid'] == 1) > 0
+ plt.imshow(ts[0]['occupancy_grid'][:,:,0])
+ plt.colorbar()
+ plt.savefig('occupancy_grid.png')
+ nav_env.clean()
+
+
+def test_base_planning():
+ print("Test env")
+ download_assets()
+ download_demo_data()
+ config_filename = os.path.join(gibson2.root_path, '../test/test_house_occupancy_grid.yaml')
+
+ nav_env = iGibsonEnv(config_file=config_filename, mode='headless')
+ motion_planner = MotionPlanningWrapper(nav_env)
+ state = nav_env.reset()
+ nav_env.robots[0].set_position_orientation([0,0,0],[0,0,0,1])
+ nav_env.simulator.step()
+ plan = None
+ itr = 0
+ while plan is None and itr < 10:
+ plan = motion_planner.plan_base_motion([0.5,0,0])
+ print(plan)
+ itr += 1
+ motion_planner.dry_run_base_plan(plan)
+
+ assert len(plan) > 0
+ nav_env.clean()
+
diff --git a/test/test_navigate_env.py b/test/test_navigate_env.py
deleted file mode 100644
index d63f3cfd9..000000000
--- a/test/test_navigate_env.py
+++ /dev/null
@@ -1,46 +0,0 @@
-import gibson2
-from gibson2.envs.locomotor_env import NavigationEnv
-from time import time
-import os
-from gibson2.utils.assets_utils import download_assets, download_demo_data
-
-def test_env():
- print("Test env")
- download_assets()
- download_demo_data()
- config_filename = os.path.join(gibson2.root_path, '../test/test_house.yaml')
- nav_env = NavigationEnv(config_file=config_filename, mode='headless')
- try:
- for j in range(2):
- nav_env.reset()
- for i in range(300): # 300 steps, 30s world time
- s = time()
- action = nav_env.action_space.sample()
- ts = nav_env.step(action)
- print('ts', 1 / (time() - s))
- if ts[2]:
- print("Episode finished after {} timesteps".format(i + 1))
- break
- finally:
- nav_env.clean()
-
-
-def test_env_reload():
- download_assets()
- download_demo_data()
- config_filename = os.path.join(gibson2.root_path, '../test/test_house.yaml')
- nav_env = NavigationEnv(config_file=config_filename, mode='headless')
- try:
- for i in range(3):
- nav_env.reload(config_filename)
- nav_env.reset()
- for i in range(300): # 300 steps, 30s world time
- s = time()
- action = nav_env.action_space.sample()
- ts = nav_env.step(action)
- print('ts', 1 / (time() - s))
- if ts[2]:
- print("Episode finished after {} timesteps".format(i + 1))
- break
- finally:
- nav_env.clean()
diff --git a/test/test_pbr.py b/test/test_pbr.py
index fcae22693..f6d47e897 100644
--- a/test/test_pbr.py
+++ b/test/test_pbr.py
@@ -1,4 +1,5 @@
-from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRenderer, MeshRendererSettings
+from gibson2.render.mesh_renderer.mesh_renderer_cpu import MeshRenderer
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
import numpy as np
import os
import gibson2
@@ -7,7 +8,7 @@ import time
from gibson2.utils.assets_utils import download_assets
from gibson2.utils.assets_utils import get_ig_model_path
from PIL import Image
-
+import matplotlib.pyplot as plt
def test_render_pbr():
hdr_texture = os.path.join(gibson2.ig_dataset_path, 'scenes', 'background', 'quattro_canti_4k.hdr')
@@ -26,7 +27,48 @@ def test_render_pbr():
renderer.instances[-1].use_pbr_mapping = True
- renderer.set_camera([1.5,1.5,1.5], [0,0,0], [0, 0, 1])
+ renderer.set_camera([1.5,1.5,1.5], [0,0,0], [0, 0, 1], cache=True)
frame = renderer.render(modes=('rgb', 'normal'))
Image.fromarray((255*np.concatenate(frame, axis=1)[:,:,:3]).astype(np.uint8)).save('test_render.png')
+
+ renderer.set_camera([1.49,1.49,1.49], [0,0.05,0.05], [0, 0, 1], cache=True) # simulate camera movement
+ frame = renderer.render(modes=('optical_flow', 'scene_flow'))
+ plt.subplot(1,2,1)
+ plt.imshow(np.abs(frame[0][:,:,:3]) / np.max(np.abs(frame[0][:,:,:3])))
+ plt.subplot(1,2,2)
+ plt.imshow(np.abs(frame[1][:,:,:3]) / np.max(np.abs(frame[1][:,:,:3])))
+ plt.savefig('test_render_flow.png')
+ renderer.release()
+
+
+def test_render_pbr_optimized():
+ hdr_texture = os.path.join(gibson2.ig_dataset_path, 'scenes', 'background', 'quattro_canti_4k.hdr')
+ model_path = os.path.join(get_ig_model_path('sink', 'sink_1'), 'shape', 'visual')
+ settings = MeshRendererSettings(msaa=True, enable_shadow=True, env_texture_filename=hdr_texture, env_texture_filename3=hdr_texture,
+ optimized=True)
+ renderer = MeshRenderer(width=1024, height=1024, vertical_fov=90, rendering_settings=settings)
+ renderer.set_light_position_direction([0,0,10], [0,0,0])
+ i = 0
+
+ for fn in os.listdir(model_path):
+ if fn.endswith('obj'):
+ renderer.load_object(os.path.join(model_path, fn), scale=[1, 1, 1])
+ renderer.add_instance(i)
+ i += 1
+ renderer.instances[-1].use_pbr = True
+ renderer.instances[-1].use_pbr_mapping = True
+
+ renderer.set_camera([1.5,1.5,1.5], [0,0,0], [0, 0, 1], cache=True)
+ frame = renderer.render(modes=('rgb', 'normal'))
+
+ Image.fromarray((255*np.concatenate(frame, axis=1)[:,:,:3]).astype(np.uint8)).save('test_render_optimized.png')
+ renderer.set_camera([1.49,1.49,1.49], [0,0.05,0.05], [0, 0, 1], cache=True) # simulate camera movement
+ frame = renderer.render(modes=('optical_flow', 'scene_flow'))
+ plt.subplot(1,2,1)
+ plt.imshow(np.abs(frame[0][:,:,:3]) / np.max(np.abs(frame[0][:,:,:3])))
+ plt.subplot(1,2,2)
+ plt.imshow(np.abs(frame[1][:,:,:3]) / np.max(np.abs(frame[1][:,:,:3])))
+ plt.savefig('test_render_optimized_flow.png')
+
+ renderer.release()
diff --git a/test/test_render.py b/test/test_render.py
index 78b6fea3e..e8a7f305c 100644
--- a/test/test_render.py
+++ b/test/test_render.py
@@ -52,7 +52,7 @@ def test_render_rendering(record_property):
renderer.add_instance(0)
renderer.set_camera([0, 0, 1.2], [0, 1, 1.2], [0, 1, 0])
renderer.set_fov(90)
- rgb, _, seg, _ = renderer.render()
+ rgb = renderer.render(('rgb'))[0]
record_property("object_loading_time", elapsed)
assert (np.sum(rgb, axis=(0, 1, 2)) > 0)
@@ -70,7 +70,7 @@ def test_render_rendering_cleaning():
renderer.add_instance(0)
renderer.set_camera([0, 0, 1.2], [0, 1, 1.2], [0, 1, 0])
renderer.set_fov(90)
- rgb, _, seg, _ = renderer.render()
+ rgb = renderer.render(('rgb'))[0]
assert (np.sum(rgb, axis=(0, 1, 2)) > 0)
GPUtil.showUtilization()
diff --git a/test/test_render_tensor.py b/test/test_render_tensor.py
new file mode 100644
index 000000000..585d71e82
--- /dev/null
+++ b/test/test_render_tensor.py
@@ -0,0 +1,42 @@
+from gibson2.render.mesh_renderer.mesh_renderer_tensor import MeshRendererG2G
+from gibson2.render.mesh_renderer.mesh_renderer_settings import MeshRendererSettings
+
+import numpy as np
+import os
+import gibson2
+import GPUtil
+import time
+from gibson2.utils.assets_utils import download_assets
+from gibson2.utils.assets_utils import get_ig_model_path
+from PIL import Image
+import matplotlib.pyplot as plt
+import torch
+
+def test_tensor_render_rendering():
+ w = 800
+ h = 600
+ setting = MeshRendererSettings(enable_pbr=False, msaa=True)
+ renderer = MeshRendererG2G(w, h, rendering_settings=setting)
+ test_dir = os.path.join(gibson2.assets_path, 'test')
+ renderer.load_object(os.path.join(test_dir, 'mesh/bed1a77d92d64f5cbbaaae4feed64ec1_new.obj'))
+ renderer.add_instance(0)
+
+ renderer.set_camera([0, 0, 1.2], [0, 1, 1.2], [0, 1, 0])
+ renderer.set_fov(90)
+ tensor, tensor2 = renderer.render(modes=('rgb', 'normal'))
+
+ img_np = tensor.flip(0).data.cpu().numpy().reshape(h, w, 4)
+ img_np2 = tensor2.flip(0).data.cpu().numpy().reshape(h, w, 4)
+
+ # plt.subplot(1,2,1)
+ # plt.imshow(img_np)
+ # plt.subplot(1,2,2)
+ # plt.imshow(img_np2)
+ # plt.show()
+ assert (np.allclose(np.mean(img_np.astype(np.float32), axis=(0, 1)),
+ np.array([131.71548, 128.34981, 121.81708, 255.86292]), rtol=1e-3))
+
+ # print(np.mean(img_np.astype(np.float32), axis = (0,1)))
+ # print(np.mean(img_np2.astype(np.float32), axis = (0,1)))
+ renderer.release()
+
diff --git a/test/test_sensors.py b/test/test_sensors.py
new file mode 100644
index 000000000..7f95460f2
--- /dev/null
+++ b/test/test_sensors.py
@@ -0,0 +1,60 @@
+import gibson2
+from gibson2.envs.igibson_env import iGibsonEnv
+from gibson2.utils.assets_utils import download_assets, download_demo_data
+from gibson2.sensors.scan_sensor import ScanSensor
+from gibson2.sensors.vision_sensor import VisionSensor
+from gibson2.sensors.velodyne_sensor import VelodyneSensor
+import numpy as np
+import os
+
+
+def test_vision_sensor():
+ download_assets()
+ download_demo_data()
+ config_filename = os.path.join(
+ gibson2.root_path, '../test/test_house.yaml')
+ env = iGibsonEnv(config_file=config_filename, mode='headless')
+ vision_modalities = ['rgb', 'depth', 'pc', 'normal', 'seg']
+ vision_sensor = VisionSensor(env, vision_modalities)
+ vision_obs = vision_sensor.get_obs(env)
+
+ assert vision_obs['rgb'].shape == (env.image_height, env.image_width, 3)
+ assert np.all(0 <= vision_obs['rgb']) and np.all(vision_obs['rgb'] <= 1.0)
+
+ assert vision_obs['depth'].shape == (env.image_height, env.image_width, 1)
+ assert np.all(0 <= vision_obs['depth']) and np.all(
+ vision_obs['depth'] <= 1.0)
+
+ assert vision_obs['pc'].shape == (env.image_height, env.image_width, 3)
+
+ assert vision_obs['normal'].shape == (env.image_height, env.image_width, 3)
+ normal_norm = np.linalg.norm(vision_obs['normal'] * 2 - 1, axis=2)
+ assert np.sum(np.abs(normal_norm - 1) > 0.1) / \
+ (env.image_height * env.image_width) < 0.05
+
+ assert vision_obs['seg'].shape == (env.image_height, env.image_width, 1)
+ assert np.all(0 <= vision_obs['seg']) and np.all(vision_obs['seg'] <= 1.0)
+
+
+def test_scan_sensor():
+ download_assets()
+ download_demo_data()
+ config_filename = os.path.join(
+ gibson2.root_path, '../test/test_house.yaml')
+ env = iGibsonEnv(config_file=config_filename, mode='headless')
+ scan_sensor = ScanSensor(env, ['scan'])
+ scan_obs = scan_sensor.get_obs(env)['scan']
+
+ assert scan_obs.shape == (scan_sensor.n_horizontal_rays,
+ scan_sensor.n_vertical_beams)
+ assert np.all(0 <= scan_obs) and np.all(scan_obs <= 1.0)
+
+def test_velodyne():
+ download_assets()
+ download_demo_data()
+ config_filename = os.path.join(
+ gibson2.root_path, '../test/test_house.yaml')
+ env = iGibsonEnv(config_file=config_filename, mode='headless')
+ velodyne_sensor = VelodyneSensor(env)
+ velodyne_obs = velodyne_sensor.get_obs(env)
+ assert(velodyne_obs.shape[1] == 3)
\ No newline at end of file