code: func (m *Memberlist) mergeState(remote []pushNodeState) {
  	for _, r := range remote {
  		switch r.State {
  		case stateAlive:
  			a := alive{
  				Incarnation: r.Incarnation,
  				Node:        r.Name,
  				Addr:        r.Addr,
  				Port:        r.Port,
  				Meta:        r.Meta,
  				Vsn:         r.Vsn,
  			}
  			m.aliveNode(&a, nil, false)
  
  		case stateDead:
  			// If the remote node believes a node is dead, we prefer to
  			// suspect that node instead of declaring it dead instantly
  			fallthrough
  		case stateSuspect:
  			s := suspect{Incarnation: r.Incarnation, Node: r.Name, From: m.config.Name}
  			m.suspectNode(&s)
  		}
  	}
  }
docs: // mergeState is invoked by the network layer when we get a Push/Pull
  // state transfer