diff --git a/Cargo.toml b/Cargo.toml index 3c631648..b732d386 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sarzak" -version = "2.13.23" +version = "2.13.24" edition = "2021" authors = ["Keith T. Star "] categories = ["compilers", "memory-management"] diff --git a/models/lu_dog.json b/models/lu_dog.json index 7a3f0710..dda6d3de 100644 --- a/models/lu_dog.json +++ b/models/lu_dog.json @@ -1 +1 @@ -{"paper":{"ids":["3d320f60-bf7c-5f3b-a456-06fa8de4c2ef"],"entities":{"3d320f60-bf7c-5f3b-a456-06fa8de4c2ef":{"id":"3d320f60-bf7c-5f3b-a456-06fa8de4c2ef","domain_name":"lu_dog","description":"A blank domain","domain_ns":"3d320f60-bf7c-5f3b-a456-06fa8de4c2ef","width":8000,"height":6400,"offset":{"x":-1985,"y":-2599},"objects":{"b8ec6afc-ddbd-53d6-9be3-e4b738941c2f":{"x":2185,"y":2132,"width":232,"height":95},"7178e7a4-5131-504b-a7b3-c2c0cfedf343":{"x":2647,"y":2269,"width":252,"height":142},"45644594-b418-5362-9294-a62fe2a0fa8e":{"x":3662,"y":1923,"width":271,"height":100,"id":"45644594-b418-5362-9294-a62fe2a0fa8e"},"2e277e34-ab6f-4028-9c52-935c31520fec":{"x":2668,"y":2461,"width":252,"height":126,"id":"2e277e34-ab6f-4028-9c52-935c31520fec"},"e68f8912-9897-4cbd-b363-cb4203a726a9":{"x":3100,"y":2270,"width":307,"height":145,"id":"e68f8912-9897-4cbd-b363-cb4203a726a9"},"141350e6-b62d-4a6d-9ea2-47333e51e3ea":{"x":3163,"y":2461,"width":246,"height":133,"id":"141350e6-b62d-4a6d-9ea2-47333e51e3ea"},"88687f76-5d9e-404e-a801-f6f57f9b30ca":{"x":3647,"y":2270,"width":285,"height":148,"id":"88687f76-5d9e-404e-a801-f6f57f9b30ca"},"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5":{"x":4151,"y":2420,"width":320,"height":160,"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5"},"c89e362d-7905-4226-8713-97d3d6f05037":{"x":4527,"y":2257,"width":283,"height":139,"id":"c89e362d-7905-4226-8713-97d3d6f05037"},"94fc0044-4b88-4f5c-ac60-3a44262ade10":{"x":2696,"y":2767,"width":253,"height":131,"id":"94fc0044-4b88-4f5c-ac60-3a44262ade10"},"f192b162-8ada-4128-8805-1953e9165c54":{"x":2024,"y":2660,"width":265,"height":133,"id":"f192b162-8ada-4128-8805-1953e9165c54"},"954b354f-3a90-440b-ab0f-43efc00d275e":{"x":2390,"y":3118,"width":211,"height":129,"id":"954b354f-3a90-440b-ab0f-43efc00d275e"},"0365b40c-c40a-4653-84ab-44d1c12d294f":{"x":2028,"y":2832,"width":256,"height":116,"id":"0365b40c-c40a-4653-84ab-44d1c12d294f"},"9352c766-9f6b-413b-9ea0-13f9c8e4d86e":{"x":3010,"y":3115,"width":234,"height":135,"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e"},"30c31621-a4bd-4356-80b9-1226e00651c9":{"x":3865,"y":2738,"width":242,"height":128,"id":"30c31621-a4bd-4356-80b9-1226e00651c9"},"6c7969f3-f150-4975-a989-a7bc8164b168":{"x":3868,"y":2997,"width":241,"height":117,"id":"6c7969f3-f150-4975-a989-a7bc8164b168"},"c32fcb6d-b505-492f-95c8-5f118079a399":{"x":4296,"y":2896,"width":259,"height":125,"id":"c32fcb6d-b505-492f-95c8-5f118079a399"},"59f269ab-2dbc-4b07-b9bc-48441f20e78f":{"x":4300,"y":3074,"width":251,"height":137,"id":"59f269ab-2dbc-4b07-b9bc-48441f20e78f"},"b359d531-77ae-436f-9f0d-6a5632f1648e":{"x":4302,"y":3264,"width":252,"height":133,"id":"b359d531-77ae-436f-9f0d-6a5632f1648e"},"ce2da156-e0fd-4e56-bb31-2030d4e0c599":{"x":4298,"y":2717,"width":252,"height":117,"id":"ce2da156-e0fd-4e56-bb31-2030d4e0c599"},"dbbb7d46-4072-49a6-b483-cc8b25cbb4ea":{"x":3858,"y":3704,"width":267,"height":142,"id":"dbbb7d46-4072-49a6-b483-cc8b25cbb4ea"},"a8b86e41-5b04-4469-8a10-91bd89603e27":{"x":2185,"y":2002,"width":233,"height":109,"id":"a8b86e41-5b04-4469-8a10-91bd89603e27"},"d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5":{"x":4390,"y":3880,"width":239,"height":115,"id":"d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5"},"dc6d1ffa-5dca-43ef-b973-0628ab580cb7":{"x":4797,"y":3826,"width":173,"height":118,"id":"dc6d1ffa-5dca-43ef-b973-0628ab580cb7"},"a16027c2-9a1d-42b7-ab37-a4e8e0bb7e4d":{"x":4800,"y":3989,"width":171,"height":114,"id":"a16027c2-9a1d-42b7-ab37-a4e8e0bb7e4d"},"b1612607-a813-4bc2-896b-88ec4b249447":{"x":4389,"y":3738,"width":241,"height":117,"id":"b1612607-a813-4bc2-896b-88ec4b249447"},"d30d2b03-732b-41bb-89ed-d053750bf987":{"x":4389,"y":3591,"width":242,"height":118,"id":"d30d2b03-732b-41bb-89ed-d053750bf987"},"fa42f4e2-1ff3-473f-a4b9-593c01134e96":{"x":4394,"y":4025,"width":235,"height":116,"id":"fa42f4e2-1ff3-473f-a4b9-593c01134e96"},"d715c5f9-23f8-45e0-a1df-34e27acd01f5":{"x":3850,"y":3199,"width":280,"height":132,"id":"d715c5f9-23f8-45e0-a1df-34e27acd01f5"},"43bebcb3-06a1-410d-a19e-b3c1c6d1fa6b":{"x":3854,"y":3371,"width":276,"height":130,"id":"43bebcb3-06a1-410d-a19e-b3c1c6d1fa6b"},"6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656":{"x":3856,"y":3540,"width":272,"height":121,"id":"6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656"},"d546feef-91df-49ea-ac61-430bdcf9832c":{"x":3861,"y":3896,"width":263,"height":141,"id":"d546feef-91df-49ea-ac61-430bdcf9832c"},"3874760d-0104-4670-ba8b-1af413c5ec4a":{"x":3863,"y":4181,"width":268,"height":136,"id":"3874760d-0104-4670-ba8b-1af413c5ec4a"},"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7":{"x":3426,"y":4149,"width":284,"height":141,"id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7"},"846aa191-7b0c-4325-8c21-09fa5edf7c78":{"x":3129,"y":4149,"width":254,"height":139,"id":"846aa191-7b0c-4325-8c21-09fa5edf7c78"},"26dba2c5-a7e9-4556-a9c2-79091a97b941":{"x":2713,"y":4148,"width":248,"height":138,"id":"26dba2c5-a7e9-4556-a9c2-79091a97b941"},"75a16785-d611-45ce-b52c-284a9da0b4b8":{"x":2456,"y":4492,"width":221,"height":128,"id":"75a16785-d611-45ce-b52c-284a9da0b4b8"},"01c8907d-cb59-4fae-a3ca-8cb331d18387":{"x":3171,"y":4386,"width":264,"height":131,"id":"01c8907d-cb59-4fae-a3ca-8cb331d18387"},"79069fc2-4d65-4073-b610-4afc0488de5c":{"x":2585,"y":4688,"width":306,"height":141,"id":"79069fc2-4d65-4073-b610-4afc0488de5c"},"23a9a479-68e7-4a70-bcef-9041f10fd287":{"x":2571,"y":1569,"width":233,"height":112,"id":"23a9a479-68e7-4a70-bcef-9041f10fd287"},"3a1c7f6a-459d-4eba-9291-2aebb9bf60c9":{"x":2187,"y":1861,"width":231,"height":114,"id":"3a1c7f6a-459d-4eba-9291-2aebb9bf60c9"},"a9b74602-bdc5-481f-af4c-8021553b895a":{"x":2186,"y":1710,"width":233,"height":119,"id":"a9b74602-bdc5-481f-af4c-8021553b895a"},"cdb1afaf-245c-4d56-bfea-10f69e45007d":{"x":2185,"y":1552,"width":233,"height":123,"id":"cdb1afaf-245c-4d56-bfea-10f69e45007d"},"b7483723-222d-4f08-b7b9-e8b14f0308cf":{"x":2187,"y":1390,"width":231,"height":126,"id":"b7483723-222d-4f08-b7b9-e8b14f0308cf"},"97f815f0-dcc4-4bd3-843d-13ff1dc5802c":{"x":3673,"y":1599,"width":222,"height":126,"id":"97f815f0-dcc4-4bd3-843d-13ff1dc5802c"},"72443b79-5645-4b5f-b317-e1a8f815b81c":{"x":3117,"y":2660,"width":256,"height":136,"id":"72443b79-5645-4b5f-b317-e1a8f815b81c"},"93f288e7-d670-40a6-91f3-2006b5efa8b4":{"x":2517,"y":3913,"width":252,"height":115,"id":"93f288e7-d670-40a6-91f3-2006b5efa8b4"},"e1321ffa-07d5-480d-89f9-227b13d27ce1":{"x":3366,"y":2855,"width":251,"height":102,"id":"e1321ffa-07d5-480d-89f9-227b13d27ce1"},"3f7fd816-518b-4b9e-8134-3059e78045a0":{"x":2389,"y":3341,"width":199,"height":113,"id":"3f7fd816-518b-4b9e-8134-3059e78045a0"},"c46e6b80-0365-429a-abf9-ca75ce4f469a":{"x":1935,"y":3121,"width":196,"height":105,"id":"c46e6b80-0365-429a-abf9-ca75ce4f469a"},"9c8bc563-b596-4348-9189-065d747f7c9f":{"x":1949,"y":3755,"width":194,"height":107,"id":"9c8bc563-b596-4348-9189-065d747f7c9f"},"1b4e5b3a-a9b2-4316-94c4-ff34d4d3d523":{"x":1633,"y":3690,"width":160,"height":108,"id":"1b4e5b3a-a9b2-4316-94c4-ff34d4d3d523"},"e3329a9e-1c52-44f6-a1f7-fc85f7362e9e":{"x":1630,"y":3822,"width":160,"height":108,"id":"e3329a9e-1c52-44f6-a1f7-fc85f7362e9e"},"484e429b-bf54-45cb-9b87-baddf7fb5f5b":{"x":1528,"y":3121,"width":222,"height":108,"id":"484e429b-bf54-45cb-9b87-baddf7fb5f5b"},"c47b8696-7e98-4733-ab33-a4dca7b61d01":{"x":1635,"y":3554,"width":160,"height":111,"id":"c47b8696-7e98-4733-ab33-a4dca7b61d01"},"e05ab5f3-17e7-4594-8ce0-c02d793a1df9":{"x":2416,"y":3520,"width":244,"height":112,"id":"e05ab5f3-17e7-4594-8ce0-c02d793a1df9"},"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d":{"x":2189,"y":3777,"width":251,"height":111,"id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d"},"4d5720eb-da8c-493d-ab8d-cb6111dd6099":{"x":3170,"y":3635,"width":223,"height":126,"id":"4d5720eb-da8c-493d-ab8d-cb6111dd6099"},"6767c0cf-4041-4047-b2b4-d7375f33bc97":{"x":1629,"y":3956,"width":159,"height":114,"id":"6767c0cf-4041-4047-b2b4-d7375f33bc97"},"35b3de4e-46b8-490f-8e30-c305ed348a78":{"x":1628,"y":4097,"width":159,"height":116,"id":"35b3de4e-46b8-490f-8e30-c305ed348a78"},"d8b554d4-03ac-4613-a3e0-fc0b901bfd70":{"x":1526,"y":3254,"width":220,"height":109,"id":"d8b554d4-03ac-4613-a3e0-fc0b901bfd70"},"0edc535b-405d-4dd5-bcd2-f5772ab116c2":{"x":1525,"y":3387,"width":221,"height":111,"id":"0edc535b-405d-4dd5-bcd2-f5772ab116c2"},"0b3e9de0-d139-4934-a043-d1913a24de0c":{"x":2117,"y":4193,"width":199,"height":120,"id":"0b3e9de0-d139-4934-a043-d1913a24de0c"},"70932b40-f444-4341-bb19-0a29d1daecbe":{"x":2136,"y":4436,"width":136,"height":99,"id":"70932b40-f444-4341-bb19-0a29d1daecbe"},"32dbb54a-9693-4847-9278-7c956ea045f8":{"x":2290,"y":4434,"width":135,"height":102,"id":"32dbb54a-9693-4847-9278-7c956ea045f8"},"0dc0e921-e7ff-4766-9738-e6e312f7f0de":{"x":2359,"y":4189,"width":249,"height":104,"id":"0dc0e921-e7ff-4766-9738-e6e312f7f0de"},"122e4157-381f-400f-ac30-a1c8a2a9e8c1":{"x":1987,"y":4434,"width":128,"height":102,"id":"122e4157-381f-400f-ac30-a1c8a2a9e8c1"},"17db2afc-ae6c-4e53-a527-48516811fe3e":{"x":1832,"y":4435,"width":136,"height":100,"id":"17db2afc-ae6c-4e53-a527-48516811fe3e"},"30abb231-4248-4ffa-9a69-e0eb6bb9dbbd":{"x":1670,"y":4435,"width":141,"height":96,"id":"30abb231-4248-4ffa-9a69-e0eb6bb9dbbd"},"ba8a3bbf-86a8-47e2-92bb-f41878981c41":{"x":2190,"y":1222,"width":232,"height":131,"id":"ba8a3bbf-86a8-47e2-92bb-f41878981c41"},"79571896-9798-44a3-acef-5aa2d9773b93":{"x":2821,"y":1940,"width":267,"height":145,"id":"79571896-9798-44a3-acef-5aa2d9773b93"},"5c85a8db-e4cc-4e38-9922-58d93773f4f0":{"x":3205,"y":3844,"width":174,"height":122,"id":"5c85a8db-e4cc-4e38-9922-58d93773f4f0"},"bf69c9af-f268-4c9b-8e67-4497eb490478":{"x":3665,"y":2456,"width":259,"height":81,"id":"bf69c9af-f268-4c9b-8e67-4497eb490478"},"ce73a111-4670-411e-9bd2-f3308d6399c9":{"x":1530,"y":2997,"width":222,"height":96,"id":"ce73a111-4670-411e-9bd2-f3308d6399c9"},"1e7a66b2-f559-4c21-b8e6-969999ed171d":{"x":2412,"y":2803,"width":207,"height":111,"id":"1e7a66b2-f559-4c21-b8e6-969999ed171d"},"80f73c4e-caf1-4e1f-a634-00965f6ad032":{"x":958,"y":3402,"width":154,"height":98,"id":"80f73c4e-caf1-4e1f-a634-00965f6ad032"},"222307c0-668c-43f9-9368-34cc048f0ae3":{"x":1359,"y":3771,"width":195,"height":90,"id":"222307c0-668c-43f9-9368-34cc048f0ae3"},"6187076b-e765-4e6b-af28-f577eba40b5e":{"x":1086,"y":3735,"width":140,"height":88,"id":"6187076b-e765-4e6b-af28-f577eba40b5e"},"f7fc16ac-6a23-4f5d-a04c-1163617701c1":{"x":1273,"y":3485,"width":176,"height":102,"id":"f7fc16ac-6a23-4f5d-a04c-1163617701c1"},"0ad229c4-1782-4783-b64e-0d15fe482463":{"x":958,"y":3549,"width":155,"height":95,"id":"0ad229c4-1782-4783-b64e-0d15fe482463"},"b8d3d40e-462e-4e4d-9fb4-b7d54f9fd03a":{"x":1531,"y":2863,"width":219,"height":111,"id":"b8d3d40e-462e-4e4d-9fb4-b7d54f9fd03a"},"470246f6-91ec-4993-b915-93480d0f4eb9":{"x":3026,"y":4641,"width":240,"height":149,"id":"470246f6-91ec-4993-b915-93480d0f4eb9"},"f6a3ce12-18e1-4675-ab94-6b2a7c91d951":{"x":4519,"y":2028,"width":234,"height":137,"id":"f6a3ce12-18e1-4675-ab94-6b2a7c91d951"},"41b7bda7-f5a2-4c94-af22-fedbe8d6f287":{"x":1085,"y":3857,"width":142,"height":92,"id":"41b7bda7-f5a2-4c94-af22-fedbe8d6f287"},"84f1c5fd-d907-4653-a132-bfd420ad9212":{"x":1529,"y":2714,"width":220,"height":121,"id":"84f1c5fd-d907-4653-a132-bfd420ad9212"},"efde0481-1599-4c5c-bf30-51dbd4a8ed83":{"x":2186,"y":2431,"width":232,"height":108,"id":"efde0481-1599-4c5c-bf30-51dbd4a8ed83"},"95e17479-07a5-41b1-9930-1b9b520514f6":{"x":3552,"y":2634,"width":309,"height":105,"id":"95e17479-07a5-41b1-9930-1b9b520514f6"},"8d86dceb-7e6e-4767-8a3f-cbbde458ad93":{"x":2029,"y":2973,"width":255,"height":124,"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93"},"68e7191a-fe94-423f-8a5d-5551384ae998":{"x":2771,"y":1733,"width":253,"height":110,"id":"68e7191a-fe94-423f-8a5d-5551384ae998"},"c4723d6d-1584-49bd-80f1-4c700185746e":{"x":4612,"y":2457,"width":199,"height":112,"id":"c4723d6d-1584-49bd-80f1-4c700185746e"},"7794ada6-49c3-4bf0-991f-828c6583ebb8":{"x":4788,"y":2694,"width":280,"height":119,"id":"7794ada6-49c3-4bf0-991f-828c6583ebb8"},"d48d948b-5291-4eb3-ba35-7ab1c1ffa098":{"x":4081,"y":1919,"width":348,"height":124,"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098"},"7eaea922-8807-4c38-a704-0143e0594664":{"x":4450,"y":1722,"width":212,"height":105,"id":"7eaea922-8807-4c38-a704-0143e0594664"},"4b6c7fde-0878-4947-b960-bc73a4558c60":{"x":4185,"y":1504,"width":147,"height":115,"id":"4b6c7fde-0878-4947-b960-bc73a4558c60"},"e6fbeeb8-6ade-46a2-bb52-9c99d06918b2":{"x":4351,"y":1504,"width":297,"height":114,"id":"e6fbeeb8-6ade-46a2-bb52-9c99d06918b2"},"c8fcd612-6ca8-469a-824c-de218e4fd075":{"x":4667,"y":1504,"width":324,"height":116,"id":"c8fcd612-6ca8-469a-824c-de218e4fd075"},"52143d28-8474-44bc-b63f-e654150888d3":{"x":2619,"y":3122,"width":241,"height":108,"id":"52143d28-8474-44bc-b63f-e654150888d3"},"ab7a5708-6d12-4dce-b488-fa3a3b480510":{"x":3490,"y":3922,"width":232,"height":83,"id":"ab7a5708-6d12-4dce-b488-fa3a3b480510"},"6094aad5-613b-42b6-8f48-c3b9e2161aa9":{"x":2842,"y":3296,"width":250,"height":113,"id":"6094aad5-613b-42b6-8f48-c3b9e2161aa9"},"6822b78e-e5ca-4c40-ba9d-cf7a69d4fdc7":{"x":3737,"y":4431,"width":245,"height":132,"id":"6822b78e-e5ca-4c40-ba9d-cf7a69d4fdc7"},"910e3a08-5e99-47a5-bde4-3e35cf9f00da":{"x":4023,"y":4431,"width":272,"height":132,"id":"910e3a08-5e99-47a5-bde4-3e35cf9f00da"},"31deb355-b737-43a6-ae88-199bb51f940d":{"x":3566,"y":3110,"width":210,"height":107,"id":"31deb355-b737-43a6-ae88-199bb51f940d"},"39060ea9-5d45-4954-a29f-ba88e01e7217":{"x":3478,"y":3726,"width":240,"height":116,"id":"39060ea9-5d45-4954-a29f-ba88e01e7217"},"4856978f-20be-4b59-8bf6-b941091119a9":{"x":3032,"y":2834,"width":215,"height":140,"id":"4856978f-20be-4b59-8bf6-b941091119a9"},"dbada891-ca0d-4fbc-8371-9f9234867bd6":{"x":2186,"y":2247,"width":231,"height":119,"id":"dbada891-ca0d-4fbc-8371-9f9234867bd6"},"290f49d3-8ce7-408e-be14-611b66db9687":{"x":3161,"y":2031,"width":243,"height":126,"id":"290f49d3-8ce7-408e-be14-611b66db9687"},"7056c5ba-4f49-404f-abd5-e5c6a5879fac":{"x":4074,"y":1690,"width":263,"height":125,"id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac"},"b28be6c2-a37a-4049-9110-52136f892fc4":{"x":4234,"y":2186,"width":237,"height":140,"id":"b28be6c2-a37a-4049-9110-52136f892fc4"},"0e1e683a-fe89-4002-88fa-efd50d66de6c":{"x":4390,"y":3448,"width":308,"height":115,"id":"0e1e683a-fe89-4002-88fa-efd50d66de6c"},"d39c987f-bba2-4956-963f-7e9c6c3fe4b4":{"x":4895,"y":3449,"width":301,"height":114,"id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4"},"dbc37f2f-0a90-4a8b-a217-d4a70a606695":{"x":5349,"y":3560,"width":260,"height":107,"id":"dbc37f2f-0a90-4a8b-a217-d4a70a606695"},"80bf1ba4-2f74-45db-a1b1-6b76e82b2013":{"x":5345,"y":3343,"width":262,"height":99,"id":"80bf1ba4-2f74-45db-a1b1-6b76e82b2013"},"1a5eca02-909e-434c-bd35-b02f2b7dbe22":{"x":4394,"y":4166,"width":236,"height":128,"id":"1a5eca02-909e-434c-bd35-b02f2b7dbe22"},"dfb72d5a-91a4-4023-a7a9-baef28bed978":{"x":1919,"y":1621,"width":213,"height":127,"id":"dfb72d5a-91a4-4023-a7a9-baef28bed978"},"47abdb96-0225-4880-a472-9c714086e2b5":{"x":2918,"y":3818,"width":226,"height":114,"id":"47abdb96-0225-4880-a472-9c714086e2b5"}},"relationships":{"21f08565-d913-4302-a853-e5f688ec1bc1":{"IsaUI":{"from":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2668,"y":2496,"offset":{"x":20,"y":20},"dir":"West"},"to":[{"id":"b8ec6afc-ddbd-53d6-9be3-e4b738941c2f","x":2417,"y":2184,"offset":{"x":20,"y":20},"dir":"East"},{"id":"a8b86e41-5b04-4469-8a10-91bd89603e27","x":2418,"y":2067,"offset":{"x":20,"y":20},"dir":"East"},{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4223,"y":2420,"offset":{"x":20,"y":20},"dir":"North"},{"id":"23a9a479-68e7-4a70-bcef-9041f10fd287","x":2625,"y":1681,"offset":{"x":20,"y":20},"dir":"South"},{"id":"3a1c7f6a-459d-4eba-9291-2aebb9bf60c9","x":2418,"y":1914,"offset":{"x":20,"y":20},"dir":"East"},{"id":"a9b74602-bdc5-481f-af4c-8021553b895a","x":2419,"y":1797,"offset":{"x":20,"y":20},"dir":"East"},{"id":"cdb1afaf-245c-4d56-bfea-10f69e45007d","x":2418,"y":1648,"offset":{"x":20,"y":20},"dir":"East"},{"id":"b7483723-222d-4f08-b7b9-e8b14f0308cf","x":2418,"y":1464,"offset":{"x":20,"y":20},"dir":"East"},{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3100,"y":2380,"offset":{"x":20,"y":20},"dir":"West"},{"id":"c89e362d-7905-4226-8713-97d3d6f05037","x":4612,"y":2396,"offset":{"x":20,"y":20},"dir":"South"},{"id":"ba8a3bbf-86a8-47e2-92bb-f41878981c41","x":2422,"y":1297,"offset":{"x":20,"y":20},"dir":"East"},{"id":"efde0481-1599-4c5c-bf30-51dbd4a8ed83","x":2418,"y":2496,"offset":{"x":20,"y":20},"dir":"East"},{"id":"95e17479-07a5-41b1-9930-1b9b520514f6","x":3699,"y":2634,"offset":{"x":20,"y":20},"dir":"North"},{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","x":4112,"y":2043,"offset":{"x":20,"y":20},"dir":"South"},{"id":"dbada891-ca0d-4fbc-8371-9f9234867bd6","x":2417,"y":2311,"offset":{"x":20,"y":20},"dir":"East"},{"id":"290f49d3-8ce7-408e-be14-611b66db9687","x":3161,"y":2089,"offset":{"x":20,"y":20},"dir":"West"},{"id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","x":4074,"y":1751,"offset":{"x":20,"y":20},"dir":"West"},{"id":"b28be6c2-a37a-4049-9110-52136f892fc4","x":4234,"y":2258,"offset":{"x":20,"y":20},"dir":"West"},{"id":"dfb72d5a-91a4-4023-a7a9-baef28bed978","x":2132,"y":1682,"offset":{"x":20,"y":20},"dir":"East"}]}},"c12fcdf7-ec63-58c7-8555-36222f25b91b":{"AssociativeUI":{"from":{"x":3162,"y":2346},"middle":{"id":"68e7191a-fe94-423f-8a5d-5551384ae998","x":2771,"y":1780,"offset":{"x":0,"y":0},"dir":"West"},"one":{"id":"b7483723-222d-4f08-b7b9-e8b14f0308cf","x":2418,"y":1493,"offset":{"x":-75,"y":54},"dir":"East"},"other":{"id":"7178e7a4-5131-504b-a7b3-c2c0cfedf343","x":2775,"y":2269,"offset":{"x":18,"y":-27},"dir":"North"}}},"4b7360ba-8de3-4c93-bc90-22478c128a75":{"BinaryUI":{"from":{"id":"141350e6-b62d-4a6d-9ea2-47333e51e3ea","x":3163,"y":2543,"offset":{"x":-92,"y":30},"dir":"West"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2920,"y":2562,"offset":{"x":24,"y":-21},"dir":"East"}}},"3746c64a-c63d-424d-afb2-c253470b6d7b":{"IsaUI":{"from":{"id":"45644594-b418-5362-9294-a62fe2a0fa8e","x":3790,"y":2023,"offset":{"x":20,"y":20},"dir":"South"},"to":[{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3285,"y":2270,"offset":{"x":20,"y":20},"dir":"North"},{"id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","x":3789,"y":2270,"offset":{"x":20,"y":20},"dir":"North"},{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4295,"y":2420,"offset":{"x":20,"y":20},"dir":"North"},{"id":"c89e362d-7905-4226-8713-97d3d6f05037","x":4649,"y":2257,"offset":{"x":20,"y":20},"dir":"North"},{"id":"f6a3ce12-18e1-4675-ab94-6b2a7c91d951","x":4519,"y":2094,"offset":{"x":20,"y":20},"dir":"West"},{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","x":4222,"y":2043,"offset":{"x":20,"y":20},"dir":"South"}]}},"02892323-60e9-470b-b162-b2bc8d9ef1cd":{"BinaryUI":{"from":{"id":"141350e6-b62d-4a6d-9ea2-47333e51e3ea","x":3409,"y":2523,"offset":{"x":19,"y":33},"dir":"East"},"to":{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3407,"y":2390,"offset":{"x":61,"y":35},"dir":"East"}}},"98c79b91-da7b-443a-b1fb-18596cd6b4bc":{"BinaryUI":{"from":{"id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","x":3647,"y":2323,"offset":{"x":-128,"y":-40},"dir":"West"},"to":{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3407,"y":2323,"offset":{"x":15,"y":34},"dir":"East"}}},"7993e2c7-7efa-4346-b50e-bc02d55e1ca7":{"BinaryUI":{"from":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4151,"y":2455,"offset":{"x":-80,"y":-74},"dir":"West"},"to":{"id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","x":3932,"y":2355,"offset":{"x":-104,"y":95},"dir":"East"}}},"fdb49afe-13fb-4c79-99d1-92728d8652c7":{"BinaryUI":{"from":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4213,"y":2580,"offset":{"x":-168,"y":17},"dir":"South"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2849,"y":2587,"offset":{"x":38,"y":26},"dir":"South"}}},"ea1e6d1c-279b-4b6d-806e-fa133c6a5da9":{"IsaUI":{"from":{"id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","x":2823,"y":2898,"offset":{"x":20,"y":20},"dir":"South"},"to":[{"id":"954b354f-3a90-440b-ab0f-43efc00d275e","x":2526,"y":3118,"offset":{"x":20,"y":20},"dir":"North"},{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3120,"y":3115,"offset":{"x":20,"y":20},"dir":"North"}]}},"35491126-597f-4301-ae48-88da4a23c845":{"IsaUI":{"from":{"id":"954b354f-3a90-440b-ab0f-43efc00d275e","x":2444,"y":3118,"offset":{"x":20,"y":20},"dir":"North"},"to":[{"id":"0365b40c-c40a-4653-84ab-44d1c12d294f","x":2284,"y":2898,"offset":{"x":20,"y":20},"dir":"East"},{"id":"f192b162-8ada-4128-8805-1953e9165c54","x":2289,"y":2763,"offset":{"x":20,"y":20},"dir":"East"},{"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","x":2284,"y":3077,"offset":{"x":20,"y":20},"dir":"East"}]}},"336674ce-19be-4baa-8117-19ee19886e2d":{"BinaryUI":{"from":{"id":"f192b162-8ada-4128-8805-1953e9165c54","x":2289,"y":2693,"offset":{"x":102,"y":35},"dir":"East"},"to":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4340,"y":2580,"offset":{"x":20,"y":20},"dir":"South"}}},"95b8c311-1f3f-42ab-93cd-9b95c8d8c02a":{"BinaryUI":{"from":{"id":"f192b162-8ada-4128-8805-1953e9165c54","x":2024,"y":2694,"offset":{"x":-113,"y":-51},"dir":"West"},"to":{"id":"f192b162-8ada-4128-8805-1953e9165c54","x":2024,"y":2759,"offset":{"x":35,"y":28},"dir":"West"}}},"3966271b-9938-48c7-b4fe-177c307e22bf":{"IsaUI":{"from":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3182,"offset":{"x":20,"y":20},"dir":"East"},"to":[{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":3865,"y":2827,"offset":{"x":20,"y":20},"dir":"West"},{"id":"dbbb7d46-4072-49a6-b483-cc8b25cbb4ea","x":3858,"y":3769,"offset":{"x":20,"y":20},"dir":"West"},{"id":"d715c5f9-23f8-45e0-a1df-34e27acd01f5","x":3850,"y":3257,"offset":{"x":20,"y":20},"dir":"West"},{"id":"d546feef-91df-49ea-ac61-430bdcf9832c","x":3861,"y":3963,"offset":{"x":20,"y":20},"dir":"West"},{"id":"6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656","x":3856,"y":3588,"offset":{"x":20,"y":20},"dir":"West"},{"id":"43bebcb3-06a1-410d-a19e-b3c1c6d1fa6b","x":3854,"y":3445,"offset":{"x":20,"y":20},"dir":"West"},{"id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","x":3538,"y":4149,"offset":{"x":20,"y":20},"dir":"North"},{"id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","x":2878,"y":4148,"offset":{"x":20,"y":20},"dir":"North"},{"id":"72443b79-5645-4b5f-b317-e1a8f815b81c","x":3288,"y":2796,"offset":{"x":20,"y":20},"dir":"South"},{"id":"93f288e7-d670-40a6-91f3-2006b5efa8b4","x":2628,"y":3913,"offset":{"x":20,"y":20},"dir":"North"},{"id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","x":3542,"y":2957,"offset":{"x":20,"y":20},"dir":"South"},{"id":"3f7fd816-518b-4b9e-8134-3059e78045a0","x":2588,"y":3401,"offset":{"x":20,"y":20},"dir":"East"},{"id":"e05ab5f3-17e7-4594-8ce0-c02d793a1df9","x":2572,"y":3520,"offset":{"x":20,"y":20},"dir":"North"},{"id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","x":2423,"y":3777,"offset":{"x":20,"y":20},"dir":"North"},{"id":"4d5720eb-da8c-493d-ab8d-cb6111dd6099","x":3291,"y":3635,"offset":{"x":20,"y":20},"dir":"North"},{"id":"0b3e9de0-d139-4934-a043-d1913a24de0c","x":2230,"y":4193,"offset":{"x":20,"y":20},"dir":"North"},{"id":"0dc0e921-e7ff-4766-9738-e6e312f7f0de","x":2501,"y":4189,"offset":{"x":20,"y":20},"dir":"North"},{"id":"5c85a8db-e4cc-4e38-9922-58d93773f4f0","x":3293,"y":3844,"offset":{"x":20,"y":20},"dir":"North"},{"id":"3874760d-0104-4670-ba8b-1af413c5ec4a","x":3863,"y":4240,"offset":{"x":20,"y":20},"dir":"West"},{"id":"1e7a66b2-f559-4c21-b8e6-969999ed171d","x":2544,"y":2914,"offset":{"x":20,"y":20},"dir":"South"},{"id":"95e17479-07a5-41b1-9930-1b9b520514f6","x":3771,"y":2720,"offset":{"x":20,"y":20},"dir":"South"},{"id":"52143d28-8474-44bc-b63f-e654150888d3","x":2860,"y":3184,"offset":{"x":20,"y":20},"dir":"East"},{"id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","x":3490,"y":3952,"offset":{"x":20,"y":20},"dir":"West"},{"id":"4856978f-20be-4b59-8bf6-b941091119a9","x":3247,"y":2919,"offset":{"x":20,"y":20},"dir":"East"},{"id":"47abdb96-0225-4880-a472-9c714086e2b5","x":3043,"y":3818,"offset":{"x":20,"y":20},"dir":"North"}]}},"2e81ce06-82d5-47e6-9f38-783d8af057d9":{"IsaUI":{"from":{"id":"6c7969f3-f150-4975-a989-a7bc8164b168","x":4109,"y":3052,"offset":{"x":20,"y":20},"dir":"East"},"to":[{"id":"ce2da156-e0fd-4e56-bb31-2030d4e0c599","x":4298,"y":2778,"offset":{"x":20,"y":20},"dir":"West"},{"id":"c32fcb6d-b505-492f-95c8-5f118079a399","x":4296,"y":2960,"offset":{"x":20,"y":20},"dir":"West"},{"id":"59f269ab-2dbc-4b07-b9bc-48441f20e78f","x":4300,"y":3143,"offset":{"x":20,"y":20},"dir":"West"},{"id":"b359d531-77ae-436f-9f0d-6a5632f1648e","x":4302,"y":3333,"offset":{"x":20,"y":20},"dir":"West"}]}},"03745d2b-a85f-40a9-b038-8f22c83e8eb1":{"BinaryUI":{"from":{"id":"6c7969f3-f150-4975-a989-a7bc8164b168","x":3951,"y":3114,"offset":{"x":-131,"y":-23},"dir":"South"},"to":{"id":"6c7969f3-f150-4975-a989-a7bc8164b168","x":4045,"y":3114,"offset":{"x":20,"y":20},"dir":"South"}}},"c715993f-c840-4d48-8442-b5635e4324e7":{"BinaryUI":{"from":{"id":"6c7969f3-f150-4975-a989-a7bc8164b168","x":3950,"y":2997,"offset":{"x":26,"y":-17},"dir":"North"},"to":{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":3950,"y":2866,"offset":{"x":20,"y":20},"dir":"South"}}},"f6c19c17-3e01-4945-bffb-7ec408dd7fcf":{"BinaryUI":{"from":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4471,"y":2518,"offset":{"x":-247,"y":12},"dir":"East"},"to":{"id":"c4723d6d-1584-49bd-80f1-4c700185746e","x":4612,"y":2518,"offset":{"x":19,"y":-18},"dir":"West"}}},"d8bf88d3-35da-422d-a7d9-1726ce66a288":{"BinaryUI":{"from":{"id":"c32fcb6d-b505-492f-95c8-5f118079a399","x":4296,"y":2925,"offset":{"x":-142,"y":-36},"dir":"West"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3115,"offset":{"x":-5,"y":-83},"dir":"East"}}},"0b5aab4e-5077-4627-9091-89c71a921be1":{"BinaryUI":{"from":{"id":"c32fcb6d-b505-492f-95c8-5f118079a399","x":4296,"y":2945,"offset":{"x":-178,"y":19},"dir":"West"},"to":{"id":"0365b40c-c40a-4653-84ab-44d1c12d294f","x":2284,"y":2923,"offset":{"x":16,"y":32},"dir":"East"}}},"3bb006c5-a66d-440b-b54b-35bc9da87b33":{"IsaUI":{"from":{"id":"dbbb7d46-4072-49a6-b483-cc8b25cbb4ea","x":4125,"y":3778,"offset":{"x":20,"y":20},"dir":"East"},"to":[{"id":"d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5","x":4390,"y":3945,"offset":{"x":20,"y":20},"dir":"West"},{"id":"d30d2b03-732b-41bb-89ed-d053750bf987","x":4389,"y":3664,"offset":{"x":20,"y":20},"dir":"West"},{"id":"b1612607-a813-4bc2-896b-88ec4b249447","x":4389,"y":3801,"offset":{"x":20,"y":20},"dir":"West"},{"id":"fa42f4e2-1ff3-473f-a4b9-593c01134e96","x":4394,"y":4079,"offset":{"x":20,"y":20},"dir":"West"},{"id":"0e1e683a-fe89-4002-88fa-efd50d66de6c","x":4390,"y":3527,"offset":{"x":20,"y":20},"dir":"West"},{"id":"1a5eca02-909e-434c-bd35-b02f2b7dbe22","x":4394,"y":4225,"offset":{"x":20,"y":20},"dir":"West"}]}},"e67c9242-2aac-4930-ae2e-b2a1678ed3d9":{"BinaryUI":{"from":{"id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","x":2846,"y":2767,"offset":{"x":23,"y":-16},"dir":"North"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2704,"y":2587,"offset":{"x":10,"y":22},"dir":"South"}}},"332f2cb5-0719-4c2d-8737-c1a0375fad8e":{"IsaUI":{"from":{"id":"d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5","x":4629,"y":3942,"offset":{"x":20,"y":20},"dir":"East"},"to":[{"id":"dc6d1ffa-5dca-43ef-b973-0628ab580cb7","x":4797,"y":3882,"offset":{"x":20,"y":20},"dir":"West"},{"id":"a16027c2-9a1d-42b7-ab37-a4e8e0bb7e4d","x":4800,"y":4043,"offset":{"x":20,"y":20},"dir":"West"}]}},"e93a7669-d7d0-4cb2-bbb1-36dedf3f893d":{"BinaryUI":{"from":{"id":"3874760d-0104-4670-ba8b-1af413c5ec4a","x":4008,"y":4181,"offset":{"x":24,"y":-14},"dir":"North"},"to":{"id":"d546feef-91df-49ea-ac61-430bdcf9832c","x":4008,"y":4037,"offset":{"x":20,"y":20},"dir":"South"}}},"ead7f44b-e37a-4122-8824-17f4079c2e70":{"BinaryUI":{"from":{"id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","x":3484,"y":4149,"offset":{"x":2,"y":-62},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3230,"offset":{"x":-36,"y":54},"dir":"East"}}},"33838622-f03e-415f-9588-e7f9e644727e":{"BinaryUI":{"from":{"id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","x":3229,"y":4288,"offset":{"x":-18,"y":70},"dir":"South"},"to":{"id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","x":3311,"y":4288,"offset":{"x":7,"y":41},"dir":"South"}}},"54994661-e099-453c-904f-c09cc0fa0bfa":{"BinaryUI":{"from":{"id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","x":3129,"y":4258,"offset":{"x":-75,"y":30},"dir":"West"},"to":{"id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","x":2961,"y":4259,"offset":{"x":11,"y":-27},"dir":"East"}}},"0cde3a3b-6678-42ac-8fa4-8ab02acb3dea":{"BinaryUI":{"from":{"id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","x":2784,"y":4148,"offset":{"x":-112,"y":-44},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3037,"y":3250,"offset":{"x":-99,"y":-45},"dir":"South"}}},"688ec08e-9fd6-4a2f-bcd5-5ea94e946d1b":{"IsaUI":{"from":{"id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","x":2814,"y":4286,"offset":{"x":20,"y":20},"dir":"South"},"to":[{"id":"01c8907d-cb59-4fae-a3ca-8cb331d18387","x":3171,"y":4460,"offset":{"x":20,"y":20},"dir":"West"},{"id":"75a16785-d611-45ce-b52c-284a9da0b4b8","x":2568,"y":4492,"offset":{"x":20,"y":20},"dir":"North"},{"id":"79069fc2-4d65-4073-b610-4afc0488de5c","x":2737,"y":4688,"offset":{"x":20,"y":20},"dir":"North"},{"id":"470246f6-91ec-4993-b915-93480d0f4eb9","x":3132,"y":4641,"offset":{"x":20,"y":20},"dir":"North"}]}},"e0a24038-1c85-4d6f-afbc-5c034062a557":{"BinaryUI":{"from":{"id":"59f269ab-2dbc-4b07-b9bc-48441f20e78f","x":4300,"y":3166,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3148,"offset":{"x":20,"y":20},"dir":"East"}}},"96737350-249d-4701-9b47-0f56bf8bfc7f":{"BinaryUI":{"from":{"id":"6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656","x":3856,"y":3636,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3247,"offset":{"x":20,"y":20},"dir":"East"}}},"9fd61528-8e0f-40d0-b1bb-53b468851d30":{"BinaryUI":{"from":{"id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","x":2949,"y":2795,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":3865,"y":2795,"offset":{"x":20,"y":20},"dir":"West"}}},"95fcc898-ef24-4ec4-8409-798a6623713e":{"BinaryUI":{"from":{"id":"cdb1afaf-245c-4d56-bfea-10f69e45007d","x":2418,"y":1601,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2674,"y":2461,"offset":{"x":20,"y":20},"dir":"North"}}},"de725e45-a751-4f4b-8c44-6c79671c70eb":{"BinaryUI":{"from":{"id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","x":3191,"y":4149,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3101,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"39f2d2c1-abf2-4f3e-a4f1-58a477b12f9e":{"BinaryUI":{"from":{"id":"3874760d-0104-4670-ba8b-1af413c5ec4a","x":3956,"y":4181,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3247,"offset":{"x":20,"y":20},"dir":"East"}}},"81d77ddd-6aae-4023-8467-2f5705d5e633":{"BinaryUI":{"from":{"id":"d546feef-91df-49ea-ac61-430bdcf9832c","x":3861,"y":3935,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"31deb355-b737-43a6-ae88-199bb51f940d","x":3776,"y":3193,"offset":{"x":20,"y":20},"dir":"East"}}},"c45955d9-c799-4d61-8bc6-6335bde326b8":{"BinaryUI":{"from":{"id":"c89e362d-7905-4226-8713-97d3d6f05037","x":4694,"y":2396,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"7178e7a4-5131-504b-a7b3-c2c0cfedf343","x":2859,"y":2411,"offset":{"x":20,"y":20},"dir":"South"}}},"bc8075e9-e5ba-4a26-b696-7cf2651997ba":{"BinaryUI":{"from":{"id":"b359d531-77ae-436f-9f0d-6a5632f1648e","x":4332,"y":3264,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3147,"offset":{"x":20,"y":20},"dir":"East"}}},"6f636d63-667a-40ad-b554-a301a62ddebd":{"BinaryUI":{"from":{"id":"45644594-b418-5362-9294-a62fe2a0fa8e","x":3780,"y":1923,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"97f815f0-dcc4-4bd3-843d-13ff1dc5802c","x":3778,"y":1725,"offset":{"x":20,"y":20},"dir":"South"}}},"f564f775-febe-442e-a0f1-492a2265e991":{"BinaryUI":{"from":{"id":"72443b79-5645-4b5f-b317-e1a8f815b81c","x":3211,"y":2796,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3209,"y":3115,"offset":{"x":20,"y":20},"dir":"North"}}},"0e780acf-9221-4e84-9377-64d31e653187":{"BinaryUI":{"from":{"id":"72443b79-5645-4b5f-b317-e1a8f815b81c","x":3373,"y":2762,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3228,"y":3115,"offset":{"x":20,"y":20},"dir":"North"}}},"fc2e5c67-6c98-4bfd-93a7-711fa2ae573f":{"BinaryUI":{"from":{"id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","x":3473,"y":2957,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3115,"offset":{"x":20,"y":20},"dir":"East"}}},"ba437581-658a-497d-9790-ab79ad56cd4f":{"BinaryUI":{"from":{"id":"93f288e7-d670-40a6-91f3-2006b5efa8b4","x":2726,"y":3913,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"cdd19ddf-67e5-4e9b-9958-0745e8f9729e":{"BinaryUI":{"from":{"id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","x":3617,"y":2895,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":3865,"y":2809,"offset":{"x":20,"y":20},"dir":"West"}}},"c8d05983-b88d-40da-bf31-83d2d8b8c574":{"IsaUI":{"from":{"id":"3f7fd816-518b-4b9e-8134-3059e78045a0","x":2389,"y":3395,"offset":{"x":20,"y":20},"dir":"West"},"to":[{"id":"9c8bc563-b596-4348-9189-065d747f7c9f","x":2143,"y":3807,"offset":{"x":20,"y":20},"dir":"East"},{"id":"c46e6b80-0365-429a-abf9-ca75ce4f469a","x":2131,"y":3176,"offset":{"x":20,"y":20},"dir":"East"},{"id":"f7fc16ac-6a23-4f5d-a04c-1163617701c1","x":1449,"y":3562,"offset":{"x":20,"y":20},"dir":"East"}]}},"c6ed5fc4-f04a-45e0-afc3-6f421b81fea7":{"IsaUI":{"from":{"id":"9c8bc563-b596-4348-9189-065d747f7c9f","x":1949,"y":3817,"offset":{"x":20,"y":20},"dir":"West"},"to":[{"id":"1b4e5b3a-a9b2-4316-94c4-ff34d4d3d523","x":1793,"y":3741,"offset":{"x":20,"y":20},"dir":"East"},{"id":"e3329a9e-1c52-44f6-a1f7-fc85f7362e9e","x":1790,"y":3879,"offset":{"x":20,"y":20},"dir":"East"},{"id":"c47b8696-7e98-4733-ab33-a4dca7b61d01","x":1795,"y":3607,"offset":{"x":20,"y":20},"dir":"East"},{"id":"6767c0cf-4041-4047-b2b4-d7375f33bc97","x":1788,"y":4014,"offset":{"x":20,"y":20},"dir":"East"},{"id":"35b3de4e-46b8-490f-8e30-c305ed348a78","x":1787,"y":4161,"offset":{"x":20,"y":20},"dir":"East"},{"id":"222307c0-668c-43f9-9368-34cc048f0ae3","x":1554,"y":3816,"offset":{"x":20,"y":20},"dir":"East"}]}},"27350475-a322-4ede-a4b2-eb88a3c847f5":{"IsaUI":{"from":{"id":"c46e6b80-0365-429a-abf9-ca75ce4f469a","x":1935,"y":3182,"offset":{"x":20,"y":20},"dir":"West"},"to":[{"id":"484e429b-bf54-45cb-9b87-baddf7fb5f5b","x":1750,"y":3183,"offset":{"x":20,"y":20},"dir":"East"},{"id":"d8b554d4-03ac-4613-a3e0-fc0b901bfd70","x":1746,"y":3314,"offset":{"x":20,"y":20},"dir":"East"},{"id":"0edc535b-405d-4dd5-bcd2-f5772ab116c2","x":1746,"y":3447,"offset":{"x":20,"y":20},"dir":"East"},{"id":"ce73a111-4670-411e-9bd2-f3308d6399c9","x":1752,"y":3048,"offset":{"x":20,"y":20},"dir":"East"},{"id":"b8d3d40e-462e-4e4d-9fb4-b7d54f9fd03a","x":1750,"y":2920,"offset":{"x":20,"y":20},"dir":"East"},{"id":"84f1c5fd-d907-4653-a132-bfd420ad9212","x":1749,"y":2772,"offset":{"x":20,"y":20},"dir":"East"}]}},"513c99bc-140c-44c2-b605-0d377805ac43":{"BinaryUI":{"from":{"id":"3f7fd816-518b-4b9e-8134-3059e78045a0","x":2544,"y":3341,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"55ae9c5d-bcdb-4c29-8f06-cc9f596662d5":{"BinaryUI":{"from":{"id":"3f7fd816-518b-4b9e-8134-3059e78045a0","x":2439,"y":3341,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"23c220df-e5a3-44dc-b521-d29378c6a5e0":{"BinaryUI":{"from":{"id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","x":3402,"y":2957,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3126,"offset":{"x":20,"y":20},"dir":"East"}}},"71251371-81c5-4f25-8141-fef1e23e12fe":{"BinaryUI":{"from":{"id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","x":2440,"y":3876,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","x":2442,"y":3804,"offset":{"x":20,"y":20},"dir":"East"}}},"761a6c93-ae0b-4508-9437-d68d0b2c1f22":{"BinaryUI":{"from":{"id":"e05ab5f3-17e7-4594-8ce0-c02d793a1df9","x":2416,"y":3584,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","x":2374,"y":3777,"offset":{"x":20,"y":20},"dir":"North"}}},"8398d7d3-d42f-4ca6-89d3-7a563eb50131":{"BinaryUI":{"from":{"id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","x":2440,"y":3777,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3018,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"124d7dea-f1d6-477f-a096-42e92dd297c2":{"BinaryUI":{"from":{"id":"4d5720eb-da8c-493d-ab8d-cb6111dd6099","x":3196,"y":3635,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3196,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"07097b52-f614-461b-9d4c-62ba7177a383":{"BinaryUI":{"from":{"id":"4d5720eb-da8c-493d-ab8d-cb6111dd6099","x":3231,"y":3635,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3230,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"5e20da11-448d-41a5-8b92-7dd75d64ad3d":{"BinaryUI":{"from":{"id":"0b3e9de0-d139-4934-a043-d1913a24de0c","x":2279,"y":4193,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3070,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"10e2f3e9-2995-47e0-9456-ed375eb610b7":{"BinaryUI":{"from":{"id":"0b3e9de0-d139-4934-a043-d1913a24de0c","x":2190,"y":4193,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"d64c3d2d-51d9-4586-b8e7-0b23aea46f49":{"IsaUI":{"from":{"id":"0b3e9de0-d139-4934-a043-d1913a24de0c","x":2232,"y":4313,"offset":{"x":20,"y":20},"dir":"South"},"to":[{"id":"70932b40-f444-4341-bb19-0a29d1daecbe","x":2201,"y":4436,"offset":{"x":20,"y":20},"dir":"North"},{"id":"32dbb54a-9693-4847-9278-7c956ea045f8","x":2371,"y":4434,"offset":{"x":20,"y":20},"dir":"North"},{"id":"122e4157-381f-400f-ac30-a1c8a2a9e8c1","x":2054,"y":4434,"offset":{"x":20,"y":20},"dir":"North"},{"id":"17db2afc-ae6c-4e53-a527-48516811fe3e","x":1902,"y":4435,"offset":{"x":20,"y":20},"dir":"North"},{"id":"30abb231-4248-4ffa-9a69-e0eb6bb9dbbd","x":1752,"y":4435,"offset":{"x":20,"y":20},"dir":"North"}]}},"497076d2-1625-446b-b663-d75f5c2e2a3c":{"BinaryUI":{"from":{"id":"0dc0e921-e7ff-4766-9738-e6e312f7f0de","x":2608,"y":4207,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3147,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"f42505df-9843-4914-97bc-c665dfbc2dcc":{"BinaryUI":{"from":{"id":"79571896-9798-44a3-acef-5aa2d9773b93","x":2964,"y":2085,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2920,"y":2532,"offset":{"x":20,"y":20},"dir":"East"}}},"dfa0880b-de0a-4d0f-9f42-7ed496af35ea":{"BinaryUI":{"from":{"id":"79571896-9798-44a3-acef-5aa2d9773b93","x":2991,"y":2085,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","x":2949,"y":2850,"offset":{"x":20,"y":20},"dir":"East"}}},"7fb6cd7d-16c0-43bc-9e29-f645c644afe1":{"BinaryUI":{"from":{"id":"79571896-9798-44a3-acef-5aa2d9773b93","x":3088,"y":2016,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"97f815f0-dcc4-4bd3-843d-13ff1dc5802c","x":3673,"y":1656,"offset":{"x":20,"y":20},"dir":"West"}}},"f72fcd31-7056-4425-b0ce-7734a759e616":{"BinaryUI":{"from":{"id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","x":3645,"y":4149,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3407,"y":2410,"offset":{"x":20,"y":20},"dir":"East"}}},"b197d992-e4d6-4663-a6da-b46906374684":{"IsaUI":{"from":{"id":"bf69c9af-f268-4c9b-8e67-4497eb490478","x":3779,"y":2537,"offset":{"x":20,"y":20},"dir":"South"},"to":[{"id":"141350e6-b62d-4a6d-9ea2-47333e51e3ea","x":3379,"y":2594,"offset":{"x":20,"y":20},"dir":"South"},{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4273,"y":2580,"offset":{"x":20,"y":20},"dir":"South"},{"id":"7eaea922-8807-4c38-a704-0143e0594664","x":4544,"y":1827,"offset":{"x":20,"y":20},"dir":"South"}]}},"7022f5ed-020f-453f-bcab-8e632ca03b6e":{"BinaryUI":{"from":{"id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","x":3575,"y":4149,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"bf69c9af-f268-4c9b-8e67-4497eb490478","x":3725,"y":2537,"offset":{"x":20,"y":20},"dir":"South"}}},"1ec425ff-8b5a-49bf-87cb-9863defb9320":{"BinaryUI":{"from":{"id":"1e7a66b2-f559-4c21-b8e6-969999ed171d","x":2457,"y":2914,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3128,"offset":{"x":20,"y":20},"dir":"West"}}},"99d07c03-f3ce-42d7-bb64-8bde65c79dd6":{"BinaryUI":{"from":{"id":"1e7a66b2-f559-4c21-b8e6-969999ed171d","x":2510,"y":2803,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2668,"y":2584,"offset":{"x":20,"y":20},"dir":"West"}}},"3088e0b8-de0a-45d2-95fb-e8804c9c03fa":{"BinaryUI":{"from":{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":4029,"y":2866,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"6c7969f3-f150-4975-a989-a7bc8164b168","x":4029,"y":2997,"offset":{"x":20,"y":20},"dir":"North"}}},"a640575d-a105-4ad5-b786-6e7fb55a0b94":{"IsaUI":{"from":{"id":"222307c0-668c-43f9-9368-34cc048f0ae3","x":1359,"y":3810,"offset":{"x":20,"y":20},"dir":"West"},"to":[{"id":"6187076b-e765-4e6b-af28-f577eba40b5e","x":1226,"y":3784,"offset":{"x":20,"y":20},"dir":"East"},{"id":"41b7bda7-f5a2-4c94-af22-fedbe8d6f287","x":1227,"y":3906,"offset":{"x":20,"y":20},"dir":"East"}]}},"d32059a8-46ed-4ceb-9b92-5f661b98f4e6":{"IsaUI":{"from":{"id":"f7fc16ac-6a23-4f5d-a04c-1163617701c1","x":1273,"y":3540,"offset":{"x":20,"y":20},"dir":"West"},"to":[{"id":"80f73c4e-caf1-4e1f-a634-00965f6ad032","x":1112,"y":3455,"offset":{"x":20,"y":20},"dir":"East"},{"id":"0ad229c4-1782-4783-b64e-0d15fe482463","x":1113,"y":3597,"offset":{"x":20,"y":20},"dir":"East"}]}},"cfe90847-d888-4245-bb66-901855bb0051":{"BinaryUI":{"from":{"id":"95e17479-07a5-41b1-9930-1b9b520514f6","x":3861,"y":2655,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"c4723d6d-1584-49bd-80f1-4c700185746e","x":4645,"y":2569,"offset":{"x":20,"y":20},"dir":"South"}}},"45c4a4f5-e54b-45d2-bea6-617723a92b70":{"BinaryUI":{"from":{"id":"95e17479-07a5-41b1-9930-1b9b520514f6","x":3552,"y":2676,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2913,"y":2587,"offset":{"x":20,"y":20},"dir":"South"}}},"14f71b3f-b918-4376-8e75-7333e85ca536":{"BinaryUI":{"from":{"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","x":2029,"y":2995,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","x":2029,"y":3059,"offset":{"x":20,"y":20},"dir":"West"}}},"8d8db4b1-8c90-472b-bc98-88fa6a2188d1":{"BinaryUI":{"from":{"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","x":2284,"y":3042,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"95e17479-07a5-41b1-9930-1b9b520514f6","x":3660,"y":2739,"offset":{"x":20,"y":20},"dir":"South"}}},"44ad55c5-bb62-4864-90e7-e992494786aa":{"BinaryUI":{"from":{"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","x":2261,"y":2973,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2682,"y":2587,"offset":{"x":20,"y":20},"dir":"South"}}},"c3dba39c-fe1e-49e0-9a45-8f872b6aa4c5":{"BinaryUI":{"from":{"id":"f192b162-8ada-4128-8805-1953e9165c54","x":2289,"y":2733,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2668,"y":2565,"offset":{"x":20,"y":20},"dir":"West"}}},"f1c15ada-631b-4249-8c73-4e52391a532f":{"BinaryUI":{"from":{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3100,"y":2336,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"7178e7a4-5131-504b-a7b3-c2c0cfedf343","x":2899,"y":2336,"offset":{"x":20,"y":20},"dir":"East"}}},"a5ac6af9-3cef-49e5-8d01-462817e1d641":{"IsaUI":{"from":{"id":"c4723d6d-1584-49bd-80f1-4c700185746e","x":4708,"y":2569,"offset":{"x":20,"y":20},"dir":"South"},"to":[{"id":"7794ada6-49c3-4bf0-991f-828c6583ebb8","x":4910,"y":2694,"offset":{"x":20,"y":20},"dir":"North"},{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":4047,"y":2738,"offset":{"x":20,"y":20},"dir":"North"}]}},"868b4a28-0d2f-4d78-b947-66f44c3bdaf9":{"BinaryUI":{"from":{"id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","x":2961,"y":4187,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","x":3129,"y":4188,"offset":{"x":20,"y":20},"dir":"West"}}},"ca33902a-c6f2-45a5-9273-cf80a579cedd":{"BinaryUI":{"from":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4151,"y":2533,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"f192b162-8ada-4128-8805-1953e9165c54","x":2277,"y":2660,"offset":{"x":20,"y":20},"dir":"North"}}},"d440f204-2694-4438-b618-721a9108070f":{"BinaryUI":{"from":{"id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","x":3647,"y":2270,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"b7483723-222d-4f08-b7b9-e8b14f0308cf","x":2418,"y":1431,"offset":{"x":20,"y":20},"dir":"East"}}},"18c4566d-a7b7-4b1d-8e0b-470fddbaab9b":{"BinaryUI":{"from":{"id":"c8fcd612-6ca8-469a-824c-de218e4fd075","x":4738,"y":1620,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2920,"y":2473,"offset":{"x":20,"y":20},"dir":"East"}}},"33b9b943-0d44-4490-b20a-35c110ae9473":{"IsaUI":{"from":{"id":"7eaea922-8807-4c38-a704-0143e0594664","x":4549,"y":1722,"offset":{"x":20,"y":20},"dir":"North"},"to":[{"id":"4b6c7fde-0878-4947-b960-bc73a4558c60","x":4302,"y":1619,"offset":{"x":20,"y":20},"dir":"South"},{"id":"e6fbeeb8-6ade-46a2-bb52-9c99d06918b2","x":4518,"y":1618,"offset":{"x":20,"y":20},"dir":"South"},{"id":"c8fcd612-6ca8-469a-824c-de218e4fd075","x":4694,"y":1620,"offset":{"x":20,"y":20},"dir":"South"}]}},"4ce09575-5a2c-40c5-b766-bb12ef0c1600":{"BinaryUI":{"from":{"id":"7eaea922-8807-4c38-a704-0143e0594664","x":4599,"y":1827,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","x":4429,"y":1987,"offset":{"x":20,"y":20},"dir":"East"}}},"193d881e-9afd-4b9e-a431-cdb113a7ee88":{"BinaryUI":{"from":{"id":"52143d28-8474-44bc-b63f-e654150888d3","x":2860,"y":3152,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3152,"offset":{"x":20,"y":20},"dir":"West"}}},"badf3d57-aba3-4757-b0e4-9d0e7b55f2ea":{"AssociativeUI":{"from":{"x":3100,"y":3208},"middle":{"id":"6094aad5-613b-42b6-8f48-c3b9e2161aa9","x":2933,"y":3296,"offset":{"x":0,"y":0},"dir":"North"},"one":{"id":"52143d28-8474-44bc-b63f-e654150888d3","x":2860,"y":3206,"offset":{"x":-160,"y":50},"dir":"East"},"other":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3207,"offset":{"x":20,"y":20},"dir":"West"}}},"08512716-f1d3-4a88-bd38-aea9ae0f9ca7":{"BinaryUI":{"from":{"id":"6094aad5-613b-42b6-8f48-c3b9e2161aa9","x":2874,"y":3296,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3231,"offset":{"x":20,"y":20},"dir":"West"}}},"0ed07f33-0bbb-497d-9823-9247fc520e85":{"BinaryUI":{"from":{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":4107,"y":2835,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":4107,"y":2757,"offset":{"x":20,"y":20},"dir":"East"}}},"cea29749-dc0f-40c0-adf9-4c21b187751e":{"IsaUI":{"from":{"id":"3874760d-0104-4670-ba8b-1af413c5ec4a","x":3995,"y":4317,"offset":{"x":20,"y":20},"dir":"South"},"to":[{"id":"6822b78e-e5ca-4c40-ba9d-cf7a69d4fdc7","x":3864,"y":4431,"offset":{"x":20,"y":20},"dir":"North"},{"id":"910e3a08-5e99-47a5-bde4-3e35cf9f00da","x":4143,"y":4431,"offset":{"x":20,"y":20},"dir":"North"}]}},"599c1454-9525-4386-b50f-4fdee4b08373":{"IsaUI":{"from":{"id":"31deb355-b737-43a6-ae88-199bb51f940d","x":3692,"y":3110,"offset":{"x":20,"y":20},"dir":"North"},"to":[{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3407,"y":2355,"offset":{"x":20,"y":20},"dir":"East"},{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","x":4276,"y":2043,"offset":{"x":20,"y":20},"dir":"South"}]}},"9f2917c8-b17b-4ab2-8c6e-0269a0b80681":{"BinaryUI":{"from":{"id":"39060ea9-5d45-4954-a29f-ba88e01e7217","x":3718,"y":3753,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"39060ea9-5d45-4954-a29f-ba88e01e7217","x":3718,"y":3822,"offset":{"x":20,"y":20},"dir":"East"}}},"3c241319-416a-4195-ae80-fa4439198c1c":{"BinaryUI":{"from":{"id":"d546feef-91df-49ea-ac61-430bdcf9832c","x":3861,"y":3977,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","x":3722,"y":3978,"offset":{"x":20,"y":20},"dir":"East"}}},"12003437-2898-4b1d-ba27-b1cc69d8dbb2":{"BinaryUI":{"from":{"id":"39060ea9-5d45-4954-a29f-ba88e01e7217","x":3651,"y":3842,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","x":3651,"y":3922,"offset":{"x":20,"y":20},"dir":"North"}}},"940f5aba-58f5-46fa-bbba-43fc6b10a3fe":{"BinaryUI":{"from":{"id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","x":3565,"y":3922,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"39060ea9-5d45-4954-a29f-ba88e01e7217","x":3565,"y":3842,"offset":{"x":20,"y":20},"dir":"South"}}},"42c18b66-d259-40d1-a77d-0c0e76080a6d":{"BinaryUI":{"from":{"id":"4856978f-20be-4b59-8bf6-b941091119a9","x":3160,"y":2974,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3159,"y":3115,"offset":{"x":20,"y":20},"dir":"North"}}},"04ae2e8d-c499-4068-88bd-015b0bba57bf":{"BinaryUI":{"from":{"id":"dbada891-ca0d-4fbc-8371-9f9234867bd6","x":2304,"y":2366,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2668,"y":2526,"offset":{"x":20,"y":20},"dir":"West"}}},"e4734a39-1f45-400f-937a-285e2fad31a4":{"BinaryUI":{"from":{"id":"290f49d3-8ce7-408e-be14-611b66db9687","x":3331,"y":2157,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3331,"y":2270,"offset":{"x":20,"y":20},"dir":"North"}}},"da1d6545-b9d6-499e-9175-fd2a340b1f2e":{"BinaryUI":{"from":{"id":"290f49d3-8ce7-408e-be14-611b66db9687","x":3203,"y":2031,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"290f49d3-8ce7-408e-be14-611b66db9687","x":3320,"y":2031,"offset":{"x":20,"y":20},"dir":"North"}}},"c8a4b21a-62c3-4fbd-8799-2b55d93d951c":{"BinaryUI":{"from":{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3218,"y":2270,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"290f49d3-8ce7-408e-be14-611b66db9687","x":3217,"y":2157,"offset":{"x":20,"y":20},"dir":"South"}}},"23ef9104-65a5-4b32-943f-a2db064c699f":{"BinaryUI":{"from":{"id":"95e17479-07a5-41b1-9930-1b9b520514f6","x":3598,"y":2739,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","x":2284,"y":3004,"offset":{"x":20,"y":20},"dir":"East"}}},"94b3bb70-e939-46bd-ae53-c01cd74430c1":{"BinaryUI":{"from":{"id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","x":4123,"y":1815,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","x":4124,"y":1919,"offset":{"x":20,"y":20},"dir":"North"}}},"7d003f0e-c38b-41fa-ae33-6333d9831146":{"BinaryUI":{"from":{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","x":4236,"y":1919,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","x":4236,"y":1815,"offset":{"x":20,"y":20},"dir":"South"}}},"fe6e5298-d4bb-447e-bffa-b4c38274abfd":{"BinaryUI":{"from":{"id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","x":4118,"y":1690,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","x":4240,"y":1691,"offset":{"x":20,"y":20},"dir":"North"}}},"2b46b080-32c8-4a2e-a118-d6a4bd4afc62":{"BinaryUI":{"from":{"id":"b28be6c2-a37a-4049-9110-52136f892fc4","x":4388,"y":2186,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"b28be6c2-a37a-4049-9110-52136f892fc4","x":4285,"y":2186,"offset":{"x":20,"y":20},"dir":"North"}}},"b7eb881e-d4f4-49c8-aba9-482a8c3935c5":{"BinaryUI":{"from":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4322,"y":2420,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"b28be6c2-a37a-4049-9110-52136f892fc4","x":4322,"y":2326,"offset":{"x":20,"y":20},"dir":"South"}}},"b66c47bf-a2e0-4d78-bc54-9116348c0ad8":{"BinaryUI":{"from":{"id":"b28be6c2-a37a-4049-9110-52136f892fc4","x":4400,"y":2326,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4400,"y":2420,"offset":{"x":20,"y":20},"dir":"North"}}},"63ae3d27-ef09-4bfd-860c-a456b81f0944":{"BinaryUI":{"from":{"id":"dbc37f2f-0a90-4a8b-a217-d4a70a606695","x":5349,"y":3641,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"d30d2b03-732b-41bb-89ed-d053750bf987","x":4631,"y":3643,"offset":{"x":20,"y":20},"dir":"East"}}},"e2679c18-f646-4edd-b5ea-d8bd80b8ef2e":{"BinaryUI":{"from":{"id":"80bf1ba4-2f74-45db-a1b1-6b76e82b2013","x":5345,"y":3378,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3210,"offset":{"x":20,"y":20},"dir":"East"}}},"a6f35d3b-6648-496a-97b6-0ea433ad194a":{"IsaUI":{"from":{"id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","x":5196,"y":3501,"offset":{"x":20,"y":20},"dir":"East"},"to":[{"id":"80bf1ba4-2f74-45db-a1b1-6b76e82b2013","x":5345,"y":3411,"offset":{"x":20,"y":20},"dir":"West"},{"id":"dbc37f2f-0a90-4a8b-a217-d4a70a606695","x":5349,"y":3599,"offset":{"x":20,"y":20},"dir":"West"}]}},"8ada5f43-06ce-4ea9-89a1-d955b28d6228":{"BinaryUI":{"from":{"id":"0e1e683a-fe89-4002-88fa-efd50d66de6c","x":4698,"y":3537,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","x":4895,"y":3535,"offset":{"x":20,"y":20},"dir":"West"}}},"f66ed644-ae0e-40a6-b369-d096ad752293":{"BinaryUI":{"from":{"id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","x":5160,"y":3449,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","x":5091,"y":3449,"offset":{"x":20,"y":20},"dir":"North"}}},"20cfb547-cc76-4b36-b747-6ab607ffe55f":{"BinaryUI":{"from":{"id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","x":4895,"y":3487,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"0e1e683a-fe89-4002-88fa-efd50d66de6c","x":4698,"y":3487,"offset":{"x":20,"y":20},"dir":"East"}}},"12c5362d-b2d7-4e5a-ab1f-406d4388517b":{"BinaryUI":{"from":{"id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","x":3932,"y":2336,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","x":4165,"y":2043,"offset":{"x":20,"y":20},"dir":"South"}}},"3e1d9c90-8606-462b-a052-34ea03629f4a":{"BinaryUI":{"from":{"id":"47abdb96-0225-4880-a472-9c714086e2b5","x":3097,"y":3818,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3170,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}}}}}},"objects":{"ids":["b8ec6afc-ddbd-53d6-9be3-e4b738941c2f","7178e7a4-5131-504b-a7b3-c2c0cfedf343","45644594-b418-5362-9294-a62fe2a0fa8e","2e277e34-ab6f-4028-9c52-935c31520fec","e68f8912-9897-4cbd-b363-cb4203a726a9","141350e6-b62d-4a6d-9ea2-47333e51e3ea","88687f76-5d9e-404e-a801-f6f57f9b30ca","d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","c89e362d-7905-4226-8713-97d3d6f05037","94fc0044-4b88-4f5c-ac60-3a44262ade10","f192b162-8ada-4128-8805-1953e9165c54","954b354f-3a90-440b-ab0f-43efc00d275e","0365b40c-c40a-4653-84ab-44d1c12d294f","9352c766-9f6b-413b-9ea0-13f9c8e4d86e","30c31621-a4bd-4356-80b9-1226e00651c9","6c7969f3-f150-4975-a989-a7bc8164b168","c32fcb6d-b505-492f-95c8-5f118079a399","59f269ab-2dbc-4b07-b9bc-48441f20e78f","b359d531-77ae-436f-9f0d-6a5632f1648e","ce2da156-e0fd-4e56-bb31-2030d4e0c599","dbbb7d46-4072-49a6-b483-cc8b25cbb4ea","a8b86e41-5b04-4469-8a10-91bd89603e27","d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5","dc6d1ffa-5dca-43ef-b973-0628ab580cb7","a16027c2-9a1d-42b7-ab37-a4e8e0bb7e4d","b1612607-a813-4bc2-896b-88ec4b249447","d30d2b03-732b-41bb-89ed-d053750bf987","fa42f4e2-1ff3-473f-a4b9-593c01134e96","d715c5f9-23f8-45e0-a1df-34e27acd01f5","43bebcb3-06a1-410d-a19e-b3c1c6d1fa6b","6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656","d546feef-91df-49ea-ac61-430bdcf9832c","3874760d-0104-4670-ba8b-1af413c5ec4a","1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","846aa191-7b0c-4325-8c21-09fa5edf7c78","26dba2c5-a7e9-4556-a9c2-79091a97b941","75a16785-d611-45ce-b52c-284a9da0b4b8","01c8907d-cb59-4fae-a3ca-8cb331d18387","79069fc2-4d65-4073-b610-4afc0488de5c","23a9a479-68e7-4a70-bcef-9041f10fd287","3a1c7f6a-459d-4eba-9291-2aebb9bf60c9","a9b74602-bdc5-481f-af4c-8021553b895a","cdb1afaf-245c-4d56-bfea-10f69e45007d","b7483723-222d-4f08-b7b9-e8b14f0308cf","97f815f0-dcc4-4bd3-843d-13ff1dc5802c","72443b79-5645-4b5f-b317-e1a8f815b81c","93f288e7-d670-40a6-91f3-2006b5efa8b4","e1321ffa-07d5-480d-89f9-227b13d27ce1","3f7fd816-518b-4b9e-8134-3059e78045a0","c46e6b80-0365-429a-abf9-ca75ce4f469a","9c8bc563-b596-4348-9189-065d747f7c9f","1b4e5b3a-a9b2-4316-94c4-ff34d4d3d523","e3329a9e-1c52-44f6-a1f7-fc85f7362e9e","484e429b-bf54-45cb-9b87-baddf7fb5f5b","c47b8696-7e98-4733-ab33-a4dca7b61d01","e05ab5f3-17e7-4594-8ce0-c02d793a1df9","ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","4d5720eb-da8c-493d-ab8d-cb6111dd6099","6767c0cf-4041-4047-b2b4-d7375f33bc97","35b3de4e-46b8-490f-8e30-c305ed348a78","d8b554d4-03ac-4613-a3e0-fc0b901bfd70","0edc535b-405d-4dd5-bcd2-f5772ab116c2","0b3e9de0-d139-4934-a043-d1913a24de0c","70932b40-f444-4341-bb19-0a29d1daecbe","32dbb54a-9693-4847-9278-7c956ea045f8","0dc0e921-e7ff-4766-9738-e6e312f7f0de","122e4157-381f-400f-ac30-a1c8a2a9e8c1","17db2afc-ae6c-4e53-a527-48516811fe3e","30abb231-4248-4ffa-9a69-e0eb6bb9dbbd","ba8a3bbf-86a8-47e2-92bb-f41878981c41","79571896-9798-44a3-acef-5aa2d9773b93","5c85a8db-e4cc-4e38-9922-58d93773f4f0","bf69c9af-f268-4c9b-8e67-4497eb490478","ce73a111-4670-411e-9bd2-f3308d6399c9","1e7a66b2-f559-4c21-b8e6-969999ed171d","80f73c4e-caf1-4e1f-a634-00965f6ad032","222307c0-668c-43f9-9368-34cc048f0ae3","6187076b-e765-4e6b-af28-f577eba40b5e","f7fc16ac-6a23-4f5d-a04c-1163617701c1","0ad229c4-1782-4783-b64e-0d15fe482463","b8d3d40e-462e-4e4d-9fb4-b7d54f9fd03a","470246f6-91ec-4993-b915-93480d0f4eb9","f6a3ce12-18e1-4675-ab94-6b2a7c91d951","41b7bda7-f5a2-4c94-af22-fedbe8d6f287","84f1c5fd-d907-4653-a132-bfd420ad9212","efde0481-1599-4c5c-bf30-51dbd4a8ed83","95e17479-07a5-41b1-9930-1b9b520514f6","8d86dceb-7e6e-4767-8a3f-cbbde458ad93","68e7191a-fe94-423f-8a5d-5551384ae998","c4723d6d-1584-49bd-80f1-4c700185746e","7794ada6-49c3-4bf0-991f-828c6583ebb8","d48d948b-5291-4eb3-ba35-7ab1c1ffa098","7eaea922-8807-4c38-a704-0143e0594664","4b6c7fde-0878-4947-b960-bc73a4558c60","e6fbeeb8-6ade-46a2-bb52-9c99d06918b2","c8fcd612-6ca8-469a-824c-de218e4fd075","52143d28-8474-44bc-b63f-e654150888d3","ab7a5708-6d12-4dce-b488-fa3a3b480510","6094aad5-613b-42b6-8f48-c3b9e2161aa9","6822b78e-e5ca-4c40-ba9d-cf7a69d4fdc7","910e3a08-5e99-47a5-bde4-3e35cf9f00da","31deb355-b737-43a6-ae88-199bb51f940d","39060ea9-5d45-4954-a29f-ba88e01e7217","4856978f-20be-4b59-8bf6-b941091119a9","dbada891-ca0d-4fbc-8371-9f9234867bd6","290f49d3-8ce7-408e-be14-611b66db9687","7056c5ba-4f49-404f-abd5-e5c6a5879fac","b28be6c2-a37a-4049-9110-52136f892fc4","0e1e683a-fe89-4002-88fa-efd50d66de6c","d39c987f-bba2-4956-963f-7e9c6c3fe4b4","dbc37f2f-0a90-4a8b-a217-d4a70a606695","80bf1ba4-2f74-45db-a1b1-6b76e82b2013","1a5eca02-909e-434c-bd35-b02f2b7dbe22","dfb72d5a-91a4-4023-a7a9-baef28bed978","47abdb96-0225-4880-a472-9c714086e2b5"],"entities":{"b8ec6afc-ddbd-53d6-9be3-e4b738941c2f":{"id":"b8ec6afc-ddbd-53d6-9be3-e4b738941c2f","key_letter":"T","name":"Type","description":"The type of a value\n\nThere are several values available: [Integer], [Boolean], [Float], [String], and [UUID].\n\n# Object imported from the sarzak Domain.\n\nWe don’t have a means of representing this as imported in Cuckoo, so I’m just adding it here.\n\n🐶 { \"imported_object\": { \"domain\": \"crate::v2::sarzak\", \"model_file\": \"models/sarzak.json\", \"id\": \"b8ec6afc-ddbd-53d6-9be3-e4b738941c2f\"}}\n","attributes":{"52783e59-f28c-5a8b-8947-12d60c2d49d0":{"id":"52783e59-f28c-5a8b-8947-12d60c2d49d0","name":"id","type":"Uuid"}}},"7178e7a4-5131-504b-a7b3-c2c0cfedf343":{"id":"7178e7a4-5131-504b-a7b3-c2c0cfedf343","key_letter":"OBJ","name":"Object","description":"An `Object` is a collection of related data. By creating `Object`s, and \nconnecting them with `Relationships` we build a powerful abstraction.\n\n`Object`s contain [Attribute]s that represent the data that the \n`Object`encapsulates. All `Object`s have an attribute called `id`, which \nis a unique idenifier for each class of `Object`. The `id` attribute is a\nversion 5 UUID.\n\n# Object imported from the sarzak Domain.\n\nWe don’t have a means of representing this as imported in Cuckoo, so I’m just adding it here.\n\n🐶 { \"imported_object\": { \"domain\": \"crate::v2::sarzak\", \"model_file\": \"models/sarzak.json\", \"id\": \"7178e7a4-5131-504b-a7b3-c2c0cfedf343\"}}","attributes":{"a37b26e0-49fb-5be8-95a8-fb563ab81cc4":{"id":"a37b26e0-49fb-5be8-95a8-fb563ab81cc4","name":"id","type":"Uuid"},"d01da69e-bf98-5825-a9f6-9ce0405417f1":{"id":"d01da69e-bf98-5825-a9f6-9ce0405417f1","name":"name","type":"String"},"a24410b8-5736-5216-b4ca-a4a7c70eb388":{"id":"a24410b8-5736-5216-b4ca-a4a7c70eb388","name":"key letters","type":"String"},"75f8f112-c966-5cbf-aebe-b377b488905b":{"id":"75f8f112-c966-5cbf-aebe-b377b488905b","name":"description","type":"String"}}},"45644594-b418-5362-9294-a62fe2a0fa8e":{"id":"45644594-b418-5362-9294-a62fe2a0fa8e","key_letter":"I","name":"Item","description":"","attributes":{"045ccee5-86de-4081-8d64-613e2e38a993":{"id":"045ccee5-86de-4081-8d64-613e2e38a993","name":"id","type":"Uuid"}}},"2e277e34-ab6f-4028-9c52-935c31520fec":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","key_letter":"TYP","name":"Value Type","description":"Value Type\n\nThis is the main type abstraction used in Lu Dog. We mostly rely on what is available in Sarzak, with two additions: ...\n\nTwo? I know that I need an Option<>. I'm not so sure about a & though. Everything from the store is going to be by UUID, so all of my references are really \"pointers\" underneath. I want them to be typed in the code though.\n\nSo how will the code work? We could store the type next to the pointer: (type, uuid). Huh. This is the eventual output domain. How does that affect my thinking?\n\nThis should end up looking like woog, but simpler. Woog was for generating rust. I want to generate dwarf. Dwarf needs to be typed? If so, when are they resolved to uuid's eventually? \n\nOption for now. We'll see later...","attributes":{"2b4f587e-1528-5813-b970-9560d145f091":{"id":"2b4f587e-1528-5813-b970-9560d145f091","name":"id","type":"Uuid"},"c0a01d29-455b-4dfc-a009-aa39f0a0756d":{"id":"c0a01d29-455b-4dfc-a009-aa39f0a0756d","name":"bogus","type":"Boolean"}}},"e68f8912-9897-4cbd-b363-cb4203a726a9":{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","key_letter":"ST","name":"Struct","description":"A Type from the Model\n\nThis is really just an alias for `[Object]`.","attributes":{"e12db790-b02b-500e-9a6f-742378146a45":{"id":"e12db790-b02b-500e-9a6f-742378146a45","name":"id","type":"Uuid"},"3dde88a1-93c8-413d-b335-66a1f5f755f3":{"id":"3dde88a1-93c8-413d-b335-66a1f5f755f3","name":"name","type":"String"},"ade762f0-1a7c-4d61-ae83-bbcace50c8b0":{"id":"ade762f0-1a7c-4d61-ae83-bbcace50c8b0","name":"path","type":"String"}}},"141350e6-b62d-4a6d-9ea2-47333e51e3ea":{"id":"141350e6-b62d-4a6d-9ea2-47333e51e3ea","key_letter":"F","name":"Field","description":"A Field in a data structure\n\nA field has a name, and a type.","attributes":{"add99bda-d83f-558e-b54e-6373a658d0b6":{"id":"add99bda-d83f-558e-b54e-6373a658d0b6","name":"id","type":"Uuid"},"3f2dcff1-5f2e-4279-8d54-537cbb477874":{"id":"3f2dcff1-5f2e-4279-8d54-537cbb477874","name":"name","type":"String"}}},"88687f76-5d9e-404e-a801-f6f57f9b30ca":{"id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","key_letter":"IMPL","name":"Implementation Block","description":"An Implementation Block\n\nInside this block functions are defined on a [`ModellType`].","attributes":{"69046536-f9f1-4c70-99c8-bf778c90cdea":{"id":"69046536-f9f1-4c70-99c8-bf778c90cdea","name":"id","type":"Uuid"}}},"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","key_letter":"FUNC","name":"Function","description":"A Function\n\nInputs, outputs. Stuff happens.","attributes":{"fda10b16-e061-4547-9ef1-0ab085270b88":{"id":"fda10b16-e061-4547-9ef1-0ab085270b88","name":"id","type":"Uuid"},"96a8868d-e8e7-4788-a81e-cc4b1210c85b":{"id":"96a8868d-e8e7-4788-a81e-cc4b1210c85b","name":"name","type":"String"}}},"c89e362d-7905-4226-8713-97d3d6f05037":{"id":"c89e362d-7905-4226-8713-97d3d6f05037","key_letter":"IMP","name":"Import","description":"An Import of a foreign ObjectStore\n\nThis indicates to the downstream model compiler that it needs to emit code to load the imported ObjectStore.\n\nI've got this has_alias boolean here because I don't have `Option`. I never needed it until now, because you get an option with a 1c relationship. Not proud of this, but it's the best alternative. Makes me wonder about adding an `Option` type to the primitives though.\n\nI suppose if there were a way to signify a null string. Or I could check if it's length is 0. I think adding the bool is cleaner.","attributes":{"8f8af328-cd2f-435d-8d29-b7bce353a0c7":{"id":"8f8af328-cd2f-435d-8d29-b7bce353a0c7","name":"id","type":"Uuid"},"7e6b9c84-ae9e-46d6-a5d6-5899e57c4687":{"id":"7e6b9c84-ae9e-46d6-a5d6-5899e57c4687","name":"path","type":"String"},"e1f19a18-4287-42b2-b767-5dc9cca24d6b":{"id":"e1f19a18-4287-42b2-b767-5dc9cca24d6b","name":"alias","type":"String"},"f5a8a036-bc55-44c0-8ae6-f03267b19032":{"id":"f5a8a036-bc55-44c0-8ae6-f03267b19032","name":"name","type":"String"},"002b29e8-97cc-4b8a-a339-db79f2306729":{"id":"002b29e8-97cc-4b8a-a339-db79f2306729","name":"has_alias","type":"Boolean"}}},"94fc0044-4b88-4f5c-ac60-3a44262ade10":{"id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","key_letter":"VAL","name":"Value","description":"A Value\n\nA value has a Type.","attributes":{"87e26364-f525-4e59-8db0-eea6c972e140":{"id":"87e26364-f525-4e59-8db0-eea6c972e140","name":"id","type":"Uuid"}}},"f192b162-8ada-4128-8805-1953e9165c54":{"id":"f192b162-8ada-4128-8805-1953e9165c54","key_letter":"PARAM","name":"Parameter","description":"A Parameter to a Function\n\nFrom inside the function it's a parameter, from outside it's an argument. No idea why I wrote that — just looking for content... I mean, what else do you say about a parameter?","attributes":{"8ecf5553-7599-46d0-a3fe-e6b70c64d31f":{"id":"8ecf5553-7599-46d0-a3fe-e6b70c64d31f","name":"id","type":"Uuid"},"fe25d7e5-24ba-4d7a-9fd9-1bfc00b7f484":{"id":"fe25d7e5-24ba-4d7a-9fd9-1bfc00b7f484","name":"position","type":"Integer"}}},"954b354f-3a90-440b-ab0f-43efc00d275e":{"id":"954b354f-3a90-440b-ab0f-43efc00d275e","key_letter":"VAR","name":"Variable","description":"A Variable\n\nA variable in a function. It may be either a local variable or a parameter.\n\nA variable has a name, and and indirectly, via [`Value`], a type.","attributes":{"911aac13-fab4-4060-9ced-a807bb398f20":{"id":"911aac13-fab4-4060-9ced-a807bb398f20","name":"id","type":"Uuid"},"0afbe372-cdd7-4956-b174-e7126efd5540":{"id":"0afbe372-cdd7-4956-b174-e7126efd5540","name":"name","type":"String"}}},"0365b40c-c40a-4653-84ab-44d1c12d294f":{"id":"0365b40c-c40a-4653-84ab-44d1c12d294f","key_letter":"L_VAR","name":"Local Variable","description":"A Local Variable in a Block\n\nNote that a variable is an \"l-value\", so it represents a specific memory location.","attributes":{"53cfecb3-d4b2-4cb9-969d-964f7fdfc93e":{"id":"53cfecb3-d4b2-4cb9-969d-964f7fdfc93e","name":"id","type":"Uuid"},"546f0286-9be0-41e9-ad65-82b9b711f545":{"id":"546f0286-9be0-41e9-ad65-82b9b711f545","name":"bug","type":"Uuid"}}},"9352c766-9f6b-413b-9ea0-13f9c8e4d86e":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","key_letter":"EXP","name":"Expression","description":"An Expression\n\nExpressions are calculations that render values.","attributes":{"22291a6d-f2ea-49e5-875a-c6fe1557a092":{"id":"22291a6d-f2ea-49e5-875a-c6fe1557a092","name":"id","type":"Uuid"},"bb931661-7614-440a-83c3-86828bfad548":{"id":"bb931661-7614-440a-83c3-86828bfad548","name":"bogus","type":"Boolean"}}},"30c31621-a4bd-4356-80b9-1226e00651c9":{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","key_letter":"BLK_E","name":"Block","description":"A Block Expression\n\nA block expression is an expression that consists of an ordered set of statements, living between an opening `{`, and a closing `}`.\n\nGiven that it's an expression it has a Type. The type is the value of the last expression in the block, if it's not closed by a `;`. If the last statement is terminated thusly, then the value is `[Empty]`, or `()`.\n\nThe `bug` attribute is just there to keep this thing unique. An issue that needs addressing.","attributes":{"09f1ef4c-abf2-4e66-8388-3769cd10f0c4":{"id":"09f1ef4c-abf2-4e66-8388-3769cd10f0c4","name":"id","type":"Uuid"},"fa475d83-dbe2-4a4a-8cd1-fb3dd3a09cdd":{"id":"fa475d83-dbe2-4a4a-8cd1-fb3dd3a09cdd","name":"async","type":"Boolean"},"4e02564f-29ee-465c-a8d7-8219d2cf166a":{"id":"4e02564f-29ee-465c-a8d7-8219d2cf166a","name":"bug","type":"Uuid"}}},"6c7969f3-f150-4975-a989-a7bc8164b168":{"id":"6c7969f3-f150-4975-a989-a7bc8164b168","key_letter":"STMT","name":"Statement","description":"A Statement\n\nA statement is followed by a semi-colon (`;`), and in general yields no value.","attributes":{"9e4082cd-4246-4195-acfc-b120db88105a":{"id":"9e4082cd-4246-4195-acfc-b120db88105a","name":"id","type":"Uuid"},"fe339014-0b8d-4035-b0db-582005b545a2":{"id":"fe339014-0b8d-4035-b0db-582005b545a2","name":"index","type":"Integer"}}},"c32fcb6d-b505-492f-95c8-5f118079a399":{"id":"c32fcb6d-b505-492f-95c8-5f118079a399","key_letter":"LET_S","name":"Let Statement","description":"A Let Statement\n\nThis statement assigns a value from an expression to a local variable.","attributes":{"c959c65f-ce9a-4202-a715-c377c2031978":{"id":"c959c65f-ce9a-4202-a715-c377c2031978","name":"id","type":"Uuid"}}},"59f269ab-2dbc-4b07-b9bc-48441f20e78f":{"id":"59f269ab-2dbc-4b07-b9bc-48441f20e78f","key_letter":"EXP_S","name":"Expression Statement","description":"A statement that consists of just an expression.","attributes":{"27101b62-83cc-4fec-8101-f2fb46b892e0":{"id":"27101b62-83cc-4fec-8101-f2fb46b892e0","name":"id","type":"Uuid"}}},"b359d531-77ae-436f-9f0d-6a5632f1648e":{"id":"b359d531-77ae-436f-9f0d-6a5632f1648e","key_letter":"RES_S","name":"Result Statement","description":"An Expression Statement that is not terminated by a semi-colon, and this yields a result. This is only applicable if it's the last statement in a block.","attributes":{"1e15f699-4dba-4627-a945-385e01c2b11c":{"id":"1e15f699-4dba-4627-a945-385e01c2b11c","name":"id","type":"Uuid"}}},"ce2da156-e0fd-4e56-bb31-2030d4e0c599":{"id":"ce2da156-e0fd-4e56-bb31-2030d4e0c599","key_letter":"I_S","name":"Item Statement","description":"An Item in statement position, i.e., inside of a block.","attributes":{"69657761-9338-408a-925b-d1f5734e02ac":{"id":"69657761-9338-408a-925b-d1f5734e02ac","name":"id","type":"Uuid"}}},"dbbb7d46-4072-49a6-b483-cc8b25cbb4ea":{"id":"dbbb7d46-4072-49a6-b483-cc8b25cbb4ea","key_letter":"LIT_E","name":"Literal","description":"A Literal Expression\n\nThis is any literal value in the program.","attributes":{"28768c3e-8742-4036-9a1f-738ef56d4f2d":{"id":"28768c3e-8742-4036-9a1f-738ef56d4f2d","name":"id","type":"Uuid"},"bf84d71a-ea8c-4c03-b0e6-6367f0963105":{"id":"bf84d71a-ea8c-4c03-b0e6-6367f0963105","name":"bogus","type":"Boolean"}}},"a8b86e41-5b04-4469-8a10-91bd89603e27":{"id":"a8b86e41-5b04-4469-8a10-91bd89603e27","key_letter":"EMPT","name":"Empty","description":"The Empty Type\n\nThis type represents the lack of a type. It's actually sort of a werid construct, because it also implies the lack of a value. How can you have a value without a type?","attributes":{"5c9d0df8-c2f6-4aa8-a7f5-2315da514875":{"id":"5c9d0df8-c2f6-4aa8-a7f5-2315da514875","name":"id","type":"Uuid"}}},"d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5":{"id":"d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5","key_letter":"BOOL_L","name":"Boolean Literal","description":"A Boolean\n\nIt's either `true` or `false`.","attributes":{"292f8c3b-a23d-492e-898e-799b12a0b5ac":{"id":"292f8c3b-a23d-492e-898e-799b12a0b5ac","name":"id","type":"Uuid"},"6426a2cc-2c8e-4309-b4b6-4ac93d3e93ce":{"id":"6426a2cc-2c8e-4309-b4b6-4ac93d3e93ce","name":"bogus","type":"Boolean"}}},"dc6d1ffa-5dca-43ef-b973-0628ab580cb7":{"id":"dc6d1ffa-5dca-43ef-b973-0628ab580cb7","key_letter":"T","name":"True","description":"True Literal\n\nThe literal `true`.","attributes":{"1aae6108-6151-4d10-9bac-91829343583b":{"id":"1aae6108-6151-4d10-9bac-91829343583b","name":"id","type":"Uuid"}}},"a16027c2-9a1d-42b7-ab37-a4e8e0bb7e4d":{"id":"a16027c2-9a1d-42b7-ab37-a4e8e0bb7e4d","key_letter":"F","name":"False","description":"False Literal\n\nThe literal `false`.","attributes":{"e61ae5a6-9598-427e-b576-5d36514f256c":{"id":"e61ae5a6-9598-427e-b576-5d36514f256c","name":"id","type":"Uuid"}}},"b1612607-a813-4bc2-896b-88ec4b249447":{"id":"b1612607-a813-4bc2-896b-88ec4b249447","key_letter":"INT_L","name":"Integer Literal","description":"An Integer\n\nI'm not sure what to do about width. I think I coded it as an i64 in the parser.","attributes":{"d8c8238b-b9cc-49fa-873c-cbaf71f6818d":{"id":"d8c8238b-b9cc-49fa-873c-cbaf71f6818d","name":"id","type":"Uuid"},"f865700c-11cb-48a7-8b8b-a80d2a4623dc":{"id":"f865700c-11cb-48a7-8b8b-a80d2a4623dc","name":"value","type":"Integer"}}},"d30d2b03-732b-41bb-89ed-d053750bf987":{"id":"d30d2b03-732b-41bb-89ed-d053750bf987","key_letter":"STR_L","name":"String Literal","description":"A String\n\nA string is a set of characters enclosed in double quotes. Strings are unicode strings encoded as UTF-8.","attributes":{"42f30de8-2e80-4b48-87f0-e06f1e236111":{"id":"42f30de8-2e80-4b48-87f0-e06f1e236111","name":"id","type":"Uuid"},"9032c943-4f50-4f4a-b9a9-7c17a627ff2d":{"id":"9032c943-4f50-4f4a-b9a9-7c17a627ff2d","name":"value","type":"String"}}},"fa42f4e2-1ff3-473f-a4b9-593c01134e96":{"id":"fa42f4e2-1ff3-473f-a4b9-593c01134e96","key_letter":"FLOT_L","name":"Float Literal","description":"A Floating Point Literal\n\nNothing fancy. No scientific notation.","attributes":{"98c46fba-95d0-4f33-9dab-6b458b39f938":{"id":"98c46fba-95d0-4f33-9dab-6b458b39f938","name":"id","type":"Uuid"},"ba6a66eb-d746-442f-b047-e944973cef84":{"id":"ba6a66eb-d746-442f-b047-e944973cef84","name":"value","type":"Float"}}},"d715c5f9-23f8-45e0-a1df-34e27acd01f5":{"id":"d715c5f9-23f8-45e0-a1df-34e27acd01f5","key_letter":"VAR_E","name":"Variable Expression","description":"A Local Variable Expression\n\nThis is what happens when a variable is an r-value.","attributes":{"7e3b8999-393b-4406-b085-b1335345416a":{"id":"7e3b8999-393b-4406-b085-b1335345416a","name":"id","type":"Uuid"},"f5925078-646c-464a-b99e-f3ef8692c7e2":{"id":"f5925078-646c-464a-b99e-f3ef8692c7e2","name":"name","type":"String"}}},"43bebcb3-06a1-410d-a19e-b3c1c6d1fa6b":{"id":"43bebcb3-06a1-410d-a19e-b3c1c6d1fa6b","key_letter":"NULL","name":"Empty Expression","description":"","attributes":{"c690466c-77c7-449c-a5ae-b402f43c53b5":{"id":"c690466c-77c7-449c-a5ae-b402f43c53b5","name":"id","type":"Uuid"}}},"6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656":{"id":"6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656","key_letter":"PRT_E","name":"Print","description":"A Print Expression?\n\nShold this be a statement?","attributes":{"ee8c61be-204d-493b-b2e9-23ecbca76524":{"id":"ee8c61be-204d-493b-b2e9-23ecbca76524","name":"id","type":"Uuid"}}},"d546feef-91df-49ea-ac61-430bdcf9832c":{"id":"d546feef-91df-49ea-ac61-430bdcf9832c","key_letter":"ST_E","name":"Struct Expression","description":"A Structure Expression\n\nThis is how we create instances in dwarf.","attributes":{"90c445a8-05b7-4942-b0d2-13a7cb18545c":{"id":"90c445a8-05b7-4942-b0d2-13a7cb18545c","name":"id","type":"Uuid"},"37a5a17d-2f7a-4c62-8e8f-37d7a7ec0943":{"id":"37a5a17d-2f7a-4c62-8e8f-37d7a7ec0943","name":"bug","type":"Uuid"}}},"3874760d-0104-4670-ba8b-1af413c5ec4a":{"id":"3874760d-0104-4670-ba8b-1af413c5ec4a","key_letter":"FLD_E","name":"Field Expression","description":"A Struct Field Expression\n\nThis assigns a value to a field in a structure.","attributes":{"ae9d7826-eab6-4baa-b094-62565e236579":{"id":"ae9d7826-eab6-4baa-b094-62565e236579","name":"id","type":"Uuid"}}},"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7":{"id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","key_letter":"FLD_A_E","name":"Field Access","description":"A Struct Field Access\n\nThink dotted notation.","attributes":{"37c7e82a-3674-4c5b-a8b4-3ea5af629001":{"id":"37c7e82a-3674-4c5b-a8b4-3ea5af629001","name":"id","type":"Uuid"}}},"846aa191-7b0c-4325-8c21-09fa5edf7c78":{"id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","key_letter":"ARG_E","name":"Argument","description":"An Argument to a Function Call","attributes":{"f2debbd6-734a-4b2d-9174-ed6bf6a944c6":{"id":"f2debbd6-734a-4b2d-9174-ed6bf6a944c6","name":"id","type":"Uuid"},"78bb4e04-b894-4690-983e-2fdd82a16aba":{"id":"78bb4e04-b894-4690-983e-2fdd82a16aba","name":"position","type":"Integer"}}},"26dba2c5-a7e9-4556-a9c2-79091a97b941":{"id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","key_letter":"CALL_E","name":"Call","description":"A Call, of some sort\n","attributes":{"00200770-a013-4671-b572-3287d58c5eeb":{"id":"00200770-a013-4671-b572-3287d58c5eeb","name":"id","type":"Uuid"},"29b7b08d-838a-4dbc-b6bd-0e7a1bd5462c":{"id":"29b7b08d-838a-4dbc-b6bd-0e7a1bd5462c","name":"arg_check","type":"Boolean"}}},"75a16785-d611-45ce-b52c-284a9da0b4b8":{"id":"75a16785-d611-45ce-b52c-284a9da0b4b8","key_letter":"METH_C","name":"Method Call","description":"A Method Call\n\nThis is when you call a function on an instance of a struct. The name attribute is the name of the method.","attributes":{"7ebdd935-e9a8-423e-a8d3-5c18ac4aff09":{"id":"7ebdd935-e9a8-423e-a8d3-5c18ac4aff09","name":"id","type":"Uuid"},"71021ec0-3099-4cc6-8aaa-c649a1486b1c":{"id":"71021ec0-3099-4cc6-8aaa-c649a1486b1c","name":"name","type":"String"}}},"01c8907d-cb59-4fae-a3ca-8cb331d18387":{"id":"01c8907d-cb59-4fae-a3ca-8cb331d18387","key_letter":"S_METH_C","name":"Static Method Call","description":"A Static Method Call\n\nThis is when you call a function on the type (struct) itself. There is no instance involved in this, although it may return an instance.\n\nThe name attribute is the name of the static method.","attributes":{"4e669862-93f4-4200-913d-03908f60936e":{"id":"4e669862-93f4-4200-913d-03908f60936e","name":"id","type":"Uuid"},"9e03633d-95d9-4fc5-80e8-d46c0da353ad":{"id":"9e03633d-95d9-4fc5-80e8-d46c0da353ad","name":"type","type":"String"},"5e897b18-d6ca-4623-b703-1588452afd3f":{"id":"5e897b18-d6ca-4623-b703-1588452afd3f","name":"func","type":"String"},"e902efa5-5a94-4a9d-a1f4-11b63b4f53e7":{"id":"e902efa5-5a94-4a9d-a1f4-11b63b4f53e7","name":"unique","type":"Uuid"}}},"79069fc2-4d65-4073-b610-4afc0488de5c":{"id":"79069fc2-4d65-4073-b610-4afc0488de5c","key_letter":"NO","name":"Function Call","description":"","attributes":{"8b633cc4-ae54-4516-8952-3b7cdfb9401b":{"id":"8b633cc4-ae54-4516-8952-3b7cdfb9401b","name":"id","type":"Uuid"},"13261330-3d86-44ea-a99a-3d4a828dd9d1":{"id":"13261330-3d86-44ea-a99a-3d4a828dd9d1","name":"name","type":"String"}}},"23a9a479-68e7-4a70-bcef-9041f10fd287":{"id":"23a9a479-68e7-4a70-bcef-9041f10fd287","key_letter":"Tsk","name":"Task","description":"A type to contain a task.","attributes":{"46602550-66dc-4819-9050-a241868d0073":{"id":"46602550-66dc-4819-9050-a241868d0073","name":"id","type":"Uuid"}}},"3a1c7f6a-459d-4eba-9291-2aebb9bf60c9":{"id":"3a1c7f6a-459d-4eba-9291-2aebb9bf60c9","key_letter":"UNK","name":"Unknown","description":"Unknown Type\n\nThe type is unknown.","attributes":{"d9d874b2-9764-4148-8ace-57b70678b235":{"id":"d9d874b2-9764-4148-8ace-57b70678b235","name":"id","type":"Uuid"}}},"a9b74602-bdc5-481f-af4c-8021553b895a":{"id":"a9b74602-bdc5-481f-af4c-8021553b895a","key_letter":"PLUG","name":"Plugin","description":"An external compilation unit that may be loaded at run time.","attributes":{"f66d1d03-d541-4192-b02c-112783939999":{"id":"f66d1d03-d541-4192-b02c-112783939999","name":"id","type":"Uuid"},"a3e038e0-ae8b-4e03-9046-3df2bbf834b6":{"id":"a3e038e0-ae8b-4e03-9046-3df2bbf834b6","name":"name","type":"String"},"88296f46-e094-42ff-bc69-15db5019776a":{"id":"88296f46-e094-42ff-bc69-15db5019776a","name":"path","type":"String"}}},"cdb1afaf-245c-4d56-bfea-10f69e45007d":{"id":"cdb1afaf-245c-4d56-bfea-10f69e45007d","key_letter":"LST","name":"List","description":"A List\n\nThis is like an array, I guess. It's also like a `Vec`.","attributes":{"5cbba856-e189-4b99-adc1-f1226aef8189":{"id":"5cbba856-e189-4b99-adc1-f1226aef8189","name":"id","type":"Uuid"}}},"b7483723-222d-4f08-b7b9-e8b14f0308cf":{"id":"b7483723-222d-4f08-b7b9-e8b14f0308cf","key_letter":"O_S","name":"Object Store","description":"A generated ObjectStore\n\nThis is the backing store for the structs.","attributes":{"2fa8c5a3-6c4b-4dec-ad0c-32034ce3d149":{"id":"2fa8c5a3-6c4b-4dec-ad0c-32034ce3d149","name":"id","type":"Uuid"},"68b4dc34-75d1-4fbd-ad0e-3047f0c8aed4":{"id":"68b4dc34-75d1-4fbd-ad0e-3047f0c8aed4","name":"domain","type":"String"},"435d1dba-242a-44f6-a6e8-4af89ada7c0d":{"id":"435d1dba-242a-44f6-a6e8-4af89ada7c0d","name":"name","type":"String"}}},"97f815f0-dcc4-4bd3-843d-13ff1dc5802c":{"id":"97f815f0-dcc4-4bd3-843d-13ff1dc5802c","key_letter":"DSF","name":"Dwarf Source File","description":"The Source Code\n\nThe main purpose of this object is to capture the source code that contains the definitions that will be parsed. This allows us to do better error reporting in the interpreter. We may also be able to do something about displaying compiled functions, maybe.","attributes":{"151486f9-7e65-4064-835f-13e85312950e":{"id":"151486f9-7e65-4064-835f-13e85312950e","name":"source","type":"String"},"717a33ce-b0d5-4269-bed6-0a86966ef572":{"id":"717a33ce-b0d5-4269-bed6-0a86966ef572","name":"id","type":"Uuid"}}},"72443b79-5645-4b5f-b317-e1a8f815b81c":{"id":"72443b79-5645-4b5f-b317-e1a8f815b81c","key_letter":"FOR","name":"For Loop","description":"A For Loop Expression\n\nAn expression that matches for IDENT in EXPRESSION BLOCK.","attributes":{"59d5519e-7c33-4ff7-9d4c-13790cca88da":{"id":"59d5519e-7c33-4ff7-9d4c-13790cca88da","name":"id","type":"Uuid"},"b80303bd-a746-4ad8-a624-560a5829a5c9":{"id":"b80303bd-a746-4ad8-a624-560a5829a5c9","name":"ident","type":"String"}}},"93f288e7-d670-40a6-91f3-2006b5efa8b4":{"id":"93f288e7-d670-40a6-91f3-2006b5efa8b4","key_letter":"RET","name":"Return","description":"The Return Expression\n\nIt’s an expression, and not a statement. Isn’t that interesting?","attributes":{"9f78cd40-df48-46ed-9da1-685ec026e9c3":{"id":"9f78cd40-df48-46ed-9da1-685ec026e9c3","name":"id","type":"Uuid"}}},"e1321ffa-07d5-480d-89f9-227b13d27ce1":{"id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","key_letter":"IF","name":"If","description":"The if Expression\n\nIt does include an else, at no extra charge!","attributes":{"3316a1da-1817-4657-867b-0f0ac6ac145c":{"id":"3316a1da-1817-4657-867b-0f0ac6ac145c","name":"id","type":"Uuid"}}},"3f7fd816-518b-4b9e-8134-3059e78045a0":{"id":"3f7fd816-518b-4b9e-8134-3059e78045a0","key_letter":"OP","name":"Operator","description":"Operator Expressions\n\nBasically anything you can do with an expression is a subtype of this beasty.","attributes":{"d613ed9b-274e-483a-be79-7f06d2d7c0b7":{"id":"d613ed9b-274e-483a-be79-7f06d2d7c0b7","name":"id","type":"Uuid"}}},"c46e6b80-0365-429a-abf9-ca75ce4f469a":{"id":"c46e6b80-0365-429a-abf9-ca75ce4f469a","key_letter":"COMP","name":"Comparison","description":"Comparison Operators\n\nThings like == and !=, etc.","attributes":{"69c73e42-bde8-4241-abc1-50531b19ba66":{"id":"69c73e42-bde8-4241-abc1-50531b19ba66","name":"id","type":"Uuid"},"680458ec-7002-4136-be80-daca5190cec2":{"id":"680458ec-7002-4136-be80-daca5190cec2","name":"bogus","type":"Boolean"}}},"9c8bc563-b596-4348-9189-065d747f7c9f":{"id":"9c8bc563-b596-4348-9189-065d747f7c9f","key_letter":"BIN","name":"Binary","description":"Binary Operators\n\n+, -, etc.","attributes":{"1d132fac-43cc-4085-969c-ea0ead6e90f0":{"id":"1d132fac-43cc-4085-969c-ea0ead6e90f0","name":"id","type":"Uuid"},"f076b985-8f5d-4320-ba26-e518283974f1":{"id":"f076b985-8f5d-4320-ba26-e518283974f1","name":"bogus","type":"Boolean"}}},"1b4e5b3a-a9b2-4316-94c4-ff34d4d3d523":{"id":"1b4e5b3a-a9b2-4316-94c4-ff34d4d3d523","key_letter":"PLUS","name":"Addition","description":"The addition operator: `+`.","attributes":{"71662c9f-8108-43ba-9f39-956ba4137c79":{"id":"71662c9f-8108-43ba-9f39-956ba4137c79","name":"id","type":"Uuid"}}},"e3329a9e-1c52-44f6-a1f7-fc85f7362e9e":{"id":"e3329a9e-1c52-44f6-a1f7-fc85f7362e9e","key_letter":"MINUS","name":"Subtraction","description":"The subtraction operator: `-`.","attributes":{"3ad6559a-d90e-4445-b305-f1e7f3634e4d":{"id":"3ad6559a-d90e-4445-b305-f1e7f3634e4d","name":"id","type":"Uuid"}}},"484e429b-bf54-45cb-9b87-baddf7fb5f5b":{"id":"484e429b-bf54-45cb-9b87-baddf7fb5f5b","key_letter":"LTE","name":"Less Than or Equal","description":"Less than or equal: `<=`.","attributes":{"762792a8-a56d-4abd-a0cb-05fa91ce7af7":{"id":"762792a8-a56d-4abd-a0cb-05fa91ce7af7","name":"id","type":"Uuid"}}},"c47b8696-7e98-4733-ab33-a4dca7b61d01":{"id":"c47b8696-7e98-4733-ab33-a4dca7b61d01","key_letter":"ASS","name":"Assignment","description":"Assignment to a storage location\n\nE.g., `a = b`.","attributes":{"1525eed3-c6e2-4dce-b587-2c1591d998b2":{"id":"1525eed3-c6e2-4dce-b587-2c1591d998b2","name":"id","type":"Uuid"}}},"e05ab5f3-17e7-4594-8ce0-c02d793a1df9":{"id":"e05ab5f3-17e7-4594-8ce0-c02d793a1df9","key_letter":"LEXP","name":"List Expression","description":"A list of expressions\n\nE.g., `let a = [0, 1, 2, 3];`","attributes":{"01684c5c-b511-40c8-9564-e9cb91f4269b":{"id":"01684c5c-b511-40c8-9564-e9cb91f4269b","name":"id","type":"Uuid"}}},"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d":{"id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","key_letter":"LE","name":"List Element","description":"","attributes":{"ecb6461a-b55a-4a66-b6ec-f22addfd992f":{"id":"ecb6461a-b55a-4a66-b6ec-f22addfd992f","name":"id","type":"Uuid"},"39368f96-3fa6-401e-8706-f9375109af18":{"id":"39368f96-3fa6-401e-8706-f9375109af18","name":"position","type":"Integer"}}},"4d5720eb-da8c-493d-ab8d-cb6111dd6099":{"id":"4d5720eb-da8c-493d-ab8d-cb6111dd6099","key_letter":"IND","name":"Index","description":"An index expression","attributes":{"f97a16a4-1e1f-4d17-9a67-6ea53e6fe20b":{"id":"f97a16a4-1e1f-4d17-9a67-6ea53e6fe20b","name":"id","type":"Uuid"}}},"6767c0cf-4041-4047-b2b4-d7375f33bc97":{"id":"6767c0cf-4041-4047-b2b4-d7375f33bc97","key_letter":"MULT","name":"Multiplication","description":"","attributes":{"47c44caf-bbbb-48f9-b604-322715ea4f70":{"id":"47c44caf-bbbb-48f9-b604-322715ea4f70","name":"id","type":"Uuid"}}},"35b3de4e-46b8-490f-8e30-c305ed348a78":{"id":"35b3de4e-46b8-490f-8e30-c305ed348a78","key_letter":"DIV","name":"Division","description":"","attributes":{"a2750f60-6827-4ade-aeca-b8e6ff5ba5fd":{"id":"a2750f60-6827-4ade-aeca-b8e6ff5ba5fd","name":"id","type":"Uuid"}}},"d8b554d4-03ac-4613-a3e0-fc0b901bfd70":{"id":"d8b554d4-03ac-4613-a3e0-fc0b901bfd70","key_letter":"GTE","name":"Greater Than or Equal","description":"","attributes":{"a1a3feb0-7273-4f2c-bee1-52ed1afa6692":{"id":"a1a3feb0-7273-4f2c-bee1-52ed1afa6692","name":"id","type":"Uuid"}}},"0edc535b-405d-4dd5-bcd2-f5772ab116c2":{"id":"0edc535b-405d-4dd5-bcd2-f5772ab116c2","key_letter":"EQ","name":"Equal","description":"","attributes":{"5cc2098c-fb9c-47f2-9e78-e82e68e94112":{"id":"5cc2098c-fb9c-47f2-9e78-e82e68e94112","name":"id","type":"Uuid"}}},"0b3e9de0-d139-4934-a043-d1913a24de0c":{"id":"0b3e9de0-d139-4934-a043-d1913a24de0c","key_letter":"RNG_EXPR","name":"Range Expression","description":"","attributes":{"c4270112-8fc2-472c-9ec8-0e47eba39942":{"id":"c4270112-8fc2-472c-9ec8-0e47eba39942","name":"id","type":"Uuid"}}},"70932b40-f444-4341-bb19-0a29d1daecbe":{"id":"70932b40-f444-4341-bb19-0a29d1daecbe","key_letter":"RNG_FRM","name":"From","description":"","attributes":{"0e8d45b6-c1af-4ce9-8c86-8852e8808224":{"id":"0e8d45b6-c1af-4ce9-8c86-8852e8808224","name":"id","type":"Uuid"}}},"32dbb54a-9693-4847-9278-7c956ea045f8":{"id":"32dbb54a-9693-4847-9278-7c956ea045f8","key_letter":"RNG_TO","name":"To","description":"","attributes":{"dc7879f5-8f75-4973-ad02-7d611b68a07c":{"id":"dc7879f5-8f75-4973-ad02-7d611b68a07c","name":"id","type":"Uuid"}}},"0dc0e921-e7ff-4766-9738-e6e312f7f0de":{"id":"0dc0e921-e7ff-4766-9738-e6e312f7f0de","key_letter":"GRP","name":"Grouped","description":"Parens","attributes":{"f0ae9b32-3c23-4a34-b6e9-29ff8d94e3f6":{"id":"f0ae9b32-3c23-4a34-b6e9-29ff8d94e3f6","name":"id","type":"Uuid"}}},"122e4157-381f-400f-ac30-a1c8a2a9e8c1":{"id":"122e4157-381f-400f-ac30-a1c8a2a9e8c1","key_letter":"NO","name":"Full","description":"","attributes":{"55c208e0-c7ff-4428-93e9-519c9cffd3c6":{"id":"55c208e0-c7ff-4428-93e9-519c9cffd3c6","name":"id","type":"Uuid"}}},"17db2afc-ae6c-4e53-a527-48516811fe3e":{"id":"17db2afc-ae6c-4e53-a527-48516811fe3e","key_letter":"NO","name":"Inclusive","description":"","attributes":{"c84dd526-b305-4a9c-9ce6-381aab4ca0b8":{"id":"c84dd526-b305-4a9c-9ce6-381aab4ca0b8","name":"id","type":"Uuid"}}},"30abb231-4248-4ffa-9a69-e0eb6bb9dbbd":{"id":"30abb231-4248-4ffa-9a69-e0eb6bb9dbbd","key_letter":"NO","name":"To Inclusive","description":"","attributes":{"70b1a65d-4f0f-41f8-aa77-72fead5078be":{"id":"70b1a65d-4f0f-41f8-aa77-72fead5078be","name":"id","type":"Uuid"}}},"ba8a3bbf-86a8-47e2-92bb-f41878981c41":{"id":"ba8a3bbf-86a8-47e2-92bb-f41878981c41","key_letter":"RNG","name":"Range","description":"","attributes":{"49068e96-7836-4e76-97c5-93f02f20c7da":{"id":"49068e96-7836-4e76-97c5-93f02f20c7da","name":"id","type":"Uuid"}}},"79571896-9798-44a3-acef-5aa2d9773b93":{"id":"79571896-9798-44a3-acef-5aa2d9773b93","key_letter":"SPN","name":"Span","description":"A span is just a two-tuple that specifies the start and end locations, in the source code, for an entitiy.\n\nLooking at this, I think that this should be a supertype, and then a subtype for each relationship. I’m feeling lazy.","attributes":{"4c61e3ec-89ef-42e8-a9f6-ba4131cee575":{"id":"4c61e3ec-89ef-42e8-a9f6-ba4131cee575","name":"id","type":"Uuid"},"b4499f82-5249-4f87-af52-e49caab056e2":{"id":"b4499f82-5249-4f87-af52-e49caab056e2","name":"start","type":"Integer"},"a09bcdab-3c16-4660-9d9d-0c5c39c0092b":{"id":"a09bcdab-3c16-4660-9d9d-0c5c39c0092b","name":"end","type":"Integer"}}},"5c85a8db-e4cc-4e38-9922-58d93773f4f0":{"id":"5c85a8db-e4cc-4e38-9922-58d93773f4f0","key_letter":"BUG","name":"Debugger","description":"An expresision to invoke the debugger;","attributes":{"d7c6ddc5-9913-41fc-a772-eae95f4e4cfc":{"id":"d7c6ddc5-9913-41fc-a772-eae95f4e4cfc","name":"id","type":"Uuid"}}},"bf69c9af-f268-4c9b-8e67-4497eb490478":{"id":"bf69c9af-f268-4c9b-8e67-4497eb490478","key_letter":"FAT","name":"Field Access Target","description":"The target of a field access.\n\nIt may be either a [`Field`] or a [`Function`].","attributes":{"c9c926da-906f-4e95-9feb-63b67b8449cb":{"id":"c9c926da-906f-4e95-9feb-63b67b8449cb","name":"id","type":"Uuid"},"45374bbb-1f0d-42e8-bd2b-cca53589de9a":{"id":"45374bbb-1f0d-42e8-bd2b-cca53589de9a","name":"bogus","type":"Boolean"}}},"ce73a111-4670-411e-9bd2-f3308d6399c9":{"id":"ce73a111-4670-411e-9bd2-f3308d6399c9","key_letter":"GT","name":"Greater Than","description":"","attributes":{"5fbf068e-83be-483b-bf12-9f3bedc79a81":{"id":"5fbf068e-83be-483b-bf12-9f3bedc79a81","name":"id","type":"Uuid"}}},"1e7a66b2-f559-4c21-b8e6-969999ed171d":{"id":"1e7a66b2-f559-4c21-b8e6-969999ed171d","key_letter":"TC","name":"Type Cast","description":"Typecast Operator Expression\n\nThis is the `as` operator.","attributes":{"29309379-1198-4290-9efe-7d27b342c4e3":{"id":"29309379-1198-4290-9efe-7d27b342c4e3","name":"id","type":"Uuid"}}},"80f73c4e-caf1-4e1f-a634-00965f6ad032":{"id":"80f73c4e-caf1-4e1f-a634-00965f6ad032","key_letter":"NEG","name":"Negation","description":"The unary minus","attributes":{"220e79fa-e20b-4bcc-af9b-ce07f3364c01":{"id":"220e79fa-e20b-4bcc-af9b-ce07f3364c01","name":"id","type":"Uuid"}}},"222307c0-668c-43f9-9368-34cc048f0ae3":{"id":"222307c0-668c-43f9-9368-34cc048f0ae3","key_letter":"BO","name":"Boolean Operator","description":"A Boolean Operaator\n\nThere are two — || and &&.","attributes":{"14ad81ac-dc91-4764-844f-9aeab3ff7370":{"id":"14ad81ac-dc91-4764-844f-9aeab3ff7370","name":"id","type":"Uuid"},"e0605cb6-add5-4f83-a0ad-bd610489acab":{"id":"e0605cb6-add5-4f83-a0ad-bd610489acab","name":"bogus","type":"Boolean"}}},"6187076b-e765-4e6b-af28-f577eba40b5e":{"id":"6187076b-e765-4e6b-af28-f577eba40b5e","key_letter":"","name":"And","description":"The Boolean And Operator\n\nAnd, aka, `&&`.","attributes":{"54f9c8e5-80f5-4003-b7c1-210f80fc850b":{"id":"54f9c8e5-80f5-4003-b7c1-210f80fc850b","name":"id","type":"Uuid"}}},"f7fc16ac-6a23-4f5d-a04c-1163617701c1":{"id":"f7fc16ac-6a23-4f5d-a04c-1163617701c1","key_letter":"","name":"Unary","description":"Unary Operators","attributes":{"a78f7aab-b13b-4f74-9bc5-1dba9849374d":{"id":"a78f7aab-b13b-4f74-9bc5-1dba9849374d","name":"id","type":"Uuid"},"b7769dbd-6bd0-4dbd-aedc-2d848d7e91ed":{"id":"b7769dbd-6bd0-4dbd-aedc-2d848d7e91ed","name":"bogus","type":"Boolean"}}},"0ad229c4-1782-4783-b64e-0d15fe482463":{"id":"0ad229c4-1782-4783-b64e-0d15fe482463","key_letter":"NOT","name":"Not","description":"","attributes":{"e308e26b-9675-4f06-b06b-510d03409ad1":{"id":"e308e26b-9675-4f06-b06b-510d03409ad1","name":"id","type":"Uuid"}}},"b8d3d40e-462e-4e4d-9fb4-b7d54f9fd03a":{"id":"b8d3d40e-462e-4e4d-9fb4-b7d54f9fd03a","key_letter":"NE","name":"Not Equal","description":"The Not Equal Expression\n\nThis is the `!=` operator expression.","attributes":{"f05219d1-d3cb-4535-80f3-961384d3ec2c":{"id":"f05219d1-d3cb-4535-80f3-961384d3ec2c","name":"id","type":"Uuid"}}},"470246f6-91ec-4993-b915-93480d0f4eb9":{"id":"470246f6-91ec-4993-b915-93480d0f4eb9","key_letter":"M_CALL","name":"Macro Call","description":"A macro invocation\n\nA macro invocation is a string, followed by a bang (`!`), followed by parens and arguments.","attributes":{"2f2c62e2-d8d8-40a7-b2a5-2235c59a5b7c":{"id":"2f2c62e2-d8d8-40a7-b2a5-2235c59a5b7c","name":"id","type":"Uuid"}}},"f6a3ce12-18e1-4675-ab94-6b2a7c91d951":{"id":"f6a3ce12-18e1-4675-ab94-6b2a7c91d951","key_letter":"MAC","name":"Macro","description":"This is a macro\n\nIt sort of interesting that the way that we create a new macro is with a macro. So it’s nice and recursive like that. The macro in question, will be none other than `macro_rules!`!.\n\nOK, so that means something like this:\n\n```no-test\nmacro_rules! `ident` {\n ($[ ( | `ident`]<,)*>[,$ident]*) => {\n }\n}\n```","attributes":{"778b867f-ce73-48da-9a4a-96bc5ea3f3ee":{"id":"778b867f-ce73-48da-9a4a-96bc5ea3f3ee","name":"id","type":"Uuid"},"630d01d4-d139-43d6-8d70-a471850fd9c8":{"id":"630d01d4-d139-43d6-8d70-a471850fd9c8","name":"name","type":"String"}}},"41b7bda7-f5a2-4c94-af22-fedbe8d6f287":{"id":"41b7bda7-f5a2-4c94-af22-fedbe8d6f287","key_letter":"BO_OR","name":"Or","description":"The or `||` operator","attributes":{"020e49d4-3f70-453a-b8c3-9bb71793ab45":{"id":"020e49d4-3f70-453a-b8c3-9bb71793ab45","name":"id","type":"Uuid"}}},"84f1c5fd-d907-4653-a132-bfd420ad9212":{"id":"84f1c5fd-d907-4653-a132-bfd420ad9212","key_letter":"C_LT","name":"Less Than","description":"Less that operator `<`\n","attributes":{"9287a992-353f-4d7e-977d-925f121263e0":{"id":"9287a992-353f-4d7e-977d-925f121263e0","name":"id","type":"Uuid"}}},"efde0481-1599-4c5c-bf30-51dbd4a8ed83":{"id":"efde0481-1599-4c5c-bf30-51dbd4a8ed83","key_letter":"CHAR","name":"Char","description":"A char\n\nI char is a single printable UNICODE character. It may contain multiple bytes.","attributes":{"755111b8-1fe8-444d-bafb-d72ea047b4a5":{"id":"755111b8-1fe8-444d-bafb-d72ea047b4a5","name":"id","type":"Uuid"}}},"95e17479-07a5-41b1-9930-1b9b520514f6":{"id":"95e17479-07a5-41b1-9930-1b9b520514f6","key_letter":"ƛ","name":"Lambda","description":"Lambda Function\n\nIt’s a function, it has a type, parameters, etc. It does not have a name, which is problematic with Function having one. It’s also an Expression, unlike a Function.\n\nI should think about creating another function subtype that contains just the name...","attributes":{"be05773d-1ed6-401c-bbbc-678cde7f713c":{"id":"be05773d-1ed6-401c-bbbc-678cde7f713c","name":"id","type":"Uuid"}}},"8d86dceb-7e6e-4767-8a3f-cbbde458ad93":{"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","key_letter":"LP","name":"Lambda Parameter","description":"id","attributes":{"adfee8d0-94b3-420c-a673-f6e9c34f8523":{"id":"adfee8d0-94b3-420c-a673-f6e9c34f8523","name":"id","type":"Uuid"},"0c5ba019-cc16-4d1f-8ffa-427acba8c280":{"id":"0c5ba019-cc16-4d1f-8ffa-427acba8c280","name":"position","type":"Integer"}}},"68e7191a-fe94-423f-8a5d-5551384ae998":{"id":"68e7191a-fe94-423f-8a5d-5551384ae998","key_letter":"OW","name":"Object Wrapper","description":"The purpose of this object is to wrap `Object`. We need to be able to store a referential attribute to the `ObjectStore`, and we can’t/don’t want to add that to `Object`.","attributes":{"12d98e93-60a2-43c7-830e-960ab321e270":{"id":"12d98e93-60a2-43c7-830e-960ab321e270","name":"id","type":"Uuid"}}},"c4723d6d-1584-49bd-80f1-4c700185746e":{"id":"c4723d6d-1584-49bd-80f1-4c700185746e","key_letter":"FB","name":"Body","description":"The function body. Generally contains statements, but may point to some other implementation.","attributes":{"acb18c42-11c2-4db0-bb5d-efe60e176212":{"id":"acb18c42-11c2-4db0-bb5d-efe60e176212","name":"id","type":"Uuid"},"23056543-73de-448f-a6b3-251f8228823d":{"id":"23056543-73de-448f-a6b3-251f8228823d","name":"async","type":"Boolean"}}},"7794ada6-49c3-4bf0-991f-828c6583ebb8":{"id":"7794ada6-49c3-4bf0-991f-828c6583ebb8","key_letter":"EI","name":"External Implementation","description":"Some extern source of the function’s body.","attributes":{"beb2a174-9ec1-44ba-b57d-2c40146e39e1":{"id":"beb2a174-9ec1-44ba-b57d-2c40146e39e1","name":"id","type":"Uuid"},"d79d5062-aa25-49d6-bc5d-fb56436e86c1":{"id":"d79d5062-aa25-49d6-bc5d-fb56436e86c1","name":"model","type":"String"},"30968bac-2fd6-4372-b3ce-7fb1752920cd":{"id":"30968bac-2fd6-4372-b3ce-7fb1752920cd","name":"object","type":"String"},"a8faf2e5-4bc5-4251-84c2-3abdbc194264":{"id":"a8faf2e5-4bc5-4251-84c2-3abdbc194264","name":"function","type":"String"}}},"d48d948b-5291-4eb3-ba35-7ab1c1ffa098":{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","key_letter":"ENUM","name":"Enumeration","description":"An Enumeration\n\nAn enumeration is an algebraic type that takes on one if it’s fielsd, another type. as it’s value.","attributes":{"6ab143f9-3bd4-40d9-a640-95402bcf8c7a":{"id":"6ab143f9-3bd4-40d9-a640-95402bcf8c7a","name":"id","type":"Uuid"},"1dfbaeda-b91f-4559-b6f5-5a7792766eb0":{"id":"1dfbaeda-b91f-4559-b6f5-5a7792766eb0","name":"name","type":"String"},"f81a6120-3fb6-4b32-a78d-97639235a817":{"id":"f81a6120-3fb6-4b32-a78d-97639235a817","name":"path","type":"String"}}},"7eaea922-8807-4c38-a704-0143e0594664":{"id":"7eaea922-8807-4c38-a704-0143e0594664","key_letter":"EF","name":"Enum Field","description":"A field on an Enumeration\n\nNote that there are three sorts of fields. Tuple, Struct, and “plain?”.","attributes":{"74e4b7fb-c8fa-4c9f-b3dd-223385b34f78":{"id":"74e4b7fb-c8fa-4c9f-b3dd-223385b34f78","name":"id","type":"Uuid"},"ba15e7df-bb85-4ae5-ac02-570f915d25a2":{"id":"ba15e7df-bb85-4ae5-ac02-570f915d25a2","name":"name","type":"String"}}},"4b6c7fde-0878-4947-b960-bc73a4558c60":{"id":"4b6c7fde-0878-4947-b960-bc73a4558c60","key_letter":"UEF","name":"Unit","description":"Just a marker, no other value.","attributes":{"5dab5104-dd9d-413a-afde-24e1cd249566":{"id":"5dab5104-dd9d-413a-afde-24e1cd249566","name":"id","type":"Uuid"},"9f44da33-ba44-4b17-a5f8-54b397515b2a":{"id":"9f44da33-ba44-4b17-a5f8-54b397515b2a","name":"value","type":"Integer"}}},"e6fbeeb8-6ade-46a2-bb52-9c99d06918b2":{"id":"e6fbeeb8-6ade-46a2-bb52-9c99d06918b2","key_letter":"EFSF","name":"Struct Field","description":"A field that is a structure.","attributes":{"b05b1a17-ec60-490a-816e-32cd8623390f":{"id":"b05b1a17-ec60-490a-816e-32cd8623390f","name":"id","type":"Uuid"},"22d2baf6-1373-4d2f-802f-c0a3315d8bae":{"id":"22d2baf6-1373-4d2f-802f-c0a3315d8bae","name":"name","type":"String"}}},"c8fcd612-6ca8-469a-824c-de218e4fd075":{"id":"c8fcd612-6ca8-469a-824c-de218e4fd075","key_letter":"EFTF","name":"Tuple Field","description":"A field that is a tuple.\n\nCurrently in this implementation we are cheating, as we don’t yet actually have tuples. So this is limited to a single item.\n\nNote the `hack` attribute. What’s happening is that during generic substitution?, expansion?, whatever. During that we are cloning the enum, and it’s fields. This is to create a new type. When we do this we don’t want the store optimizing away a duplicate Tuple Field.\n\nI deb thee hack because I think the right thing to do is something else, I’m just not sure what it is yet.\n\nI renamed it to `xyzzy`, because I think `hack` does magic in the compiler.","attributes":{"20d73af4-8fc2-44e5-84a0-f0cc3f2ebf72":{"id":"20d73af4-8fc2-44e5-84a0-f0cc3f2ebf72","name":"id","type":"Uuid"},"126ed291-1bc1-44c0-87e8-5ec89a94e077":{"id":"126ed291-1bc1-44c0-87e8-5ec89a94e077","name":"xyzzy","type":"Uuid"}}},"52143d28-8474-44bc-b63f-e654150888d3":{"id":"52143d28-8474-44bc-b63f-e654150888d3","key_letter":"FIRE","name":"Match","description":"Match a pattern to a scrutinee and evaluate a branch based on the results.","attributes":{"670a1371-78dd-49df-82fb-d51a664263a3":{"id":"670a1371-78dd-49df-82fb-d51a664263a3","name":"id","type":"Uuid"},"f165e2b2-cc7e-46ba-bc71-9ee1a6d7ddb4":{"id":"f165e2b2-cc7e-46ba-bc71-9ee1a6d7ddb4","name":"uniqueness_generator","type":"Uuid"}}},"ab7a5708-6d12-4dce-b488-fa3a3b480510":{"id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","key_letter":"道","name":"Path","description":"This is a path to a local variable, or an item. It is made up of scopes, separated by `::`.","attributes":{"7b59e37b-41ec-44d0-a83a-e5811b16fb6c":{"id":"7b59e37b-41ec-44d0-a83a-e5811b16fb6c","name":"id","type":"Uuid"},"ca5743c6-dc5e-4801-9925-b2dbe29e34a3":{"id":"ca5743c6-dc5e-4801-9925-b2dbe29e34a3","name":"unique","type":"Uuid"}}},"6094aad5-613b-42b6-8f48-c3b9e2161aa9":{"id":"6094aad5-613b-42b6-8f48-c3b9e2161aa9","key_letter":"PAT","name":"Pattern","description":"The pattern is a specification for extracting data from a type. It’s sort of a reverse impression of what you are looking for. If the shape of the impression matches the scrutinee, then they “fit” and the pattern’s lvalues will be populated with data from the scrutinee.\n\nThere are a bunch of diffirent kinds of patterns. Literal, ident, struct, tuple, etc. Modeling this will take a lot of room and time.\n\nDoing this I’m going to cheat a bit and store the code that does matching as a string on this object during compilation. During runtime the string will be evaluated (either as dwrf, or perhasps using a small VM. Or maybe use the built-in VM. It should be able to handle all that we need. This way, I don’t have to model all the bits because they are encoded in the code attribute.\n\nSo I guess that means I’ll be writing assembly code...","attributes":{"faad8dc6-64c0-4c15-8e76-44328eaa72b8":{"id":"faad8dc6-64c0-4c15-8e76-44328eaa72b8","name":"id","type":"Uuid"}}},"6822b78e-e5ca-4c40-ba9d-cf7a69d4fdc7":{"id":"6822b78e-e5ca-4c40-ba9d-cf7a69d4fdc7","key_letter":"NFE","name":"Named Field Expression","description":"","attributes":{"bc2a2349-fae2-4f3b-84b1-84eab8ab1d77":{"id":"bc2a2349-fae2-4f3b-84b1-84eab8ab1d77","name":"name","type":"String"},"8ea54fa1-5f86-408d-822c-dccdf5505db3":{"id":"8ea54fa1-5f86-408d-822c-dccdf5505db3","name":"id","type":"Uuid"}}},"910e3a08-5e99-47a5-bde4-3e35cf9f00da":{"id":"910e3a08-5e99-47a5-bde4-3e35cf9f00da","key_letter":"UFE","name":"Unnamed Field Expression","description":"","attributes":{"7aae03a2-e0e0-43db-9861-6c732eb85ef5":{"id":"7aae03a2-e0e0-43db-9861-6c732eb85ef5","name":"id","type":"Uuid"},"e90de56f-91a2-4df6-b013-3bf7d08bab73":{"id":"e90de56f-91a2-4df6-b013-3bf7d08bab73","name":"position","type":"Integer"}}},"31deb355-b737-43a6-ae88-199bb51f940d":{"id":"31deb355-b737-43a6-ae88-199bb51f940d","key_letter":"DS","name":"Data Structure","description":"","attributes":{"9af827eb-88fb-495e-8000-bcded4b9caea":{"id":"9af827eb-88fb-495e-8000-bcded4b9caea","name":"id","type":"Uuid"},"c561580f-5b89-4b85-a307-9edf78c53203":{"id":"c561580f-5b89-4b85-a307-9edf78c53203","name":"bogus","type":"Boolean"}}},"39060ea9-5d45-4954-a29f-ba88e01e7217":{"id":"39060ea9-5d45-4954-a29f-ba88e01e7217","key_letter":"GYM","name":"Path Element","description":"🖕🤣","attributes":{"ca0023ad-2efb-475a-b663-4ecad4117a31":{"id":"ca0023ad-2efb-475a-b663-4ecad4117a31","name":"id","type":"Uuid"},"1ec6c6dd-1792-4ea5-bbda-dc490dc601c2":{"id":"1ec6c6dd-1792-4ea5-bbda-dc490dc601c2","name":"name","type":"String"}}},"4856978f-20be-4b59-8bf6-b941091119a9":{"id":"4856978f-20be-4b59-8bf6-b941091119a9","key_letter":"A_WAIT","name":"Await","description":"","attributes":{"b0944a25-05f1-4f14-bc2b-e67851d66f8b":{"id":"b0944a25-05f1-4f14-bc2b-e67851d66f8b","name":"id","type":"Uuid"}}},"dbada891-ca0d-4fbc-8371-9f9234867bd6":{"id":"dbada891-ca0d-4fbc-8371-9f9234867bd6","key_letter":"FUT","name":"Future","description":"","attributes":{"37182d8e-782a-4071-86bd-b1c7f30c53ba":{"id":"37182d8e-782a-4071-86bd-b1c7f30c53ba","name":"id","type":"Uuid"}}},"290f49d3-8ce7-408e-be14-611b66db9687":{"id":"290f49d3-8ce7-408e-be14-611b66db9687","key_letter":"SG1","name":"Struct Generic","description":"A generic type applied to the struct.","attributes":{"d8e275eb-cd85-46a4-b5b8-5e71baec33c3":{"id":"d8e275eb-cd85-46a4-b5b8-5e71baec33c3","name":"id","type":"Uuid"},"6077a668-17b2-4d8d-8fdd-a34442e7d10c":{"id":"6077a668-17b2-4d8d-8fdd-a34442e7d10c","name":"name","type":"String"}}},"7056c5ba-4f49-404f-abd5-e5c6a5879fac":{"id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","key_letter":"EG","name":"Enum Generic","description":"","attributes":{"16f7a19e-ca0d-4f5e-8a58-9def2a99be98":{"id":"16f7a19e-ca0d-4f5e-8a58-9def2a99be98","name":"id","type":"Uuid"},"76e249d0-5353-43ee-a487-1fe8c7ad4824":{"id":"76e249d0-5353-43ee-a487-1fe8c7ad4824","name":"name","type":"String"},"5b653d1f-5e73-409c-bc0c-8815cf9c7804":{"id":"5b653d1f-5e73-409c-bc0c-8815cf9c7804","name":"goober","type":"Uuid"}}},"b28be6c2-a37a-4049-9110-52136f892fc4":{"id":"b28be6c2-a37a-4049-9110-52136f892fc4","key_letter":"FG","name":"Func Generic","description":"These are generics associated with a function.","attributes":{"d5e3e544-8554-4edd-80fd-ce73d066715c":{"id":"d5e3e544-8554-4edd-80fd-ce73d066715c","name":"id","type":"Uuid"},"e3fb5786-82f8-4ce6-a77c-d9c74af6cebc":{"id":"e3fb5786-82f8-4ce6-a77c-d9c74af6cebc","name":"name","type":"String"}}},"0e1e683a-fe89-4002-88fa-efd50d66de6c":{"id":"0e1e683a-fe89-4002-88fa-efd50d66de6c","key_letter":"FS","name":"Format String","description":"","attributes":{"d54985e2-4cd5-43d5-9ba9-2fa68ac6c1b7":{"id":"d54985e2-4cd5-43d5-9ba9-2fa68ac6c1b7","name":"id","type":"Uuid"}}},"d39c987f-bba2-4956-963f-7e9c6c3fe4b4":{"id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","key_letter":"FB","name":"Format Bit","description":"","attributes":{"48c81cb1-bcf9-421f-a666-edd158dce484":{"id":"48c81cb1-bcf9-421f-a666-edd158dce484","name":"id","type":"Uuid"}}},"dbc37f2f-0a90-4a8b-a217-d4a70a606695":{"id":"dbc37f2f-0a90-4a8b-a217-d4a70a606695","key_letter":"SB","name":"String Bit","description":"","attributes":{"9458896a-1617-483d-8322-7b7738914fc1":{"id":"9458896a-1617-483d-8322-7b7738914fc1","name":"id","type":"Uuid"}}},"80bf1ba4-2f74-45db-a1b1-6b76e82b2013":{"id":"80bf1ba4-2f74-45db-a1b1-6b76e82b2013","key_letter":"EB","name":"Expression Bit","description":"","attributes":{"b8841744-3caa-4c0d-b11e-1a0a622e9189":{"id":"b8841744-3caa-4c0d-b11e-1a0a622e9189","name":"id","type":"Uuid"}}},"1a5eca02-909e-434c-bd35-b02f2b7dbe22":{"id":"1a5eca02-909e-434c-bd35-b02f2b7dbe22","key_letter":"CL","name":"Char Literal","description":"","attributes":{"e7c08300-008e-4148-a6ae-1dfdedd5ff34":{"id":"e7c08300-008e-4148-a6ae-1dfdedd5ff34","name":"id","type":"Uuid"},"49bcd7d8-0afc-45ed-84ea-0902edeaf541":{"id":"49bcd7d8-0afc-45ed-84ea-0902edeaf541","name":"value","type":"Integer"}}},"dfb72d5a-91a4-4023-a7a9-baef28bed978":{"id":"dfb72d5a-91a4-4023-a7a9-baef28bed978","key_letter":"AL","name":"Any List","description":"A list that does not enforce that it’s elements all share a type.","attributes":{"5478fa9a-683a-4ca0-aeb6-d7cba530982b":{"id":"5478fa9a-683a-4ca0-aeb6-d7cba530982b","name":"id","type":"Uuid"}}},"47abdb96-0225-4880-a472-9c714086e2b5":{"id":"47abdb96-0225-4880-a472-9c714086e2b5","key_letter":"HCF","name":"Halt and Catch Fire","description":"Goes boom!","attributes":{"769c1f24-452d-4405-afef-c567e03fb6d2":{"id":"769c1f24-452d-4405-afef-c567e03fb6d2","name":"id","type":"Uuid"}}}}},"relationships":{"ids":["21f08565-d913-4302-a853-e5f688ec1bc1","4b7360ba-8de3-4c93-bc90-22478c128a75","3746c64a-c63d-424d-afb2-c253470b6d7b","02892323-60e9-470b-b162-b2bc8d9ef1cd","98c79b91-da7b-443a-b1fb-18596cd6b4bc","7993e2c7-7efa-4346-b50e-bc02d55e1ca7","fdb49afe-13fb-4c79-99d1-92728d8652c7","ea1e6d1c-279b-4b6d-806e-fa133c6a5da9","35491126-597f-4301-ae48-88da4a23c845","336674ce-19be-4baa-8117-19ee19886e2d","95b8c311-1f3f-42ab-93cd-9b95c8d8c02a","3966271b-9938-48c7-b4fe-177c307e22bf","2e81ce06-82d5-47e6-9f38-783d8af057d9","03745d2b-a85f-40a9-b038-8f22c83e8eb1","c715993f-c840-4d48-8442-b5635e4324e7","f6c19c17-3e01-4945-bffb-7ec408dd7fcf","d8bf88d3-35da-422d-a7d9-1726ce66a288","0b5aab4e-5077-4627-9091-89c71a921be1","3bb006c5-a66d-440b-b54b-35bc9da87b33","e67c9242-2aac-4930-ae2e-b2a1678ed3d9","332f2cb5-0719-4c2d-8737-c1a0375fad8e","e93a7669-d7d0-4cb2-bbb1-36dedf3f893d","ead7f44b-e37a-4122-8824-17f4079c2e70","33838622-f03e-415f-9588-e7f9e644727e","54994661-e099-453c-904f-c09cc0fa0bfa","0cde3a3b-6678-42ac-8fa4-8ab02acb3dea","688ec08e-9fd6-4a2f-bcd5-5ea94e946d1b","e0a24038-1c85-4d6f-afbc-5c034062a557","96737350-249d-4701-9b47-0f56bf8bfc7f","9fd61528-8e0f-40d0-b1bb-53b468851d30","95fcc898-ef24-4ec4-8409-798a6623713e","de725e45-a751-4f4b-8c44-6c79671c70eb","39f2d2c1-abf2-4f3e-a4f1-58a477b12f9e","81d77ddd-6aae-4023-8467-2f5705d5e633","c45955d9-c799-4d61-8bc6-6335bde326b8","bc8075e9-e5ba-4a26-b696-7cf2651997ba","6f636d63-667a-40ad-b554-a301a62ddebd","f564f775-febe-442e-a0f1-492a2265e991","0e780acf-9221-4e84-9377-64d31e653187","fc2e5c67-6c98-4bfd-93a7-711fa2ae573f","ba437581-658a-497d-9790-ab79ad56cd4f","cdd19ddf-67e5-4e9b-9958-0745e8f9729e","c8d05983-b88d-40da-bf31-83d2d8b8c574","c6ed5fc4-f04a-45e0-afc3-6f421b81fea7","27350475-a322-4ede-a4b2-eb88a3c847f5","513c99bc-140c-44c2-b605-0d377805ac43","55ae9c5d-bcdb-4c29-8f06-cc9f596662d5","23c220df-e5a3-44dc-b521-d29378c6a5e0","71251371-81c5-4f25-8141-fef1e23e12fe","761a6c93-ae0b-4508-9437-d68d0b2c1f22","8398d7d3-d42f-4ca6-89d3-7a563eb50131","124d7dea-f1d6-477f-a096-42e92dd297c2","07097b52-f614-461b-9d4c-62ba7177a383","5e20da11-448d-41a5-8b92-7dd75d64ad3d","10e2f3e9-2995-47e0-9456-ed375eb610b7","d64c3d2d-51d9-4586-b8e7-0b23aea46f49","497076d2-1625-446b-b663-d75f5c2e2a3c","f42505df-9843-4914-97bc-c665dfbc2dcc","dfa0880b-de0a-4d0f-9f42-7ed496af35ea","7fb6cd7d-16c0-43bc-9e29-f645c644afe1","f72fcd31-7056-4425-b0ce-7734a759e616","b197d992-e4d6-4663-a6da-b46906374684","7022f5ed-020f-453f-bcab-8e632ca03b6e","1ec425ff-8b5a-49bf-87cb-9863defb9320","99d07c03-f3ce-42d7-bb64-8bde65c79dd6","3088e0b8-de0a-45d2-95fb-e8804c9c03fa","a640575d-a105-4ad5-b786-6e7fb55a0b94","d32059a8-46ed-4ceb-9b92-5f661b98f4e6","cfe90847-d888-4245-bb66-901855bb0051","45c4a4f5-e54b-45d2-bea6-617723a92b70","14f71b3f-b918-4376-8e75-7333e85ca536","8d8db4b1-8c90-472b-bc98-88fa6a2188d1","44ad55c5-bb62-4864-90e7-e992494786aa","c12fcdf7-ec63-58c7-8555-36222f25b91b","c3dba39c-fe1e-49e0-9a45-8f872b6aa4c5","f1c15ada-631b-4249-8c73-4e52391a532f","a5ac6af9-3cef-49e5-8d01-462817e1d641","868b4a28-0d2f-4d78-b947-66f44c3bdaf9","ca33902a-c6f2-45a5-9273-cf80a579cedd","d440f204-2694-4438-b618-721a9108070f","18c4566d-a7b7-4b1d-8e0b-470fddbaab9b","33b9b943-0d44-4490-b20a-35c110ae9473","4ce09575-5a2c-40c5-b766-bb12ef0c1600","193d881e-9afd-4b9e-a431-cdb113a7ee88","badf3d57-aba3-4757-b0e4-9d0e7b55f2ea","08512716-f1d3-4a88-bd38-aea9ae0f9ca7","0ed07f33-0bbb-497d-9823-9247fc520e85","cea29749-dc0f-40c0-adf9-4c21b187751e","599c1454-9525-4386-b50f-4fdee4b08373","9f2917c8-b17b-4ab2-8c6e-0269a0b80681","3c241319-416a-4195-ae80-fa4439198c1c","12003437-2898-4b1d-ba27-b1cc69d8dbb2","940f5aba-58f5-46fa-bbba-43fc6b10a3fe","42c18b66-d259-40d1-a77d-0c0e76080a6d","04ae2e8d-c499-4068-88bd-015b0bba57bf","e4734a39-1f45-400f-937a-285e2fad31a4","da1d6545-b9d6-499e-9175-fd2a340b1f2e","c8a4b21a-62c3-4fbd-8799-2b55d93d951c","23ef9104-65a5-4b32-943f-a2db064c699f","94b3bb70-e939-46bd-ae53-c01cd74430c1","7d003f0e-c38b-41fa-ae33-6333d9831146","fe6e5298-d4bb-447e-bffa-b4c38274abfd","2b46b080-32c8-4a2e-a118-d6a4bd4afc62","b7eb881e-d4f4-49c8-aba9-482a8c3935c5","b66c47bf-a2e0-4d78-bc54-9116348c0ad8","63ae3d27-ef09-4bfd-860c-a456b81f0944","e2679c18-f646-4edd-b5ea-d8bd80b8ef2e","a6f35d3b-6648-496a-97b6-0ea433ad194a","8ada5f43-06ce-4ea9-89a1-d955b28d6228","f66ed644-ae0e-40a6-b369-d096ad752293","20cfb547-cc76-4b36-b747-6ab607ffe55f","12c5362d-b2d7-4e5a-ab1f-406d4388517b","3e1d9c90-8606-462b-a052-34ea03629f4a"],"entities":{"21f08565-d913-4302-a853-e5f688ec1bc1":{"Isa":{"id":"21f08565-d913-4302-a853-e5f688ec1bc1","number":1,"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","subtypes":["b8ec6afc-ddbd-53d6-9be3-e4b738941c2f","a8b86e41-5b04-4469-8a10-91bd89603e27","d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","23a9a479-68e7-4a70-bcef-9041f10fd287","3a1c7f6a-459d-4eba-9291-2aebb9bf60c9","a9b74602-bdc5-481f-af4c-8021553b895a","cdb1afaf-245c-4d56-bfea-10f69e45007d","b7483723-222d-4f08-b7b9-e8b14f0308cf","e68f8912-9897-4cbd-b363-cb4203a726a9","c89e362d-7905-4226-8713-97d3d6f05037","ba8a3bbf-86a8-47e2-92bb-f41878981c41","efde0481-1599-4c5c-bf30-51dbd4a8ed83","95e17479-07a5-41b1-9930-1b9b520514f6","d48d948b-5291-4eb3-ba35-7ab1c1ffa098","dbada891-ca0d-4fbc-8371-9f9234867bd6","290f49d3-8ce7-408e-be14-611b66db9687","7056c5ba-4f49-404f-abd5-e5c6a5879fac","b28be6c2-a37a-4049-9110-52136f892fc4","dfb72d5a-91a4-4023-a7a9-baef28bed978"]}},"4b7360ba-8de3-4c93-bc90-22478c128a75":{"Binary":{"id":"4b7360ba-8de3-4c93-bc90-22478c128a75","number":5,"from":{"obj_id":"141350e6-b62d-4a6d-9ea2-47333e51e3ea","description":"has a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"describes a","cardinality":"One","conditionality":"Conditional"}}},"3746c64a-c63d-424d-afb2-c253470b6d7b":{"Isa":{"id":"3746c64a-c63d-424d-afb2-c253470b6d7b","number":6,"obj_id":"45644594-b418-5362-9294-a62fe2a0fa8e","subtypes":["e68f8912-9897-4cbd-b363-cb4203a726a9","88687f76-5d9e-404e-a801-f6f57f9b30ca","d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","c89e362d-7905-4226-8713-97d3d6f05037","f6a3ce12-18e1-4675-ab94-6b2a7c91d951","d48d948b-5291-4eb3-ba35-7ab1c1ffa098"]}},"02892323-60e9-470b-b162-b2bc8d9ef1cd":{"Binary":{"id":"02892323-60e9-470b-b162-b2bc8d9ef1cd","number":7,"from":{"obj_id":"141350e6-b62d-4a6d-9ea2-47333e51e3ea","description":"comprises a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"model"},"to":{"obj_id":"e68f8912-9897-4cbd-b363-cb4203a726a9","description":"is comprised of","cardinality":"One","conditionality":"Conditional"}}},"98c79b91-da7b-443a-b1fb-18596cd6b4bc":{"Binary":{"id":"98c79b91-da7b-443a-b1fb-18596cd6b4bc","number":8,"from":{"obj_id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","description":"adds functions to a","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"model_type"},"to":{"obj_id":"e68f8912-9897-4cbd-b363-cb4203a726a9","description":"may have an","cardinality":"One","conditionality":"Conditional"}}},"7993e2c7-7efa-4346-b50e-bc02d55e1ca7":{"Binary":{"id":"7993e2c7-7efa-4346-b50e-bc02d55e1ca7","number":9,"from":{"obj_id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","description":"may be contained in an","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"impl_block"},"to":{"obj_id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","description":"may contain","cardinality":"One","conditionality":"Conditional"}}},"fdb49afe-13fb-4c79-99d1-92728d8652c7":{"Binary":{"id":"fdb49afe-13fb-4c79-99d1-92728d8652c7","number":10,"from":{"obj_id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","description":"returns","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"return_type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"is returned by","cardinality":"One","conditionality":"Conditional"}}},"ea1e6d1c-279b-4b6d-806e-fa133c6a5da9":{"Isa":{"id":"ea1e6d1c-279b-4b6d-806e-fa133c6a5da9","number":11,"obj_id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","subtypes":["954b354f-3a90-440b-ab0f-43efc00d275e","9352c766-9f6b-413b-9ea0-13f9c8e4d86e"]}},"35491126-597f-4301-ae48-88da4a23c845":{"Isa":{"id":"35491126-597f-4301-ae48-88da4a23c845","number":12,"obj_id":"954b354f-3a90-440b-ab0f-43efc00d275e","subtypes":["0365b40c-c40a-4653-84ab-44d1c12d294f","f192b162-8ada-4128-8805-1953e9165c54","8d86dceb-7e6e-4767-8a3f-cbbde458ad93"]}},"336674ce-19be-4baa-8117-19ee19886e2d":{"Binary":{"id":"336674ce-19be-4baa-8117-19ee19886e2d","number":13,"from":{"obj_id":"f192b162-8ada-4128-8805-1953e9165c54","description":"is available to a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"function"},"to":{"obj_id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","description":"receives a value via a","cardinality":"One","conditionality":"Conditional"}}},"95b8c311-1f3f-42ab-93cd-9b95c8d8c02a":{"Binary":{"id":"95b8c311-1f3f-42ab-93cd-9b95c8d8c02a","number":14,"from":{"obj_id":"f192b162-8ada-4128-8805-1953e9165c54","description":"follows","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"f192b162-8ada-4128-8805-1953e9165c54","description":"preceeds","cardinality":"One","conditionality":"Conditional"}}},"3966271b-9938-48c7-b4fe-177c307e22bf":{"Isa":{"id":"3966271b-9938-48c7-b4fe-177c307e22bf","number":15,"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","subtypes":["30c31621-a4bd-4356-80b9-1226e00651c9","dbbb7d46-4072-49a6-b483-cc8b25cbb4ea","d715c5f9-23f8-45e0-a1df-34e27acd01f5","d546feef-91df-49ea-ac61-430bdcf9832c","6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656","43bebcb3-06a1-410d-a19e-b3c1c6d1fa6b","1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","26dba2c5-a7e9-4556-a9c2-79091a97b941","72443b79-5645-4b5f-b317-e1a8f815b81c","93f288e7-d670-40a6-91f3-2006b5efa8b4","e1321ffa-07d5-480d-89f9-227b13d27ce1","3f7fd816-518b-4b9e-8134-3059e78045a0","e05ab5f3-17e7-4594-8ce0-c02d793a1df9","ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","4d5720eb-da8c-493d-ab8d-cb6111dd6099","0b3e9de0-d139-4934-a043-d1913a24de0c","0dc0e921-e7ff-4766-9738-e6e312f7f0de","5c85a8db-e4cc-4e38-9922-58d93773f4f0","3874760d-0104-4670-ba8b-1af413c5ec4a","1e7a66b2-f559-4c21-b8e6-969999ed171d","95e17479-07a5-41b1-9930-1b9b520514f6","52143d28-8474-44bc-b63f-e654150888d3","ab7a5708-6d12-4dce-b488-fa3a3b480510","4856978f-20be-4b59-8bf6-b941091119a9","47abdb96-0225-4880-a472-9c714086e2b5"]}},"2e81ce06-82d5-47e6-9f38-783d8af057d9":{"Isa":{"id":"2e81ce06-82d5-47e6-9f38-783d8af057d9","number":16,"obj_id":"6c7969f3-f150-4975-a989-a7bc8164b168","subtypes":["ce2da156-e0fd-4e56-bb31-2030d4e0c599","c32fcb6d-b505-492f-95c8-5f118079a399","59f269ab-2dbc-4b07-b9bc-48441f20e78f","59f269ab-2dbc-4b07-b9bc-48441f20e78f","b359d531-77ae-436f-9f0d-6a5632f1648e"]}},"03745d2b-a85f-40a9-b038-8f22c83e8eb1":{"Binary":{"id":"03745d2b-a85f-40a9-b038-8f22c83e8eb1","number":17,"from":{"obj_id":"6c7969f3-f150-4975-a989-a7bc8164b168","description":"follows","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"6c7969f3-f150-4975-a989-a7bc8164b168","description":"preceeds","cardinality":"One","conditionality":"Conditional"}}},"c715993f-c840-4d48-8442-b5635e4324e7":{"Binary":{"id":"c715993f-c840-4d48-8442-b5635e4324e7","number":18,"from":{"obj_id":"6c7969f3-f150-4975-a989-a7bc8164b168","description":"is contianed in a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"block"},"to":{"obj_id":"30c31621-a4bd-4356-80b9-1226e00651c9","description":"may contain many","cardinality":"One","conditionality":"Conditional"}}},"f6c19c17-3e01-4945-bffb-7ec408dd7fcf":{"Binary":{"id":"f6c19c17-3e01-4945-bffb-7ec408dd7fcf","number":19,"from":{"obj_id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","description":"executes statements in a","cardinality":"One","conditionality":"Unconditional","formalizing_attribute_name":"body"},"to":{"obj_id":"c4723d6d-1584-49bd-80f1-4c700185746e","description":"provides statements to a","cardinality":"One","conditionality":"Conditional"}}},"d8bf88d3-35da-422d-a7d9-1726ce66a288":{"Binary":{"id":"d8bf88d3-35da-422d-a7d9-1726ce66a288","number":20,"from":{"obj_id":"c32fcb6d-b505-492f-95c8-5f118079a399","description":"assigns the value of an","cardinality":"One","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is assigned by a","cardinality":"One","conditionality":"Conditional"}}},"0b5aab4e-5077-4627-9091-89c71a921be1":{"Binary":{"id":"0b5aab4e-5077-4627-9091-89c71a921be1","number":21,"from":{"obj_id":"c32fcb6d-b505-492f-95c8-5f118079a399","description":"assigns a value to a","cardinality":"One","conditionality":"Unconditional","formalizing_attribute_name":"variable"},"to":{"obj_id":"0365b40c-c40a-4653-84ab-44d1c12d294f","description":"is introduced by a","cardinality":"One","conditionality":"Unconditional"}}},"3bb006c5-a66d-440b-b54b-35bc9da87b33":{"Isa":{"id":"3bb006c5-a66d-440b-b54b-35bc9da87b33","number":22,"obj_id":"dbbb7d46-4072-49a6-b483-cc8b25cbb4ea","subtypes":["d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5","d30d2b03-732b-41bb-89ed-d053750bf987","b1612607-a813-4bc2-896b-88ec4b249447","fa42f4e2-1ff3-473f-a4b9-593c01134e96","0e1e683a-fe89-4002-88fa-efd50d66de6c","1a5eca02-909e-434c-bd35-b02f2b7dbe22"]}},"e67c9242-2aac-4930-ae2e-b2a1678ed3d9":{"Binary":{"id":"e67c9242-2aac-4930-ae2e-b2a1678ed3d9","number":24,"from":{"obj_id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","description":"is decoded by a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"lends semantics to a","cardinality":"One","conditionality":"Conditional"}}},"332f2cb5-0719-4c2d-8737-c1a0375fad8e":{"Isa":{"id":"332f2cb5-0719-4c2d-8737-c1a0375fad8e","number":35,"obj_id":"d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5","subtypes":["dc6d1ffa-5dca-43ef-b973-0628ab580cb7","a16027c2-9a1d-42b7-ab37-a4e8e0bb7e4d"]}},"e93a7669-d7d0-4cb2-bbb1-36dedf3f893d":{"Binary":{"id":"e93a7669-d7d0-4cb2-bbb1-36dedf3f893d","number":26,"from":{"obj_id":"3874760d-0104-4670-ba8b-1af413c5ec4a","description":"belongs to a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"struct"},"to":{"obj_id":"d546feef-91df-49ea-ac61-430bdcf9832c","description":"may have many","cardinality":"One","conditionality":"Conditional"}}},"ead7f44b-e37a-4122-8824-17f4079c2e70":{"Binary":{"id":"ead7f44b-e37a-4122-8824-17f4079c2e70","number":27,"from":{"obj_id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","description":"contains an","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"may be a","cardinality":"One","conditionality":"Conditional"}}},"33838622-f03e-415f-9588-e7f9e644727e":{"Binary":{"id":"33838622-f03e-415f-9588-e7f9e644727e","number":27,"from":{"obj_id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","description":"follows","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","description":"preceeds","cardinality":"One","conditionality":"Conditional"}}},"54994661-e099-453c-904f-c09cc0fa0bfa":{"Binary":{"id":"54994661-e099-453c-904f-c09cc0fa0bfa","number":28,"from":{"obj_id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","description":"is part of a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"function"},"to":{"obj_id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","description":"may have","cardinality":"One","conditionality":"Conditional"}}},"0cde3a3b-6678-42ac-8fa4-8ab02acb3dea":{"Binary":{"id":"0cde3a3b-6678-42ac-8fa4-8ab02acb3dea","number":29,"from":{"obj_id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","description":"may be an","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"may be a","cardinality":"One","conditionality":"Conditional"}}},"688ec08e-9fd6-4a2f-bcd5-5ea94e946d1b":{"Isa":{"id":"688ec08e-9fd6-4a2f-bcd5-5ea94e946d1b","number":30,"obj_id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","subtypes":["01c8907d-cb59-4fae-a3ca-8cb331d18387","75a16785-d611-45ce-b52c-284a9da0b4b8","79069fc2-4d65-4073-b610-4afc0488de5c","470246f6-91ec-4993-b915-93480d0f4eb9"]}},"e0a24038-1c85-4d6f-afbc-5c034062a557":{"Binary":{"id":"e0a24038-1c85-4d6f-afbc-5c034062a557","number":31,"from":{"obj_id":"59f269ab-2dbc-4b07-b9bc-48441f20e78f","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"96737350-249d-4701-9b47-0f56bf8bfc7f":{"Binary":{"id":"96737350-249d-4701-9b47-0f56bf8bfc7f","number":32,"from":{"obj_id":"6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"9fd61528-8e0f-40d0-b1bb-53b468851d30":{"Binary":{"id":"9fd61528-8e0f-40d0-b1bb-53b468851d30","number":33,"from":{"obj_id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"block"},"to":{"obj_id":"30c31621-a4bd-4356-80b9-1226e00651c9","description":"","cardinality":"One","conditionality":"Conditional"}}},"95fcc898-ef24-4ec4-8409-798a6623713e":{"Binary":{"id":"95fcc898-ef24-4ec4-8409-798a6623713e","number":36,"from":{"obj_id":"cdb1afaf-245c-4d56-bfea-10f69e45007d","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"","cardinality":"One","conditionality":"Conditional"}}},"de725e45-a751-4f4b-8c44-6c79671c70eb":{"Binary":{"id":"de725e45-a751-4f4b-8c44-6c79671c70eb","number":37,"from":{"obj_id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"39f2d2c1-abf2-4f3e-a4f1-58a477b12f9e":{"Binary":{"id":"39f2d2c1-abf2-4f3e-a4f1-58a477b12f9e","number":38,"from":{"obj_id":"3874760d-0104-4670-ba8b-1af413c5ec4a","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"81d77ddd-6aae-4023-8467-2f5705d5e633":{"Binary":{"id":"81d77ddd-6aae-4023-8467-2f5705d5e633","number":39,"from":{"obj_id":"d546feef-91df-49ea-ac61-430bdcf9832c","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"data"},"to":{"obj_id":"31deb355-b737-43a6-ae88-199bb51f940d","description":"","cardinality":"One","conditionality":"Conditional"}}},"c45955d9-c799-4d61-8bc6-6335bde326b8":{"Binary":{"id":"c45955d9-c799-4d61-8bc6-6335bde326b8","number":40,"from":{"obj_id":"c89e362d-7905-4226-8713-97d3d6f05037","description":"","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"object"},"to":{"obj_id":"7178e7a4-5131-504b-a7b3-c2c0cfedf343","description":"","cardinality":"One","conditionality":"Conditional"}}},"bc8075e9-e5ba-4a26-b696-7cf2651997ba":{"Binary":{"id":"bc8075e9-e5ba-4a26-b696-7cf2651997ba","number":41,"from":{"obj_id":"b359d531-77ae-436f-9f0d-6a5632f1648e","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"6f636d63-667a-40ad-b554-a301a62ddebd":{"Binary":{"id":"6f636d63-667a-40ad-b554-a301a62ddebd","number":25,"from":{"obj_id":"45644594-b418-5362-9294-a62fe2a0fa8e","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"source"},"to":{"obj_id":"97f815f0-dcc4-4bd3-843d-13ff1dc5802c","description":"","cardinality":"One","conditionality":"Conditional"}}},"f564f775-febe-442e-a0f1-492a2265e991":{"Binary":{"id":"f564f775-febe-442e-a0f1-492a2265e991","number":42,"from":{"obj_id":"72443b79-5645-4b5f-b317-e1a8f815b81c","description":"iterates over an","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is provided to a","cardinality":"One","conditionality":"Conditional"}}},"0e780acf-9221-4e84-9377-64d31e653187":{"Binary":{"id":"0e780acf-9221-4e84-9377-64d31e653187","number":43,"from":{"obj_id":"72443b79-5645-4b5f-b317-e1a8f815b81c","description":"executes a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"block"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is executed by","cardinality":"One","conditionality":"Conditional"}}},"fc2e5c67-6c98-4bfd-93a7-711fa2ae573f":{"Binary":{"id":"fc2e5c67-6c98-4bfd-93a7-711fa2ae573f","number":44,"from":{"obj_id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","description":"branches based on","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"test"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is evaluated by","cardinality":"One","conditionality":"Conditional"}}},"ba437581-658a-497d-9790-ab79ad56cd4f":{"Binary":{"id":"ba437581-658a-497d-9790-ab79ad56cd4f","number":45,"from":{"obj_id":"93f288e7-d670-40a6-91f3-2006b5efa8b4","description":"evaluates and returns","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is returned by","cardinality":"One","conditionality":"Conditional"}}},"cdd19ddf-67e5-4e9b-9958-0745e8f9729e":{"Binary":{"id":"cdd19ddf-67e5-4e9b-9958-0745e8f9729e","number":46,"from":{"obj_id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","description":"when true, evaluates","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"true_block"},"to":{"obj_id":"30c31621-a4bd-4356-80b9-1226e00651c9","description":"is evaluated by","cardinality":"One","conditionality":"Conditional"}}},"c8d05983-b88d-40da-bf31-83d2d8b8c574":{"Isa":{"id":"c8d05983-b88d-40da-bf31-83d2d8b8c574","number":47,"obj_id":"3f7fd816-518b-4b9e-8134-3059e78045a0","subtypes":["9c8bc563-b596-4348-9189-065d747f7c9f","c46e6b80-0365-429a-abf9-ca75ce4f469a","f7fc16ac-6a23-4f5d-a04c-1163617701c1"]}},"c6ed5fc4-f04a-45e0-afc3-6f421b81fea7":{"Isa":{"id":"c6ed5fc4-f04a-45e0-afc3-6f421b81fea7","number":48,"obj_id":"9c8bc563-b596-4348-9189-065d747f7c9f","subtypes":["1b4e5b3a-a9b2-4316-94c4-ff34d4d3d523","e3329a9e-1c52-44f6-a1f7-fc85f7362e9e","c47b8696-7e98-4733-ab33-a4dca7b61d01","6767c0cf-4041-4047-b2b4-d7375f33bc97","35b3de4e-46b8-490f-8e30-c305ed348a78","222307c0-668c-43f9-9368-34cc048f0ae3"]}},"27350475-a322-4ede-a4b2-eb88a3c847f5":{"Isa":{"id":"27350475-a322-4ede-a4b2-eb88a3c847f5","number":49,"obj_id":"c46e6b80-0365-429a-abf9-ca75ce4f469a","subtypes":["484e429b-bf54-45cb-9b87-baddf7fb5f5b","d8b554d4-03ac-4613-a3e0-fc0b901bfd70","0edc535b-405d-4dd5-bcd2-f5772ab116c2","ce73a111-4670-411e-9bd2-f3308d6399c9","b8d3d40e-462e-4e4d-9fb4-b7d54f9fd03a","84f1c5fd-d907-4653-a132-bfd420ad9212"]}},"513c99bc-140c-44c2-b605-0d377805ac43":{"Binary":{"id":"513c99bc-140c-44c2-b605-0d377805ac43","number":50,"from":{"obj_id":"3f7fd816-518b-4b9e-8134-3059e78045a0","description":"left hand side","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"lhs"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"55ae9c5d-bcdb-4c29-8f06-cc9f596662d5":{"Binary":{"id":"55ae9c5d-bcdb-4c29-8f06-cc9f596662d5","number":51,"from":{"obj_id":"3f7fd816-518b-4b9e-8134-3059e78045a0","description":"right hand side","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"rhs"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"23c220df-e5a3-44dc-b521-d29378c6a5e0":{"Binary":{"id":"23c220df-e5a3-44dc-b521-d29378c6a5e0","number":52,"from":{"obj_id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","description":"false block","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"false_block"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"71251371-81c5-4f25-8141-fef1e23e12fe":{"Binary":{"id":"71251371-81c5-4f25-8141-fef1e23e12fe","number":53,"from":{"obj_id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","description":"follows","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","description":"preceeds","cardinality":"One","conditionality":"Conditional"}}},"761a6c93-ae0b-4508-9437-d68d0b2c1f22":{"Binary":{"id":"761a6c93-ae0b-4508-9437-d68d0b2c1f22","number":54,"from":{"obj_id":"e05ab5f3-17e7-4594-8ce0-c02d793a1df9","description":"contains","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"elements"},"to":{"obj_id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","description":"is in a ","cardinality":"Many","conditionality":"Unconditional"}}},"8398d7d3-d42f-4ca6-89d3-7a563eb50131":{"Binary":{"id":"8398d7d3-d42f-4ca6-89d3-7a563eb50131","number":55,"from":{"obj_id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","description":"points at an","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is used by a","cardinality":"One","conditionality":"Conditional"}}},"124d7dea-f1d6-477f-a096-42e92dd297c2":{"Binary":{"id":"124d7dea-f1d6-477f-a096-42e92dd297c2","number":56,"from":{"obj_id":"4d5720eb-da8c-493d-ab8d-cb6111dd6099","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"index"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"07097b52-f614-461b-9d4c-62ba7177a383":{"Binary":{"id":"07097b52-f614-461b-9d4c-62ba7177a383","number":57,"from":{"obj_id":"4d5720eb-da8c-493d-ab8d-cb6111dd6099","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"target"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"5e20da11-448d-41a5-8b92-7dd75d64ad3d":{"Binary":{"id":"5e20da11-448d-41a5-8b92-7dd75d64ad3d","number":58,"from":{"obj_id":"0b3e9de0-d139-4934-a043-d1913a24de0c","description":"","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"lhs"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"10e2f3e9-2995-47e0-9456-ed375eb610b7":{"Binary":{"id":"10e2f3e9-2995-47e0-9456-ed375eb610b7","number":59,"from":{"obj_id":"0b3e9de0-d139-4934-a043-d1913a24de0c","description":"","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"rhs"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"d64c3d2d-51d9-4586-b8e7-0b23aea46f49":{"Isa":{"id":"d64c3d2d-51d9-4586-b8e7-0b23aea46f49","number":60,"obj_id":"0b3e9de0-d139-4934-a043-d1913a24de0c","subtypes":["70932b40-f444-4341-bb19-0a29d1daecbe","32dbb54a-9693-4847-9278-7c956ea045f8","122e4157-381f-400f-ac30-a1c8a2a9e8c1","17db2afc-ae6c-4e53-a527-48516811fe3e","30abb231-4248-4ffa-9a69-e0eb6bb9dbbd"]}},"497076d2-1625-446b-b663-d75f5c2e2a3c":{"Binary":{"id":"497076d2-1625-446b-b663-d75f5c2e2a3c","number":61,"from":{"obj_id":"0dc0e921-e7ff-4766-9738-e6e312f7f0de","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"f42505df-9843-4914-97bc-c665dfbc2dcc":{"Binary":{"id":"f42505df-9843-4914-97bc-c665dfbc2dcc","number":62,"from":{"obj_id":"79571896-9798-44a3-acef-5aa2d9773b93","description":"","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"","cardinality":"One","conditionality":"Conditional"}}},"dfa0880b-de0a-4d0f-9f42-7ed496af35ea":{"Binary":{"id":"dfa0880b-de0a-4d0f-9f42-7ed496af35ea","number":63,"from":{"obj_id":"79571896-9798-44a3-acef-5aa2d9773b93","description":"","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"value"},"to":{"obj_id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","description":"","cardinality":"One","conditionality":"Unconditional"}}},"7fb6cd7d-16c0-43bc-9e29-f645c644afe1":{"Binary":{"id":"7fb6cd7d-16c0-43bc-9e29-f645c644afe1","number":64,"from":{"obj_id":"79571896-9798-44a3-acef-5aa2d9773b93","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"source"},"to":{"obj_id":"97f815f0-dcc4-4bd3-843d-13ff1dc5802c","description":"","cardinality":"One","conditionality":"Conditional"}}},"f72fcd31-7056-4425-b0ce-7734a759e616":{"Binary":{"id":"f72fcd31-7056-4425-b0ce-7734a759e616","number":66,"from":{"obj_id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"struct"},"to":{"obj_id":"e68f8912-9897-4cbd-b363-cb4203a726a9","description":"","cardinality":"One","conditionality":"Conditional"}}},"b197d992-e4d6-4663-a6da-b46906374684":{"Isa":{"id":"b197d992-e4d6-4663-a6da-b46906374684","number":67,"obj_id":"bf69c9af-f268-4c9b-8e67-4497eb490478","subtypes":["141350e6-b62d-4a6d-9ea2-47333e51e3ea","d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","7eaea922-8807-4c38-a704-0143e0594664"]}},"7022f5ed-020f-453f-bcab-8e632ca03b6e":{"Binary":{"id":"7022f5ed-020f-453f-bcab-8e632ca03b6e","number":65,"from":{"obj_id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"field"},"to":{"obj_id":"bf69c9af-f268-4c9b-8e67-4497eb490478","description":"","cardinality":"One","conditionality":"Conditional"}}},"1ec425ff-8b5a-49bf-87cb-9863defb9320":{"Binary":{"id":"1ec425ff-8b5a-49bf-87cb-9863defb9320","number":68,"from":{"obj_id":"1e7a66b2-f559-4c21-b8e6-969999ed171d","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"lhs"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"99d07c03-f3ce-42d7-bb64-8bde65c79dd6":{"Binary":{"id":"99d07c03-f3ce-42d7-bb64-8bde65c79dd6","number":69,"from":{"obj_id":"1e7a66b2-f559-4c21-b8e6-969999ed171d","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"","cardinality":"One","conditionality":"Conditional"}}},"3088e0b8-de0a-45d2-95fb-e8804c9c03fa":{"Binary":{"id":"3088e0b8-de0a-45d2-95fb-e8804c9c03fa","number":71,"from":{"obj_id":"30c31621-a4bd-4356-80b9-1226e00651c9","description":"","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"statement"},"to":{"obj_id":"6c7969f3-f150-4975-a989-a7bc8164b168","description":"","cardinality":"One","conditionality":"Conditional"}}},"a640575d-a105-4ad5-b786-6e7fb55a0b94":{"Isa":{"id":"a640575d-a105-4ad5-b786-6e7fb55a0b94","number":72,"obj_id":"222307c0-668c-43f9-9368-34cc048f0ae3","subtypes":["6187076b-e765-4e6b-af28-f577eba40b5e","41b7bda7-f5a2-4c94-af22-fedbe8d6f287"]}},"d32059a8-46ed-4ceb-9b92-5f661b98f4e6":{"Isa":{"id":"d32059a8-46ed-4ceb-9b92-5f661b98f4e6","number":70,"obj_id":"f7fc16ac-6a23-4f5d-a04c-1163617701c1","subtypes":["80f73c4e-caf1-4e1f-a634-00965f6ad032","0ad229c4-1782-4783-b64e-0d15fe482463"]}},"cfe90847-d888-4245-bb66-901855bb0051":{"Binary":{"id":"cfe90847-d888-4245-bb66-901855bb0051","number":73,"from":{"obj_id":"95e17479-07a5-41b1-9930-1b9b520514f6","description":"contains a","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"body"},"to":{"obj_id":"c4723d6d-1584-49bd-80f1-4c700185746e","description":"is defined by","cardinality":"One","conditionality":"Conditional"}}},"45c4a4f5-e54b-45d2-bea6-617723a92b70":{"Binary":{"id":"45c4a4f5-e54b-45d2-bea6-617723a92b70","number":74,"from":{"obj_id":"95e17479-07a5-41b1-9930-1b9b520514f6","description":"has a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"return_type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"","cardinality":"One","conditionality":"Conditional"}}},"14f71b3f-b918-4376-8e75-7333e85ca536":{"Binary":{"id":"14f71b3f-b918-4376-8e75-7333e85ca536","number":75,"from":{"obj_id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","description":"","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","description":"previous","cardinality":"One","conditionality":"Conditional"}}},"8d8db4b1-8c90-472b-bc98-88fa6a2188d1":{"Binary":{"id":"8d8db4b1-8c90-472b-bc98-88fa6a2188d1","number":76,"from":{"obj_id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","description":"helps define a function signature","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"lambda"},"to":{"obj_id":"95e17479-07a5-41b1-9930-1b9b520514f6","description":"use used by","cardinality":"One","conditionality":"Conditional"}}},"44ad55c5-bb62-4864-90e7-e992494786aa":{"Binary":{"id":"44ad55c5-bb62-4864-90e7-e992494786aa","number":77,"from":{"obj_id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","description":"may require a type","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"applies to","cardinality":"One","conditionality":"Conditional"}}},"c12fcdf7-ec63-58c7-8555-36222f25b91b":{"Associative":{"id":"c12fcdf7-ec63-58c7-8555-36222f25b91b","number":78,"from":{"id":"4c7a4c0b-c22d-5b7d-8d58-028ae5116e1b","obj_id":"68e7191a-fe94-423f-8a5d-5551384ae998","cardinality":"One","one_referential_attribute":"z_store","other_referential_attribute":"object"},"one":{"obj_id":"b7483723-222d-4f08-b7b9-e8b14f0308cf","description":"houses","cardinality":"Many","conditionality":"Unconditional"},"other":{"obj_id":"7178e7a4-5131-504b-a7b3-c2c0cfedf343","description":"lives in an","cardinality":"One","conditionality":"Unconditional"}}},"c3dba39c-fe1e-49e0-9a45-8f872b6aa4c5":{"Binary":{"id":"c3dba39c-fe1e-49e0-9a45-8f872b6aa4c5","number":79,"from":{"obj_id":"f192b162-8ada-4128-8805-1953e9165c54","description":"requires a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"is used by","cardinality":"One","conditionality":"Conditional"}}},"f1c15ada-631b-4249-8c73-4e52391a532f":{"Binary":{"id":"f1c15ada-631b-4249-8c73-4e52391a532f","number":4,"from":{"obj_id":"e68f8912-9897-4cbd-b363-cb4203a726a9","description":"mirrors an","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"object"},"to":{"obj_id":"7178e7a4-5131-504b-a7b3-c2c0cfedf343","description":"is surfaced as a","cardinality":"One","conditionality":"Conditional"}}},"a5ac6af9-3cef-49e5-8d01-462817e1d641":{"Isa":{"id":"a5ac6af9-3cef-49e5-8d01-462817e1d641","number":80,"obj_id":"c4723d6d-1584-49bd-80f1-4c700185746e","subtypes":["7794ada6-49c3-4bf0-991f-828c6583ebb8","30c31621-a4bd-4356-80b9-1226e00651c9"]}},"868b4a28-0d2f-4d78-b947-66f44c3bdaf9":{"Binary":{"id":"868b4a28-0d2f-4d78-b947-66f44c3bdaf9","number":81,"from":{"obj_id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","description":"may have a first","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"argument"},"to":{"obj_id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","description":"may be the first to (lame)","cardinality":"One","conditionality":"Conditional"}}},"ca33902a-c6f2-45a5-9273-cf80a579cedd":{"Binary":{"id":"ca33902a-c6f2-45a5-9273-cf80a579cedd","number":82,"from":{"obj_id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","description":"may have a first parameter","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"first_param"},"to":{"obj_id":"f192b162-8ada-4128-8805-1953e9165c54","description":"may be the first to this","cardinality":"One","conditionality":"Conditional"}}},"d440f204-2694-4438-b618-721a9108070f":{"Binary":{"id":"d440f204-2694-4438-b618-721a9108070f","number":83,"from":{"obj_id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","description":"may refer to an","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"object_store"},"to":{"obj_id":"b7483723-222d-4f08-b7b9-e8b14f0308cf","description":"This should really be to a subtype","cardinality":"One","conditionality":"Conditional"}}},"18c4566d-a7b7-4b1d-8e0b-470fddbaab9b":{"Binary":{"id":"18c4566d-a7b7-4b1d-8e0b-470fddbaab9b","number":86,"from":{"obj_id":"c8fcd612-6ca8-469a-824c-de218e4fd075","description":"must have a type","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"is used my a","cardinality":"One","conditionality":"Conditional"}}},"33b9b943-0d44-4490-b20a-35c110ae9473":{"Isa":{"id":"33b9b943-0d44-4490-b20a-35c110ae9473","number":85,"obj_id":"7eaea922-8807-4c38-a704-0143e0594664","subtypes":["4b6c7fde-0878-4947-b960-bc73a4558c60","e6fbeeb8-6ade-46a2-bb52-9c99d06918b2","c8fcd612-6ca8-469a-824c-de218e4fd075"]}},"4ce09575-5a2c-40c5-b766-bb12ef0c1600":{"Binary":{"id":"4ce09575-5a2c-40c5-b766-bb12ef0c1600","number":88,"from":{"obj_id":"7eaea922-8807-4c38-a704-0143e0594664","description":"belongs to an","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"enum"},"to":{"obj_id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","description":"is composed of","cardinality":"One","conditionality":"Conditional"}}},"193d881e-9afd-4b9e-a431-cdb113a7ee88":{"Binary":{"id":"193d881e-9afd-4b9e-a431-cdb113a7ee88","number":91,"from":{"obj_id":"52143d28-8474-44bc-b63f-e654150888d3","description":"deconstructs ","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"scrutinee"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is deconstructod by","cardinality":"One","conditionality":"Conditional"}}},"badf3d57-aba3-4757-b0e4-9d0e7b55f2ea":{"Associative":{"id":"badf3d57-aba3-4757-b0e4-9d0e7b55f2ea","number":87,"from":{"id":"091c60c4-87c3-559d-88d0-e8fc60f68a9b","obj_id":"6094aad5-613b-42b6-8f48-c3b9e2161aa9","cardinality":"One","one_referential_attribute":"match","other_referential_attribute":"match_expr"},"one":{"obj_id":"52143d28-8474-44bc-b63f-e654150888d3","description":"matches","cardinality":"Many","conditionality":"Unconditional"},"other":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"are matched by","cardinality":"Many","conditionality":"Conditional"}}},"08512716-f1d3-4a88-bd38-aea9ae0f9ca7":{"Binary":{"id":"08512716-f1d3-4a88-bd38-aea9ae0f9ca7","number":92,"from":{"obj_id":"6094aad5-613b-42b6-8f48-c3b9e2161aa9","description":"executes","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is executed because of a ","cardinality":"One","conditionality":"Conditional"}}},"0ed07f33-0bbb-497d-9823-9247fc520e85":{"Binary":{"id":"0ed07f33-0bbb-497d-9823-9247fc520e85","number":93,"from":{"obj_id":"30c31621-a4bd-4356-80b9-1226e00651c9","description":"","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"parent"},"to":{"obj_id":"30c31621-a4bd-4356-80b9-1226e00651c9","description":"child","cardinality":"One","conditionality":"Conditional"}}},"cea29749-dc0f-40c0-adf9-4c21b187751e":{"Isa":{"id":"cea29749-dc0f-40c0-adf9-4c21b187751e","number":94,"obj_id":"3874760d-0104-4670-ba8b-1af413c5ec4a","subtypes":["6822b78e-e5ca-4c40-ba9d-cf7a69d4fdc7","910e3a08-5e99-47a5-bde4-3e35cf9f00da"]}},"599c1454-9525-4386-b50f-4fdee4b08373":{"Isa":{"id":"599c1454-9525-4386-b50f-4fdee4b08373","number":95,"obj_id":"31deb355-b737-43a6-ae88-199bb51f940d","subtypes":["e68f8912-9897-4cbd-b363-cb4203a726a9","d48d948b-5291-4eb3-ba35-7ab1c1ffa098"]}},"9f2917c8-b17b-4ab2-8c6e-0269a0b80681":{"Binary":{"id":"9f2917c8-b17b-4ab2-8c6e-0269a0b80681","number":89,"from":{"obj_id":"39060ea9-5d45-4954-a29f-ba88e01e7217","description":"next","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"39060ea9-5d45-4954-a29f-ba88e01e7217","description":"previous","cardinality":"One","conditionality":"Conditional"}}},"3c241319-416a-4195-ae80-fa4439198c1c":{"Binary":{"id":"3c241319-416a-4195-ae80-fa4439198c1c","number":96,"from":{"obj_id":"d546feef-91df-49ea-ac61-430bdcf9832c","description":"has a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"path"},"to":{"obj_id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","description":"points at","cardinality":"One","conditionality":"Unconditional"}}},"12003437-2898-4b1d-ba27-b1cc69d8dbb2":{"Binary":{"id":"12003437-2898-4b1d-ba27-b1cc69d8dbb2","number":90,"from":{"obj_id":"39060ea9-5d45-4954-a29f-ba88e01e7217","description":"comprises","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"path"},"to":{"obj_id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","description":"is comprised of","cardinality":"One","conditionality":"Unconditional"}}},"940f5aba-58f5-46fa-bbba-43fc6b10a3fe":{"Binary":{"id":"940f5aba-58f5-46fa-bbba-43fc6b10a3fe","number":97,"from":{"obj_id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","description":"first element","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"first"},"to":{"obj_id":"39060ea9-5d45-4954-a29f-ba88e01e7217","description":"i win!","cardinality":"One","conditionality":"Unconditional"}}},"42c18b66-d259-40d1-a77d-0c0e76080a6d":{"Binary":{"id":"42c18b66-d259-40d1-a77d-0c0e76080a6d","number":98,"from":{"obj_id":"4856978f-20be-4b59-8bf6-b941091119a9","description":"awaits","cardinality":"One","conditionality":"Unconditional","formalizing_attribute_name":"future"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is awaited upon by","cardinality":"One","conditionality":"Conditional"}}},"04ae2e8d-c499-4068-88bd-015b0bba57bf":{"Binary":{"id":"04ae2e8d-c499-4068-88bd-015b0bba57bf","number":2,"from":{"obj_id":"dbada891-ca0d-4fbc-8371-9f9234867bd6","description":"contains","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"value"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"may be wrapped by a","cardinality":"One","conditionality":"Conditional"}}},"e4734a39-1f45-400f-937a-285e2fad31a4":{"Binary":{"id":"e4734a39-1f45-400f-937a-285e2fad31a4","number":100,"from":{"obj_id":"290f49d3-8ce7-408e-be14-611b66db9687","description":"applies to a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"struct"},"to":{"obj_id":"e68f8912-9897-4cbd-b363-cb4203a726a9","description":"may be parameterized by","cardinality":"One","conditionality":"Conditional"}}},"da1d6545-b9d6-499e-9175-fd2a340b1f2e":{"Binary":{"id":"da1d6545-b9d6-499e-9175-fd2a340b1f2e","number":101,"from":{"obj_id":"290f49d3-8ce7-408e-be14-611b66db9687","description":"","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"290f49d3-8ce7-408e-be14-611b66db9687","description":"previous","cardinality":"One","conditionality":"Conditional"}}},"c8a4b21a-62c3-4fbd-8799-2b55d93d951c":{"Binary":{"id":"c8a4b21a-62c3-4fbd-8799-2b55d93d951c","number":102,"from":{"obj_id":"e68f8912-9897-4cbd-b363-cb4203a726a9","description":"may have a ","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"first generic"},"to":{"obj_id":"290f49d3-8ce7-408e-be14-611b66db9687","description":"struct leader","cardinality":"One","conditionality":"Unconditional"}}},"23ef9104-65a5-4b32-943f-a2db064c699f":{"Binary":{"id":"23ef9104-65a5-4b32-943f-a2db064c699f","number":103,"from":{"obj_id":"95e17479-07a5-41b1-9930-1b9b520514f6","description":"may have a","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"first_param"},"to":{"obj_id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","description":"may refer to a","cardinality":"One","conditionality":"Unconditional"}}},"94b3bb70-e939-46bd-ae53-c01cd74430c1":{"Binary":{"id":"94b3bb70-e939-46bd-ae53-c01cd74430c1","number":104,"from":{"obj_id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","description":"parameterizes","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"enum"},"to":{"obj_id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","description":"is paramaterized by","cardinality":"One","conditionality":"Conditional"}}},"7d003f0e-c38b-41fa-ae33-6333d9831146":{"Binary":{"id":"7d003f0e-c38b-41fa-ae33-6333d9831146","number":105,"from":{"obj_id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","description":"may have a first","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"first generic"},"to":{"obj_id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","description":"","cardinality":"One","conditionality":"Unconditional"}}},"fe6e5298-d4bb-447e-bffa-b4c38274abfd":{"Binary":{"id":"fe6e5298-d4bb-447e-bffa-b4c38274abfd","number":106,"from":{"obj_id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","description":"next","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","description":"previous","cardinality":"One","conditionality":"Conditional"}}},"2b46b080-32c8-4a2e-a118-d6a4bd4afc62":{"Binary":{"id":"2b46b080-32c8-4a2e-a118-d6a4bd4afc62","number":3,"from":{"obj_id":"b28be6c2-a37a-4049-9110-52136f892fc4","description":"","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"b28be6c2-a37a-4049-9110-52136f892fc4","description":"previous","cardinality":"One","conditionality":"Conditional"}}},"b7eb881e-d4f4-49c8-aba9-482a8c3935c5":{"Binary":{"id":"b7eb881e-d4f4-49c8-aba9-482a8c3935c5","number":99,"from":{"obj_id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","description":"","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"first_generic"},"to":{"obj_id":"b28be6c2-a37a-4049-9110-52136f892fc4","description":"","cardinality":"One","conditionality":"Unconditional"}}},"b66c47bf-a2e0-4d78-bc54-9116348c0ad8":{"Binary":{"id":"b66c47bf-a2e0-4d78-bc54-9116348c0ad8","number":107,"from":{"obj_id":"b28be6c2-a37a-4049-9110-52136f892fc4","description":"","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"func"},"to":{"obj_id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","description":"","cardinality":"One","conditionality":"Conditional"}}},"63ae3d27-ef09-4bfd-860c-a456b81f0944":{"Binary":{"id":"63ae3d27-ef09-4bfd-860c-a456b81f0944","number":108,"from":{"obj_id":"dbc37f2f-0a90-4a8b-a217-d4a70a606695","description":"refers to a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"string"},"to":{"obj_id":"d30d2b03-732b-41bb-89ed-d053750bf987","description":"may be in a","cardinality":"One","conditionality":"Conditional"}}},"e2679c18-f646-4edd-b5ea-d8bd80b8ef2e":{"Binary":{"id":"e2679c18-f646-4edd-b5ea-d8bd80b8ef2e","number":109,"from":{"obj_id":"80bf1ba4-2f74-45db-a1b1-6b76e82b2013","description":"refers to an","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"may be used by an","cardinality":"One","conditionality":"Conditional"}}},"a6f35d3b-6648-496a-97b6-0ea433ad194a":{"Isa":{"id":"a6f35d3b-6648-496a-97b6-0ea433ad194a","number":110,"obj_id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","subtypes":["80bf1ba4-2f74-45db-a1b1-6b76e82b2013","dbc37f2f-0a90-4a8b-a217-d4a70a606695"]}},"8ada5f43-06ce-4ea9-89a1-d955b28d6228":{"Binary":{"id":"8ada5f43-06ce-4ea9-89a1-d955b28d6228","number":112,"from":{"obj_id":"0e1e683a-fe89-4002-88fa-efd50d66de6c","description":"needs to first","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"first_format_bit"},"to":{"obj_id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","description":"someone has to do it","cardinality":"One","conditionality":"Unconditional"}}},"f66ed644-ae0e-40a6-b369-d096ad752293":{"Binary":{"id":"f66ed644-ae0e-40a6-b369-d096ad752293","number":113,"from":{"obj_id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","description":"next","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","description":"previous","cardinality":"One","conditionality":"Conditional"}}},"20cfb547-cc76-4b36-b747-6ab607ffe55f":{"Binary":{"id":"20cfb547-cc76-4b36-b747-6ab607ffe55f","number":111,"from":{"obj_id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","description":"comprise","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"format_string"},"to":{"obj_id":"0e1e683a-fe89-4002-88fa-efd50d66de6c","description":"is comprised of","cardinality":"One","conditionality":"Conditional"}}},"12c5362d-b2d7-4e5a-ab1f-406d4388517b":{"Binary":{"id":"12c5362d-b2d7-4e5a-ab1f-406d4388517b","number":84,"from":{"obj_id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","description":"may exist for an","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"enumeration"},"to":{"obj_id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","description":"may have an","cardinality":"One","conditionality":"Conditional"}}},"3e1d9c90-8606-462b-a052-34ea03629f4a":{"Binary":{"id":"3e1d9c90-8606-462b-a052-34ea03629f4a","number":114,"from":{"obj_id":"47abdb96-0225-4880-a472-9c714086e2b5","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}}}}} \ No newline at end of file +{"paper":{"ids":["3d320f60-bf7c-5f3b-a456-06fa8de4c2ef"],"entities":{"3d320f60-bf7c-5f3b-a456-06fa8de4c2ef":{"id":"3d320f60-bf7c-5f3b-a456-06fa8de4c2ef","domain_name":"lu_dog","description":"A blank domain","domain_ns":"3d320f60-bf7c-5f3b-a456-06fa8de4c2ef","width":8000,"height":6400,"offset":{"x":-1670,"y":-1033},"objects":{"b8ec6afc-ddbd-53d6-9be3-e4b738941c2f":{"x":2185,"y":2132,"width":232,"height":95},"7178e7a4-5131-504b-a7b3-c2c0cfedf343":{"x":2647,"y":2269,"width":252,"height":142},"45644594-b418-5362-9294-a62fe2a0fa8e":{"x":3662,"y":1923,"width":271,"height":100,"id":"45644594-b418-5362-9294-a62fe2a0fa8e"},"2e277e34-ab6f-4028-9c52-935c31520fec":{"x":2668,"y":2461,"width":252,"height":126,"id":"2e277e34-ab6f-4028-9c52-935c31520fec"},"e68f8912-9897-4cbd-b363-cb4203a726a9":{"x":3100,"y":2270,"width":307,"height":145,"id":"e68f8912-9897-4cbd-b363-cb4203a726a9"},"141350e6-b62d-4a6d-9ea2-47333e51e3ea":{"x":3163,"y":2461,"width":246,"height":133,"id":"141350e6-b62d-4a6d-9ea2-47333e51e3ea"},"88687f76-5d9e-404e-a801-f6f57f9b30ca":{"x":3647,"y":2270,"width":285,"height":148,"id":"88687f76-5d9e-404e-a801-f6f57f9b30ca"},"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5":{"x":4151,"y":2420,"width":320,"height":160,"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5"},"c89e362d-7905-4226-8713-97d3d6f05037":{"x":4527,"y":2257,"width":283,"height":139,"id":"c89e362d-7905-4226-8713-97d3d6f05037"},"94fc0044-4b88-4f5c-ac60-3a44262ade10":{"x":2696,"y":2767,"width":253,"height":131,"id":"94fc0044-4b88-4f5c-ac60-3a44262ade10"},"f192b162-8ada-4128-8805-1953e9165c54":{"x":2024,"y":2660,"width":265,"height":133,"id":"f192b162-8ada-4128-8805-1953e9165c54"},"954b354f-3a90-440b-ab0f-43efc00d275e":{"x":2390,"y":3118,"width":211,"height":129,"id":"954b354f-3a90-440b-ab0f-43efc00d275e"},"0365b40c-c40a-4653-84ab-44d1c12d294f":{"x":2028,"y":2832,"width":256,"height":116,"id":"0365b40c-c40a-4653-84ab-44d1c12d294f"},"9352c766-9f6b-413b-9ea0-13f9c8e4d86e":{"x":3010,"y":3115,"width":234,"height":135,"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e"},"30c31621-a4bd-4356-80b9-1226e00651c9":{"x":3865,"y":2738,"width":242,"height":128,"id":"30c31621-a4bd-4356-80b9-1226e00651c9"},"6c7969f3-f150-4975-a989-a7bc8164b168":{"x":3868,"y":2997,"width":241,"height":117,"id":"6c7969f3-f150-4975-a989-a7bc8164b168"},"c32fcb6d-b505-492f-95c8-5f118079a399":{"x":4296,"y":2896,"width":259,"height":125,"id":"c32fcb6d-b505-492f-95c8-5f118079a399"},"59f269ab-2dbc-4b07-b9bc-48441f20e78f":{"x":4300,"y":3074,"width":251,"height":137,"id":"59f269ab-2dbc-4b07-b9bc-48441f20e78f"},"b359d531-77ae-436f-9f0d-6a5632f1648e":{"x":4302,"y":3264,"width":252,"height":133,"id":"b359d531-77ae-436f-9f0d-6a5632f1648e"},"ce2da156-e0fd-4e56-bb31-2030d4e0c599":{"x":4298,"y":2717,"width":252,"height":117,"id":"ce2da156-e0fd-4e56-bb31-2030d4e0c599"},"dbbb7d46-4072-49a6-b483-cc8b25cbb4ea":{"x":3858,"y":3704,"width":267,"height":142,"id":"dbbb7d46-4072-49a6-b483-cc8b25cbb4ea"},"a8b86e41-5b04-4469-8a10-91bd89603e27":{"x":2185,"y":2002,"width":233,"height":109,"id":"a8b86e41-5b04-4469-8a10-91bd89603e27"},"d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5":{"x":4390,"y":3880,"width":239,"height":115,"id":"d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5"},"dc6d1ffa-5dca-43ef-b973-0628ab580cb7":{"x":4797,"y":3826,"width":173,"height":118,"id":"dc6d1ffa-5dca-43ef-b973-0628ab580cb7"},"a16027c2-9a1d-42b7-ab37-a4e8e0bb7e4d":{"x":4800,"y":3989,"width":171,"height":114,"id":"a16027c2-9a1d-42b7-ab37-a4e8e0bb7e4d"},"b1612607-a813-4bc2-896b-88ec4b249447":{"x":4389,"y":3738,"width":241,"height":117,"id":"b1612607-a813-4bc2-896b-88ec4b249447"},"d30d2b03-732b-41bb-89ed-d053750bf987":{"x":4389,"y":3591,"width":242,"height":118,"id":"d30d2b03-732b-41bb-89ed-d053750bf987"},"fa42f4e2-1ff3-473f-a4b9-593c01134e96":{"x":4394,"y":4025,"width":235,"height":116,"id":"fa42f4e2-1ff3-473f-a4b9-593c01134e96"},"d715c5f9-23f8-45e0-a1df-34e27acd01f5":{"x":3850,"y":3199,"width":280,"height":132,"id":"d715c5f9-23f8-45e0-a1df-34e27acd01f5"},"43bebcb3-06a1-410d-a19e-b3c1c6d1fa6b":{"x":3854,"y":3371,"width":276,"height":130,"id":"43bebcb3-06a1-410d-a19e-b3c1c6d1fa6b"},"6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656":{"x":3856,"y":3540,"width":272,"height":121,"id":"6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656"},"d546feef-91df-49ea-ac61-430bdcf9832c":{"x":3861,"y":3896,"width":263,"height":141,"id":"d546feef-91df-49ea-ac61-430bdcf9832c"},"3874760d-0104-4670-ba8b-1af413c5ec4a":{"x":3863,"y":4181,"width":268,"height":136,"id":"3874760d-0104-4670-ba8b-1af413c5ec4a"},"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7":{"x":3426,"y":4149,"width":284,"height":141,"id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7"},"846aa191-7b0c-4325-8c21-09fa5edf7c78":{"x":3129,"y":4149,"width":254,"height":139,"id":"846aa191-7b0c-4325-8c21-09fa5edf7c78"},"26dba2c5-a7e9-4556-a9c2-79091a97b941":{"x":2713,"y":4148,"width":248,"height":138,"id":"26dba2c5-a7e9-4556-a9c2-79091a97b941"},"75a16785-d611-45ce-b52c-284a9da0b4b8":{"x":2456,"y":4492,"width":221,"height":128,"id":"75a16785-d611-45ce-b52c-284a9da0b4b8"},"01c8907d-cb59-4fae-a3ca-8cb331d18387":{"x":3171,"y":4386,"width":264,"height":131,"id":"01c8907d-cb59-4fae-a3ca-8cb331d18387"},"79069fc2-4d65-4073-b610-4afc0488de5c":{"x":2585,"y":4688,"width":306,"height":141,"id":"79069fc2-4d65-4073-b610-4afc0488de5c"},"23a9a479-68e7-4a70-bcef-9041f10fd287":{"x":2571,"y":1569,"width":233,"height":112,"id":"23a9a479-68e7-4a70-bcef-9041f10fd287"},"3a1c7f6a-459d-4eba-9291-2aebb9bf60c9":{"x":2187,"y":1861,"width":231,"height":114,"id":"3a1c7f6a-459d-4eba-9291-2aebb9bf60c9"},"a9b74602-bdc5-481f-af4c-8021553b895a":{"x":2186,"y":1710,"width":233,"height":119,"id":"a9b74602-bdc5-481f-af4c-8021553b895a"},"cdb1afaf-245c-4d56-bfea-10f69e45007d":{"x":2185,"y":1552,"width":233,"height":123,"id":"cdb1afaf-245c-4d56-bfea-10f69e45007d"},"b7483723-222d-4f08-b7b9-e8b14f0308cf":{"x":2187,"y":1390,"width":231,"height":126,"id":"b7483723-222d-4f08-b7b9-e8b14f0308cf"},"97f815f0-dcc4-4bd3-843d-13ff1dc5802c":{"x":3673,"y":1599,"width":222,"height":126,"id":"97f815f0-dcc4-4bd3-843d-13ff1dc5802c"},"72443b79-5645-4b5f-b317-e1a8f815b81c":{"x":3117,"y":2660,"width":256,"height":136,"id":"72443b79-5645-4b5f-b317-e1a8f815b81c"},"93f288e7-d670-40a6-91f3-2006b5efa8b4":{"x":2517,"y":3913,"width":252,"height":115,"id":"93f288e7-d670-40a6-91f3-2006b5efa8b4"},"e1321ffa-07d5-480d-89f9-227b13d27ce1":{"x":3366,"y":2855,"width":251,"height":102,"id":"e1321ffa-07d5-480d-89f9-227b13d27ce1"},"3f7fd816-518b-4b9e-8134-3059e78045a0":{"x":2389,"y":3341,"width":199,"height":113,"id":"3f7fd816-518b-4b9e-8134-3059e78045a0"},"c46e6b80-0365-429a-abf9-ca75ce4f469a":{"x":1935,"y":3121,"width":196,"height":105,"id":"c46e6b80-0365-429a-abf9-ca75ce4f469a"},"9c8bc563-b596-4348-9189-065d747f7c9f":{"x":1949,"y":3755,"width":194,"height":107,"id":"9c8bc563-b596-4348-9189-065d747f7c9f"},"1b4e5b3a-a9b2-4316-94c4-ff34d4d3d523":{"x":1633,"y":3690,"width":160,"height":108,"id":"1b4e5b3a-a9b2-4316-94c4-ff34d4d3d523"},"e3329a9e-1c52-44f6-a1f7-fc85f7362e9e":{"x":1630,"y":3822,"width":160,"height":108,"id":"e3329a9e-1c52-44f6-a1f7-fc85f7362e9e"},"484e429b-bf54-45cb-9b87-baddf7fb5f5b":{"x":1528,"y":3121,"width":222,"height":108,"id":"484e429b-bf54-45cb-9b87-baddf7fb5f5b"},"c47b8696-7e98-4733-ab33-a4dca7b61d01":{"x":1635,"y":3554,"width":160,"height":111,"id":"c47b8696-7e98-4733-ab33-a4dca7b61d01"},"e05ab5f3-17e7-4594-8ce0-c02d793a1df9":{"x":2416,"y":3520,"width":244,"height":112,"id":"e05ab5f3-17e7-4594-8ce0-c02d793a1df9"},"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d":{"x":2189,"y":3777,"width":251,"height":111,"id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d"},"4d5720eb-da8c-493d-ab8d-cb6111dd6099":{"x":3170,"y":3635,"width":223,"height":126,"id":"4d5720eb-da8c-493d-ab8d-cb6111dd6099"},"6767c0cf-4041-4047-b2b4-d7375f33bc97":{"x":1629,"y":3956,"width":159,"height":114,"id":"6767c0cf-4041-4047-b2b4-d7375f33bc97"},"35b3de4e-46b8-490f-8e30-c305ed348a78":{"x":1628,"y":4097,"width":159,"height":116,"id":"35b3de4e-46b8-490f-8e30-c305ed348a78"},"d8b554d4-03ac-4613-a3e0-fc0b901bfd70":{"x":1526,"y":3254,"width":220,"height":109,"id":"d8b554d4-03ac-4613-a3e0-fc0b901bfd70"},"0edc535b-405d-4dd5-bcd2-f5772ab116c2":{"x":1525,"y":3387,"width":221,"height":111,"id":"0edc535b-405d-4dd5-bcd2-f5772ab116c2"},"0b3e9de0-d139-4934-a043-d1913a24de0c":{"x":2117,"y":4193,"width":199,"height":120,"id":"0b3e9de0-d139-4934-a043-d1913a24de0c"},"70932b40-f444-4341-bb19-0a29d1daecbe":{"x":2136,"y":4436,"width":136,"height":99,"id":"70932b40-f444-4341-bb19-0a29d1daecbe"},"32dbb54a-9693-4847-9278-7c956ea045f8":{"x":2290,"y":4434,"width":135,"height":102,"id":"32dbb54a-9693-4847-9278-7c956ea045f8"},"0dc0e921-e7ff-4766-9738-e6e312f7f0de":{"x":2359,"y":4189,"width":249,"height":104,"id":"0dc0e921-e7ff-4766-9738-e6e312f7f0de"},"122e4157-381f-400f-ac30-a1c8a2a9e8c1":{"x":1987,"y":4434,"width":128,"height":102,"id":"122e4157-381f-400f-ac30-a1c8a2a9e8c1"},"17db2afc-ae6c-4e53-a527-48516811fe3e":{"x":1832,"y":4435,"width":136,"height":100,"id":"17db2afc-ae6c-4e53-a527-48516811fe3e"},"30abb231-4248-4ffa-9a69-e0eb6bb9dbbd":{"x":1670,"y":4435,"width":141,"height":96,"id":"30abb231-4248-4ffa-9a69-e0eb6bb9dbbd"},"ba8a3bbf-86a8-47e2-92bb-f41878981c41":{"x":1886,"y":2316,"width":232,"height":131,"id":"ba8a3bbf-86a8-47e2-92bb-f41878981c41"},"79571896-9798-44a3-acef-5aa2d9773b93":{"x":2821,"y":1940,"width":267,"height":145,"id":"79571896-9798-44a3-acef-5aa2d9773b93"},"5c85a8db-e4cc-4e38-9922-58d93773f4f0":{"x":3205,"y":3844,"width":174,"height":122,"id":"5c85a8db-e4cc-4e38-9922-58d93773f4f0"},"bf69c9af-f268-4c9b-8e67-4497eb490478":{"x":3665,"y":2456,"width":259,"height":81,"id":"bf69c9af-f268-4c9b-8e67-4497eb490478"},"ce73a111-4670-411e-9bd2-f3308d6399c9":{"x":1530,"y":2997,"width":222,"height":96,"id":"ce73a111-4670-411e-9bd2-f3308d6399c9"},"1e7a66b2-f559-4c21-b8e6-969999ed171d":{"x":2412,"y":2803,"width":207,"height":111,"id":"1e7a66b2-f559-4c21-b8e6-969999ed171d"},"80f73c4e-caf1-4e1f-a634-00965f6ad032":{"x":958,"y":3402,"width":154,"height":98,"id":"80f73c4e-caf1-4e1f-a634-00965f6ad032"},"222307c0-668c-43f9-9368-34cc048f0ae3":{"x":1359,"y":3771,"width":195,"height":90,"id":"222307c0-668c-43f9-9368-34cc048f0ae3"},"6187076b-e765-4e6b-af28-f577eba40b5e":{"x":1086,"y":3735,"width":140,"height":88,"id":"6187076b-e765-4e6b-af28-f577eba40b5e"},"f7fc16ac-6a23-4f5d-a04c-1163617701c1":{"x":1273,"y":3485,"width":176,"height":102,"id":"f7fc16ac-6a23-4f5d-a04c-1163617701c1"},"0ad229c4-1782-4783-b64e-0d15fe482463":{"x":958,"y":3549,"width":155,"height":95,"id":"0ad229c4-1782-4783-b64e-0d15fe482463"},"b8d3d40e-462e-4e4d-9fb4-b7d54f9fd03a":{"x":1531,"y":2863,"width":219,"height":111,"id":"b8d3d40e-462e-4e4d-9fb4-b7d54f9fd03a"},"470246f6-91ec-4993-b915-93480d0f4eb9":{"x":3026,"y":4641,"width":240,"height":149,"id":"470246f6-91ec-4993-b915-93480d0f4eb9"},"f6a3ce12-18e1-4675-ab94-6b2a7c91d951":{"x":4519,"y":2028,"width":234,"height":137,"id":"f6a3ce12-18e1-4675-ab94-6b2a7c91d951"},"41b7bda7-f5a2-4c94-af22-fedbe8d6f287":{"x":1085,"y":3857,"width":142,"height":92,"id":"41b7bda7-f5a2-4c94-af22-fedbe8d6f287"},"84f1c5fd-d907-4653-a132-bfd420ad9212":{"x":1529,"y":2714,"width":220,"height":121,"id":"84f1c5fd-d907-4653-a132-bfd420ad9212"},"efde0481-1599-4c5c-bf30-51dbd4a8ed83":{"x":2186,"y":2431,"width":232,"height":108,"id":"efde0481-1599-4c5c-bf30-51dbd4a8ed83"},"95e17479-07a5-41b1-9930-1b9b520514f6":{"x":3552,"y":2634,"width":309,"height":105,"id":"95e17479-07a5-41b1-9930-1b9b520514f6"},"8d86dceb-7e6e-4767-8a3f-cbbde458ad93":{"x":2029,"y":2973,"width":255,"height":124,"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93"},"68e7191a-fe94-423f-8a5d-5551384ae998":{"x":2771,"y":1733,"width":253,"height":110,"id":"68e7191a-fe94-423f-8a5d-5551384ae998"},"c4723d6d-1584-49bd-80f1-4c700185746e":{"x":4612,"y":2457,"width":199,"height":112,"id":"c4723d6d-1584-49bd-80f1-4c700185746e"},"7794ada6-49c3-4bf0-991f-828c6583ebb8":{"x":4788,"y":2694,"width":280,"height":119,"id":"7794ada6-49c3-4bf0-991f-828c6583ebb8"},"d48d948b-5291-4eb3-ba35-7ab1c1ffa098":{"x":4081,"y":1919,"width":348,"height":124,"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098"},"7eaea922-8807-4c38-a704-0143e0594664":{"x":4450,"y":1722,"width":212,"height":105,"id":"7eaea922-8807-4c38-a704-0143e0594664"},"4b6c7fde-0878-4947-b960-bc73a4558c60":{"x":4185,"y":1504,"width":147,"height":115,"id":"4b6c7fde-0878-4947-b960-bc73a4558c60"},"e6fbeeb8-6ade-46a2-bb52-9c99d06918b2":{"x":4351,"y":1504,"width":297,"height":114,"id":"e6fbeeb8-6ade-46a2-bb52-9c99d06918b2"},"c8fcd612-6ca8-469a-824c-de218e4fd075":{"x":4667,"y":1504,"width":324,"height":116,"id":"c8fcd612-6ca8-469a-824c-de218e4fd075"},"52143d28-8474-44bc-b63f-e654150888d3":{"x":2619,"y":3122,"width":241,"height":108,"id":"52143d28-8474-44bc-b63f-e654150888d3"},"ab7a5708-6d12-4dce-b488-fa3a3b480510":{"x":3490,"y":3922,"width":232,"height":83,"id":"ab7a5708-6d12-4dce-b488-fa3a3b480510"},"6094aad5-613b-42b6-8f48-c3b9e2161aa9":{"x":2842,"y":3296,"width":250,"height":113,"id":"6094aad5-613b-42b6-8f48-c3b9e2161aa9"},"6822b78e-e5ca-4c40-ba9d-cf7a69d4fdc7":{"x":3737,"y":4431,"width":245,"height":132,"id":"6822b78e-e5ca-4c40-ba9d-cf7a69d4fdc7"},"910e3a08-5e99-47a5-bde4-3e35cf9f00da":{"x":4023,"y":4431,"width":272,"height":132,"id":"910e3a08-5e99-47a5-bde4-3e35cf9f00da"},"31deb355-b737-43a6-ae88-199bb51f940d":{"x":3566,"y":3110,"width":210,"height":107,"id":"31deb355-b737-43a6-ae88-199bb51f940d"},"39060ea9-5d45-4954-a29f-ba88e01e7217":{"x":3478,"y":3726,"width":240,"height":116,"id":"39060ea9-5d45-4954-a29f-ba88e01e7217"},"4856978f-20be-4b59-8bf6-b941091119a9":{"x":3032,"y":2834,"width":215,"height":140,"id":"4856978f-20be-4b59-8bf6-b941091119a9"},"dbada891-ca0d-4fbc-8371-9f9234867bd6":{"x":2186,"y":2247,"width":231,"height":119,"id":"dbada891-ca0d-4fbc-8371-9f9234867bd6"},"290f49d3-8ce7-408e-be14-611b66db9687":{"x":3161,"y":2031,"width":243,"height":126,"id":"290f49d3-8ce7-408e-be14-611b66db9687"},"7056c5ba-4f49-404f-abd5-e5c6a5879fac":{"x":4074,"y":1690,"width":263,"height":125,"id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac"},"b28be6c2-a37a-4049-9110-52136f892fc4":{"x":4234,"y":2186,"width":237,"height":140,"id":"b28be6c2-a37a-4049-9110-52136f892fc4"},"0e1e683a-fe89-4002-88fa-efd50d66de6c":{"x":4390,"y":3448,"width":308,"height":115,"id":"0e1e683a-fe89-4002-88fa-efd50d66de6c"},"d39c987f-bba2-4956-963f-7e9c6c3fe4b4":{"x":4895,"y":3449,"width":301,"height":114,"id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4"},"dbc37f2f-0a90-4a8b-a217-d4a70a606695":{"x":5349,"y":3560,"width":260,"height":107,"id":"dbc37f2f-0a90-4a8b-a217-d4a70a606695"},"80bf1ba4-2f74-45db-a1b1-6b76e82b2013":{"x":5345,"y":3343,"width":262,"height":99,"id":"80bf1ba4-2f74-45db-a1b1-6b76e82b2013"},"1a5eca02-909e-434c-bd35-b02f2b7dbe22":{"x":4394,"y":4166,"width":236,"height":128,"id":"1a5eca02-909e-434c-bd35-b02f2b7dbe22"},"dfb72d5a-91a4-4023-a7a9-baef28bed978":{"x":1886,"y":2120,"width":231,"height":127,"id":"dfb72d5a-91a4-4023-a7a9-baef28bed978"},"47abdb96-0225-4880-a472-9c714086e2b5":{"x":2918,"y":3818,"width":226,"height":114,"id":"47abdb96-0225-4880-a472-9c714086e2b5"},"b861cf8b-c7e9-4ecb-b29a-13086aa96d9c":{"x":1860,"y":1935,"width":259,"height":128,"id":"b861cf8b-c7e9-4ecb-b29a-13086aa96d9c"}},"relationships":{"21f08565-d913-4302-a853-e5f688ec1bc1":{"IsaUI":{"from":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2668,"y":2496,"offset":{"x":20,"y":20},"dir":"West"},"to":[{"id":"b8ec6afc-ddbd-53d6-9be3-e4b738941c2f","x":2417,"y":2184,"offset":{"x":20,"y":20},"dir":"East"},{"id":"a8b86e41-5b04-4469-8a10-91bd89603e27","x":2418,"y":2067,"offset":{"x":20,"y":20},"dir":"East"},{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4223,"y":2420,"offset":{"x":20,"y":20},"dir":"North"},{"id":"23a9a479-68e7-4a70-bcef-9041f10fd287","x":2625,"y":1681,"offset":{"x":20,"y":20},"dir":"South"},{"id":"3a1c7f6a-459d-4eba-9291-2aebb9bf60c9","x":2418,"y":1914,"offset":{"x":20,"y":20},"dir":"East"},{"id":"a9b74602-bdc5-481f-af4c-8021553b895a","x":2419,"y":1797,"offset":{"x":20,"y":20},"dir":"East"},{"id":"cdb1afaf-245c-4d56-bfea-10f69e45007d","x":2418,"y":1648,"offset":{"x":20,"y":20},"dir":"East"},{"id":"b7483723-222d-4f08-b7b9-e8b14f0308cf","x":2418,"y":1464,"offset":{"x":20,"y":20},"dir":"East"},{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3100,"y":2380,"offset":{"x":20,"y":20},"dir":"West"},{"id":"c89e362d-7905-4226-8713-97d3d6f05037","x":4612,"y":2396,"offset":{"x":20,"y":20},"dir":"South"},{"id":"ba8a3bbf-86a8-47e2-92bb-f41878981c41","x":2118,"y":2379,"offset":{"x":20,"y":20},"dir":"East"},{"id":"efde0481-1599-4c5c-bf30-51dbd4a8ed83","x":2418,"y":2496,"offset":{"x":20,"y":20},"dir":"East"},{"id":"95e17479-07a5-41b1-9930-1b9b520514f6","x":3699,"y":2634,"offset":{"x":20,"y":20},"dir":"North"},{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","x":4112,"y":2043,"offset":{"x":20,"y":20},"dir":"South"},{"id":"dbada891-ca0d-4fbc-8371-9f9234867bd6","x":2417,"y":2311,"offset":{"x":20,"y":20},"dir":"East"},{"id":"290f49d3-8ce7-408e-be14-611b66db9687","x":3161,"y":2089,"offset":{"x":20,"y":20},"dir":"West"},{"id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","x":4074,"y":1751,"offset":{"x":20,"y":20},"dir":"West"},{"id":"b28be6c2-a37a-4049-9110-52136f892fc4","x":4234,"y":2258,"offset":{"x":20,"y":20},"dir":"West"},{"id":"dfb72d5a-91a4-4023-a7a9-baef28bed978","x":2117,"y":2180,"offset":{"x":20,"y":20},"dir":"East"},{"id":"b861cf8b-c7e9-4ecb-b29a-13086aa96d9c","x":2119,"y":2001,"offset":{"x":20,"y":20},"dir":"East"}]}},"c12fcdf7-ec63-58c7-8555-36222f25b91b":{"AssociativeUI":{"from":{"x":3162,"y":2346},"middle":{"id":"68e7191a-fe94-423f-8a5d-5551384ae998","x":2771,"y":1780,"offset":{"x":0,"y":0},"dir":"West"},"one":{"id":"b7483723-222d-4f08-b7b9-e8b14f0308cf","x":2418,"y":1493,"offset":{"x":-75,"y":54},"dir":"East"},"other":{"id":"7178e7a4-5131-504b-a7b3-c2c0cfedf343","x":2775,"y":2269,"offset":{"x":18,"y":-27},"dir":"North"}}},"4b7360ba-8de3-4c93-bc90-22478c128a75":{"BinaryUI":{"from":{"id":"141350e6-b62d-4a6d-9ea2-47333e51e3ea","x":3163,"y":2543,"offset":{"x":-92,"y":30},"dir":"West"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2920,"y":2562,"offset":{"x":24,"y":-21},"dir":"East"}}},"3746c64a-c63d-424d-afb2-c253470b6d7b":{"IsaUI":{"from":{"id":"45644594-b418-5362-9294-a62fe2a0fa8e","x":3790,"y":2023,"offset":{"x":20,"y":20},"dir":"South"},"to":[{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3285,"y":2270,"offset":{"x":20,"y":20},"dir":"North"},{"id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","x":3789,"y":2270,"offset":{"x":20,"y":20},"dir":"North"},{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4295,"y":2420,"offset":{"x":20,"y":20},"dir":"North"},{"id":"c89e362d-7905-4226-8713-97d3d6f05037","x":4649,"y":2257,"offset":{"x":20,"y":20},"dir":"North"},{"id":"f6a3ce12-18e1-4675-ab94-6b2a7c91d951","x":4519,"y":2094,"offset":{"x":20,"y":20},"dir":"West"},{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","x":4222,"y":2043,"offset":{"x":20,"y":20},"dir":"South"}]}},"02892323-60e9-470b-b162-b2bc8d9ef1cd":{"BinaryUI":{"from":{"id":"141350e6-b62d-4a6d-9ea2-47333e51e3ea","x":3409,"y":2523,"offset":{"x":19,"y":33},"dir":"East"},"to":{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3407,"y":2390,"offset":{"x":61,"y":35},"dir":"East"}}},"98c79b91-da7b-443a-b1fb-18596cd6b4bc":{"BinaryUI":{"from":{"id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","x":3647,"y":2323,"offset":{"x":-128,"y":-40},"dir":"West"},"to":{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3407,"y":2323,"offset":{"x":15,"y":34},"dir":"East"}}},"7993e2c7-7efa-4346-b50e-bc02d55e1ca7":{"BinaryUI":{"from":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4151,"y":2455,"offset":{"x":-80,"y":-74},"dir":"West"},"to":{"id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","x":3932,"y":2355,"offset":{"x":-104,"y":95},"dir":"East"}}},"fdb49afe-13fb-4c79-99d1-92728d8652c7":{"BinaryUI":{"from":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4213,"y":2580,"offset":{"x":-168,"y":17},"dir":"South"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2849,"y":2587,"offset":{"x":38,"y":26},"dir":"South"}}},"ea1e6d1c-279b-4b6d-806e-fa133c6a5da9":{"IsaUI":{"from":{"id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","x":2823,"y":2898,"offset":{"x":20,"y":20},"dir":"South"},"to":[{"id":"954b354f-3a90-440b-ab0f-43efc00d275e","x":2526,"y":3118,"offset":{"x":20,"y":20},"dir":"North"},{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3120,"y":3115,"offset":{"x":20,"y":20},"dir":"North"}]}},"35491126-597f-4301-ae48-88da4a23c845":{"IsaUI":{"from":{"id":"954b354f-3a90-440b-ab0f-43efc00d275e","x":2444,"y":3118,"offset":{"x":20,"y":20},"dir":"North"},"to":[{"id":"0365b40c-c40a-4653-84ab-44d1c12d294f","x":2284,"y":2898,"offset":{"x":20,"y":20},"dir":"East"},{"id":"f192b162-8ada-4128-8805-1953e9165c54","x":2289,"y":2763,"offset":{"x":20,"y":20},"dir":"East"},{"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","x":2284,"y":3077,"offset":{"x":20,"y":20},"dir":"East"}]}},"336674ce-19be-4baa-8117-19ee19886e2d":{"BinaryUI":{"from":{"id":"f192b162-8ada-4128-8805-1953e9165c54","x":2289,"y":2693,"offset":{"x":102,"y":35},"dir":"East"},"to":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4340,"y":2580,"offset":{"x":20,"y":20},"dir":"South"}}},"95b8c311-1f3f-42ab-93cd-9b95c8d8c02a":{"BinaryUI":{"from":{"id":"f192b162-8ada-4128-8805-1953e9165c54","x":2024,"y":2694,"offset":{"x":-113,"y":-51},"dir":"West"},"to":{"id":"f192b162-8ada-4128-8805-1953e9165c54","x":2024,"y":2759,"offset":{"x":35,"y":28},"dir":"West"}}},"3966271b-9938-48c7-b4fe-177c307e22bf":{"IsaUI":{"from":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3182,"offset":{"x":20,"y":20},"dir":"East"},"to":[{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":3865,"y":2827,"offset":{"x":20,"y":20},"dir":"West"},{"id":"dbbb7d46-4072-49a6-b483-cc8b25cbb4ea","x":3858,"y":3769,"offset":{"x":20,"y":20},"dir":"West"},{"id":"d715c5f9-23f8-45e0-a1df-34e27acd01f5","x":3850,"y":3257,"offset":{"x":20,"y":20},"dir":"West"},{"id":"d546feef-91df-49ea-ac61-430bdcf9832c","x":3861,"y":3963,"offset":{"x":20,"y":20},"dir":"West"},{"id":"6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656","x":3856,"y":3588,"offset":{"x":20,"y":20},"dir":"West"},{"id":"43bebcb3-06a1-410d-a19e-b3c1c6d1fa6b","x":3854,"y":3445,"offset":{"x":20,"y":20},"dir":"West"},{"id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","x":3538,"y":4149,"offset":{"x":20,"y":20},"dir":"North"},{"id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","x":2878,"y":4148,"offset":{"x":20,"y":20},"dir":"North"},{"id":"72443b79-5645-4b5f-b317-e1a8f815b81c","x":3288,"y":2796,"offset":{"x":20,"y":20},"dir":"South"},{"id":"93f288e7-d670-40a6-91f3-2006b5efa8b4","x":2628,"y":3913,"offset":{"x":20,"y":20},"dir":"North"},{"id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","x":3542,"y":2957,"offset":{"x":20,"y":20},"dir":"South"},{"id":"3f7fd816-518b-4b9e-8134-3059e78045a0","x":2588,"y":3401,"offset":{"x":20,"y":20},"dir":"East"},{"id":"e05ab5f3-17e7-4594-8ce0-c02d793a1df9","x":2572,"y":3520,"offset":{"x":20,"y":20},"dir":"North"},{"id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","x":2423,"y":3777,"offset":{"x":20,"y":20},"dir":"North"},{"id":"4d5720eb-da8c-493d-ab8d-cb6111dd6099","x":3291,"y":3635,"offset":{"x":20,"y":20},"dir":"North"},{"id":"0b3e9de0-d139-4934-a043-d1913a24de0c","x":2230,"y":4193,"offset":{"x":20,"y":20},"dir":"North"},{"id":"0dc0e921-e7ff-4766-9738-e6e312f7f0de","x":2501,"y":4189,"offset":{"x":20,"y":20},"dir":"North"},{"id":"5c85a8db-e4cc-4e38-9922-58d93773f4f0","x":3293,"y":3844,"offset":{"x":20,"y":20},"dir":"North"},{"id":"3874760d-0104-4670-ba8b-1af413c5ec4a","x":3863,"y":4240,"offset":{"x":20,"y":20},"dir":"West"},{"id":"1e7a66b2-f559-4c21-b8e6-969999ed171d","x":2544,"y":2914,"offset":{"x":20,"y":20},"dir":"South"},{"id":"95e17479-07a5-41b1-9930-1b9b520514f6","x":3771,"y":2720,"offset":{"x":20,"y":20},"dir":"South"},{"id":"52143d28-8474-44bc-b63f-e654150888d3","x":2860,"y":3184,"offset":{"x":20,"y":20},"dir":"East"},{"id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","x":3490,"y":3952,"offset":{"x":20,"y":20},"dir":"West"},{"id":"4856978f-20be-4b59-8bf6-b941091119a9","x":3247,"y":2919,"offset":{"x":20,"y":20},"dir":"East"},{"id":"47abdb96-0225-4880-a472-9c714086e2b5","x":3043,"y":3818,"offset":{"x":20,"y":20},"dir":"North"}]}},"2e81ce06-82d5-47e6-9f38-783d8af057d9":{"IsaUI":{"from":{"id":"6c7969f3-f150-4975-a989-a7bc8164b168","x":4109,"y":3052,"offset":{"x":20,"y":20},"dir":"East"},"to":[{"id":"ce2da156-e0fd-4e56-bb31-2030d4e0c599","x":4298,"y":2778,"offset":{"x":20,"y":20},"dir":"West"},{"id":"c32fcb6d-b505-492f-95c8-5f118079a399","x":4296,"y":2960,"offset":{"x":20,"y":20},"dir":"West"},{"id":"59f269ab-2dbc-4b07-b9bc-48441f20e78f","x":4300,"y":3143,"offset":{"x":20,"y":20},"dir":"West"},{"id":"b359d531-77ae-436f-9f0d-6a5632f1648e","x":4302,"y":3333,"offset":{"x":20,"y":20},"dir":"West"}]}},"03745d2b-a85f-40a9-b038-8f22c83e8eb1":{"BinaryUI":{"from":{"id":"6c7969f3-f150-4975-a989-a7bc8164b168","x":3951,"y":3114,"offset":{"x":-131,"y":-23},"dir":"South"},"to":{"id":"6c7969f3-f150-4975-a989-a7bc8164b168","x":4045,"y":3114,"offset":{"x":20,"y":20},"dir":"South"}}},"c715993f-c840-4d48-8442-b5635e4324e7":{"BinaryUI":{"from":{"id":"6c7969f3-f150-4975-a989-a7bc8164b168","x":3950,"y":2997,"offset":{"x":26,"y":-17},"dir":"North"},"to":{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":3950,"y":2866,"offset":{"x":20,"y":20},"dir":"South"}}},"f6c19c17-3e01-4945-bffb-7ec408dd7fcf":{"BinaryUI":{"from":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4471,"y":2518,"offset":{"x":-247,"y":12},"dir":"East"},"to":{"id":"c4723d6d-1584-49bd-80f1-4c700185746e","x":4612,"y":2518,"offset":{"x":19,"y":-18},"dir":"West"}}},"d8bf88d3-35da-422d-a7d9-1726ce66a288":{"BinaryUI":{"from":{"id":"c32fcb6d-b505-492f-95c8-5f118079a399","x":4296,"y":2925,"offset":{"x":-142,"y":-36},"dir":"West"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3115,"offset":{"x":-5,"y":-83},"dir":"East"}}},"0b5aab4e-5077-4627-9091-89c71a921be1":{"BinaryUI":{"from":{"id":"c32fcb6d-b505-492f-95c8-5f118079a399","x":4296,"y":2945,"offset":{"x":-178,"y":19},"dir":"West"},"to":{"id":"0365b40c-c40a-4653-84ab-44d1c12d294f","x":2284,"y":2923,"offset":{"x":16,"y":32},"dir":"East"}}},"3bb006c5-a66d-440b-b54b-35bc9da87b33":{"IsaUI":{"from":{"id":"dbbb7d46-4072-49a6-b483-cc8b25cbb4ea","x":4125,"y":3778,"offset":{"x":20,"y":20},"dir":"East"},"to":[{"id":"d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5","x":4390,"y":3945,"offset":{"x":20,"y":20},"dir":"West"},{"id":"d30d2b03-732b-41bb-89ed-d053750bf987","x":4389,"y":3664,"offset":{"x":20,"y":20},"dir":"West"},{"id":"b1612607-a813-4bc2-896b-88ec4b249447","x":4389,"y":3801,"offset":{"x":20,"y":20},"dir":"West"},{"id":"fa42f4e2-1ff3-473f-a4b9-593c01134e96","x":4394,"y":4079,"offset":{"x":20,"y":20},"dir":"West"},{"id":"0e1e683a-fe89-4002-88fa-efd50d66de6c","x":4390,"y":3527,"offset":{"x":20,"y":20},"dir":"West"},{"id":"1a5eca02-909e-434c-bd35-b02f2b7dbe22","x":4394,"y":4225,"offset":{"x":20,"y":20},"dir":"West"}]}},"e67c9242-2aac-4930-ae2e-b2a1678ed3d9":{"BinaryUI":{"from":{"id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","x":2846,"y":2767,"offset":{"x":23,"y":-16},"dir":"North"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2704,"y":2587,"offset":{"x":10,"y":22},"dir":"South"}}},"332f2cb5-0719-4c2d-8737-c1a0375fad8e":{"IsaUI":{"from":{"id":"d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5","x":4629,"y":3942,"offset":{"x":20,"y":20},"dir":"East"},"to":[{"id":"dc6d1ffa-5dca-43ef-b973-0628ab580cb7","x":4797,"y":3882,"offset":{"x":20,"y":20},"dir":"West"},{"id":"a16027c2-9a1d-42b7-ab37-a4e8e0bb7e4d","x":4800,"y":4043,"offset":{"x":20,"y":20},"dir":"West"}]}},"e93a7669-d7d0-4cb2-bbb1-36dedf3f893d":{"BinaryUI":{"from":{"id":"3874760d-0104-4670-ba8b-1af413c5ec4a","x":4008,"y":4181,"offset":{"x":24,"y":-14},"dir":"North"},"to":{"id":"d546feef-91df-49ea-ac61-430bdcf9832c","x":4008,"y":4037,"offset":{"x":20,"y":20},"dir":"South"}}},"ead7f44b-e37a-4122-8824-17f4079c2e70":{"BinaryUI":{"from":{"id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","x":3484,"y":4149,"offset":{"x":2,"y":-62},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3230,"offset":{"x":-36,"y":54},"dir":"East"}}},"33838622-f03e-415f-9588-e7f9e644727e":{"BinaryUI":{"from":{"id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","x":3229,"y":4288,"offset":{"x":-18,"y":70},"dir":"South"},"to":{"id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","x":3311,"y":4288,"offset":{"x":7,"y":41},"dir":"South"}}},"54994661-e099-453c-904f-c09cc0fa0bfa":{"BinaryUI":{"from":{"id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","x":3129,"y":4258,"offset":{"x":-75,"y":30},"dir":"West"},"to":{"id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","x":2961,"y":4259,"offset":{"x":11,"y":-27},"dir":"East"}}},"0cde3a3b-6678-42ac-8fa4-8ab02acb3dea":{"BinaryUI":{"from":{"id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","x":2784,"y":4148,"offset":{"x":-112,"y":-44},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3037,"y":3250,"offset":{"x":-99,"y":-45},"dir":"South"}}},"688ec08e-9fd6-4a2f-bcd5-5ea94e946d1b":{"IsaUI":{"from":{"id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","x":2814,"y":4286,"offset":{"x":20,"y":20},"dir":"South"},"to":[{"id":"01c8907d-cb59-4fae-a3ca-8cb331d18387","x":3171,"y":4460,"offset":{"x":20,"y":20},"dir":"West"},{"id":"75a16785-d611-45ce-b52c-284a9da0b4b8","x":2568,"y":4492,"offset":{"x":20,"y":20},"dir":"North"},{"id":"79069fc2-4d65-4073-b610-4afc0488de5c","x":2737,"y":4688,"offset":{"x":20,"y":20},"dir":"North"},{"id":"470246f6-91ec-4993-b915-93480d0f4eb9","x":3132,"y":4641,"offset":{"x":20,"y":20},"dir":"North"}]}},"e0a24038-1c85-4d6f-afbc-5c034062a557":{"BinaryUI":{"from":{"id":"59f269ab-2dbc-4b07-b9bc-48441f20e78f","x":4300,"y":3166,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3148,"offset":{"x":20,"y":20},"dir":"East"}}},"96737350-249d-4701-9b47-0f56bf8bfc7f":{"BinaryUI":{"from":{"id":"6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656","x":3856,"y":3636,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3247,"offset":{"x":20,"y":20},"dir":"East"}}},"9fd61528-8e0f-40d0-b1bb-53b468851d30":{"BinaryUI":{"from":{"id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","x":2949,"y":2795,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":3865,"y":2795,"offset":{"x":20,"y":20},"dir":"West"}}},"95fcc898-ef24-4ec4-8409-798a6623713e":{"BinaryUI":{"from":{"id":"cdb1afaf-245c-4d56-bfea-10f69e45007d","x":2418,"y":1601,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2674,"y":2461,"offset":{"x":20,"y":20},"dir":"North"}}},"de725e45-a751-4f4b-8c44-6c79671c70eb":{"BinaryUI":{"from":{"id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","x":3191,"y":4149,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3101,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"39f2d2c1-abf2-4f3e-a4f1-58a477b12f9e":{"BinaryUI":{"from":{"id":"3874760d-0104-4670-ba8b-1af413c5ec4a","x":3956,"y":4181,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3247,"offset":{"x":20,"y":20},"dir":"East"}}},"81d77ddd-6aae-4023-8467-2f5705d5e633":{"BinaryUI":{"from":{"id":"d546feef-91df-49ea-ac61-430bdcf9832c","x":3861,"y":3935,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"31deb355-b737-43a6-ae88-199bb51f940d","x":3776,"y":3193,"offset":{"x":20,"y":20},"dir":"East"}}},"c45955d9-c799-4d61-8bc6-6335bde326b8":{"BinaryUI":{"from":{"id":"c89e362d-7905-4226-8713-97d3d6f05037","x":4694,"y":2396,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"7178e7a4-5131-504b-a7b3-c2c0cfedf343","x":2859,"y":2411,"offset":{"x":20,"y":20},"dir":"South"}}},"bc8075e9-e5ba-4a26-b696-7cf2651997ba":{"BinaryUI":{"from":{"id":"b359d531-77ae-436f-9f0d-6a5632f1648e","x":4332,"y":3264,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3147,"offset":{"x":20,"y":20},"dir":"East"}}},"6f636d63-667a-40ad-b554-a301a62ddebd":{"BinaryUI":{"from":{"id":"45644594-b418-5362-9294-a62fe2a0fa8e","x":3780,"y":1923,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"97f815f0-dcc4-4bd3-843d-13ff1dc5802c","x":3778,"y":1725,"offset":{"x":20,"y":20},"dir":"South"}}},"f564f775-febe-442e-a0f1-492a2265e991":{"BinaryUI":{"from":{"id":"72443b79-5645-4b5f-b317-e1a8f815b81c","x":3211,"y":2796,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3209,"y":3115,"offset":{"x":20,"y":20},"dir":"North"}}},"0e780acf-9221-4e84-9377-64d31e653187":{"BinaryUI":{"from":{"id":"72443b79-5645-4b5f-b317-e1a8f815b81c","x":3373,"y":2762,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3228,"y":3115,"offset":{"x":20,"y":20},"dir":"North"}}},"fc2e5c67-6c98-4bfd-93a7-711fa2ae573f":{"BinaryUI":{"from":{"id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","x":3473,"y":2957,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3115,"offset":{"x":20,"y":20},"dir":"East"}}},"ba437581-658a-497d-9790-ab79ad56cd4f":{"BinaryUI":{"from":{"id":"93f288e7-d670-40a6-91f3-2006b5efa8b4","x":2726,"y":3913,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"cdd19ddf-67e5-4e9b-9958-0745e8f9729e":{"BinaryUI":{"from":{"id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","x":3617,"y":2895,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":3865,"y":2809,"offset":{"x":20,"y":20},"dir":"West"}}},"c8d05983-b88d-40da-bf31-83d2d8b8c574":{"IsaUI":{"from":{"id":"3f7fd816-518b-4b9e-8134-3059e78045a0","x":2389,"y":3395,"offset":{"x":20,"y":20},"dir":"West"},"to":[{"id":"9c8bc563-b596-4348-9189-065d747f7c9f","x":2143,"y":3807,"offset":{"x":20,"y":20},"dir":"East"},{"id":"c46e6b80-0365-429a-abf9-ca75ce4f469a","x":2131,"y":3176,"offset":{"x":20,"y":20},"dir":"East"},{"id":"f7fc16ac-6a23-4f5d-a04c-1163617701c1","x":1449,"y":3562,"offset":{"x":20,"y":20},"dir":"East"}]}},"c6ed5fc4-f04a-45e0-afc3-6f421b81fea7":{"IsaUI":{"from":{"id":"9c8bc563-b596-4348-9189-065d747f7c9f","x":1949,"y":3817,"offset":{"x":20,"y":20},"dir":"West"},"to":[{"id":"1b4e5b3a-a9b2-4316-94c4-ff34d4d3d523","x":1793,"y":3741,"offset":{"x":20,"y":20},"dir":"East"},{"id":"e3329a9e-1c52-44f6-a1f7-fc85f7362e9e","x":1790,"y":3879,"offset":{"x":20,"y":20},"dir":"East"},{"id":"c47b8696-7e98-4733-ab33-a4dca7b61d01","x":1795,"y":3607,"offset":{"x":20,"y":20},"dir":"East"},{"id":"6767c0cf-4041-4047-b2b4-d7375f33bc97","x":1788,"y":4014,"offset":{"x":20,"y":20},"dir":"East"},{"id":"35b3de4e-46b8-490f-8e30-c305ed348a78","x":1787,"y":4161,"offset":{"x":20,"y":20},"dir":"East"},{"id":"222307c0-668c-43f9-9368-34cc048f0ae3","x":1554,"y":3816,"offset":{"x":20,"y":20},"dir":"East"}]}},"27350475-a322-4ede-a4b2-eb88a3c847f5":{"IsaUI":{"from":{"id":"c46e6b80-0365-429a-abf9-ca75ce4f469a","x":1935,"y":3182,"offset":{"x":20,"y":20},"dir":"West"},"to":[{"id":"484e429b-bf54-45cb-9b87-baddf7fb5f5b","x":1750,"y":3183,"offset":{"x":20,"y":20},"dir":"East"},{"id":"d8b554d4-03ac-4613-a3e0-fc0b901bfd70","x":1746,"y":3314,"offset":{"x":20,"y":20},"dir":"East"},{"id":"0edc535b-405d-4dd5-bcd2-f5772ab116c2","x":1746,"y":3447,"offset":{"x":20,"y":20},"dir":"East"},{"id":"ce73a111-4670-411e-9bd2-f3308d6399c9","x":1752,"y":3048,"offset":{"x":20,"y":20},"dir":"East"},{"id":"b8d3d40e-462e-4e4d-9fb4-b7d54f9fd03a","x":1750,"y":2920,"offset":{"x":20,"y":20},"dir":"East"},{"id":"84f1c5fd-d907-4653-a132-bfd420ad9212","x":1749,"y":2772,"offset":{"x":20,"y":20},"dir":"East"}]}},"513c99bc-140c-44c2-b605-0d377805ac43":{"BinaryUI":{"from":{"id":"3f7fd816-518b-4b9e-8134-3059e78045a0","x":2544,"y":3341,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"55ae9c5d-bcdb-4c29-8f06-cc9f596662d5":{"BinaryUI":{"from":{"id":"3f7fd816-518b-4b9e-8134-3059e78045a0","x":2439,"y":3341,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"23c220df-e5a3-44dc-b521-d29378c6a5e0":{"BinaryUI":{"from":{"id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","x":3402,"y":2957,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3126,"offset":{"x":20,"y":20},"dir":"East"}}},"71251371-81c5-4f25-8141-fef1e23e12fe":{"BinaryUI":{"from":{"id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","x":2440,"y":3876,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","x":2442,"y":3804,"offset":{"x":20,"y":20},"dir":"East"}}},"761a6c93-ae0b-4508-9437-d68d0b2c1f22":{"BinaryUI":{"from":{"id":"e05ab5f3-17e7-4594-8ce0-c02d793a1df9","x":2416,"y":3584,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","x":2374,"y":3777,"offset":{"x":20,"y":20},"dir":"North"}}},"8398d7d3-d42f-4ca6-89d3-7a563eb50131":{"BinaryUI":{"from":{"id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","x":2440,"y":3777,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3018,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"124d7dea-f1d6-477f-a096-42e92dd297c2":{"BinaryUI":{"from":{"id":"4d5720eb-da8c-493d-ab8d-cb6111dd6099","x":3196,"y":3635,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3196,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"07097b52-f614-461b-9d4c-62ba7177a383":{"BinaryUI":{"from":{"id":"4d5720eb-da8c-493d-ab8d-cb6111dd6099","x":3231,"y":3635,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3230,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"5e20da11-448d-41a5-8b92-7dd75d64ad3d":{"BinaryUI":{"from":{"id":"0b3e9de0-d139-4934-a043-d1913a24de0c","x":2279,"y":4193,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3070,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"10e2f3e9-2995-47e0-9456-ed375eb610b7":{"BinaryUI":{"from":{"id":"0b3e9de0-d139-4934-a043-d1913a24de0c","x":2190,"y":4193,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"d64c3d2d-51d9-4586-b8e7-0b23aea46f49":{"IsaUI":{"from":{"id":"0b3e9de0-d139-4934-a043-d1913a24de0c","x":2232,"y":4313,"offset":{"x":20,"y":20},"dir":"South"},"to":[{"id":"70932b40-f444-4341-bb19-0a29d1daecbe","x":2201,"y":4436,"offset":{"x":20,"y":20},"dir":"North"},{"id":"32dbb54a-9693-4847-9278-7c956ea045f8","x":2371,"y":4434,"offset":{"x":20,"y":20},"dir":"North"},{"id":"122e4157-381f-400f-ac30-a1c8a2a9e8c1","x":2054,"y":4434,"offset":{"x":20,"y":20},"dir":"North"},{"id":"17db2afc-ae6c-4e53-a527-48516811fe3e","x":1902,"y":4435,"offset":{"x":20,"y":20},"dir":"North"},{"id":"30abb231-4248-4ffa-9a69-e0eb6bb9dbbd","x":1752,"y":4435,"offset":{"x":20,"y":20},"dir":"North"}]}},"497076d2-1625-446b-b663-d75f5c2e2a3c":{"BinaryUI":{"from":{"id":"0dc0e921-e7ff-4766-9738-e6e312f7f0de","x":2608,"y":4207,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3147,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"f42505df-9843-4914-97bc-c665dfbc2dcc":{"BinaryUI":{"from":{"id":"79571896-9798-44a3-acef-5aa2d9773b93","x":2964,"y":2085,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2920,"y":2532,"offset":{"x":20,"y":20},"dir":"East"}}},"dfa0880b-de0a-4d0f-9f42-7ed496af35ea":{"BinaryUI":{"from":{"id":"79571896-9798-44a3-acef-5aa2d9773b93","x":2991,"y":2085,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","x":2949,"y":2850,"offset":{"x":20,"y":20},"dir":"East"}}},"7fb6cd7d-16c0-43bc-9e29-f645c644afe1":{"BinaryUI":{"from":{"id":"79571896-9798-44a3-acef-5aa2d9773b93","x":3088,"y":2016,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"97f815f0-dcc4-4bd3-843d-13ff1dc5802c","x":3673,"y":1656,"offset":{"x":20,"y":20},"dir":"West"}}},"f72fcd31-7056-4425-b0ce-7734a759e616":{"BinaryUI":{"from":{"id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","x":3645,"y":4149,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3407,"y":2410,"offset":{"x":20,"y":20},"dir":"East"}}},"b197d992-e4d6-4663-a6da-b46906374684":{"IsaUI":{"from":{"id":"bf69c9af-f268-4c9b-8e67-4497eb490478","x":3779,"y":2537,"offset":{"x":20,"y":20},"dir":"South"},"to":[{"id":"141350e6-b62d-4a6d-9ea2-47333e51e3ea","x":3379,"y":2594,"offset":{"x":20,"y":20},"dir":"South"},{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4273,"y":2580,"offset":{"x":20,"y":20},"dir":"South"},{"id":"7eaea922-8807-4c38-a704-0143e0594664","x":4544,"y":1827,"offset":{"x":20,"y":20},"dir":"South"}]}},"7022f5ed-020f-453f-bcab-8e632ca03b6e":{"BinaryUI":{"from":{"id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","x":3575,"y":4149,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"bf69c9af-f268-4c9b-8e67-4497eb490478","x":3725,"y":2537,"offset":{"x":20,"y":20},"dir":"South"}}},"1ec425ff-8b5a-49bf-87cb-9863defb9320":{"BinaryUI":{"from":{"id":"1e7a66b2-f559-4c21-b8e6-969999ed171d","x":2457,"y":2914,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3128,"offset":{"x":20,"y":20},"dir":"West"}}},"99d07c03-f3ce-42d7-bb64-8bde65c79dd6":{"BinaryUI":{"from":{"id":"1e7a66b2-f559-4c21-b8e6-969999ed171d","x":2510,"y":2803,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2668,"y":2584,"offset":{"x":20,"y":20},"dir":"West"}}},"3088e0b8-de0a-45d2-95fb-e8804c9c03fa":{"BinaryUI":{"from":{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":4029,"y":2866,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"6c7969f3-f150-4975-a989-a7bc8164b168","x":4029,"y":2997,"offset":{"x":20,"y":20},"dir":"North"}}},"a640575d-a105-4ad5-b786-6e7fb55a0b94":{"IsaUI":{"from":{"id":"222307c0-668c-43f9-9368-34cc048f0ae3","x":1359,"y":3810,"offset":{"x":20,"y":20},"dir":"West"},"to":[{"id":"6187076b-e765-4e6b-af28-f577eba40b5e","x":1226,"y":3784,"offset":{"x":20,"y":20},"dir":"East"},{"id":"41b7bda7-f5a2-4c94-af22-fedbe8d6f287","x":1227,"y":3906,"offset":{"x":20,"y":20},"dir":"East"}]}},"d32059a8-46ed-4ceb-9b92-5f661b98f4e6":{"IsaUI":{"from":{"id":"f7fc16ac-6a23-4f5d-a04c-1163617701c1","x":1273,"y":3540,"offset":{"x":20,"y":20},"dir":"West"},"to":[{"id":"80f73c4e-caf1-4e1f-a634-00965f6ad032","x":1112,"y":3455,"offset":{"x":20,"y":20},"dir":"East"},{"id":"0ad229c4-1782-4783-b64e-0d15fe482463","x":1113,"y":3597,"offset":{"x":20,"y":20},"dir":"East"}]}},"cfe90847-d888-4245-bb66-901855bb0051":{"BinaryUI":{"from":{"id":"95e17479-07a5-41b1-9930-1b9b520514f6","x":3861,"y":2655,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"c4723d6d-1584-49bd-80f1-4c700185746e","x":4645,"y":2569,"offset":{"x":20,"y":20},"dir":"South"}}},"45c4a4f5-e54b-45d2-bea6-617723a92b70":{"BinaryUI":{"from":{"id":"95e17479-07a5-41b1-9930-1b9b520514f6","x":3552,"y":2676,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2913,"y":2587,"offset":{"x":20,"y":20},"dir":"South"}}},"14f71b3f-b918-4376-8e75-7333e85ca536":{"BinaryUI":{"from":{"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","x":2029,"y":2995,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","x":2029,"y":3059,"offset":{"x":20,"y":20},"dir":"West"}}},"8d8db4b1-8c90-472b-bc98-88fa6a2188d1":{"BinaryUI":{"from":{"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","x":2284,"y":3042,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"95e17479-07a5-41b1-9930-1b9b520514f6","x":3660,"y":2739,"offset":{"x":20,"y":20},"dir":"South"}}},"44ad55c5-bb62-4864-90e7-e992494786aa":{"BinaryUI":{"from":{"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","x":2261,"y":2973,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2682,"y":2587,"offset":{"x":20,"y":20},"dir":"South"}}},"c3dba39c-fe1e-49e0-9a45-8f872b6aa4c5":{"BinaryUI":{"from":{"id":"f192b162-8ada-4128-8805-1953e9165c54","x":2289,"y":2733,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2668,"y":2565,"offset":{"x":20,"y":20},"dir":"West"}}},"f1c15ada-631b-4249-8c73-4e52391a532f":{"BinaryUI":{"from":{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3100,"y":2336,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"7178e7a4-5131-504b-a7b3-c2c0cfedf343","x":2899,"y":2336,"offset":{"x":20,"y":20},"dir":"East"}}},"a5ac6af9-3cef-49e5-8d01-462817e1d641":{"IsaUI":{"from":{"id":"c4723d6d-1584-49bd-80f1-4c700185746e","x":4708,"y":2569,"offset":{"x":20,"y":20},"dir":"South"},"to":[{"id":"7794ada6-49c3-4bf0-991f-828c6583ebb8","x":4910,"y":2694,"offset":{"x":20,"y":20},"dir":"North"},{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":4047,"y":2738,"offset":{"x":20,"y":20},"dir":"North"}]}},"868b4a28-0d2f-4d78-b947-66f44c3bdaf9":{"BinaryUI":{"from":{"id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","x":2961,"y":4187,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","x":3129,"y":4188,"offset":{"x":20,"y":20},"dir":"West"}}},"ca33902a-c6f2-45a5-9273-cf80a579cedd":{"BinaryUI":{"from":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4151,"y":2533,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"f192b162-8ada-4128-8805-1953e9165c54","x":2277,"y":2660,"offset":{"x":20,"y":20},"dir":"North"}}},"d440f204-2694-4438-b618-721a9108070f":{"BinaryUI":{"from":{"id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","x":3647,"y":2270,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"b7483723-222d-4f08-b7b9-e8b14f0308cf","x":2418,"y":1431,"offset":{"x":20,"y":20},"dir":"East"}}},"18c4566d-a7b7-4b1d-8e0b-470fddbaab9b":{"BinaryUI":{"from":{"id":"c8fcd612-6ca8-469a-824c-de218e4fd075","x":4738,"y":1620,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2920,"y":2473,"offset":{"x":20,"y":20},"dir":"East"}}},"33b9b943-0d44-4490-b20a-35c110ae9473":{"IsaUI":{"from":{"id":"7eaea922-8807-4c38-a704-0143e0594664","x":4549,"y":1722,"offset":{"x":20,"y":20},"dir":"North"},"to":[{"id":"4b6c7fde-0878-4947-b960-bc73a4558c60","x":4302,"y":1619,"offset":{"x":20,"y":20},"dir":"South"},{"id":"e6fbeeb8-6ade-46a2-bb52-9c99d06918b2","x":4518,"y":1618,"offset":{"x":20,"y":20},"dir":"South"},{"id":"c8fcd612-6ca8-469a-824c-de218e4fd075","x":4694,"y":1620,"offset":{"x":20,"y":20},"dir":"South"}]}},"4ce09575-5a2c-40c5-b766-bb12ef0c1600":{"BinaryUI":{"from":{"id":"7eaea922-8807-4c38-a704-0143e0594664","x":4599,"y":1827,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","x":4429,"y":1987,"offset":{"x":20,"y":20},"dir":"East"}}},"193d881e-9afd-4b9e-a431-cdb113a7ee88":{"BinaryUI":{"from":{"id":"52143d28-8474-44bc-b63f-e654150888d3","x":2860,"y":3152,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3152,"offset":{"x":20,"y":20},"dir":"West"}}},"badf3d57-aba3-4757-b0e4-9d0e7b55f2ea":{"AssociativeUI":{"from":{"x":3100,"y":3208},"middle":{"id":"6094aad5-613b-42b6-8f48-c3b9e2161aa9","x":2933,"y":3296,"offset":{"x":0,"y":0},"dir":"North"},"one":{"id":"52143d28-8474-44bc-b63f-e654150888d3","x":2860,"y":3206,"offset":{"x":-160,"y":50},"dir":"East"},"other":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3207,"offset":{"x":20,"y":20},"dir":"West"}}},"08512716-f1d3-4a88-bd38-aea9ae0f9ca7":{"BinaryUI":{"from":{"id":"6094aad5-613b-42b6-8f48-c3b9e2161aa9","x":2874,"y":3296,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3010,"y":3231,"offset":{"x":20,"y":20},"dir":"West"}}},"0ed07f33-0bbb-497d-9823-9247fc520e85":{"BinaryUI":{"from":{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":4107,"y":2835,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","x":4107,"y":2757,"offset":{"x":20,"y":20},"dir":"East"}}},"cea29749-dc0f-40c0-adf9-4c21b187751e":{"IsaUI":{"from":{"id":"3874760d-0104-4670-ba8b-1af413c5ec4a","x":3995,"y":4317,"offset":{"x":20,"y":20},"dir":"South"},"to":[{"id":"6822b78e-e5ca-4c40-ba9d-cf7a69d4fdc7","x":3864,"y":4431,"offset":{"x":20,"y":20},"dir":"North"},{"id":"910e3a08-5e99-47a5-bde4-3e35cf9f00da","x":4143,"y":4431,"offset":{"x":20,"y":20},"dir":"North"}]}},"599c1454-9525-4386-b50f-4fdee4b08373":{"IsaUI":{"from":{"id":"31deb355-b737-43a6-ae88-199bb51f940d","x":3692,"y":3110,"offset":{"x":20,"y":20},"dir":"North"},"to":[{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3407,"y":2355,"offset":{"x":20,"y":20},"dir":"East"},{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","x":4276,"y":2043,"offset":{"x":20,"y":20},"dir":"South"}]}},"9f2917c8-b17b-4ab2-8c6e-0269a0b80681":{"BinaryUI":{"from":{"id":"39060ea9-5d45-4954-a29f-ba88e01e7217","x":3718,"y":3753,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"39060ea9-5d45-4954-a29f-ba88e01e7217","x":3718,"y":3822,"offset":{"x":20,"y":20},"dir":"East"}}},"3c241319-416a-4195-ae80-fa4439198c1c":{"BinaryUI":{"from":{"id":"d546feef-91df-49ea-ac61-430bdcf9832c","x":3861,"y":3977,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","x":3722,"y":3978,"offset":{"x":20,"y":20},"dir":"East"}}},"12003437-2898-4b1d-ba27-b1cc69d8dbb2":{"BinaryUI":{"from":{"id":"39060ea9-5d45-4954-a29f-ba88e01e7217","x":3651,"y":3842,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","x":3651,"y":3922,"offset":{"x":20,"y":20},"dir":"North"}}},"940f5aba-58f5-46fa-bbba-43fc6b10a3fe":{"BinaryUI":{"from":{"id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","x":3565,"y":3922,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"39060ea9-5d45-4954-a29f-ba88e01e7217","x":3565,"y":3842,"offset":{"x":20,"y":20},"dir":"South"}}},"42c18b66-d259-40d1-a77d-0c0e76080a6d":{"BinaryUI":{"from":{"id":"4856978f-20be-4b59-8bf6-b941091119a9","x":3160,"y":2974,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3159,"y":3115,"offset":{"x":20,"y":20},"dir":"North"}}},"04ae2e8d-c499-4068-88bd-015b0bba57bf":{"BinaryUI":{"from":{"id":"dbada891-ca0d-4fbc-8371-9f9234867bd6","x":2304,"y":2366,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2668,"y":2526,"offset":{"x":20,"y":20},"dir":"West"}}},"e4734a39-1f45-400f-937a-285e2fad31a4":{"BinaryUI":{"from":{"id":"290f49d3-8ce7-408e-be14-611b66db9687","x":3331,"y":2157,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3331,"y":2270,"offset":{"x":20,"y":20},"dir":"North"}}},"da1d6545-b9d6-499e-9175-fd2a340b1f2e":{"BinaryUI":{"from":{"id":"290f49d3-8ce7-408e-be14-611b66db9687","x":3203,"y":2031,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"290f49d3-8ce7-408e-be14-611b66db9687","x":3320,"y":2031,"offset":{"x":20,"y":20},"dir":"North"}}},"c8a4b21a-62c3-4fbd-8799-2b55d93d951c":{"BinaryUI":{"from":{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","x":3218,"y":2270,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"290f49d3-8ce7-408e-be14-611b66db9687","x":3217,"y":2157,"offset":{"x":20,"y":20},"dir":"South"}}},"23ef9104-65a5-4b32-943f-a2db064c699f":{"BinaryUI":{"from":{"id":"95e17479-07a5-41b1-9930-1b9b520514f6","x":3598,"y":2739,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","x":2284,"y":3004,"offset":{"x":20,"y":20},"dir":"East"}}},"94b3bb70-e939-46bd-ae53-c01cd74430c1":{"BinaryUI":{"from":{"id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","x":4123,"y":1815,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","x":4124,"y":1919,"offset":{"x":20,"y":20},"dir":"North"}}},"7d003f0e-c38b-41fa-ae33-6333d9831146":{"BinaryUI":{"from":{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","x":4236,"y":1919,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","x":4236,"y":1815,"offset":{"x":20,"y":20},"dir":"South"}}},"fe6e5298-d4bb-447e-bffa-b4c38274abfd":{"BinaryUI":{"from":{"id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","x":4118,"y":1690,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","x":4240,"y":1691,"offset":{"x":20,"y":20},"dir":"North"}}},"2b46b080-32c8-4a2e-a118-d6a4bd4afc62":{"BinaryUI":{"from":{"id":"b28be6c2-a37a-4049-9110-52136f892fc4","x":4388,"y":2186,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"b28be6c2-a37a-4049-9110-52136f892fc4","x":4285,"y":2186,"offset":{"x":20,"y":20},"dir":"North"}}},"b7eb881e-d4f4-49c8-aba9-482a8c3935c5":{"BinaryUI":{"from":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4322,"y":2420,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"b28be6c2-a37a-4049-9110-52136f892fc4","x":4322,"y":2326,"offset":{"x":20,"y":20},"dir":"South"}}},"b66c47bf-a2e0-4d78-bc54-9116348c0ad8":{"BinaryUI":{"from":{"id":"b28be6c2-a37a-4049-9110-52136f892fc4","x":4400,"y":2326,"offset":{"x":20,"y":20},"dir":"South"},"to":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","x":4400,"y":2420,"offset":{"x":20,"y":20},"dir":"North"}}},"63ae3d27-ef09-4bfd-860c-a456b81f0944":{"BinaryUI":{"from":{"id":"dbc37f2f-0a90-4a8b-a217-d4a70a606695","x":5349,"y":3641,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"d30d2b03-732b-41bb-89ed-d053750bf987","x":4631,"y":3643,"offset":{"x":20,"y":20},"dir":"East"}}},"e2679c18-f646-4edd-b5ea-d8bd80b8ef2e":{"BinaryUI":{"from":{"id":"80bf1ba4-2f74-45db-a1b1-6b76e82b2013","x":5345,"y":3378,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3244,"y":3210,"offset":{"x":20,"y":20},"dir":"East"}}},"a6f35d3b-6648-496a-97b6-0ea433ad194a":{"IsaUI":{"from":{"id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","x":5196,"y":3501,"offset":{"x":20,"y":20},"dir":"East"},"to":[{"id":"80bf1ba4-2f74-45db-a1b1-6b76e82b2013","x":5345,"y":3411,"offset":{"x":20,"y":20},"dir":"West"},{"id":"dbc37f2f-0a90-4a8b-a217-d4a70a606695","x":5349,"y":3599,"offset":{"x":20,"y":20},"dir":"West"}]}},"8ada5f43-06ce-4ea9-89a1-d955b28d6228":{"BinaryUI":{"from":{"id":"0e1e683a-fe89-4002-88fa-efd50d66de6c","x":4698,"y":3537,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","x":4895,"y":3535,"offset":{"x":20,"y":20},"dir":"West"}}},"f66ed644-ae0e-40a6-b369-d096ad752293":{"BinaryUI":{"from":{"id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","x":5160,"y":3449,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","x":5091,"y":3449,"offset":{"x":20,"y":20},"dir":"North"}}},"20cfb547-cc76-4b36-b747-6ab607ffe55f":{"BinaryUI":{"from":{"id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","x":4895,"y":3487,"offset":{"x":20,"y":20},"dir":"West"},"to":{"id":"0e1e683a-fe89-4002-88fa-efd50d66de6c","x":4698,"y":3487,"offset":{"x":20,"y":20},"dir":"East"}}},"12c5362d-b2d7-4e5a-ab1f-406d4388517b":{"BinaryUI":{"from":{"id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","x":3932,"y":2336,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","x":4165,"y":2043,"offset":{"x":20,"y":20},"dir":"South"}}},"3e1d9c90-8606-462b-a052-34ea03629f4a":{"BinaryUI":{"from":{"id":"47abdb96-0225-4880-a472-9c714086e2b5","x":3097,"y":3818,"offset":{"x":20,"y":20},"dir":"North"},"to":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","x":3170,"y":3250,"offset":{"x":20,"y":20},"dir":"South"}}},"9540eca3-8091-43b2-8d74-437ebdaef289":{"BinaryUI":{"from":{"id":"b861cf8b-c7e9-4ecb-b29a-13086aa96d9c","x":2119,"y":1970,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2717,"y":2461,"offset":{"x":20,"y":20},"dir":"North"}}},"ff6e9a3e-a59f-4ffb-8d60-3e63ceeef16d":{"BinaryUI":{"from":{"id":"b861cf8b-c7e9-4ecb-b29a-13086aa96d9c","x":2119,"y":2036,"offset":{"x":20,"y":20},"dir":"East"},"to":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","x":2696,"y":2461,"offset":{"x":20,"y":20},"dir":"North"}}}}}}},"objects":{"ids":["b8ec6afc-ddbd-53d6-9be3-e4b738941c2f","7178e7a4-5131-504b-a7b3-c2c0cfedf343","45644594-b418-5362-9294-a62fe2a0fa8e","2e277e34-ab6f-4028-9c52-935c31520fec","e68f8912-9897-4cbd-b363-cb4203a726a9","141350e6-b62d-4a6d-9ea2-47333e51e3ea","88687f76-5d9e-404e-a801-f6f57f9b30ca","d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","c89e362d-7905-4226-8713-97d3d6f05037","94fc0044-4b88-4f5c-ac60-3a44262ade10","f192b162-8ada-4128-8805-1953e9165c54","954b354f-3a90-440b-ab0f-43efc00d275e","0365b40c-c40a-4653-84ab-44d1c12d294f","9352c766-9f6b-413b-9ea0-13f9c8e4d86e","30c31621-a4bd-4356-80b9-1226e00651c9","6c7969f3-f150-4975-a989-a7bc8164b168","c32fcb6d-b505-492f-95c8-5f118079a399","59f269ab-2dbc-4b07-b9bc-48441f20e78f","b359d531-77ae-436f-9f0d-6a5632f1648e","ce2da156-e0fd-4e56-bb31-2030d4e0c599","dbbb7d46-4072-49a6-b483-cc8b25cbb4ea","a8b86e41-5b04-4469-8a10-91bd89603e27","d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5","dc6d1ffa-5dca-43ef-b973-0628ab580cb7","a16027c2-9a1d-42b7-ab37-a4e8e0bb7e4d","b1612607-a813-4bc2-896b-88ec4b249447","d30d2b03-732b-41bb-89ed-d053750bf987","fa42f4e2-1ff3-473f-a4b9-593c01134e96","d715c5f9-23f8-45e0-a1df-34e27acd01f5","43bebcb3-06a1-410d-a19e-b3c1c6d1fa6b","6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656","d546feef-91df-49ea-ac61-430bdcf9832c","3874760d-0104-4670-ba8b-1af413c5ec4a","1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","846aa191-7b0c-4325-8c21-09fa5edf7c78","26dba2c5-a7e9-4556-a9c2-79091a97b941","75a16785-d611-45ce-b52c-284a9da0b4b8","01c8907d-cb59-4fae-a3ca-8cb331d18387","79069fc2-4d65-4073-b610-4afc0488de5c","23a9a479-68e7-4a70-bcef-9041f10fd287","3a1c7f6a-459d-4eba-9291-2aebb9bf60c9","a9b74602-bdc5-481f-af4c-8021553b895a","cdb1afaf-245c-4d56-bfea-10f69e45007d","b7483723-222d-4f08-b7b9-e8b14f0308cf","97f815f0-dcc4-4bd3-843d-13ff1dc5802c","72443b79-5645-4b5f-b317-e1a8f815b81c","93f288e7-d670-40a6-91f3-2006b5efa8b4","e1321ffa-07d5-480d-89f9-227b13d27ce1","3f7fd816-518b-4b9e-8134-3059e78045a0","c46e6b80-0365-429a-abf9-ca75ce4f469a","9c8bc563-b596-4348-9189-065d747f7c9f","1b4e5b3a-a9b2-4316-94c4-ff34d4d3d523","e3329a9e-1c52-44f6-a1f7-fc85f7362e9e","484e429b-bf54-45cb-9b87-baddf7fb5f5b","c47b8696-7e98-4733-ab33-a4dca7b61d01","e05ab5f3-17e7-4594-8ce0-c02d793a1df9","ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","4d5720eb-da8c-493d-ab8d-cb6111dd6099","6767c0cf-4041-4047-b2b4-d7375f33bc97","35b3de4e-46b8-490f-8e30-c305ed348a78","d8b554d4-03ac-4613-a3e0-fc0b901bfd70","0edc535b-405d-4dd5-bcd2-f5772ab116c2","0b3e9de0-d139-4934-a043-d1913a24de0c","70932b40-f444-4341-bb19-0a29d1daecbe","32dbb54a-9693-4847-9278-7c956ea045f8","0dc0e921-e7ff-4766-9738-e6e312f7f0de","122e4157-381f-400f-ac30-a1c8a2a9e8c1","17db2afc-ae6c-4e53-a527-48516811fe3e","30abb231-4248-4ffa-9a69-e0eb6bb9dbbd","ba8a3bbf-86a8-47e2-92bb-f41878981c41","79571896-9798-44a3-acef-5aa2d9773b93","5c85a8db-e4cc-4e38-9922-58d93773f4f0","bf69c9af-f268-4c9b-8e67-4497eb490478","ce73a111-4670-411e-9bd2-f3308d6399c9","1e7a66b2-f559-4c21-b8e6-969999ed171d","80f73c4e-caf1-4e1f-a634-00965f6ad032","222307c0-668c-43f9-9368-34cc048f0ae3","6187076b-e765-4e6b-af28-f577eba40b5e","f7fc16ac-6a23-4f5d-a04c-1163617701c1","0ad229c4-1782-4783-b64e-0d15fe482463","b8d3d40e-462e-4e4d-9fb4-b7d54f9fd03a","470246f6-91ec-4993-b915-93480d0f4eb9","f6a3ce12-18e1-4675-ab94-6b2a7c91d951","41b7bda7-f5a2-4c94-af22-fedbe8d6f287","84f1c5fd-d907-4653-a132-bfd420ad9212","efde0481-1599-4c5c-bf30-51dbd4a8ed83","95e17479-07a5-41b1-9930-1b9b520514f6","8d86dceb-7e6e-4767-8a3f-cbbde458ad93","68e7191a-fe94-423f-8a5d-5551384ae998","c4723d6d-1584-49bd-80f1-4c700185746e","7794ada6-49c3-4bf0-991f-828c6583ebb8","d48d948b-5291-4eb3-ba35-7ab1c1ffa098","7eaea922-8807-4c38-a704-0143e0594664","4b6c7fde-0878-4947-b960-bc73a4558c60","e6fbeeb8-6ade-46a2-bb52-9c99d06918b2","c8fcd612-6ca8-469a-824c-de218e4fd075","52143d28-8474-44bc-b63f-e654150888d3","ab7a5708-6d12-4dce-b488-fa3a3b480510","6094aad5-613b-42b6-8f48-c3b9e2161aa9","6822b78e-e5ca-4c40-ba9d-cf7a69d4fdc7","910e3a08-5e99-47a5-bde4-3e35cf9f00da","31deb355-b737-43a6-ae88-199bb51f940d","39060ea9-5d45-4954-a29f-ba88e01e7217","4856978f-20be-4b59-8bf6-b941091119a9","dbada891-ca0d-4fbc-8371-9f9234867bd6","290f49d3-8ce7-408e-be14-611b66db9687","7056c5ba-4f49-404f-abd5-e5c6a5879fac","b28be6c2-a37a-4049-9110-52136f892fc4","0e1e683a-fe89-4002-88fa-efd50d66de6c","d39c987f-bba2-4956-963f-7e9c6c3fe4b4","dbc37f2f-0a90-4a8b-a217-d4a70a606695","80bf1ba4-2f74-45db-a1b1-6b76e82b2013","1a5eca02-909e-434c-bd35-b02f2b7dbe22","dfb72d5a-91a4-4023-a7a9-baef28bed978","47abdb96-0225-4880-a472-9c714086e2b5","b861cf8b-c7e9-4ecb-b29a-13086aa96d9c"],"entities":{"b8ec6afc-ddbd-53d6-9be3-e4b738941c2f":{"id":"b8ec6afc-ddbd-53d6-9be3-e4b738941c2f","key_letter":"T","name":"Type","description":"The type of a value\n\nThere are several values available: [Integer], [Boolean], [Float], [String], and [UUID].\n\n# Object imported from the sarzak Domain.\n\nWe don’t have a means of representing this as imported in Cuckoo, so I’m just adding it here.\n\n🐶 { \"imported_object\": { \"domain\": \"crate::v2::sarzak\", \"model_file\": \"models/sarzak.json\", \"id\": \"b8ec6afc-ddbd-53d6-9be3-e4b738941c2f\"}}\n","attributes":{"52783e59-f28c-5a8b-8947-12d60c2d49d0":{"id":"52783e59-f28c-5a8b-8947-12d60c2d49d0","name":"id","type":"Uuid"}}},"7178e7a4-5131-504b-a7b3-c2c0cfedf343":{"id":"7178e7a4-5131-504b-a7b3-c2c0cfedf343","key_letter":"OBJ","name":"Object","description":"An `Object` is a collection of related data. By creating `Object`s, and \nconnecting them with `Relationships` we build a powerful abstraction.\n\n`Object`s contain [Attribute]s that represent the data that the \n`Object`encapsulates. All `Object`s have an attribute called `id`, which \nis a unique idenifier for each class of `Object`. The `id` attribute is a\nversion 5 UUID.\n\n# Object imported from the sarzak Domain.\n\nWe don’t have a means of representing this as imported in Cuckoo, so I’m just adding it here.\n\n🐶 { \"imported_object\": { \"domain\": \"crate::v2::sarzak\", \"model_file\": \"models/sarzak.json\", \"id\": \"7178e7a4-5131-504b-a7b3-c2c0cfedf343\"}}","attributes":{"a37b26e0-49fb-5be8-95a8-fb563ab81cc4":{"id":"a37b26e0-49fb-5be8-95a8-fb563ab81cc4","name":"id","type":"Uuid"},"d01da69e-bf98-5825-a9f6-9ce0405417f1":{"id":"d01da69e-bf98-5825-a9f6-9ce0405417f1","name":"name","type":"String"},"a24410b8-5736-5216-b4ca-a4a7c70eb388":{"id":"a24410b8-5736-5216-b4ca-a4a7c70eb388","name":"key letters","type":"String"},"75f8f112-c966-5cbf-aebe-b377b488905b":{"id":"75f8f112-c966-5cbf-aebe-b377b488905b","name":"description","type":"String"}}},"45644594-b418-5362-9294-a62fe2a0fa8e":{"id":"45644594-b418-5362-9294-a62fe2a0fa8e","key_letter":"I","name":"Item","description":"","attributes":{"045ccee5-86de-4081-8d64-613e2e38a993":{"id":"045ccee5-86de-4081-8d64-613e2e38a993","name":"id","type":"Uuid"}}},"2e277e34-ab6f-4028-9c52-935c31520fec":{"id":"2e277e34-ab6f-4028-9c52-935c31520fec","key_letter":"TYP","name":"Value Type","description":"Value Type\n\nThis is the main type abstraction used in Lu Dog. We mostly rely on what is available in Sarzak, with two additions: ...\n\nTwo? I know that I need an Option<>. I'm not so sure about a & though. Everything from the store is going to be by UUID, so all of my references are really \"pointers\" underneath. I want them to be typed in the code though.\n\nSo how will the code work? We could store the type next to the pointer: (type, uuid). Huh. This is the eventual output domain. How does that affect my thinking?\n\nThis should end up looking like woog, but simpler. Woog was for generating rust. I want to generate dwarf. Dwarf needs to be typed? If so, when are they resolved to uuid's eventually? \n\nOption for now. We'll see later...","attributes":{"2b4f587e-1528-5813-b970-9560d145f091":{"id":"2b4f587e-1528-5813-b970-9560d145f091","name":"id","type":"Uuid"},"c0a01d29-455b-4dfc-a009-aa39f0a0756d":{"id":"c0a01d29-455b-4dfc-a009-aa39f0a0756d","name":"bogus","type":"Boolean"}}},"e68f8912-9897-4cbd-b363-cb4203a726a9":{"id":"e68f8912-9897-4cbd-b363-cb4203a726a9","key_letter":"ST","name":"Struct","description":"A Type from the Model\n\nThis is really just an alias for `[Object]`.","attributes":{"e12db790-b02b-500e-9a6f-742378146a45":{"id":"e12db790-b02b-500e-9a6f-742378146a45","name":"id","type":"Uuid"},"3dde88a1-93c8-413d-b335-66a1f5f755f3":{"id":"3dde88a1-93c8-413d-b335-66a1f5f755f3","name":"name","type":"String"},"ade762f0-1a7c-4d61-ae83-bbcace50c8b0":{"id":"ade762f0-1a7c-4d61-ae83-bbcace50c8b0","name":"path","type":"String"}}},"141350e6-b62d-4a6d-9ea2-47333e51e3ea":{"id":"141350e6-b62d-4a6d-9ea2-47333e51e3ea","key_letter":"F","name":"Field","description":"A Field in a data structure\n\nA field has a name, and a type.","attributes":{"add99bda-d83f-558e-b54e-6373a658d0b6":{"id":"add99bda-d83f-558e-b54e-6373a658d0b6","name":"id","type":"Uuid"},"3f2dcff1-5f2e-4279-8d54-537cbb477874":{"id":"3f2dcff1-5f2e-4279-8d54-537cbb477874","name":"name","type":"String"}}},"88687f76-5d9e-404e-a801-f6f57f9b30ca":{"id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","key_letter":"IMPL","name":"Implementation Block","description":"An Implementation Block\n\nInside this block functions are defined on a [`ModellType`].","attributes":{"69046536-f9f1-4c70-99c8-bf778c90cdea":{"id":"69046536-f9f1-4c70-99c8-bf778c90cdea","name":"id","type":"Uuid"}}},"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5":{"id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","key_letter":"FUNC","name":"Function","description":"A Function\n\nInputs, outputs. Stuff happens.","attributes":{"fda10b16-e061-4547-9ef1-0ab085270b88":{"id":"fda10b16-e061-4547-9ef1-0ab085270b88","name":"id","type":"Uuid"},"96a8868d-e8e7-4788-a81e-cc4b1210c85b":{"id":"96a8868d-e8e7-4788-a81e-cc4b1210c85b","name":"name","type":"String"}}},"c89e362d-7905-4226-8713-97d3d6f05037":{"id":"c89e362d-7905-4226-8713-97d3d6f05037","key_letter":"IMP","name":"Import","description":"An Import of a foreign ObjectStore\n\nThis indicates to the downstream model compiler that it needs to emit code to load the imported ObjectStore.\n\nI've got this has_alias boolean here because I don't have `Option`. I never needed it until now, because you get an option with a 1c relationship. Not proud of this, but it's the best alternative. Makes me wonder about adding an `Option` type to the primitives though.\n\nI suppose if there were a way to signify a null string. Or I could check if it's length is 0. I think adding the bool is cleaner.","attributes":{"8f8af328-cd2f-435d-8d29-b7bce353a0c7":{"id":"8f8af328-cd2f-435d-8d29-b7bce353a0c7","name":"id","type":"Uuid"},"7e6b9c84-ae9e-46d6-a5d6-5899e57c4687":{"id":"7e6b9c84-ae9e-46d6-a5d6-5899e57c4687","name":"path","type":"String"},"e1f19a18-4287-42b2-b767-5dc9cca24d6b":{"id":"e1f19a18-4287-42b2-b767-5dc9cca24d6b","name":"alias","type":"String"},"f5a8a036-bc55-44c0-8ae6-f03267b19032":{"id":"f5a8a036-bc55-44c0-8ae6-f03267b19032","name":"name","type":"String"},"002b29e8-97cc-4b8a-a339-db79f2306729":{"id":"002b29e8-97cc-4b8a-a339-db79f2306729","name":"has_alias","type":"Boolean"}}},"94fc0044-4b88-4f5c-ac60-3a44262ade10":{"id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","key_letter":"VAL","name":"Value","description":"A Value\n\nA value has a Type.","attributes":{"87e26364-f525-4e59-8db0-eea6c972e140":{"id":"87e26364-f525-4e59-8db0-eea6c972e140","name":"id","type":"Uuid"}}},"f192b162-8ada-4128-8805-1953e9165c54":{"id":"f192b162-8ada-4128-8805-1953e9165c54","key_letter":"PARAM","name":"Parameter","description":"A Parameter to a Function\n\nFrom inside the function it's a parameter, from outside it's an argument. No idea why I wrote that — just looking for content... I mean, what else do you say about a parameter?","attributes":{"8ecf5553-7599-46d0-a3fe-e6b70c64d31f":{"id":"8ecf5553-7599-46d0-a3fe-e6b70c64d31f","name":"id","type":"Uuid"},"fe25d7e5-24ba-4d7a-9fd9-1bfc00b7f484":{"id":"fe25d7e5-24ba-4d7a-9fd9-1bfc00b7f484","name":"position","type":"Integer"}}},"954b354f-3a90-440b-ab0f-43efc00d275e":{"id":"954b354f-3a90-440b-ab0f-43efc00d275e","key_letter":"VAR","name":"Variable","description":"A Variable\n\nA variable in a function. It may be either a local variable or a parameter.\n\nA variable has a name, and and indirectly, via [`Value`], a type.","attributes":{"911aac13-fab4-4060-9ced-a807bb398f20":{"id":"911aac13-fab4-4060-9ced-a807bb398f20","name":"id","type":"Uuid"},"0afbe372-cdd7-4956-b174-e7126efd5540":{"id":"0afbe372-cdd7-4956-b174-e7126efd5540","name":"name","type":"String"}}},"0365b40c-c40a-4653-84ab-44d1c12d294f":{"id":"0365b40c-c40a-4653-84ab-44d1c12d294f","key_letter":"L_VAR","name":"Local Variable","description":"A Local Variable in a Block\n\nNote that a variable is an \"l-value\", so it represents a specific memory location.","attributes":{"53cfecb3-d4b2-4cb9-969d-964f7fdfc93e":{"id":"53cfecb3-d4b2-4cb9-969d-964f7fdfc93e","name":"id","type":"Uuid"},"546f0286-9be0-41e9-ad65-82b9b711f545":{"id":"546f0286-9be0-41e9-ad65-82b9b711f545","name":"bug","type":"Uuid"}}},"9352c766-9f6b-413b-9ea0-13f9c8e4d86e":{"id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","key_letter":"EXP","name":"Expression","description":"An Expression\n\nExpressions are calculations that render values.","attributes":{"22291a6d-f2ea-49e5-875a-c6fe1557a092":{"id":"22291a6d-f2ea-49e5-875a-c6fe1557a092","name":"id","type":"Uuid"},"bb931661-7614-440a-83c3-86828bfad548":{"id":"bb931661-7614-440a-83c3-86828bfad548","name":"bogus","type":"Boolean"}}},"30c31621-a4bd-4356-80b9-1226e00651c9":{"id":"30c31621-a4bd-4356-80b9-1226e00651c9","key_letter":"BLK_E","name":"Block","description":"A Block Expression\n\nA block expression is an expression that consists of an ordered set of statements, living between an opening `{`, and a closing `}`.\n\nGiven that it's an expression it has a Type. The type is the value of the last expression in the block, if it's not closed by a `;`. If the last statement is terminated thusly, then the value is `[Empty]`, or `()`.\n\nThe `bug` attribute is just there to keep this thing unique. An issue that needs addressing.","attributes":{"09f1ef4c-abf2-4e66-8388-3769cd10f0c4":{"id":"09f1ef4c-abf2-4e66-8388-3769cd10f0c4","name":"id","type":"Uuid"},"fa475d83-dbe2-4a4a-8cd1-fb3dd3a09cdd":{"id":"fa475d83-dbe2-4a4a-8cd1-fb3dd3a09cdd","name":"async","type":"Boolean"},"4e02564f-29ee-465c-a8d7-8219d2cf166a":{"id":"4e02564f-29ee-465c-a8d7-8219d2cf166a","name":"bug","type":"Uuid"}}},"6c7969f3-f150-4975-a989-a7bc8164b168":{"id":"6c7969f3-f150-4975-a989-a7bc8164b168","key_letter":"STMT","name":"Statement","description":"A Statement\n\nA statement is followed by a semi-colon (`;`), and in general yields no value.","attributes":{"9e4082cd-4246-4195-acfc-b120db88105a":{"id":"9e4082cd-4246-4195-acfc-b120db88105a","name":"id","type":"Uuid"},"fe339014-0b8d-4035-b0db-582005b545a2":{"id":"fe339014-0b8d-4035-b0db-582005b545a2","name":"index","type":"Integer"}}},"c32fcb6d-b505-492f-95c8-5f118079a399":{"id":"c32fcb6d-b505-492f-95c8-5f118079a399","key_letter":"LET_S","name":"Let Statement","description":"A Let Statement\n\nThis statement assigns a value from an expression to a local variable.","attributes":{"c959c65f-ce9a-4202-a715-c377c2031978":{"id":"c959c65f-ce9a-4202-a715-c377c2031978","name":"id","type":"Uuid"}}},"59f269ab-2dbc-4b07-b9bc-48441f20e78f":{"id":"59f269ab-2dbc-4b07-b9bc-48441f20e78f","key_letter":"EXP_S","name":"Expression Statement","description":"A statement that consists of just an expression.","attributes":{"27101b62-83cc-4fec-8101-f2fb46b892e0":{"id":"27101b62-83cc-4fec-8101-f2fb46b892e0","name":"id","type":"Uuid"}}},"b359d531-77ae-436f-9f0d-6a5632f1648e":{"id":"b359d531-77ae-436f-9f0d-6a5632f1648e","key_letter":"RES_S","name":"Result Statement","description":"An Expression Statement that is not terminated by a semi-colon, and this yields a result. This is only applicable if it's the last statement in a block.","attributes":{"1e15f699-4dba-4627-a945-385e01c2b11c":{"id":"1e15f699-4dba-4627-a945-385e01c2b11c","name":"id","type":"Uuid"}}},"ce2da156-e0fd-4e56-bb31-2030d4e0c599":{"id":"ce2da156-e0fd-4e56-bb31-2030d4e0c599","key_letter":"I_S","name":"Item Statement","description":"An Item in statement position, i.e., inside of a block.","attributes":{"69657761-9338-408a-925b-d1f5734e02ac":{"id":"69657761-9338-408a-925b-d1f5734e02ac","name":"id","type":"Uuid"}}},"dbbb7d46-4072-49a6-b483-cc8b25cbb4ea":{"id":"dbbb7d46-4072-49a6-b483-cc8b25cbb4ea","key_letter":"LIT_E","name":"Literal","description":"A Literal Expression\n\nThis is any literal value in the program.","attributes":{"28768c3e-8742-4036-9a1f-738ef56d4f2d":{"id":"28768c3e-8742-4036-9a1f-738ef56d4f2d","name":"id","type":"Uuid"},"bf84d71a-ea8c-4c03-b0e6-6367f0963105":{"id":"bf84d71a-ea8c-4c03-b0e6-6367f0963105","name":"bogus","type":"Boolean"}}},"a8b86e41-5b04-4469-8a10-91bd89603e27":{"id":"a8b86e41-5b04-4469-8a10-91bd89603e27","key_letter":"EMPT","name":"Empty","description":"The Empty Type\n\nThis type represents the lack of a type. It's actually sort of a werid construct, because it also implies the lack of a value. How can you have a value without a type?","attributes":{"5c9d0df8-c2f6-4aa8-a7f5-2315da514875":{"id":"5c9d0df8-c2f6-4aa8-a7f5-2315da514875","name":"id","type":"Uuid"}}},"d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5":{"id":"d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5","key_letter":"BOOL_L","name":"Boolean Literal","description":"A Boolean\n\nIt's either `true` or `false`.","attributes":{"292f8c3b-a23d-492e-898e-799b12a0b5ac":{"id":"292f8c3b-a23d-492e-898e-799b12a0b5ac","name":"id","type":"Uuid"},"6426a2cc-2c8e-4309-b4b6-4ac93d3e93ce":{"id":"6426a2cc-2c8e-4309-b4b6-4ac93d3e93ce","name":"bogus","type":"Boolean"}}},"dc6d1ffa-5dca-43ef-b973-0628ab580cb7":{"id":"dc6d1ffa-5dca-43ef-b973-0628ab580cb7","key_letter":"T","name":"True","description":"True Literal\n\nThe literal `true`.","attributes":{"1aae6108-6151-4d10-9bac-91829343583b":{"id":"1aae6108-6151-4d10-9bac-91829343583b","name":"id","type":"Uuid"}}},"a16027c2-9a1d-42b7-ab37-a4e8e0bb7e4d":{"id":"a16027c2-9a1d-42b7-ab37-a4e8e0bb7e4d","key_letter":"F","name":"False","description":"False Literal\n\nThe literal `false`.","attributes":{"e61ae5a6-9598-427e-b576-5d36514f256c":{"id":"e61ae5a6-9598-427e-b576-5d36514f256c","name":"id","type":"Uuid"}}},"b1612607-a813-4bc2-896b-88ec4b249447":{"id":"b1612607-a813-4bc2-896b-88ec4b249447","key_letter":"INT_L","name":"Integer Literal","description":"An Integer\n\nI'm not sure what to do about width. I think I coded it as an i64 in the parser.","attributes":{"d8c8238b-b9cc-49fa-873c-cbaf71f6818d":{"id":"d8c8238b-b9cc-49fa-873c-cbaf71f6818d","name":"id","type":"Uuid"},"f865700c-11cb-48a7-8b8b-a80d2a4623dc":{"id":"f865700c-11cb-48a7-8b8b-a80d2a4623dc","name":"value","type":"Integer"}}},"d30d2b03-732b-41bb-89ed-d053750bf987":{"id":"d30d2b03-732b-41bb-89ed-d053750bf987","key_letter":"STR_L","name":"String Literal","description":"A String\n\nA string is a set of characters enclosed in double quotes. Strings are unicode strings encoded as UTF-8.","attributes":{"42f30de8-2e80-4b48-87f0-e06f1e236111":{"id":"42f30de8-2e80-4b48-87f0-e06f1e236111","name":"id","type":"Uuid"},"9032c943-4f50-4f4a-b9a9-7c17a627ff2d":{"id":"9032c943-4f50-4f4a-b9a9-7c17a627ff2d","name":"value","type":"String"}}},"fa42f4e2-1ff3-473f-a4b9-593c01134e96":{"id":"fa42f4e2-1ff3-473f-a4b9-593c01134e96","key_letter":"FLOT_L","name":"Float Literal","description":"A Floating Point Literal\n\nNothing fancy. No scientific notation.","attributes":{"98c46fba-95d0-4f33-9dab-6b458b39f938":{"id":"98c46fba-95d0-4f33-9dab-6b458b39f938","name":"id","type":"Uuid"},"ba6a66eb-d746-442f-b047-e944973cef84":{"id":"ba6a66eb-d746-442f-b047-e944973cef84","name":"value","type":"Float"}}},"d715c5f9-23f8-45e0-a1df-34e27acd01f5":{"id":"d715c5f9-23f8-45e0-a1df-34e27acd01f5","key_letter":"VAR_E","name":"Variable Expression","description":"A Local Variable Expression\n\nThis is what happens when a variable is an r-value.","attributes":{"7e3b8999-393b-4406-b085-b1335345416a":{"id":"7e3b8999-393b-4406-b085-b1335345416a","name":"id","type":"Uuid"},"f5925078-646c-464a-b99e-f3ef8692c7e2":{"id":"f5925078-646c-464a-b99e-f3ef8692c7e2","name":"name","type":"String"}}},"43bebcb3-06a1-410d-a19e-b3c1c6d1fa6b":{"id":"43bebcb3-06a1-410d-a19e-b3c1c6d1fa6b","key_letter":"NULL","name":"Empty Expression","description":"","attributes":{"c690466c-77c7-449c-a5ae-b402f43c53b5":{"id":"c690466c-77c7-449c-a5ae-b402f43c53b5","name":"id","type":"Uuid"}}},"6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656":{"id":"6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656","key_letter":"PRT_E","name":"Print","description":"A Print Expression?\n\nShold this be a statement?","attributes":{"ee8c61be-204d-493b-b2e9-23ecbca76524":{"id":"ee8c61be-204d-493b-b2e9-23ecbca76524","name":"id","type":"Uuid"}}},"d546feef-91df-49ea-ac61-430bdcf9832c":{"id":"d546feef-91df-49ea-ac61-430bdcf9832c","key_letter":"ST_E","name":"Struct Expression","description":"A Structure Expression\n\nThis is how we create instances in dwarf.","attributes":{"90c445a8-05b7-4942-b0d2-13a7cb18545c":{"id":"90c445a8-05b7-4942-b0d2-13a7cb18545c","name":"id","type":"Uuid"},"37a5a17d-2f7a-4c62-8e8f-37d7a7ec0943":{"id":"37a5a17d-2f7a-4c62-8e8f-37d7a7ec0943","name":"bug","type":"Uuid"}}},"3874760d-0104-4670-ba8b-1af413c5ec4a":{"id":"3874760d-0104-4670-ba8b-1af413c5ec4a","key_letter":"FLD_E","name":"Field Expression","description":"A Struct Field Expression\n\nThis assigns a value to a field in a structure.","attributes":{"ae9d7826-eab6-4baa-b094-62565e236579":{"id":"ae9d7826-eab6-4baa-b094-62565e236579","name":"id","type":"Uuid"}}},"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7":{"id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","key_letter":"FLD_A_E","name":"Field Access","description":"A Struct Field Access\n\nThink dotted notation.","attributes":{"37c7e82a-3674-4c5b-a8b4-3ea5af629001":{"id":"37c7e82a-3674-4c5b-a8b4-3ea5af629001","name":"id","type":"Uuid"}}},"846aa191-7b0c-4325-8c21-09fa5edf7c78":{"id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","key_letter":"ARG_E","name":"Argument","description":"An Argument to a Function Call","attributes":{"f2debbd6-734a-4b2d-9174-ed6bf6a944c6":{"id":"f2debbd6-734a-4b2d-9174-ed6bf6a944c6","name":"id","type":"Uuid"},"78bb4e04-b894-4690-983e-2fdd82a16aba":{"id":"78bb4e04-b894-4690-983e-2fdd82a16aba","name":"position","type":"Integer"}}},"26dba2c5-a7e9-4556-a9c2-79091a97b941":{"id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","key_letter":"CALL_E","name":"Call","description":"A Call, of some sort\n","attributes":{"00200770-a013-4671-b572-3287d58c5eeb":{"id":"00200770-a013-4671-b572-3287d58c5eeb","name":"id","type":"Uuid"},"29b7b08d-838a-4dbc-b6bd-0e7a1bd5462c":{"id":"29b7b08d-838a-4dbc-b6bd-0e7a1bd5462c","name":"arg_check","type":"Boolean"}}},"75a16785-d611-45ce-b52c-284a9da0b4b8":{"id":"75a16785-d611-45ce-b52c-284a9da0b4b8","key_letter":"METH_C","name":"Method Call","description":"A Method Call\n\nThis is when you call a function on an instance of a struct. The name attribute is the name of the method.","attributes":{"7ebdd935-e9a8-423e-a8d3-5c18ac4aff09":{"id":"7ebdd935-e9a8-423e-a8d3-5c18ac4aff09","name":"id","type":"Uuid"},"71021ec0-3099-4cc6-8aaa-c649a1486b1c":{"id":"71021ec0-3099-4cc6-8aaa-c649a1486b1c","name":"name","type":"String"}}},"01c8907d-cb59-4fae-a3ca-8cb331d18387":{"id":"01c8907d-cb59-4fae-a3ca-8cb331d18387","key_letter":"S_METH_C","name":"Static Method Call","description":"A Static Method Call\n\nThis is when you call a function on the type (struct) itself. There is no instance involved in this, although it may return an instance.\n\nThe name attribute is the name of the static method.","attributes":{"4e669862-93f4-4200-913d-03908f60936e":{"id":"4e669862-93f4-4200-913d-03908f60936e","name":"id","type":"Uuid"},"9e03633d-95d9-4fc5-80e8-d46c0da353ad":{"id":"9e03633d-95d9-4fc5-80e8-d46c0da353ad","name":"type","type":"String"},"5e897b18-d6ca-4623-b703-1588452afd3f":{"id":"5e897b18-d6ca-4623-b703-1588452afd3f","name":"func","type":"String"},"e902efa5-5a94-4a9d-a1f4-11b63b4f53e7":{"id":"e902efa5-5a94-4a9d-a1f4-11b63b4f53e7","name":"unique","type":"Uuid"}}},"79069fc2-4d65-4073-b610-4afc0488de5c":{"id":"79069fc2-4d65-4073-b610-4afc0488de5c","key_letter":"NO","name":"Function Call","description":"","attributes":{"8b633cc4-ae54-4516-8952-3b7cdfb9401b":{"id":"8b633cc4-ae54-4516-8952-3b7cdfb9401b","name":"id","type":"Uuid"},"13261330-3d86-44ea-a99a-3d4a828dd9d1":{"id":"13261330-3d86-44ea-a99a-3d4a828dd9d1","name":"name","type":"String"}}},"23a9a479-68e7-4a70-bcef-9041f10fd287":{"id":"23a9a479-68e7-4a70-bcef-9041f10fd287","key_letter":"Tsk","name":"Task","description":"A type to contain a task.","attributes":{"46602550-66dc-4819-9050-a241868d0073":{"id":"46602550-66dc-4819-9050-a241868d0073","name":"id","type":"Uuid"}}},"3a1c7f6a-459d-4eba-9291-2aebb9bf60c9":{"id":"3a1c7f6a-459d-4eba-9291-2aebb9bf60c9","key_letter":"UNK","name":"Unknown","description":"Unknown Type\n\nThe type is unknown.","attributes":{"d9d874b2-9764-4148-8ace-57b70678b235":{"id":"d9d874b2-9764-4148-8ace-57b70678b235","name":"id","type":"Uuid"}}},"a9b74602-bdc5-481f-af4c-8021553b895a":{"id":"a9b74602-bdc5-481f-af4c-8021553b895a","key_letter":"PLUG","name":"Plugin","description":"An external compilation unit that may be loaded at run time.","attributes":{"f66d1d03-d541-4192-b02c-112783939999":{"id":"f66d1d03-d541-4192-b02c-112783939999","name":"id","type":"Uuid"},"a3e038e0-ae8b-4e03-9046-3df2bbf834b6":{"id":"a3e038e0-ae8b-4e03-9046-3df2bbf834b6","name":"name","type":"String"},"88296f46-e094-42ff-bc69-15db5019776a":{"id":"88296f46-e094-42ff-bc69-15db5019776a","name":"path","type":"String"}}},"cdb1afaf-245c-4d56-bfea-10f69e45007d":{"id":"cdb1afaf-245c-4d56-bfea-10f69e45007d","key_letter":"LST","name":"List","description":"A List\n\nThis is like an array, I guess. It's also like a `Vec`.","attributes":{"5cbba856-e189-4b99-adc1-f1226aef8189":{"id":"5cbba856-e189-4b99-adc1-f1226aef8189","name":"id","type":"Uuid"}}},"b7483723-222d-4f08-b7b9-e8b14f0308cf":{"id":"b7483723-222d-4f08-b7b9-e8b14f0308cf","key_letter":"O_S","name":"Object Store","description":"A generated ObjectStore\n\nThis is the backing store for the structs.","attributes":{"2fa8c5a3-6c4b-4dec-ad0c-32034ce3d149":{"id":"2fa8c5a3-6c4b-4dec-ad0c-32034ce3d149","name":"id","type":"Uuid"},"68b4dc34-75d1-4fbd-ad0e-3047f0c8aed4":{"id":"68b4dc34-75d1-4fbd-ad0e-3047f0c8aed4","name":"domain","type":"String"},"435d1dba-242a-44f6-a6e8-4af89ada7c0d":{"id":"435d1dba-242a-44f6-a6e8-4af89ada7c0d","name":"name","type":"String"}}},"97f815f0-dcc4-4bd3-843d-13ff1dc5802c":{"id":"97f815f0-dcc4-4bd3-843d-13ff1dc5802c","key_letter":"DSF","name":"Dwarf Source File","description":"The Source Code\n\nThe main purpose of this object is to capture the source code that contains the definitions that will be parsed. This allows us to do better error reporting in the interpreter. We may also be able to do something about displaying compiled functions, maybe.","attributes":{"151486f9-7e65-4064-835f-13e85312950e":{"id":"151486f9-7e65-4064-835f-13e85312950e","name":"source","type":"String"},"717a33ce-b0d5-4269-bed6-0a86966ef572":{"id":"717a33ce-b0d5-4269-bed6-0a86966ef572","name":"id","type":"Uuid"}}},"72443b79-5645-4b5f-b317-e1a8f815b81c":{"id":"72443b79-5645-4b5f-b317-e1a8f815b81c","key_letter":"FOR","name":"For Loop","description":"A For Loop Expression\n\nAn expression that matches for IDENT in EXPRESSION BLOCK.","attributes":{"59d5519e-7c33-4ff7-9d4c-13790cca88da":{"id":"59d5519e-7c33-4ff7-9d4c-13790cca88da","name":"id","type":"Uuid"},"b80303bd-a746-4ad8-a624-560a5829a5c9":{"id":"b80303bd-a746-4ad8-a624-560a5829a5c9","name":"ident","type":"String"}}},"93f288e7-d670-40a6-91f3-2006b5efa8b4":{"id":"93f288e7-d670-40a6-91f3-2006b5efa8b4","key_letter":"RET","name":"Return","description":"The Return Expression\n\nIt’s an expression, and not a statement. Isn’t that interesting?","attributes":{"9f78cd40-df48-46ed-9da1-685ec026e9c3":{"id":"9f78cd40-df48-46ed-9da1-685ec026e9c3","name":"id","type":"Uuid"}}},"e1321ffa-07d5-480d-89f9-227b13d27ce1":{"id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","key_letter":"IF","name":"If","description":"The if Expression\n\nIt does include an else, at no extra charge!","attributes":{"3316a1da-1817-4657-867b-0f0ac6ac145c":{"id":"3316a1da-1817-4657-867b-0f0ac6ac145c","name":"id","type":"Uuid"}}},"3f7fd816-518b-4b9e-8134-3059e78045a0":{"id":"3f7fd816-518b-4b9e-8134-3059e78045a0","key_letter":"OP","name":"Operator","description":"Operator Expressions\n\nBasically anything you can do with an expression is a subtype of this beasty.","attributes":{"d613ed9b-274e-483a-be79-7f06d2d7c0b7":{"id":"d613ed9b-274e-483a-be79-7f06d2d7c0b7","name":"id","type":"Uuid"}}},"c46e6b80-0365-429a-abf9-ca75ce4f469a":{"id":"c46e6b80-0365-429a-abf9-ca75ce4f469a","key_letter":"COMP","name":"Comparison","description":"Comparison Operators\n\nThings like == and !=, etc.","attributes":{"69c73e42-bde8-4241-abc1-50531b19ba66":{"id":"69c73e42-bde8-4241-abc1-50531b19ba66","name":"id","type":"Uuid"},"680458ec-7002-4136-be80-daca5190cec2":{"id":"680458ec-7002-4136-be80-daca5190cec2","name":"bogus","type":"Boolean"}}},"9c8bc563-b596-4348-9189-065d747f7c9f":{"id":"9c8bc563-b596-4348-9189-065d747f7c9f","key_letter":"BIN","name":"Binary","description":"Binary Operators\n\n+, -, etc.","attributes":{"1d132fac-43cc-4085-969c-ea0ead6e90f0":{"id":"1d132fac-43cc-4085-969c-ea0ead6e90f0","name":"id","type":"Uuid"},"f076b985-8f5d-4320-ba26-e518283974f1":{"id":"f076b985-8f5d-4320-ba26-e518283974f1","name":"bogus","type":"Boolean"}}},"1b4e5b3a-a9b2-4316-94c4-ff34d4d3d523":{"id":"1b4e5b3a-a9b2-4316-94c4-ff34d4d3d523","key_letter":"PLUS","name":"Addition","description":"The addition operator: `+`.","attributes":{"71662c9f-8108-43ba-9f39-956ba4137c79":{"id":"71662c9f-8108-43ba-9f39-956ba4137c79","name":"id","type":"Uuid"}}},"e3329a9e-1c52-44f6-a1f7-fc85f7362e9e":{"id":"e3329a9e-1c52-44f6-a1f7-fc85f7362e9e","key_letter":"MINUS","name":"Subtraction","description":"The subtraction operator: `-`.","attributes":{"3ad6559a-d90e-4445-b305-f1e7f3634e4d":{"id":"3ad6559a-d90e-4445-b305-f1e7f3634e4d","name":"id","type":"Uuid"}}},"484e429b-bf54-45cb-9b87-baddf7fb5f5b":{"id":"484e429b-bf54-45cb-9b87-baddf7fb5f5b","key_letter":"LTE","name":"Less Than or Equal","description":"Less than or equal: `<=`.","attributes":{"762792a8-a56d-4abd-a0cb-05fa91ce7af7":{"id":"762792a8-a56d-4abd-a0cb-05fa91ce7af7","name":"id","type":"Uuid"}}},"c47b8696-7e98-4733-ab33-a4dca7b61d01":{"id":"c47b8696-7e98-4733-ab33-a4dca7b61d01","key_letter":"ASS","name":"Assignment","description":"Assignment to a storage location\n\nE.g., `a = b`.","attributes":{"1525eed3-c6e2-4dce-b587-2c1591d998b2":{"id":"1525eed3-c6e2-4dce-b587-2c1591d998b2","name":"id","type":"Uuid"}}},"e05ab5f3-17e7-4594-8ce0-c02d793a1df9":{"id":"e05ab5f3-17e7-4594-8ce0-c02d793a1df9","key_letter":"LEXP","name":"List Expression","description":"A list of expressions\n\nE.g., `let a = [0, 1, 2, 3];`","attributes":{"01684c5c-b511-40c8-9564-e9cb91f4269b":{"id":"01684c5c-b511-40c8-9564-e9cb91f4269b","name":"id","type":"Uuid"}}},"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d":{"id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","key_letter":"LE","name":"List Element","description":"","attributes":{"ecb6461a-b55a-4a66-b6ec-f22addfd992f":{"id":"ecb6461a-b55a-4a66-b6ec-f22addfd992f","name":"id","type":"Uuid"},"39368f96-3fa6-401e-8706-f9375109af18":{"id":"39368f96-3fa6-401e-8706-f9375109af18","name":"position","type":"Integer"}}},"4d5720eb-da8c-493d-ab8d-cb6111dd6099":{"id":"4d5720eb-da8c-493d-ab8d-cb6111dd6099","key_letter":"IND","name":"Index","description":"An index expression","attributes":{"f97a16a4-1e1f-4d17-9a67-6ea53e6fe20b":{"id":"f97a16a4-1e1f-4d17-9a67-6ea53e6fe20b","name":"id","type":"Uuid"}}},"6767c0cf-4041-4047-b2b4-d7375f33bc97":{"id":"6767c0cf-4041-4047-b2b4-d7375f33bc97","key_letter":"MULT","name":"Multiplication","description":"","attributes":{"47c44caf-bbbb-48f9-b604-322715ea4f70":{"id":"47c44caf-bbbb-48f9-b604-322715ea4f70","name":"id","type":"Uuid"}}},"35b3de4e-46b8-490f-8e30-c305ed348a78":{"id":"35b3de4e-46b8-490f-8e30-c305ed348a78","key_letter":"DIV","name":"Division","description":"","attributes":{"a2750f60-6827-4ade-aeca-b8e6ff5ba5fd":{"id":"a2750f60-6827-4ade-aeca-b8e6ff5ba5fd","name":"id","type":"Uuid"}}},"d8b554d4-03ac-4613-a3e0-fc0b901bfd70":{"id":"d8b554d4-03ac-4613-a3e0-fc0b901bfd70","key_letter":"GTE","name":"Greater Than or Equal","description":"","attributes":{"a1a3feb0-7273-4f2c-bee1-52ed1afa6692":{"id":"a1a3feb0-7273-4f2c-bee1-52ed1afa6692","name":"id","type":"Uuid"}}},"0edc535b-405d-4dd5-bcd2-f5772ab116c2":{"id":"0edc535b-405d-4dd5-bcd2-f5772ab116c2","key_letter":"EQ","name":"Equal","description":"","attributes":{"5cc2098c-fb9c-47f2-9e78-e82e68e94112":{"id":"5cc2098c-fb9c-47f2-9e78-e82e68e94112","name":"id","type":"Uuid"}}},"0b3e9de0-d139-4934-a043-d1913a24de0c":{"id":"0b3e9de0-d139-4934-a043-d1913a24de0c","key_letter":"RNG_EXPR","name":"Range Expression","description":"","attributes":{"c4270112-8fc2-472c-9ec8-0e47eba39942":{"id":"c4270112-8fc2-472c-9ec8-0e47eba39942","name":"id","type":"Uuid"}}},"70932b40-f444-4341-bb19-0a29d1daecbe":{"id":"70932b40-f444-4341-bb19-0a29d1daecbe","key_letter":"RNG_FRM","name":"From","description":"","attributes":{"0e8d45b6-c1af-4ce9-8c86-8852e8808224":{"id":"0e8d45b6-c1af-4ce9-8c86-8852e8808224","name":"id","type":"Uuid"}}},"32dbb54a-9693-4847-9278-7c956ea045f8":{"id":"32dbb54a-9693-4847-9278-7c956ea045f8","key_letter":"RNG_TO","name":"To","description":"","attributes":{"dc7879f5-8f75-4973-ad02-7d611b68a07c":{"id":"dc7879f5-8f75-4973-ad02-7d611b68a07c","name":"id","type":"Uuid"}}},"0dc0e921-e7ff-4766-9738-e6e312f7f0de":{"id":"0dc0e921-e7ff-4766-9738-e6e312f7f0de","key_letter":"GRP","name":"Grouped","description":"Parens","attributes":{"f0ae9b32-3c23-4a34-b6e9-29ff8d94e3f6":{"id":"f0ae9b32-3c23-4a34-b6e9-29ff8d94e3f6","name":"id","type":"Uuid"}}},"122e4157-381f-400f-ac30-a1c8a2a9e8c1":{"id":"122e4157-381f-400f-ac30-a1c8a2a9e8c1","key_letter":"NO","name":"Full","description":"","attributes":{"55c208e0-c7ff-4428-93e9-519c9cffd3c6":{"id":"55c208e0-c7ff-4428-93e9-519c9cffd3c6","name":"id","type":"Uuid"}}},"17db2afc-ae6c-4e53-a527-48516811fe3e":{"id":"17db2afc-ae6c-4e53-a527-48516811fe3e","key_letter":"NO","name":"Inclusive","description":"","attributes":{"c84dd526-b305-4a9c-9ce6-381aab4ca0b8":{"id":"c84dd526-b305-4a9c-9ce6-381aab4ca0b8","name":"id","type":"Uuid"}}},"30abb231-4248-4ffa-9a69-e0eb6bb9dbbd":{"id":"30abb231-4248-4ffa-9a69-e0eb6bb9dbbd","key_letter":"NO","name":"To Inclusive","description":"","attributes":{"70b1a65d-4f0f-41f8-aa77-72fead5078be":{"id":"70b1a65d-4f0f-41f8-aa77-72fead5078be","name":"id","type":"Uuid"}}},"ba8a3bbf-86a8-47e2-92bb-f41878981c41":{"id":"ba8a3bbf-86a8-47e2-92bb-f41878981c41","key_letter":"RNG","name":"Range","description":"","attributes":{"49068e96-7836-4e76-97c5-93f02f20c7da":{"id":"49068e96-7836-4e76-97c5-93f02f20c7da","name":"id","type":"Uuid"}}},"79571896-9798-44a3-acef-5aa2d9773b93":{"id":"79571896-9798-44a3-acef-5aa2d9773b93","key_letter":"SPN","name":"Span","description":"A span is just a two-tuple that specifies the start and end locations, in the source code, for an entitiy.\n\nLooking at this, I think that this should be a supertype, and then a subtype for each relationship. I’m feeling lazy.","attributes":{"4c61e3ec-89ef-42e8-a9f6-ba4131cee575":{"id":"4c61e3ec-89ef-42e8-a9f6-ba4131cee575","name":"id","type":"Uuid"},"b4499f82-5249-4f87-af52-e49caab056e2":{"id":"b4499f82-5249-4f87-af52-e49caab056e2","name":"start","type":"Integer"},"a09bcdab-3c16-4660-9d9d-0c5c39c0092b":{"id":"a09bcdab-3c16-4660-9d9d-0c5c39c0092b","name":"end","type":"Integer"}}},"5c85a8db-e4cc-4e38-9922-58d93773f4f0":{"id":"5c85a8db-e4cc-4e38-9922-58d93773f4f0","key_letter":"BUG","name":"Debugger","description":"An expresision to invoke the debugger;","attributes":{"d7c6ddc5-9913-41fc-a772-eae95f4e4cfc":{"id":"d7c6ddc5-9913-41fc-a772-eae95f4e4cfc","name":"id","type":"Uuid"}}},"bf69c9af-f268-4c9b-8e67-4497eb490478":{"id":"bf69c9af-f268-4c9b-8e67-4497eb490478","key_letter":"FAT","name":"Field Access Target","description":"The target of a field access.\n\nIt may be either a [`Field`] or a [`Function`].","attributes":{"c9c926da-906f-4e95-9feb-63b67b8449cb":{"id":"c9c926da-906f-4e95-9feb-63b67b8449cb","name":"id","type":"Uuid"},"45374bbb-1f0d-42e8-bd2b-cca53589de9a":{"id":"45374bbb-1f0d-42e8-bd2b-cca53589de9a","name":"bogus","type":"Boolean"}}},"ce73a111-4670-411e-9bd2-f3308d6399c9":{"id":"ce73a111-4670-411e-9bd2-f3308d6399c9","key_letter":"GT","name":"Greater Than","description":"","attributes":{"5fbf068e-83be-483b-bf12-9f3bedc79a81":{"id":"5fbf068e-83be-483b-bf12-9f3bedc79a81","name":"id","type":"Uuid"}}},"1e7a66b2-f559-4c21-b8e6-969999ed171d":{"id":"1e7a66b2-f559-4c21-b8e6-969999ed171d","key_letter":"TC","name":"Type Cast","description":"Typecast Operator Expression\n\nThis is the `as` operator.","attributes":{"29309379-1198-4290-9efe-7d27b342c4e3":{"id":"29309379-1198-4290-9efe-7d27b342c4e3","name":"id","type":"Uuid"}}},"80f73c4e-caf1-4e1f-a634-00965f6ad032":{"id":"80f73c4e-caf1-4e1f-a634-00965f6ad032","key_letter":"NEG","name":"Negation","description":"The unary minus","attributes":{"220e79fa-e20b-4bcc-af9b-ce07f3364c01":{"id":"220e79fa-e20b-4bcc-af9b-ce07f3364c01","name":"id","type":"Uuid"}}},"222307c0-668c-43f9-9368-34cc048f0ae3":{"id":"222307c0-668c-43f9-9368-34cc048f0ae3","key_letter":"BO","name":"Boolean Operator","description":"A Boolean Operaator\n\nThere are two — || and &&.","attributes":{"14ad81ac-dc91-4764-844f-9aeab3ff7370":{"id":"14ad81ac-dc91-4764-844f-9aeab3ff7370","name":"id","type":"Uuid"},"e0605cb6-add5-4f83-a0ad-bd610489acab":{"id":"e0605cb6-add5-4f83-a0ad-bd610489acab","name":"bogus","type":"Boolean"}}},"6187076b-e765-4e6b-af28-f577eba40b5e":{"id":"6187076b-e765-4e6b-af28-f577eba40b5e","key_letter":"","name":"And","description":"The Boolean And Operator\n\nAnd, aka, `&&`.","attributes":{"54f9c8e5-80f5-4003-b7c1-210f80fc850b":{"id":"54f9c8e5-80f5-4003-b7c1-210f80fc850b","name":"id","type":"Uuid"}}},"f7fc16ac-6a23-4f5d-a04c-1163617701c1":{"id":"f7fc16ac-6a23-4f5d-a04c-1163617701c1","key_letter":"","name":"Unary","description":"Unary Operators","attributes":{"a78f7aab-b13b-4f74-9bc5-1dba9849374d":{"id":"a78f7aab-b13b-4f74-9bc5-1dba9849374d","name":"id","type":"Uuid"},"b7769dbd-6bd0-4dbd-aedc-2d848d7e91ed":{"id":"b7769dbd-6bd0-4dbd-aedc-2d848d7e91ed","name":"bogus","type":"Boolean"}}},"0ad229c4-1782-4783-b64e-0d15fe482463":{"id":"0ad229c4-1782-4783-b64e-0d15fe482463","key_letter":"NOT","name":"Not","description":"","attributes":{"e308e26b-9675-4f06-b06b-510d03409ad1":{"id":"e308e26b-9675-4f06-b06b-510d03409ad1","name":"id","type":"Uuid"}}},"b8d3d40e-462e-4e4d-9fb4-b7d54f9fd03a":{"id":"b8d3d40e-462e-4e4d-9fb4-b7d54f9fd03a","key_letter":"NE","name":"Not Equal","description":"The Not Equal Expression\n\nThis is the `!=` operator expression.","attributes":{"f05219d1-d3cb-4535-80f3-961384d3ec2c":{"id":"f05219d1-d3cb-4535-80f3-961384d3ec2c","name":"id","type":"Uuid"}}},"470246f6-91ec-4993-b915-93480d0f4eb9":{"id":"470246f6-91ec-4993-b915-93480d0f4eb9","key_letter":"M_CALL","name":"Macro Call","description":"A macro invocation\n\nA macro invocation is a string, followed by a bang (`!`), followed by parens and arguments.","attributes":{"2f2c62e2-d8d8-40a7-b2a5-2235c59a5b7c":{"id":"2f2c62e2-d8d8-40a7-b2a5-2235c59a5b7c","name":"id","type":"Uuid"}}},"f6a3ce12-18e1-4675-ab94-6b2a7c91d951":{"id":"f6a3ce12-18e1-4675-ab94-6b2a7c91d951","key_letter":"MAC","name":"Macro","description":"This is a macro\n\nIt sort of interesting that the way that we create a new macro is with a macro. So it’s nice and recursive like that. The macro in question, will be none other than `macro_rules!`!.\n\nOK, so that means something like this:\n\n```no-test\nmacro_rules! `ident` {\n ($[ ( | `ident`]<,)*>[,$ident]*) => {\n }\n}\n```","attributes":{"778b867f-ce73-48da-9a4a-96bc5ea3f3ee":{"id":"778b867f-ce73-48da-9a4a-96bc5ea3f3ee","name":"id","type":"Uuid"},"630d01d4-d139-43d6-8d70-a471850fd9c8":{"id":"630d01d4-d139-43d6-8d70-a471850fd9c8","name":"name","type":"String"}}},"41b7bda7-f5a2-4c94-af22-fedbe8d6f287":{"id":"41b7bda7-f5a2-4c94-af22-fedbe8d6f287","key_letter":"BO_OR","name":"Or","description":"The or `||` operator","attributes":{"020e49d4-3f70-453a-b8c3-9bb71793ab45":{"id":"020e49d4-3f70-453a-b8c3-9bb71793ab45","name":"id","type":"Uuid"}}},"84f1c5fd-d907-4653-a132-bfd420ad9212":{"id":"84f1c5fd-d907-4653-a132-bfd420ad9212","key_letter":"C_LT","name":"Less Than","description":"Less that operator `<`\n","attributes":{"9287a992-353f-4d7e-977d-925f121263e0":{"id":"9287a992-353f-4d7e-977d-925f121263e0","name":"id","type":"Uuid"}}},"efde0481-1599-4c5c-bf30-51dbd4a8ed83":{"id":"efde0481-1599-4c5c-bf30-51dbd4a8ed83","key_letter":"CHAR","name":"Char","description":"A char\n\nI char is a single printable UNICODE character. It may contain multiple bytes.","attributes":{"755111b8-1fe8-444d-bafb-d72ea047b4a5":{"id":"755111b8-1fe8-444d-bafb-d72ea047b4a5","name":"id","type":"Uuid"}}},"95e17479-07a5-41b1-9930-1b9b520514f6":{"id":"95e17479-07a5-41b1-9930-1b9b520514f6","key_letter":"ƛ","name":"Lambda","description":"Lambda Function\n\nIt’s a function, it has a type, parameters, etc. It does not have a name, which is problematic with Function having one. It’s also an Expression, unlike a Function.\n\nI should think about creating another function subtype that contains just the name...","attributes":{"be05773d-1ed6-401c-bbbc-678cde7f713c":{"id":"be05773d-1ed6-401c-bbbc-678cde7f713c","name":"id","type":"Uuid"}}},"8d86dceb-7e6e-4767-8a3f-cbbde458ad93":{"id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","key_letter":"LP","name":"Lambda Parameter","description":"id","attributes":{"adfee8d0-94b3-420c-a673-f6e9c34f8523":{"id":"adfee8d0-94b3-420c-a673-f6e9c34f8523","name":"id","type":"Uuid"},"0c5ba019-cc16-4d1f-8ffa-427acba8c280":{"id":"0c5ba019-cc16-4d1f-8ffa-427acba8c280","name":"position","type":"Integer"}}},"68e7191a-fe94-423f-8a5d-5551384ae998":{"id":"68e7191a-fe94-423f-8a5d-5551384ae998","key_letter":"OW","name":"Object Wrapper","description":"The purpose of this object is to wrap `Object`. We need to be able to store a referential attribute to the `ObjectStore`, and we can’t/don’t want to add that to `Object`.","attributes":{"12d98e93-60a2-43c7-830e-960ab321e270":{"id":"12d98e93-60a2-43c7-830e-960ab321e270","name":"id","type":"Uuid"}}},"c4723d6d-1584-49bd-80f1-4c700185746e":{"id":"c4723d6d-1584-49bd-80f1-4c700185746e","key_letter":"FB","name":"Body","description":"The function body. Generally contains statements, but may point to some other implementation.","attributes":{"acb18c42-11c2-4db0-bb5d-efe60e176212":{"id":"acb18c42-11c2-4db0-bb5d-efe60e176212","name":"id","type":"Uuid"},"23056543-73de-448f-a6b3-251f8228823d":{"id":"23056543-73de-448f-a6b3-251f8228823d","name":"async","type":"Boolean"}}},"7794ada6-49c3-4bf0-991f-828c6583ebb8":{"id":"7794ada6-49c3-4bf0-991f-828c6583ebb8","key_letter":"EI","name":"External Implementation","description":"Some extern source of the function’s body.","attributes":{"beb2a174-9ec1-44ba-b57d-2c40146e39e1":{"id":"beb2a174-9ec1-44ba-b57d-2c40146e39e1","name":"id","type":"Uuid"},"d79d5062-aa25-49d6-bc5d-fb56436e86c1":{"id":"d79d5062-aa25-49d6-bc5d-fb56436e86c1","name":"model","type":"String"},"30968bac-2fd6-4372-b3ce-7fb1752920cd":{"id":"30968bac-2fd6-4372-b3ce-7fb1752920cd","name":"object","type":"String"},"a8faf2e5-4bc5-4251-84c2-3abdbc194264":{"id":"a8faf2e5-4bc5-4251-84c2-3abdbc194264","name":"function","type":"String"}}},"d48d948b-5291-4eb3-ba35-7ab1c1ffa098":{"id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","key_letter":"ENUM","name":"Enumeration","description":"An Enumeration\n\nAn enumeration is an algebraic type that takes on one if it’s fielsd, another type. as it’s value.","attributes":{"6ab143f9-3bd4-40d9-a640-95402bcf8c7a":{"id":"6ab143f9-3bd4-40d9-a640-95402bcf8c7a","name":"id","type":"Uuid"},"1dfbaeda-b91f-4559-b6f5-5a7792766eb0":{"id":"1dfbaeda-b91f-4559-b6f5-5a7792766eb0","name":"name","type":"String"},"f81a6120-3fb6-4b32-a78d-97639235a817":{"id":"f81a6120-3fb6-4b32-a78d-97639235a817","name":"path","type":"String"}}},"7eaea922-8807-4c38-a704-0143e0594664":{"id":"7eaea922-8807-4c38-a704-0143e0594664","key_letter":"EF","name":"Enum Field","description":"A field on an Enumeration\n\nNote that there are three sorts of fields. Tuple, Struct, and “plain?”.","attributes":{"74e4b7fb-c8fa-4c9f-b3dd-223385b34f78":{"id":"74e4b7fb-c8fa-4c9f-b3dd-223385b34f78","name":"id","type":"Uuid"},"ba15e7df-bb85-4ae5-ac02-570f915d25a2":{"id":"ba15e7df-bb85-4ae5-ac02-570f915d25a2","name":"name","type":"String"}}},"4b6c7fde-0878-4947-b960-bc73a4558c60":{"id":"4b6c7fde-0878-4947-b960-bc73a4558c60","key_letter":"UEF","name":"Unit","description":"Just a marker, no other value.","attributes":{"5dab5104-dd9d-413a-afde-24e1cd249566":{"id":"5dab5104-dd9d-413a-afde-24e1cd249566","name":"id","type":"Uuid"},"9f44da33-ba44-4b17-a5f8-54b397515b2a":{"id":"9f44da33-ba44-4b17-a5f8-54b397515b2a","name":"value","type":"Integer"}}},"e6fbeeb8-6ade-46a2-bb52-9c99d06918b2":{"id":"e6fbeeb8-6ade-46a2-bb52-9c99d06918b2","key_letter":"EFSF","name":"Struct Field","description":"A field that is a structure.","attributes":{"b05b1a17-ec60-490a-816e-32cd8623390f":{"id":"b05b1a17-ec60-490a-816e-32cd8623390f","name":"id","type":"Uuid"},"22d2baf6-1373-4d2f-802f-c0a3315d8bae":{"id":"22d2baf6-1373-4d2f-802f-c0a3315d8bae","name":"name","type":"String"}}},"c8fcd612-6ca8-469a-824c-de218e4fd075":{"id":"c8fcd612-6ca8-469a-824c-de218e4fd075","key_letter":"EFTF","name":"Tuple Field","description":"A field that is a tuple.\n\nCurrently in this implementation we are cheating, as we don’t yet actually have tuples. So this is limited to a single item.\n\nNote the `hack` attribute. What’s happening is that during generic substitution?, expansion?, whatever. During that we are cloning the enum, and it’s fields. This is to create a new type. When we do this we don’t want the store optimizing away a duplicate Tuple Field.\n\nI deb thee hack because I think the right thing to do is something else, I’m just not sure what it is yet.\n\nI renamed it to `xyzzy`, because I think `hack` does magic in the compiler.","attributes":{"20d73af4-8fc2-44e5-84a0-f0cc3f2ebf72":{"id":"20d73af4-8fc2-44e5-84a0-f0cc3f2ebf72","name":"id","type":"Uuid"},"126ed291-1bc1-44c0-87e8-5ec89a94e077":{"id":"126ed291-1bc1-44c0-87e8-5ec89a94e077","name":"xyzzy","type":"Uuid"}}},"52143d28-8474-44bc-b63f-e654150888d3":{"id":"52143d28-8474-44bc-b63f-e654150888d3","key_letter":"FIRE","name":"Match","description":"Match a pattern to a scrutinee and evaluate a branch based on the results.","attributes":{"670a1371-78dd-49df-82fb-d51a664263a3":{"id":"670a1371-78dd-49df-82fb-d51a664263a3","name":"id","type":"Uuid"},"f165e2b2-cc7e-46ba-bc71-9ee1a6d7ddb4":{"id":"f165e2b2-cc7e-46ba-bc71-9ee1a6d7ddb4","name":"uniqueness_generator","type":"Uuid"}}},"ab7a5708-6d12-4dce-b488-fa3a3b480510":{"id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","key_letter":"道","name":"Path","description":"This is a path to a local variable, or an item. It is made up of scopes, separated by `::`.","attributes":{"7b59e37b-41ec-44d0-a83a-e5811b16fb6c":{"id":"7b59e37b-41ec-44d0-a83a-e5811b16fb6c","name":"id","type":"Uuid"},"ca5743c6-dc5e-4801-9925-b2dbe29e34a3":{"id":"ca5743c6-dc5e-4801-9925-b2dbe29e34a3","name":"unique","type":"Uuid"}}},"6094aad5-613b-42b6-8f48-c3b9e2161aa9":{"id":"6094aad5-613b-42b6-8f48-c3b9e2161aa9","key_letter":"PAT","name":"Pattern","description":"The pattern is a specification for extracting data from a type. It’s sort of a reverse impression of what you are looking for. If the shape of the impression matches the scrutinee, then they “fit” and the pattern’s lvalues will be populated with data from the scrutinee.\n\nThere are a bunch of diffirent kinds of patterns. Literal, ident, struct, tuple, etc. Modeling this will take a lot of room and time.\n\nDoing this I’m going to cheat a bit and store the code that does matching as a string on this object during compilation. During runtime the string will be evaluated (either as dwrf, or perhasps using a small VM. Or maybe use the built-in VM. It should be able to handle all that we need. This way, I don’t have to model all the bits because they are encoded in the code attribute.\n\nSo I guess that means I’ll be writing assembly code...","attributes":{"faad8dc6-64c0-4c15-8e76-44328eaa72b8":{"id":"faad8dc6-64c0-4c15-8e76-44328eaa72b8","name":"id","type":"Uuid"}}},"6822b78e-e5ca-4c40-ba9d-cf7a69d4fdc7":{"id":"6822b78e-e5ca-4c40-ba9d-cf7a69d4fdc7","key_letter":"NFE","name":"Named Field Expression","description":"","attributes":{"bc2a2349-fae2-4f3b-84b1-84eab8ab1d77":{"id":"bc2a2349-fae2-4f3b-84b1-84eab8ab1d77","name":"name","type":"String"},"8ea54fa1-5f86-408d-822c-dccdf5505db3":{"id":"8ea54fa1-5f86-408d-822c-dccdf5505db3","name":"id","type":"Uuid"}}},"910e3a08-5e99-47a5-bde4-3e35cf9f00da":{"id":"910e3a08-5e99-47a5-bde4-3e35cf9f00da","key_letter":"UFE","name":"Unnamed Field Expression","description":"","attributes":{"7aae03a2-e0e0-43db-9861-6c732eb85ef5":{"id":"7aae03a2-e0e0-43db-9861-6c732eb85ef5","name":"id","type":"Uuid"},"e90de56f-91a2-4df6-b013-3bf7d08bab73":{"id":"e90de56f-91a2-4df6-b013-3bf7d08bab73","name":"position","type":"Integer"}}},"31deb355-b737-43a6-ae88-199bb51f940d":{"id":"31deb355-b737-43a6-ae88-199bb51f940d","key_letter":"DS","name":"Data Structure","description":"","attributes":{"9af827eb-88fb-495e-8000-bcded4b9caea":{"id":"9af827eb-88fb-495e-8000-bcded4b9caea","name":"id","type":"Uuid"},"c561580f-5b89-4b85-a307-9edf78c53203":{"id":"c561580f-5b89-4b85-a307-9edf78c53203","name":"bogus","type":"Boolean"}}},"39060ea9-5d45-4954-a29f-ba88e01e7217":{"id":"39060ea9-5d45-4954-a29f-ba88e01e7217","key_letter":"GYM","name":"Path Element","description":"🖕🤣","attributes":{"ca0023ad-2efb-475a-b663-4ecad4117a31":{"id":"ca0023ad-2efb-475a-b663-4ecad4117a31","name":"id","type":"Uuid"},"1ec6c6dd-1792-4ea5-bbda-dc490dc601c2":{"id":"1ec6c6dd-1792-4ea5-bbda-dc490dc601c2","name":"name","type":"String"}}},"4856978f-20be-4b59-8bf6-b941091119a9":{"id":"4856978f-20be-4b59-8bf6-b941091119a9","key_letter":"A_WAIT","name":"Await","description":"","attributes":{"b0944a25-05f1-4f14-bc2b-e67851d66f8b":{"id":"b0944a25-05f1-4f14-bc2b-e67851d66f8b","name":"id","type":"Uuid"}}},"dbada891-ca0d-4fbc-8371-9f9234867bd6":{"id":"dbada891-ca0d-4fbc-8371-9f9234867bd6","key_letter":"FUT","name":"Future","description":"","attributes":{"37182d8e-782a-4071-86bd-b1c7f30c53ba":{"id":"37182d8e-782a-4071-86bd-b1c7f30c53ba","name":"id","type":"Uuid"}}},"290f49d3-8ce7-408e-be14-611b66db9687":{"id":"290f49d3-8ce7-408e-be14-611b66db9687","key_letter":"SG1","name":"Struct Generic","description":"A generic type applied to the struct.","attributes":{"d8e275eb-cd85-46a4-b5b8-5e71baec33c3":{"id":"d8e275eb-cd85-46a4-b5b8-5e71baec33c3","name":"id","type":"Uuid"},"6077a668-17b2-4d8d-8fdd-a34442e7d10c":{"id":"6077a668-17b2-4d8d-8fdd-a34442e7d10c","name":"name","type":"String"}}},"7056c5ba-4f49-404f-abd5-e5c6a5879fac":{"id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","key_letter":"EG","name":"Enum Generic","description":"","attributes":{"16f7a19e-ca0d-4f5e-8a58-9def2a99be98":{"id":"16f7a19e-ca0d-4f5e-8a58-9def2a99be98","name":"id","type":"Uuid"},"76e249d0-5353-43ee-a487-1fe8c7ad4824":{"id":"76e249d0-5353-43ee-a487-1fe8c7ad4824","name":"name","type":"String"},"5b653d1f-5e73-409c-bc0c-8815cf9c7804":{"id":"5b653d1f-5e73-409c-bc0c-8815cf9c7804","name":"goober","type":"Uuid"}}},"b28be6c2-a37a-4049-9110-52136f892fc4":{"id":"b28be6c2-a37a-4049-9110-52136f892fc4","key_letter":"FG","name":"Func Generic","description":"These are generics associated with a function.","attributes":{"d5e3e544-8554-4edd-80fd-ce73d066715c":{"id":"d5e3e544-8554-4edd-80fd-ce73d066715c","name":"id","type":"Uuid"},"e3fb5786-82f8-4ce6-a77c-d9c74af6cebc":{"id":"e3fb5786-82f8-4ce6-a77c-d9c74af6cebc","name":"name","type":"String"}}},"0e1e683a-fe89-4002-88fa-efd50d66de6c":{"id":"0e1e683a-fe89-4002-88fa-efd50d66de6c","key_letter":"FS","name":"Format String","description":"","attributes":{"d54985e2-4cd5-43d5-9ba9-2fa68ac6c1b7":{"id":"d54985e2-4cd5-43d5-9ba9-2fa68ac6c1b7","name":"id","type":"Uuid"}}},"d39c987f-bba2-4956-963f-7e9c6c3fe4b4":{"id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","key_letter":"FB","name":"Format Bit","description":"","attributes":{"48c81cb1-bcf9-421f-a666-edd158dce484":{"id":"48c81cb1-bcf9-421f-a666-edd158dce484","name":"id","type":"Uuid"}}},"dbc37f2f-0a90-4a8b-a217-d4a70a606695":{"id":"dbc37f2f-0a90-4a8b-a217-d4a70a606695","key_letter":"SB","name":"String Bit","description":"","attributes":{"9458896a-1617-483d-8322-7b7738914fc1":{"id":"9458896a-1617-483d-8322-7b7738914fc1","name":"id","type":"Uuid"}}},"80bf1ba4-2f74-45db-a1b1-6b76e82b2013":{"id":"80bf1ba4-2f74-45db-a1b1-6b76e82b2013","key_letter":"EB","name":"Expression Bit","description":"","attributes":{"b8841744-3caa-4c0d-b11e-1a0a622e9189":{"id":"b8841744-3caa-4c0d-b11e-1a0a622e9189","name":"id","type":"Uuid"}}},"1a5eca02-909e-434c-bd35-b02f2b7dbe22":{"id":"1a5eca02-909e-434c-bd35-b02f2b7dbe22","key_letter":"CL","name":"Char Literal","description":"","attributes":{"e7c08300-008e-4148-a6ae-1dfdedd5ff34":{"id":"e7c08300-008e-4148-a6ae-1dfdedd5ff34","name":"id","type":"Uuid"},"49bcd7d8-0afc-45ed-84ea-0902edeaf541":{"id":"49bcd7d8-0afc-45ed-84ea-0902edeaf541","name":"value","type":"Integer"}}},"dfb72d5a-91a4-4023-a7a9-baef28bed978":{"id":"dfb72d5a-91a4-4023-a7a9-baef28bed978","key_letter":"AL","name":"Any List","description":"A list that does not enforce that it’s elements all share a type.","attributes":{"5478fa9a-683a-4ca0-aeb6-d7cba530982b":{"id":"5478fa9a-683a-4ca0-aeb6-d7cba530982b","name":"id","type":"Uuid"}}},"47abdb96-0225-4880-a472-9c714086e2b5":{"id":"47abdb96-0225-4880-a472-9c714086e2b5","key_letter":"HCF","name":"Halt and Catch Fire","description":"Goes boom!","attributes":{"769c1f24-452d-4405-afef-c567e03fb6d2":{"id":"769c1f24-452d-4405-afef-c567e03fb6d2","name":"id","type":"Uuid"}}},"b861cf8b-c7e9-4ecb-b29a-13086aa96d9c":{"id":"b861cf8b-c7e9-4ecb-b29a-13086aa96d9c","key_letter":"MAP","name":"Map","description":"This is a hashmap.","attributes":{"f77dac5a-2a88-4a7b-a38e-e499b234c0ef":{"id":"f77dac5a-2a88-4a7b-a38e-e499b234c0ef","name":"id","type":"Uuid"}}}}},"relationships":{"ids":["21f08565-d913-4302-a853-e5f688ec1bc1","4b7360ba-8de3-4c93-bc90-22478c128a75","3746c64a-c63d-424d-afb2-c253470b6d7b","02892323-60e9-470b-b162-b2bc8d9ef1cd","98c79b91-da7b-443a-b1fb-18596cd6b4bc","7993e2c7-7efa-4346-b50e-bc02d55e1ca7","fdb49afe-13fb-4c79-99d1-92728d8652c7","ea1e6d1c-279b-4b6d-806e-fa133c6a5da9","35491126-597f-4301-ae48-88da4a23c845","336674ce-19be-4baa-8117-19ee19886e2d","95b8c311-1f3f-42ab-93cd-9b95c8d8c02a","3966271b-9938-48c7-b4fe-177c307e22bf","2e81ce06-82d5-47e6-9f38-783d8af057d9","03745d2b-a85f-40a9-b038-8f22c83e8eb1","c715993f-c840-4d48-8442-b5635e4324e7","f6c19c17-3e01-4945-bffb-7ec408dd7fcf","d8bf88d3-35da-422d-a7d9-1726ce66a288","0b5aab4e-5077-4627-9091-89c71a921be1","3bb006c5-a66d-440b-b54b-35bc9da87b33","e67c9242-2aac-4930-ae2e-b2a1678ed3d9","332f2cb5-0719-4c2d-8737-c1a0375fad8e","e93a7669-d7d0-4cb2-bbb1-36dedf3f893d","ead7f44b-e37a-4122-8824-17f4079c2e70","33838622-f03e-415f-9588-e7f9e644727e","54994661-e099-453c-904f-c09cc0fa0bfa","0cde3a3b-6678-42ac-8fa4-8ab02acb3dea","688ec08e-9fd6-4a2f-bcd5-5ea94e946d1b","e0a24038-1c85-4d6f-afbc-5c034062a557","96737350-249d-4701-9b47-0f56bf8bfc7f","9fd61528-8e0f-40d0-b1bb-53b468851d30","95fcc898-ef24-4ec4-8409-798a6623713e","de725e45-a751-4f4b-8c44-6c79671c70eb","39f2d2c1-abf2-4f3e-a4f1-58a477b12f9e","81d77ddd-6aae-4023-8467-2f5705d5e633","c45955d9-c799-4d61-8bc6-6335bde326b8","bc8075e9-e5ba-4a26-b696-7cf2651997ba","6f636d63-667a-40ad-b554-a301a62ddebd","f564f775-febe-442e-a0f1-492a2265e991","0e780acf-9221-4e84-9377-64d31e653187","fc2e5c67-6c98-4bfd-93a7-711fa2ae573f","ba437581-658a-497d-9790-ab79ad56cd4f","cdd19ddf-67e5-4e9b-9958-0745e8f9729e","c8d05983-b88d-40da-bf31-83d2d8b8c574","c6ed5fc4-f04a-45e0-afc3-6f421b81fea7","27350475-a322-4ede-a4b2-eb88a3c847f5","513c99bc-140c-44c2-b605-0d377805ac43","55ae9c5d-bcdb-4c29-8f06-cc9f596662d5","23c220df-e5a3-44dc-b521-d29378c6a5e0","71251371-81c5-4f25-8141-fef1e23e12fe","761a6c93-ae0b-4508-9437-d68d0b2c1f22","8398d7d3-d42f-4ca6-89d3-7a563eb50131","124d7dea-f1d6-477f-a096-42e92dd297c2","07097b52-f614-461b-9d4c-62ba7177a383","5e20da11-448d-41a5-8b92-7dd75d64ad3d","10e2f3e9-2995-47e0-9456-ed375eb610b7","d64c3d2d-51d9-4586-b8e7-0b23aea46f49","497076d2-1625-446b-b663-d75f5c2e2a3c","f42505df-9843-4914-97bc-c665dfbc2dcc","dfa0880b-de0a-4d0f-9f42-7ed496af35ea","7fb6cd7d-16c0-43bc-9e29-f645c644afe1","f72fcd31-7056-4425-b0ce-7734a759e616","b197d992-e4d6-4663-a6da-b46906374684","7022f5ed-020f-453f-bcab-8e632ca03b6e","1ec425ff-8b5a-49bf-87cb-9863defb9320","99d07c03-f3ce-42d7-bb64-8bde65c79dd6","3088e0b8-de0a-45d2-95fb-e8804c9c03fa","a640575d-a105-4ad5-b786-6e7fb55a0b94","d32059a8-46ed-4ceb-9b92-5f661b98f4e6","cfe90847-d888-4245-bb66-901855bb0051","45c4a4f5-e54b-45d2-bea6-617723a92b70","14f71b3f-b918-4376-8e75-7333e85ca536","8d8db4b1-8c90-472b-bc98-88fa6a2188d1","44ad55c5-bb62-4864-90e7-e992494786aa","c12fcdf7-ec63-58c7-8555-36222f25b91b","c3dba39c-fe1e-49e0-9a45-8f872b6aa4c5","f1c15ada-631b-4249-8c73-4e52391a532f","a5ac6af9-3cef-49e5-8d01-462817e1d641","868b4a28-0d2f-4d78-b947-66f44c3bdaf9","ca33902a-c6f2-45a5-9273-cf80a579cedd","d440f204-2694-4438-b618-721a9108070f","18c4566d-a7b7-4b1d-8e0b-470fddbaab9b","33b9b943-0d44-4490-b20a-35c110ae9473","4ce09575-5a2c-40c5-b766-bb12ef0c1600","193d881e-9afd-4b9e-a431-cdb113a7ee88","badf3d57-aba3-4757-b0e4-9d0e7b55f2ea","08512716-f1d3-4a88-bd38-aea9ae0f9ca7","0ed07f33-0bbb-497d-9823-9247fc520e85","cea29749-dc0f-40c0-adf9-4c21b187751e","599c1454-9525-4386-b50f-4fdee4b08373","9f2917c8-b17b-4ab2-8c6e-0269a0b80681","3c241319-416a-4195-ae80-fa4439198c1c","12003437-2898-4b1d-ba27-b1cc69d8dbb2","940f5aba-58f5-46fa-bbba-43fc6b10a3fe","42c18b66-d259-40d1-a77d-0c0e76080a6d","04ae2e8d-c499-4068-88bd-015b0bba57bf","e4734a39-1f45-400f-937a-285e2fad31a4","da1d6545-b9d6-499e-9175-fd2a340b1f2e","c8a4b21a-62c3-4fbd-8799-2b55d93d951c","23ef9104-65a5-4b32-943f-a2db064c699f","94b3bb70-e939-46bd-ae53-c01cd74430c1","7d003f0e-c38b-41fa-ae33-6333d9831146","fe6e5298-d4bb-447e-bffa-b4c38274abfd","2b46b080-32c8-4a2e-a118-d6a4bd4afc62","b7eb881e-d4f4-49c8-aba9-482a8c3935c5","b66c47bf-a2e0-4d78-bc54-9116348c0ad8","63ae3d27-ef09-4bfd-860c-a456b81f0944","e2679c18-f646-4edd-b5ea-d8bd80b8ef2e","a6f35d3b-6648-496a-97b6-0ea433ad194a","8ada5f43-06ce-4ea9-89a1-d955b28d6228","f66ed644-ae0e-40a6-b369-d096ad752293","20cfb547-cc76-4b36-b747-6ab607ffe55f","12c5362d-b2d7-4e5a-ab1f-406d4388517b","3e1d9c90-8606-462b-a052-34ea03629f4a","9540eca3-8091-43b2-8d74-437ebdaef289","ff6e9a3e-a59f-4ffb-8d60-3e63ceeef16d"],"entities":{"21f08565-d913-4302-a853-e5f688ec1bc1":{"Isa":{"id":"21f08565-d913-4302-a853-e5f688ec1bc1","number":1,"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","subtypes":["b8ec6afc-ddbd-53d6-9be3-e4b738941c2f","a8b86e41-5b04-4469-8a10-91bd89603e27","d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","23a9a479-68e7-4a70-bcef-9041f10fd287","3a1c7f6a-459d-4eba-9291-2aebb9bf60c9","a9b74602-bdc5-481f-af4c-8021553b895a","cdb1afaf-245c-4d56-bfea-10f69e45007d","b7483723-222d-4f08-b7b9-e8b14f0308cf","e68f8912-9897-4cbd-b363-cb4203a726a9","c89e362d-7905-4226-8713-97d3d6f05037","ba8a3bbf-86a8-47e2-92bb-f41878981c41","efde0481-1599-4c5c-bf30-51dbd4a8ed83","95e17479-07a5-41b1-9930-1b9b520514f6","d48d948b-5291-4eb3-ba35-7ab1c1ffa098","dbada891-ca0d-4fbc-8371-9f9234867bd6","290f49d3-8ce7-408e-be14-611b66db9687","7056c5ba-4f49-404f-abd5-e5c6a5879fac","b28be6c2-a37a-4049-9110-52136f892fc4","dfb72d5a-91a4-4023-a7a9-baef28bed978","b861cf8b-c7e9-4ecb-b29a-13086aa96d9c"]}},"4b7360ba-8de3-4c93-bc90-22478c128a75":{"Binary":{"id":"4b7360ba-8de3-4c93-bc90-22478c128a75","number":5,"from":{"obj_id":"141350e6-b62d-4a6d-9ea2-47333e51e3ea","description":"has a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"describes a","cardinality":"One","conditionality":"Conditional"}}},"3746c64a-c63d-424d-afb2-c253470b6d7b":{"Isa":{"id":"3746c64a-c63d-424d-afb2-c253470b6d7b","number":6,"obj_id":"45644594-b418-5362-9294-a62fe2a0fa8e","subtypes":["e68f8912-9897-4cbd-b363-cb4203a726a9","88687f76-5d9e-404e-a801-f6f57f9b30ca","d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","c89e362d-7905-4226-8713-97d3d6f05037","f6a3ce12-18e1-4675-ab94-6b2a7c91d951","d48d948b-5291-4eb3-ba35-7ab1c1ffa098"]}},"02892323-60e9-470b-b162-b2bc8d9ef1cd":{"Binary":{"id":"02892323-60e9-470b-b162-b2bc8d9ef1cd","number":7,"from":{"obj_id":"141350e6-b62d-4a6d-9ea2-47333e51e3ea","description":"comprises a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"model"},"to":{"obj_id":"e68f8912-9897-4cbd-b363-cb4203a726a9","description":"is comprised of","cardinality":"One","conditionality":"Conditional"}}},"98c79b91-da7b-443a-b1fb-18596cd6b4bc":{"Binary":{"id":"98c79b91-da7b-443a-b1fb-18596cd6b4bc","number":8,"from":{"obj_id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","description":"adds functions to a","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"model_type"},"to":{"obj_id":"e68f8912-9897-4cbd-b363-cb4203a726a9","description":"may have an","cardinality":"One","conditionality":"Conditional"}}},"7993e2c7-7efa-4346-b50e-bc02d55e1ca7":{"Binary":{"id":"7993e2c7-7efa-4346-b50e-bc02d55e1ca7","number":9,"from":{"obj_id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","description":"may be contained in an","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"impl_block"},"to":{"obj_id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","description":"may contain","cardinality":"One","conditionality":"Conditional"}}},"fdb49afe-13fb-4c79-99d1-92728d8652c7":{"Binary":{"id":"fdb49afe-13fb-4c79-99d1-92728d8652c7","number":10,"from":{"obj_id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","description":"returns","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"return_type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"is returned by","cardinality":"One","conditionality":"Conditional"}}},"ea1e6d1c-279b-4b6d-806e-fa133c6a5da9":{"Isa":{"id":"ea1e6d1c-279b-4b6d-806e-fa133c6a5da9","number":11,"obj_id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","subtypes":["954b354f-3a90-440b-ab0f-43efc00d275e","9352c766-9f6b-413b-9ea0-13f9c8e4d86e"]}},"35491126-597f-4301-ae48-88da4a23c845":{"Isa":{"id":"35491126-597f-4301-ae48-88da4a23c845","number":12,"obj_id":"954b354f-3a90-440b-ab0f-43efc00d275e","subtypes":["0365b40c-c40a-4653-84ab-44d1c12d294f","f192b162-8ada-4128-8805-1953e9165c54","8d86dceb-7e6e-4767-8a3f-cbbde458ad93"]}},"336674ce-19be-4baa-8117-19ee19886e2d":{"Binary":{"id":"336674ce-19be-4baa-8117-19ee19886e2d","number":13,"from":{"obj_id":"f192b162-8ada-4128-8805-1953e9165c54","description":"is available to a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"function"},"to":{"obj_id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","description":"receives a value via a","cardinality":"One","conditionality":"Conditional"}}},"95b8c311-1f3f-42ab-93cd-9b95c8d8c02a":{"Binary":{"id":"95b8c311-1f3f-42ab-93cd-9b95c8d8c02a","number":14,"from":{"obj_id":"f192b162-8ada-4128-8805-1953e9165c54","description":"follows","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"f192b162-8ada-4128-8805-1953e9165c54","description":"preceeds","cardinality":"One","conditionality":"Conditional"}}},"3966271b-9938-48c7-b4fe-177c307e22bf":{"Isa":{"id":"3966271b-9938-48c7-b4fe-177c307e22bf","number":15,"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","subtypes":["30c31621-a4bd-4356-80b9-1226e00651c9","dbbb7d46-4072-49a6-b483-cc8b25cbb4ea","d715c5f9-23f8-45e0-a1df-34e27acd01f5","d546feef-91df-49ea-ac61-430bdcf9832c","6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656","43bebcb3-06a1-410d-a19e-b3c1c6d1fa6b","1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","26dba2c5-a7e9-4556-a9c2-79091a97b941","72443b79-5645-4b5f-b317-e1a8f815b81c","93f288e7-d670-40a6-91f3-2006b5efa8b4","e1321ffa-07d5-480d-89f9-227b13d27ce1","3f7fd816-518b-4b9e-8134-3059e78045a0","e05ab5f3-17e7-4594-8ce0-c02d793a1df9","ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","4d5720eb-da8c-493d-ab8d-cb6111dd6099","0b3e9de0-d139-4934-a043-d1913a24de0c","0dc0e921-e7ff-4766-9738-e6e312f7f0de","5c85a8db-e4cc-4e38-9922-58d93773f4f0","3874760d-0104-4670-ba8b-1af413c5ec4a","1e7a66b2-f559-4c21-b8e6-969999ed171d","95e17479-07a5-41b1-9930-1b9b520514f6","52143d28-8474-44bc-b63f-e654150888d3","ab7a5708-6d12-4dce-b488-fa3a3b480510","4856978f-20be-4b59-8bf6-b941091119a9","47abdb96-0225-4880-a472-9c714086e2b5"]}},"2e81ce06-82d5-47e6-9f38-783d8af057d9":{"Isa":{"id":"2e81ce06-82d5-47e6-9f38-783d8af057d9","number":16,"obj_id":"6c7969f3-f150-4975-a989-a7bc8164b168","subtypes":["ce2da156-e0fd-4e56-bb31-2030d4e0c599","c32fcb6d-b505-492f-95c8-5f118079a399","59f269ab-2dbc-4b07-b9bc-48441f20e78f","59f269ab-2dbc-4b07-b9bc-48441f20e78f","b359d531-77ae-436f-9f0d-6a5632f1648e"]}},"03745d2b-a85f-40a9-b038-8f22c83e8eb1":{"Binary":{"id":"03745d2b-a85f-40a9-b038-8f22c83e8eb1","number":17,"from":{"obj_id":"6c7969f3-f150-4975-a989-a7bc8164b168","description":"follows","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"6c7969f3-f150-4975-a989-a7bc8164b168","description":"preceeds","cardinality":"One","conditionality":"Conditional"}}},"c715993f-c840-4d48-8442-b5635e4324e7":{"Binary":{"id":"c715993f-c840-4d48-8442-b5635e4324e7","number":18,"from":{"obj_id":"6c7969f3-f150-4975-a989-a7bc8164b168","description":"is contianed in a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"block"},"to":{"obj_id":"30c31621-a4bd-4356-80b9-1226e00651c9","description":"may contain many","cardinality":"One","conditionality":"Conditional"}}},"f6c19c17-3e01-4945-bffb-7ec408dd7fcf":{"Binary":{"id":"f6c19c17-3e01-4945-bffb-7ec408dd7fcf","number":19,"from":{"obj_id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","description":"executes statements in a","cardinality":"One","conditionality":"Unconditional","formalizing_attribute_name":"body"},"to":{"obj_id":"c4723d6d-1584-49bd-80f1-4c700185746e","description":"provides statements to a","cardinality":"One","conditionality":"Conditional"}}},"d8bf88d3-35da-422d-a7d9-1726ce66a288":{"Binary":{"id":"d8bf88d3-35da-422d-a7d9-1726ce66a288","number":20,"from":{"obj_id":"c32fcb6d-b505-492f-95c8-5f118079a399","description":"assigns the value of an","cardinality":"One","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is assigned by a","cardinality":"One","conditionality":"Conditional"}}},"0b5aab4e-5077-4627-9091-89c71a921be1":{"Binary":{"id":"0b5aab4e-5077-4627-9091-89c71a921be1","number":21,"from":{"obj_id":"c32fcb6d-b505-492f-95c8-5f118079a399","description":"assigns a value to a","cardinality":"One","conditionality":"Unconditional","formalizing_attribute_name":"variable"},"to":{"obj_id":"0365b40c-c40a-4653-84ab-44d1c12d294f","description":"is introduced by a","cardinality":"One","conditionality":"Unconditional"}}},"3bb006c5-a66d-440b-b54b-35bc9da87b33":{"Isa":{"id":"3bb006c5-a66d-440b-b54b-35bc9da87b33","number":22,"obj_id":"dbbb7d46-4072-49a6-b483-cc8b25cbb4ea","subtypes":["d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5","d30d2b03-732b-41bb-89ed-d053750bf987","b1612607-a813-4bc2-896b-88ec4b249447","fa42f4e2-1ff3-473f-a4b9-593c01134e96","0e1e683a-fe89-4002-88fa-efd50d66de6c","1a5eca02-909e-434c-bd35-b02f2b7dbe22"]}},"e67c9242-2aac-4930-ae2e-b2a1678ed3d9":{"Binary":{"id":"e67c9242-2aac-4930-ae2e-b2a1678ed3d9","number":24,"from":{"obj_id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","description":"is decoded by a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"lends semantics to a","cardinality":"One","conditionality":"Conditional"}}},"332f2cb5-0719-4c2d-8737-c1a0375fad8e":{"Isa":{"id":"332f2cb5-0719-4c2d-8737-c1a0375fad8e","number":35,"obj_id":"d86aef6f-0a91-4f3e-81cb-b220dbe7c7b5","subtypes":["dc6d1ffa-5dca-43ef-b973-0628ab580cb7","a16027c2-9a1d-42b7-ab37-a4e8e0bb7e4d"]}},"e93a7669-d7d0-4cb2-bbb1-36dedf3f893d":{"Binary":{"id":"e93a7669-d7d0-4cb2-bbb1-36dedf3f893d","number":26,"from":{"obj_id":"3874760d-0104-4670-ba8b-1af413c5ec4a","description":"belongs to a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"struct"},"to":{"obj_id":"d546feef-91df-49ea-ac61-430bdcf9832c","description":"may have many","cardinality":"One","conditionality":"Conditional"}}},"ead7f44b-e37a-4122-8824-17f4079c2e70":{"Binary":{"id":"ead7f44b-e37a-4122-8824-17f4079c2e70","number":27,"from":{"obj_id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","description":"contains an","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"may be a","cardinality":"One","conditionality":"Conditional"}}},"33838622-f03e-415f-9588-e7f9e644727e":{"Binary":{"id":"33838622-f03e-415f-9588-e7f9e644727e","number":27,"from":{"obj_id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","description":"follows","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","description":"preceeds","cardinality":"One","conditionality":"Conditional"}}},"54994661-e099-453c-904f-c09cc0fa0bfa":{"Binary":{"id":"54994661-e099-453c-904f-c09cc0fa0bfa","number":28,"from":{"obj_id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","description":"is part of a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"function"},"to":{"obj_id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","description":"may have","cardinality":"One","conditionality":"Conditional"}}},"0cde3a3b-6678-42ac-8fa4-8ab02acb3dea":{"Binary":{"id":"0cde3a3b-6678-42ac-8fa4-8ab02acb3dea","number":29,"from":{"obj_id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","description":"may be an","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"may be a","cardinality":"One","conditionality":"Conditional"}}},"688ec08e-9fd6-4a2f-bcd5-5ea94e946d1b":{"Isa":{"id":"688ec08e-9fd6-4a2f-bcd5-5ea94e946d1b","number":30,"obj_id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","subtypes":["01c8907d-cb59-4fae-a3ca-8cb331d18387","75a16785-d611-45ce-b52c-284a9da0b4b8","79069fc2-4d65-4073-b610-4afc0488de5c","470246f6-91ec-4993-b915-93480d0f4eb9"]}},"e0a24038-1c85-4d6f-afbc-5c034062a557":{"Binary":{"id":"e0a24038-1c85-4d6f-afbc-5c034062a557","number":31,"from":{"obj_id":"59f269ab-2dbc-4b07-b9bc-48441f20e78f","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"96737350-249d-4701-9b47-0f56bf8bfc7f":{"Binary":{"id":"96737350-249d-4701-9b47-0f56bf8bfc7f","number":32,"from":{"obj_id":"6a0a9ba3-81ef-4fdc-8de1-d67e84dfb656","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"9fd61528-8e0f-40d0-b1bb-53b468851d30":{"Binary":{"id":"9fd61528-8e0f-40d0-b1bb-53b468851d30","number":33,"from":{"obj_id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"block"},"to":{"obj_id":"30c31621-a4bd-4356-80b9-1226e00651c9","description":"","cardinality":"One","conditionality":"Conditional"}}},"95fcc898-ef24-4ec4-8409-798a6623713e":{"Binary":{"id":"95fcc898-ef24-4ec4-8409-798a6623713e","number":36,"from":{"obj_id":"cdb1afaf-245c-4d56-bfea-10f69e45007d","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"","cardinality":"One","conditionality":"Conditional"}}},"de725e45-a751-4f4b-8c44-6c79671c70eb":{"Binary":{"id":"de725e45-a751-4f4b-8c44-6c79671c70eb","number":37,"from":{"obj_id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"39f2d2c1-abf2-4f3e-a4f1-58a477b12f9e":{"Binary":{"id":"39f2d2c1-abf2-4f3e-a4f1-58a477b12f9e","number":38,"from":{"obj_id":"3874760d-0104-4670-ba8b-1af413c5ec4a","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"81d77ddd-6aae-4023-8467-2f5705d5e633":{"Binary":{"id":"81d77ddd-6aae-4023-8467-2f5705d5e633","number":39,"from":{"obj_id":"d546feef-91df-49ea-ac61-430bdcf9832c","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"data"},"to":{"obj_id":"31deb355-b737-43a6-ae88-199bb51f940d","description":"","cardinality":"One","conditionality":"Conditional"}}},"c45955d9-c799-4d61-8bc6-6335bde326b8":{"Binary":{"id":"c45955d9-c799-4d61-8bc6-6335bde326b8","number":40,"from":{"obj_id":"c89e362d-7905-4226-8713-97d3d6f05037","description":"","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"object"},"to":{"obj_id":"7178e7a4-5131-504b-a7b3-c2c0cfedf343","description":"","cardinality":"One","conditionality":"Conditional"}}},"bc8075e9-e5ba-4a26-b696-7cf2651997ba":{"Binary":{"id":"bc8075e9-e5ba-4a26-b696-7cf2651997ba","number":41,"from":{"obj_id":"b359d531-77ae-436f-9f0d-6a5632f1648e","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"6f636d63-667a-40ad-b554-a301a62ddebd":{"Binary":{"id":"6f636d63-667a-40ad-b554-a301a62ddebd","number":25,"from":{"obj_id":"45644594-b418-5362-9294-a62fe2a0fa8e","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"source"},"to":{"obj_id":"97f815f0-dcc4-4bd3-843d-13ff1dc5802c","description":"","cardinality":"One","conditionality":"Conditional"}}},"f564f775-febe-442e-a0f1-492a2265e991":{"Binary":{"id":"f564f775-febe-442e-a0f1-492a2265e991","number":42,"from":{"obj_id":"72443b79-5645-4b5f-b317-e1a8f815b81c","description":"iterates over an","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is provided to a","cardinality":"One","conditionality":"Conditional"}}},"0e780acf-9221-4e84-9377-64d31e653187":{"Binary":{"id":"0e780acf-9221-4e84-9377-64d31e653187","number":43,"from":{"obj_id":"72443b79-5645-4b5f-b317-e1a8f815b81c","description":"executes a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"block"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is executed by","cardinality":"One","conditionality":"Conditional"}}},"fc2e5c67-6c98-4bfd-93a7-711fa2ae573f":{"Binary":{"id":"fc2e5c67-6c98-4bfd-93a7-711fa2ae573f","number":44,"from":{"obj_id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","description":"branches based on","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"test"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is evaluated by","cardinality":"One","conditionality":"Conditional"}}},"ba437581-658a-497d-9790-ab79ad56cd4f":{"Binary":{"id":"ba437581-658a-497d-9790-ab79ad56cd4f","number":45,"from":{"obj_id":"93f288e7-d670-40a6-91f3-2006b5efa8b4","description":"evaluates and returns","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is returned by","cardinality":"One","conditionality":"Conditional"}}},"cdd19ddf-67e5-4e9b-9958-0745e8f9729e":{"Binary":{"id":"cdd19ddf-67e5-4e9b-9958-0745e8f9729e","number":46,"from":{"obj_id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","description":"when true, evaluates","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"true_block"},"to":{"obj_id":"30c31621-a4bd-4356-80b9-1226e00651c9","description":"is evaluated by","cardinality":"One","conditionality":"Conditional"}}},"c8d05983-b88d-40da-bf31-83d2d8b8c574":{"Isa":{"id":"c8d05983-b88d-40da-bf31-83d2d8b8c574","number":47,"obj_id":"3f7fd816-518b-4b9e-8134-3059e78045a0","subtypes":["9c8bc563-b596-4348-9189-065d747f7c9f","c46e6b80-0365-429a-abf9-ca75ce4f469a","f7fc16ac-6a23-4f5d-a04c-1163617701c1"]}},"c6ed5fc4-f04a-45e0-afc3-6f421b81fea7":{"Isa":{"id":"c6ed5fc4-f04a-45e0-afc3-6f421b81fea7","number":48,"obj_id":"9c8bc563-b596-4348-9189-065d747f7c9f","subtypes":["1b4e5b3a-a9b2-4316-94c4-ff34d4d3d523","e3329a9e-1c52-44f6-a1f7-fc85f7362e9e","c47b8696-7e98-4733-ab33-a4dca7b61d01","6767c0cf-4041-4047-b2b4-d7375f33bc97","35b3de4e-46b8-490f-8e30-c305ed348a78","222307c0-668c-43f9-9368-34cc048f0ae3"]}},"27350475-a322-4ede-a4b2-eb88a3c847f5":{"Isa":{"id":"27350475-a322-4ede-a4b2-eb88a3c847f5","number":49,"obj_id":"c46e6b80-0365-429a-abf9-ca75ce4f469a","subtypes":["484e429b-bf54-45cb-9b87-baddf7fb5f5b","d8b554d4-03ac-4613-a3e0-fc0b901bfd70","0edc535b-405d-4dd5-bcd2-f5772ab116c2","ce73a111-4670-411e-9bd2-f3308d6399c9","b8d3d40e-462e-4e4d-9fb4-b7d54f9fd03a","84f1c5fd-d907-4653-a132-bfd420ad9212"]}},"513c99bc-140c-44c2-b605-0d377805ac43":{"Binary":{"id":"513c99bc-140c-44c2-b605-0d377805ac43","number":50,"from":{"obj_id":"3f7fd816-518b-4b9e-8134-3059e78045a0","description":"left hand side","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"lhs"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"55ae9c5d-bcdb-4c29-8f06-cc9f596662d5":{"Binary":{"id":"55ae9c5d-bcdb-4c29-8f06-cc9f596662d5","number":51,"from":{"obj_id":"3f7fd816-518b-4b9e-8134-3059e78045a0","description":"right hand side","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"rhs"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"23c220df-e5a3-44dc-b521-d29378c6a5e0":{"Binary":{"id":"23c220df-e5a3-44dc-b521-d29378c6a5e0","number":52,"from":{"obj_id":"e1321ffa-07d5-480d-89f9-227b13d27ce1","description":"false block","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"false_block"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"71251371-81c5-4f25-8141-fef1e23e12fe":{"Binary":{"id":"71251371-81c5-4f25-8141-fef1e23e12fe","number":53,"from":{"obj_id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","description":"follows","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","description":"preceeds","cardinality":"One","conditionality":"Conditional"}}},"761a6c93-ae0b-4508-9437-d68d0b2c1f22":{"Binary":{"id":"761a6c93-ae0b-4508-9437-d68d0b2c1f22","number":54,"from":{"obj_id":"e05ab5f3-17e7-4594-8ce0-c02d793a1df9","description":"contains","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"elements"},"to":{"obj_id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","description":"is in a ","cardinality":"Many","conditionality":"Unconditional"}}},"8398d7d3-d42f-4ca6-89d3-7a563eb50131":{"Binary":{"id":"8398d7d3-d42f-4ca6-89d3-7a563eb50131","number":55,"from":{"obj_id":"ef4fe655-79cc-4eda-ac4e-d3ed30bd189d","description":"points at an","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is used by a","cardinality":"One","conditionality":"Conditional"}}},"124d7dea-f1d6-477f-a096-42e92dd297c2":{"Binary":{"id":"124d7dea-f1d6-477f-a096-42e92dd297c2","number":56,"from":{"obj_id":"4d5720eb-da8c-493d-ab8d-cb6111dd6099","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"index"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"07097b52-f614-461b-9d4c-62ba7177a383":{"Binary":{"id":"07097b52-f614-461b-9d4c-62ba7177a383","number":57,"from":{"obj_id":"4d5720eb-da8c-493d-ab8d-cb6111dd6099","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"target"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"5e20da11-448d-41a5-8b92-7dd75d64ad3d":{"Binary":{"id":"5e20da11-448d-41a5-8b92-7dd75d64ad3d","number":58,"from":{"obj_id":"0b3e9de0-d139-4934-a043-d1913a24de0c","description":"","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"lhs"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"10e2f3e9-2995-47e0-9456-ed375eb610b7":{"Binary":{"id":"10e2f3e9-2995-47e0-9456-ed375eb610b7","number":59,"from":{"obj_id":"0b3e9de0-d139-4934-a043-d1913a24de0c","description":"","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"rhs"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"d64c3d2d-51d9-4586-b8e7-0b23aea46f49":{"Isa":{"id":"d64c3d2d-51d9-4586-b8e7-0b23aea46f49","number":60,"obj_id":"0b3e9de0-d139-4934-a043-d1913a24de0c","subtypes":["70932b40-f444-4341-bb19-0a29d1daecbe","32dbb54a-9693-4847-9278-7c956ea045f8","122e4157-381f-400f-ac30-a1c8a2a9e8c1","17db2afc-ae6c-4e53-a527-48516811fe3e","30abb231-4248-4ffa-9a69-e0eb6bb9dbbd"]}},"497076d2-1625-446b-b663-d75f5c2e2a3c":{"Binary":{"id":"497076d2-1625-446b-b663-d75f5c2e2a3c","number":61,"from":{"obj_id":"0dc0e921-e7ff-4766-9738-e6e312f7f0de","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"f42505df-9843-4914-97bc-c665dfbc2dcc":{"Binary":{"id":"f42505df-9843-4914-97bc-c665dfbc2dcc","number":62,"from":{"obj_id":"79571896-9798-44a3-acef-5aa2d9773b93","description":"","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"","cardinality":"One","conditionality":"Conditional"}}},"dfa0880b-de0a-4d0f-9f42-7ed496af35ea":{"Binary":{"id":"dfa0880b-de0a-4d0f-9f42-7ed496af35ea","number":63,"from":{"obj_id":"79571896-9798-44a3-acef-5aa2d9773b93","description":"","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"value"},"to":{"obj_id":"94fc0044-4b88-4f5c-ac60-3a44262ade10","description":"","cardinality":"One","conditionality":"Unconditional"}}},"7fb6cd7d-16c0-43bc-9e29-f645c644afe1":{"Binary":{"id":"7fb6cd7d-16c0-43bc-9e29-f645c644afe1","number":64,"from":{"obj_id":"79571896-9798-44a3-acef-5aa2d9773b93","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"source"},"to":{"obj_id":"97f815f0-dcc4-4bd3-843d-13ff1dc5802c","description":"","cardinality":"One","conditionality":"Conditional"}}},"f72fcd31-7056-4425-b0ce-7734a759e616":{"Binary":{"id":"f72fcd31-7056-4425-b0ce-7734a759e616","number":66,"from":{"obj_id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"struct"},"to":{"obj_id":"e68f8912-9897-4cbd-b363-cb4203a726a9","description":"","cardinality":"One","conditionality":"Conditional"}}},"b197d992-e4d6-4663-a6da-b46906374684":{"Isa":{"id":"b197d992-e4d6-4663-a6da-b46906374684","number":67,"obj_id":"bf69c9af-f268-4c9b-8e67-4497eb490478","subtypes":["141350e6-b62d-4a6d-9ea2-47333e51e3ea","d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","7eaea922-8807-4c38-a704-0143e0594664"]}},"7022f5ed-020f-453f-bcab-8e632ca03b6e":{"Binary":{"id":"7022f5ed-020f-453f-bcab-8e632ca03b6e","number":65,"from":{"obj_id":"1ae9bff3-fb8a-4b35-bd3f-7120691cc7e7","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"field"},"to":{"obj_id":"bf69c9af-f268-4c9b-8e67-4497eb490478","description":"","cardinality":"One","conditionality":"Conditional"}}},"1ec425ff-8b5a-49bf-87cb-9863defb9320":{"Binary":{"id":"1ec425ff-8b5a-49bf-87cb-9863defb9320","number":68,"from":{"obj_id":"1e7a66b2-f559-4c21-b8e6-969999ed171d","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"lhs"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"99d07c03-f3ce-42d7-bb64-8bde65c79dd6":{"Binary":{"id":"99d07c03-f3ce-42d7-bb64-8bde65c79dd6","number":69,"from":{"obj_id":"1e7a66b2-f559-4c21-b8e6-969999ed171d","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"","cardinality":"One","conditionality":"Conditional"}}},"3088e0b8-de0a-45d2-95fb-e8804c9c03fa":{"Binary":{"id":"3088e0b8-de0a-45d2-95fb-e8804c9c03fa","number":71,"from":{"obj_id":"30c31621-a4bd-4356-80b9-1226e00651c9","description":"","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"statement"},"to":{"obj_id":"6c7969f3-f150-4975-a989-a7bc8164b168","description":"","cardinality":"One","conditionality":"Conditional"}}},"a640575d-a105-4ad5-b786-6e7fb55a0b94":{"Isa":{"id":"a640575d-a105-4ad5-b786-6e7fb55a0b94","number":72,"obj_id":"222307c0-668c-43f9-9368-34cc048f0ae3","subtypes":["6187076b-e765-4e6b-af28-f577eba40b5e","41b7bda7-f5a2-4c94-af22-fedbe8d6f287"]}},"d32059a8-46ed-4ceb-9b92-5f661b98f4e6":{"Isa":{"id":"d32059a8-46ed-4ceb-9b92-5f661b98f4e6","number":70,"obj_id":"f7fc16ac-6a23-4f5d-a04c-1163617701c1","subtypes":["80f73c4e-caf1-4e1f-a634-00965f6ad032","0ad229c4-1782-4783-b64e-0d15fe482463"]}},"cfe90847-d888-4245-bb66-901855bb0051":{"Binary":{"id":"cfe90847-d888-4245-bb66-901855bb0051","number":73,"from":{"obj_id":"95e17479-07a5-41b1-9930-1b9b520514f6","description":"contains a","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"body"},"to":{"obj_id":"c4723d6d-1584-49bd-80f1-4c700185746e","description":"is defined by","cardinality":"One","conditionality":"Conditional"}}},"45c4a4f5-e54b-45d2-bea6-617723a92b70":{"Binary":{"id":"45c4a4f5-e54b-45d2-bea6-617723a92b70","number":74,"from":{"obj_id":"95e17479-07a5-41b1-9930-1b9b520514f6","description":"has a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"return_type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"","cardinality":"One","conditionality":"Conditional"}}},"14f71b3f-b918-4376-8e75-7333e85ca536":{"Binary":{"id":"14f71b3f-b918-4376-8e75-7333e85ca536","number":75,"from":{"obj_id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","description":"","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","description":"previous","cardinality":"One","conditionality":"Conditional"}}},"8d8db4b1-8c90-472b-bc98-88fa6a2188d1":{"Binary":{"id":"8d8db4b1-8c90-472b-bc98-88fa6a2188d1","number":76,"from":{"obj_id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","description":"helps define a function signature","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"lambda"},"to":{"obj_id":"95e17479-07a5-41b1-9930-1b9b520514f6","description":"use used by","cardinality":"One","conditionality":"Conditional"}}},"44ad55c5-bb62-4864-90e7-e992494786aa":{"Binary":{"id":"44ad55c5-bb62-4864-90e7-e992494786aa","number":77,"from":{"obj_id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","description":"may require a type","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"applies to","cardinality":"One","conditionality":"Conditional"}}},"c12fcdf7-ec63-58c7-8555-36222f25b91b":{"Associative":{"id":"c12fcdf7-ec63-58c7-8555-36222f25b91b","number":78,"from":{"id":"4c7a4c0b-c22d-5b7d-8d58-028ae5116e1b","obj_id":"68e7191a-fe94-423f-8a5d-5551384ae998","cardinality":"One","one_referential_attribute":"z_store","other_referential_attribute":"object"},"one":{"obj_id":"b7483723-222d-4f08-b7b9-e8b14f0308cf","description":"houses","cardinality":"Many","conditionality":"Unconditional"},"other":{"obj_id":"7178e7a4-5131-504b-a7b3-c2c0cfedf343","description":"lives in an","cardinality":"One","conditionality":"Unconditional"}}},"c3dba39c-fe1e-49e0-9a45-8f872b6aa4c5":{"Binary":{"id":"c3dba39c-fe1e-49e0-9a45-8f872b6aa4c5","number":79,"from":{"obj_id":"f192b162-8ada-4128-8805-1953e9165c54","description":"requires a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"is used by","cardinality":"One","conditionality":"Conditional"}}},"f1c15ada-631b-4249-8c73-4e52391a532f":{"Binary":{"id":"f1c15ada-631b-4249-8c73-4e52391a532f","number":4,"from":{"obj_id":"e68f8912-9897-4cbd-b363-cb4203a726a9","description":"mirrors an","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"object"},"to":{"obj_id":"7178e7a4-5131-504b-a7b3-c2c0cfedf343","description":"is surfaced as a","cardinality":"One","conditionality":"Conditional"}}},"a5ac6af9-3cef-49e5-8d01-462817e1d641":{"Isa":{"id":"a5ac6af9-3cef-49e5-8d01-462817e1d641","number":80,"obj_id":"c4723d6d-1584-49bd-80f1-4c700185746e","subtypes":["7794ada6-49c3-4bf0-991f-828c6583ebb8","30c31621-a4bd-4356-80b9-1226e00651c9"]}},"868b4a28-0d2f-4d78-b947-66f44c3bdaf9":{"Binary":{"id":"868b4a28-0d2f-4d78-b947-66f44c3bdaf9","number":81,"from":{"obj_id":"26dba2c5-a7e9-4556-a9c2-79091a97b941","description":"may have a first","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"argument"},"to":{"obj_id":"846aa191-7b0c-4325-8c21-09fa5edf7c78","description":"may be the first to (lame)","cardinality":"One","conditionality":"Conditional"}}},"ca33902a-c6f2-45a5-9273-cf80a579cedd":{"Binary":{"id":"ca33902a-c6f2-45a5-9273-cf80a579cedd","number":82,"from":{"obj_id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","description":"may have a first parameter","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"first_param"},"to":{"obj_id":"f192b162-8ada-4128-8805-1953e9165c54","description":"may be the first to this","cardinality":"One","conditionality":"Conditional"}}},"d440f204-2694-4438-b618-721a9108070f":{"Binary":{"id":"d440f204-2694-4438-b618-721a9108070f","number":83,"from":{"obj_id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","description":"may refer to an","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"object_store"},"to":{"obj_id":"b7483723-222d-4f08-b7b9-e8b14f0308cf","description":"This should really be to a subtype","cardinality":"One","conditionality":"Conditional"}}},"18c4566d-a7b7-4b1d-8e0b-470fddbaab9b":{"Binary":{"id":"18c4566d-a7b7-4b1d-8e0b-470fddbaab9b","number":86,"from":{"obj_id":"c8fcd612-6ca8-469a-824c-de218e4fd075","description":"must have a type","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"is used my a","cardinality":"One","conditionality":"Conditional"}}},"33b9b943-0d44-4490-b20a-35c110ae9473":{"Isa":{"id":"33b9b943-0d44-4490-b20a-35c110ae9473","number":85,"obj_id":"7eaea922-8807-4c38-a704-0143e0594664","subtypes":["4b6c7fde-0878-4947-b960-bc73a4558c60","e6fbeeb8-6ade-46a2-bb52-9c99d06918b2","c8fcd612-6ca8-469a-824c-de218e4fd075"]}},"4ce09575-5a2c-40c5-b766-bb12ef0c1600":{"Binary":{"id":"4ce09575-5a2c-40c5-b766-bb12ef0c1600","number":88,"from":{"obj_id":"7eaea922-8807-4c38-a704-0143e0594664","description":"belongs to an","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"enum"},"to":{"obj_id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","description":"is composed of","cardinality":"One","conditionality":"Conditional"}}},"193d881e-9afd-4b9e-a431-cdb113a7ee88":{"Binary":{"id":"193d881e-9afd-4b9e-a431-cdb113a7ee88","number":91,"from":{"obj_id":"52143d28-8474-44bc-b63f-e654150888d3","description":"deconstructs ","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"scrutinee"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is deconstructod by","cardinality":"One","conditionality":"Conditional"}}},"badf3d57-aba3-4757-b0e4-9d0e7b55f2ea":{"Associative":{"id":"badf3d57-aba3-4757-b0e4-9d0e7b55f2ea","number":87,"from":{"id":"091c60c4-87c3-559d-88d0-e8fc60f68a9b","obj_id":"6094aad5-613b-42b6-8f48-c3b9e2161aa9","cardinality":"One","one_referential_attribute":"match","other_referential_attribute":"match_expr"},"one":{"obj_id":"52143d28-8474-44bc-b63f-e654150888d3","description":"matches","cardinality":"Many","conditionality":"Unconditional"},"other":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"are matched by","cardinality":"Many","conditionality":"Conditional"}}},"08512716-f1d3-4a88-bd38-aea9ae0f9ca7":{"Binary":{"id":"08512716-f1d3-4a88-bd38-aea9ae0f9ca7","number":92,"from":{"obj_id":"6094aad5-613b-42b6-8f48-c3b9e2161aa9","description":"executes","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is executed because of a ","cardinality":"One","conditionality":"Conditional"}}},"0ed07f33-0bbb-497d-9823-9247fc520e85":{"Binary":{"id":"0ed07f33-0bbb-497d-9823-9247fc520e85","number":93,"from":{"obj_id":"30c31621-a4bd-4356-80b9-1226e00651c9","description":"","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"parent"},"to":{"obj_id":"30c31621-a4bd-4356-80b9-1226e00651c9","description":"child","cardinality":"One","conditionality":"Conditional"}}},"cea29749-dc0f-40c0-adf9-4c21b187751e":{"Isa":{"id":"cea29749-dc0f-40c0-adf9-4c21b187751e","number":94,"obj_id":"3874760d-0104-4670-ba8b-1af413c5ec4a","subtypes":["6822b78e-e5ca-4c40-ba9d-cf7a69d4fdc7","910e3a08-5e99-47a5-bde4-3e35cf9f00da"]}},"599c1454-9525-4386-b50f-4fdee4b08373":{"Isa":{"id":"599c1454-9525-4386-b50f-4fdee4b08373","number":95,"obj_id":"31deb355-b737-43a6-ae88-199bb51f940d","subtypes":["e68f8912-9897-4cbd-b363-cb4203a726a9","d48d948b-5291-4eb3-ba35-7ab1c1ffa098"]}},"9f2917c8-b17b-4ab2-8c6e-0269a0b80681":{"Binary":{"id":"9f2917c8-b17b-4ab2-8c6e-0269a0b80681","number":89,"from":{"obj_id":"39060ea9-5d45-4954-a29f-ba88e01e7217","description":"next","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"39060ea9-5d45-4954-a29f-ba88e01e7217","description":"previous","cardinality":"One","conditionality":"Conditional"}}},"3c241319-416a-4195-ae80-fa4439198c1c":{"Binary":{"id":"3c241319-416a-4195-ae80-fa4439198c1c","number":96,"from":{"obj_id":"d546feef-91df-49ea-ac61-430bdcf9832c","description":"has a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"path"},"to":{"obj_id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","description":"points at","cardinality":"One","conditionality":"Unconditional"}}},"12003437-2898-4b1d-ba27-b1cc69d8dbb2":{"Binary":{"id":"12003437-2898-4b1d-ba27-b1cc69d8dbb2","number":90,"from":{"obj_id":"39060ea9-5d45-4954-a29f-ba88e01e7217","description":"comprises","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"path"},"to":{"obj_id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","description":"is comprised of","cardinality":"One","conditionality":"Unconditional"}}},"940f5aba-58f5-46fa-bbba-43fc6b10a3fe":{"Binary":{"id":"940f5aba-58f5-46fa-bbba-43fc6b10a3fe","number":97,"from":{"obj_id":"ab7a5708-6d12-4dce-b488-fa3a3b480510","description":"first element","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"first"},"to":{"obj_id":"39060ea9-5d45-4954-a29f-ba88e01e7217","description":"i win!","cardinality":"One","conditionality":"Unconditional"}}},"42c18b66-d259-40d1-a77d-0c0e76080a6d":{"Binary":{"id":"42c18b66-d259-40d1-a77d-0c0e76080a6d","number":98,"from":{"obj_id":"4856978f-20be-4b59-8bf6-b941091119a9","description":"awaits","cardinality":"One","conditionality":"Unconditional","formalizing_attribute_name":"future"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"is awaited upon by","cardinality":"One","conditionality":"Conditional"}}},"04ae2e8d-c499-4068-88bd-015b0bba57bf":{"Binary":{"id":"04ae2e8d-c499-4068-88bd-015b0bba57bf","number":2,"from":{"obj_id":"dbada891-ca0d-4fbc-8371-9f9234867bd6","description":"contains","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"value"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"may be wrapped by a","cardinality":"One","conditionality":"Conditional"}}},"e4734a39-1f45-400f-937a-285e2fad31a4":{"Binary":{"id":"e4734a39-1f45-400f-937a-285e2fad31a4","number":100,"from":{"obj_id":"290f49d3-8ce7-408e-be14-611b66db9687","description":"applies to a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"struct"},"to":{"obj_id":"e68f8912-9897-4cbd-b363-cb4203a726a9","description":"may be parameterized by","cardinality":"One","conditionality":"Conditional"}}},"da1d6545-b9d6-499e-9175-fd2a340b1f2e":{"Binary":{"id":"da1d6545-b9d6-499e-9175-fd2a340b1f2e","number":101,"from":{"obj_id":"290f49d3-8ce7-408e-be14-611b66db9687","description":"","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"290f49d3-8ce7-408e-be14-611b66db9687","description":"previous","cardinality":"One","conditionality":"Conditional"}}},"c8a4b21a-62c3-4fbd-8799-2b55d93d951c":{"Binary":{"id":"c8a4b21a-62c3-4fbd-8799-2b55d93d951c","number":102,"from":{"obj_id":"e68f8912-9897-4cbd-b363-cb4203a726a9","description":"may have a ","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"first generic"},"to":{"obj_id":"290f49d3-8ce7-408e-be14-611b66db9687","description":"struct leader","cardinality":"One","conditionality":"Unconditional"}}},"23ef9104-65a5-4b32-943f-a2db064c699f":{"Binary":{"id":"23ef9104-65a5-4b32-943f-a2db064c699f","number":103,"from":{"obj_id":"95e17479-07a5-41b1-9930-1b9b520514f6","description":"may have a","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"first_param"},"to":{"obj_id":"8d86dceb-7e6e-4767-8a3f-cbbde458ad93","description":"may refer to a","cardinality":"One","conditionality":"Unconditional"}}},"94b3bb70-e939-46bd-ae53-c01cd74430c1":{"Binary":{"id":"94b3bb70-e939-46bd-ae53-c01cd74430c1","number":104,"from":{"obj_id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","description":"parameterizes","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"enum"},"to":{"obj_id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","description":"is paramaterized by","cardinality":"One","conditionality":"Conditional"}}},"7d003f0e-c38b-41fa-ae33-6333d9831146":{"Binary":{"id":"7d003f0e-c38b-41fa-ae33-6333d9831146","number":105,"from":{"obj_id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","description":"may have a first","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"first generic"},"to":{"obj_id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","description":"","cardinality":"One","conditionality":"Unconditional"}}},"fe6e5298-d4bb-447e-bffa-b4c38274abfd":{"Binary":{"id":"fe6e5298-d4bb-447e-bffa-b4c38274abfd","number":106,"from":{"obj_id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","description":"next","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"7056c5ba-4f49-404f-abd5-e5c6a5879fac","description":"previous","cardinality":"One","conditionality":"Conditional"}}},"2b46b080-32c8-4a2e-a118-d6a4bd4afc62":{"Binary":{"id":"2b46b080-32c8-4a2e-a118-d6a4bd4afc62","number":3,"from":{"obj_id":"b28be6c2-a37a-4049-9110-52136f892fc4","description":"","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"b28be6c2-a37a-4049-9110-52136f892fc4","description":"previous","cardinality":"One","conditionality":"Conditional"}}},"b7eb881e-d4f4-49c8-aba9-482a8c3935c5":{"Binary":{"id":"b7eb881e-d4f4-49c8-aba9-482a8c3935c5","number":99,"from":{"obj_id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","description":"","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"first_generic"},"to":{"obj_id":"b28be6c2-a37a-4049-9110-52136f892fc4","description":"","cardinality":"One","conditionality":"Unconditional"}}},"b66c47bf-a2e0-4d78-bc54-9116348c0ad8":{"Binary":{"id":"b66c47bf-a2e0-4d78-bc54-9116348c0ad8","number":107,"from":{"obj_id":"b28be6c2-a37a-4049-9110-52136f892fc4","description":"","cardinality":"Many","conditionality":"Conditional","formalizing_attribute_name":"func"},"to":{"obj_id":"d8dbc4ff-77d0-470c-a8c9-5c700376fdd5","description":"","cardinality":"One","conditionality":"Conditional"}}},"63ae3d27-ef09-4bfd-860c-a456b81f0944":{"Binary":{"id":"63ae3d27-ef09-4bfd-860c-a456b81f0944","number":108,"from":{"obj_id":"dbc37f2f-0a90-4a8b-a217-d4a70a606695","description":"refers to a","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"string"},"to":{"obj_id":"d30d2b03-732b-41bb-89ed-d053750bf987","description":"may be in a","cardinality":"One","conditionality":"Conditional"}}},"e2679c18-f646-4edd-b5ea-d8bd80b8ef2e":{"Binary":{"id":"e2679c18-f646-4edd-b5ea-d8bd80b8ef2e","number":109,"from":{"obj_id":"80bf1ba4-2f74-45db-a1b1-6b76e82b2013","description":"refers to an","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"may be used by an","cardinality":"One","conditionality":"Conditional"}}},"a6f35d3b-6648-496a-97b6-0ea433ad194a":{"Isa":{"id":"a6f35d3b-6648-496a-97b6-0ea433ad194a","number":110,"obj_id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","subtypes":["80bf1ba4-2f74-45db-a1b1-6b76e82b2013","dbc37f2f-0a90-4a8b-a217-d4a70a606695"]}},"8ada5f43-06ce-4ea9-89a1-d955b28d6228":{"Binary":{"id":"8ada5f43-06ce-4ea9-89a1-d955b28d6228","number":112,"from":{"obj_id":"0e1e683a-fe89-4002-88fa-efd50d66de6c","description":"needs to first","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"first_format_bit"},"to":{"obj_id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","description":"someone has to do it","cardinality":"One","conditionality":"Unconditional"}}},"f66ed644-ae0e-40a6-b369-d096ad752293":{"Binary":{"id":"f66ed644-ae0e-40a6-b369-d096ad752293","number":113,"from":{"obj_id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","description":"next","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"next"},"to":{"obj_id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","description":"previous","cardinality":"One","conditionality":"Conditional"}}},"20cfb547-cc76-4b36-b747-6ab607ffe55f":{"Binary":{"id":"20cfb547-cc76-4b36-b747-6ab607ffe55f","number":111,"from":{"obj_id":"d39c987f-bba2-4956-963f-7e9c6c3fe4b4","description":"comprise","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"format_string"},"to":{"obj_id":"0e1e683a-fe89-4002-88fa-efd50d66de6c","description":"is comprised of","cardinality":"One","conditionality":"Conditional"}}},"12c5362d-b2d7-4e5a-ab1f-406d4388517b":{"Binary":{"id":"12c5362d-b2d7-4e5a-ab1f-406d4388517b","number":84,"from":{"obj_id":"88687f76-5d9e-404e-a801-f6f57f9b30ca","description":"may exist for an","cardinality":"One","conditionality":"Conditional","formalizing_attribute_name":"enumeration"},"to":{"obj_id":"d48d948b-5291-4eb3-ba35-7ab1c1ffa098","description":"may have an","cardinality":"One","conditionality":"Conditional"}}},"3e1d9c90-8606-462b-a052-34ea03629f4a":{"Binary":{"id":"3e1d9c90-8606-462b-a052-34ea03629f4a","number":114,"from":{"obj_id":"47abdb96-0225-4880-a472-9c714086e2b5","description":"","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"expression"},"to":{"obj_id":"9352c766-9f6b-413b-9ea0-13f9c8e4d86e","description":"","cardinality":"One","conditionality":"Conditional"}}},"9540eca3-8091-43b2-8d74-437ebdaef289":{"Binary":{"id":"9540eca3-8091-43b2-8d74-437ebdaef289","number":115,"from":{"obj_id":"b861cf8b-c7e9-4ecb-b29a-13086aa96d9c","description":"has a key","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"key_type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"describes the type of the key","cardinality":"One","conditionality":"Conditional"}}},"ff6e9a3e-a59f-4ffb-8d60-3e63ceeef16d":{"Binary":{"id":"ff6e9a3e-a59f-4ffb-8d60-3e63ceeef16d","number":116,"from":{"obj_id":"b861cf8b-c7e9-4ecb-b29a-13086aa96d9c","description":"values have","cardinality":"Many","conditionality":"Unconditional","formalizing_attribute_name":"value_type"},"to":{"obj_id":"2e277e34-ab6f-4028-9c52-935c31520fec","description":"describes the type of values","cardinality":"One","conditionality":"Conditional"}}}}}} \ No newline at end of file diff --git a/src/v2/lu_dog/store.rs b/src/v2/lu_dog/store.rs index ba3f8643..c84e6897 100644 --- a/src/v2/lu_dog/store.rs +++ b/src/v2/lu_dog/store.rs @@ -55,6 +55,7 @@ //! * [`Literal`] //! * [`LocalVariable`] //! * [`XMacro`] +//! * [`Map`] //! * [`XMatch`] //! * [`MethodCall`] //! * [`NamedFieldExpression`] @@ -109,7 +110,7 @@ use crate::v2::lu_dog::types::{ FieldAccessTarget, FieldExpression, FloatLiteral, ForLoop, FormatBit, FormatString, FuncGeneric, Function, FunctionCall, Grouped, HaltAndCatchFire, ImplementationBlock, Import, Index, IntegerLiteral, Item, Lambda, LambdaParameter, LetStatement, List, ListElement, - ListExpression, Literal, LocalVariable, MethodCall, NamedFieldExpression, ObjectWrapper, + ListExpression, Literal, LocalVariable, Map, MethodCall, NamedFieldExpression, ObjectWrapper, Operator, Parameter, PathElement, Pattern, RangeExpression, ResultStatement, Span, Statement, StaticMethodCall, StringBit, StringLiteral, StructExpression, StructField, StructGeneric, TupleField, TypeCast, Unary, Unit, UnnamedFieldExpression, ValueType, Variable, @@ -170,6 +171,7 @@ pub struct ObjectStore { literal: Rc>>>>, local_variable: Rc>>>>, x_macro: Rc>>>>, + map: Rc>>>>, x_match: Rc>>>>, method_call: Rc>>>>, named_field_expression: Rc>>>>, @@ -262,6 +264,7 @@ impl ObjectStore { literal: Rc::new(RefCell::new(HashMap::default())), local_variable: Rc::new(RefCell::new(HashMap::default())), x_macro: Rc::new(RefCell::new(HashMap::default())), + map: Rc::new(RefCell::new(HashMap::default())), x_match: Rc::new(RefCell::new(HashMap::default())), method_call: Rc::new(RefCell::new(HashMap::default())), named_field_expression: Rc::new(RefCell::new(HashMap::default())), @@ -2218,6 +2221,34 @@ impl ObjectStore { (0..len).map(move |i| values[i].clone()) } + /// Inter (insert) [`Map`] into the store. + /// + pub fn inter_map(&mut self, map: Rc>) { + let read = map.borrow(); + self.map.borrow_mut().insert(read.id, map.clone()); + } + + /// Exhume (get) [`Map`] from the store. + /// + pub fn exhume_map(&self, id: &Uuid) -> Option>> { + self.map.borrow().get(id).map(|map| map.clone()) + } + + /// Exorcise (remove) [`Map`] from the store. + /// + pub fn exorcise_map(&mut self, id: &Uuid) -> Option>> { + self.map.borrow_mut().remove(id).map(|map| map.clone()) + } + + /// Get an iterator over the internal `HashMap<&Uuid, Map>`. + /// + pub fn iter_map(&self) -> impl Iterator>> + '_ { + let values: Vec>> = + self.map.borrow().values().map(|map| map.clone()).collect(); + let len = values.len(); + (0..len).map(move |i| values[i].clone()) + } + /// Inter (insert) [`XMatch`] into the store. /// pub fn inter_x_match(&mut self, x_match: Rc>) { @@ -4162,6 +4193,18 @@ impl ObjectStore { } } + // Persist Map. + { + let path = path.join("map"); + fs::create_dir_all(&path)?; + for map in self.map.borrow().values() { + let path = path.join(format!("{}.json", map.borrow().id)); + let file = fs::File::create(path)?; + let mut writer = io::BufWriter::new(file); + serde_json::to_writer_pretty(&mut writer, &map)?; + } + } + // Persist Match. { let path = path.join("x_match"); @@ -5422,6 +5465,20 @@ impl ObjectStore { } } + // Load Map. + { + let path = path.join("map"); + let entries = fs::read_dir(path)?; + for entry in entries { + let entry = entry?; + let path = entry.path(); + let file = fs::File::open(path)?; + let reader = io::BufReader::new(file); + let map: Rc> = serde_json::from_reader(reader)?; + store.map.borrow_mut().insert(map.borrow().id, map.clone()); + } + } + // Load Match. { let path = path.join("x_match"); diff --git a/src/v2/lu_dog/types.rs b/src/v2/lu_dog/types.rs index 5cee9ce2..8f820141 100644 --- a/src/v2/lu_dog/types.rs +++ b/src/v2/lu_dog/types.rs @@ -64,6 +64,7 @@ pub mod list_expression; pub mod literal; pub mod local_variable; pub mod macro_call; +pub mod map; pub mod method_call; pub mod multiplication; pub mod named_field_expression; @@ -211,6 +212,7 @@ pub use crate::v2::lu_dog::literal::LiteralEnum; pub use crate::v2::lu_dog::local_variable::LocalVariable; pub use crate::v2::lu_dog::macro_call::MacroCall; pub use crate::v2::lu_dog::macro_call::MACRO_CALL; +pub use crate::v2::lu_dog::map::Map; pub use crate::v2::lu_dog::method_call::MethodCall; pub use crate::v2::lu_dog::multiplication::Multiplication; pub use crate::v2::lu_dog::multiplication::MULTIPLICATION; diff --git a/src/v2/lu_dog/types/map.rs b/src/v2/lu_dog/types/map.rs new file mode 100644 index 00000000..ed3e6a71 --- /dev/null +++ b/src/v2/lu_dog/types/map.rs @@ -0,0 +1,76 @@ +// {"magic":"","directive":{"Start":{"directive":"allow-editing","tag":"map-struct-definition-file"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-use-statements"}}} +use std::cell::RefCell; +use std::rc::Rc; +use uuid::Uuid; + +use crate::v2::lu_dog::types::value_type::ValueType; +use crate::v2::lu_dog::types::value_type::ValueTypeEnum; +use serde::{Deserialize, Serialize}; + +use crate::v2::lu_dog::store::ObjectStore as LuDogStore; +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-documentation"}}} +/// This is a hashmap. +/// +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-definition"}}} +#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] +pub struct Map { + pub id: Uuid, + /// R115: [`Map`] 'has a key' [`ValueType`] + pub key_type: Uuid, + /// R116: [`Map`] 'values have' [`ValueType`] + pub value_type: Uuid, +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-implementation"}}} +impl Map { + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-new"}}} + /// Inter a new 'Map' in the store, and return it's `id`. + pub fn new( + key_type: &Rc>, + value_type: &Rc>, + store: &mut LuDogStore, + ) -> Rc> { + let id = Uuid::new_v4(); + let new = Rc::new(RefCell::new(Map { + id, + key_type: key_type.borrow().id, + value_type: value_type.borrow().id, + })); + store.inter_map(new.clone()); + new + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-nav-forward-to-key_type"}}} + /// Navigate to [`ValueType`] across R115(1-*) + pub fn r115_value_type<'a>(&'a self, store: &'a LuDogStore) -> Vec>> { + vec![store.exhume_value_type(&self.key_type).unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-nav-forward-to-value_type"}}} + /// Navigate to [`ValueType`] across R116(1-*) + pub fn r116_value_type<'a>(&'a self, store: &'a LuDogStore) -> Vec>> { + vec![store.exhume_value_type(&self.value_type).unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-impl-nav-subtype-to-supertype-value_type"}}} + // Navigate to [`ValueType`] across R1(isa) + pub fn r1_value_type<'a>(&'a self, store: &'a LuDogStore) -> Vec>> { + vec![store + .iter_value_type() + .find(|value_type| { + if let ValueTypeEnum::Map(id) = value_type.borrow().subtype { + id == self.id + } else { + false + } + }) + .unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"End":{"directive":"allow-editing"}}} diff --git a/src/v2/lu_dog/types/value_type.rs b/src/v2/lu_dog/types/value_type.rs index 926afaba..59dc3c23 100644 --- a/src/v2/lu_dog/types/value_type.rs +++ b/src/v2/lu_dog/types/value_type.rs @@ -16,6 +16,7 @@ use crate::v2::lu_dog::types::import::Import; use crate::v2::lu_dog::types::lambda::Lambda; use crate::v2::lu_dog::types::lambda_parameter::LambdaParameter; use crate::v2::lu_dog::types::list::List; +use crate::v2::lu_dog::types::map::Map; use crate::v2::lu_dog::types::parameter::Parameter; use crate::v2::lu_dog::types::range::RANGE; use crate::v2::lu_dog::types::span::Span; @@ -79,6 +80,7 @@ pub enum ValueTypeEnum { Import(Uuid), Lambda(Uuid), List(Uuid), + Map(Uuid), ZObjectStore(Uuid), XPlugin(Uuid), Range(Uuid), @@ -271,6 +273,23 @@ impl ValueType { new } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-new_map"}}} + /// Inter a new ValueType in the store, and return it's `id`. + pub fn new_map( + bogus: bool, + subtype: &Rc>, + store: &mut LuDogStore, + ) -> Rc> { + let id = Uuid::new_v4(); + let new = Rc::new(RefCell::new(ValueType { + bogus: bogus, + subtype: ValueTypeEnum::Map(subtype.borrow().id), // b + id, + })); + store.inter_value_type(new.clone()); + new + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-new_z_object_store"}}} /// Inter a new ValueType in the store, and return it's `id`. pub fn new_z_object_store( @@ -456,6 +475,23 @@ impl ValueType { } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-woog_option"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-map"}}} + /// Navigate to [`Map`] across R115(1-M) + pub fn r115_map<'a>(&'a self, store: &'a LuDogStore) -> Vec>> { + store + .iter_map() + .filter(|map| map.borrow().key_type == self.id) + .collect() + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-map"}}} + /// Navigate to [`Map`] across R116(1-M) + pub fn r116_map<'a>(&'a self, store: &'a LuDogStore) -> Vec>> { + store + .iter_map() + .filter(|map| map.borrow().value_type == self.id) + .collect() + } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-parameter"}}} /// Navigate to [`Parameter`] across R79(1-M) diff --git a/src/v2/lu_dog_ndrwlock_vec/store.rs b/src/v2/lu_dog_ndrwlock_vec/store.rs index bc480ee3..4952af0a 100644 --- a/src/v2/lu_dog_ndrwlock_vec/store.rs +++ b/src/v2/lu_dog_ndrwlock_vec/store.rs @@ -55,6 +55,7 @@ //! * [`Literal`] //! * [`LocalVariable`] //! * [`XMacro`] +//! * [`Map`] //! * [`XMatch`] //! * [`MethodCall`] //! * [`NamedFieldExpression`] @@ -105,7 +106,7 @@ use crate::v2::lu_dog_ndrwlock_vec::types::{ FieldAccessTarget, FieldExpression, FloatLiteral, ForLoop, FormatBit, FormatString, FuncGeneric, Function, FunctionCall, Grouped, HaltAndCatchFire, ImplementationBlock, Import, Index, IntegerLiteral, Item, Lambda, LambdaParameter, LetStatement, List, ListElement, - ListExpression, Literal, LocalVariable, MethodCall, NamedFieldExpression, ObjectWrapper, + ListExpression, Literal, LocalVariable, Map, MethodCall, NamedFieldExpression, ObjectWrapper, Operator, Parameter, PathElement, Pattern, RangeExpression, ResultStatement, Span, Statement, StaticMethodCall, StringBit, StringLiteral, StructExpression, StructField, StructGeneric, TupleField, TypeCast, Unary, Unit, UnnamedFieldExpression, ValueType, Variable, @@ -218,6 +219,8 @@ pub struct ObjectStore { local_variable: Arc>>>>>, x_macro_free_list: std::sync::Mutex>, x_macro: Arc>>>>>, + map_free_list: std::sync::Mutex>, + map: Arc>>>>>, x_match_free_list: std::sync::Mutex>, x_match: Arc>>>>>, method_call_free_list: std::sync::Mutex>, @@ -432,6 +435,8 @@ impl Clone for ObjectStore { local_variable: self.local_variable.clone(), x_macro_free_list: Mutex::new(self.x_macro_free_list.lock().unwrap().clone()), x_macro: self.x_macro.clone(), + map_free_list: Mutex::new(self.map_free_list.lock().unwrap().clone()), + map: self.map.clone(), x_match_free_list: Mutex::new(self.x_match_free_list.lock().unwrap().clone()), x_match: self.x_match.clone(), method_call_free_list: Mutex::new(self.method_call_free_list.lock().unwrap().clone()), @@ -634,6 +639,8 @@ impl ObjectStore { local_variable: Arc::new(RwLock::new(Vec::new())), x_macro_free_list: std::sync::Mutex::new(Vec::new()), x_macro: Arc::new(RwLock::new(Vec::new())), + map_free_list: std::sync::Mutex::new(Vec::new()), + map: Arc::new(RwLock::new(Vec::new())), x_match_free_list: std::sync::Mutex::new(Vec::new()), x_match: Arc::new(RwLock::new(Vec::new())), method_call_free_list: std::sync::Mutex::new(Vec::new()), @@ -4610,6 +4617,83 @@ impl ObjectStore { }) } + /// Inter (insert) [`Map`] into the store. + /// + #[inline] + pub fn inter_map(&mut self, map: F) -> Arc> + where + F: Fn(usize) -> Arc>, + { + let _index = if let Some(_index) = self.map_free_list.lock().unwrap().pop() { + tracing::trace!(target: "store", "recycling block {_index}."); + _index + } else { + let _index = self.map.read().unwrap().len(); + tracing::trace!(target: "store", "allocating block {_index}."); + self.map.write().unwrap().push(None); + _index + }; + + let map = map(_index); + + let found = if let Some(map) = self.map.read().unwrap().iter().find(|stored| { + if let Some(stored) = stored { + *stored.read().unwrap() == *map.read().unwrap() + } else { + false + } + }) { + map.clone() + } else { + None + }; + + if let Some(map) = found { + tracing::debug!(target: "store", "found duplicate {map:?}."); + self.map_free_list.lock().unwrap().push(_index); + map.clone() + } else { + tracing::debug!(target: "store", "interring {map:?}."); + self.map.write().unwrap()[_index] = Some(map.clone()); + map + } + } + + /// Exhume (get) [`Map`] from the store. + /// + #[inline] + pub fn exhume_map(&self, id: &usize) -> Option>> { + match self.map.read().unwrap().get(*id) { + Some(map) => map.clone(), + None => None, + } + } + + /// Exorcise (remove) [`Map`] from the store. + /// + #[inline] + pub fn exorcise_map(&mut self, id: &usize) -> Option>> { + tracing::debug!(target: "store", "exorcising map slot: {id}."); + let result = self.map.write().unwrap()[*id].take(); + self.map_free_list.lock().unwrap().push(*id); + result + } + + /// Get an iterator over the internal `HashMap<&Uuid, Map>`. + /// + #[inline] + pub fn iter_map(&self) -> impl Iterator>> + '_ { + let len = self.map.read().unwrap().len(); + (0..len) + .filter(|i| self.map.read().unwrap()[*i].is_some()) + .map(move |i| { + self.map.read().unwrap()[i] + .as_ref() + .map(|map| map.clone()) + .unwrap() + }) + } + /// Inter (insert) [`XMatch`] into the store. /// #[inline] diff --git a/src/v2/lu_dog_ndrwlock_vec/types.rs b/src/v2/lu_dog_ndrwlock_vec/types.rs index 580af083..5264d42a 100644 --- a/src/v2/lu_dog_ndrwlock_vec/types.rs +++ b/src/v2/lu_dog_ndrwlock_vec/types.rs @@ -64,6 +64,7 @@ pub mod list_expression; pub mod literal; pub mod local_variable; pub mod macro_call; +pub mod map; pub mod method_call; pub mod multiplication; pub mod named_field_expression; @@ -211,6 +212,7 @@ pub use crate::v2::lu_dog_ndrwlock_vec::literal::LiteralEnum; pub use crate::v2::lu_dog_ndrwlock_vec::local_variable::LocalVariable; pub use crate::v2::lu_dog_ndrwlock_vec::macro_call::MacroCall; pub use crate::v2::lu_dog_ndrwlock_vec::macro_call::MACRO_CALL; +pub use crate::v2::lu_dog_ndrwlock_vec::map::Map; pub use crate::v2::lu_dog_ndrwlock_vec::method_call::MethodCall; pub use crate::v2::lu_dog_ndrwlock_vec::multiplication::Multiplication; pub use crate::v2::lu_dog_ndrwlock_vec::multiplication::MULTIPLICATION; diff --git a/src/v2/lu_dog_ndrwlock_vec/types/map.rs b/src/v2/lu_dog_ndrwlock_vec/types/map.rs new file mode 100644 index 00000000..702c989d --- /dev/null +++ b/src/v2/lu_dog_ndrwlock_vec/types/map.rs @@ -0,0 +1,91 @@ +// {"magic":"","directive":{"Start":{"directive":"allow-editing","tag":"map-struct-definition-file"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-use-statements"}}} +use no_deadlocks::RwLock; +use std::sync::Arc; +use uuid::Uuid; + +use crate::v2::lu_dog_ndrwlock_vec::types::value_type::ValueType; +use crate::v2::lu_dog_ndrwlock_vec::types::value_type::ValueTypeEnum; +use serde::{Deserialize, Serialize}; + +use crate::v2::lu_dog_ndrwlock_vec::store::ObjectStore as LuDogNdrwlockVecStore; +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-documentation"}}} +/// This is a hashmap. +/// +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-definition"}}} +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct Map { + pub id: usize, + /// R115: [`Map`] 'has a key' [`ValueType`] + pub key_type: usize, + /// R116: [`Map`] 'values have' [`ValueType`] + pub value_type: usize, +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-implementation"}}} +impl Map { + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-new"}}} + /// Inter a new 'Map' in the store, and return it's `id`. + pub fn new( + key_type: &Arc>, + value_type: &Arc>, + store: &mut LuDogNdrwlockVecStore, + ) -> Arc> { + store.inter_map(|id| { + Arc::new(RwLock::new(Map { + id, + key_type: key_type.read().unwrap().id, + value_type: value_type.read().unwrap().id, + })) + }) + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-nav-forward-to-key_type"}}} + /// Navigate to [`ValueType`] across R115(1-*) + pub fn r115_value_type<'a>( + &'a self, + store: &'a LuDogNdrwlockVecStore, + ) -> Vec>> { + vec![store.exhume_value_type(&self.key_type).unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-nav-forward-to-value_type"}}} + /// Navigate to [`ValueType`] across R116(1-*) + pub fn r116_value_type<'a>( + &'a self, + store: &'a LuDogNdrwlockVecStore, + ) -> Vec>> { + vec![store.exhume_value_type(&self.value_type).unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-impl-nav-subtype-to-supertype-value_type"}}} + // Navigate to [`ValueType`] across R1(isa) + pub fn r1_value_type<'a>( + &'a self, + store: &'a LuDogNdrwlockVecStore, + ) -> Vec>> { + vec![store + .iter_value_type() + .find(|value_type| { + if let ValueTypeEnum::Map(id) = value_type.read().unwrap().subtype { + id == self.id + } else { + false + } + }) + .unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-implementation"}}} +impl PartialEq for Map { + fn eq(&self, other: &Self) -> bool { + self.key_type == other.key_type && self.value_type == other.value_type + } +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"End":{"directive":"allow-editing"}}} diff --git a/src/v2/lu_dog_ndrwlock_vec/types/value_type.rs b/src/v2/lu_dog_ndrwlock_vec/types/value_type.rs index dca2bf21..22f0e9b0 100644 --- a/src/v2/lu_dog_ndrwlock_vec/types/value_type.rs +++ b/src/v2/lu_dog_ndrwlock_vec/types/value_type.rs @@ -16,6 +16,7 @@ use crate::v2::lu_dog_ndrwlock_vec::types::import::Import; use crate::v2::lu_dog_ndrwlock_vec::types::lambda::Lambda; use crate::v2::lu_dog_ndrwlock_vec::types::lambda_parameter::LambdaParameter; use crate::v2::lu_dog_ndrwlock_vec::types::list::List; +use crate::v2::lu_dog_ndrwlock_vec::types::map::Map; use crate::v2::lu_dog_ndrwlock_vec::types::parameter::Parameter; use crate::v2::lu_dog_ndrwlock_vec::types::range::RANGE; use crate::v2::lu_dog_ndrwlock_vec::types::span::Span; @@ -77,6 +78,7 @@ pub enum ValueTypeEnum { Import(usize), Lambda(usize), List(usize), + Map(usize), ZObjectStore(usize), XPlugin(usize), Range(Uuid), @@ -257,6 +259,22 @@ impl ValueType { }) } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-new_map"}}} + /// Inter a new ValueType in the store, and return it's `id`. + pub fn new_map( + bogus: bool, + subtype: &Arc>, + store: &mut LuDogNdrwlockVecStore, + ) -> Arc> { + store.inter_value_type(|id| { + Arc::new(RwLock::new(ValueType { + bogus: bogus, + subtype: ValueTypeEnum::Map(subtype.read().unwrap().id), // b + id, + })) + }) + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-new_z_object_store"}}} /// Inter a new ValueType in the store, and return it's `id`. pub fn new_z_object_store( @@ -444,6 +462,23 @@ impl ValueType { } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-woog_option"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-map"}}} + /// Navigate to [`Map`] across R115(1-M) + pub fn r115_map<'a>(&'a self, store: &'a LuDogNdrwlockVecStore) -> Vec>> { + store + .iter_map() + .filter(|map| map.read().unwrap().key_type == self.id) + .collect() + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-map"}}} + /// Navigate to [`Map`] across R116(1-M) + pub fn r116_map<'a>(&'a self, store: &'a LuDogNdrwlockVecStore) -> Vec>> { + store + .iter_map() + .filter(|map| map.read().unwrap().value_type == self.id) + .collect() + } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-parameter"}}} /// Navigate to [`Parameter`] across R79(1-M) diff --git a/src/v2/lu_dog_pl_vec/store.rs b/src/v2/lu_dog_pl_vec/store.rs index bdaacc87..f7942824 100644 --- a/src/v2/lu_dog_pl_vec/store.rs +++ b/src/v2/lu_dog_pl_vec/store.rs @@ -55,6 +55,7 @@ //! * [`Literal`] //! * [`LocalVariable`] //! * [`XMacro`] +//! * [`Map`] //! * [`XMatch`] //! * [`MethodCall`] //! * [`NamedFieldExpression`] @@ -110,7 +111,7 @@ use crate::v2::lu_dog_pl_vec::types::{ FieldAccessTarget, FieldExpression, FloatLiteral, ForLoop, FormatBit, FormatString, FuncGeneric, Function, FunctionCall, Grouped, HaltAndCatchFire, ImplementationBlock, Import, Index, IntegerLiteral, Item, Lambda, LambdaParameter, LetStatement, List, ListElement, - ListExpression, Literal, LocalVariable, MethodCall, NamedFieldExpression, ObjectWrapper, + ListExpression, Literal, LocalVariable, Map, MethodCall, NamedFieldExpression, ObjectWrapper, Operator, Parameter, PathElement, Pattern, RangeExpression, ResultStatement, Span, Statement, StaticMethodCall, StringBit, StringLiteral, StructExpression, StructField, StructGeneric, TupleField, TypeCast, Unary, Unit, UnnamedFieldExpression, ValueType, Variable, @@ -223,6 +224,8 @@ pub struct ObjectStore { local_variable: Arc>>>>>, x_macro_free_list: std::sync::Mutex>, x_macro: Arc>>>>>, + map_free_list: std::sync::Mutex>, + map: Arc>>>>>, x_match_free_list: std::sync::Mutex>, x_match: Arc>>>>>, method_call_free_list: std::sync::Mutex>, @@ -437,6 +440,8 @@ impl Clone for ObjectStore { local_variable: self.local_variable.clone(), x_macro_free_list: Mutex::new(self.x_macro_free_list.lock().unwrap().clone()), x_macro: self.x_macro.clone(), + map_free_list: Mutex::new(self.map_free_list.lock().unwrap().clone()), + map: self.map.clone(), x_match_free_list: Mutex::new(self.x_match_free_list.lock().unwrap().clone()), x_match: self.x_match.clone(), method_call_free_list: Mutex::new(self.method_call_free_list.lock().unwrap().clone()), @@ -639,6 +644,8 @@ impl ObjectStore { local_variable: Arc::new(RwLock::new(Vec::new())), x_macro_free_list: std::sync::Mutex::new(Vec::new()), x_macro: Arc::new(RwLock::new(Vec::new())), + map_free_list: std::sync::Mutex::new(Vec::new()), + map: Arc::new(RwLock::new(Vec::new())), x_match_free_list: std::sync::Mutex::new(Vec::new()), x_match: Arc::new(RwLock::new(Vec::new())), method_call_free_list: std::sync::Mutex::new(Vec::new()), @@ -4564,6 +4571,78 @@ impl ObjectStore { }) } + /// Inter (insert) [`Map`] into the store. + /// + #[inline] + pub fn inter_map(&mut self, map: F) -> Arc> + where + F: Fn(usize) -> Arc>, + { + let _index = if let Some(_index) = self.map_free_list.lock().unwrap().pop() { + tracing::trace!(target: "store", "recycling block {_index}."); + _index + } else { + let _index = self.map.read().len(); + tracing::trace!(target: "store", "allocating block {_index}."); + self.map.write().push(None); + _index + }; + + let map = map(_index); + + let found = if let Some(map) = self.map.read().iter().find(|stored| { + if let Some(stored) = stored { + *stored.read() == *map.read() + } else { + false + } + }) { + map.clone() + } else { + None + }; + + if let Some(map) = found { + tracing::debug!(target: "store", "found duplicate {map:?}."); + self.map_free_list.lock().unwrap().push(_index); + map.clone() + } else { + tracing::debug!(target: "store", "interring {map:?}."); + self.map.write()[_index] = Some(map.clone()); + map + } + } + + /// Exhume (get) [`Map`] from the store. + /// + #[inline] + pub fn exhume_map(&self, id: &usize) -> Option>> { + match self.map.read().get(*id) { + Some(map) => map.clone(), + None => None, + } + } + + /// Exorcise (remove) [`Map`] from the store. + /// + #[inline] + pub fn exorcise_map(&mut self, id: &usize) -> Option>> { + tracing::debug!(target: "store", "exorcising map slot: {id}."); + let result = self.map.write()[*id].take(); + self.map_free_list.lock().unwrap().push(*id); + result + } + + /// Get an iterator over the internal `HashMap<&Uuid, Map>`. + /// + #[inline] + pub fn iter_map(&self) -> impl Iterator>> + '_ { + let len = self.map.read().len(); + (0..len) + .filter(|i| self.map.read()[*i].is_some()) + .map(move |i| self.map.read()[i].as_ref().map(|map| map.clone()).unwrap()) + } + /// Inter (insert) [`XMatch`] into the store. /// #[inline] @@ -7936,6 +8015,20 @@ impl ObjectStore { } } + // Persist Map. + { + let path = path.join("map"); + fs::create_dir_all(&path)?; + for map in &*self.map.read() { + if let Some(map) = map { + let path = path.join(format!("{}.json", map.read().id)); + let file = fs::File::create(path)?; + let mut writer = io::BufWriter::new(file); + serde_json::to_writer_pretty(&mut writer, &map)?; + } + } + } + // Persist Match. { let path = path.join("x_match"); @@ -9262,6 +9355,20 @@ impl ObjectStore { } } + // Load Map. + { + let path = path.join("map"); + let entries = fs::read_dir(path)?; + for entry in entries { + let entry = entry?; + let path = entry.path(); + let file = fs::File::open(path)?; + let reader = io::BufReader::new(file); + let map: Arc> = serde_json::from_reader(reader)?; + store.map.write().insert(map.read().id, Some(map.clone())); + } + } + // Load Match. { let path = path.join("x_match"); diff --git a/src/v2/lu_dog_pl_vec/types.rs b/src/v2/lu_dog_pl_vec/types.rs index 3dfc2635..1f81dadd 100644 --- a/src/v2/lu_dog_pl_vec/types.rs +++ b/src/v2/lu_dog_pl_vec/types.rs @@ -64,6 +64,7 @@ pub mod list_expression; pub mod literal; pub mod local_variable; pub mod macro_call; +pub mod map; pub mod method_call; pub mod multiplication; pub mod named_field_expression; @@ -211,6 +212,7 @@ pub use crate::v2::lu_dog_pl_vec::literal::LiteralEnum; pub use crate::v2::lu_dog_pl_vec::local_variable::LocalVariable; pub use crate::v2::lu_dog_pl_vec::macro_call::MacroCall; pub use crate::v2::lu_dog_pl_vec::macro_call::MACRO_CALL; +pub use crate::v2::lu_dog_pl_vec::map::Map; pub use crate::v2::lu_dog_pl_vec::method_call::MethodCall; pub use crate::v2::lu_dog_pl_vec::multiplication::Multiplication; pub use crate::v2::lu_dog_pl_vec::multiplication::MULTIPLICATION; diff --git a/src/v2/lu_dog_pl_vec/types/map.rs b/src/v2/lu_dog_pl_vec/types/map.rs new file mode 100644 index 00000000..aed861d4 --- /dev/null +++ b/src/v2/lu_dog_pl_vec/types/map.rs @@ -0,0 +1,88 @@ +// {"magic":"","directive":{"Start":{"directive":"allow-editing","tag":"map-struct-definition-file"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-use-statements"}}} +use parking_lot::RwLock; +use std::sync::Arc; +use uuid::Uuid; + +use crate::v2::lu_dog_pl_vec::types::value_type::ValueType; +use crate::v2::lu_dog_pl_vec::types::value_type::ValueTypeEnum; +use serde::{Deserialize, Serialize}; + +use crate::v2::lu_dog_pl_vec::store::ObjectStore as LuDogPlVecStore; +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-documentation"}}} +/// This is a hashmap. +/// +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-definition"}}} +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct Map { + pub id: usize, + /// R115: [`Map`] 'has a key' [`ValueType`] + pub key_type: usize, + /// R116: [`Map`] 'values have' [`ValueType`] + pub value_type: usize, +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-implementation"}}} +impl Map { + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-new"}}} + /// Inter a new 'Map' in the store, and return it's `id`. + pub fn new( + key_type: &Arc>, + value_type: &Arc>, + store: &mut LuDogPlVecStore, + ) -> Arc> { + store.inter_map(|id| { + Arc::new(RwLock::new(Map { + id, + key_type: key_type.read().id, + value_type: value_type.read().id, + })) + }) + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-nav-forward-to-key_type"}}} + /// Navigate to [`ValueType`] across R115(1-*) + pub fn r115_value_type<'a>( + &'a self, + store: &'a LuDogPlVecStore, + ) -> Vec>> { + vec![store.exhume_value_type(&self.key_type).unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-nav-forward-to-value_type"}}} + /// Navigate to [`ValueType`] across R116(1-*) + pub fn r116_value_type<'a>( + &'a self, + store: &'a LuDogPlVecStore, + ) -> Vec>> { + vec![store.exhume_value_type(&self.value_type).unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-impl-nav-subtype-to-supertype-value_type"}}} + // Navigate to [`ValueType`] across R1(isa) + pub fn r1_value_type<'a>(&'a self, store: &'a LuDogPlVecStore) -> Vec>> { + vec![store + .iter_value_type() + .find(|value_type| { + if let ValueTypeEnum::Map(id) = value_type.read().subtype { + id == self.id + } else { + false + } + }) + .unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-implementation"}}} +impl PartialEq for Map { + fn eq(&self, other: &Self) -> bool { + self.key_type == other.key_type && self.value_type == other.value_type + } +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"End":{"directive":"allow-editing"}}} diff --git a/src/v2/lu_dog_pl_vec/types/value_type.rs b/src/v2/lu_dog_pl_vec/types/value_type.rs index e25d3df7..57c8cb8a 100644 --- a/src/v2/lu_dog_pl_vec/types/value_type.rs +++ b/src/v2/lu_dog_pl_vec/types/value_type.rs @@ -16,6 +16,7 @@ use crate::v2::lu_dog_pl_vec::types::import::Import; use crate::v2::lu_dog_pl_vec::types::lambda::Lambda; use crate::v2::lu_dog_pl_vec::types::lambda_parameter::LambdaParameter; use crate::v2::lu_dog_pl_vec::types::list::List; +use crate::v2::lu_dog_pl_vec::types::map::Map; use crate::v2::lu_dog_pl_vec::types::parameter::Parameter; use crate::v2::lu_dog_pl_vec::types::range::RANGE; use crate::v2::lu_dog_pl_vec::types::span::Span; @@ -77,6 +78,7 @@ pub enum ValueTypeEnum { Import(usize), Lambda(usize), List(usize), + Map(usize), ZObjectStore(usize), XPlugin(usize), Range(Uuid), @@ -253,6 +255,22 @@ impl ValueType { }) } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-new_map"}}} + /// Inter a new ValueType in the store, and return it's `id`. + pub fn new_map( + bogus: bool, + subtype: &Arc>, + store: &mut LuDogPlVecStore, + ) -> Arc> { + store.inter_value_type(|id| { + Arc::new(RwLock::new(ValueType { + bogus: bogus, + subtype: ValueTypeEnum::Map(subtype.read().id), // b + id, + })) + }) + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-new_z_object_store"}}} /// Inter a new ValueType in the store, and return it's `id`. pub fn new_z_object_store( @@ -426,6 +444,24 @@ impl ValueType { .collect() } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-map"}}} + /// Navigate to [`Map`] across R115(1-M) + pub fn r115_map<'a>(&'a self, store: &'a LuDogPlVecStore) -> Vec>> { + store + .iter_map() + .filter(|map| map.read().key_type == self.id) + .collect() + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-map"}}} + /// Navigate to [`Map`] across R116(1-M) + pub fn r116_map<'a>(&'a self, store: &'a LuDogPlVecStore) -> Vec>> { + store + .iter_map() + .filter(|map| map.read().value_type == self.id) + .collect() + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-parameter"}}} /// Navigate to [`Parameter`] across R79(1-M) pub fn r79_parameter<'a>(&'a self, store: &'a LuDogPlVecStore) -> Vec>> { diff --git a/src/v2/lu_dog_rwlock/store.rs b/src/v2/lu_dog_rwlock/store.rs index 1d2dd217..daa9feb2 100644 --- a/src/v2/lu_dog_rwlock/store.rs +++ b/src/v2/lu_dog_rwlock/store.rs @@ -55,6 +55,7 @@ //! * [`Literal`] //! * [`LocalVariable`] //! * [`XMacro`] +//! * [`Map`] //! * [`XMatch`] //! * [`MethodCall`] //! * [`NamedFieldExpression`] @@ -109,7 +110,7 @@ use crate::v2::lu_dog_rwlock::types::{ FieldAccessTarget, FieldExpression, FloatLiteral, ForLoop, FormatBit, FormatString, FuncGeneric, Function, FunctionCall, Grouped, HaltAndCatchFire, ImplementationBlock, Import, Index, IntegerLiteral, Item, Lambda, LambdaParameter, LetStatement, List, ListElement, - ListExpression, Literal, LocalVariable, MethodCall, NamedFieldExpression, ObjectWrapper, + ListExpression, Literal, LocalVariable, Map, MethodCall, NamedFieldExpression, ObjectWrapper, Operator, Parameter, PathElement, Pattern, RangeExpression, ResultStatement, Span, Statement, StaticMethodCall, StringBit, StringLiteral, StructExpression, StructField, StructGeneric, TupleField, TypeCast, Unary, Unit, UnnamedFieldExpression, ValueType, Variable, @@ -170,6 +171,7 @@ pub struct ObjectStore { literal: Arc>>>>, local_variable: Arc>>>>, x_macro: Arc>>>>, + map: Arc>>>>, x_match: Arc>>>>, method_call: Arc>>>>, named_field_expression: Arc>>>>, @@ -262,6 +264,7 @@ impl ObjectStore { literal: Arc::new(RwLock::new(HashMap::default())), local_variable: Arc::new(RwLock::new(HashMap::default())), x_macro: Arc::new(RwLock::new(HashMap::default())), + map: Arc::new(RwLock::new(HashMap::default())), x_match: Arc::new(RwLock::new(HashMap::default())), method_call: Arc::new(RwLock::new(HashMap::default())), named_field_expression: Arc::new(RwLock::new(HashMap::default())), @@ -2461,6 +2464,39 @@ impl ObjectStore { (0..len).map(move |i| values[i].clone()) } + /// Inter (insert) [`Map`] into the store. + /// + pub fn inter_map(&mut self, map: Arc>) { + let read = map.read().unwrap(); + self.map.write().unwrap().insert(read.id, map.clone()); + } + + /// Exhume (get) [`Map`] from the store. + /// + pub fn exhume_map(&self, id: &Uuid) -> Option>> { + self.map.read().unwrap().get(id).map(|map| map.clone()) + } + + /// Exorcise (remove) [`Map`] from the store. + /// + pub fn exorcise_map(&mut self, id: &Uuid) -> Option>> { + self.map.write().unwrap().remove(id).map(|map| map.clone()) + } + + /// Get an iterator over the internal `HashMap<&Uuid, Map>`. + /// + pub fn iter_map(&self) -> impl Iterator>> + '_ { + let values: Vec>> = self + .map + .read() + .unwrap() + .values() + .map(|map| map.clone()) + .collect(); + let len = values.len(); + (0..len).map(move |i| values[i].clone()) + } + /// Inter (insert) [`XMatch`] into the store. /// pub fn inter_x_match(&mut self, x_match: Arc>) { @@ -4580,6 +4616,18 @@ impl ObjectStore { } } + // Persist Map. + { + let path = path.join("map"); + fs::create_dir_all(&path)?; + for map in self.map.read().unwrap().values() { + let path = path.join(format!("{}.json", map.read().unwrap().id)); + let file = fs::File::create(path)?; + let mut writer = io::BufWriter::new(file); + serde_json::to_writer_pretty(&mut writer, &map)?; + } + } + // Persist Match. { let path = path.join("x_match"); @@ -5885,6 +5933,24 @@ impl ObjectStore { } } + // Load Map. + { + let path = path.join("map"); + let entries = fs::read_dir(path)?; + for entry in entries { + let entry = entry?; + let path = entry.path(); + let file = fs::File::open(path)?; + let reader = io::BufReader::new(file); + let map: Arc> = serde_json::from_reader(reader)?; + store + .map + .write() + .unwrap() + .insert(map.read().unwrap().id, map.clone()); + } + } + // Load Match. { let path = path.join("x_match"); diff --git a/src/v2/lu_dog_rwlock/types.rs b/src/v2/lu_dog_rwlock/types.rs index cf2ebaa9..b06439f8 100644 --- a/src/v2/lu_dog_rwlock/types.rs +++ b/src/v2/lu_dog_rwlock/types.rs @@ -64,6 +64,7 @@ pub mod list_expression; pub mod literal; pub mod local_variable; pub mod macro_call; +pub mod map; pub mod method_call; pub mod multiplication; pub mod named_field_expression; @@ -211,6 +212,7 @@ pub use crate::v2::lu_dog_rwlock::literal::LiteralEnum; pub use crate::v2::lu_dog_rwlock::local_variable::LocalVariable; pub use crate::v2::lu_dog_rwlock::macro_call::MacroCall; pub use crate::v2::lu_dog_rwlock::macro_call::MACRO_CALL; +pub use crate::v2::lu_dog_rwlock::map::Map; pub use crate::v2::lu_dog_rwlock::method_call::MethodCall; pub use crate::v2::lu_dog_rwlock::multiplication::Multiplication; pub use crate::v2::lu_dog_rwlock::multiplication::MULTIPLICATION; diff --git a/src/v2/lu_dog_rwlock/types/map.rs b/src/v2/lu_dog_rwlock/types/map.rs new file mode 100644 index 00000000..7009d244 --- /dev/null +++ b/src/v2/lu_dog_rwlock/types/map.rs @@ -0,0 +1,82 @@ +// {"magic":"","directive":{"Start":{"directive":"allow-editing","tag":"map-struct-definition-file"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-use-statements"}}} +use std::sync::Arc; +use std::sync::RwLock; +use uuid::Uuid; + +use crate::v2::lu_dog_rwlock::types::value_type::ValueType; +use crate::v2::lu_dog_rwlock::types::value_type::ValueTypeEnum; +use serde::{Deserialize, Serialize}; + +use crate::v2::lu_dog_rwlock::store::ObjectStore as LuDogRwlockStore; +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-documentation"}}} +/// This is a hashmap. +/// +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-definition"}}} +#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)] +pub struct Map { + pub id: Uuid, + /// R115: [`Map`] 'has a key' [`ValueType`] + pub key_type: Uuid, + /// R116: [`Map`] 'values have' [`ValueType`] + pub value_type: Uuid, +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-implementation"}}} +impl Map { + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-new"}}} + /// Inter a new 'Map' in the store, and return it's `id`. + pub fn new( + key_type: &Arc>, + value_type: &Arc>, + store: &mut LuDogRwlockStore, + ) -> Arc> { + let id = Uuid::new_v4(); + let new = Arc::new(RwLock::new(Map { + id, + key_type: key_type.read().unwrap().id, + value_type: value_type.read().unwrap().id, + })); + store.inter_map(new.clone()); + new + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-nav-forward-to-key_type"}}} + /// Navigate to [`ValueType`] across R115(1-*) + pub fn r115_value_type<'a>( + &'a self, + store: &'a LuDogRwlockStore, + ) -> Vec>> { + vec![store.exhume_value_type(&self.key_type).unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-nav-forward-to-value_type"}}} + /// Navigate to [`ValueType`] across R116(1-*) + pub fn r116_value_type<'a>( + &'a self, + store: &'a LuDogRwlockStore, + ) -> Vec>> { + vec![store.exhume_value_type(&self.value_type).unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-impl-nav-subtype-to-supertype-value_type"}}} + // Navigate to [`ValueType`] across R1(isa) + pub fn r1_value_type<'a>(&'a self, store: &'a LuDogRwlockStore) -> Vec>> { + vec![store + .iter_value_type() + .find(|value_type| { + if let ValueTypeEnum::Map(id) = value_type.read().unwrap().subtype { + id == self.id + } else { + false + } + }) + .unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"End":{"directive":"allow-editing"}}} diff --git a/src/v2/lu_dog_rwlock/types/value_type.rs b/src/v2/lu_dog_rwlock/types/value_type.rs index d089c990..360f6954 100644 --- a/src/v2/lu_dog_rwlock/types/value_type.rs +++ b/src/v2/lu_dog_rwlock/types/value_type.rs @@ -16,6 +16,7 @@ use crate::v2::lu_dog_rwlock::types::import::Import; use crate::v2::lu_dog_rwlock::types::lambda::Lambda; use crate::v2::lu_dog_rwlock::types::lambda_parameter::LambdaParameter; use crate::v2::lu_dog_rwlock::types::list::List; +use crate::v2::lu_dog_rwlock::types::map::Map; use crate::v2::lu_dog_rwlock::types::parameter::Parameter; use crate::v2::lu_dog_rwlock::types::range::RANGE; use crate::v2::lu_dog_rwlock::types::span::Span; @@ -79,6 +80,7 @@ pub enum ValueTypeEnum { Import(Uuid), Lambda(Uuid), List(Uuid), + Map(Uuid), ZObjectStore(Uuid), XPlugin(Uuid), Range(Uuid), @@ -267,6 +269,23 @@ impl ValueType { new } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-new_map"}}} + /// Inter a new ValueType in the store, and return it's `id`. + pub fn new_map( + bogus: bool, + subtype: &Arc>, + store: &mut LuDogRwlockStore, + ) -> Arc> { + let id = Uuid::new_v4(); + let new = Arc::new(RwLock::new(ValueType { + bogus: bogus, + subtype: ValueTypeEnum::Map(subtype.read().unwrap().id), // b + id, + })); + store.inter_value_type(new.clone()); + new + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-new_z_object_store"}}} /// Inter a new ValueType in the store, and return it's `id`. pub fn new_z_object_store( @@ -452,6 +471,23 @@ impl ValueType { } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-woog_option"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-map"}}} + /// Navigate to [`Map`] across R115(1-M) + pub fn r115_map<'a>(&'a self, store: &'a LuDogRwlockStore) -> Vec>> { + store + .iter_map() + .filter(|map| map.read().unwrap().key_type == self.id) + .collect() + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-map"}}} + /// Navigate to [`Map`] across R116(1-M) + pub fn r116_map<'a>(&'a self, store: &'a LuDogRwlockStore) -> Vec>> { + store + .iter_map() + .filter(|map| map.read().unwrap().value_type == self.id) + .collect() + } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-parameter"}}} /// Navigate to [`Parameter`] across R79(1-M) diff --git a/src/v2/lu_dog_rwlock_vec/store.rs b/src/v2/lu_dog_rwlock_vec/store.rs index 69505495..ecb4f174 100644 --- a/src/v2/lu_dog_rwlock_vec/store.rs +++ b/src/v2/lu_dog_rwlock_vec/store.rs @@ -55,6 +55,7 @@ //! * [`Literal`] //! * [`LocalVariable`] //! * [`XMacro`] +//! * [`Map`] //! * [`XMatch`] //! * [`MethodCall`] //! * [`NamedFieldExpression`] @@ -110,7 +111,7 @@ use crate::v2::lu_dog_rwlock_vec::types::{ FieldAccessTarget, FieldExpression, FloatLiteral, ForLoop, FormatBit, FormatString, FuncGeneric, Function, FunctionCall, Grouped, HaltAndCatchFire, ImplementationBlock, Import, Index, IntegerLiteral, Item, Lambda, LambdaParameter, LetStatement, List, ListElement, - ListExpression, Literal, LocalVariable, MethodCall, NamedFieldExpression, ObjectWrapper, + ListExpression, Literal, LocalVariable, Map, MethodCall, NamedFieldExpression, ObjectWrapper, Operator, Parameter, PathElement, Pattern, RangeExpression, ResultStatement, Span, Statement, StaticMethodCall, StringBit, StringLiteral, StructExpression, StructField, StructGeneric, TupleField, TypeCast, Unary, Unit, UnnamedFieldExpression, ValueType, Variable, @@ -223,6 +224,8 @@ pub struct ObjectStore { local_variable: Arc>>>>>, x_macro_free_list: std::sync::Mutex>, x_macro: Arc>>>>>, + map_free_list: std::sync::Mutex>, + map: Arc>>>>>, x_match_free_list: std::sync::Mutex>, x_match: Arc>>>>>, method_call_free_list: std::sync::Mutex>, @@ -437,6 +440,8 @@ impl Clone for ObjectStore { local_variable: self.local_variable.clone(), x_macro_free_list: Mutex::new(self.x_macro_free_list.lock().unwrap().clone()), x_macro: self.x_macro.clone(), + map_free_list: Mutex::new(self.map_free_list.lock().unwrap().clone()), + map: self.map.clone(), x_match_free_list: Mutex::new(self.x_match_free_list.lock().unwrap().clone()), x_match: self.x_match.clone(), method_call_free_list: Mutex::new(self.method_call_free_list.lock().unwrap().clone()), @@ -639,6 +644,8 @@ impl ObjectStore { local_variable: Arc::new(RwLock::new(Vec::new())), x_macro_free_list: std::sync::Mutex::new(Vec::new()), x_macro: Arc::new(RwLock::new(Vec::new())), + map_free_list: std::sync::Mutex::new(Vec::new()), + map: Arc::new(RwLock::new(Vec::new())), x_match_free_list: std::sync::Mutex::new(Vec::new()), x_match: Arc::new(RwLock::new(Vec::new())), method_call_free_list: std::sync::Mutex::new(Vec::new()), @@ -4615,6 +4622,83 @@ impl ObjectStore { }) } + /// Inter (insert) [`Map`] into the store. + /// + #[inline] + pub fn inter_map(&mut self, map: F) -> Arc> + where + F: Fn(usize) -> Arc>, + { + let _index = if let Some(_index) = self.map_free_list.lock().unwrap().pop() { + tracing::trace!(target: "store", "recycling block {_index}."); + _index + } else { + let _index = self.map.read().unwrap().len(); + tracing::trace!(target: "store", "allocating block {_index}."); + self.map.write().unwrap().push(None); + _index + }; + + let map = map(_index); + + let found = if let Some(map) = self.map.read().unwrap().iter().find(|stored| { + if let Some(stored) = stored { + *stored.read().unwrap() == *map.read().unwrap() + } else { + false + } + }) { + map.clone() + } else { + None + }; + + if let Some(map) = found { + tracing::debug!(target: "store", "found duplicate {map:?}."); + self.map_free_list.lock().unwrap().push(_index); + map.clone() + } else { + tracing::debug!(target: "store", "interring {map:?}."); + self.map.write().unwrap()[_index] = Some(map.clone()); + map + } + } + + /// Exhume (get) [`Map`] from the store. + /// + #[inline] + pub fn exhume_map(&self, id: &usize) -> Option>> { + match self.map.read().unwrap().get(*id) { + Some(map) => map.clone(), + None => None, + } + } + + /// Exorcise (remove) [`Map`] from the store. + /// + #[inline] + pub fn exorcise_map(&mut self, id: &usize) -> Option>> { + tracing::debug!(target: "store", "exorcising map slot: {id}."); + let result = self.map.write().unwrap()[*id].take(); + self.map_free_list.lock().unwrap().push(*id); + result + } + + /// Get an iterator over the internal `HashMap<&Uuid, Map>`. + /// + #[inline] + pub fn iter_map(&self) -> impl Iterator>> + '_ { + let len = self.map.read().unwrap().len(); + (0..len) + .filter(|i| self.map.read().unwrap()[*i].is_some()) + .map(move |i| { + self.map.read().unwrap()[i] + .as_ref() + .map(|map| map.clone()) + .unwrap() + }) + } + /// Inter (insert) [`XMatch`] into the store. /// #[inline] @@ -8032,6 +8116,20 @@ impl ObjectStore { } } + // Persist Map. + { + let path = path.join("map"); + fs::create_dir_all(&path)?; + for map in &*self.map.read().unwrap() { + if let Some(map) = map { + let path = path.join(format!("{}.json", map.read().unwrap().id)); + let file = fs::File::create(path)?; + let mut writer = io::BufWriter::new(file); + serde_json::to_writer_pretty(&mut writer, &map)?; + } + } + } + // Persist Match. { let path = path.join("x_match"); @@ -9394,6 +9492,24 @@ impl ObjectStore { } } + // Load Map. + { + let path = path.join("map"); + let entries = fs::read_dir(path)?; + for entry in entries { + let entry = entry?; + let path = entry.path(); + let file = fs::File::open(path)?; + let reader = io::BufReader::new(file); + let map: Arc> = serde_json::from_reader(reader)?; + store + .map + .write() + .unwrap() + .insert(map.read().unwrap().id, Some(map.clone())); + } + } + // Load Match. { let path = path.join("x_match"); diff --git a/src/v2/lu_dog_rwlock_vec/types.rs b/src/v2/lu_dog_rwlock_vec/types.rs index f095eb1e..c41f7955 100644 --- a/src/v2/lu_dog_rwlock_vec/types.rs +++ b/src/v2/lu_dog_rwlock_vec/types.rs @@ -64,6 +64,7 @@ pub mod list_expression; pub mod literal; pub mod local_variable; pub mod macro_call; +pub mod map; pub mod method_call; pub mod multiplication; pub mod named_field_expression; @@ -211,6 +212,7 @@ pub use crate::v2::lu_dog_rwlock_vec::literal::LiteralEnum; pub use crate::v2::lu_dog_rwlock_vec::local_variable::LocalVariable; pub use crate::v2::lu_dog_rwlock_vec::macro_call::MacroCall; pub use crate::v2::lu_dog_rwlock_vec::macro_call::MACRO_CALL; +pub use crate::v2::lu_dog_rwlock_vec::map::Map; pub use crate::v2::lu_dog_rwlock_vec::method_call::MethodCall; pub use crate::v2::lu_dog_rwlock_vec::multiplication::Multiplication; pub use crate::v2::lu_dog_rwlock_vec::multiplication::MULTIPLICATION; diff --git a/src/v2/lu_dog_rwlock_vec/types/map.rs b/src/v2/lu_dog_rwlock_vec/types/map.rs new file mode 100644 index 00000000..568dba25 --- /dev/null +++ b/src/v2/lu_dog_rwlock_vec/types/map.rs @@ -0,0 +1,91 @@ +// {"magic":"","directive":{"Start":{"directive":"allow-editing","tag":"map-struct-definition-file"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-use-statements"}}} +use std::sync::Arc; +use std::sync::RwLock; +use uuid::Uuid; + +use crate::v2::lu_dog_rwlock_vec::types::value_type::ValueType; +use crate::v2::lu_dog_rwlock_vec::types::value_type::ValueTypeEnum; +use serde::{Deserialize, Serialize}; + +use crate::v2::lu_dog_rwlock_vec::store::ObjectStore as LuDogRwlockVecStore; +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-documentation"}}} +/// This is a hashmap. +/// +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-definition"}}} +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct Map { + pub id: usize, + /// R115: [`Map`] 'has a key' [`ValueType`] + pub key_type: usize, + /// R116: [`Map`] 'values have' [`ValueType`] + pub value_type: usize, +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-implementation"}}} +impl Map { + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-new"}}} + /// Inter a new 'Map' in the store, and return it's `id`. + pub fn new( + key_type: &Arc>, + value_type: &Arc>, + store: &mut LuDogRwlockVecStore, + ) -> Arc> { + store.inter_map(|id| { + Arc::new(RwLock::new(Map { + id, + key_type: key_type.read().unwrap().id, + value_type: value_type.read().unwrap().id, + })) + }) + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-nav-forward-to-key_type"}}} + /// Navigate to [`ValueType`] across R115(1-*) + pub fn r115_value_type<'a>( + &'a self, + store: &'a LuDogRwlockVecStore, + ) -> Vec>> { + vec![store.exhume_value_type(&self.key_type).unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-nav-forward-to-value_type"}}} + /// Navigate to [`ValueType`] across R116(1-*) + pub fn r116_value_type<'a>( + &'a self, + store: &'a LuDogRwlockVecStore, + ) -> Vec>> { + vec![store.exhume_value_type(&self.value_type).unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-impl-nav-subtype-to-supertype-value_type"}}} + // Navigate to [`ValueType`] across R1(isa) + pub fn r1_value_type<'a>( + &'a self, + store: &'a LuDogRwlockVecStore, + ) -> Vec>> { + vec![store + .iter_value_type() + .find(|value_type| { + if let ValueTypeEnum::Map(id) = value_type.read().unwrap().subtype { + id == self.id + } else { + false + } + }) + .unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-implementation"}}} +impl PartialEq for Map { + fn eq(&self, other: &Self) -> bool { + self.key_type == other.key_type && self.value_type == other.value_type + } +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"End":{"directive":"allow-editing"}}} diff --git a/src/v2/lu_dog_rwlock_vec/types/value_type.rs b/src/v2/lu_dog_rwlock_vec/types/value_type.rs index dd9dd88d..22b5338d 100644 --- a/src/v2/lu_dog_rwlock_vec/types/value_type.rs +++ b/src/v2/lu_dog_rwlock_vec/types/value_type.rs @@ -16,6 +16,7 @@ use crate::v2::lu_dog_rwlock_vec::types::import::Import; use crate::v2::lu_dog_rwlock_vec::types::lambda::Lambda; use crate::v2::lu_dog_rwlock_vec::types::lambda_parameter::LambdaParameter; use crate::v2::lu_dog_rwlock_vec::types::list::List; +use crate::v2::lu_dog_rwlock_vec::types::map::Map; use crate::v2::lu_dog_rwlock_vec::types::parameter::Parameter; use crate::v2::lu_dog_rwlock_vec::types::range::RANGE; use crate::v2::lu_dog_rwlock_vec::types::span::Span; @@ -77,6 +78,7 @@ pub enum ValueTypeEnum { Import(usize), Lambda(usize), List(usize), + Map(usize), ZObjectStore(usize), XPlugin(usize), Range(Uuid), @@ -257,6 +259,22 @@ impl ValueType { }) } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-new_map"}}} + /// Inter a new ValueType in the store, and return it's `id`. + pub fn new_map( + bogus: bool, + subtype: &Arc>, + store: &mut LuDogRwlockVecStore, + ) -> Arc> { + store.inter_value_type(|id| { + Arc::new(RwLock::new(ValueType { + bogus: bogus, + subtype: ValueTypeEnum::Map(subtype.read().unwrap().id), // b + id, + })) + }) + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-new_z_object_store"}}} /// Inter a new ValueType in the store, and return it's `id`. pub fn new_z_object_store( @@ -441,6 +459,23 @@ impl ValueType { } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-woog_option"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-map"}}} + /// Navigate to [`Map`] across R115(1-M) + pub fn r115_map<'a>(&'a self, store: &'a LuDogRwlockVecStore) -> Vec>> { + store + .iter_map() + .filter(|map| map.read().unwrap().key_type == self.id) + .collect() + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-map"}}} + /// Navigate to [`Map`] across R116(1-M) + pub fn r116_map<'a>(&'a self, store: &'a LuDogRwlockVecStore) -> Vec>> { + store + .iter_map() + .filter(|map| map.read().unwrap().value_type == self.id) + .collect() + } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-parameter"}}} /// Navigate to [`Parameter`] across R79(1-M) diff --git a/src/v2/lu_dog_vec/store.rs b/src/v2/lu_dog_vec/store.rs index 839bb585..da2b8bca 100644 --- a/src/v2/lu_dog_vec/store.rs +++ b/src/v2/lu_dog_vec/store.rs @@ -55,6 +55,7 @@ //! * [`Literal`] //! * [`LocalVariable`] //! * [`XMacro`] +//! * [`Map`] //! * [`XMatch`] //! * [`MethodCall`] //! * [`NamedFieldExpression`] @@ -109,7 +110,7 @@ use crate::v2::lu_dog_vec::types::{ FieldAccessTarget, FieldExpression, FloatLiteral, ForLoop, FormatBit, FormatString, FuncGeneric, Function, FunctionCall, Grouped, HaltAndCatchFire, ImplementationBlock, Import, Index, IntegerLiteral, Item, Lambda, LambdaParameter, LetStatement, List, ListElement, - ListExpression, Literal, LocalVariable, MethodCall, NamedFieldExpression, ObjectWrapper, + ListExpression, Literal, LocalVariable, Map, MethodCall, NamedFieldExpression, ObjectWrapper, Operator, Parameter, PathElement, Pattern, RangeExpression, ResultStatement, Span, Statement, StaticMethodCall, StringBit, StringLiteral, StructExpression, StructField, StructGeneric, TupleField, TypeCast, Unary, Unit, UnnamedFieldExpression, ValueType, Variable, @@ -222,6 +223,8 @@ pub struct ObjectStore { local_variable: Vec>>>, x_macro_free_list: Vec, x_macro: Vec>>>, + map_free_list: Vec, + map: Vec>>>, x_match_free_list: Vec, x_match: Vec>>>, method_call_free_list: Vec, @@ -436,6 +439,8 @@ impl Clone for ObjectStore { local_variable: self.local_variable.clone(), x_macro_free_list: Mutex::new(self.x_macro_free_list.lock().unwrap().clone()), x_macro: self.x_macro.clone(), + map_free_list: Mutex::new(self.map_free_list.lock().unwrap().clone()), + map: self.map.clone(), x_match_free_list: Mutex::new(self.x_match_free_list.lock().unwrap().clone()), x_match: self.x_match.clone(), method_call_free_list: Mutex::new(self.method_call_free_list.lock().unwrap().clone()), @@ -638,6 +643,8 @@ impl ObjectStore { local_variable: Vec::new(), x_macro_free_list: Vec::new(), x_macro: Vec::new(), + map_free_list: Vec::new(), + map: Vec::new(), x_match_free_list: Vec::new(), x_match: Vec::new(), method_call_free_list: Vec::new(), @@ -4188,6 +4195,72 @@ impl ObjectStore { }) } + /// Inter (insert) [`Map`] into the store. + /// + #[inline] + pub fn inter_map(&mut self, map: F) -> Rc> + where + F: Fn(usize) -> Rc>, + { + let _index = if let Some(_index) = self.map_free_list.pop() { + tracing::trace!(target: "store", "recycling block {_index}."); + _index + } else { + let _index = self.map.len(); + tracing::trace!(target: "store", "allocating block {_index}."); + self.map.push(None); + _index + }; + + let map = map(_index); + + if let Some(Some(map)) = self.map.iter().find(|stored| { + if let Some(stored) = stored { + *stored.borrow() == *map.borrow() + } else { + false + } + }) { + tracing::debug!(target: "store", "found duplicate {map:?}."); + self.map_free_list.push(_index); + map.clone() + } else { + tracing::debug!(target: "store", "interring {map:?}."); + self.map[_index] = Some(map.clone()); + map + } + } + + /// Exhume (get) [`Map`] from the store. + /// + #[inline] + pub fn exhume_map(&self, id: &usize) -> Option>> { + match self.map.get(*id) { + Some(map) => map.clone(), + None => None, + } + } + + /// Exorcise (remove) [`Map`] from the store. + /// + #[inline] + pub fn exorcise_map(&mut self, id: &usize) -> Option>> { + tracing::debug!(target: "store", "exorcising map slot: {id}."); + let result = self.map[*id].take(); + self.map_free_list.push(*id); + result + } + + /// Get an iterator over the internal `HashMap<&Uuid, Map>`. + /// + #[inline] + pub fn iter_map(&self) -> impl Iterator>> + '_ { + let len = self.map.len(); + (0..len) + .filter(|i| self.map[*i].is_some()) + .map(move |i| self.map[i].as_ref().map(|map| map.clone()).unwrap()) + } + /// Inter (insert) [`XMatch`] into the store. /// #[inline] @@ -7312,6 +7385,20 @@ impl ObjectStore { } } + // Persist Map. + { + let path = path.join("map"); + fs::create_dir_all(&path)?; + for map in &self.map { + if let Some(map) = map { + let path = path.join(format!("{}.json", map.borrow().id)); + let file = fs::File::create(path)?; + let mut writer = io::BufWriter::new(file); + serde_json::to_writer_pretty(&mut writer, &map)?; + } + } + } + // Persist Match. { let path = path.join("x_match"); @@ -8578,6 +8665,20 @@ impl ObjectStore { } } + // Load Map. + { + let path = path.join("map"); + let entries = fs::read_dir(path)?; + for entry in entries { + let entry = entry?; + let path = entry.path(); + let file = fs::File::open(path)?; + let reader = io::BufReader::new(file); + let map: Rc> = serde_json::from_reader(reader)?; + store.map.insert(map.borrow().id, Some(map.clone())); + } + } + // Load Match. { let path = path.join("x_match"); diff --git a/src/v2/lu_dog_vec/types.rs b/src/v2/lu_dog_vec/types.rs index de2d4d55..3063c9be 100644 --- a/src/v2/lu_dog_vec/types.rs +++ b/src/v2/lu_dog_vec/types.rs @@ -64,6 +64,7 @@ pub mod list_expression; pub mod literal; pub mod local_variable; pub mod macro_call; +pub mod map; pub mod method_call; pub mod multiplication; pub mod named_field_expression; @@ -211,6 +212,7 @@ pub use crate::v2::lu_dog_vec::literal::LiteralEnum; pub use crate::v2::lu_dog_vec::local_variable::LocalVariable; pub use crate::v2::lu_dog_vec::macro_call::MacroCall; pub use crate::v2::lu_dog_vec::macro_call::MACRO_CALL; +pub use crate::v2::lu_dog_vec::map::Map; pub use crate::v2::lu_dog_vec::method_call::MethodCall; pub use crate::v2::lu_dog_vec::multiplication::Multiplication; pub use crate::v2::lu_dog_vec::multiplication::MULTIPLICATION; diff --git a/src/v2/lu_dog_vec/types/map.rs b/src/v2/lu_dog_vec/types/map.rs new file mode 100644 index 00000000..e3d77cc4 --- /dev/null +++ b/src/v2/lu_dog_vec/types/map.rs @@ -0,0 +1,82 @@ +// {"magic":"","directive":{"Start":{"directive":"allow-editing","tag":"map-struct-definition-file"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-use-statements"}}} +use std::cell::RefCell; +use std::rc::Rc; +use uuid::Uuid; + +use crate::v2::lu_dog_vec::types::value_type::ValueType; +use crate::v2::lu_dog_vec::types::value_type::ValueTypeEnum; +use serde::{Deserialize, Serialize}; + +use crate::v2::lu_dog_vec::store::ObjectStore as LuDogVecStore; +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-documentation"}}} +/// This is a hashmap. +/// +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-definition"}}} +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct Map { + pub id: usize, + /// R115: [`Map`] 'has a key' [`ValueType`] + pub key_type: usize, + /// R116: [`Map`] 'values have' [`ValueType`] + pub value_type: usize, +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-implementation"}}} +impl Map { + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-new"}}} + /// Inter a new 'Map' in the store, and return it's `id`. + pub fn new( + key_type: &Rc>, + value_type: &Rc>, + store: &mut LuDogVecStore, + ) -> Rc> { + store.inter_map(|id| { + Rc::new(RefCell::new(Map { + id, + key_type: key_type.borrow().id, + value_type: value_type.borrow().id, + })) + }) + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-nav-forward-to-key_type"}}} + /// Navigate to [`ValueType`] across R115(1-*) + pub fn r115_value_type<'a>(&'a self, store: &'a LuDogVecStore) -> Vec>> { + vec![store.exhume_value_type(&self.key_type).unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-nav-forward-to-value_type"}}} + /// Navigate to [`ValueType`] across R116(1-*) + pub fn r116_value_type<'a>(&'a self, store: &'a LuDogVecStore) -> Vec>> { + vec![store.exhume_value_type(&self.value_type).unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-impl-nav-subtype-to-supertype-value_type"}}} + // Navigate to [`ValueType`] across R1(isa) + pub fn r1_value_type<'a>(&'a self, store: &'a LuDogVecStore) -> Vec>> { + vec![store + .iter_value_type() + .find(|value_type| { + if let ValueTypeEnum::Map(id) = value_type.borrow().subtype { + id == self.id + } else { + false + } + }) + .unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-implementation"}}} +impl PartialEq for Map { + fn eq(&self, other: &Self) -> bool { + self.key_type == other.key_type && self.value_type == other.value_type + } +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"End":{"directive":"allow-editing"}}} diff --git a/src/v2/lu_dog_vec/types/value_type.rs b/src/v2/lu_dog_vec/types/value_type.rs index d9fed96f..6b4821fe 100644 --- a/src/v2/lu_dog_vec/types/value_type.rs +++ b/src/v2/lu_dog_vec/types/value_type.rs @@ -16,6 +16,7 @@ use crate::v2::lu_dog_vec::types::import::Import; use crate::v2::lu_dog_vec::types::lambda::Lambda; use crate::v2::lu_dog_vec::types::lambda_parameter::LambdaParameter; use crate::v2::lu_dog_vec::types::list::List; +use crate::v2::lu_dog_vec::types::map::Map; use crate::v2::lu_dog_vec::types::parameter::Parameter; use crate::v2::lu_dog_vec::types::range::RANGE; use crate::v2::lu_dog_vec::types::span::Span; @@ -77,6 +78,7 @@ pub enum ValueTypeEnum { Import(usize), Lambda(usize), List(usize), + Map(usize), ZObjectStore(usize), XPlugin(usize), Range(Uuid), @@ -258,6 +260,22 @@ impl ValueType { }) } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-new_map"}}} + /// Inter a new ValueType in the store, and return it's `id`. + pub fn new_map( + bogus: bool, + subtype: &Rc>, + store: &mut LuDogVecStore, + ) -> Rc> { + store.inter_value_type(|id| { + Rc::new(RefCell::new(ValueType { + bogus: bogus, + subtype: ValueTypeEnum::Map(subtype.borrow().id), // b + id, + })) + }) + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-new_z_object_store"}}} /// Inter a new ValueType in the store, and return it's `id`. pub fn new_z_object_store( @@ -442,6 +460,24 @@ impl ValueType { .collect() } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-map"}}} + /// Navigate to [`Map`] across R115(1-M) + pub fn r115_map<'a>(&'a self, store: &'a LuDogVecStore) -> Vec>> { + store + .iter_map() + .filter(|map| map.borrow().key_type == self.id) + .collect() + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-map"}}} + /// Navigate to [`Map`] across R116(1-M) + pub fn r116_map<'a>(&'a self, store: &'a LuDogVecStore) -> Vec>> { + store + .iter_map() + .filter(|map| map.borrow().value_type == self.id) + .collect() + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-parameter"}}} /// Navigate to [`Parameter`] across R79(1-M) pub fn r79_parameter<'a>(&'a self, store: &'a LuDogVecStore) -> Vec>> { diff --git a/src/v2/lu_dog_vec_tracy/store.rs b/src/v2/lu_dog_vec_tracy/store.rs index 81aa55e0..b461157b 100644 --- a/src/v2/lu_dog_vec_tracy/store.rs +++ b/src/v2/lu_dog_vec_tracy/store.rs @@ -55,6 +55,7 @@ //! * [`Literal`] //! * [`LocalVariable`] //! * [`XMacro`] +//! * [`Map`] //! * [`XMatch`] //! * [`MethodCall`] //! * [`NamedFieldExpression`] @@ -109,7 +110,7 @@ use crate::v2::lu_dog_vec_tracy::types::{ FieldAccessTarget, FieldExpression, FloatLiteral, ForLoop, FormatBit, FormatString, FuncGeneric, Function, FunctionCall, Grouped, HaltAndCatchFire, ImplementationBlock, Import, Index, IntegerLiteral, Item, Lambda, LambdaParameter, LetStatement, List, ListElement, - ListExpression, Literal, LocalVariable, MethodCall, NamedFieldExpression, ObjectWrapper, + ListExpression, Literal, LocalVariable, Map, MethodCall, NamedFieldExpression, ObjectWrapper, Operator, Parameter, PathElement, Pattern, RangeExpression, ResultStatement, Span, Statement, StaticMethodCall, StringBit, StringLiteral, StructExpression, StructField, StructGeneric, TupleField, TypeCast, Unary, Unit, UnnamedFieldExpression, ValueType, Variable, @@ -222,6 +223,8 @@ pub struct ObjectStore { local_variable: Vec>>>, x_macro_free_list: Vec, x_macro: Vec>>>, + map_free_list: Vec, + map: Vec>>>, x_match_free_list: Vec, x_match: Vec>>>, method_call_free_list: Vec, @@ -436,6 +439,8 @@ impl Clone for ObjectStore { local_variable: self.local_variable.clone(), x_macro_free_list: Mutex::new(self.x_macro_free_list.lock().unwrap().clone()), x_macro: self.x_macro.clone(), + map_free_list: Mutex::new(self.map_free_list.lock().unwrap().clone()), + map: self.map.clone(), x_match_free_list: Mutex::new(self.x_match_free_list.lock().unwrap().clone()), x_match: self.x_match.clone(), method_call_free_list: Mutex::new(self.method_call_free_list.lock().unwrap().clone()), @@ -638,6 +643,8 @@ impl ObjectStore { local_variable: Vec::new(), x_macro_free_list: Vec::new(), x_macro: Vec::new(), + map_free_list: Vec::new(), + map: Vec::new(), x_match_free_list: Vec::new(), x_match: Vec::new(), method_call_free_list: Vec::new(), @@ -4188,6 +4195,72 @@ impl ObjectStore { }) } + /// Inter (insert) [`Map`] into the store. + /// + #[inline] + pub fn inter_map(&mut self, map: F) -> Rc> + where + F: Fn(usize) -> Rc>, + { + let _index = if let Some(_index) = self.map_free_list.pop() { + tracing::trace!(target: "store", "recycling block {_index}."); + _index + } else { + let _index = self.map.len(); + tracing::trace!(target: "store", "allocating block {_index}."); + self.map.push(None); + _index + }; + + let map = map(_index); + + if let Some(Some(map)) = self.map.iter().find(|stored| { + if let Some(stored) = stored { + *stored.borrow() == *map.borrow() + } else { + false + } + }) { + tracing::debug!(target: "store", "found duplicate {map:?}."); + self.map_free_list.push(_index); + map.clone() + } else { + tracing::debug!(target: "store", "interring {map:?}."); + self.map[_index] = Some(map.clone()); + map + } + } + + /// Exhume (get) [`Map`] from the store. + /// + #[inline] + pub fn exhume_map(&self, id: &usize) -> Option>> { + match self.map.get(*id) { + Some(map) => map.clone(), + None => None, + } + } + + /// Exorcise (remove) [`Map`] from the store. + /// + #[inline] + pub fn exorcise_map(&mut self, id: &usize) -> Option>> { + tracing::debug!(target: "store", "exorcising map slot: {id}."); + let result = self.map[*id].take(); + self.map_free_list.push(*id); + result + } + + /// Get an iterator over the internal `HashMap<&Uuid, Map>`. + /// + #[inline] + pub fn iter_map(&self) -> impl Iterator>> + '_ { + let len = self.map.len(); + (0..len) + .filter(|i| self.map[*i].is_some()) + .map(move |i| self.map[i].as_ref().map(|map| map.clone()).unwrap()) + } + /// Inter (insert) [`XMatch`] into the store. /// #[inline] @@ -7312,6 +7385,20 @@ impl ObjectStore { } } + // Persist Map. + { + let path = path.join("map"); + fs::create_dir_all(&path)?; + for map in &self.map { + if let Some(map) = map { + let path = path.join(format!("{}.json", map.borrow().id)); + let file = fs::File::create(path)?; + let mut writer = io::BufWriter::new(file); + serde_json::to_writer_pretty(&mut writer, &map)?; + } + } + } + // Persist Match. { let path = path.join("x_match"); @@ -8578,6 +8665,20 @@ impl ObjectStore { } } + // Load Map. + { + let path = path.join("map"); + let entries = fs::read_dir(path)?; + for entry in entries { + let entry = entry?; + let path = entry.path(); + let file = fs::File::open(path)?; + let reader = io::BufReader::new(file); + let map: Rc> = serde_json::from_reader(reader)?; + store.map.insert(map.borrow().id, Some(map.clone())); + } + } + // Load Match. { let path = path.join("x_match"); diff --git a/src/v2/lu_dog_vec_tracy/types.rs b/src/v2/lu_dog_vec_tracy/types.rs index 6c25e850..d9f18fc8 100644 --- a/src/v2/lu_dog_vec_tracy/types.rs +++ b/src/v2/lu_dog_vec_tracy/types.rs @@ -64,6 +64,7 @@ pub mod list_expression; pub mod literal; pub mod local_variable; pub mod macro_call; +pub mod map; pub mod method_call; pub mod multiplication; pub mod named_field_expression; @@ -211,6 +212,7 @@ pub use crate::v2::lu_dog_vec_tracy::literal::LiteralEnum; pub use crate::v2::lu_dog_vec_tracy::local_variable::LocalVariable; pub use crate::v2::lu_dog_vec_tracy::macro_call::MacroCall; pub use crate::v2::lu_dog_vec_tracy::macro_call::MACRO_CALL; +pub use crate::v2::lu_dog_vec_tracy::map::Map; pub use crate::v2::lu_dog_vec_tracy::method_call::MethodCall; pub use crate::v2::lu_dog_vec_tracy::multiplication::Multiplication; pub use crate::v2::lu_dog_vec_tracy::multiplication::MULTIPLICATION; diff --git a/src/v2/lu_dog_vec_tracy/types/map.rs b/src/v2/lu_dog_vec_tracy/types/map.rs new file mode 100644 index 00000000..d801a7f5 --- /dev/null +++ b/src/v2/lu_dog_vec_tracy/types/map.rs @@ -0,0 +1,95 @@ +// {"magic":"","directive":{"Start":{"directive":"allow-editing","tag":"map-struct-definition-file"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-use-statements"}}} +use std::cell::RefCell; +use std::rc::Rc; +use tracy_client::span; +use uuid::Uuid; + +use crate::v2::lu_dog_vec_tracy::types::value_type::ValueType; +use crate::v2::lu_dog_vec_tracy::types::value_type::ValueTypeEnum; +use serde::{Deserialize, Serialize}; + +use crate::v2::lu_dog_vec_tracy::store::ObjectStore as LuDogVecTracyStore; +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-documentation"}}} +/// This is a hashmap. +/// +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-definition"}}} +#[derive(Clone, Debug, Deserialize, Serialize)] +pub struct Map { + pub id: usize, + /// R115: [`Map`] 'has a key' [`ValueType`] + pub key_type: usize, + /// R116: [`Map`] 'values have' [`ValueType`] + pub value_type: usize, +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-implementation"}}} +impl Map { + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-new"}}} + /// Inter a new 'Map' in the store, and return it's `id`. + pub fn new( + key_type: &Rc>, + value_type: &Rc>, + store: &mut LuDogVecTracyStore, + ) -> Rc> { + store.inter_map(|id| { + Rc::new(RefCell::new(Map { + id, + key_type: key_type.borrow().id, + value_type: value_type.borrow().id, + })) + }) + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-nav-forward-to-key_type"}}} + /// Navigate to [`ValueType`] across R115(1-*) + pub fn r115_value_type<'a>( + &'a self, + store: &'a LuDogVecTracyStore, + ) -> Vec>> { + span!("r115_value_type"); + vec![store.exhume_value_type(&self.key_type).unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-struct-impl-nav-forward-to-value_type"}}} + /// Navigate to [`ValueType`] across R116(1-*) + pub fn r116_value_type<'a>( + &'a self, + store: &'a LuDogVecTracyStore, + ) -> Vec>> { + span!("r116_value_type"); + vec![store.exhume_value_type(&self.value_type).unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-impl-nav-subtype-to-supertype-value_type"}}} + // Navigate to [`ValueType`] across R1(isa) + pub fn r1_value_type<'a>( + &'a self, + store: &'a LuDogVecTracyStore, + ) -> Vec>> { + span!("r1_value_type"); + vec![store + .iter_value_type() + .find(|value_type| { + if let ValueTypeEnum::Map(id) = value_type.borrow().subtype { + id == self.id + } else { + false + } + }) + .unwrap()] + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"map-implementation"}}} +impl PartialEq for Map { + fn eq(&self, other: &Self) -> bool { + self.key_type == other.key_type && self.value_type == other.value_type + } +} +// {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} +// {"magic":"","directive":{"End":{"directive":"allow-editing"}}} diff --git a/src/v2/lu_dog_vec_tracy/types/value_type.rs b/src/v2/lu_dog_vec_tracy/types/value_type.rs index 08a99e68..3cdd8f87 100644 --- a/src/v2/lu_dog_vec_tracy/types/value_type.rs +++ b/src/v2/lu_dog_vec_tracy/types/value_type.rs @@ -17,6 +17,7 @@ use crate::v2::lu_dog_vec_tracy::types::import::Import; use crate::v2::lu_dog_vec_tracy::types::lambda::Lambda; use crate::v2::lu_dog_vec_tracy::types::lambda_parameter::LambdaParameter; use crate::v2::lu_dog_vec_tracy::types::list::List; +use crate::v2::lu_dog_vec_tracy::types::map::Map; use crate::v2::lu_dog_vec_tracy::types::parameter::Parameter; use crate::v2::lu_dog_vec_tracy::types::range::RANGE; use crate::v2::lu_dog_vec_tracy::types::span::Span; @@ -78,6 +79,7 @@ pub enum ValueTypeEnum { Import(usize), Lambda(usize), List(usize), + Map(usize), ZObjectStore(usize), XPlugin(usize), Range(Uuid), @@ -256,6 +258,22 @@ impl ValueType { }) } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-new_map"}}} + /// Inter a new ValueType in the store, and return it's `id`. + pub fn new_map( + bogus: bool, + subtype: &Rc>, + store: &mut LuDogVecTracyStore, + ) -> Rc> { + store.inter_value_type(|id| { + Rc::new(RefCell::new(ValueType { + bogus: bogus, + subtype: ValueTypeEnum::Map(subtype.borrow().id), // b + id, + })) + }) + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-new_z_object_store"}}} /// Inter a new ValueType in the store, and return it's `id`. pub fn new_z_object_store( @@ -438,6 +456,26 @@ impl ValueType { .collect() } // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-map"}}} + /// Navigate to [`Map`] across R115(1-M) + pub fn r115_map<'a>(&'a self, store: &'a LuDogVecTracyStore) -> Vec>> { + span!("r115_map"); + store + .iter_map() + .filter(|map| map.borrow().key_type == self.id) + .collect() + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} + // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-map"}}} + /// Navigate to [`Map`] across R116(1-M) + pub fn r116_map<'a>(&'a self, store: &'a LuDogVecTracyStore) -> Vec>> { + span!("r116_map"); + store + .iter_map() + .filter(|map| map.borrow().value_type == self.id) + .collect() + } + // {"magic":"","directive":{"End":{"directive":"ignore-orig"}}} // {"magic":"","directive":{"Start":{"directive":"ignore-orig","tag":"value_type-struct-impl-nav-backward-1_M-to-parameter"}}} /// Navigate to [`Parameter`] across R79(1-M) pub fn r79_parameter<'a>(