<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _read_join_syn(self, bits, size, kind):
 """Read Join Connection option for Initial SYN. Positional arguments: * bits - str, 4-bit data * size - int, length of option * kind - int, 30 (Multipath TCP) Returns: * dict -- extracted Join Connection (MP_JOIN-SYN) option for Initial SYN Structure of MP_JOIN-SYN [RFC 6824]: 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | Kind | Length = 12 |Subtype| |B| Address ID | | Receiver's Token (32 bits) | | Sender's Random Number (32 bits) | Octets Bits Name Description 0 0 tcp.mp.kind Kind (30) 1 8 tcp.mp.length Length (12) 2 16 tcp.mp.subtype Subtype (1|SYN) 2 20 - Reserved (must be zero) 2 23 tcp.mp.join.syn.backup Backup Path (B) 3 24 tcp.mp.join.syn.addrid Address ID 4 32 tcp.mp.join.syn.token Receiver's Token 8 64 tcp.mp.join.syn.randnum Sender's Random Number """

        adid = self._read_unpack(1)
        rtkn = self._read_fileng(4)
        srno = self._read_unpack(4)

        data = dict(
            kind=kind,
            length=size + 1,
            subtype='MP_JOIN-SYN',
            join=dict(
                syn=dict(
                    backup=True if int(bits[3]) else False,
                    addrid=adid,
                    token=rtkn,
                    randnum=srno,
                ),
            ),
        )

        return data