{ "nodes":[ {"id":"5b06772bb07664ff","type":"group","x":-640,"y":-1120,"width":3600,"height":2400,"label":"Server"}, {"id":"9dea3c8a07580007","type":"group","x":-540,"y":478,"width":1220,"height":680,"label":"Message part send"}, {"id":"7739193640a70e9a","type":"group","x":626,"y":-980,"width":718,"height":1048,"label":"#6 Client is not connected"}, {"id":"e38c0c52d5c9b80d","type":"group","x":1530,"y":-122,"width":1330,"height":462,"label":"Connected clients iteration"}, {"id":"4b41cc8d4b75604e","type":"group","x":-540,"y":-448,"width":1025,"height":516,"label":"#4 Client is connected"}, {"id":"4e7a5c0a9fa6e877","type":"group","x":741,"y":519,"width":603,"height":639,"label":"Packets sender"}, {"id":"c4a78d1d787076bc","type":"group","x":2180,"y":-580,"width":680,"height":390,"label":"Clients disconnecting"}, {"id":"aea9d1542ca0e728","type":"group","x":1530,"y":-980,"width":460,"height":400,"label":"Disconnect message loss handling"}, {"id":"1e7127097efeb367","type":"group","x":-180,"y":-980,"width":439,"height":318,"label":"#2 + #3 Ignored Addr"}, {"id":"3e3c9ce6eb1a8a0a","type":"group","x":741,"y":240,"width":603,"height":205,"label":"Packet loss handling"}, {"id":"7a4196861d045306","type":"group","x":1530,"y":-500,"width":375,"height":310,"label":"Clients to auth"}, {"id":"94dcbc213cd47c9d","type":"group","x":2420,"y":-980,"width":440,"height":233,"label":"Cleaning disconnections"}, {"id":"6f069a7cb6b4493d","type":"group","x":-540,"y":-980,"width":315,"height":318,"label":"#1 Disconnect confirm"}, {"id":"13a8e918c72edf23","type":"group","x":300,"y":-980,"width":291,"height":318,"label":"#5 Pending auth"}, {"id":"d179653722e4d480","type":"group","x":2025,"y":-980,"width":340,"height":233,"label":"Cleaning done auth"}, {"id":"25c79420f3a66d6e","type":"group","x":-33,"y":240,"width":584,"height":130,"label":"Message part confirm"}, {"id":"08c83b46ca73d0f8","type":"text","text":"- Store data, to the tick result, to refuse/accept that client authentication\n- Send addr to #addrs_in_auth_removal_sender","x":1550,"y":-387,"width":335,"height":177}, {"id":"9ea3018bf0286ed2","type":"text","text":"Server tick","x":1985,"y":-260,"width":140,"height":50,"color":"1"}, {"id":"445dfba553b312d5","type":"text","text":"Is invalid","x":1162,"y":-873,"width":142,"height":50,"color":"6"}, {"id":"242fee86c16db97c","type":"text","text":"Ignore","x":1173,"y":-956,"width":121,"height":50,"color":"6"}, {"id":"82490314b910ab4f","type":"text","text":"- Remove client from #pending_auth\n- Send addr to #temporarily_ignored_addrs with the justificative to wait to try login again","x":974,"y":-366,"width":315,"height":202,"color":"6"}, {"id":"f4efa7bcaf6752cc","type":"text","text":"- Send server tick packet to #client_packets_to_send_sender\n- Send message to create signal to #client_packets_to_send_sender","x":2494,"y":35,"width":346,"height":148}, {"id":"e067f877dc415bbe","type":"text","text":"Iterate for #connected_clients","x":2031,"y":-100,"width":250,"height":60}, {"id":"e2d83f877fcd9605","type":"text","text":"Iterate for #pending_confirmation","x":1853,"y":26,"width":250,"height":60}, {"id":"52c1fcf28ea19205","type":"text","text":"- Create a #server_public_key\n- Store ClientToAuth in #pending_auth\n- Send #server_public_key to client","x":996,"y":-747,"width":271,"height":215,"color":"6"}, {"id":"4981a125a4844617","type":"text","text":"Is invalid","x":1061,"y":-449,"width":142,"height":50,"color":"6"}, {"id":"e7a0f5e9a3d7fd12","type":"text","text":"If #received_message is disponible","x":2224,"y":69,"width":221,"height":79}, {"id":"9093102c9fd52544","type":"text","text":"**#2** If #check_time is grater than #client_packet_loss_delay","x":1831,"y":133,"width":295,"height":67}, {"id":"a19062614d66c96e","type":"text","text":"**#1** If #check_time is grater than #timeout_time","x":1550,"y":133,"width":260,"height":67}, {"id":"2855b1ed807711dd","type":"text","text":"Receive #client_public_key","x":927,"y":-956,"width":205,"height":74,"color":"6"}, {"id":"514af72c293a06f1","type":"text","text":"- Take it\n- Move that message to the received message in tick result","x":2158,"y":216,"width":353,"height":106}, {"id":"d216ca2819c7c92e","type":"text","text":"Send the part id to #client_message_part_resend_sender","x":1847,"y":235,"width":262,"height":87}, {"id":"3c16f99a604bc283","type":"text","text":"Disconnect client","x":1585,"y":235,"width":190,"height":54}, {"id":"abcdbfcf77ca9f0e","type":"text","text":"- Set the #sent_time to now\n- Send the part bytes to client socket","x":1091,"y":268,"width":242,"height":143,"color":"6"}, {"id":"07aa38270f9c9ec1","type":"text","text":"#client_message_part_resend_receiver thread receive data","x":762,"y":261,"width":325,"height":61,"color":"1"}, {"id":"118b2c578f6b8c4b","type":"text","text":"#pending_disconnect_resend_receiver thread receive data","x":1606,"y":-956,"width":325,"height":61,"color":"1"}, {"id":"6673e349283946a7","type":"text","text":"If the addr if found in #pending_disconnect_confirm","x":1625,"y":-869,"width":288,"height":60,"color":"6"}, {"id":"77eab5f4869e8f77","type":"text","text":"- Set the #sent_time to now\n- Send the message bytes to client socket","x":1648,"y":-767,"width":242,"height":157,"color":"6"}, {"id":"fa232c28dd52bee0","type":"text","text":"#pending_disconnect_confirm_removal_receiver thread receive data","x":2446,"y":-960,"width":388,"height":75,"color":"1"}, {"id":"b7f2442f079ed096","type":"text","text":"Remove addr from #pending_disconnect_confirm","x":2503,"y":-851,"width":276,"height":84,"color":"6"}, {"id":"aae059450af08f58","type":"text","text":"#addrs_in_auth_removal_receiver thread receive data","x":2045,"y":-960,"width":300,"height":75,"color":"1"}, {"id":"fd2599155fe8cbad","type":"text","text":"Remove addr from #addrs_in_auth","x":2089,"y":-851,"width":213,"height":84,"color":"6"}, {"id":"fcb00a878fb9c541","type":"text","text":"**#2** if the #disconnect_time is grater than #estimated_time_to_resend","x":2541,"y":-483,"width":253,"height":120}, {"id":"7a32470eec6b01ff","type":"text","text":"Iterate for #pending_disconnect_confirm","x":2201,"y":-563,"width":275,"height":63}, {"id":"2bc376646ddf8ada","type":"text","text":"**#1** if the #disconnect_time is grater than #estimeted_time_to_discard","x":2212,"y":-449,"width":254,"height":106}, {"id":"1a5fcd853a2919ce","type":"text","text":"Send addr to #pending_disconnect_confirm_removal_sender","x":2208,"y":-306,"width":262,"height":96}, {"id":"45c112dc1dc8184e","type":"text","text":"Send the addr to #pending_disconnect_resend_sender","x":2537,"y":-297,"width":262,"height":87}, {"id":"0e70f4911f8c3378","type":"text","text":"#clients_to_auth_receiver receive data","x":1592,"y":-484,"width":250,"height":60}, {"id":"661c6eb2fb3e0f81","type":"text","text":"Is message to create signal","x":997,"y":788,"width":179,"height":69,"color":"6"}, {"id":"f0a485083d604e21","type":"text","text":"Is Valid:\n- Client sent the server_public_key, and it should match with the stored in the server.\n- Client sent the authentication message, and it should be a valid message.","x":646,"y":-443,"width":304,"height":279,"color":"6"}, {"id":"9520485d4bd14544","type":"text","text":"- Send addr and message to #clients_to_auth_sender\n- Send addr to #addrs_in_auth\n- Remove client from #pending_auth","x":654,"y":-148,"width":289,"height":195,"color":"6"}, {"id":"5370ed3e8fc2cd34","type":"text","text":"Read auth message","x":689,"y":-564,"width":218,"height":55,"color":"6"}, {"id":"8f565f1eade1ab31","type":"text","text":"Client is inside #pending_auth","x":697,"y":-684,"width":202,"height":74,"color":"6"}, {"id":"16df201ab2c88670","type":"text","text":"If the part id is found on #pending_confirmation","x":800,"y":358,"width":250,"height":60,"color":"6"}, {"id":"427c56fd77ca8a00","type":"text","text":"**#6** Client is not connected","x":710,"y":-837,"width":176,"height":75,"color":"6"}, {"id":"f42390b5fd02d665","type":"text","text":"Compare with rotation the message part id with the #next_message_to_receive_start_id","x":262,"y":569,"width":310,"height":117,"color":"6"}, {"id":"0ce1aa5bb0f6272a","type":"text","text":"Ignore, client probabily is handling packet loss on authentication, but the server already have computed that auth message","x":320,"y":-960,"width":250,"height":189,"color":"6"}, {"id":"7787a05db0207806","type":"text","text":"**#5** Client is inside #addrs_in_auth","x":321,"y":-742,"width":250,"height":60,"color":"6"}, {"id":"2b4e5031fdf5009b","type":"text","text":"Channel is #MESSAGE_PART_CONFIRM","x":-13,"y":275,"width":255,"height":60,"color":"6"}, {"id":"00091398967fd2bf","type":"text","text":"Try remove with rotation the packet id from #pending_confirmation","x":287,"y":260,"width":244,"height":90,"color":"6"}, {"id":"5011401df44598d4","type":"text","text":"Store packet in #packets_to_send","x":761,"y":918,"width":206,"height":69,"color":"6"}, {"id":"12a6e61b5cdc1f06","type":"text","text":"Is packet to push signal","x":788,"y":788,"width":152,"height":69,"color":"6"}, {"id":"1d64ebb753a49464","type":"text","text":"- Transform #packets_to_send into message parts, and clear that list\n- Send each part to #pending_confirmation\n- Send part bytes to client socket","x":1021,"y":918,"width":303,"height":220,"color":"6"}, {"id":"4ccf303c8d08d6ff","type":"text","text":"Channel is #MESSAGE_PART_SEND","x":-500,"y":656,"width":230,"height":59,"color":"6"}, {"id":"05a0f6cd2866b22f","type":"text","text":"Try transform #incoming_message into a DeserializedMessage","x":313,"y":945,"width":287,"height":88,"color":"6"}, {"id":"e69898caa834fdf8","type":"text","text":"If the message part id is Grater or Equal","x":350,"y":727,"width":250,"height":81,"color":"6"}, {"id":"1f6b4674fe46e539","type":"text","text":"Send message part to #incoming_message","x":350,"y":841,"width":250,"height":60,"color":"6"}, {"id":"7d94ded7ac1a4a38","type":"text","text":"#client_tick_bytes_receiver thread receive data","x":-514,"y":268,"width":263,"height":75,"color":"1"}, {"id":"b2258610b3458700","type":"text","text":"Gray cards = sync context","x":-1040,"y":46,"width":174,"height":59}, {"id":"688c1ee3642db499","type":"text","text":"Purple cards = async context ","x":-1040,"y":137,"width":174,"height":86,"color":"6"}, {"id":"e7254b357e9c30b0","type":"text","text":"- Send addr to #clients_to_disconnect\n- Send addr to #temporarily_ignored_addrs with the justificative of invalid byte send","x":-525,"y":922,"width":320,"height":208,"color":"6"}, {"id":"512e56422b584673","type":"text","text":"Is invalid","x":-436,"y":842,"width":142,"height":50,"color":"6"}, {"id":"1a8c214b68b28c0a","type":"text","text":"Is Valid:\n- Deserializes successfully","x":-168,"y":854,"width":304,"height":109,"color":"6"}, {"id":"fb5af6c5d4648307","type":"text","text":"Send the message part receive confirmation to the client socket","x":-167,"y":1009,"width":300,"height":80,"color":"6"}, {"id":"fea4d13689d05ab5","type":"text","text":"Ignore bytes","x":-123,"y":520,"width":250,"height":60,"color":"6"}, {"id":"d3f2b02ef8bb4943","type":"text","text":"#received_message was not read yet","x":-123,"y":603,"width":250,"height":60,"color":"6"}, {"id":"52934076d45ce6c6","type":"text","text":"Set the message in #received_message","x":350,"y":1071,"width":250,"height":60,"color":"6"}, {"id":"621bfb5145b4a0a5","type":"text","text":"Read message part","x":-123,"y":693,"width":218,"height":55,"color":"6"}, {"id":"c0184426108a8f3d","type":"text","text":"- Ignore bytes\n- Add bytes len to #client_tick_bytes_len","x":190,"y":-161,"width":275,"height":100,"color":"6"}, {"id":"2724028adbb19459","type":"text","text":"- Add bytes len to #client_tick_bytes_len\n- Send bytes to #client_receiving_bytes_sender\n- Add overflow bytes len to #client_tick_bytes_len","x":-164,"y":-161,"width":321,"height":200,"color":"6"}, {"id":"e1fa3d46dcf3990e","type":"text","text":"#client_tick_bytes_len < #max_client_tick_bytes_len","x":-128,"y":-280,"width":250,"height":60,"color":"6"}, {"id":"24f13c7c347e0fbf","type":"text","text":"**#4** Client is connected","x":80,"y":-428,"width":155,"height":75,"color":"6"}, {"id":"e470790eacff1da1","type":"text","text":"#client_tick_bytes_len >= #max_client_tick_bytes_len","x":202,"y":-280,"width":250,"height":60,"color":"6"}, {"id":"a1f7fcb4e37ffc78","type":"text","text":"Receive bytes of some client","x":73,"y":-564,"width":169,"height":63,"color":"1"}, {"id":"bcb667df725836d9","type":"text","text":"**#1** Bytes size is not large sufficient for channel + 1 (2)","x":-492,"y":-278,"width":265,"height":60,"color":"6"}, {"id":"fd67f99e46ee67c2","type":"text","text":"Send ignoring justification if there is some to the client","x":-47,"y":-968,"width":220,"height":103,"color":"6"}, {"id":"59d7967c51465e17","type":"text","text":"**#2** Addr is inside #temporarily_ignored_addrs","x":-87,"y":-749,"width":260,"height":74,"color":"6"}, {"id":"731bff0bf5052eee","type":"text","text":"- Send addr to #clients_to_disconnect\n- Send addr to #temporarily_ignored_addrs with the justificative of invalid byte send","x":-520,"y":-161,"width":320,"height":208,"color":"6"}, {"id":"40c5a867d7a5e6e2","type":"text","text":"**#1**, **#2** .. are ifs, in order","x":-1040,"y":-990,"width":250,"height":60}, {"id":"f818f245c6ec1db0","type":"text","text":"#client_open_message_signal_receiver thread receive data","x":814,"y":539,"width":325,"height":61,"color":"1"}, {"id":"8a5c9094792094de","type":"text","text":"#client_packets_to_send_receiver receive data","x":827,"y":645,"width":300,"height":68,"color":"6"}, {"id":"e4f839d8136640ff","type":"text","text":"**#3** Addr is inside #ignored_addrs","x":-27,"y":-844,"width":200,"height":74,"color":"6"}, {"id":"9202813daea068e5","type":"text","text":"#1 Addr is inside #pending_disconnect_confirm ","x":-520,"y":-741,"width":275,"height":59,"color":"6"}, {"id":"3b19c9440aefd7d6","type":"text","text":"Remove addr from #pending_disconnect_confirm","x":-517,"y":-960,"width":268,"height":80,"color":"6"}, {"id":"b7e0a5f373f266f3","type":"text","text":"First byte is equals to #CONFIRM_DISCONNECT","x":-508,"y":-837,"width":250,"height":60,"color":"6"}, {"id":"a448a148bb25ba22","type":"text","text":"Blue cards = not flow context ","x":-1040,"y":263,"width":214,"height":75,"color":"5"}, {"id":"3adc5af6a63f38dd","type":"text","text":"Red lines = OPTIONAL action","x":-1040,"y":-222,"width":202,"height":82,"color":"1"}, {"id":"ea7e9ff30346e93e","type":"text","text":"Red cards = called externally ","x":-1040,"y":371,"width":189,"height":72,"color":"1"}, {"id":"352b38e3b6022617","type":"text","text":"orange lines = REPEAT action","x":-1040,"y":-560,"width":180,"height":73,"color":"2"}, {"id":"e4da0b51b399e269","type":"text","text":"Blue lines = not flow action ","x":-1040,"y":-343,"width":180,"height":89,"color":"5"}, {"id":"ee7c140e9cc41579","type":"text","text":"Yellow cards = TODO","x":-1040,"y":476,"width":184,"height":57,"color":"3"}, {"id":"e9c5fa1e8cf71cf7","type":"text","text":"green lines = OR action","x":-1040,"y":-453,"width":174,"height":73,"color":"4"} ], "edges":[ {"id":"9201c0d500f0bb4b","fromNode":"621bfb5145b4a0a5","fromSide":"bottom","toNode":"512e56422b584673","toSide":"top","color":"4"}, {"id":"85e532cba3488a98","fromNode":"621bfb5145b4a0a5","fromSide":"bottom","toNode":"1a8c214b68b28c0a","toSide":"top","color":"4"}, {"id":"efcf52a5e9bb49cd","fromNode":"4ccf303c8d08d6ff","fromSide":"right","toNode":"621bfb5145b4a0a5","toSide":"left","color":"4"}, {"id":"2d9b91afca9714e8","fromNode":"d3f2b02ef8bb4943","fromSide":"right","toNode":"fea4d13689d05ab5","toSide":"right"}, {"id":"efa12b3d3c7fdfc4","fromNode":"4ccf303c8d08d6ff","fromSide":"right","toNode":"d3f2b02ef8bb4943","toSide":"left","color":"4"}, {"id":"689c7017e444f3df","fromNode":"512e56422b584673","fromSide":"bottom","toNode":"e7254b357e9c30b0","toSide":"top"}, {"id":"5727d91eb74e8aa3","fromNode":"1a8c214b68b28c0a","fromSide":"bottom","toNode":"fb5af6c5d4648307","toSide":"top"}, {"id":"7d39df084716094d","fromNode":"1a8c214b68b28c0a","fromSide":"right","toNode":"f42390b5fd02d665","toSide":"left"}, {"id":"cfb54483510029a8","fromNode":"7d94ded7ac1a4a38","fromSide":"bottom","toNode":"4ccf303c8d08d6ff","toSide":"top","color":"4"}, {"id":"a3f31b0e9a9f17a3","fromNode":"e69898caa834fdf8","fromSide":"left","toNode":"1f6b4674fe46e539","toSide":"left"}, {"id":"fcc968794d84c9f9","fromNode":"e69898caa834fdf8","fromSide":"left","toNode":"05a0f6cd2866b22f","toSide":"left"}, {"id":"21bc2be923d4e8ed","fromNode":"f42390b5fd02d665","fromSide":"right","toNode":"e69898caa834fdf8","toSide":"right","color":"1"}, {"id":"db94dbbe93235341","fromNode":"e470790eacff1da1","fromSide":"bottom","toNode":"c0184426108a8f3d","toSide":"top"}, {"id":"86fd1269b87da379","fromNode":"bcb667df725836d9","fromSide":"bottom","toNode":"731bff0bf5052eee","toSide":"top"}, {"id":"794744bf754cd847","fromNode":"e1fa3d46dcf3990e","fromSide":"bottom","toNode":"2724028adbb19459","toSide":"top"}, {"id":"b7d0680ef83fd65d","fromNode":"05a0f6cd2866b22f","fromSide":"right","toNode":"52934076d45ce6c6","toSide":"right","color":"1"}, {"id":"cc5d1325d5e6d58c","fromNode":"2b4e5031fdf5009b","fromSide":"right","toNode":"00091398967fd2bf","toSide":"left"}, {"id":"e13f68d1d893ea29","fromNode":"7d94ded7ac1a4a38","fromSide":"right","toNode":"2b4e5031fdf5009b","toSide":"left","color":"4"}, {"id":"5f57f7dac7e48c7a","fromNode":"24f13c7c347e0fbf","fromSide":"left","toNode":"bcb667df725836d9","toSide":"top","color":"4"}, {"id":"d6ee63c1b819e25f","fromNode":"24f13c7c347e0fbf","fromSide":"bottom","toNode":"e1fa3d46dcf3990e","toSide":"top","color":"4"}, {"id":"f17909dac9b06131","fromNode":"a1f7fcb4e37ffc78","fromSide":"bottom","toNode":"24f13c7c347e0fbf","toSide":"top","color":"4"}, {"id":"4811ddb796f0a75e","fromNode":"a1f7fcb4e37ffc78","fromSide":"right","toNode":"427c56fd77ca8a00","toSide":"left","color":"4"}, {"id":"bae83da3b27df737","fromNode":"a1f7fcb4e37ffc78","fromSide":"top","toNode":"59d7967c51465e17","toSide":"right","color":"4"}, {"id":"16c8af1f7a4f3fa9","fromNode":"a1f7fcb4e37ffc78","fromSide":"top","toNode":"e4f839d8136640ff","toSide":"right","color":"4"}, {"id":"095e5464812d2b08","fromNode":"a1f7fcb4e37ffc78","fromSide":"top","toNode":"7787a05db0207806","toSide":"bottom","color":"4"}, {"id":"cf0adfe486982974","fromNode":"e4f839d8136640ff","fromSide":"left","toNode":"fd67f99e46ee67c2","toSide":"left"}, {"id":"2356f7f77541c3bd","fromNode":"59d7967c51465e17","fromSide":"left","toNode":"fd67f99e46ee67c2","toSide":"left"}, {"id":"33385ea85fd945b9","fromNode":"f0a485083d604e21","fromSide":"bottom","toNode":"9520485d4bd14544","toSide":"top"}, {"id":"cece10d8e835bf79","fromNode":"5370ed3e8fc2cd34","fromSide":"bottom","toNode":"f0a485083d604e21","toSide":"top","color":"4"}, {"id":"6599b40b78a3255f","fromNode":"4981a125a4844617","fromSide":"bottom","toNode":"82490314b910ab4f","toSide":"top"}, {"id":"680c7397c80fc74d","fromNode":"5370ed3e8fc2cd34","fromSide":"bottom","toNode":"4981a125a4844617","toSide":"top","color":"4"}, {"id":"4fa0bf4cba43fe96","fromNode":"2855b1ed807711dd","fromSide":"bottom","toNode":"52c1fcf28ea19205","toSide":"top","color":"4"}, {"id":"852fdcc0e821107e","fromNode":"f818f245c6ec1db0","fromSide":"bottom","toNode":"8a5c9094792094de","toSide":"top"}, {"id":"3a135fbee30e4771","fromNode":"8a5c9094792094de","fromSide":"bottom","toNode":"12a6e61b5cdc1f06","toSide":"top","color":"4"}, {"id":"e0c2cbb88253f977","fromNode":"8a5c9094792094de","fromSide":"bottom","toNode":"661c6eb2fb3e0f81","toSide":"top","color":"4"}, {"id":"43b2e311e36942d8","fromNode":"12a6e61b5cdc1f06","fromSide":"bottom","toNode":"5011401df44598d4","toSide":"top"}, {"id":"c033bab47c880fad","fromNode":"445dfba553b312d5","fromSide":"top","toNode":"242fee86c16db97c","toSide":"bottom"}, {"id":"66d595daeb7eb723","fromNode":"2855b1ed807711dd","fromSide":"bottom","toNode":"445dfba553b312d5","toSide":"left","color":"4"}, {"id":"6d14ff95690148c0","fromNode":"8f565f1eade1ab31","fromSide":"bottom","toNode":"5370ed3e8fc2cd34","toSide":"top"}, {"id":"1dd47968417997b0","fromNode":"427c56fd77ca8a00","fromSide":"bottom","toNode":"8f565f1eade1ab31","toSide":"top","color":"4"}, {"id":"0ca5b5d0532887b9","fromNode":"427c56fd77ca8a00","fromSide":"right","toNode":"2855b1ed807711dd","toSide":"left","color":"4"}, {"id":"7140030cc4bf34cc","fromNode":"24f13c7c347e0fbf","fromSide":"bottom","toNode":"e470790eacff1da1","toSide":"top","color":"4"}, {"id":"e9693da8a6279ab3","fromNode":"661c6eb2fb3e0f81","fromSide":"bottom","toNode":"1d64ebb753a49464","toSide":"top"}, {"id":"c1cae422b06a9740","fromNode":"7787a05db0207806","fromSide":"top","toNode":"0ce1aa5bb0f6272a","toSide":"bottom"}, {"id":"7fb0554c67a7bf60","fromNode":"aae059450af08f58","fromSide":"bottom","toNode":"fd2599155fe8cbad","toSide":"top"}, {"id":"3063799431fa7277","fromNode":"16df201ab2c88670","fromSide":"right","toNode":"abcdbfcf77ca9f0e","toSide":"left"}, {"id":"c62d9607c637a171","fromNode":"07aa38270f9c9ec1","fromSide":"bottom","toNode":"16df201ab2c88670","toSide":"top","color":"2"}, {"id":"503b558a2ba0eed0","fromNode":"0e70f4911f8c3378","fromSide":"bottom","toNode":"08c83b46ca73d0f8","toSide":"top"}, {"id":"ec85116b6e8fa819","fromNode":"9ea3018bf0286ed2","fromSide":"top","toNode":"0e70f4911f8c3378","toSide":"right","color":"2"}, {"id":"1e4a3e2a0af48c49","fromNode":"e067f877dc415bbe","fromSide":"bottom","toNode":"e2d83f877fcd9605","toSide":"top","color":"2"}, {"id":"6f0b4a32db1f21d8","fromNode":"e2d83f877fcd9605","fromSide":"bottom","toNode":"9093102c9fd52544","toSide":"top","color":"1"}, {"id":"0b01d5f0e0b751a9","fromNode":"9093102c9fd52544","fromSide":"bottom","toNode":"d216ca2819c7c92e","toSide":"top"}, {"id":"aad984fa13f50df6","fromNode":"e067f877dc415bbe","fromSide":"right","toNode":"f4efa7bcaf6752cc","toSide":"top"}, {"id":"b3a74653e664952e","fromNode":"e067f877dc415bbe","fromSide":"bottom","toNode":"e7a0f5e9a3d7fd12","toSide":"top","color":"1"}, {"id":"32649b883a024ccb","fromNode":"e7a0f5e9a3d7fd12","fromSide":"bottom","toNode":"514af72c293a06f1","toSide":"top"}, {"id":"e1489a059f716c56","fromNode":"9ea3018bf0286ed2","fromSide":"bottom","toNode":"e067f877dc415bbe","toSide":"top","color":"2"}, {"id":"4eb366bf69a72b18","fromNode":"9202813daea068e5","fromSide":"top","toNode":"b7e0a5f373f266f3","toSide":"bottom","color":"1"}, {"id":"d23b5ed0eb977940","fromNode":"b7e0a5f373f266f3","fromSide":"top","toNode":"3b19c9440aefd7d6","toSide":"bottom"}, {"id":"21866ef24b159e57","fromNode":"a1f7fcb4e37ffc78","fromSide":"top","toNode":"9202813daea068e5","toSide":"bottom","color":"4"}, {"id":"ad4596c5324d3645","fromNode":"fa232c28dd52bee0","fromSide":"bottom","toNode":"b7f2442f079ed096","toSide":"top"}, {"id":"5433b7ae6384d514","fromNode":"9ea3018bf0286ed2","fromSide":"top","toNode":"7a32470eec6b01ff","toSide":"left","color":"2"}, {"id":"774337651fa3646c","fromNode":"7a32470eec6b01ff","fromSide":"bottom","toNode":"2bc376646ddf8ada","toSide":"top","color":"1"}, {"id":"e157f5cc00f3895c","fromNode":"2bc376646ddf8ada","fromSide":"bottom","toNode":"1a5fcd853a2919ce","toSide":"top"}, {"id":"a682fb46676bc761","fromNode":"7a32470eec6b01ff","fromSide":"right","toNode":"fcb00a878fb9c541","toSide":"top","color":"1"}, {"id":"b10cf5d46a3ebe27","fromNode":"e2d83f877fcd9605","fromSide":"left","toNode":"a19062614d66c96e","toSide":"top","color":"1"}, {"id":"1a5f222cd39aa1c9","fromNode":"a19062614d66c96e","fromSide":"bottom","toNode":"3c16f99a604bc283","toSide":"top"}, {"id":"ebbf3a1b15fc5047","fromNode":"118b2c578f6b8c4b","fromSide":"bottom","toNode":"6673e349283946a7","toSide":"top","color":"2"}, {"id":"a83653e691fa1f51","fromNode":"6673e349283946a7","fromSide":"bottom","toNode":"77eab5f4869e8f77","toSide":"top"}, {"id":"b96653d0da0795f6","fromNode":"fcb00a878fb9c541","fromSide":"bottom","toNode":"45c112dc1dc8184e","toSide":"top"} ] }