unipdf/internal/bitwise/bitwise.go
2021-04-17 13:46:54 +00:00

82 lines
21 KiB
Go

//
// Copyright 2020 FoxyUtils ehf. All rights reserved.
//
// This is a commercial product and requires a license to operate.
// A trial license can be obtained at https://unidoc.io
//
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
//
// Use of this source code is governed by the UniDoc End User License Agreement
// terms that can be accessed at https://unidoc.io/eula/
package bitwise ;import (_gge "encoding/binary";_gg "errors";_c "github.com/unidoc/unipdf/v3/common";_dg "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_d "io";);var _ _d .Writer =&BufferedWriter {};func (_ae *Writer )UseMSB ()bool {return _ae ._cegb };
func (_ccdf *Writer )Data ()[]byte {return _ccdf ._eab };type Reader struct{_ggec []byte ;_bdd byte ;_cda byte ;_ba int64 ;_af int ;_geg int ;_gab int64 ;_ed byte ;};func (_dfb *BufferedWriter )byteCapacity ()int {_ff :=len (_dfb ._ca )-_dfb ._b ;if _dfb ._dc !=0{_ff --;
};return _ff ;};func (_dbdg *SubstreamReader )StreamPosition ()int64 {return int64 (_dbdg ._cdba )};var _ _d .ByteWriter =&BufferedWriter {};type Writer struct{_eab []byte ;_fff uint8 ;_adg int ;_cegb bool ;};func _cfg (_caa ,_cbf uint64 )uint64 {if _caa < _cbf {return _caa ;
};return _cbf ;};func NewWriterMSB (data []byte )*Writer {return &Writer {_eab :data ,_cegb :true }};func (_gb *BufferedWriter )grow (_fa int ){if _gb ._ca ==nil &&_fa < _a {_gb ._ca =make ([]byte ,_fa ,_a );return ;};_ac :=len (_gb ._ca );if _gb ._dc !=0{_ac ++;
};_ad :=cap (_gb ._ca );switch {case _fa <=_ad /2-_ac :_c .Log .Trace ("\u005b\u0042\u0075\u0066\u0066\u0065r\u0065\u0064\u0057\u0072\u0069t\u0065\u0072\u005d\u0020\u0067\u0072o\u0077\u0020\u002d\u0020\u0072e\u0073\u006c\u0069\u0063\u0065\u0020\u006f\u006e\u006c\u0079\u002e\u0020L\u0065\u006e\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0043\u0061\u0070\u003a\u0020'\u0025\u0064\u0027\u002c\u0020\u006e\u003a\u0020'\u0025\u0064\u0027",len (_gb ._ca ),cap (_gb ._ca ),_fa );
_c .Log .Trace ("\u0020\u006e\u0020\u003c\u003d\u0020\u0063\u0020\u002f\u0020\u0032\u0020\u002d\u006d\u002e \u0043:\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u006d\u003a\u0020\u0027\u0025\u0064\u0027",_ad ,_ac );copy (_gb ._ca ,_gb ._ca [_gb .fullOffset ():]);
case _ad > _db -_ad -_fa :_c .Log .Error ("\u0042\u0055F\u0046\u0045\u0052 \u0074\u006f\u006f\u0020\u006c\u0061\u0072\u0067\u0065");return ;default:_cac :=make ([]byte ,2*_ad +_fa );copy (_cac ,_gb ._ca );_gb ._ca =_cac ;};_gb ._ca =_gb ._ca [:_ac +_fa ];
};func (_fbc *BufferedWriter )tryGrowByReslice (_gfb int )bool {if _gbb :=len (_fbc ._ca );_gfb <=cap (_fbc ._ca )-_gbb {_fbc ._ca =_fbc ._ca [:_gbb +_gfb ];return true ;};return false ;};var _ BinaryWriter =&BufferedWriter {};func (_afa *Reader )ConsumeRemainingBits (){if _afa ._cda !=0{_ ,_fc :=_afa .ReadBits (_afa ._cda );
if _fc !=nil {_c .Log .Debug ("\u0043\u006f\u006e\u0073\u0075\u006d\u0065\u0052\u0065\u006da\u0069\u006e\u0069\u0067\u0042\u0069\u0074s\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_fc );};};};func BufferedMSB ()*BufferedWriter {return &BufferedWriter {_e :true }};
func (_dbd *SubstreamReader )Align ()(_ffb byte ){_ffb =_dbd ._dge ;_dbd ._dge =0;return _ffb };func (_gf *BufferedWriter )ResetBitIndex (){_gf ._dc =0};func NewReader (data []byte )*Reader {return &Reader {_ggec :data }};func (_cacg *Writer )WriteBit (bit int )error {switch bit {case 0,1:return _cacg .writeBit (uint8 (bit ));
};return _dg .Error ("\u0057\u0072\u0069\u0074\u0065\u0042\u0069\u0074","\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0062\u0069\u0074\u0020v\u0061\u006c\u0075\u0065");};func (_aac *Writer )ResetBit (){_aac ._fff =0};func (_eb *BufferedWriter )writeShiftedBytes (_dgd []byte )int {for _ ,_dd :=range _dgd {_eb .writeByte (_dd );
};return len (_dgd );};func (_dgdb *Reader )BitPosition ()int {return int (_dgdb ._cda )};func (_bea *Writer )Write (p []byte )(int ,error ){if len (p )> _bea .byteCapacity (){return 0,_d .EOF ;};for _ ,_edg :=range p {if _gbbgb :=_bea .writeByte (_edg );
_gbbgb !=nil {return 0,_gbbgb ;};};return len (p ),nil ;};func (_dgc *BufferedWriter )Len ()int {return _dgc .byteCapacity ()};func NewSubstreamReader (r StreamReader ,offset ,length uint64 )(*SubstreamReader ,error ){if r ==nil {return nil ,_gg .New ("\u0072o\u006ft\u0020\u0072\u0065\u0061\u0064e\u0072\u0020i\u0073\u0020\u006e\u0069\u006c");
};_c .Log .Trace ("\u004e\u0065\u0077\u0053\u0075\u0062\u0073\u0074r\u0065\u0061\u006dRe\u0061\u0064\u0065\u0072\u0020\u0061t\u0020\u006f\u0066\u0066\u0073\u0065\u0074\u003a\u0020\u0025\u0064\u0020\u0077\u0069\u0074h\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u003a \u0025\u0064",offset ,length );
return &SubstreamReader {_afd :r ,_acd :offset ,_cde :length ,_gdb :make ([]byte ,length )},nil ;};type BitWriter interface{WriteBit (_ggf int )error ;WriteBits (_bfe uint64 ,_cd int )(_bfg int ,_cb error );FinishByte ();SkipBits (_fga int )error ;};var (_ _d .Reader =&Reader {};
_ _d .ByteReader =&Reader {};_ _d .Seeker =&Reader {};_ StreamReader =&Reader {};);func (_dccf *Reader )ReadByte ()(byte ,error ){if _dccf ._cda ==0{return _dccf .readBufferByte ();};return _dccf .readUnalignedByte ();};func (_dcg *BufferedWriter )Write (d []byte )(int ,error ){_dcg .expandIfNeeded (len (d ));
if _dcg ._dc ==0{return _dcg .writeFullBytes (d ),nil ;};return _dcg .writeShiftedBytes (d ),nil ;};func (_adb *Writer )byteCapacity ()int {_ef :=len (_adb ._eab )-_adb ._adg ;if _adb ._fff !=0{_ef --;};return _ef ;};func (_gba *SubstreamReader )Mark (){_gba ._ce =_gba ._cdba ;
_gba ._gcd =_gba ._dge };func (_dba *SubstreamReader )ReadByte ()(byte ,error ){if _dba ._dge ==0{return _dba .readBufferByte ();};return _dba .readUnalignedByte ();};func (_ab *BufferedWriter )SkipBits (skip int )error {if skip ==0{return nil ;};_aa :=int (_ab ._dc )+skip ;
if _aa >=0&&_aa < 8{_ab ._dc =uint8 (_aa );return nil ;};_aa =int (_ab ._dc )+_ab ._b *8+skip ;if _aa < 0{return _dg .Errorf ("\u0057r\u0069t\u0065\u0072\u002e\u0053\u006b\u0069\u0070\u0042\u0069\u0074\u0073","\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
};_f :=_aa /8;_dcb :=_aa %8;_ab ._dc =uint8 (_dcb );if _df :=_f -_ab ._b ;_df > 0&&len (_ab ._ca )-1< _f {if _ab ._dc !=0{_df ++;};_ab .expandIfNeeded (_df );};_ab ._b =_f ;return nil ;};func (_ffa *BufferedWriter )expandIfNeeded (_ec int ){if !_ffa .tryGrowByReslice (_ec ){_ffa .grow (_ec );
};};func (_bcg *SubstreamReader )ReadBits (n byte )(_dea uint64 ,_gcf error ){if n < _bcg ._dge {_bcc :=_bcg ._dge -n ;_dea =uint64 (_bcg ._ebgg >>_bcc );_bcg ._ebgg &=1<<_bcc -1;_bcg ._dge =_bcc ;return _dea ,nil ;};if n > _bcg ._dge {if _bcg ._dge > 0{_dea =uint64 (_bcg ._ebgg );
n -=_bcg ._dge ;};var _eeb byte ;for n >=8{_eeb ,_gcf =_bcg .readBufferByte ();if _gcf !=nil {return 0,_gcf ;};_dea =_dea <<8+uint64 (_eeb );n -=8;};if n > 0{if _bcg ._ebgg ,_gcf =_bcg .readBufferByte ();_gcf !=nil {return 0,_gcf ;};_ceb :=8-n ;_dea =_dea <<n +uint64 (_bcg ._ebgg >>_ceb );
_bcg ._ebgg &=1<<_ceb -1;_bcg ._dge =_ceb ;}else {_bcg ._dge =0;};return _dea ,nil ;};_bcg ._dge =0;return uint64 (_bcg ._ebgg ),nil ;};type BinaryWriter interface{BitWriter ;_d .Writer ;_d .ByteWriter ;Data ()[]byte ;};func (_bcd *Reader )readBufferByte ()(byte ,error ){if _bcd ._ba >=int64 (len (_bcd ._ggec )){return 0,_d .EOF ;
};_bcd ._geg =-1;_cc :=_bcd ._ggec [_bcd ._ba ];_bcd ._ba ++;_bcd ._af =int (_cc );return _cc ,nil ;};func (_cee *SubstreamReader )Read (b []byte )(_cbd int ,_dce error ){if _cee ._cdba >=_cee ._cde {_c .Log .Trace ("\u0053\u0074\u0072e\u0061\u006d\u0050\u006fs\u003a\u0020\u0027\u0025\u0064\u0027\u0020>\u003d\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u003a\u0020\u0027\u0025\u0064\u0027",_cee ._cdba ,_cee ._cde );
return 0,_d .EOF ;};for ;_cbd < len (b );_cbd ++{if b [_cbd ],_dce =_cee .readUnalignedByte ();_dce !=nil {if _dce ==_d .EOF {return _cbd ,nil ;};return 0,_dce ;};};return _cbd ,nil ;};func (_fbg *Reader )ReadUint32 ()(uint32 ,error ){_ada :=make ([]byte ,4);
_ ,_fbbe :=_fbg .Read (_ada );if _fbbe !=nil {return 0,_fbbe ;};return _gge .BigEndian .Uint32 (_ada ),nil ;};func (_daa *SubstreamReader )Length ()uint64 {return _daa ._cde };func (_dcce *Reader )StreamPosition ()int64 {return _dcce ._ba };func (_gda *Writer )SkipBits (skip int )error {const _bceg ="\u0057r\u0069t\u0065\u0072\u002e\u0053\u006b\u0069\u0070\u0042\u0069\u0074\u0073";
if skip ==0{return nil ;};_ede :=int (_gda ._fff )+skip ;if _ede >=0&&_ede < 8{_gda ._fff =uint8 (_ede );return nil ;};_ede =int (_gda ._fff )+_gda ._adg *8+skip ;if _ede < 0{return _dg .Errorf (_bceg ,"\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
};_ggc :=_ede /8;_aga :=_ede %8;_c .Log .Trace ("\u0053\u006b\u0069\u0070\u0042\u0069\u0074\u0073");_c .Log .Trace ("\u0042\u0069\u0074\u0049\u006e\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u0042\u0079\u0074\u0065\u0049n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0046\u0075\u006c\u006c\u0042\u0069\u0074\u0073\u003a\u0020'\u0025\u0064\u0027\u002c\u0020\u004c\u0065\u006e\u003a\u0020\u0027\u0025\u0064\u0027,\u0020\u0043\u0061p\u003a\u0020\u0027\u0025\u0064\u0027",_gda ._fff ,_gda ._adg ,int (_gda ._fff )+(_gda ._adg )*8,len (_gda ._eab ),cap (_gda ._eab ));
_c .Log .Trace ("S\u006b\u0069\u0070\u003a\u0020\u0027%\u0064\u0027\u002c\u0020\u0064\u003a \u0027\u0025\u0064\u0027\u002c\u0020\u0062i\u0074\u0049\u006e\u0064\u0065\u0078\u003a\u0020\u0027\u0025d\u0027",skip ,_ede ,_aga );_gda ._fff =uint8 (_aga );if _cdfa :=_ggc -_gda ._adg ;
_cdfa > 0&&len (_gda ._eab )-1< _ggc {_c .Log .Trace ("\u0042\u0079\u0074e\u0044\u0069\u0066\u0066\u003a\u0020\u0025\u0064",_cdfa );return _dg .Errorf (_bceg ,"\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");};
_gda ._adg =_ggc ;_c .Log .Trace ("\u0042\u0069\u0074I\u006e\u0064\u0065\u0078:\u0020\u0027\u0025\u0064\u0027\u002c\u0020B\u0079\u0074\u0065\u0049\u006e\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027",_gda ._fff ,_gda ._adg );return nil ;};func (_bb *BufferedWriter )Data ()[]byte {return _bb ._ca };
func (_aag *Reader )Length ()uint64 {return uint64 (len (_aag ._ggec ))};var _ BinaryWriter =&Writer {};func (_bce *Reader )read (_ee []byte )(int ,error ){if _bce ._ba >=int64 (len (_bce ._ggec )){return 0,_d .EOF ;};_bce ._geg =-1;_fdf :=copy (_ee ,_bce ._ggec [_bce ._ba :]);
_bce ._ba +=int64 (_fdf );return _fdf ,nil ;};func (_bbd *BufferedWriter )WriteBits (bits uint64 ,number int )(_be int ,_gfe error ){const _da ="\u0042u\u0066\u0066\u0065\u0072e\u0064\u0057\u0072\u0069\u0074e\u0072.\u0057r\u0069\u0074\u0065\u0072\u0042\u0069\u0074s";
if number < 0||number > 64{return 0,_dg .Errorf (_da ,"\u0062i\u0074\u0073 \u006e\u0075\u006db\u0065\u0072\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u0069\u006e\u0020r\u0061\u006e\u0067\u0065\u0020\u003c\u0030\u002c\u0036\u0034\u003e,\u0020\u0069\u0073\u003a\u0020\u0027\u0025\u0064\u0027",number );
};_dcc :=number /8;if _dcc > 0{_fb :=number -_dcc *8;for _bcf :=_dcc -1;_bcf >=0;_bcf --{_fbb :=byte ((bits >>uint (_bcf *8+_fb ))&0xff);if _gfe =_bbd .WriteByte (_fbb );_gfe !=nil {return _be ,_dg .Wrapf (_gfe ,_da ,"\u0062\u0079\u0074\u0065\u003a\u0020\u0027\u0025\u0064\u0027",_dcc -_bcf +1);
};};number -=_dcc *8;if number ==0{return _dcc ,nil ;};};var _ga int ;for _gd :=0;_gd < number ;_gd ++{if _bbd ._e {_ga =int ((bits >>uint (number -1-_gd ))&0x1);}else {_ga =int (bits &0x1);bits >>=1;};if _gfe =_bbd .WriteBit (_ga );_gfe !=nil {return _be ,_dg .Wrapf (_gfe ,_da ,"\u0062i\u0074\u003a\u0020\u0025\u0064",_gd );
};};return _dcc ,nil ;};func (_ggge *SubstreamReader )readBool ()(_ebe bool ,_ggeg error ){if _ggge ._dge ==0{_ggge ._ebgg ,_ggeg =_ggge .readBufferByte ();if _ggeg !=nil {return false ,_ggeg ;};_ebe =(_ggge ._ebgg &0x80)!=0;_ggge ._ebgg ,_ggge ._dge =_ggge ._ebgg &0x7f,7;
return _ebe ,nil ;};_ggge ._dge --;_ebe =(_ggge ._ebgg &(1<<_ggge ._dge ))!=0;_ggge ._ebgg &=1<<_ggge ._dge -1;return _ebe ,nil ;};func (_ccdg *SubstreamReader )readBufferByte ()(byte ,error ){if _ccdg ._cdba >=_ccdg ._cde {return 0,_d .EOF ;};if _ccdg ._cdba >=_ccdg ._aaeb ||_ccdg ._cdba < _ccdg ._dgcc {if _gbcb :=_ccdg .fillBuffer ();
_gbcb !=nil {return 0,_gbcb ;};};_ggga :=_ccdg ._gdb [_ccdg ._cdba -_ccdg ._dgcc ];_ccdg ._cdba ++;return _ggga ,nil ;};type BufferedWriter struct{_ca []byte ;_dc uint8 ;_b int ;_e bool ;};func (_dbge *SubstreamReader )ReadUint32 ()(uint32 ,error ){_bed :=make ([]byte ,4);
_ ,_gcfb :=_dbge .Read (_bed );if _gcfb !=nil {return 0,_gcfb ;};return _gge .BigEndian .Uint32 (_bed ),nil ;};func (_gbe *SubstreamReader )Offset ()uint64 {return _gbe ._acd };func (_beg *SubstreamReader )fillBuffer ()error {if uint64 (_beg ._afd .StreamPosition ())!=_beg ._cdba +_beg ._acd {_ ,_ggg :=_beg ._afd .Seek (int64 (_beg ._cdba +_beg ._acd ),_d .SeekStart );
if _ggg !=nil {return _ggg ;};};_beg ._dgcc =_beg ._cdba ;_ccd :=_cfg (uint64 (len (_beg ._gdb )),_beg ._cde -_beg ._cdba );_aaec :=make ([]byte ,_ccd );_dbb ,_cdc :=_beg ._afd .Read (_aaec );if _cdc !=nil {return _cdc ;};for _ceg :=uint64 (0);_ceg < _ccd ;
_ceg ++{_beg ._gdb [_ceg ]=_aaec [_ceg ];};_beg ._aaeb =_beg ._dgcc +uint64 (_dbb );return nil ;};func (_gbba *Writer )WriteBits (bits uint64 ,number int )(_gbea int ,_bbde error ){const _ggfb ="\u0057\u0072\u0069\u0074\u0065\u0072\u002e\u0057\u0072\u0069\u0074\u0065r\u0042\u0069\u0074\u0073";
if number < 0||number > 64{return 0,_dg .Errorf (_ggfb ,"\u0062i\u0074\u0073 \u006e\u0075\u006db\u0065\u0072\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u0069\u006e\u0020r\u0061\u006e\u0067\u0065\u0020\u003c\u0030\u002c\u0036\u0034\u003e,\u0020\u0069\u0073\u003a\u0020\u0027\u0025\u0064\u0027",number );
};if number ==0{return 0,nil ;};_abf :=number /8;if _abf > 0{_gbaf :=number -_abf *8;for _adca :=_abf -1;_adca >=0;_adca --{_ced :=byte ((bits >>uint (_adca *8+_gbaf ))&0xff);if _bbde =_gbba .WriteByte (_ced );_bbde !=nil {return _gbea ,_dg .Wrapf (_bbde ,_ggfb ,"\u0062\u0079\u0074\u0065\u003a\u0020\u0027\u0025\u0064\u0027",_abf -_adca +1);
};};number -=_abf *8;if number ==0{return _abf ,nil ;};};var _daaf int ;for _feb :=0;_feb < number ;_feb ++{if _gbba ._cegb {_daaf =int ((bits >>uint (number -1-_feb ))&0x1);}else {_daaf =int (bits &0x1);bits >>=1;};if _bbde =_gbba .WriteBit (_daaf );_bbde !=nil {return _gbea ,_dg .Wrapf (_bbde ,_ggfb ,"\u0062i\u0074\u003a\u0020\u0025\u0064",_feb );
};};return _abf ,nil ;};func (_bab *SubstreamReader )Reset (){_bab ._cdba =_bab ._ce ;_bab ._dge =_bab ._gcd };func (_ecg *Reader )ReadBool ()(bool ,error ){return _ecg .readBool ()};func (_fg *BufferedWriter )writeFullBytes (_gga []byte )int {_dccb :=copy (_fg ._ca [_fg .fullOffset ():],_gga );
_fg ._b +=_dccb ;return _dccb ;};func (_gec *Reader )ReadBit ()(_fag int ,_gbg error ){_cdaa ,_gbg :=_gec .readBool ();if _gbg !=nil {return 0,_gbg ;};if _cdaa {_fag =1;};return _fag ,nil ;};func (_dgf *Reader )Align ()(_ece byte ){_ece =_dgf ._cda ;_dgf ._cda =0;
return _ece };func (_aba *SubstreamReader )BitPosition ()int {return int (_aba ._dge )};type SubstreamReader struct{_cdba uint64 ;_afd StreamReader ;_acd uint64 ;_cde uint64 ;_gdb []byte ;_dgcc uint64 ;_aaeb uint64 ;_ebgg byte ;_dge byte ;_ce uint64 ;_gcd byte ;
};func (_acf *SubstreamReader )ReadBit ()(_eagf int ,_cdf error ){_gbbg ,_cdf :=_acf .readBool ();if _cdf !=nil {return 0,_cdf ;};if _gbbg {_eagf =1;};return _eagf ,nil ;};func (_ege *Writer )WriteByte (c byte )error {return _ege .writeByte (c )};func (_afc *SubstreamReader )ReadBool ()(bool ,error ){return _afc .readBool ()};
func (_dfbd *BufferedWriter )fullOffset ()int {_ea :=_dfbd ._b ;if _dfbd ._dc !=0{_ea ++;};return _ea ;};func (_aae *Reader )Seek (offset int64 ,whence int )(int64 ,error ){_aae ._geg =-1;var _cfc int64 ;switch whence {case _d .SeekStart :_cfc =offset ;
case _d .SeekCurrent :_cfc =_aae ._ba +offset ;case _d .SeekEnd :_cfc =int64 (len (_aae ._ggec ))+offset ;default:return 0,_gg .New ("\u0072\u0065\u0061de\u0072\u002e\u0052\u0065\u0061\u0064\u0065\u0072\u002eS\u0065e\u006b:\u0020i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0077\u0068\u0065\u006e\u0063\u0065");
};if _cfc < 0{return 0,_gg .New ("\u0072\u0065a\u0064\u0065\u0072\u002eR\u0065\u0061d\u0065\u0072\u002e\u0053\u0065\u0065\u006b\u003a \u006e\u0065\u0067\u0061\u0074\u0069\u0076\u0065\u0020\u0070\u006f\u0073i\u0074\u0069\u006f\u006e");};_aae ._ba =_cfc ;
_aae ._cda =0;return _cfc ,nil ;};func (_edf *Reader )Reset (){_edf ._ba =_edf ._gab ;_edf ._cda =_edf ._ed };const (_a =64;_db =int (^uint (0)>>1););func NewWriter (data []byte )*Writer {return &Writer {_eab :data }};func (_bf *BufferedWriter )Reset (){_bf ._ca =_bf ._ca [:0];
_bf ._b =0;_bf ._dc =0};func (_ge *BufferedWriter )WriteBit (bit int )error {if bit !=1&&bit !=0{return _dg .Errorf ("\u0042\u0075\u0066fe\u0072\u0065\u0064\u0057\u0072\u0069\u0074\u0065\u0072\u002e\u0057\u0072\u0069\u0074\u0065\u0042\u0069\u0074","\u0062\u0069\u0074\u0020\u0076\u0061\u006cu\u0065\u0020\u006du\u0073\u0074\u0020\u0062e\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u007b\u0030\u002c\u0031\u007d\u0020\u0062\u0075\u0074\u0020\u0069\u0073\u003a\u0020\u0025\u0064",bit );
};if len (_ge ._ca )-1< _ge ._b {_ge .expandIfNeeded (1);};_de :=_ge ._dc ;if _ge ._e {_de =7-_ge ._dc ;};_ge ._ca [_ge ._b ]|=byte (uint16 (bit <<_de )&0xff);_ge ._dc ++;if _ge ._dc ==8{_ge ._b ++;_ge ._dc =0;};return nil ;};func (_eg *BufferedWriter )WriteByte (bt byte )error {if _eg ._b > len (_eg ._ca )-1||(_eg ._b ==len (_eg ._ca )-1&&_eg ._dc !=0){_eg .expandIfNeeded (1);
};_eg .writeByte (bt );return nil ;};func (_bbg *Writer )writeByte (_gac byte )error {if _bbg ._adg > len (_bbg ._eab )-1{return _d .EOF ;};if _bbg ._adg ==len (_bbg ._eab )-1&&_bbg ._fff !=0{return _d .EOF ;};if _bbg ._fff ==0{_bbg ._eab [_bbg ._adg ]=_gac ;
_bbg ._adg ++;return nil ;};if _bbg ._cegb {_bbg ._eab [_bbg ._adg ]|=_gac >>_bbg ._fff ;_bbg ._adg ++;_bbg ._eab [_bbg ._adg ]=byte (uint16 (_gac )<<(8-_bbg ._fff )&0xff);}else {_bbg ._eab [_bbg ._adg ]|=byte (uint16 (_gac )<<_bbg ._fff &0xff);_bbg ._adg ++;
_bbg ._eab [_bbg ._adg ]=_gac >>(8-_bbg ._fff );};return nil ;};func (_fac *Writer )FinishByte (){if _fac ._fff ==0{return ;};_fac ._fff =0;_fac ._adg ++;};func (_gdc *Reader )Read (p []byte )(_cdb int ,_gdee error ){if _gdc ._cda ==0{return _gdc .read (p );
};for ;_cdb < len (p );_cdb ++{if p [_cdb ],_gdee =_gdc .readUnalignedByte ();_gdee !=nil {return 0,_gdee ;};};return _cdb ,nil ;};func (_ebc *Writer )writeBit (_gabg uint8 )error {if len (_ebc ._eab )-1< _ebc ._adg {return _d .EOF ;};_geb :=_ebc ._fff ;
if _ebc ._cegb {_geb =7-_ebc ._fff ;};_ebc ._eab [_ebc ._adg ]|=byte (uint16 (_gabg <<_geb )&0xff);_ebc ._fff ++;if _ebc ._fff ==8{_ebc ._adg ++;_ebc ._fff =0;};return nil ;};func (_dbc *Reader )ReadBits (n byte )(_dbg uint64 ,_gdg error ){if n < _dbc ._cda {_cg :=_dbc ._cda -n ;
_dbg =uint64 (_dbc ._bdd >>_cg );_dbc ._bdd &=1<<_cg -1;_dbc ._cda =_cg ;return _dbg ,nil ;};if n > _dbc ._cda {if _dbc ._cda > 0{_dbg =uint64 (_dbc ._bdd );n -=_dbc ._cda ;};for n >=8{_gc ,_acb :=_dbc .readBufferByte ();if _acb !=nil {return 0,_acb ;};
_dbg =_dbg <<8+uint64 (_gc );n -=8;};if n > 0{if _dbc ._bdd ,_gdg =_dbc .readBufferByte ();_gdg !=nil {return 0,_gdg ;};_cff :=8-n ;_dbg =_dbg <<n +uint64 (_dbc ._bdd >>_cff );_dbc ._bdd &=1<<_cff -1;_dbc ._cda =_cff ;}else {_dbc ._cda =0;};return _dbg ,nil ;
};_dbc ._cda =0;return uint64 (_dbc ._bdd ),nil ;};func (_bd *BufferedWriter )FinishByte (){if _bd ._dc ==0{return ;};_bd ._dc =0;_bd ._b ++;};func (_gde *Reader )Mark (){_gde ._gab =_gde ._ba ;_gde ._ed =_gde ._cda };func (_gag *BufferedWriter )writeByte (_eag byte ){switch {case _gag ._dc ==0:_gag ._ca [_gag ._b ]=_eag ;
_gag ._b ++;case _gag ._e :_gag ._ca [_gag ._b ]|=_eag >>_gag ._dc ;_gag ._b ++;_gag ._ca [_gag ._b ]=byte (uint16 (_eag )<<(8-_gag ._dc )&0xff);default:_gag ._ca [_gag ._b ]|=byte (uint16 (_eag )<<_gag ._dc &0xff);_gag ._b ++;_gag ._ca [_gag ._b ]=_eag >>(8-_gag ._dc );
};};type StreamReader interface{_d .Reader ;_d .ByteReader ;_d .Seeker ;Align ()byte ;BitPosition ()int ;Mark ();Length ()uint64 ;ReadBit ()(int ,error );ReadBits (_ag byte )(uint64 ,error );ReadBool ()(bool ,error );ReadUint32 ()(uint32 ,error );Reset ();
StreamPosition ()int64 ;};func (_abac *SubstreamReader )Seek (offset int64 ,whence int )(int64 ,error ){switch whence {case _d .SeekStart :_abac ._cdba =uint64 (offset );case _d .SeekCurrent :_abac ._cdba +=uint64 (offset );case _d .SeekEnd :_abac ._cdba =_abac ._cde +uint64 (offset );
default:return 0,_gg .New ("\u0072\u0065\u0061d\u0065\u0072\u002e\u0053\u0075\u0062\u0073\u0074\u0072\u0065\u0061\u006d\u0052\u0065\u0061\u0064\u0065\u0072\u002e\u0053\u0065\u0065\u006b\u0020\u0069\u006e\u0076\u0061\u006ci\u0064\u0020\u0077\u0068\u0065\u006e\u0063\u0065");
};_abac ._dge =0;return int64 (_abac ._cdba ),nil ;};func (_cbdf *SubstreamReader )readUnalignedByte ()(_bedg byte ,_fdc error ){_adc :=_cbdf ._dge ;_bedg =_cbdf ._ebgg <<(8-_adc );_cbdf ._ebgg ,_fdc =_cbdf .readBufferByte ();if _fdc !=nil {return 0,_fdc ;
};_bedg |=_cbdf ._ebgg >>_adc ;_cbdf ._ebgg &=1<<_adc -1;return _bedg ,nil ;};func (_fe *Reader )readUnalignedByte ()(_gbc byte ,_deb error ){_gaa :=_fe ._cda ;_gbc =_fe ._bdd <<(8-_gaa );_fe ._bdd ,_deb =_fe .readBufferByte ();if _deb !=nil {return 0,_deb ;
};_gbc |=_fe ._bdd >>_gaa ;_fe ._bdd &=1<<_gaa -1;return _gbc ,nil ;};func (_bdb *Reader )readBool ()(_ggaf bool ,_cfb error ){if _bdb ._cda ==0{_bdb ._bdd ,_cfb =_bdb .readBufferByte ();if _cfb !=nil {return false ,_cfb ;};_ggaf =(_bdb ._bdd &0x80)!=0;
_bdb ._bdd ,_bdb ._cda =_bdb ._bdd &0x7f,7;return _ggaf ,nil ;};_bdb ._cda --;_ggaf =(_bdb ._bdd &(1<<_bdb ._cda ))!=0;_bdb ._bdd &=1<<_bdb ._cda -1;return _ggaf ,nil ;};