func NewDecoder(r io.Reader) *Decoder {
	d := new(Decoder)
	d.Reset(r)
	return d
}
NewDecoder returns a new decoder that reads from r.

The decoder introduces its own buffering and may read data from r
beyond the requested msgpack values. Buffering can be disabled
by passing a reader that implements io.ByteScanner interface.
package msgpack
import (
	"bufio"
	"bytes"
	"errors"
	"fmt"
	"io"
	"reflect"
	"sync"
	"time"
	"github.com/vmihailenco/msgpack/v5/msgpcode"
)
const (
	looseInterfaceDecodingFlag uint32 = 1 << iota
	disallowUnknownFieldsFlag
)
const (
	bytesAllocLimit = 1e6  
	sliceAllocLimit = 1e4
	maxMapSize      = 1e6
)
type bufReader interface {
	io.Reader
	io.ByteScanner
}
var decPool = sync.Pool{
	New: func() interface{} {
		return NewDecoder(nil)
	},
}
func GetDecoder() *Decoder {
	return decPool.Get().(*Decoder)
}
func PutDecoder(dec *Decoder) {
	dec.r = nil
	dec.s = nil
	decPool.Put(dec)
}
func Unmarshal(data []byte, v interface{}) error {
	dec := GetDecoder()
	dec.Reset(bytes.NewReader(data))
	err := dec.Decode(v)
	PutDecoder(dec)
	return err
}
type Decoder struct {
	r   io.Reader
	s   io.ByteScanner
	buf []byte
	rec []byte  
	dict       []string
	flags      uint32
	structTag  string
	mapDecoder func(*Decoder) (interface{}, error)
}