def do_tag_or_attestation(tag):
            if tag == b'\x00':
                attestation = TimeAttestation.deserialize(ctx)
                self.attestations.add(attestation)

            else:
                op = Op.deserialize_from_tag(ctx, tag)

                try:
                    result = op(initial_msg)
                except MsgValueError as exp:
                    raise opentimestamps.core.serialize.DeserializationError("Invalid timestamp; message invalid for op %r: %r" % (op, exp))

                stamp = Timestamp.deserialize(ctx, result, _recursion_limit=_recursion_limit-1)
                self.ops[op] = stamp
        def do_tag_or_attestation(tag):
            if tag == b'\x00':
                attestation = TimeAttestation.deserialize(ctx)
                self.attestations.add(attestation)

            else:
                op = Op.deserialize_from_tag(ctx, tag)

                try:
                    result = op(initial_msg)
                except MsgValueError as exp:
                    raise opentimestamps.core.serialize.DeserializationError("Invalid timestamp; message invalid for op %r: %r" % (op, exp))

                stamp = Timestamp.deserialize(ctx, result, _recursion_limit=_recursion_limit-1)
                self.ops[op] = stamp