code: func (au *LocalAuthenticator) Reload(r io.Reader) error {
  	var period time.Duration
  	kvs := make(map[string]string)
  
  	if r == nil || au.Stopped() {
  		return nil
  	}
  
  	// splitLine splits a line text by white space.
  	// A line started with '#' will be ignored, otherwise it is valid.
  	split := func(line string) []string {
  		if line == "" {
  			return nil
  		}
  		line = strings.Replace(line, "\t", " ", -1)
  		line = strings.TrimSpace(line)
  
  		if strings.IndexByte(line, '#') == 0 {
  			return nil
  		}
  
  		var ss []string
  		for _, s := range strings.Split(line, " ") {
  			if s = strings.TrimSpace(s); s != "" {
  				ss = append(ss, s)
  			}
  		}
  		return ss
  	}
  
  	scanner := bufio.NewScanner(r)
  	for scanner.Scan() {
  		line := scanner.Text()
  		ss := split(line)
  		if len(ss) == 0 {
  			continue
  		}
  
  		switch ss[0] {
  		case "reload": // reload option
  			if len(ss) > 1 {
  				period, _ = time.ParseDuration(ss[1])
  			}
  		default:
  			var k, v string
  			k = ss[0]
  			if len(ss) > 1 {
  				v = ss[1]
  			}
  			kvs[k] = v
  		}
  	}
  
  	if err := scanner.Err(); err != nil {
  		return err
  	}
  
  	au.mux.Lock()
  	defer au.mux.Unlock()
  
  	au.period = period
  	au.kvs = kvs
  
  	return nil
  }
docs: // Reload parses config from r, then live reloads the bypass.