summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbt <bt@rctt.net>2026-03-10 14:48:51 +0100
committerbt <bt@rctt.net>2026-03-10 14:48:51 +0100
commit69192d956aa2b6b3dbf87bac0e265e718b49dd70 (patch)
tree1f439780ffd61737701b990572d215733459f4d0
parente5644d24c51634c0e263a758bd57b797d5949c9c (diff)
downloadsolec-69192d956aa2b6b3dbf87bac0e265e718b49dd70.tar.gz
solec-69192d956aa2b6b3dbf87bac0e265e718b49dd70.zip
Update spec
-rw-r--r--cmd/client/main.go2
-rw-r--r--solec.ksy21
-rw-r--r--solec.lua155
-rw-r--r--solec.svg549
4 files changed, 468 insertions, 259 deletions
diff --git a/cmd/client/main.go b/cmd/client/main.go
index bf28e87..6e5d996 100644
--- a/cmd/client/main.go
+++ b/cmd/client/main.go
@@ -29,7 +29,7 @@ func main() {
func ping(conn net.Conn) {
for {
log.Print("ping")
- data, err := core.Encode(core.Ping{})
+ data, err := core.Encode(core.Pong{Timestamp: time.Now()})
if err != nil {
panic(err)
}
diff --git a/solec.ksy b/solec.ksy
index 01c7481..82f3bf7 100644
--- a/solec.ksy
+++ b/solec.ksy
@@ -21,6 +21,10 @@ seq:
type:
switch-on: payload_type
cases:
+ 'type::handshake': handshake
+ 'type::ping': ping
+ 'type::pong': pong
+# 'type::message': message
'type::test': test
types:
@@ -32,13 +36,30 @@ types:
type: str
size: len_payload
encoding: UTF-8
+
binary:
seq:
- id: len_payload
type: u2
- id: payload
size: len_payload
+
+ handshake:
+ seq:
+ - id: proto_ver_major
+ type: u1
+ - id: proto_ver_minor
+ type: u1
+
+ ping: {}
+
+ pong:
+ seq:
+ - id: timestamp
+ type: u8
+
test:
+ doc: Test payload, used for parsers testing
seq:
- id: num1
type: u1
diff --git a/solec.lua b/solec.lua
index f48831b..e4c8514 100644
--- a/solec.lua
+++ b/solec.lua
@@ -13,15 +13,6 @@ local Solec_payload_type = ProtoField.new('payload_type', 'Solec.payload_type',
table.insert(proto.fields, Solec_payload_type)
local Solec_payload_length = ProtoField.new('payload_length', 'Solec.payload_length', ftypes.UINT32)
table.insert(proto.fields, Solec_payload_length)
-local Solec_String_len_payload = ProtoField.new('len_payload', 'Solec.String.len_payload', ftypes.UINT32)
-table.insert(proto.fields, Solec_String_len_payload)
-local str_decode = require("string_decode")
-local Solec_String_payload = ProtoField.new('payload', 'Solec.String.payload', ftypes.STRINGZ)
-table.insert(proto.fields, Solec_String_payload)
-local Solec_Binary_len_payload = ProtoField.new('len_payload', 'Solec.Binary.len_payload', ftypes.UINT32)
-table.insert(proto.fields, Solec_Binary_len_payload)
-local Solec_Binary_payload = ProtoField.new('payload', 'Solec.Binary.payload', ftypes.BYTES)
-table.insert(proto.fields, Solec_Binary_payload)
local Solec_Test_num1 = ProtoField.new('num1', 'Solec.Test.num1', ftypes.UINT8)
table.insert(proto.fields, Solec_Test_num1)
local Solec_Test_time1 = ProtoField.new('time1', 'Solec.Test.time1', ftypes.UINT32)
@@ -32,6 +23,21 @@ local Solec_Test_num3 = ProtoField.new('num3', 'Solec.Test.num3', ftypes.UINT32)
table.insert(proto.fields, Solec_Test_num3)
local Solec_Test_num4 = ProtoField.new('num4', 'Solec.Test.num4', ftypes.UINT32)
table.insert(proto.fields, Solec_Test_num4)
+local Solec_Binary_len_payload = ProtoField.new('len_payload', 'Solec.Binary.len_payload', ftypes.UINT32)
+table.insert(proto.fields, Solec_Binary_len_payload)
+local Solec_Binary_payload = ProtoField.new('payload', 'Solec.Binary.payload', ftypes.BYTES)
+table.insert(proto.fields, Solec_Binary_payload)
+local Solec_String_len_payload = ProtoField.new('len_payload', 'Solec.String.len_payload', ftypes.UINT32)
+table.insert(proto.fields, Solec_String_len_payload)
+local str_decode = require("string_decode")
+local Solec_String_payload = ProtoField.new('payload', 'Solec.String.payload', ftypes.STRINGZ)
+table.insert(proto.fields, Solec_String_payload)
+local Solec_Handshake_proto_ver_major = ProtoField.new('proto_ver_major', 'Solec.Handshake.proto_ver_major', ftypes.UINT8)
+table.insert(proto.fields, Solec_Handshake_proto_ver_major)
+local Solec_Handshake_proto_ver_minor = ProtoField.new('proto_ver_minor', 'Solec.Handshake.proto_ver_minor', ftypes.UINT8)
+table.insert(proto.fields, Solec_Handshake_proto_ver_minor)
+local Solec_Pong_timestamp = ProtoField.new('timestamp', 'Solec.Pong.timestamp', ftypes.UINT32)
+table.insert(proto.fields, Solec_Pong_timestamp)
function proto.dissector(tvb, pinfo, root)
pinfo.cols.protocol = 'Solec'
@@ -67,7 +73,19 @@ function Solec:_read()
self._tree:add(Solec_payload_length, self._io._io.tvb(_offset, self._io:pos() - _offset), self.payload_length)
local _offset = self._io:pos()
local _on = self.payload_type
- if _on == Solec.Type.test then
+ if _on == Solec.Type.handshake then
+ local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'payload')
+ self.payload = Solec.Handshake(self._io, _tree, self, self._root)
+ _tree:set_len(self._io:pos() - _offset)
+ elseif _on == Solec.Type.ping then
+ local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'payload')
+ self.payload = Solec.Ping(self._io, _tree, self, self._root)
+ _tree:set_len(self._io:pos() - _offset)
+ elseif _on == Solec.Type.pong then
+ local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'payload')
+ self.payload = Solec.Pong(self._io, _tree, self, self._root)
+ _tree:set_len(self._io:pos() - _offset)
+ elseif _on == Solec.Type.test then
local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'payload')
self.payload = Solec.Test(self._io, _tree, self, self._root)
_tree:set_len(self._io:pos() - _offset)
@@ -75,9 +93,11 @@ function Solec:_read()
end
-Solec.String = class.class(KaitaiStruct)
+--
+-- Test payload, used for parsers testing.
+Solec.Test = class.class(KaitaiStruct)
-function Solec.String:_init(io, tree, parent, root)
+function Solec.Test:_init(io, tree, parent, root)
KaitaiStruct._init(self, io)
self._parent = parent
self._root = root or self
@@ -85,13 +105,34 @@ function Solec.String:_init(io, tree, parent, root)
self:_read()
end
-function Solec.String:_read()
+function Solec.Test:_read()
local _offset = self._io:pos()
- self.len_payload = self._io:read_u2be()
- self._tree:add(Solec_String_len_payload, self._io._io.tvb(_offset, self._io:pos() - _offset), self.len_payload)
+ self.num1 = self._io:read_u1()
+ self._tree:add(Solec_Test_num1, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num1)
local _offset = self._io:pos()
- self.payload = str_decode.decode(self._io:read_bytes(self.len_payload), "UTF-8")
- self._tree:add(Solec_String_payload, self._io._io.tvb(_offset, self._io:pos() - _offset), self.payload)
+ self.time1 = self._io:read_u8be()
+ self._tree:add(Solec_Test_time1, self._io._io.tvb(_offset, self._io:pos() - _offset), self.time1)
+ local _offset = self._io:pos()
+ local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'str1')
+ self.str1 = Solec.String(self._io, _tree, self, self._root)
+ _tree:set_len(self._io:pos() - _offset)
+ local _offset = self._io:pos()
+ self.num2 = self._io:read_u2be()
+ self._tree:add(Solec_Test_num2, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num2)
+ local _offset = self._io:pos()
+ local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'bin1')
+ self.bin1 = Solec.Binary(self._io, _tree, self, self._root)
+ _tree:set_len(self._io:pos() - _offset)
+ local _offset = self._io:pos()
+ self.num3 = self._io:read_u4be()
+ self._tree:add(Solec_Test_num3, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num3)
+ local _offset = self._io:pos()
+ local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'str2')
+ self.str2 = Solec.String(self._io, _tree, self, self._root)
+ _tree:set_len(self._io:pos() - _offset)
+ local _offset = self._io:pos()
+ self.num4 = self._io:read_u8be()
+ self._tree:add(Solec_Test_num4, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num4)
end
@@ -115,9 +156,9 @@ function Solec.Binary:_read()
end
-Solec.Test = class.class(KaitaiStruct)
+Solec.String = class.class(KaitaiStruct)
-function Solec.Test:_init(io, tree, parent, root)
+function Solec.String:_init(io, tree, parent, root)
KaitaiStruct._init(self, io)
self._parent = parent
self._root = root or self
@@ -125,34 +166,64 @@ function Solec.Test:_init(io, tree, parent, root)
self:_read()
end
-function Solec.Test:_read()
- local _offset = self._io:pos()
- self.num1 = self._io:read_u1()
- self._tree:add(Solec_Test_num1, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num1)
- local _offset = self._io:pos()
- self.time1 = self._io:read_u8be()
- self._tree:add(Solec_Test_time1, self._io._io.tvb(_offset, self._io:pos() - _offset), self.time1)
- local _offset = self._io:pos()
- local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'str1')
- self.str1 = Solec.String(self._io, _tree, self, self._root)
- _tree:set_len(self._io:pos() - _offset)
+function Solec.String:_read()
local _offset = self._io:pos()
- self.num2 = self._io:read_u2be()
- self._tree:add(Solec_Test_num2, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num2)
+ self.len_payload = self._io:read_u2be()
+ self._tree:add(Solec_String_len_payload, self._io._io.tvb(_offset, self._io:pos() - _offset), self.len_payload)
local _offset = self._io:pos()
- local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'bin1')
- self.bin1 = Solec.Binary(self._io, _tree, self, self._root)
- _tree:set_len(self._io:pos() - _offset)
+ self.payload = str_decode.decode(self._io:read_bytes(self.len_payload), "UTF-8")
+ self._tree:add(Solec_String_payload, self._io._io.tvb(_offset, self._io:pos() - _offset), self.payload)
+end
+
+
+Solec.Ping = class.class(KaitaiStruct)
+
+function Solec.Ping:_init(io, tree, parent, root)
+ KaitaiStruct._init(self, io)
+ self._parent = parent
+ self._root = root or self
+ self._tree = tree
+ self:_read()
+end
+
+function Solec.Ping:_read()
+end
+
+
+Solec.Handshake = class.class(KaitaiStruct)
+
+function Solec.Handshake:_init(io, tree, parent, root)
+ KaitaiStruct._init(self, io)
+ self._parent = parent
+ self._root = root or self
+ self._tree = tree
+ self:_read()
+end
+
+function Solec.Handshake:_read()
local _offset = self._io:pos()
- self.num3 = self._io:read_u4be()
- self._tree:add(Solec_Test_num3, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num3)
+ self.proto_ver_major = self._io:read_u1()
+ self._tree:add(Solec_Handshake_proto_ver_major, self._io._io.tvb(_offset, self._io:pos() - _offset), self.proto_ver_major)
local _offset = self._io:pos()
- local _tree = self._tree:add(self._io._io.tvb(_offset, 0), 'str2')
- self.str2 = Solec.String(self._io, _tree, self, self._root)
- _tree:set_len(self._io:pos() - _offset)
+ self.proto_ver_minor = self._io:read_u1()
+ self._tree:add(Solec_Handshake_proto_ver_minor, self._io._io.tvb(_offset, self._io:pos() - _offset), self.proto_ver_minor)
+end
+
+
+Solec.Pong = class.class(KaitaiStruct)
+
+function Solec.Pong:_init(io, tree, parent, root)
+ KaitaiStruct._init(self, io)
+ self._parent = parent
+ self._root = root or self
+ self._tree = tree
+ self:_read()
+end
+
+function Solec.Pong:_read()
local _offset = self._io:pos()
- self.num4 = self._io:read_u8be()
- self._tree:add(Solec_Test_num4, self._io._io.tvb(_offset, self._io:pos() - _offset), self.num4)
+ self.timestamp = self._io:read_u8be()
+ self._tree:add(Solec_Pong_timestamp, self._io._io.tvb(_offset, self._io:pos() - _offset), self.timestamp)
end
diff --git a/solec.svg b/solec.svg
index 30b2ba8..360c759 100644
--- a/solec.svg
+++ b/solec.svg
@@ -4,274 +4,391 @@
<!-- Generated by graphviz version 14.1.3 (20260303.0454)
-->
<!-- Pages: 1 -->
-<svg width="942pt" height="341pt"
- viewBox="0.00 0.00 942.00 341.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 337)">
-<polygon fill="white" stroke="none" points="-4,4 -4,-337 937.5,-337 937.5,4 -4,4"/>
+<svg width="1064pt" height="627pt"
+ viewBox="0.00 0.00 1064.00 627.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 623)">
+<polygon fill="white" stroke="none" points="-4,4 -4,-623 1059.75,-623 1059.75,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster__solec</title>
-<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-8 8,-325 925.5,-325 925.5,-8 8,-8"/>
-<text xml:space="preserve" text-anchor="middle" x="466.75" y="-307.7" font-family="Times,serif" font-size="14.00">Solec</text>
+<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="8,-8 8,-611 1047.75,-611 1047.75,-8 8,-8"/>
+<text xml:space="preserve" text-anchor="middle" x="527.88" y="-593.7" font-family="Times,serif" font-size="14.00">Solec</text>
</g>
<g id="clust2" class="cluster">
<title>cluster__binary</title>
-<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="668,-16 668,-150 901,-150 901,-16 668,-16"/>
-<text xml:space="preserve" text-anchor="middle" x="784.5" y="-132.7" font-family="Times,serif" font-size="14.00">Solec::Binary</text>
+<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="790.25,-16 790.25,-150 1023.25,-150 1023.25,-16 790.25,-16"/>
+<text xml:space="preserve" text-anchor="middle" x="906.75" y="-132.7" font-family="Times,serif" font-size="14.00">Solec::Binary</text>
</g>
<g id="clust3" class="cluster">
-<title>cluster__string</title>
-<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="651.5,-158 651.5,-292 917.5,-292 917.5,-158 651.5,-158"/>
-<text xml:space="preserve" text-anchor="middle" x="784.5" y="-274.7" font-family="Times,serif" font-size="14.00">Solec::String</text>
+<title>cluster__handshake</title>
+<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="542.5,-462 542.5,-578 753.75,-578 753.75,-462 542.5,-462"/>
+<text xml:space="preserve" text-anchor="middle" x="648.12" y="-560.7" font-family="Times,serif" font-size="14.00">Solec::Handshake</text>
</g>
<g id="clust4" class="cluster">
+<title>cluster__ping</title>
+<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="583.38,-377 583.38,-454 712.88,-454 712.88,-377 583.38,-377"/>
+<text xml:space="preserve" text-anchor="middle" x="648.12" y="-436.7" font-family="Times,serif" font-size="14.00">Solec::Ping</text>
+</g>
+<g id="clust5" class="cluster">
+<title>cluster__pong</title>
+<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="558.25,-275 558.25,-369 738,-369 738,-275 558.25,-275"/>
+<text xml:space="preserve" text-anchor="middle" x="648.12" y="-351.7" font-family="Times,serif" font-size="14.00">Solec::Pong</text>
+</g>
+<g id="clust6" class="cluster">
+<title>cluster__string</title>
+<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="773.75,-158 773.75,-292 1039.75,-292 1039.75,-158 773.75,-158"/>
+<text xml:space="preserve" text-anchor="middle" x="906.75" y="-274.7" font-family="Times,serif" font-size="14.00">Solec::String</text>
+</g>
+<g id="clust7" class="cluster">
<title>cluster__test</title>
-<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="467.5,-41 467.5,-292 631.5,-292 631.5,-41 467.5,-41"/>
-<text xml:space="preserve" text-anchor="middle" x="549.5" y="-274.7" font-family="Times,serif" font-size="14.00">Solec::Test</text>
+<polygon fill="none" stroke="black" stroke-dasharray="1,5" points="566.12,-16 566.12,-267 730.12,-267 730.12,-16 566.12,-16"/>
+<text xml:space="preserve" text-anchor="middle" x="648.12" y="-249.7" font-family="Times,serif" font-size="14.00">Solec::Test</text>
</g>
<!-- solec__seq -->
<g id="node1" class="node">
<title>solec__seq</title>
-<polygon fill="#e0ffe0" stroke="none" points="24,-220.5 24,-243 48.75,-243 48.75,-220.5 24,-220.5"/>
-<polygon fill="none" stroke="black" points="24,-220.5 24,-243 48.75,-243 48.75,-220.5 24,-220.5"/>
-<text xml:space="preserve" text-anchor="start" x="27" y="-227.25" font-family="Times,serif" font-size="14.00">pos</text>
-<polygon fill="#e0ffe0" stroke="none" points="48.75,-220.5 48.75,-243 75.75,-243 75.75,-220.5 48.75,-220.5"/>
-<polygon fill="none" stroke="black" points="48.75,-220.5 48.75,-243 75.75,-243 75.75,-220.5 48.75,-220.5"/>
-<text xml:space="preserve" text-anchor="start" x="51.75" y="-227.25" font-family="Times,serif" font-size="14.00">size</text>
-<polygon fill="#e0ffe0" stroke="none" points="75.75,-220.5 75.75,-243 202.5,-243 202.5,-220.5 75.75,-220.5"/>
-<polygon fill="none" stroke="black" points="75.75,-220.5 75.75,-243 202.5,-243 202.5,-220.5 75.75,-220.5"/>
-<text xml:space="preserve" text-anchor="start" x="127.5" y="-227.25" font-family="Times,serif" font-size="14.00">type</text>
-<polygon fill="#e0ffe0" stroke="none" points="202.5,-220.5 202.5,-243 291.75,-243 291.75,-220.5 202.5,-220.5"/>
-<polygon fill="none" stroke="black" points="202.5,-220.5 202.5,-243 291.75,-243 291.75,-220.5 202.5,-220.5"/>
-<text xml:space="preserve" text-anchor="start" x="241.88" y="-227.25" font-family="Times,serif" font-size="14.00">id</text>
-<polygon fill="none" stroke="black" points="24,-198 24,-220.5 48.75,-220.5 48.75,-198 24,-198"/>
-<text xml:space="preserve" text-anchor="start" x="33" y="-204.75" font-family="Times,serif" font-size="14.00">0</text>
-<polygon fill="none" stroke="black" points="48.75,-198 48.75,-220.5 75.75,-220.5 75.75,-198 48.75,-198"/>
-<text xml:space="preserve" text-anchor="start" x="58.88" y="-204.75" font-family="Times,serif" font-size="14.00">1</text>
-<polygon fill="none" stroke="black" points="75.75,-198 75.75,-220.5 202.5,-220.5 202.5,-198 75.75,-198"/>
-<text xml:space="preserve" text-anchor="start" x="111.38" y="-204.75" font-family="Times,serif" font-size="14.00">u1→Type</text>
-<polygon fill="none" stroke="black" points="202.5,-198 202.5,-220.5 291.75,-220.5 291.75,-198 202.5,-198"/>
-<text xml:space="preserve" text-anchor="start" x="210.75" y="-204.75" font-family="Times,serif" font-size="14.00">payload_type</text>
-<polygon fill="none" stroke="black" points="24,-175.5 24,-198 48.75,-198 48.75,-175.5 24,-175.5"/>
-<text xml:space="preserve" text-anchor="start" x="33" y="-182.25" font-family="Times,serif" font-size="14.00">1</text>
-<polygon fill="none" stroke="black" points="48.75,-175.5 48.75,-198 75.75,-198 75.75,-175.5 48.75,-175.5"/>
-<text xml:space="preserve" text-anchor="start" x="58.88" y="-182.25" font-family="Times,serif" font-size="14.00">2</text>
-<polygon fill="none" stroke="black" points="75.75,-175.5 75.75,-198 202.5,-198 202.5,-175.5 75.75,-175.5"/>
-<text xml:space="preserve" text-anchor="start" x="126" y="-182.25" font-family="Times,serif" font-size="14.00">u2be</text>
-<polygon fill="none" stroke="black" points="202.5,-175.5 202.5,-198 291.75,-198 291.75,-175.5 202.5,-175.5"/>
-<text xml:space="preserve" text-anchor="start" x="205.5" y="-182.25" font-family="Times,serif" font-size="14.00">payload_length</text>
-<polygon fill="none" stroke="black" points="24,-153 24,-175.5 48.75,-175.5 48.75,-153 24,-153"/>
-<text xml:space="preserve" text-anchor="start" x="33" y="-159.75" font-family="Times,serif" font-size="14.00">3</text>
-<polygon fill="none" stroke="black" points="48.75,-153 48.75,-175.5 75.75,-175.5 75.75,-153 48.75,-153"/>
-<text xml:space="preserve" text-anchor="start" x="56.62" y="-159.75" font-family="Times,serif" font-size="14.00">...</text>
-<polygon fill="none" stroke="black" points="75.75,-153 75.75,-175.5 202.5,-175.5 202.5,-153 75.75,-153"/>
-<text xml:space="preserve" text-anchor="start" x="78.75" y="-159.75" font-family="Times,serif" font-size="14.00">switch (payload_type)</text>
-<polygon fill="none" stroke="black" points="202.5,-153 202.5,-175.5 291.75,-175.5 291.75,-153 202.5,-153"/>
-<text xml:space="preserve" text-anchor="start" x="225.75" y="-159.75" font-family="Times,serif" font-size="14.00">payload</text>
+<polygon fill="#e0ffe0" stroke="none" points="24,-422.5 24,-445 48.75,-445 48.75,-422.5 24,-422.5"/>
+<polygon fill="none" stroke="black" points="24,-422.5 24,-445 48.75,-445 48.75,-422.5 24,-422.5"/>
+<text xml:space="preserve" text-anchor="start" x="27" y="-429.25" font-family="Times,serif" font-size="14.00">pos</text>
+<polygon fill="#e0ffe0" stroke="none" points="48.75,-422.5 48.75,-445 75.75,-445 75.75,-422.5 48.75,-422.5"/>
+<polygon fill="none" stroke="black" points="48.75,-422.5 48.75,-445 75.75,-445 75.75,-422.5 48.75,-422.5"/>
+<text xml:space="preserve" text-anchor="start" x="51.75" y="-429.25" font-family="Times,serif" font-size="14.00">size</text>
+<polygon fill="#e0ffe0" stroke="none" points="75.75,-422.5 75.75,-445 202.5,-445 202.5,-422.5 75.75,-422.5"/>
+<polygon fill="none" stroke="black" points="75.75,-422.5 75.75,-445 202.5,-445 202.5,-422.5 75.75,-422.5"/>
+<text xml:space="preserve" text-anchor="start" x="127.5" y="-429.25" font-family="Times,serif" font-size="14.00">type</text>
+<polygon fill="#e0ffe0" stroke="none" points="202.5,-422.5 202.5,-445 291.75,-445 291.75,-422.5 202.5,-422.5"/>
+<polygon fill="none" stroke="black" points="202.5,-422.5 202.5,-445 291.75,-445 291.75,-422.5 202.5,-422.5"/>
+<text xml:space="preserve" text-anchor="start" x="241.88" y="-429.25" font-family="Times,serif" font-size="14.00">id</text>
+<polygon fill="none" stroke="black" points="24,-400 24,-422.5 48.75,-422.5 48.75,-400 24,-400"/>
+<text xml:space="preserve" text-anchor="start" x="33" y="-406.75" font-family="Times,serif" font-size="14.00">0</text>
+<polygon fill="none" stroke="black" points="48.75,-400 48.75,-422.5 75.75,-422.5 75.75,-400 48.75,-400"/>
+<text xml:space="preserve" text-anchor="start" x="58.88" y="-406.75" font-family="Times,serif" font-size="14.00">1</text>
+<polygon fill="none" stroke="black" points="75.75,-400 75.75,-422.5 202.5,-422.5 202.5,-400 75.75,-400"/>
+<text xml:space="preserve" text-anchor="start" x="111.38" y="-406.75" font-family="Times,serif" font-size="14.00">u1→Type</text>
+<polygon fill="none" stroke="black" points="202.5,-400 202.5,-422.5 291.75,-422.5 291.75,-400 202.5,-400"/>
+<text xml:space="preserve" text-anchor="start" x="210.75" y="-406.75" font-family="Times,serif" font-size="14.00">payload_type</text>
+<polygon fill="none" stroke="black" points="24,-377.5 24,-400 48.75,-400 48.75,-377.5 24,-377.5"/>
+<text xml:space="preserve" text-anchor="start" x="33" y="-384.25" font-family="Times,serif" font-size="14.00">1</text>
+<polygon fill="none" stroke="black" points="48.75,-377.5 48.75,-400 75.75,-400 75.75,-377.5 48.75,-377.5"/>
+<text xml:space="preserve" text-anchor="start" x="58.88" y="-384.25" font-family="Times,serif" font-size="14.00">2</text>
+<polygon fill="none" stroke="black" points="75.75,-377.5 75.75,-400 202.5,-400 202.5,-377.5 75.75,-377.5"/>
+<text xml:space="preserve" text-anchor="start" x="126" y="-384.25" font-family="Times,serif" font-size="14.00">u2be</text>
+<polygon fill="none" stroke="black" points="202.5,-377.5 202.5,-400 291.75,-400 291.75,-377.5 202.5,-377.5"/>
+<text xml:space="preserve" text-anchor="start" x="205.5" y="-384.25" font-family="Times,serif" font-size="14.00">payload_length</text>
+<polygon fill="none" stroke="black" points="24,-355 24,-377.5 48.75,-377.5 48.75,-355 24,-355"/>
+<text xml:space="preserve" text-anchor="start" x="33" y="-361.75" font-family="Times,serif" font-size="14.00">3</text>
+<polygon fill="none" stroke="black" points="48.75,-355 48.75,-377.5 75.75,-377.5 75.75,-355 48.75,-355"/>
+<text xml:space="preserve" text-anchor="start" x="56.62" y="-361.75" font-family="Times,serif" font-size="14.00">...</text>
+<polygon fill="none" stroke="black" points="75.75,-355 75.75,-377.5 202.5,-377.5 202.5,-355 75.75,-355"/>
+<text xml:space="preserve" text-anchor="start" x="78.75" y="-361.75" font-family="Times,serif" font-size="14.00">switch (payload_type)</text>
+<polygon fill="none" stroke="black" points="202.5,-355 202.5,-377.5 291.75,-377.5 291.75,-355 202.5,-355"/>
+<text xml:space="preserve" text-anchor="start" x="225.75" y="-361.75" font-family="Times,serif" font-size="14.00">payload</text>
</g>
<!-- solec__seq&#45;&gt;solec__seq -->
-<g id="edge3" class="edge">
+<g id="edge6" class="edge">
<title>solec__seq:payload_type_type&#45;&gt;solec__seq:payload_type</title>
-<path fill="none" stroke="#404040" d="M224.41,-220.36C191.09,-241.21 198.66,-265 247.12,-265 293.05,-265 302.26,-214.86 274.73,-183.35"/>
-<polygon fill="#404040" stroke="#404040" points="277.2,-180.86 267.56,-176.44 272.34,-185.9 277.2,-180.86"/>
+<path fill="none" stroke="#404040" d="M220.7,-422.36C181.94,-443.21 190.75,-467 247.12,-467 301.01,-467 311.43,-416 278.41,-384.55"/>
+<polygon fill="#404040" stroke="#404040" points="280.77,-381.95 270.81,-378.35 276.35,-387.38 280.77,-381.95"/>
</g>
<!-- solec__seq_payload_switch -->
<g id="node2" class="node">
<title>solec__seq_payload_switch</title>
-<polygon fill="#f0f2e4" stroke="none" points="343.75,-165 343.75,-187.5 402.25,-187.5 402.25,-165 343.75,-165"/>
-<polygon fill="none" stroke="black" points="343.75,-165 343.75,-187.5 402.25,-187.5 402.25,-165 343.75,-165"/>
-<text xml:space="preserve" text-anchor="start" x="361.38" y="-171.75" font-family="Times,serif" font-size="14.00">case</text>
-<polygon fill="#f0f2e4" stroke="none" points="402.25,-165 402.25,-187.5 431.5,-187.5 431.5,-165 402.25,-165"/>
-<polygon fill="none" stroke="black" points="402.25,-165 402.25,-187.5 431.5,-187.5 431.5,-165 402.25,-165"/>
-<text xml:space="preserve" text-anchor="start" x="405.25" y="-171.75" font-family="Times,serif" font-size="14.00">type</text>
-<polygon fill="none" stroke="black" points="343.75,-142.5 343.75,-165 402.25,-165 402.25,-142.5 343.75,-142.5"/>
-<text xml:space="preserve" text-anchor="start" x="346.75" y="-149.25" font-family="Times,serif" font-size="14.00">:type_test</text>
-<polygon fill="none" stroke="black" points="402.25,-142.5 402.25,-165 431.5,-165 431.5,-142.5 402.25,-142.5"/>
-<text xml:space="preserve" text-anchor="start" x="405.25" y="-149.25" font-family="Times,serif" font-size="14.00">Test</text>
+<polygon fill="#f0f2e4" stroke="none" points="343.75,-400.75 343.75,-423.25 440.5,-423.25 440.5,-400.75 343.75,-400.75"/>
+<polygon fill="none" stroke="black" points="343.75,-400.75 343.75,-423.25 440.5,-423.25 440.5,-400.75 343.75,-400.75"/>
+<text xml:space="preserve" text-anchor="start" x="380.5" y="-407.5" font-family="Times,serif" font-size="14.00">case</text>
+<polygon fill="#f0f2e4" stroke="none" points="440.5,-400.75 440.5,-423.25 506.5,-423.25 506.5,-400.75 440.5,-400.75"/>
+<polygon fill="none" stroke="black" points="440.5,-400.75 440.5,-423.25 506.5,-423.25 506.5,-400.75 440.5,-400.75"/>
+<text xml:space="preserve" text-anchor="start" x="461.88" y="-407.5" font-family="Times,serif" font-size="14.00">type</text>
+<polygon fill="none" stroke="black" points="343.75,-378.25 343.75,-400.75 440.5,-400.75 440.5,-378.25 343.75,-378.25"/>
+<text xml:space="preserve" text-anchor="start" x="346.75" y="-385" font-family="Times,serif" font-size="14.00">:type_handshake</text>
+<polygon fill="none" stroke="black" points="440.5,-378.25 440.5,-400.75 506.5,-400.75 506.5,-378.25 440.5,-378.25"/>
+<text xml:space="preserve" text-anchor="start" x="443.5" y="-385" font-family="Times,serif" font-size="14.00">Handshake</text>
+<polygon fill="none" stroke="black" points="343.75,-355.75 343.75,-378.25 440.5,-378.25 440.5,-355.75 343.75,-355.75"/>
+<text xml:space="preserve" text-anchor="start" x="363.25" y="-362.5" font-family="Times,serif" font-size="14.00">:type_ping</text>
+<polygon fill="none" stroke="black" points="440.5,-355.75 440.5,-378.25 506.5,-378.25 506.5,-355.75 440.5,-355.75"/>
+<text xml:space="preserve" text-anchor="start" x="461.12" y="-362.5" font-family="Times,serif" font-size="14.00">Ping</text>
+<polygon fill="none" stroke="black" points="343.75,-333.25 343.75,-355.75 440.5,-355.75 440.5,-333.25 343.75,-333.25"/>
+<text xml:space="preserve" text-anchor="start" x="361.75" y="-340" font-family="Times,serif" font-size="14.00">:type_pong</text>
+<polygon fill="none" stroke="black" points="440.5,-333.25 440.5,-355.75 506.5,-355.75 506.5,-333.25 440.5,-333.25"/>
+<text xml:space="preserve" text-anchor="start" x="459.62" y="-340" font-family="Times,serif" font-size="14.00">Pong</text>
+<polygon fill="none" stroke="black" points="343.75,-310.75 343.75,-333.25 440.5,-333.25 440.5,-310.75 343.75,-310.75"/>
+<text xml:space="preserve" text-anchor="start" x="365.88" y="-317.5" font-family="Times,serif" font-size="14.00">:type_test</text>
+<polygon fill="none" stroke="black" points="440.5,-310.75 440.5,-333.25 506.5,-333.25 506.5,-310.75 440.5,-310.75"/>
+<text xml:space="preserve" text-anchor="start" x="461.88" y="-317.5" font-family="Times,serif" font-size="14.00">Test</text>
</g>
<!-- solec__seq&#45;&gt;solec__seq_payload_switch -->
<g id="edge1" class="edge">
<title>solec__seq:payload_type&#45;&gt;solec__seq_payload_switch</title>
-<path fill="none" stroke="black" stroke-width="2" d="M292.75,-164.25C303.04,-164.25 313.97,-164.3 324.59,-164.36"/>
-<polygon fill="black" stroke="black" stroke-width="2" points="322.91,-167.85 332.93,-164.43 322.96,-160.85 322.91,-167.85"/>
+<path fill="none" stroke="black" stroke-width="2" d="M292.75,-366.25C303.08,-366.25 313.86,-366.27 324.61,-366.31"/>
+<polygon fill="black" stroke="black" stroke-width="2" points="322.75,-369.8 332.76,-366.35 322.78,-362.8 322.75,-369.8"/>
</g>
-<!-- test__seq -->
+<!-- handshake__seq -->
+<g id="node4" class="node">
+<title>handshake__seq</title>
+<polygon fill="#e0ffe0" stroke="none" points="558.5,-519.25 558.5,-541.75 583.25,-541.75 583.25,-519.25 558.5,-519.25"/>
+<polygon fill="none" stroke="black" points="558.5,-519.25 558.5,-541.75 583.25,-541.75 583.25,-519.25 558.5,-519.25"/>
+<text xml:space="preserve" text-anchor="start" x="561.5" y="-526" font-family="Times,serif" font-size="14.00">pos</text>
+<polygon fill="#e0ffe0" stroke="none" points="583.25,-519.25 583.25,-541.75 610.25,-541.75 610.25,-519.25 583.25,-519.25"/>
+<polygon fill="none" stroke="black" points="583.25,-519.25 583.25,-541.75 610.25,-541.75 610.25,-519.25 583.25,-519.25"/>
+<text xml:space="preserve" text-anchor="start" x="586.25" y="-526" font-family="Times,serif" font-size="14.00">size</text>
+<polygon fill="#e0ffe0" stroke="none" points="610.25,-519.25 610.25,-541.75 639.5,-541.75 639.5,-519.25 610.25,-519.25"/>
+<polygon fill="none" stroke="black" points="610.25,-519.25 610.25,-541.75 639.5,-541.75 639.5,-519.25 610.25,-519.25"/>
+<text xml:space="preserve" text-anchor="start" x="613.25" y="-526" font-family="Times,serif" font-size="14.00">type</text>
+<polygon fill="#e0ffe0" stroke="none" points="639.5,-519.25 639.5,-541.75 737.75,-541.75 737.75,-519.25 639.5,-519.25"/>
+<polygon fill="none" stroke="black" points="639.5,-519.25 639.5,-541.75 737.75,-541.75 737.75,-519.25 639.5,-519.25"/>
+<text xml:space="preserve" text-anchor="start" x="683.38" y="-526" font-family="Times,serif" font-size="14.00">id</text>
+<polygon fill="none" stroke="black" points="558.5,-496.75 558.5,-519.25 583.25,-519.25 583.25,-496.75 558.5,-496.75"/>
+<text xml:space="preserve" text-anchor="start" x="567.5" y="-503.5" font-family="Times,serif" font-size="14.00">0</text>
+<polygon fill="none" stroke="black" points="583.25,-496.75 583.25,-519.25 610.25,-519.25 610.25,-496.75 583.25,-496.75"/>
+<text xml:space="preserve" text-anchor="start" x="593.38" y="-503.5" font-family="Times,serif" font-size="14.00">1</text>
+<polygon fill="none" stroke="black" points="610.25,-496.75 610.25,-519.25 639.5,-519.25 639.5,-496.75 610.25,-496.75"/>
+<text xml:space="preserve" text-anchor="start" x="618.12" y="-503.5" font-family="Times,serif" font-size="14.00">u1</text>
+<polygon fill="none" stroke="black" points="639.5,-496.75 639.5,-519.25 737.75,-519.25 737.75,-496.75 639.5,-496.75"/>
+<text xml:space="preserve" text-anchor="start" x="642.88" y="-503.5" font-family="Times,serif" font-size="14.00">proto_ver_major</text>
+<polygon fill="none" stroke="black" points="558.5,-474.25 558.5,-496.75 583.25,-496.75 583.25,-474.25 558.5,-474.25"/>
+<text xml:space="preserve" text-anchor="start" x="567.5" y="-481" font-family="Times,serif" font-size="14.00">1</text>
+<polygon fill="none" stroke="black" points="583.25,-474.25 583.25,-496.75 610.25,-496.75 610.25,-474.25 583.25,-474.25"/>
+<text xml:space="preserve" text-anchor="start" x="593.38" y="-481" font-family="Times,serif" font-size="14.00">1</text>
+<polygon fill="none" stroke="black" points="610.25,-474.25 610.25,-496.75 639.5,-496.75 639.5,-474.25 610.25,-474.25"/>
+<text xml:space="preserve" text-anchor="start" x="618.12" y="-481" font-family="Times,serif" font-size="14.00">u1</text>
+<polygon fill="none" stroke="black" points="639.5,-474.25 639.5,-496.75 737.75,-496.75 737.75,-474.25 639.5,-474.25"/>
+<text xml:space="preserve" text-anchor="start" x="642.5" y="-481" font-family="Times,serif" font-size="14.00">proto_ver_minor</text>
+</g>
+<!-- solec__seq_payload_switch&#45;&gt;handshake__seq -->
+<g id="edge2" class="edge">
+<title>solec__seq_payload_switch:case0&#45;&gt;handshake__seq</title>
+<path fill="none" stroke="black" stroke-width="2" d="M507.5,-389.5C541.69,-389.5 518.01,-434.15 542.5,-458 544.35,-459.8 546.27,-461.54 548.26,-463.23"/>
+<polygon fill="black" stroke="black" stroke-width="2" points="544.91,-465.06 554.95,-468.43 549.21,-459.53 544.91,-465.06"/>
+</g>
+<!-- ping__seq -->
<g id="node5" class="node">
+<title>ping__seq</title>
+<polygon fill="#e0ffe0" stroke="none" points="599.38,-391.75 599.38,-414.25 624.12,-414.25 624.12,-391.75 599.38,-391.75"/>
+<polygon fill="none" stroke="black" points="599.38,-391.75 599.38,-414.25 624.12,-414.25 624.12,-391.75 599.38,-391.75"/>
+<text xml:space="preserve" text-anchor="start" x="602.38" y="-398.5" font-family="Times,serif" font-size="14.00">pos</text>
+<polygon fill="#e0ffe0" stroke="none" points="624.12,-391.75 624.12,-414.25 651.12,-414.25 651.12,-391.75 624.12,-391.75"/>
+<polygon fill="none" stroke="black" points="624.12,-391.75 624.12,-414.25 651.12,-414.25 651.12,-391.75 624.12,-391.75"/>
+<text xml:space="preserve" text-anchor="start" x="627.12" y="-398.5" font-family="Times,serif" font-size="14.00">size</text>
+<polygon fill="#e0ffe0" stroke="none" points="651.12,-391.75 651.12,-414.25 680.38,-414.25 680.38,-391.75 651.12,-391.75"/>
+<polygon fill="none" stroke="black" points="651.12,-391.75 651.12,-414.25 680.38,-414.25 680.38,-391.75 651.12,-391.75"/>
+<text xml:space="preserve" text-anchor="start" x="654.12" y="-398.5" font-family="Times,serif" font-size="14.00">type</text>
+<polygon fill="#e0ffe0" stroke="none" points="680.38,-391.75 680.38,-414.25 696.88,-414.25 696.88,-391.75 680.38,-391.75"/>
+<polygon fill="none" stroke="black" points="680.38,-391.75 680.38,-414.25 696.88,-414.25 696.88,-391.75 680.38,-391.75"/>
+<text xml:space="preserve" text-anchor="start" x="683.38" y="-398.5" font-family="Times,serif" font-size="14.00">id</text>
+</g>
+<!-- solec__seq_payload_switch&#45;&gt;ping__seq -->
+<g id="edge3" class="edge">
+<title>solec__seq_payload_switch:case1&#45;&gt;ping__seq</title>
+<path fill="none" stroke="black" stroke-width="2" d="M507.5,-367C515.32,-367 548.73,-375.57 580.91,-384.34"/>
+<polygon fill="black" stroke="black" stroke-width="2" points="578.25,-387.24 588.82,-386.51 580.1,-380.49 578.25,-387.24"/>
+</g>
+<!-- pong__seq -->
+<g id="node6" class="node">
+<title>pong__seq</title>
+<polygon fill="#e0ffe0" stroke="none" points="574.25,-310 574.25,-332.5 599,-332.5 599,-310 574.25,-310"/>
+<polygon fill="none" stroke="black" points="574.25,-310 574.25,-332.5 599,-332.5 599,-310 574.25,-310"/>
+<text xml:space="preserve" text-anchor="start" x="577.25" y="-316.75" font-family="Times,serif" font-size="14.00">pos</text>
+<polygon fill="#e0ffe0" stroke="none" points="599,-310 599,-332.5 626,-332.5 626,-310 599,-310"/>
+<polygon fill="none" stroke="black" points="599,-310 599,-332.5 626,-332.5 626,-310 599,-310"/>
+<text xml:space="preserve" text-anchor="start" x="602" y="-316.75" font-family="Times,serif" font-size="14.00">size</text>
+<polygon fill="#e0ffe0" stroke="none" points="626,-310 626,-332.5 658.25,-332.5 658.25,-310 626,-310"/>
+<polygon fill="none" stroke="black" points="626,-310 626,-332.5 658.25,-332.5 658.25,-310 626,-310"/>
+<text xml:space="preserve" text-anchor="start" x="630.5" y="-316.75" font-family="Times,serif" font-size="14.00">type</text>
+<polygon fill="#e0ffe0" stroke="none" points="658.25,-310 658.25,-332.5 722,-332.5 722,-310 658.25,-310"/>
+<polygon fill="none" stroke="black" points="658.25,-310 658.25,-332.5 722,-332.5 722,-310 658.25,-310"/>
+<text xml:space="preserve" text-anchor="start" x="684.88" y="-316.75" font-family="Times,serif" font-size="14.00">id</text>
+<polygon fill="none" stroke="black" points="574.25,-287.5 574.25,-310 599,-310 599,-287.5 574.25,-287.5"/>
+<text xml:space="preserve" text-anchor="start" x="583.25" y="-294.25" font-family="Times,serif" font-size="14.00">0</text>
+<polygon fill="none" stroke="black" points="599,-287.5 599,-310 626,-310 626,-287.5 599,-287.5"/>
+<text xml:space="preserve" text-anchor="start" x="609.12" y="-294.25" font-family="Times,serif" font-size="14.00">8</text>
+<polygon fill="none" stroke="black" points="626,-287.5 626,-310 658.25,-310 658.25,-287.5 626,-287.5"/>
+<text xml:space="preserve" text-anchor="start" x="629" y="-294.25" font-family="Times,serif" font-size="14.00">u8be</text>
+<polygon fill="none" stroke="black" points="658.25,-287.5 658.25,-310 722,-310 722,-287.5 658.25,-287.5"/>
+<text xml:space="preserve" text-anchor="start" x="661.25" y="-294.25" font-family="Times,serif" font-size="14.00">timestamp</text>
+</g>
+<!-- solec__seq_payload_switch&#45;&gt;pong__seq -->
+<g id="edge4" class="edge">
+<title>solec__seq_payload_switch:case2&#45;&gt;pong__seq</title>
+<path fill="none" stroke="black" stroke-width="2" d="M507.5,-344.5C523.73,-344.5 540.72,-342.28 557.04,-338.96"/>
+<polygon fill="black" stroke="black" stroke-width="2" points="556.24,-342.72 565.25,-337.15 554.73,-335.88 556.24,-342.72"/>
+</g>
+<!-- test__seq -->
+<g id="node8" class="node">
<title>test__seq</title>
-<polygon fill="#e0ffe0" stroke="none" points="483.5,-232.75 483.5,-255.25 508.25,-255.25 508.25,-232.75 483.5,-232.75"/>
-<polygon fill="none" stroke="black" points="483.5,-232.75 483.5,-255.25 508.25,-255.25 508.25,-232.75 483.5,-232.75"/>
-<text xml:space="preserve" text-anchor="start" x="486.5" y="-239.5" font-family="Times,serif" font-size="14.00">pos</text>
-<polygon fill="#e0ffe0" stroke="none" points="508.25,-232.75 508.25,-255.25 535.25,-255.25 535.25,-232.75 508.25,-232.75"/>
-<polygon fill="none" stroke="black" points="508.25,-232.75 508.25,-255.25 535.25,-255.25 535.25,-232.75 508.25,-232.75"/>
-<text xml:space="preserve" text-anchor="start" x="511.25" y="-239.5" font-family="Times,serif" font-size="14.00">size</text>
-<polygon fill="#e0ffe0" stroke="none" points="535.25,-232.75 535.25,-255.25 578,-255.25 578,-232.75 535.25,-232.75"/>
-<polygon fill="none" stroke="black" points="535.25,-232.75 535.25,-255.25 578,-255.25 578,-232.75 535.25,-232.75"/>
-<text xml:space="preserve" text-anchor="start" x="545" y="-239.5" font-family="Times,serif" font-size="14.00">type</text>
-<polygon fill="#e0ffe0" stroke="none" points="578,-232.75 578,-255.25 615.5,-255.25 615.5,-232.75 578,-232.75"/>
-<polygon fill="none" stroke="black" points="578,-232.75 578,-255.25 615.5,-255.25 615.5,-232.75 578,-232.75"/>
-<text xml:space="preserve" text-anchor="start" x="591.5" y="-239.5" font-family="Times,serif" font-size="14.00">id</text>
-<polygon fill="none" stroke="black" points="483.5,-210.25 483.5,-232.75 508.25,-232.75 508.25,-210.25 483.5,-210.25"/>
-<text xml:space="preserve" text-anchor="start" x="492.5" y="-217" font-family="Times,serif" font-size="14.00">0</text>
-<polygon fill="none" stroke="black" points="508.25,-210.25 508.25,-232.75 535.25,-232.75 535.25,-210.25 508.25,-210.25"/>
-<text xml:space="preserve" text-anchor="start" x="518.38" y="-217" font-family="Times,serif" font-size="14.00">1</text>
-<polygon fill="none" stroke="black" points="535.25,-210.25 535.25,-232.75 578,-232.75 578,-210.25 535.25,-210.25"/>
-<text xml:space="preserve" text-anchor="start" x="549.88" y="-217" font-family="Times,serif" font-size="14.00">u1</text>
-<polygon fill="none" stroke="black" points="578,-210.25 578,-232.75 615.5,-232.75 615.5,-210.25 578,-210.25"/>
-<text xml:space="preserve" text-anchor="start" x="581" y="-217" font-family="Times,serif" font-size="14.00">num1</text>
-<polygon fill="none" stroke="black" points="483.5,-187.75 483.5,-210.25 508.25,-210.25 508.25,-187.75 483.5,-187.75"/>
-<text xml:space="preserve" text-anchor="start" x="492.5" y="-194.5" font-family="Times,serif" font-size="14.00">1</text>
-<polygon fill="none" stroke="black" points="508.25,-187.75 508.25,-210.25 535.25,-210.25 535.25,-187.75 508.25,-187.75"/>
-<text xml:space="preserve" text-anchor="start" x="518.38" y="-194.5" font-family="Times,serif" font-size="14.00">8</text>
-<polygon fill="none" stroke="black" points="535.25,-187.75 535.25,-210.25 578,-210.25 578,-187.75 535.25,-187.75"/>
-<text xml:space="preserve" text-anchor="start" x="543.5" y="-194.5" font-family="Times,serif" font-size="14.00">u8be</text>
-<polygon fill="none" stroke="black" points="578,-187.75 578,-210.25 615.5,-210.25 615.5,-187.75 578,-187.75"/>
-<text xml:space="preserve" text-anchor="start" x="581" y="-194.5" font-family="Times,serif" font-size="14.00">time1</text>
-<polygon fill="none" stroke="black" points="483.5,-165.25 483.5,-187.75 508.25,-187.75 508.25,-165.25 483.5,-165.25"/>
-<text xml:space="preserve" text-anchor="start" x="492.5" y="-172" font-family="Times,serif" font-size="14.00">9</text>
-<polygon fill="none" stroke="black" points="508.25,-165.25 508.25,-187.75 535.25,-187.75 535.25,-165.25 508.25,-165.25"/>
-<text xml:space="preserve" text-anchor="start" x="516.12" y="-172" font-family="Times,serif" font-size="14.00">...</text>
-<polygon fill="none" stroke="black" points="535.25,-165.25 535.25,-187.75 578,-187.75 578,-165.25 535.25,-165.25"/>
-<text xml:space="preserve" text-anchor="start" x="540.12" y="-172" font-family="Times,serif" font-size="14.00">String</text>
-<polygon fill="none" stroke="black" points="578,-165.25 578,-187.75 615.5,-187.75 615.5,-165.25 578,-165.25"/>
-<text xml:space="preserve" text-anchor="start" x="586.62" y="-172" font-family="Times,serif" font-size="14.00">str1</text>
-<polygon fill="none" stroke="black" points="483.5,-142.75 483.5,-165.25 508.25,-165.25 508.25,-142.75 483.5,-142.75"/>
-<text xml:space="preserve" text-anchor="start" x="490.25" y="-149.5" font-family="Times,serif" font-size="14.00">...</text>
-<polygon fill="none" stroke="black" points="508.25,-142.75 508.25,-165.25 535.25,-165.25 535.25,-142.75 508.25,-142.75"/>
-<text xml:space="preserve" text-anchor="start" x="518.38" y="-149.5" font-family="Times,serif" font-size="14.00">2</text>
-<polygon fill="none" stroke="black" points="535.25,-142.75 535.25,-165.25 578,-165.25 578,-142.75 535.25,-142.75"/>
-<text xml:space="preserve" text-anchor="start" x="543.5" y="-149.5" font-family="Times,serif" font-size="14.00">u2be</text>
-<polygon fill="none" stroke="black" points="578,-142.75 578,-165.25 615.5,-165.25 615.5,-142.75 578,-142.75"/>
-<text xml:space="preserve" text-anchor="start" x="581" y="-149.5" font-family="Times,serif" font-size="14.00">num2</text>
-<polygon fill="none" stroke="black" points="483.5,-120.25 483.5,-142.75 508.25,-142.75 508.25,-120.25 483.5,-120.25"/>
-<text xml:space="preserve" text-anchor="start" x="490.25" y="-127" font-family="Times,serif" font-size="14.00">...</text>
-<polygon fill="none" stroke="black" points="508.25,-120.25 508.25,-142.75 535.25,-142.75 535.25,-120.25 508.25,-120.25"/>
-<text xml:space="preserve" text-anchor="start" x="516.12" y="-127" font-family="Times,serif" font-size="14.00">...</text>
-<polygon fill="none" stroke="black" points="535.25,-120.25 535.25,-142.75 578,-142.75 578,-120.25 535.25,-120.25"/>
-<text xml:space="preserve" text-anchor="start" x="538.25" y="-127" font-family="Times,serif" font-size="14.00">Binary</text>
-<polygon fill="none" stroke="black" points="578,-120.25 578,-142.75 615.5,-142.75 615.5,-120.25 578,-120.25"/>
-<text xml:space="preserve" text-anchor="start" x="584.75" y="-127" font-family="Times,serif" font-size="14.00">bin1</text>
-<polygon fill="none" stroke="black" points="483.5,-97.75 483.5,-120.25 508.25,-120.25 508.25,-97.75 483.5,-97.75"/>
-<text xml:space="preserve" text-anchor="start" x="490.25" y="-104.5" font-family="Times,serif" font-size="14.00">...</text>
-<polygon fill="none" stroke="black" points="508.25,-97.75 508.25,-120.25 535.25,-120.25 535.25,-97.75 508.25,-97.75"/>
-<text xml:space="preserve" text-anchor="start" x="518.38" y="-104.5" font-family="Times,serif" font-size="14.00">4</text>
-<polygon fill="none" stroke="black" points="535.25,-97.75 535.25,-120.25 578,-120.25 578,-97.75 535.25,-97.75"/>
-<text xml:space="preserve" text-anchor="start" x="543.5" y="-104.5" font-family="Times,serif" font-size="14.00">u4be</text>
-<polygon fill="none" stroke="black" points="578,-97.75 578,-120.25 615.5,-120.25 615.5,-97.75 578,-97.75"/>
-<text xml:space="preserve" text-anchor="start" x="581" y="-104.5" font-family="Times,serif" font-size="14.00">num3</text>
-<polygon fill="none" stroke="black" points="483.5,-75.25 483.5,-97.75 508.25,-97.75 508.25,-75.25 483.5,-75.25"/>
-<text xml:space="preserve" text-anchor="start" x="490.25" y="-82" font-family="Times,serif" font-size="14.00">...</text>
-<polygon fill="none" stroke="black" points="508.25,-75.25 508.25,-97.75 535.25,-97.75 535.25,-75.25 508.25,-75.25"/>
-<text xml:space="preserve" text-anchor="start" x="516.12" y="-82" font-family="Times,serif" font-size="14.00">...</text>
-<polygon fill="none" stroke="black" points="535.25,-75.25 535.25,-97.75 578,-97.75 578,-75.25 535.25,-75.25"/>
-<text xml:space="preserve" text-anchor="start" x="540.12" y="-82" font-family="Times,serif" font-size="14.00">String</text>
-<polygon fill="none" stroke="black" points="578,-75.25 578,-97.75 615.5,-97.75 615.5,-75.25 578,-75.25"/>
-<text xml:space="preserve" text-anchor="start" x="586.62" y="-82" font-family="Times,serif" font-size="14.00">str2</text>
-<polygon fill="none" stroke="black" points="483.5,-52.75 483.5,-75.25 508.25,-75.25 508.25,-52.75 483.5,-52.75"/>
-<text xml:space="preserve" text-anchor="start" x="490.25" y="-59.5" font-family="Times,serif" font-size="14.00">...</text>
-<polygon fill="none" stroke="black" points="508.25,-52.75 508.25,-75.25 535.25,-75.25 535.25,-52.75 508.25,-52.75"/>
-<text xml:space="preserve" text-anchor="start" x="518.38" y="-59.5" font-family="Times,serif" font-size="14.00">8</text>
-<polygon fill="none" stroke="black" points="535.25,-52.75 535.25,-75.25 578,-75.25 578,-52.75 535.25,-52.75"/>
-<text xml:space="preserve" text-anchor="start" x="543.5" y="-59.5" font-family="Times,serif" font-size="14.00">u8be</text>
-<polygon fill="none" stroke="black" points="578,-52.75 578,-75.25 615.5,-75.25 615.5,-52.75 578,-52.75"/>
-<text xml:space="preserve" text-anchor="start" x="581" y="-59.5" font-family="Times,serif" font-size="14.00">num4</text>
+<polygon fill="#e0ffe0" stroke="none" points="582.12,-207.75 582.12,-230.25 606.88,-230.25 606.88,-207.75 582.12,-207.75"/>
+<polygon fill="none" stroke="black" points="582.12,-207.75 582.12,-230.25 606.88,-230.25 606.88,-207.75 582.12,-207.75"/>
+<text xml:space="preserve" text-anchor="start" x="585.12" y="-214.5" font-family="Times,serif" font-size="14.00">pos</text>
+<polygon fill="#e0ffe0" stroke="none" points="606.88,-207.75 606.88,-230.25 633.88,-230.25 633.88,-207.75 606.88,-207.75"/>
+<polygon fill="none" stroke="black" points="606.88,-207.75 606.88,-230.25 633.88,-230.25 633.88,-207.75 606.88,-207.75"/>
+<text xml:space="preserve" text-anchor="start" x="609.88" y="-214.5" font-family="Times,serif" font-size="14.00">size</text>
+<polygon fill="#e0ffe0" stroke="none" points="633.88,-207.75 633.88,-230.25 676.62,-230.25 676.62,-207.75 633.88,-207.75"/>
+<polygon fill="none" stroke="black" points="633.88,-207.75 633.88,-230.25 676.62,-230.25 676.62,-207.75 633.88,-207.75"/>
+<text xml:space="preserve" text-anchor="start" x="643.62" y="-214.5" font-family="Times,serif" font-size="14.00">type</text>
+<polygon fill="#e0ffe0" stroke="none" points="676.62,-207.75 676.62,-230.25 714.12,-230.25 714.12,-207.75 676.62,-207.75"/>
+<polygon fill="none" stroke="black" points="676.62,-207.75 676.62,-230.25 714.12,-230.25 714.12,-207.75 676.62,-207.75"/>
+<text xml:space="preserve" text-anchor="start" x="690.12" y="-214.5" font-family="Times,serif" font-size="14.00">id</text>
+<polygon fill="none" stroke="black" points="582.12,-185.25 582.12,-207.75 606.88,-207.75 606.88,-185.25 582.12,-185.25"/>
+<text xml:space="preserve" text-anchor="start" x="591.12" y="-192" font-family="Times,serif" font-size="14.00">0</text>
+<polygon fill="none" stroke="black" points="606.88,-185.25 606.88,-207.75 633.88,-207.75 633.88,-185.25 606.88,-185.25"/>
+<text xml:space="preserve" text-anchor="start" x="617" y="-192" font-family="Times,serif" font-size="14.00">1</text>
+<polygon fill="none" stroke="black" points="633.88,-185.25 633.88,-207.75 676.62,-207.75 676.62,-185.25 633.88,-185.25"/>
+<text xml:space="preserve" text-anchor="start" x="648.5" y="-192" font-family="Times,serif" font-size="14.00">u1</text>
+<polygon fill="none" stroke="black" points="676.62,-185.25 676.62,-207.75 714.12,-207.75 714.12,-185.25 676.62,-185.25"/>
+<text xml:space="preserve" text-anchor="start" x="679.62" y="-192" font-family="Times,serif" font-size="14.00">num1</text>
+<polygon fill="none" stroke="black" points="582.12,-162.75 582.12,-185.25 606.88,-185.25 606.88,-162.75 582.12,-162.75"/>
+<text xml:space="preserve" text-anchor="start" x="591.12" y="-169.5" font-family="Times,serif" font-size="14.00">1</text>
+<polygon fill="none" stroke="black" points="606.88,-162.75 606.88,-185.25 633.88,-185.25 633.88,-162.75 606.88,-162.75"/>
+<text xml:space="preserve" text-anchor="start" x="617" y="-169.5" font-family="Times,serif" font-size="14.00">8</text>
+<polygon fill="none" stroke="black" points="633.88,-162.75 633.88,-185.25 676.62,-185.25 676.62,-162.75 633.88,-162.75"/>
+<text xml:space="preserve" text-anchor="start" x="642.12" y="-169.5" font-family="Times,serif" font-size="14.00">u8be</text>
+<polygon fill="none" stroke="black" points="676.62,-162.75 676.62,-185.25 714.12,-185.25 714.12,-162.75 676.62,-162.75"/>
+<text xml:space="preserve" text-anchor="start" x="679.62" y="-169.5" font-family="Times,serif" font-size="14.00">time1</text>
+<polygon fill="none" stroke="black" points="582.12,-140.25 582.12,-162.75 606.88,-162.75 606.88,-140.25 582.12,-140.25"/>
+<text xml:space="preserve" text-anchor="start" x="591.12" y="-147" font-family="Times,serif" font-size="14.00">9</text>
+<polygon fill="none" stroke="black" points="606.88,-140.25 606.88,-162.75 633.88,-162.75 633.88,-140.25 606.88,-140.25"/>
+<text xml:space="preserve" text-anchor="start" x="614.75" y="-147" font-family="Times,serif" font-size="14.00">...</text>
+<polygon fill="none" stroke="black" points="633.88,-140.25 633.88,-162.75 676.62,-162.75 676.62,-140.25 633.88,-140.25"/>
+<text xml:space="preserve" text-anchor="start" x="638.75" y="-147" font-family="Times,serif" font-size="14.00">String</text>
+<polygon fill="none" stroke="black" points="676.62,-140.25 676.62,-162.75 714.12,-162.75 714.12,-140.25 676.62,-140.25"/>
+<text xml:space="preserve" text-anchor="start" x="685.25" y="-147" font-family="Times,serif" font-size="14.00">str1</text>
+<polygon fill="none" stroke="black" points="582.12,-117.75 582.12,-140.25 606.88,-140.25 606.88,-117.75 582.12,-117.75"/>
+<text xml:space="preserve" text-anchor="start" x="588.88" y="-124.5" font-family="Times,serif" font-size="14.00">...</text>
+<polygon fill="none" stroke="black" points="606.88,-117.75 606.88,-140.25 633.88,-140.25 633.88,-117.75 606.88,-117.75"/>
+<text xml:space="preserve" text-anchor="start" x="617" y="-124.5" font-family="Times,serif" font-size="14.00">2</text>
+<polygon fill="none" stroke="black" points="633.88,-117.75 633.88,-140.25 676.62,-140.25 676.62,-117.75 633.88,-117.75"/>
+<text xml:space="preserve" text-anchor="start" x="642.12" y="-124.5" font-family="Times,serif" font-size="14.00">u2be</text>
+<polygon fill="none" stroke="black" points="676.62,-117.75 676.62,-140.25 714.12,-140.25 714.12,-117.75 676.62,-117.75"/>
+<text xml:space="preserve" text-anchor="start" x="679.62" y="-124.5" font-family="Times,serif" font-size="14.00">num2</text>
+<polygon fill="none" stroke="black" points="582.12,-95.25 582.12,-117.75 606.88,-117.75 606.88,-95.25 582.12,-95.25"/>
+<text xml:space="preserve" text-anchor="start" x="588.88" y="-102" font-family="Times,serif" font-size="14.00">...</text>
+<polygon fill="none" stroke="black" points="606.88,-95.25 606.88,-117.75 633.88,-117.75 633.88,-95.25 606.88,-95.25"/>
+<text xml:space="preserve" text-anchor="start" x="614.75" y="-102" font-family="Times,serif" font-size="14.00">...</text>
+<polygon fill="none" stroke="black" points="633.88,-95.25 633.88,-117.75 676.62,-117.75 676.62,-95.25 633.88,-95.25"/>
+<text xml:space="preserve" text-anchor="start" x="636.88" y="-102" font-family="Times,serif" font-size="14.00">Binary</text>
+<polygon fill="none" stroke="black" points="676.62,-95.25 676.62,-117.75 714.12,-117.75 714.12,-95.25 676.62,-95.25"/>
+<text xml:space="preserve" text-anchor="start" x="683.38" y="-102" font-family="Times,serif" font-size="14.00">bin1</text>
+<polygon fill="none" stroke="black" points="582.12,-72.75 582.12,-95.25 606.88,-95.25 606.88,-72.75 582.12,-72.75"/>
+<text xml:space="preserve" text-anchor="start" x="588.88" y="-79.5" font-family="Times,serif" font-size="14.00">...</text>
+<polygon fill="none" stroke="black" points="606.88,-72.75 606.88,-95.25 633.88,-95.25 633.88,-72.75 606.88,-72.75"/>
+<text xml:space="preserve" text-anchor="start" x="617" y="-79.5" font-family="Times,serif" font-size="14.00">4</text>
+<polygon fill="none" stroke="black" points="633.88,-72.75 633.88,-95.25 676.62,-95.25 676.62,-72.75 633.88,-72.75"/>
+<text xml:space="preserve" text-anchor="start" x="642.12" y="-79.5" font-family="Times,serif" font-size="14.00">u4be</text>
+<polygon fill="none" stroke="black" points="676.62,-72.75 676.62,-95.25 714.12,-95.25 714.12,-72.75 676.62,-72.75"/>
+<text xml:space="preserve" text-anchor="start" x="679.62" y="-79.5" font-family="Times,serif" font-size="14.00">num3</text>
+<polygon fill="none" stroke="black" points="582.12,-50.25 582.12,-72.75 606.88,-72.75 606.88,-50.25 582.12,-50.25"/>
+<text xml:space="preserve" text-anchor="start" x="588.88" y="-57" font-family="Times,serif" font-size="14.00">...</text>
+<polygon fill="none" stroke="black" points="606.88,-50.25 606.88,-72.75 633.88,-72.75 633.88,-50.25 606.88,-50.25"/>
+<text xml:space="preserve" text-anchor="start" x="614.75" y="-57" font-family="Times,serif" font-size="14.00">...</text>
+<polygon fill="none" stroke="black" points="633.88,-50.25 633.88,-72.75 676.62,-72.75 676.62,-50.25 633.88,-50.25"/>
+<text xml:space="preserve" text-anchor="start" x="638.75" y="-57" font-family="Times,serif" font-size="14.00">String</text>
+<polygon fill="none" stroke="black" points="676.62,-50.25 676.62,-72.75 714.12,-72.75 714.12,-50.25 676.62,-50.25"/>
+<text xml:space="preserve" text-anchor="start" x="685.25" y="-57" font-family="Times,serif" font-size="14.00">str2</text>
+<polygon fill="none" stroke="black" points="582.12,-27.75 582.12,-50.25 606.88,-50.25 606.88,-27.75 582.12,-27.75"/>
+<text xml:space="preserve" text-anchor="start" x="588.88" y="-34.5" font-family="Times,serif" font-size="14.00">...</text>
+<polygon fill="none" stroke="black" points="606.88,-27.75 606.88,-50.25 633.88,-50.25 633.88,-27.75 606.88,-27.75"/>
+<text xml:space="preserve" text-anchor="start" x="617" y="-34.5" font-family="Times,serif" font-size="14.00">8</text>
+<polygon fill="none" stroke="black" points="633.88,-27.75 633.88,-50.25 676.62,-50.25 676.62,-27.75 633.88,-27.75"/>
+<text xml:space="preserve" text-anchor="start" x="642.12" y="-34.5" font-family="Times,serif" font-size="14.00">u8be</text>
+<polygon fill="none" stroke="black" points="676.62,-27.75 676.62,-50.25 714.12,-50.25 714.12,-27.75 676.62,-27.75"/>
+<text xml:space="preserve" text-anchor="start" x="679.62" y="-34.5" font-family="Times,serif" font-size="14.00">num4</text>
</g>
<!-- solec__seq_payload_switch&#45;&gt;test__seq -->
-<g id="edge2" class="edge">
-<title>solec__seq_payload_switch:case0&#45;&gt;test__seq</title>
-<path fill="none" stroke="black" stroke-width="2" d="M432.5,-153.75C442.89,-153.75 453.8,-153.76 464.6,-153.78"/>
-<polygon fill="black" stroke="black" stroke-width="2" points="462.76,-157.27 472.77,-153.79 462.77,-150.27 462.76,-157.27"/>
+<g id="edge5" class="edge">
+<title>solec__seq_payload_switch:case3&#45;&gt;test__seq</title>
+<path fill="none" stroke="black" stroke-width="2" d="M507.5,-322C534.99,-322 526.57,-293.4 542.5,-271 550.63,-259.57 559.21,-247.68 567.8,-235.86"/>
+<polygon fill="black" stroke="black" stroke-width="2" points="569.53,-239.44 572.59,-229.29 563.87,-235.31 569.53,-239.44"/>
</g>
<!-- binary__seq -->
<g id="node3" class="node">
<title>binary__seq</title>
-<polygon fill="#e0ffe0" stroke="none" points="684,-73.25 684,-95.75 708.75,-95.75 708.75,-73.25 684,-73.25"/>
-<polygon fill="none" stroke="black" points="684,-73.25 684,-95.75 708.75,-95.75 708.75,-73.25 684,-73.25"/>
-<text xml:space="preserve" text-anchor="start" x="687" y="-80" font-family="Times,serif" font-size="14.00">pos</text>
-<polygon fill="#e0ffe0" stroke="none" points="708.75,-73.25 708.75,-95.75 780.75,-95.75 780.75,-73.25 708.75,-73.25"/>
-<polygon fill="none" stroke="black" points="708.75,-73.25 708.75,-95.75 780.75,-95.75 780.75,-73.25 708.75,-73.25"/>
-<text xml:space="preserve" text-anchor="start" x="734.25" y="-80" font-family="Times,serif" font-size="14.00">size</text>
-<polygon fill="#e0ffe0" stroke="none" points="780.75,-73.25 780.75,-95.75 813,-95.75 813,-73.25 780.75,-73.25"/>
-<polygon fill="none" stroke="black" points="780.75,-73.25 780.75,-95.75 813,-95.75 813,-73.25 780.75,-73.25"/>
-<text xml:space="preserve" text-anchor="start" x="785.25" y="-80" font-family="Times,serif" font-size="14.00">type</text>
-<polygon fill="#e0ffe0" stroke="none" points="813,-73.25 813,-95.75 885,-95.75 885,-73.25 813,-73.25"/>
-<polygon fill="none" stroke="black" points="813,-73.25 813,-95.75 885,-95.75 885,-73.25 813,-73.25"/>
-<text xml:space="preserve" text-anchor="start" x="843.75" y="-80" font-family="Times,serif" font-size="14.00">id</text>
-<polygon fill="none" stroke="black" points="684,-50.75 684,-73.25 708.75,-73.25 708.75,-50.75 684,-50.75"/>
-<text xml:space="preserve" text-anchor="start" x="693" y="-57.5" font-family="Times,serif" font-size="14.00">0</text>
-<polygon fill="none" stroke="black" points="708.75,-50.75 708.75,-73.25 780.75,-73.25 780.75,-50.75 708.75,-50.75"/>
-<text xml:space="preserve" text-anchor="start" x="741.38" y="-57.5" font-family="Times,serif" font-size="14.00">2</text>
-<polygon fill="none" stroke="black" points="780.75,-50.75 780.75,-73.25 813,-73.25 813,-50.75 780.75,-50.75"/>
-<text xml:space="preserve" text-anchor="start" x="783.75" y="-57.5" font-family="Times,serif" font-size="14.00">u2be</text>
-<polygon fill="none" stroke="black" points="813,-50.75 813,-73.25 885,-73.25 885,-50.75 813,-50.75"/>
-<text xml:space="preserve" text-anchor="start" x="816" y="-57.5" font-family="Times,serif" font-size="14.00">len_payload</text>
-<polygon fill="none" stroke="black" points="684,-28.25 684,-50.75 708.75,-50.75 708.75,-28.25 684,-28.25"/>
-<text xml:space="preserve" text-anchor="start" x="693" y="-35" font-family="Times,serif" font-size="14.00">2</text>
-<polygon fill="none" stroke="black" points="708.75,-28.25 708.75,-50.75 780.75,-50.75 780.75,-28.25 708.75,-28.25"/>
-<text xml:space="preserve" text-anchor="start" x="711.75" y="-35" font-family="Times,serif" font-size="14.00">len_payload</text>
-<polygon fill="none" stroke="black" points="780.75,-28.25 780.75,-50.75 813,-50.75 813,-28.25 780.75,-28.25"/>
-<polygon fill="none" stroke="black" points="813,-28.25 813,-50.75 885,-50.75 885,-28.25 813,-28.25"/>
-<text xml:space="preserve" text-anchor="start" x="827.62" y="-35" font-family="Times,serif" font-size="14.00">payload</text>
+<polygon fill="#e0ffe0" stroke="none" points="806.25,-73.25 806.25,-95.75 831,-95.75 831,-73.25 806.25,-73.25"/>
+<polygon fill="none" stroke="black" points="806.25,-73.25 806.25,-95.75 831,-95.75 831,-73.25 806.25,-73.25"/>
+<text xml:space="preserve" text-anchor="start" x="809.25" y="-80" font-family="Times,serif" font-size="14.00">pos</text>
+<polygon fill="#e0ffe0" stroke="none" points="831,-73.25 831,-95.75 903,-95.75 903,-73.25 831,-73.25"/>
+<polygon fill="none" stroke="black" points="831,-73.25 831,-95.75 903,-95.75 903,-73.25 831,-73.25"/>
+<text xml:space="preserve" text-anchor="start" x="856.5" y="-80" font-family="Times,serif" font-size="14.00">size</text>
+<polygon fill="#e0ffe0" stroke="none" points="903,-73.25 903,-95.75 935.25,-95.75 935.25,-73.25 903,-73.25"/>
+<polygon fill="none" stroke="black" points="903,-73.25 903,-95.75 935.25,-95.75 935.25,-73.25 903,-73.25"/>
+<text xml:space="preserve" text-anchor="start" x="907.5" y="-80" font-family="Times,serif" font-size="14.00">type</text>
+<polygon fill="#e0ffe0" stroke="none" points="935.25,-73.25 935.25,-95.75 1007.25,-95.75 1007.25,-73.25 935.25,-73.25"/>
+<polygon fill="none" stroke="black" points="935.25,-73.25 935.25,-95.75 1007.25,-95.75 1007.25,-73.25 935.25,-73.25"/>
+<text xml:space="preserve" text-anchor="start" x="966" y="-80" font-family="Times,serif" font-size="14.00">id</text>
+<polygon fill="none" stroke="black" points="806.25,-50.75 806.25,-73.25 831,-73.25 831,-50.75 806.25,-50.75"/>
+<text xml:space="preserve" text-anchor="start" x="815.25" y="-57.5" font-family="Times,serif" font-size="14.00">0</text>
+<polygon fill="none" stroke="black" points="831,-50.75 831,-73.25 903,-73.25 903,-50.75 831,-50.75"/>
+<text xml:space="preserve" text-anchor="start" x="863.62" y="-57.5" font-family="Times,serif" font-size="14.00">2</text>
+<polygon fill="none" stroke="black" points="903,-50.75 903,-73.25 935.25,-73.25 935.25,-50.75 903,-50.75"/>
+<text xml:space="preserve" text-anchor="start" x="906" y="-57.5" font-family="Times,serif" font-size="14.00">u2be</text>
+<polygon fill="none" stroke="black" points="935.25,-50.75 935.25,-73.25 1007.25,-73.25 1007.25,-50.75 935.25,-50.75"/>
+<text xml:space="preserve" text-anchor="start" x="938.25" y="-57.5" font-family="Times,serif" font-size="14.00">len_payload</text>
+<polygon fill="none" stroke="black" points="806.25,-28.25 806.25,-50.75 831,-50.75 831,-28.25 806.25,-28.25"/>
+<text xml:space="preserve" text-anchor="start" x="815.25" y="-35" font-family="Times,serif" font-size="14.00">2</text>
+<polygon fill="none" stroke="black" points="831,-28.25 831,-50.75 903,-50.75 903,-28.25 831,-28.25"/>
+<text xml:space="preserve" text-anchor="start" x="834" y="-35" font-family="Times,serif" font-size="14.00">len_payload</text>
+<polygon fill="none" stroke="black" points="903,-28.25 903,-50.75 935.25,-50.75 935.25,-28.25 903,-28.25"/>
+<polygon fill="none" stroke="black" points="935.25,-28.25 935.25,-50.75 1007.25,-50.75 1007.25,-28.25 935.25,-28.25"/>
+<text xml:space="preserve" text-anchor="start" x="949.88" y="-35" font-family="Times,serif" font-size="14.00">payload</text>
</g>
<!-- binary__seq&#45;&gt;binary__seq -->
-<g id="edge4" class="edge">
+<g id="edge7" class="edge">
<title>binary__seq:len_payload_type&#45;&gt;binary__seq:payload_size</title>
-<path fill="none" stroke="#404040" d="M874.25,-73.22C904.32,-92.5 888.26,-117.75 796.88,-117.75 712.07,-117.75 692.13,-82.84 713.73,-58.11"/>
-<polygon fill="#404040" stroke="#404040" points="715.97,-60.81 721.05,-51.51 711.28,-55.61 715.97,-60.81"/>
+<path fill="none" stroke="#404040" d="M999.07,-73.22C1032.3,-92.5 1015.38,-117.75 919.12,-117.75 829.24,-117.75 808.54,-82.4 833.26,-57.64"/>
+<polygon fill="#404040" stroke="#404040" points="835.13,-60.63 840.7,-51.62 830.73,-55.19 835.13,-60.63"/>
</g>
<!-- string__seq -->
-<g id="node4" class="node">
+<g id="node7" class="node">
<title>string__seq</title>
-<polygon fill="#e0ffe0" stroke="none" points="667.5,-215.25 667.5,-237.75 692.25,-237.75 692.25,-215.25 667.5,-215.25"/>
-<polygon fill="none" stroke="black" points="667.5,-215.25 667.5,-237.75 692.25,-237.75 692.25,-215.25 667.5,-215.25"/>
-<text xml:space="preserve" text-anchor="start" x="670.5" y="-222" font-family="Times,serif" font-size="14.00">pos</text>
-<polygon fill="#e0ffe0" stroke="none" points="692.25,-215.25 692.25,-237.75 764.25,-237.75 764.25,-215.25 692.25,-215.25"/>
-<polygon fill="none" stroke="black" points="692.25,-215.25 692.25,-237.75 764.25,-237.75 764.25,-215.25 692.25,-215.25"/>
-<text xml:space="preserve" text-anchor="start" x="717.75" y="-222" font-family="Times,serif" font-size="14.00">size</text>
-<polygon fill="#e0ffe0" stroke="none" points="764.25,-215.25 764.25,-237.75 829.5,-237.75 829.5,-215.25 764.25,-215.25"/>
-<polygon fill="none" stroke="black" points="764.25,-215.25 764.25,-237.75 829.5,-237.75 829.5,-215.25 764.25,-215.25"/>
-<text xml:space="preserve" text-anchor="start" x="785.25" y="-222" font-family="Times,serif" font-size="14.00">type</text>
-<polygon fill="#e0ffe0" stroke="none" points="829.5,-215.25 829.5,-237.75 901.5,-237.75 901.5,-215.25 829.5,-215.25"/>
-<polygon fill="none" stroke="black" points="829.5,-215.25 829.5,-237.75 901.5,-237.75 901.5,-215.25 829.5,-215.25"/>
-<text xml:space="preserve" text-anchor="start" x="860.25" y="-222" font-family="Times,serif" font-size="14.00">id</text>
-<polygon fill="none" stroke="black" points="667.5,-192.75 667.5,-215.25 692.25,-215.25 692.25,-192.75 667.5,-192.75"/>
-<text xml:space="preserve" text-anchor="start" x="676.5" y="-199.5" font-family="Times,serif" font-size="14.00">0</text>
-<polygon fill="none" stroke="black" points="692.25,-192.75 692.25,-215.25 764.25,-215.25 764.25,-192.75 692.25,-192.75"/>
-<text xml:space="preserve" text-anchor="start" x="724.88" y="-199.5" font-family="Times,serif" font-size="14.00">2</text>
-<polygon fill="none" stroke="black" points="764.25,-192.75 764.25,-215.25 829.5,-215.25 829.5,-192.75 764.25,-192.75"/>
-<text xml:space="preserve" text-anchor="start" x="783.75" y="-199.5" font-family="Times,serif" font-size="14.00">u2be</text>
-<polygon fill="none" stroke="black" points="829.5,-192.75 829.5,-215.25 901.5,-215.25 901.5,-192.75 829.5,-192.75"/>
-<text xml:space="preserve" text-anchor="start" x="832.5" y="-199.5" font-family="Times,serif" font-size="14.00">len_payload</text>
-<polygon fill="none" stroke="black" points="667.5,-170.25 667.5,-192.75 692.25,-192.75 692.25,-170.25 667.5,-170.25"/>
-<text xml:space="preserve" text-anchor="start" x="676.5" y="-177" font-family="Times,serif" font-size="14.00">2</text>
-<polygon fill="none" stroke="black" points="692.25,-170.25 692.25,-192.75 764.25,-192.75 764.25,-170.25 692.25,-170.25"/>
-<text xml:space="preserve" text-anchor="start" x="695.25" y="-177" font-family="Times,serif" font-size="14.00">len_payload</text>
-<polygon fill="none" stroke="black" points="764.25,-170.25 764.25,-192.75 829.5,-192.75 829.5,-170.25 764.25,-170.25"/>
-<text xml:space="preserve" text-anchor="start" x="767.25" y="-177" font-family="Times,serif" font-size="14.00">str(UTF&#45;8)</text>
-<polygon fill="none" stroke="black" points="829.5,-170.25 829.5,-192.75 901.5,-192.75 901.5,-170.25 829.5,-170.25"/>
-<text xml:space="preserve" text-anchor="start" x="844.12" y="-177" font-family="Times,serif" font-size="14.00">payload</text>
+<polygon fill="#e0ffe0" stroke="none" points="789.75,-215.25 789.75,-237.75 814.5,-237.75 814.5,-215.25 789.75,-215.25"/>
+<polygon fill="none" stroke="black" points="789.75,-215.25 789.75,-237.75 814.5,-237.75 814.5,-215.25 789.75,-215.25"/>
+<text xml:space="preserve" text-anchor="start" x="792.75" y="-222" font-family="Times,serif" font-size="14.00">pos</text>
+<polygon fill="#e0ffe0" stroke="none" points="814.5,-215.25 814.5,-237.75 886.5,-237.75 886.5,-215.25 814.5,-215.25"/>
+<polygon fill="none" stroke="black" points="814.5,-215.25 814.5,-237.75 886.5,-237.75 886.5,-215.25 814.5,-215.25"/>
+<text xml:space="preserve" text-anchor="start" x="840" y="-222" font-family="Times,serif" font-size="14.00">size</text>
+<polygon fill="#e0ffe0" stroke="none" points="886.5,-215.25 886.5,-237.75 951.75,-237.75 951.75,-215.25 886.5,-215.25"/>
+<polygon fill="none" stroke="black" points="886.5,-215.25 886.5,-237.75 951.75,-237.75 951.75,-215.25 886.5,-215.25"/>
+<text xml:space="preserve" text-anchor="start" x="907.5" y="-222" font-family="Times,serif" font-size="14.00">type</text>
+<polygon fill="#e0ffe0" stroke="none" points="951.75,-215.25 951.75,-237.75 1023.75,-237.75 1023.75,-215.25 951.75,-215.25"/>
+<polygon fill="none" stroke="black" points="951.75,-215.25 951.75,-237.75 1023.75,-237.75 1023.75,-215.25 951.75,-215.25"/>
+<text xml:space="preserve" text-anchor="start" x="982.5" y="-222" font-family="Times,serif" font-size="14.00">id</text>
+<polygon fill="none" stroke="black" points="789.75,-192.75 789.75,-215.25 814.5,-215.25 814.5,-192.75 789.75,-192.75"/>
+<text xml:space="preserve" text-anchor="start" x="798.75" y="-199.5" font-family="Times,serif" font-size="14.00">0</text>
+<polygon fill="none" stroke="black" points="814.5,-192.75 814.5,-215.25 886.5,-215.25 886.5,-192.75 814.5,-192.75"/>
+<text xml:space="preserve" text-anchor="start" x="847.12" y="-199.5" font-family="Times,serif" font-size="14.00">2</text>
+<polygon fill="none" stroke="black" points="886.5,-192.75 886.5,-215.25 951.75,-215.25 951.75,-192.75 886.5,-192.75"/>
+<text xml:space="preserve" text-anchor="start" x="906" y="-199.5" font-family="Times,serif" font-size="14.00">u2be</text>
+<polygon fill="none" stroke="black" points="951.75,-192.75 951.75,-215.25 1023.75,-215.25 1023.75,-192.75 951.75,-192.75"/>
+<text xml:space="preserve" text-anchor="start" x="954.75" y="-199.5" font-family="Times,serif" font-size="14.00">len_payload</text>
+<polygon fill="none" stroke="black" points="789.75,-170.25 789.75,-192.75 814.5,-192.75 814.5,-170.25 789.75,-170.25"/>
+<text xml:space="preserve" text-anchor="start" x="798.75" y="-177" font-family="Times,serif" font-size="14.00">2</text>
+<polygon fill="none" stroke="black" points="814.5,-170.25 814.5,-192.75 886.5,-192.75 886.5,-170.25 814.5,-170.25"/>
+<text xml:space="preserve" text-anchor="start" x="817.5" y="-177" font-family="Times,serif" font-size="14.00">len_payload</text>
+<polygon fill="none" stroke="black" points="886.5,-170.25 886.5,-192.75 951.75,-192.75 951.75,-170.25 886.5,-170.25"/>
+<text xml:space="preserve" text-anchor="start" x="889.5" y="-177" font-family="Times,serif" font-size="14.00">str(UTF&#45;8)</text>
+<polygon fill="none" stroke="black" points="951.75,-170.25 951.75,-192.75 1023.75,-192.75 1023.75,-170.25 951.75,-170.25"/>
+<text xml:space="preserve" text-anchor="start" x="966.38" y="-177" font-family="Times,serif" font-size="14.00">payload</text>
</g>
<!-- string__seq&#45;&gt;string__seq -->
-<g id="edge5" class="edge">
+<g id="edge8" class="edge">
<title>string__seq:len_payload_type&#45;&gt;string__seq:payload_size</title>
-<path fill="none" stroke="#404040" d="M890.66,-215.22C920.31,-234.5 901.86,-259.75 796.88,-259.75 699.45,-259.75 676.54,-224.84 697.45,-200.11"/>
-<polygon fill="#404040" stroke="#404040" points="699.62,-202.86 704.62,-193.52 694.89,-197.71 699.62,-202.86"/>
+<path fill="none" stroke="#404040" d="M1015.48,-215.22C1048.29,-234.5 1028.98,-259.75 919.12,-259.75 816.98,-259.75 793.12,-224.7 816.65,-199.96"/>
+<polygon fill="#404040" stroke="#404040" points="818.82,-202.71 824.28,-193.63 814.35,-197.33 818.82,-202.71"/>
</g>
<!-- test__seq&#45;&gt;binary__seq -->
-<g id="edge7" class="edge">
+<g id="edge10" class="edge">
<title>test__seq:bin1_type&#45;&gt;binary__seq</title>
-<path fill="none" stroke="black" stroke-width="2" d="M616.5,-131.5C650.49,-131.5 685.59,-119.08 714.79,-104.73"/>
-<polygon fill="black" stroke="black" stroke-width="2" points="714.84,-108.63 722.16,-100.97 711.66,-102.4 714.84,-108.63"/>
+<path fill="none" stroke="black" stroke-width="2" d="M715.12,-106.5C738.74,-106.5 763.58,-103.22 787.25,-98.44"/>
+<polygon fill="black" stroke="black" stroke-width="2" points="786.38,-102.21 795.43,-96.7 784.92,-95.36 786.38,-102.21"/>
</g>
<!-- test__seq&#45;&gt;string__seq -->
-<g id="edge6" class="edge">
+<g id="edge9" class="edge">
<title>test__seq:str1_type&#45;&gt;string__seq</title>
-<path fill="none" stroke="black" stroke-width="2" d="M616.5,-176.5C626.97,-176.5 637.76,-177.03 648.57,-177.95"/>
-<polygon fill="black" stroke="black" stroke-width="2" points="646.54,-181.27 656.83,-178.75 647.21,-174.3 646.54,-181.27"/>
+<path fill="none" stroke="black" stroke-width="2" d="M715.12,-151.5C742.13,-151.5 770.53,-156.46 796.93,-163.32"/>
+<polygon fill="black" stroke="black" stroke-width="2" points="794.23,-166.22 804.8,-165.47 796.07,-159.46 794.23,-166.22"/>
</g>
<!-- test__seq&#45;&gt;string__seq -->
-<g id="edge8" class="edge">
+<g id="edge11" class="edge">
<title>test__seq:str2_type&#45;&gt;string__seq</title>
-<path fill="none" stroke="black" stroke-width="2" d="M616.5,-86.5C650.29,-86.5 626.26,-131.53 651.5,-154 653.78,-156.03 656.15,-157.98 658.6,-159.86"/>
-<polygon fill="black" stroke="black" stroke-width="2" points="655.11,-161.68 665.3,-164.57 659.14,-155.95 655.11,-161.68"/>
+<path fill="none" stroke="black" stroke-width="2" d="M715.12,-61.5C763.8,-61.5 736.03,-123.24 773.75,-154 776.42,-156.18 779.19,-158.26 782.05,-160.26"/>
+<polygon fill="black" stroke="black" stroke-width="2" points="778.61,-162.2 788.9,-164.72 782.43,-156.34 778.61,-162.2"/>
</g>
</g>
</svg>