seqno=-1;
    public void down(Event evt) {        Digest  digest;        Vector  mbrs;        switch(evt.getType()) {        case Event.MSG:            Message msg=(Message)evt.getArg();            Address dest=msg.getDest();            if(dest != null && !dest.isMulticastAddress()) {                break; // unicast address: not null and not mcast, pass down unchanged            }            send(evt, msg);            return;    // don't pass down the stack        case Event.STABLE:  // generated by STABLE layer. Delete stable messages passed in arg            stable((Digest)evt.getArg());            return;  // do not pass down further (Bela Aug 7 2001)        case Event.GET_DIGEST:            digest=getDigest();            passUp(new Event(Event.GET_DIGEST_OK, digest != null ? digest.copy() : null));            return;        case Event.GET_DIGEST_STABLE:            digest=getDigestHighestDeliveredMsgs();            passUp(new Event(Event.GET_DIGEST_STABLE_OK, digest != null ? digest.copy() : null));            return;        case Event.GET_DIGEST_STATE:            digest=getDigest();            passUp(new Event(Event.GET_DIGEST_STATE_OK, digest != null ? digest.copy() : null));            return;        case Event.SET_DIGEST:            setDigest((Digest)evt.getArg());            return;        case Event.MERGE_DIGEST:            mergeDigest((Digest)evt.getArg());            return;        case Event.CONFIG:            passDown(evt);            if(log.isDebugEnabled()) {                log.debug("received CONFIG event: " + evt.getArg());            }            handleConfigEvent((HashMap)evt.getArg());            return;        case Event.TMP_VIEW:            mbrs=((View)evt.getArg()).getMembers();            members.clear();            members.addAll(mbrs);            adjustReceivers();            break;        case Event.VIEW_CHANGE:            mbrs=((View)evt.getArg()).getMembers();            members.clear();            members.addAll(mbrs);            adjustReceivers();            is_server=true;  // check vids from now on            Set tmp=new LinkedHashSet(members);            tmp.add(null); // for null destination (= mcast)            sent.keySet().retainAll(tmp);            received.keySet().retainAll(tmp);            break;        case Event.BECOME_SERVER:            is_server=true;            break;        case Event.DISCONNECT:            leaving=true;            removeAll();            seqno=-1;            break;        }        passDown(evt);    }