func Reader(f io.Reader, filter string) (ret io.ReadCloser, err error) {
	pr, pw := io.Pipe()
	go func() {
		in := bufio.NewReader(f)
		Undump(pw, in, filter)
		pw.Close()
	}()
	return pr, nil
}
Reader returns a reader that reverts `hexdump -C binary` result back to a binary data.
package hex
import (
	"bufio"
	"bytes"
	"encoding/hex"
	"io"
	"os"
	"strconv"
	"strings"
)
func undump1(w io.Writer, text string) {  
	b, err := hex.DecodeString(strings.Replace(text, " ", "", -1))
	if err != nil {
		panic(err)
	}
	w.Write(b)
}
func undumpLine(w io.Writer, line string) {
	parts := strings.SplitN(line, "  ", 4)
	max := 3
	if len(parts) < max {
		max = len(parts)
	}
	addr := parts[0]
	if len(addr) < 8 {
		return
	}
	_, err := strconv.ParseInt(addr, 16, 64)
	if err != nil {
		return
	}
	for i := 1; i < max; i++ {
		undump1(w, parts[i])
	}
}
func Undump(w io.Writer, in *bufio.Reader, filter string) {  
	fskip := true
	for {
		line, err := in.ReadString('\n')
		if filter != "" {
			if strings.HasPrefix(line, "[INFO]") {
				fskip = !strings.HasPrefix(line[6:], filter)
				continue
			}
			if fskip {
				continue
			}
		}
		undumpLine(w, line)
		if err != nil {
			if err != io.EOF {
				panic(err)
			}
			return
		}
	}
}
func UndumpText(w io.Writer, text string) {
	lines := strings.Split(text, "\n")
	for _, line := range lines {
		undumpLine(w, line)
	}
}
func TextReader(text string) *bytes.Reader {
	var w bytes.Buffer
	UndumpText(&w, text)
	return bytes.NewReader(w.Bytes())
}