code: func (m *multiaddr) Decapsulate(o Multiaddr) Multiaddr {
  	s1 := m.String()
  	s2 := o.String()
  	i := strings.LastIndex(s1, s2)
  	if i < 0 {
  		// if multiaddr not contained, returns a copy.
  		cpy := make([]byte, len(m.bytes))
  		copy(cpy, m.bytes)
  		return &multiaddr{bytes: cpy}
  	}
  
  	ma, err := NewMultiaddr(s1[:i])
  	if err != nil {
  		panic("Multiaddr.Decapsulate incorrect byte boundaries.")
  	}
  	return ma
  }
docs: // Decapsulate unwraps Multiaddr up until the given Multiaddr is found.