diff --git a/.gitignore b/.gitignore index 1211160ba..e80baf024 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ dev/transfer.c *.zip .*.swp +docs/apidoc # vscode .vscode/ @@ -30,11 +31,9 @@ physics/*.json # Physics assets physics/models - */events* 0_VRDemoSettings.txt - # VR # This is the folder where the pyd files get put after setup.py builds gibson Release @@ -47,7 +46,6 @@ checkpoint *.model.* examples/train/models/ - log_*/ baselines/ aws/ @@ -64,11 +62,7 @@ gibson/cpp-household # Plotting examples/scripts/plot* - -#pycharm -.idea* - -#models +# Models nav_models gibson/assets diff --git a/Jenkinsfile b/Jenkinsfile index 88d718bda..f691a34a1 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -3,7 +3,7 @@ pipeline { agent { docker { image 'gibsonchallenge/gibsonv2:jenkins' - args '--runtime=nvidia -u root:root -v ${WORKSPACE}/../ig_dataset:${WORKSPACE}/gibson2/ig_dataset' + args '--runtime=nvidia -u root:root -v ${WORKSPACE}/../ig_dataset:${WORKSPACE}/gibson2/data/ig_dataset' } } @@ -14,12 +14,12 @@ pipeline { sh 'pwd' sh 'printenv' sh 'pip install -e .' - sh 'ls gibson2/ig_dataset' } } stage('Build Docs') { steps { + sh 'sphinx-apidoc -o docs/apidoc gibson2 gibson2/external gibson2/utils/data_utils/' sh 'sphinx-build -b html docs _sites' } } @@ -32,10 +32,12 @@ pipeline { sh 'pytest test/test_pbr.py --junitxml=test_result/test_pbr.py.xml' sh 'pytest test/test_object.py --junitxml=test_result/test_object.py.xml' sh 'pytest test/test_simulator.py --junitxml=test_result/test_simulator.py.xml' - sh 'pytest test/test_navigate_env.py --junitxml=test_result/test_navigate_env.py.xml' + sh 'pytest test/test_igibson_env.py --junitxml=test_result/test_igibson_env.py.xml' sh 'pytest test/test_scene_importing.py --junitxml=test_result/test_scene_importing.py.xml' sh 'pytest test/test_robot.py --junitxml=test_result/test_robot.py.xml' sh 'pytest test/test_igsdf_scene_importing.py --junitxml=test_result/test_igsdf_scene_importing.py.xml' + sh 'pytest test/test_sensors.py --junitxml=test_result/test_sensors.py.xml' + sh 'pytest test/test_motion_planning.py --junitxml=test_result/test_motion_planning.py.xml' } } diff --git a/README.md b/README.md index 0fc62ce36..bf87b5af9 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,15 @@ iGibson, the Interactive Gibson Environment, is a simulation environment providing fast visual rendering and physics simulation (based on Bullet). It is packed with a dataset with hundreds of large 3D environments reconstructed from real homes and offices, and interactive objects that can be pushed and actuated. iGibson allows researchers to train and evaluate robotic agents that use RGB images and/or other visual sensors to solve indoor (interactive) navigation and manipulation tasks such as opening doors, picking and placing objects, or searching in cabinets. ### Latest Updates +[12/4/2020] We created a [Slack workspace](https://join.slack.com/t/igibsonuser/shared_invite/zt-jz8x6wgh-2usPj6nMz7mawWyr1tmNfQ) to support iGibson users. + +[12/1/2020] Major update to iGibson to reach iGibson v1.0, for details please refer to our [technical report](TBA). + +- Release of iGibson dataset, which consists of 15 fully interactive scenes and 500+ object models. +- New features of the Simulator: Physically based rendering; 1-beam and 16-beam lidar simulation; Domain + randomization support. +- Code refactoring and cleanup. + [05/14/2020] Added dynamic light support :flashlight: [04/28/2020] Added support for Mac OSX :computer: @@ -15,33 +24,46 @@ iGibson, the Interactive Gibson Environment, is a simulation environment providi If you use iGibson or its assets and models, consider citing the following publication: ``` -@article{xia2020interactive, - title={Interactive Gibson Benchmark: A Benchmark for Interactive Navigation in Cluttered Environments}, - author={Xia, Fei and Shen, William B and Li, Chengshu and Kasimbeg, Priya and Tchapmi, Micael Edmond and Toshev, Alexander and Mart{\'\i}n-Mart{\'\i}n, Roberto and Savarese, Silvio}, - journal={IEEE Robotics and Automation Letters}, - volume={5}, - number={2}, - pages={713--720}, - year={2020}, - publisher={IEEE} +@article{shenigibson, + title={iGibson, a Simulation Environment for Interactive Tasks in Large Realistic Scenes}, + author={Shen, Bokui and Xia, Fei and Li, Chengshu and Mart{\i}n-Mart{\i}n, Roberto and Fan, Linxi and Wang, Guanzhi and Buch, Shyamal and D’Arpino, Claudia and Srivastava, Sanjana and Tchapmi, Lyne P and Vainio, Kent and Fei-Fei, Li and Savarese, Silvio}, + journal={arXiv preprint}, + year={2020} } ``` ### Release -This is the repository for iGibson (gibson2) 0.0.4 release. Bug reports, suggestions for improvement, as well as community developments are encouraged and appreciated. The support for our previous version of the environment, [Gibson v1](http://github.com/StanfordVL/GibsonEnv/), will be moved to this repository. +This is the repository for iGibson (pip package `gibson2`) 1.0 release. Bug reports, suggestions for improvement, as + well as community + developments are encouraged and appreciated. The support for our previous version of the environment, [Gibson + Environment + ](http://github.com/StanfordVL/GibsonEnv/), will be moved to this repository. ### Documentation The documentation for this repository can be found here: [iGibson Environment Documentation](http://svl.stanford.edu/igibson/docs/). It includes installation guide (including data download), quickstart guide, code examples, and APIs. -If you want to know more about iGibson, you can also check out [our webpage](http://svl.stanford.edu/igibson), [our RAL+ICRA20 paper](https://arxiv.org/abs/1910.14442) and [our (outdated) technical report](http://svl.stanford.edu/igibson/assets/gibsonv2paper.pdf). +If you want to know more about iGibson, you can also check out [our webpage](http://svl.stanford.edu/igibson), [our + updated technical report](TBA) and [our RAL+ICRA20 paper](https://arxiv.org/abs/1910.14442) and. ### Dowloading Dataset of 3D Environments -There are several datasets of 3D reconstructed large real-world environments (homes and offices) that you can download and use with iGibson. All of them will be accessible once you fill in this [form](https://forms.gle/36TW9uVpjrE1Mkf9A). +There are several datasets of 3D reconstructed large real-world environments (homes and offices) that you can download and use with iGibson. All of them will be accessible once you fill in this [form]. -You will have access to ten environments with annotated instances of furniture (chairs, tables, desks, doors, sofas) that can be interacted with, and to the original 572 reconstructed 3D environments without annotated objects from [Gibson v1](http://github.com/StanfordVL/GibsonEnv/). +Additionally, with iGibson v1.0 release, you will have access to 15 fully interactive scenes (100+ rooms) that can be + used in simulation. As a highlight, here + are the features we support. We also include 500+ object models. -You will also have access to a [fully annotated environment: Rs_interactive](https://storage.googleapis.com/gibson_scenes/Rs_interactive.tar.gz) where close to 200 articulated objects are placed in their original locations of a real house and ready for interaction. ([The original environment: Rs](https://storage.googleapis.com/gibson_scenes/Rs.tar.gz) is also available). More info can be found in the [installation guide](http://svl.stanford.edu/igibson/docs/installation.html). +- 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 + +For instructions to install iGibson and download dataset, you can visit [installation guide](http://svl.stanford.edu/igibson/docs/installation.html). # VR Information @@ -154,4 +176,4 @@ Have fun in VR! Helpful tips: Press ESCAPE to force the fullscreen rendering window to close during program execution. -Before using SRAnipal eye tracking, you may want to re-calibrate the eye tracker. Please go to the Vive system settings to perform this calibration. \ No newline at end of file +Before using SRAnipal eye tracking, you may want to re-calibrate the eye tracker. Please go to the Vive system settings to perform this calibration. diff --git a/docs/acknowledgements.md b/docs/acknowledgements.md index b7ffa5f83..ff4ff4acf 100644 --- a/docs/acknowledgements.md +++ b/docs/acknowledgements.md @@ -6,3 +6,5 @@ iGibson uses code from a few open source repositories. Without the efforts of th - Syoyo Fujita: [tinyobjloader](https://github.com/syoyo/tinyobjloader) - Erwin Coumans: [egl_example](https://github.com/erwincoumans/egl_example) - Caelan Garrett: [ss-pybullet](https://github.com/caelan/ss-pybullet) +- Sean Barrett: [stb](https://github.com/nothings/stb) +- Michał Siejak: [PBR](https://github.com/Nadrin/PBR) \ No newline at end of file diff --git a/docs/algorithms.md b/docs/algorithms.md deleted file mode 100644 index cfc931ea0..000000000 --- a/docs/algorithms.md +++ /dev/null @@ -1,64 +0,0 @@ -# Algorithms - -### Overview - -iGibson can be used with any algorithms (from optimal control to model-free reinforcement leanring) that accommodate OpenAI gym interface. Feel free to use your favorite algorithms and deep learning frameworks. - -### Examples - -#### TF-Agents - -In this example, we show an environment wrapper of [TF-Agents](https://github.com/tensorflow/agents) for iGibson and an example training code for [SAC agent](https://arxiv.org/abs/1801.01290). The code can be found in [our fork of TF-Agents](https://github.com/StanfordVL/agents/): [agents/blob/gibson_sim2real/tf_agents/environments/suite_gibson.py](https://github.com/StanfordVL/agents/blob/gibson_sim2real/tf_agents/environments/suite_gibson.py) and [agents/blob/gibson_sim2real/tf_agents/agents/sac/examples/v1/train_single_env.sh](https://github.com/StanfordVL/agents/blob/gibson_sim2real/tf_agents/agents/sac/examples/v1/train_single_env.sh). - -```python -def load(config_file, - scene_id=None, - env_type='gibson', - sim2real_track='static', - env_mode='headless', - action_timestep=1.0 / 5.0, - physics_timestep=1.0 / 40.0, - device_idx=0, - random_position=False, - random_height=False, - gym_env_wrappers=(), - env_wrappers=(), - spec_dtype_map=None): - config_file = os.path.join(os.path.dirname(gibson2.__file__), config_file) - if env_type == 'gibson': - if random_position: - env = NavigateRandomEnv(config_file=config_file, - mode=env_mode, - action_timestep=action_timestep, - physics_timestep=physics_timestep, - device_idx=device_idx, - random_height=random_height) - else: - env = NavigateEnv(config_file=config_file, - mode=env_mode, - action_timestep=action_timestep, - physics_timestep=physics_timestep, - device_idx=device_idx) - elif env_type == 'gibson_sim2real': - env = NavigateRandomEnvSim2Real(config_file=config_file, - mode=env_mode, - action_timestep=action_timestep, - physics_timestep=physics_timestep, - device_idx=device_idx, - track=sim2real_track) - else: - assert False, 'unknown env_type: {}'.format(env_type) - - discount = env.discount_factor - max_episode_steps = env.max_step - - return wrap_env( - env, - discount=discount, - max_episode_steps=max_episode_steps, - gym_env_wrappers=gym_env_wrappers, - time_limit_wrapper=wrappers.TimeLimit, - env_wrappers=env_wrappers, - spec_dtype_map=spec_dtype_map, - auto_reset=True -``` diff --git a/docs/api_envs.rst b/docs/api_envs.rst deleted file mode 100644 index 8993403ad..000000000 --- a/docs/api_envs.rst +++ /dev/null @@ -1,29 +0,0 @@ -Env -============= - -.. automodule:: gibson2.envs -.. automodule:: gibson2.envs.base_env - - -BaseEnv ------------- - -.. autoclass:: gibson2.envs.base_env.BaseEnv - - .. automethod:: __init__ - .. automethod:: reload - .. automethod:: load - .. automethod:: clean - .. automethod:: simulator_step - - -.. automodule:: gibson2.envs.locomotor_env - -NavigateEnv -------------- - -.. autoclass:: gibson2.envs.locomotor_env.NavigateEnv - - .. automethod:: __init__ - .. automethod:: step - .. automethod:: reset diff --git a/docs/api_mesh_renderer.rst b/docs/api_mesh_renderer.rst deleted file mode 100644 index 66207d095..000000000 --- a/docs/api_mesh_renderer.rst +++ /dev/null @@ -1,57 +0,0 @@ -MeshRenderer -============== - -.. automodule:: gibson2.core.render -.. automodule:: gibson2.core.render.mesh_renderer -.. automodule:: gibson2.core.render.mesh_renderer.mesh_renderer_cpu - -MeshRenderer --------------- -.. autoclass:: gibson2.core.render.mesh_renderer.mesh_renderer_cpu.MeshRenderer - - .. automethod:: __init__ - .. automethod:: setup_framebuffer - .. automethod:: load_object - .. automethod:: add_instance - .. automethod:: add_instance_group - .. automethod:: add_robot - .. automethod:: set_camera - .. automethod:: set_fov - .. automethod:: get_intrinsics - .. automethod:: readbuffer - .. automethod:: render - .. automethod:: clean - .. automethod:: release - -MeshRendererG2G ----------------- - -.. autoclass:: gibson2.core.render.mesh_renderer.mesh_renderer_tensor.MeshRendererG2G - - .. automethod:: __init__ - .. automethod:: render - - -VisualObject --------------- -.. autoclass:: gibson2.core.render.mesh_renderer.mesh_renderer_cpu.VisualObject - - .. automethod:: __init__ - - -InstanceGroup --------------- -.. autoclass:: gibson2.core.render.mesh_renderer.mesh_renderer_cpu.InstanceGroup - - .. automethod:: __init__ - .. automethod:: render - - -Instance --------------- -.. autoclass:: gibson2.core.render.mesh_renderer.mesh_renderer_cpu.Instance - - .. automethod:: __init__ - .. automethod:: render - - diff --git a/docs/api_object.rst b/docs/api_object.rst deleted file mode 100644 index c68bdbf1d..000000000 --- a/docs/api_object.rst +++ /dev/null @@ -1,53 +0,0 @@ -Object -========== - -YCBObject --------------- -.. autoclass:: gibson2.core.physics.interactive_objects.YCBObject - - .. automethod:: __init__ - - -ShapeNetObject --------------- -.. autoclass:: gibson2.core.physics.interactive_objects.ShapeNetObject - - .. automethod:: __init__ - - - -Pedestrian --------------- -.. autoclass:: gibson2.core.physics.interactive_objects.Pedestrian - - .. automethod:: __init__ - - -VisualMarker --------------- -.. autoclass:: gibson2.core.physics.interactive_objects.VisualMarker - - .. automethod:: __init__ - - - -CubeObject --------------- -.. autoclass:: gibson2.objects.cube.CubeObject - - .. automethod:: __init__ - - -ArticulatedObject --------------- -.. autoclass:: gibson2.articulated_object.ArticulatedObject - - .. automethod:: __init__ - - -RBOObject --------------- -.. autoclass:: gibson2.articulated_object.RBOObject - - .. automethod:: __init__ - diff --git a/docs/api_robot.rst b/docs/api_robot.rst deleted file mode 100644 index 43b661b11..000000000 --- a/docs/api_robot.rst +++ /dev/null @@ -1,115 +0,0 @@ -Robot -================ - -BaseRobot --------------- - -.. autoclass:: gibson2.core.physics.robot_bases.BaseRobot - - .. automethod:: __init__ - .. automethod:: load - .. automethod:: parse_robot - - -BodyPart ----------- -.. autoclass:: gibson2.core.physics.robot_bases.BodyPart - - .. automethod:: __init__ - - -Joint ------------- -.. autoclass:: gibson2.core.physics.robot_bases.Joint - - .. automethod:: __init__ - - - -LocomotorRobot -------------------- - -.. autoclass:: gibson2.robots.robot_locomotor.LocomotorRobot - - .. automethod:: __init__ - - -Robot Implemtations ----------------------- - -Ant -^^^^^^^^^^ - -.. autoclass:: gibson2.robots.ant_robot.Ant - - .. automethod:: __init__ - - -Humanoid -^^^^^^^^^^ - -.. autoclass:: gibson2.robots.humanoid_robot.Humanoid - - .. automethod:: __init__ - - -Husky -^^^^^^^^^^ - -.. autoclass:: gibson2.robots.husky_robot.Husky - - .. automethod:: __init__ - - - -Quadrotor -^^^^^^^^^^ - -.. autoclass:: gibson2.robots.quadrotor_robot.Quadrotor - - .. automethod:: __init__ - - - -Turtlebot -^^^^^^^^^^ - -.. autoclass:: gibson2.robots.turtlebot_robot.Turtlebot - - .. automethod:: __init__ - - -Freight -^^^^^^^^^^ - -.. autoclass:: gibson2.robots.freight_robot.Freight - - .. automethod:: __init__ - - -Fetch -^^^^^^^^^^ -.. autoclass:: gibson2.robots.fetch_robot.Fetch - - .. automethod:: __init__ - - -JR2 -^^^^^^^^^^ -.. autoclass:: gibson2.robots.jr2_robot.JR2 - - .. automethod:: __init__ - -JR2_Kinova -^^^^^^^^^^ -.. autoclass:: gibson2.robots.jr2_kinova_robot.JR2_Kinova - - .. automethod:: __init__ - - -Locobot -^^^^^^^^^^ -.. autoclass:: gibson2.robots.locobot_robot.Locobot - - .. automethod:: __init__ - diff --git a/docs/api_scene.rst b/docs/api_scene.rst deleted file mode 100644 index b234e696c..000000000 --- a/docs/api_scene.rst +++ /dev/null @@ -1,20 +0,0 @@ -Scene -============= - -Scene manages the environment where the agent trains. We include a`StadiumScene` and a `BuildingScene`. - -.. automodule:: gibson2.core.physics.scene - -StadiumScene --------------- -.. autoclass:: gibson2.core.physics.scene.StadiumScene - - .. automethod:: load - - -BuildingScene --------------- -.. autoclass:: gibson2.core.physics.scene.BuildingScene - - .. automethod:: __init__ - .. automethod:: load diff --git a/docs/api_simulator.rst b/docs/api_simulator.rst deleted file mode 100644 index c88a6e8db..000000000 --- a/docs/api_simulator.rst +++ /dev/null @@ -1,22 +0,0 @@ -Simulator -============ -.. automodule:: gibson2.core.simulator - -Simulator ------------- - -.. autoclass:: gibson2.core.simulator.Simulator - - .. automethod:: __init__ - .. automethod:: set_timestep - .. automethod:: add_viewer - .. automethod:: reload - .. automethod:: load - .. automethod:: import_scene - .. automethod:: import_object - .. automethod:: import_robot - .. automethod:: import_object - .. automethod:: step - .. automethod:: update_position - .. automethod:: isconnected - .. automethod:: disconnect diff --git a/docs/assets.md b/docs/assets.md index c689210a4..d5d24fbe7 100644 --- a/docs/assets.md +++ b/docs/assets.md @@ -3,6 +3,7 @@ ## Introduction Assets includes necessary files for constructing a scene in iGibson simulator. The files include robot models, interactive objects, articulated objects and mesh files for tests. These files are too large to include in a version control system so we distribute them separately. The assets file can be downloaded to the path set in `your_installation_path/gibson2/global_config.yaml` (default to `your_installation_path/gibson2/assets`) with running + ```bash python -m gibson2.utils.assets_utils --download_assets ``` @@ -44,7 +45,7 @@ assets ## Models -The robots folders correspond to [robot](robots.md) models. +The robots folders correspond to [robot](./robots.md) models. | Agent Name | Folder | |:-------------: | :-------------: | @@ -59,7 +60,7 @@ The robots folders correspond to [robot](robots.md) models. | JackRabbot | `jr2_urdf` | | LocoBot | `locobot` | -We also include [YCB objects](http://www.ycbbenchmarks.com/object-models/) in `ycb` folder, [RBO models](https://tu-rbo.github.io/articulated-objects/) in `rbo` folder, and a few commonly used primitives for home environments such as doors (in `scene_components`) and cabinets (in `cabinet` and `cabinet2`). You can refer to [objects](objects.md) page to see how to use these models in gibson scenes. Don't forget to cite related papers when using these assets. +We also include [YCB objects](http://www.ycbbenchmarks.com/object-models/) in `ycb` folder, [RBO models](https://tu-rbo.github.io/articulated-objects/) in `rbo` folder, and a few commonly used primitives for home environments such as doors (in `scene_components`) and cabinets (in `cabinet` and `cabinet2`). You can refer to [objects](./objects.md) page to see how to use these models in gibson scenes. Don't forget to cite related papers when using these assets. ## Pretrained network diff --git a/docs/dataset.md b/docs/dataset.md index 7036742a7..1efdf7bc6 100644 --- a/docs/dataset.md +++ b/docs/dataset.md @@ -1,12 +1,40 @@ Dataset ========================================== +In dataset we include two parts. First we introduce the new iGibson dataset in this release. Secondly, we introduce + how to download previous Gibson dataset, which is updated and compatible with iGibson. + +- [Download iGibson Data](#download-igibson-data) +- [Download Gibson Data](#download-gibson-data) + Download iGibson Data ------------------------ -The link will first take you to the license agreement and then to the data. +We annotate fifteen 3D reconstructions of real-world scans and convert them into fully interactive scene models. In this process, we respect the original object-instance layout and object-category distribution. The object models are extended from open-source datasets ([ShapeNet Dataset](https://www.shapenet.org/), [Motion Dataset](http://motiondataset.zbuaa.com/), [SAPIEN Dataset](https://sapien.ucsd.edu/)) enriched with annotations of material and dynamic properties. -[[ Get download link for iGibson Data ]](https://forms.gle/36TW9uVpjrE1Mkf9A) +The fifteen fully interactive models are visualized below. + +![placeholder.jpg](images/ig_scene.png) + +#### Download Instruction +To download the dataset, you need to first configure where the dataset is to be stored. You can change it in `your_installation_path/gibson2/global_config.yaml` (default and recommended: `ig_dataset: your_installation_path/gibson2/data/ig_dataset`). iGibson scenes can be downloaded with one single line: + +```bash +python -m gibson2.utils.assets_utils --download_ig_dataset +``` + +#### Dataset Format +The new dataset format can be found [here](https://github.com/StanfordVL/iGibson/tree/master/gibson2/utils/data_utils). + +#### Cubicasa / 3D Front Dataset +We provide support for Cubicasa and 3D Front Dataset, to import them into iGibson, follow the guide [here](https://github.com/StanfordVL/iGibson/tree/master/gibson2/utils/data_utils/ext_scene). + +Download Gibson Data +------------------------ +Original Gibson Environment Dataset has been updated to use with iGibson simulator. The link will first take you to + the license agreement and then to the data. + +[[ Get download link for Gibson Data ]]. License Note: The dataset license is included in the above link. The license in this repository covers only the provided software. @@ -14,50 +42,25 @@ Files included in this distribution: 1. All scenes, 572 scenes (108GB): gibson_v2_all.tar.gz 2. 4+ partition, 106 scenes, with textures better packed (2.6GB): gibson_v2_4+.tar.gz -3. 10 scenes with interactive objects, 10 Scenes (<1GB): interactive_dataset.tar.gz -4. Demo scenes, `Rs` and `Rs_interactive` - -To download 1,2 and 3, you need to fill in the agreement and get the download link `URL`, after which you can manually download and store them in the path set in `your_installation_path/gibson2/global_config.yaml` (default and recommended: `your_installation_path/gibson2/dataset`). You can run a single command to download the dataset, this script automatically download, decompress, and put the dataset to correct place. +3. Demo scene `Rs` +To download 1 and 2, you need to fill in the agreement and get the download link `URL`, after which you can + manually download and store them in the path set in `your_installation_path/gibson2/global_config.yaml` (default and + recommended: `dataset: your_installation_path/gibson2/data/g_dataset`). You can run a single command to download the dataset + , this script automatically download, decompress, and put the dataset to correct place. ```bash python -m gibson2.utils.assets_utils --download_dataset URL ``` -To download 4, you can run: +To download 3, you can run: ```bash python -m gibson2.utils.assets_utils --download_demo_data ``` -New Interactive Gibson Environment Dataset --------------------------------------------------- -Using a semi-automatic pipeline introduced in our [ICRA20 paper](https://ieeexplore.ieee.org/document/8954627), we annotated for five object categories (chairs, desks, doors, sofas, and tables) in ten buildings (more coming soon!) +### Original Gibson Environment Dataset Description (Non-interactive) -Replaced objects are visualized in these topdown views: - -![topdown.jpg](images/topdown.jpg) - -#### Dataset Format - -The dataset format is similar to original gibson dataset, with additional of cleaned scene mesh, floor plane and replaced objects. Files in one folder are listed as below: - -``` -mesh_z_up.obj # 3d mesh of the environment, it is also associated with an mtl file and a texture file, omitted here -mesh_z_up_cleaned.obj # 3d mesh of the environment, with annotated furnitures removed -alignment_centered_{}.urdf # replaced furniture models as urdf files -pos_{}.txt # xyz position to load above urdf models -floors.txt # floor height -plane_z_up_{}.obj # floor plane for each floor, used for filling holes -floor_render_{}.png # top down views of each floor -floor_{}.png # top down views of obstacles for each floor -floor_trav_{}.png # top down views of traversable areas for each floor -``` - -Original Gibson Environment Dataset (Non-interactive) -------------------------------------------------------- - -Original Gibson Environment Dataset has been updated to use with iGibson simulator. 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/). diff --git a/docs/environments.md b/docs/environments.md index b32ca855e..09b6986fd 100644 --- a/docs/environments.md +++ b/docs/environments.md @@ -2,43 +2,93 @@ ### Overview -We provide **Environments** that follow the [OpenAI gym](https://github.com/openai/gym) interface for applications such as reinforcement learning algorithms. Generally speaking, an **Environment** instantiates **Scene**, **Object** and **Robot** and import them into its **Simulator**. An **Environment** can also be interpreted as a task definition, which includes observation_space, action space, reward, and termination condition. Most of the code can be found here: -[gibson2/envs/locomotor_env.py](https://github.com/StanfordVL/iGibson/blob/master/gibson2/envs/locomotor_env.py). +We provide **Environments** that follow the [OpenAI gym](https://github.com/openai/gym) interface for applications such as reinforcement learning algorithms. Generally speaking, an **Environment** instantiates **Scene**, **Object** and **Robot** and import them into its **Simulator**. An **Environment** also instantiates a list of **Sensors** (usually as part of the observation space) and a **Task**, which further includes a list of **Reward Functions** and **Termination Conditions**. -#### Config -To instantiate an **Environment**, we first need to create a YAML config file. It will specifies a number of parameters for the **Environment**, such as which scenes, robots, objects to load, what the sensor specs are, etc. Exapmles of config files can be found here: [examples/configs](https://github.com/StanfordVL/iGibson/tree/master/examples/configs). +Most of the code can be found here: [gibson2/envs/igibson_env.py](https://github.com/StanfordVL/iGibson/blob/master/gibson2/envs/igibson_env.py). -Here is one example: [examples/configs/turtlebot_p2p_nav.yaml](https://github.com/StanfordVL/iGibson/blob/master/examples/configs/turtlebot_p2p_nav.yaml) +#### Sensors + +We provide different types of sensors as lightweight wrappers around the renderer. Currently we support RGB, surface normal, segmentation, 3D point cloud, depth map, optical flow, and scene flow, and also 1-beam and 16-beam LiDAR signals. Additionally, we provide a sensor noise model with random dropout (currently only for depth map and 1-beam LiDAR) to simulate real-world sensor noise. The amount of noise can be controlled by `depth_noise_rate` and `scan_noise_rate` in the config files. Contribution of more noise models is most welcome. + +Most of the code can be found in [gibson2/sensors](https://github.com/StanfordVL/iGibson/tree/master/gibson2/sensors). + +#### Tasks + +Each **Task** should implement `reset_scene`, `reset_agent`, `step` and `get_task_obs`. +- `reset_scene` and `reset_agent` will be called during `env.reset` and should include task-specific details to reset the scene and the agent, respectively. +- `step` will be called during `env.step` and should include task-specific details of what needs to be done at every timestep. +- `get_task_obs` returns task-specific observation (non-sensory observation) as a numpy array. For instance, typical goal-oriented robotics tasks should include goal information and proprioceptive states in `get_task_obs`. +Each **Task** should also include a list of **Reward Functions** and **Termination Conditions** defined below. +We provide a few Embodied AI tasks. +- PointGoalFixedTask +- PointGoalRandomTask +- InteractiveNavRandomTask +- DynamicNavRandomTask +- ReachingRandomTask +- RoomRearrangementTask + +Most of the code can be found in [gibson2/tasks](https://github.com/StanfordVL/iGibson/tree/master/gibson2/tasks). + +#### Reward Functions + +At each timestep, `env.step` will call `task.get_reward`, which in turn sums up all the reward terms. +We provide a few common reward functions for robotics tasks. +- PointGoalReward +- ReachingGoalReward +- PotentialReward +- CollisionReward + +Most of the code can be found in [gibson2/reward_functions](https://github.com/StanfordVL/iGibson/tree/master/gibson2/reward_functions). + +#### Termination Conditions + +At each timestep, `env.step` will call `task.get_termination`, which in turn checks each of the termination condition to see if the episode is done and/or successful. +We provide a few common termination conditions for robotics tasks. +- PointGoal +- ReachingGoal +- MaxCollision +- Timeout +- OutOfBound +Most of the code can be found in [gibson2/termination_conditions](https://github.com/StanfordVL/iGibson/tree/master/gibson2/termination_conditions). + +#### Configs +To instantiate an **Environment**, we first need to create a YAML config file. It will specify parameters for the **Environment** (e.g. robot type, action frequency, etc), the **Sensors** (e.g. sensor types, image resolution, noise rate, etc), the **Task** (e.g. task type, goal distance range, etc), the **Reward Functions** (e.g. reward types, reward scale, etc) and the **Termination Conditions** (e.g. goal convergence threshold, time limit, etc). Exapmles of config files can be found here: [examples/configs](https://github.com/StanfordVL/iGibson/tree/master/examples/configs). + +Here is one example: [examples/configs/turtlebot_point_nav.yaml](https://github.com/StanfordVL/iGibson/blob/master/examples/configs/turtlebot_point_nav.yaml) ```yaml # scene -scene: building -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: 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 @@ -47,16 +97,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 @@ -79,39 +132,43 @@ scan_noise_rate: 0.0 # visual objects visual_object_at_initial_target_pos: true target_visual_object_visible_to_agent: false + ``` -Parameters of this config file is explained below: +Parameters of this config file are explained below: | Attribute | Example Value | Expalanation | | ----------| ------------- | ------------ | -| scene | building | which type of scene: [empty, stadium, building] | -| scene_id | Rs | scene_id for the building scene | +| scene | igibson | which type of scene: [empty, stadium, gibson, igibson] | +| scene_id | Rs_int | scene_id for the gibson or igibson scene | | build_graph | true | whether to build traversability graph for the building scene | | load_texture | true | whether to load texture into MeshRenderer. Can be set to false if RGB is not needed | | pybullet_load_texture | true | whether to load texture into PyBullet, for debugging purpose only | | trav_map_resolution | 0.1 | resolution of the traversability map. 0.1 means each pixel represents 0.1 meter | | trav_map_erosion | 2 | number of pixels to erode the traversability map. trav_map_resolution * trav_map_erosion should be almost equal to the radius of the robot base | +| should_open_all_doors | True | whether to open all doors in the scene during episode reset (e.g. useful for cross-room navigation tasks) | +| texture_randomization_freq | null | whether to perform material/texture randomization (null means no randomization, 10 means randomize every 10 episodes) | +| object_randomization_freq | null | whether to perform object randomization (null means no randomization, 10 means randomize every 10 episodes) | | robot | Turtlebot | which type of robot, e.g. Turtlebot, Fetch, Locobot, etc | | is_discrete | false | whether to use discrete action space for the robot | | velocity | 1.0 | maximum normalized joint velocity. 0.5 means maximum robot action will actuate half of maximum joint velocities that are allowed in the robot URDF file | -| task | pointgoal | which type of task, e.g. pointgoal, objectgoal, etc | +| task | point_nav_random | which type of task, e.g. point_nav_random, room_rearrangement, etc | | target_dist_min | 1.0 | minimum distance (in meters) between the initial and target positions for the navigation task | | target_dist_max | 10.0 | maximum distance (in meters) between the initial and target positions for the navigation task | -| initial_pos_z_offset | 0.1 | z-offset (in meters) when placing the robots and the objects to accommodate uneven floor surface | -| additional_states_dim | 4 | the dimension of proprioceptive observation such as odometry and joint states. It should exactly match the dimension of the output of `get_additional_states()` | +| goal_format | polar | which format to represent the navigation goals: [polar, cartesian] | +| task_obs_dim | 4 | the dimension of task-specific observation returned by task.get_task_obs | | reward_type | geodesic | which type of reward: [geodesic, l2, sparse], or define your own | | success_reward | 10.0 | scaling factor of the success reward | | slack_reward | -0.01 | scaling factor of the slack reward (negative because it should be a penalty) | | potential_reward_weight | 1.0 | scaling factor of the potential reward | | collision_reward_weight | -0.1 | scaling factor of the collision reward (negative because it should be a penalty) | -| collision_ignore_link_a_ids | [1, 2, 3, 4] | collision with these robot links will not result in collision penalty. These usually are links of wheels and caster wheels of the robot | | discount_factor | 0.99 | discount factor for the MDP | | dist_tol | 0.36 | the distance tolerance for converging to the navigation goal. This is usually equal to the diameter of the robot base | | max_step | 500 | maximum number of timesteps allowed in an episode | | max_collisions_allowed | 500 | maximum number of timesteps with robot collision allowed in an episode | -| goal_format | polar | which format to represent the navigation goals: [polar, cartesian] | -| output | [sensor, rgb, depth, scan] | what observation space is. sensor means proprioceptive info, rgb and depth mean RGBD camera sensing, scan means LiDAR sensing | +| initial_pos_z_offset | 0.1 | z-offset (in meters) when placing the robots and the objects to accommodate uneven floor surface | +| collision_ignore_link_a_ids | [1, 2, 3, 4] | collision with these robot links will not result in collision penalty. These usually are links of wheels +| output | [task_obs, rgb, depth, scan] | what observation space is. sensor means task-specific, non-sensory information (e.g. goal info, proprioceptive state), rgb and depth mean RGBD camera sensing, scan means LiDAR sensing | | fisheye | false | whether to use fisheye camera | | image_width | 640 | image width for the camera | | image_height | 480 | image height for the camera | @@ -129,23 +186,10 @@ Parameters of this config file is explained below: | visual_object_at_initial_target_pos | true | whether to show visual markers for the initial and target positions | | target_visual_object_visible_to_agent | false | whether these visual markers are visible to the agents | -#### Task Definition -The main **Environment** classes (`NavigateEnv` and `NavigateRandomEnv`) that use the YAML config files can be found here: [gibson2/envs/locomotor_env.py](https://github.com/StanfordVL/iGibson/blob/master/gibson2/envs/locomotor_env.py). - -`NavigateEnv` provides an environment to train PointGoal navigation task for fixed locations. `NavigateRandomEnv` builds on top of `NavigateEnv` and includes a mechanism to randomly sample initial and target positions. Following the OpenAI gym convention, they can be readily used to train RL agents. - -It's also fairly straighforward to cusutomize your own environment. -- Inherit `NavigateEnv` or `NavigateRandomEnv` and reuse as much functionality as possible. -- Want to change the observation space? Modify `load_observation_space`, `get_state` and its helper functions. -- Want to change reward function? Modify `get_reward`. -- Want to change termination condition? Modify `get_termination`. -- Want to modify episode reset logic? Modify `reset` and `reset_agent`. -- Want to add additional objects or robots into the scene? Check out `load_interactive_objects` and `load_dynamic_objects` in `NavigateRandomEnvSim2Real`. If these are brand-new objects and robots that are not in iGibson yet, you might also need to change [gibson2/robots/robot_locomotor.py](https://github.com/StanfordVL/iGibson/blob/master/gibson2/robots/robot_locomotor.py) and [gibson2/physics/interactive_objects.py](https://github.com/StanfordVL/iGibson/blob/master/gibson2/physics/interactive_objects.py). - ### Examples #### Static Environments -In this example, we show how to instantiate `NavigateRandomEnv` and how to step through the environment. At the beginning of each episode, we need to call `nav_env.reset()`. Then we need to call `nav_env.step(action)` to step through the environment and retrieve `(state, reward, done, info)`. +In this example, we show how to instantiate `iGibsonEnv` and how to step through the environment. At the beginning of each episode, we need to call `env.reset()`. Then we need to call `env.step(action)` to step through the environment and retrieve `(state, reward, done, info)`. - `state`: a python dictionary of observations, e.g. `state['rgb']` will be a H x W x 3 numpy array that represents the current image - `reward`: a scalar that represents the current reward - `done`: a boolean that indicates whether the episode should terminate @@ -153,45 +197,35 @@ In this example, we show how to instantiate `NavigateRandomEnv` and how to step The code can be found here: [examples/demo/env_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/env_example.py). ```python -from gibson2.envs.locomotor_env import NavigationEnv, 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_demo.yaml') - nav_env = NavigateRandomEnv(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('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() ``` -You actually have already run this in [Quickstart](quickstart.md)! - #### Interactive Environments -In this example, we show how to instantiate `NavigateRandomEnv` with an interactive scene `Placida`. In this scene, the robot can interact with many objects (chairs, tables, couches, etc) by pushing them around. The code can be found here: [examples/demo/env_interactive_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/env_interactive_example.py). - -#### Customized Environments -In this example, we show a customized environment `NavigateRandomEnvSim2Real` that builds on top of `NavigateRandomEnv`. We created this environment for [our CVPR2020 Sim2Real Challenge with iGibson](http://svl.stanford.edu/igibson/challenge.html). You should consider participating. :) - -Here are the custimizations that we did: -- We added a new robot `Locobot` to [gibson2/physics/robot_locomotors.py](https://github.com/StanfordVL/iGibson/blob/master/gibson2/physics/robot_locomotors.py) -- We added additional objects into the scene: `load_interactive_objects` in `NavigateRandomEnvSim2Real` -- We added dynamic objects (another Turtlebot) into the scene: `reset_dynamic_objects` and `step_dynamic_objects` in `NavigateRandomEnvSim2Real` - -The code can be found here: [gibson2/envs/locomotor_env.py](https://github.com/StanfordVL/iGibson/blob/master/gibson2/envs/locomotor_env.py) and [examples/demo/env_customized_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/env_customized_example.py). - +In this example, we show how to instantiate `iGibsobEnv` with a fully interactive scene `Rs_int`. In this scene, the robot can interact with all the objects in the scene (chairs, tables, couches, etc). The code can be found here: [examples/demo/env_interactive_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/env_interactive_example.py). \ No newline at end of file diff --git a/docs/images/benchmark_rendering.png b/docs/images/benchmark_rendering.png new file mode 100644 index 000000000..0f342c8a6 Binary files /dev/null and b/docs/images/benchmark_rendering.png differ diff --git a/docs/images/ig_scene.png b/docs/images/ig_scene.png new file mode 100644 index 000000000..742b05635 Binary files /dev/null and b/docs/images/ig_scene.png differ diff --git a/docs/images/lidar_velodyne.png b/docs/images/lidar_velodyne.png new file mode 100644 index 000000000..5f67fd1da Binary files /dev/null and b/docs/images/lidar_velodyne.png differ diff --git a/docs/images/object.png b/docs/images/object.png index 48d8d344f..e8ed128a8 100644 Binary files a/docs/images/object.png and b/docs/images/object.png differ diff --git a/docs/images/overview.png b/docs/images/overview.png index ba8856614..8ec6e4de2 100644 Binary files a/docs/images/overview.png and b/docs/images/overview.png differ diff --git a/docs/images/pbr_render.png b/docs/images/pbr_render.png new file mode 100644 index 000000000..5553b6b2f Binary files /dev/null and b/docs/images/pbr_render.png differ diff --git a/docs/images/scene_benchmark_Rs_int_o_True_r_True.png b/docs/images/scene_benchmark_Rs_int_o_True_r_True.png new file mode 100644 index 000000000..386d283fb Binary files /dev/null and b/docs/images/scene_benchmark_Rs_int_o_True_r_True.png differ diff --git a/docs/images/scene_interactive.png b/docs/images/scene_interactive.png index 152bb07b3..6b621032b 100644 Binary files a/docs/images/scene_interactive.png and b/docs/images/scene_interactive.png differ diff --git a/docs/images/scene_interactive_object_rand.png b/docs/images/scene_interactive_object_rand.png new file mode 100644 index 000000000..048d32682 Binary files /dev/null and b/docs/images/scene_interactive_object_rand.png differ diff --git a/docs/images/scene_interactive_texture_rand.png b/docs/images/scene_interactive_texture_rand.png new file mode 100644 index 000000000..415857147 Binary files /dev/null and b/docs/images/scene_interactive_texture_rand.png differ diff --git a/docs/images/viewer.png b/docs/images/viewer.png new file mode 100644 index 000000000..7ba2ff9dc Binary files /dev/null and b/docs/images/viewer.png differ diff --git a/docs/index.rst b/docs/index.rst index 48a82c56d..19e43f2c5 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -27,8 +27,9 @@ Welcome to iGibson's documentation! objects.md robots.md simulators.md + viewer.md environments.md - algorithms.md + learning_framework.md ros_integration.md tests.md @@ -36,12 +37,7 @@ Welcome to iGibson's documentation! :maxdepth: 1 :caption: API - api_mesh_renderer.rst - api_simulator.rst - api_envs.rst - api_scene.rst - api_robot.rst - api_object.rst + apidoc/modules.rst .. toctree:: :maxdepth: 1 diff --git a/docs/installation.md b/docs/installation.md index b034013b4..1ce11a0ce 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -11,6 +11,7 @@ The minimum system requirements are the following: - Nvidia GPU with VRAM > 6.0GB - Nvidia driver >= 384 - CUDA >= 9.0, CuDNN >= v7 +- CMake >= 2.8.12 (can install with `pip install cmake`) Other system configurations may work, but we haven't tested them extensively and we probably won't be able to provide as much support as we want. @@ -23,12 +24,14 @@ We provide 3 methods to install the simulator. iGibson's simulator can be installed as a python package using pip: ```bash -pip install gibson2 +pip install gibson2 # This step takes about 4 minutes # run the demo -python -m gibson2.envs.demo -python -m gibson2.envs.demo_interactive +python -m gibson2.scripts.demo_static ``` +Note: we use a custom version of pybullet, so if you have a previous version of pybullet installed, it will not be compabile with iGibson. We recommend you start from a fresh virtualenv/conda environment. Since install iGibson(`gibson`) requires compiling pybullet, it takes about 4 minutes. + + ### 2. Docker image Docker provides an easy way to reproduce the development environment across platforms without manually installing the software dependencies. We have prepared docker images that contain everything you need to get started with iGibson. @@ -60,41 +63,76 @@ cd iGibson/docker/headless-gui ### 3. Compile from source -Alternatively, iGibson can be compiled from source: [iGibson GitHub Repo](https://github.com/StanfordVL/iGibson) +Alternatively, iGibson can be compiled from source: [iGibson GitHub Repo](https://github.com/StanfordVL/iGibson). First, you need to install anaconda following the guide on [their website](https://www.anaconda.com/). ```bash git clone https://github.com/StanfordVL/iGibson --recursive cd iGibson -conda create -n py3-igibson python=3.6 anaconda +conda create -n py3-igibson python=3.6 anaconda # we support python 3.5, 3.6, 3.7, 3.8 source activate py3-igibson -pip install -e . +pip install -e . # This step takes about 4 minutes ``` + +Note: we use a custom version of pybullet, so if you have a previous version of pybullet installed, it will not be compabile with iGibson. We recommend you start from a fresh virtualenv/conda environment. Since install iGibson(`gibson`) requires compiling pybullet, it takes about 4 minutes. + We recommend the third method if you plan to modify iGibson in your project. If you plan to use it as it is to train navigation and manipulation agents, the pip installation or docker image should meet your requirements. ## Downloading the Assets -First, create a folder to contain all the iGibson's assets (robotic agents, objects, 3D environments, etc.) and set the path in `your_installation_path/gibson2/global_config.yaml` (default and recommended: `your_installation_path/gibson2/assets`). +First, configure where iGibson's assets (robotic agents, objects, 3D environments, etc.) is going to be stored. It is configured in `your_installation_path/gibson2/global_config.yaml` -Second, you can download our robot models and objects from [here](https://storage.googleapis.com/gibson_scenes/assets_igibson.tar.gz) and unpack it in the assets folder. +To make things easier, the default place to store the data is: +```bash +assets_path: your_installation_path/gibson2/data/assets +g_dataset_path: your_installation_path/gibson2/data/g_dataset +ig_dataset_path: your_installation_path/gibson2/data/ig_dataset +threedfront_dataset_path: your_installation_path/gibson2/data/threedfront_dataset +cubicasa_dataset_path: your_installation_path/gibson2/data/assetscubicasa_dataset +``` -Third, you need to download some large 3D reconstructed real-world environments (houses, offices) from [our dataset](dataset.md) for your agents to be trained in. Create a new folder for those environments and set the path in `your_installation_path/gibson2/global_config.yaml` (default and recommended: `your_installation_path/gibson2/dataset`). You can get access and download the full Gibson and iGibson (interactive furniture) datasets by filling up the following [license agreement](https://forms.gle/36TW9uVpjrE1Mkf9A). Alternatively, you can download a single [high quality small environment](https://storage.googleapis.com/gibson_scenes/Rs.tar.gz), R's, together with a [fully interactive version](https://storage.googleapis.com/gibson_scenes/Rs_interactive.tar.gz). +If you are happy with the default path, you don't have to do anything, otherwise you can run this script: +```bash +python -m gibson2.utils.assets_utils --change_data_path +``` -The robot and object models, together with the R's interactive and non-interactive versions can be downloaded and extracted in the assets folder indicated in `your_installation_path/gibson2/global_config.yaml` with two commands: +Second, you can download our robot models and objects from [here](https://storage.googleapis.com/gibson_scenes/assets_igibson.tar.gz) and unpack it in the assets folder, or simply run this download script: ```bash python -m gibson2.utils.assets_utils --download_assets +``` + + +Third, you need to download some large 3D reconstructed real-world environments (e.g. houses and offices) from [our dataset](dataset.md) for your agents to be trained in. Create a new folder for those environments and set the path in `your_installation_path/gibson2/global_config.yaml` (default and recommended: `your_installation_path/gibson2/data/g_dataset` and `your_installation_path/gibson2/data/ig_dataset`). You can get access and download the Gibson and iGibson datasets by filling up the following [license agreement](https://forms.gle/36TW9uVpjrE1Mkf9A). In addition, you can download a single [high quality small environment R's](https://storage.googleapis.com/gibson_scenes/Rs.tar.gz) for demo purposes. + +To download the demo data, run: + +```bash python -m gibson2.utils.assets_utils --download_demo_data ``` -The full Gibson and iGibson dataset can be downloaded using the following command, this script automatically download, decompress, and put the dataset to correct place. You will get `URL` after filling in the agreement form. +The full Gibson and iGibson dataset can be downloaded using the following command, this script automatically downloads, decompresses, and puts the dataset to correct place. You will get `URL` after filling in the agreement form. +Download iGibson dataset +```bash +python -m gibson2.utils.assets_utils --download_ig_dataset +``` + +Download Gibson dataset ([agreement signing](https://forms.gle/36TW9uVpjrE1Mkf9A) required to get `URL`) ```bash python -m gibson2.utils.assets_utils --download_dataset URL ``` +## Testing -### Uninstalling +To test gibson2 is properly installed, you can run +```bash +python +>> import gibson2 +``` + +For a full suite of tests and benchmarks, you can refer to [tests](tests.md) for more details. + +## Uninstalling Uninstalling iGibson is easy: `pip uninstall gibson2` - diff --git a/docs/intro.md b/docs/intro.md index 183211b76..f08587954 100644 --- a/docs/intro.md +++ b/docs/intro.md @@ -9,31 +9,24 @@ iGibson, the Interactive Gibson Environment, is a simulation environment providi If you use iGibson or its assets and models, consider citing the following publication: ``` -@article{xia2020interactive, - title={Interactive Gibson Benchmark: A Benchmark for Interactive Navigation in Cluttered Environments}, - author={Xia, Fei and Shen, William B and Li, Chengshu and Kasimbeg, Priya and Tchapmi, Micael Edmond and Toshev, Alexander and Mart{\'\i}n-Mart{\'\i}n, Roberto and Savarese, Silvio}, - journal={IEEE Robotics and Automation Letters}, - volume={5}, - number={2}, - pages={713--720}, - year={2020}, - publisher={IEEE} +@article{shenigibson, + title={iGibson, a Simulation Environment for Interactive Tasks in Large Realistic Scenes}, + author={Shen, Bokui and Xia, Fei and Li, Chengshu and Mart{\i}n-Mart{\i}n, Roberto and Fan, Linxi and Wang, Guanzhi and Buch, Shyamal and D’Arpino, Claudia and Srivastava, Sanjana and Tchapmi, Lyne P and Vainio, Kent and Fei-Fei, Li and Savarese, Silvio}, + journal={arXiv preprint}, + year={2020} } ``` - ### Code Release The GitHub repository of iGibson can be found here: [iGibson GitHub Repo](https://github.com/StanfordVL/iGibson). Bug reports, suggestions for improvement, as well as community developments are encouraged and appreciated. The support for our previous version of the environment, [Gibson v1](http://github.com/StanfordVL/GibsonEnv/), will be moved there. ### Documentation This is the documentation webpage for iGibson. It includes installation guide (including data download), quickstart guide, code examples, and APIs. -If you want to know more about iGibson, you can also check out [our webpage](http://svl.stanford.edu/igibson), [our RAL+ICRA20 paper](https://arxiv.org/abs/1910.14442) and [our (outdated) technical report](http://svl.stanford.edu/igibson/assets/gibsonv2paper.pdf). +If you want to know more about iGibson, you can also check out [our webpage](http://svl.stanford.edu/igibson), [our updated technical report](TBA) and [our RAL+ICRA20 paper](https://arxiv.org/abs/1910.14442). ### Dowloading Dataset of 3D Environments -There are several datasets of 3D reconstructed large real-world environments (homes and offices) that you can download and use with iGibson. All of them will be accessible once you fill in this [form](https://forms.gle/36TW9uVpjrE1Mkf9A). +There are several datasets of 3D reconstructed large real-world environments (homes and offices) that you can download and use with iGibson. All of them will be accessible once you fill in this [form]. -You will have access to ten environments with annotated instances of furniture (chairs, tables, desks, doors, sofas) that can be interacted with, and to the original 572 reconstructed 3D environments without annotated objects from [Gibson v1](http://github.com/StanfordVL/GibsonEnv/). - -You will also have access to a [fully annotated environment: Rs_interactive](https://storage.googleapis.com/gibson_scenes/Rs_interactive.tar.gz) where close to 200 articulated objects are placed in their original locations of a real house and ready for interaction. ([The original environment: Rs](https://storage.googleapis.com/gibson_scenes/Rs.tar.gz) is also available). More info can be found in the [installation guide](installation.md). +You will have access to **fifteen** fully interactive environments populated with a wide variety of furniture and objects that can be actuated, and to the original 572 reconstructed, static 3D environments from [Gibson v1](http://github.com/StanfordVL/GibsonEnv/). We provide download utilities in the [installation guide](installation.md). diff --git a/docs/issues.md b/docs/issues.md index 30696ffcf..323242179 100644 --- a/docs/issues.md +++ b/docs/issues.md @@ -28,3 +28,12 @@ If the original installation doesn't work, try the following: 4. If you want to render in headless mode, make sure `$DISPLAY` environment variable is unset, otherwise you might have error `Failed to EGL with glad`, because EGL is sensitive to `$DISPLAY` environment variable. Also, the EGL setup part is borrowed from Erwin Coumans [egl_example](https://github.com/erwincoumans/egl_example). It would be informative to see if that repository can run on your machine. + +### Pybullet error +#### `ValueError: not enough values to unpack (expected 13, got 12)` +This is because we require a custom version of pybullet, if in your virtual/conda environment there is already pybullet installed, you need to first uninstall `pip uninstall pybullet` and then repeat install iGibson with +```bash +pip install gibson2 +``` + +or ```pip install -e .``` if you installed from source. \ No newline at end of file diff --git a/docs/learning_framework.md b/docs/learning_framework.md new file mode 100644 index 000000000..fd4a9c4a5 --- /dev/null +++ b/docs/learning_framework.md @@ -0,0 +1,44 @@ +# Learning Frameworks + +### Overview + +iGibson can be used with any learning framework that accommodates OpenAI gym interface. Feel free to use your favorite ones. + +### Examples + +#### TF-Agents + +In this example, we show an environment wrapper of [TF-Agents](https://github.com/tensorflow/agents) for iGibson and an example training code for [SAC agent](https://arxiv.org/abs/1801.01290). The code can be found in [our fork of TF-Agents](https://github.com/StanfordVL/agents/): [agents/blob/igibson/tf_agents/environments/suite_gibson.py](https://github.com/StanfordVL/agents/blob/igibson/tf_agents/environments/suite_gibson.py) and [agents/blob/igibson/tf_agents/agents/sac/examples/v1/train_single_env.sh](https://github.com/StanfordVL/agents/blob/igibson/tf_agents/agents/sac/examples/v1/train_single_env.sh). + +```python +def load(config_file, + model_id=None, + env_mode='headless', + action_timestep=1.0 / 10.0, + physics_timestep=1.0 / 40.0, + device_idx=0, + gym_env_wrappers=(), + env_wrappers=(), + spec_dtype_map=None): + config_file = os.path.join(os.path.dirname(gibson2.__file__), config_file) + env = iGibsonEnv(config_file=config_file, + scene_id=model_id, + mode=env_mode, + action_timestep=action_timestep, + physics_timestep=physics_timestep, + device_idx=device_idx) + + discount = env.config.get('discount_factor', 0.99) + max_episode_steps = env.config.get('max_step', 500) + + return wrap_env( + env, + discount=discount, + max_episode_steps=max_episode_steps, + gym_env_wrappers=gym_env_wrappers, + time_limit_wrapper=wrappers.TimeLimit, + env_wrappers=env_wrappers, + spec_dtype_map=spec_dtype_map, + auto_reset=True + ) +``` diff --git a/docs/objects.md b/docs/objects.md index 330c1c022..ecab1e4a4 100644 --- a/docs/objects.md +++ b/docs/objects.md @@ -7,13 +7,21 @@ We provide a wide variety of **Objects** that can be imported into the **Simulat - `ShapeNetObject` - `Pedestrian` - `ArticulatedObject` +- `URDFObject` - `SoftObject` - `Cube` - `VisualMarker` +- `VisualShape` Typically, they take in the name or the path of an object (in `gibson2.assets_path`) and provide a `load` function that be invoked externally (usually by `import_object` and `import_object` of `Simulator`). The `load` function imports the object into PyBullet. Some **Objects** (e.g. `ArticulatedObject`) also provide APIs to get and set the object pose. -Most of the code can be found here: [gibson2/physics/interactive_objects.py](https://github.com/StanfordVL/iGibson/blob/master/gibson2/physics/interactive_objects.py). +Most of the code can be found here: [gibson2/objects](https://github.com/StanfordVL/iGibson/blob/master/gibson2/objects). + +### Adding other objects to iGibson +We provide detailed instructions and scripts to import your own objects (non-articulated) into iGibson. + +Instruction can be found here: [External Objects](https://github.com/StanfordVL/iGibson/blob/master/gibson2/utils/data_utils/ext_object). + ### Examples In this example, we import three objects into PyBullet, two of which are articulated objects. The code can be found here: [examples/demo/object_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/object_example.py). @@ -24,30 +32,34 @@ from gibson2.objects.articulated_object import ArticulatedObject import gibson2 import os 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() - p.resetBasePositionAndOrientation(obj3.body_id, [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() @@ -58,6 +70,7 @@ def main(): if __name__ == '__main__': main() + ``` You can open the cabinet and the drawer by dragging your mouse over them. You can even put the cereal box into the drawer like this: diff --git a/docs/overview.md b/docs/overview.md index 83e049808..c4a812e3a 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -1,17 +1,16 @@ # Overview -Next, we will give an overview of iGibson and briefly explain the different layers of abstraction in our system. In general, the modules from one layer will use and instantiate those from the layer immediately below. - +Next, we will give an overview of iGibson and briefly explain the different modules in our system. ![quickstart.png](images/overview.png) -At the bottom layer, we have **Dataset** and **Assets**. **Dataset** contain 3D reconstructed real-world environments. **Assets** contain models of robots and objects. Download guide can be found [here](installation.html#downloading-the-assets). More info can be found here: [Dataset](dataset.md) and [Assets](assets.md). +First of all, we have **Dataset** and **Assets**. **Dataset** contain 3D reconstructed real-world environments. **Assets** contain models of robots and objects. Download guide can be found [here](installation.html#downloading-the-assets). More info can be found here: [Dataset](dataset.md) and [Assets](assets.md). -In the next layer, we have **Renderer** and **PhysicsEngine**. These are the two pillars that ensure the visual and physics fidelity of iGibson. We developed our own MeshRenderer that supports customizable camera configuration and various image modalities, and renders at a lightening speed. We use the open-sourced [PyBullet](http://www.pybullet.org/) as our underlying physics engine. It can simulate rigid body collision and joint actuation for robots and articulated objects in an accurate and efficient manner. Since we are using MeshRenderer for rendering and PyBullet for physics simulation, we need to keep them synchronized at all time. Our code have already handled this for you. More info can be found here: [Renderer](renderer.md) and [PhysicsEngine](physics_engine.md). +Next, we have **Renderer** and **PhysicsEngine**. These are the two pillars that ensure the visual and physics fidelity of iGibson. We developed our own MeshRenderer that supports customizable camera configuration, physics-based rendering (PBR) and various image modalities, and renders at a lightening speed. We use the open-sourced [PyBullet](http://www.pybullet.org/) as our underlying physics engine. It can simulate rigid body collision and joint actuation for robots and articulated objects in an accurate and efficient manner. Since we are using MeshRenderer for rendering and PyBullet for physics simulation, we need to keep them synchronized at all time. Our code have already handled this for you. More info can be found here: [Renderer](renderer.md) and [PhysicsEngine](physics_engine.md). -In the next layer, we have **Scene**, **Object**, **Robot**, and **Simulator**. **Scene** loads 3D scene meshes from `gibson2.dataset_path`. **Object** loads interactable objects from `gibson2.assets_path`. **Robot** loads robots from `gibson2.assets_path`. **Simulator** maintains an instance of **Renderer** and **PhysicsEngine** and provides APIs to import **Scene**, **Object** and **Robot** into both of them and keep them synchronized at all time. More info can be found here: [Scene](scenes.md), [Object](objects.md), [Robot](robots.md) and [Simulator](simulators.md). +Furthermore, we have **Scene**, **Object**, **Robot**, and **Simulator**. **Scene** loads 3D scene meshes from `gibson2.g_dataset_path, gibson2.ig_dataset_path`. **Object** loads interactable objects from `gibson2.assets_path`. **Robot** loads robots from `gibson2.assets_path`. **Simulator** maintains an instance of **Renderer** and **PhysicsEngine** and provides APIs to import **Scene**, **Object** and **Robot** into both of them and keep them synchronized at all time. More info can be found here: [Scene](./scenes.md), [Object](./objects.md), [Robot](./robots.md), and [Simulator](simulators.md). -In the next layer, we have **Environment**. **Environment** follows the [OpenAI gym](https://github.com/openai/gym) convention and provides an API interface for applications such as **Algorithms** and **ROS**. **Environment** usually defines a task for an agent to solve, which includes observation_space, action space, reward, termination condition, etc. More info can be found here: [Environment](environments.md). +Moreover, we have **Task**, **Sensor** and **Environment**. **Task** defines the task setup and includes a list of **Reward Function** and **Termination Condition**. It also provides task-specific reset functions and task-relevant observation definition. **Sensor** provides a light wrapper around **Render** to retrieve sensory observation. **Environment** follows the [OpenAI gym](https://github.com/openai/gym) convention and provides an API interface for external applications. More info can be found here: [Environment](environments.md). -In the top and final layer, we have **Algorithm** and **ROS**. **Algorithm** can be any algorithms (from optimal control to model-free reinforcement leanring) that accommodate OpenAI gym interface. We also provide tight integration with **ROS** that allows for evaluation and visualization of, say, ROS Navigation Stack, in iGibson. More info can be found here: [Algorithm](algorithms.md) and [ROS](ros_integration.md). +Finally, any learning framework (e.g. RL, IL) or planning and control framework (e.g. ROS) can be used with **Environment** as long as they accommodate OpenAI gym interface. We provide tight integration with **ROS** that allows for evaluation and visualization of, say, ROS Navigation Stack, in iGibson. More info can be found here: [Learning Framework](learning_framework.md) and [ROS](ros_integration.md). We highly recommend you go through each of the Modules below for more details and code examples. diff --git a/docs/projects.md b/docs/projects.md index 8300ed266..d7d99ac5e 100644 --- a/docs/projects.md +++ b/docs/projects.md @@ -14,7 +14,7 @@ It is exciting to see people using Gibson Environment in embodied AI research. H - Watkins-Valls, David, et al. [Learning Your Way Without a Map or Compass: Panoramic Target Driven Visual Navigation.](https://arxiv.org/pdf/1909.09295.pdf) arXiv preprint arXiv:1909.09295 (2019). - Akinola, Iretiayo, et al. [Accelerated Robot Learning via Human Brain Signals.](https://arxiv.org/pdf/1910.00682.pdf) arXiv preprint arXiv:1910.00682(2019). - Xia, Fei, et al. [Interactive Gibson: A Benchmark for Interactive Navigation in Cluttered Environments.](https://arxiv.org/pdf/1910.14442.pdf) arXiv preprint arXiv:1910.14442 (2019). - +- Pérez-D'Arpino, Claudia, Can Liu, Patrick Goebel, Roberto Martín-Martín, and Silvio Savarese. [Robot Navigation in Constrained Pedestrian Environments using Reinforcement Learning](https://arxiv.org/pdf/2010.08600.pdf). Preprint arXiv:2010.08600, 2020. These papers tested policies trained in Gibson v1 on real robots in the physical world: @@ -26,6 +26,15 @@ These papers tested policies trained in Gibson v1 on real robots in the physical If you use Gibson, iGibson or their assets, please consider citing the following papers for iGibson, the Interactive Gibson Environment: +``` +@article{shenigibson, + title={iGibson, a Simulation Environment for Interactive Tasks in Large Realistic Scenes}, + author={Shen, Bokui and Xia, Fei and Li, Chengshu and Mart{\i}n-Mart{\i}n, Roberto and Fan, Linxi and Wang, Guanzhi and Buch, Shyamal and D’Arpino, Claudia and Srivastava, Sanjana and Tchapmi, Lyne P and Vainio, Kent and Fei-Fei, Li and Savarese, Silvio}, + journal={arXiv preprint}, + year={2020} +} +``` + ```` @article{xia2020interactive, title={Interactive Gibson Benchmark: A Benchmark for Interactive Navigation in Cluttered Environments}, @@ -39,16 +48,6 @@ If you use Gibson, iGibson or their assets, please consider citing the following } ```` -````text -@techreport{xiagibson2019, - title = {Gibson Env V2: Embodied Simulation Environments for Interactive Navigation}, - author = {Xia, Fei and Li, Chengshu and Chen, Kevin and Shen, William B and Mart{\'i}n-Mart{\'i}n, Roberto and Hirose, Noriaki and Zamir, Amir R and Fei-Fei, Li and Savarese, Silvio}, - group = {Stanford Vision and Learning Group}, - year = {2019}, - institution = {Stanford University}, - month = {6}, -} -```` and the following paper for Gibson v1: diff --git a/docs/quickstart.md b/docs/quickstart.md index d5e90cce2..7bc4090aa 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -1,7 +1,7 @@ # Quickstart ## iGibson in Action -Let's get our hands dirty and see iGibson in action. +Assume you finished installation and assets downloading. Let's get our hands dirty and see iGibson in action. ```bash cd examples/demo @@ -49,12 +49,14 @@ python benchmark.py ## Benchmarks + Performance is a big designing focus for iGibson. We provide a few scripts to benchmark the rendering and physics simulation framerate in iGibson. +### Benchmark static scene (Gibson scenes) ```bash -cd examples/demo -python benchmark.py +cd test/benchmark +python benchmark_static_scene.py ``` You will see output similar to: @@ -70,3 +72,42 @@ Rendering 3d, resolution 512, render_to_tensor False: 292.0761459884919 fps Rendering normal, resolution 512, render_to_tensor False: 265.70666134193806 fps ``` + +### Benchmark physics simulation in interactive scenes (iGibson scene) + +```bash +cd test/benchmark +python benchmark_interactive_scene.py +``` + +It will generate a report like below: + +![](images/scene_benchmark_Rs_int_o_True_r_True.png) + + +### Benchmark rendering in interactive scenes + +To run a comprehensive benchmark for all rendering in all iGibson scenes, you can excute the following command: + +```bash +cd test/benchmark +python benchmark_interactive_scene_rendering.py +``` + +It benchmarks two use cases, one for training visual RL agents (low resolution, shadow mapping off), another one for + training perception tasks, with highest quality of graphics possible. + + ```python + '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) + +``` +It will generate a report like below: +![](images/benchmark_rendering.png) + diff --git a/docs/quickstart_old.md b/docs/quickstart_old.md deleted file mode 100644 index 78fd37422..000000000 --- a/docs/quickstart_old.md +++ /dev/null @@ -1,184 +0,0 @@ - -Quick Start -================= - -Tests ----- - -```bash -cd test -pytest # the tests should pass, it will take a few minutes -``` - -Interactive Gibson Env Framerate ----- - -Interactive Gibson Env framerate compared with gibson v1 is shown in the table below: - -| | Gibson V2 | Gibson V1 | -|---------------------|-----------|-----------| -| RGBD, pre networkf | 264.1 | 58.5 | -| RGBD, post networkf | 61.7 | 30.6 | -| Surface Normal only | 271.1 | 129.7 | -| Semantic only | 279.1 | 144.2 | -| Non-Visual Sensory | 1017.4 | 396.1 | - - -Rendering Semantics ----- -TBA - -Robotic Agents ----- - -Gibson provides a base set of agents. See videos of these agents and their corresponding perceptual observation [here](http://gibsonenv.stanford.edu/agents/). - - -To enable (optionally) abstracting away low-level control and robot dynamics for high-level tasks, we also provide a set of practical and ideal controllers for each agent. - -| Agent Name | DOF | Information | Controller | -|:-------------: | :-------------: |:-------------: |:-------------| -| Mujoco Ant | 8 | [OpenAI Link](https://blog.openai.com/roboschool/) | Torque | -| Mujoco Humanoid | 17 | [OpenAI Link](https://blog.openai.com/roboschool/) | Torque | -| Husky Robot | 4 | [ROS](http://wiki.ros.org/Robots/Husky), [Manufacturer](https://www.clearpathrobotics.com/) | Torque, Velocity, Position | -| Minitaur Robot | 8 | [Robot Page](https://www.ghostrobotics.io/copy-of-robots), [Manufacturer](https://www.ghostrobotics.io/) | Sine Controller | -| JackRabbot | 2 | [Stanford Project Link](http://cvgl.stanford.edu/projects/jackrabbot/) | Torque, Velocity, Position | -| TurtleBot | 2 | [ROS](http://wiki.ros.org/Robots/TurtleBot), [Manufacturer](https://www.turtlebot.com/) | Torque, Velocity, Position | -| Quadrotor | 6 | [Paper](https://repository.upenn.edu/cgi/viewcontent.cgi?referer=https://www.google.com/&httpsredir=1&article=1705&context=edissertations) | Position | - - -### Starter Code - -Demonstration examples can be found in `examples/demo` folder. `demo.py` shows the procedure of starting an environment with a random agent. - -ROS Configuration ---------- - -We provide examples of configuring Gibson with ROS [here](https://github.com/StanfordVL/GibsonEnvV2/examples/ros/gibson-ros). We use turtlebot as an example, after a policy is trained in Gibson, it requires minimal changes to deploy onto a turtlebot. See [README](https://github.com/StanfordVL/GibsonEnvV2/examples/ros/gibson-ros) for more details. - - -Coding Your RL Agent -==== -You can code your RL agent following our convention. The interface with our environment is very simple (see some examples in the end of this section). - -First, you can create an environment by creating an instance of classes in `gibson/envs` folder. - - -```python -env = AntNavigateEnv(is_discrete=False, config = config_file) -``` - -Then do one step of the simulation with `env.step`. And reset with `env.reset()` -```python -obs, rew, env_done, info = env.step(action) -``` -`obs` gives the observation of the robot. It is a dictionary with each component as a key value pair. Its keys are specified by user inside config file. E.g. `obs['nonviz_sensor']` is proprioceptive sensor data, `obs['rgb_filled']` is rgb camera data. - -`rew` is the defined reward. `env_done` marks the end of one episode, for example, when the robot dies. -`info` gives some additional information of this step; sometimes we use this to pass additional non-visual sensor values. - -We mostly followed [OpenAI gym](https://github.com/openai/gym) convention when designing the interface of RL algorithms and the environment. In order to help users start with the environment quicker, we -provide some examples at [examples/train](examples/train). The RL algorithms that we use are from [openAI baselines](https://github.com/openai/baselines) with some adaptation to work with hybrid visual and non-visual sensory data. -In particular, we used [PPO](https://github.com/openai/baselines/tree/master/baselines/ppo1) and a speed optimized version of [PPO](https://github.com/openai/baselines/tree/master/baselines/ppo2). - - -Environment Configuration -================= -Each environment is configured with a `yaml` file. Examples of `yaml` files can be found in `examples/configs` folder. Parameters for the file is explained below. For more informat specific to Bullet Physics engine, you can see the documentation [here](https://docs.google.com/document/d/10sXEhzFRSnvFcl3XxNGhnD4N2SedqwdAvK3dsihxVUA/edit). - -| Argument name | Example value | Explanation | -|:-------------:|:-------------:| :-----| -| envname | AntClimbEnv | Environment name, make sure it is the same as the class name of the environment | -| scene_id | space1-space8 | Scene id, in beta release, choose from space1-space8 | -| target_orn | [0, 0, 3.14] | Eulerian angle (in radian) target orientation for navigating, the reference frame is world frame. For non-navigation tasks, this parameter is ignored. | -|target_pos | [-7, 2.6, -1.5] | target position (in meter) for navigating, the reference frame is world frame. For non-navigation tasks, this parameter is ignored. | -|initial_orn | [0, 0, 3.14] | initial orientation (in radian) for navigating, the reference frame is world frame | -|initial_pos | [-7, 2.6, 0.5] | initial position (in meter) for navigating, the reference frame is world frame| -|fov | 1.57 | field of view for the camera, in radian | -| use_filler | true/false | use neural network filler or not. It is recommended to leave this argument true. See [Gibson Environment website](http://gibson.vision/) for more information. | -|display_ui | true/false | Gibson has two ways of showing visual output, either in multiple windows, or aggregate them into a single pygame window. This argument determines whether to show pygame ui or not, if in a production environment (training), you need to turn this off | -|show_diagnostics | true/false | show dignostics(including fps, robot position and orientation, accumulated rewards) overlaying on the RGB image | -|output | [nonviz_sensor, rgb_filled, depth] | output of the environment to the robot, choose from [nonviz_sensor, rgb_filled, depth]. These values are independent of `ui_components`, as `ui_components` determines what to show and `output` determines what the robot receives. | -|resolution | 512 | choose from [128, 256, 512] resolution of rgb/depth image | -|mode | gui/headless/web_ui | gui or headless, if in a production environment (training), you need to turn this to headless. In gui mode, there will be visual output; in headless mode, there will be no visual output. In addition to that, if you set mode to web_ui, it will behave like in headless mode but the visual will be rendered to a web UI server. ([more information](#web-user-interface))| -|verbose |true/false | show diagnostics in terminal | -|fast_lq_render| true/false| if there is fast_lq_render in yaml file, Gibson will use a smaller filler network, this will render faster but generate slightly lower quality camera output. This option is useful for training RL agents fast. | - -#### Making Your Customized Environment -Gibson provides a set of methods for you to define your own environments. You can follow the existing environments inside `gibson/envs`. - -| Method name | Usage | -|:------------------:|:---------------------------| -| robot.get_position() | Get current robot position. | -| robot.get_orientation() | Get current robot orientation. | -| robot.eyes.get_position() | Get current robot perceptive camera position. | -| robot.eyes.get_orientation() | Get current robot perceptive camera orientation. | -| robot.get_target_position() | Get robot target position. | -| robot.apply_action(action) | Apply action to robot. | -| robot.reset_new_pose(pos, orn) | Reset the robot to any pose. | -| robot.dist_to_target() | Get current distance from robot to target. | - - - -Create a docker image for Interactive Gibson -======================================= - - -You can use the following Dockerfile to create a docker image for using gibson. `nvidia-docker` is required to run this docker image. - -```text -from nvidia/cudagl:10.0-base-ubuntu18.04 - -ARG CUDA=10.0 -ARG CUDNN=7.6.2.24-1 - -RUN apt-get update && apt-get install -y --no-install-recommends \ - curl build-essential git cmake \ - cuda-command-line-tools-10-0 \ - cuda-cublas-10-0 \ - cuda-cufft-10-0 \ - cuda-curand-10-0 \ - cuda-cusolver-10-0 \ - cuda-cusparse-10-0 \ - libcudnn7=${CUDNN}+cuda${CUDA} \ - libhdf5-dev \ - libsm6 \ - libxext6 \ - libxrender-dev \ - wget - -# Install miniconda to /miniconda -RUN curl -LO http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh -RUN bash Miniconda-latest-Linux-x86_64.sh -p /miniconda -b -RUN rm Miniconda-latest-Linux-x86_64.sh -ENV PATH=/miniconda/bin:${PATH} -RUN conda update -y conda -RUN conda create -y -n gibson python=3.6.8 -# Python packages from conda - -ENV PATH /miniconda/envs/gibson/bin:$PATH - -RUN pip install pytest -RUN pip install tf-nightly-gpu==1.15.0-dev20190730 -RUN pip install tfp-nightly==0.8.0-dev20190730 -RUN pip install tf-estimator-nightly==1.14.0.dev2019041501 -RUN pip install gast==0.2.2 -RUN pip install opencv-python networkx ipython - -RUN git clone --branch release-cleanup https://github.com/StanfordVL/GibsonEnvV2 /opt/gibsonv2 --recursive -WORKDIR /opt/gibsonv2 -RUN pip install -e . - -RUN git clone https://github.com/ChengshuLi/agents/ /opt/agents -WORKDIR /opt/agents -RUN pip install -e . - -WORKDIR /opt/gibsonv2/gibson2/ -RUN wget -q https://storage.googleapis.com/gibsonassets/assets_dev.tar.gz && tar -zxf assets_dev.tar.gz -WORKDIR /opt/gibsonv2/gibson2/assets -RUN mkdir dataset -WORKDIR /opt/gibsonv2/gibson2/assets/dataset -RUN wget -q https://storage.googleapis.com/gibsonassets/gibson_mesh/Ohopee.tar.gz && tar -zxf Ohopee.tar.gz - -WORKDIR /opt/agents -``` diff --git a/docs/renderer.md b/docs/renderer.md index fd2b2f170..63f32d7eb 100644 --- a/docs/renderer.md +++ b/docs/renderer.md @@ -2,7 +2,7 @@ ### Overview -We developed our own MeshRenderer that supports customizable camera configuration and various image modalities, and renders at a lightening speed. Specifically, you can specify image width, height and vertical field of view in the constructor of `class MeshRenderer`. Then you can call `renderer.render(modes=('rgb', 'normal', 'seg', '3d'))` to retrieve the images. Currently we support four different image modalities: RGB, surface normal, semantic segmentation and 3D point cloud (z-channel can be extracted as depth map). Most of the code can be found in [gibson2/render](https://github.com/StanfordVL/iGibson/tree/master/gibson2/render). +We developed our own MeshRenderer that supports customizable camera configuration and various image modalities, and renders at a lightening speed. Specifically, you can specify image width, height and vertical field of view in the constructor of `class MeshRenderer`. Then you can call `renderer.render(modes=('rgb', 'normal', 'seg', '3d', 'optical_flow', 'scene_flow'))` to retrieve the images. Currently we support six different image modalities: RGB, surface normal, segmentation, 3D point cloud (z-channel can be extracted as depth map), optical flow, and scene flow. We also support two types of LiDAR sensors: 1-beam and 16-beam (like Velodyne VLP-16). Most of the code can be found in [gibson2/render](https://github.com/StanfordVL/iGibson/tree/master/gibson2/render). ### Examples @@ -15,9 +15,10 @@ import cv2 import sys import os import numpy as np -from gibson2.core.render.mesh_renderer.mesh_renderer_cpu import MeshRenderer +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] @@ -27,16 +28,16 @@ def main(): renderer = MeshRenderer(width=512, height=512) renderer.load_object(model_path) renderer.add_instance(0) - camera_pose = np.array([0, 0, 1.2]) 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() + cv2.waitKey(0) + if __name__ == '__main__': main() @@ -55,7 +56,29 @@ python mesh_renderer_example.py ``` You may translate the camera by pressing "WASD" on your keyboard and rotate the camera by dragging your mouse. Press `Q` to exit the rendering loop. The code can be found in [examples/demo/mesh_renderer_example.py](https://github.com/StanfordVL/iGibson/blob/master/examples/demo/mesh_renderer_example.py). +#### PBR (Physics-Based Rendering) Example + +You can test the physically based renderer with the PBR demo. You can render any objects included in iG dataset, here + we show a sink for example, as it includes different materials. You need to pass in a folder, since it will load all + obj files in the folder. + +```bash +cd examples/demo +python mesh_renderer_example_pbr.py /objects/sink/sink_1/shape/visual +``` +![pbr_renderer.png](images/pbr_render.png) + +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: +![lidar_velodyne.png](images/lidar_velodyne.png) + #### 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. +![scene_interactive.png](images/scene_interactive.png) -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. -![scene_interactive](images/scene_interactive.png) + +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. +![scene_interactive_texture_rand](images/scene_interactive_texture_rand.png) + +##### 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. +![scene_interactive_object_rand](images/scene_interactive_object_rand.png) + +##### 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`. + +![viewer.png](images/viewer.png) + +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 + + + + + + + + + +
+
+ +
+
+ +
+

Select Robot

+ +
+ + +
+ +
+ + +
+ +
+

Select Scene

+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+
+ +
+ +
+ +
+
+ + + + + \ 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) +![ig_scenes](images/scenes.gif) -# 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: + +![ignition_toy](images/ignition.gif) + +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. + +![ignition_toy](images/ext_scenes.jpg) + +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