code: func directDescendants(blobs []string, prefix string) []string {
  	if !strings.HasPrefix(prefix, "/") { // add trailing '/'
  		prefix = "/" + prefix
  	}
  	if !strings.HasSuffix(prefix, "/") { // containerify the path
  		prefix += "/"
  	}
  
  	out := make(map[string]bool)
  	for _, b := range blobs {
  		if strings.HasPrefix(b, prefix) {
  			rel := b[len(prefix):]
  			c := strings.Count(rel, "/")
  			if c == 0 {
  				out[b] = true
  			} else {
  				out[prefix+rel[:strings.Index(rel, "/")]] = true
  			}
  		}
  	}
  
  	var keys []string
  	for k := range out {
  		keys = append(keys, k)
  	}
  	return keys
  }
docs: // directDescendants will find direct descendants (blobs or virtual containers)
  // of from list of blob paths and will return their full paths. Elements in blobs
  // list must be prefixed with a "/" and
  //
  // Example: direct descendants of "/" in {"/foo", "/bar/1", "/bar/2"} is
  // {"/foo", "/bar"} and direct descendants of "bar" is {"/bar/1", "/bar/2"}