code: func (m *Manager) Unmarshal(enc string) error {
  	m.init()
  	var st state
  	if err := json.Unmarshal([]byte(enc), &st); err != nil {
  		return err
  	}
  	if st.Key != "" {
  		key, err := unmarshalKey(st.Key)
  		if err != nil {
  			return err
  		}
  		st.key = key
  	}
  	m.mu.Lock()
  	m.state = st
  	m.mu.Unlock()
  	for host, cert := range m.state.Certs {
  		c, err := cert.toTLS()
  		if err != nil {
  			log.Printf("letsencrypt: ignoring entry for %s: %v", host, err)
  			continue
  		}
  		m.certCache[host] = &cacheEntry{host: host, m: m, cert: c}
  	}
  	m.updated()
  	return nil
  }
docs: // Unmarshal restores the state encoded by a previous call to Marshal
  // (perhaps on a different Manager in a different program).