2023-06-30 13:19:48 +00:00

659 lines
196 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 bitmap ;import (_db "encoding/binary";_b "github.com/stretchr/testify/require";_a "github.com/unidoc/unipdf/v3/common";_da "github.com/unidoc/unipdf/v3/internal/bitwise";_ff "github.com/unidoc/unipdf/v3/internal/imageutil";_e "github.com/unidoc/unipdf/v3/internal/jbig2/basic";
_f "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_bg "image";_ce "math";_cg "sort";_d "strings";_bd "testing";);func (_bcgg *Bitmap )setTwoBytes (_gbfa int ,_cefc uint16 )error {if _gbfa +1> len (_bcgg .Data )-1{return _f .Errorf ("s\u0065\u0074\u0054\u0077\u006f\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_gbfa );
};_bcgg .Data [_gbfa ]=byte ((_cefc &0xff00)>>8);_bcgg .Data [_gbfa +1]=byte (_cefc &0xff);return nil ;};func (_ccdf *byWidth )Len ()int {return len (_ccdf .Values )};func New (width ,height int )*Bitmap {_fgf :=_ebef (width ,height );_fgf .Data =make ([]byte ,height *_fgf .RowStride );
return _fgf ;};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func (_adfg *Bitmap )clipRectangle (_bcea ,_eca *_bg .Rectangle )(_feed *Bitmap ,_fefd error ){const _aca ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if _bcea ==nil {return nil ,_f .Error (_aca ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_ebfge ,_eebc :=_adfg .Width ,_adfg .Height ;_ffe ,_fefd :=ClipBoxToRectangle (_bcea ,_ebfge ,_eebc );if _fefd !=nil {_a .Log .Warning ("\u0027\u0062ox\u0027\u0020\u0064o\u0065\u0073\u006e\u0027t o\u0076er\u006c\u0061\u0070\u0020\u0062\u0069\u0074ma\u0070\u0020\u0027\u0062\u0027\u003a\u0020%\u0076",_fefd );
return nil ,nil ;};_bdgb ,_egag :=_ffe .Min .X ,_ffe .Min .Y ;_dda ,_ecg :=_ffe .Max .X -_ffe .Min .X ,_ffe .Max .Y -_ffe .Min .Y ;_feed =New (_dda ,_ecg );_feed .Text =_adfg .Text ;if _fefd =_feed .RasterOperation (0,0,_dda ,_ecg ,PixSrc ,_adfg ,_bdgb ,_egag );
_fefd !=nil {return nil ,_f .Wrap (_fefd ,_aca ,"");};if _eca !=nil {*_eca =*_ffe ;};return _feed ,nil ;};func TstRSymbol (t *_bd .T ,scale ...int )*Bitmap {_bfga ,_beca :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_b .NoError (t ,_beca );return TstGetScaledSymbol (t ,_bfga ,scale ...);
};func _fedc (_bb ,_abf *Bitmap ,_eeb int ,_ded []byte ,_bbb int )(_feg error ){const _bce ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";var (_fdd ,_aecf ,_efa ,_eec ,_aef ,_ffbc ,_gdg ,_fa int ;
_fbg ,_dcdf ,_daea ,_ea uint32 ;_aaa ,_bae byte ;_fecd uint16 ;);_egc :=make ([]byte ,4);_abb :=make ([]byte ,4);for _efa =0;_efa < _bb .Height -1;_efa ,_eec =_efa +2,_eec +1{_fdd =_efa *_bb .RowStride ;_aecf =_eec *_abf .RowStride ;for _aef ,_ffbc =0,0;
_aef < _bbb ;_aef ,_ffbc =_aef +4,_ffbc +1{for _gdg =0;_gdg < 4;_gdg ++{_fa =_fdd +_aef +_gdg ;if _fa <=len (_bb .Data )-1&&_fa < _fdd +_bb .RowStride {_egc [_gdg ]=_bb .Data [_fa ];}else {_egc [_gdg ]=0x00;};_fa =_fdd +_bb .RowStride +_aef +_gdg ;if _fa <=len (_bb .Data )-1&&_fa < _fdd +(2*_bb .RowStride ){_abb [_gdg ]=_bb .Data [_fa ];
}else {_abb [_gdg ]=0x00;};};_fbg =_db .BigEndian .Uint32 (_egc );_dcdf =_db .BigEndian .Uint32 (_abb );_daea =_fbg &_dcdf ;_daea |=_daea <<1;_ea =_fbg |_dcdf ;_ea &=_ea <<1;_dcdf =_daea &_ea ;_dcdf &=0xaaaaaaaa;_fbg =_dcdf |(_dcdf <<7);_aaa =byte (_fbg >>24);
_bae =byte ((_fbg >>8)&0xff);_fa =_aecf +_ffbc ;if _fa +1==len (_abf .Data )-1||_fa +1>=_aecf +_abf .RowStride {if _feg =_abf .SetByte (_fa ,_ded [_aaa ]);_feg !=nil {return _f .Wrapf (_feg ,_bce ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_fa );};
}else {_fecd =(uint16 (_ded [_aaa ])<<8)|uint16 (_ded [_bae ]);if _feg =_abf .setTwoBytes (_fa ,_fecd );_feg !=nil {return _f .Wrapf (_feg ,_bce ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_fa );
};_ffbc ++;};};};return nil ;};func (_eccf *ClassedPoints )xSortFunction ()func (_febbfd int ,_ccga int )bool {return func (_dagd ,_afcc int )bool {return _eccf .XAtIndex (_dagd )< _eccf .XAtIndex (_afcc )};};func _efd (_ebgbf uint ,_gefd byte )byte {return _gefd >>_ebgbf <<_ebgbf };
const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func (_faaf Points )XSorter ()func (_bgbe ,_dgff int )bool {return func (_ccae ,_cdeb int )bool {return _faaf [_ccae ].X < _faaf [_cdeb ].X };
};func (_aega *Bitmap )setEightFullBytes (_abd int ,_egga uint64 )error {if _abd +7> len (_aega .Data )-1{return _f .Error ("\u0073\u0065\u0074\u0045\u0069\u0067\u0068\u0074\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
};_aega .Data [_abd ]=byte ((_egga &0xff00000000000000)>>56);_aega .Data [_abd +1]=byte ((_egga &0xff000000000000)>>48);_aega .Data [_abd +2]=byte ((_egga &0xff0000000000)>>40);_aega .Data [_abd +3]=byte ((_egga &0xff00000000)>>32);_aega .Data [_abd +4]=byte ((_egga &0xff000000)>>24);
_aega .Data [_abd +5]=byte ((_egga &0xff0000)>>16);_aega .Data [_abd +6]=byte ((_egga &0xff00)>>8);_aega .Data [_abd +7]=byte (_egga &0xff);return nil ;};func (_cffc *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _geg (_cffc ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};func _aebbd ()[]int {_ecdd :=make ([]int ,256);for _ggfd :=0;_ggfd <=0xff;_ggfd ++{_agec :=byte (_ggfd );_ecdd [_agec ]=int (_agec &0x1)+(int (_agec >>1)&0x1)+(int (_agec >>2)&0x1)+(int (_agec >>3)&0x1)+(int (_agec >>4)&0x1)+(int (_agec >>5)&0x1)+(int (_agec >>6)&0x1)+(int (_agec >>7)&0x1);
};return _ecdd ;};func (_acdg *BitmapsArray )AddBox (box *_bg .Rectangle ){_acdg .Boxes =append (_acdg .Boxes ,box )};func (_badb *Bitmap )resizeImageData (_afgbf *Bitmap )error {if _afgbf ==nil {return _f .Error ("\u0072e\u0073i\u007a\u0065\u0049\u006d\u0061\u0067\u0065\u0044\u0061\u0074\u0061","\u0073r\u0063 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _badb .SizesEqual (_afgbf ){return nil ;};_badb .Data =make ([]byte ,len (_afgbf .Data ));_badb .Width =_afgbf .Width ;_badb .Height =_afgbf .Height ;_badb .RowStride =_afgbf .RowStride ;return nil ;};func _ab (_fdae ,_bdg *Bitmap ,_dade int ,_dfe []byte ,_caf int )(_bde error ){const _gge ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";
var (_abc ,_aac ,_feda ,_cff ,_ada ,_beb ,_cgga ,_ecb int ;_ggd ,_dge ,_ggf ,_gcg uint32 ;_dfeb ,_afc byte ;_gbd uint16 ;);_bdc :=make ([]byte ,4);_ceb :=make ([]byte ,4);for _feda =0;_feda < _fdae .Height -1;_feda ,_cff =_feda +2,_cff +1{_abc =_feda *_fdae .RowStride ;
_aac =_cff *_bdg .RowStride ;for _ada ,_beb =0,0;_ada < _caf ;_ada ,_beb =_ada +4,_beb +1{for _cgga =0;_cgga < 4;_cgga ++{_ecb =_abc +_ada +_cgga ;if _ecb <=len (_fdae .Data )-1&&_ecb < _abc +_fdae .RowStride {_bdc [_cgga ]=_fdae .Data [_ecb ];}else {_bdc [_cgga ]=0x00;
};_ecb =_abc +_fdae .RowStride +_ada +_cgga ;if _ecb <=len (_fdae .Data )-1&&_ecb < _abc +(2*_fdae .RowStride ){_ceb [_cgga ]=_fdae .Data [_ecb ];}else {_ceb [_cgga ]=0x00;};};_ggd =_db .BigEndian .Uint32 (_bdc );_dge =_db .BigEndian .Uint32 (_ceb );_ggf =_ggd &_dge ;
_ggf |=_ggf <<1;_gcg =_ggd |_dge ;_gcg &=_gcg <<1;_dge =_ggf |_gcg ;_dge &=0xaaaaaaaa;_ggd =_dge |(_dge <<7);_dfeb =byte (_ggd >>24);_afc =byte ((_ggd >>8)&0xff);_ecb =_aac +_beb ;if _ecb +1==len (_bdg .Data )-1||_ecb +1>=_aac +_bdg .RowStride {if _bde =_bdg .SetByte (_ecb ,_dfe [_dfeb ]);
_bde !=nil {return _f .Wrapf (_bde ,_gge ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_ecb );};}else {_gbd =(uint16 (_dfe [_dfeb ])<<8)|uint16 (_dfe [_afc ]);if _bde =_bdg .setTwoBytes (_ecb ,_gbd );_bde !=nil {return _f .Wrapf (_bde ,_gge ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_ecb );
};_beb ++;};};};return nil ;};func init (){for _gfd :=0;_gfd < 256;_gfd ++{_ebe [_gfd ]=uint8 (_gfd &0x1)+(uint8 (_gfd >>1)&0x1)+(uint8 (_gfd >>2)&0x1)+(uint8 (_gfd >>3)&0x1)+(uint8 (_gfd >>4)&0x1)+(uint8 (_gfd >>5)&0x1)+(uint8 (_gfd >>6)&0x1)+(uint8 (_gfd >>7)&0x1);
};};func (_cbd *Bitmap )CreateTemplate ()*Bitmap {return _cbd .createTemplate ()};func _gc (_gg ,_dad *Bitmap )(_dfa error ){const _fgg ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_de :=_dad .RowStride ;
_fc :=_gg .RowStride ;var _ebg ,_gcf ,_egd ,_bdf ,_ga int ;for _egd =0;_egd < _dad .Height ;_egd ++{_ebg =_egd *_de ;_gcf =8*_egd *_fc ;for _bdf =0;_bdf < _de ;_bdf ++{if _dfa =_gg .setEightBytes (_gcf +_bdf *8,_abgc [_dad .Data [_ebg +_bdf ]]);_dfa !=nil {return _f .Wrap (_dfa ,_fgg ,"");
};};for _ga =1;_ga < 8;_ga ++{for _bdf =0;_bdf < _fc ;_bdf ++{if _dfa =_gg .SetByte (_gcf +_ga *_fc +_bdf ,_gg .Data [_gcf +_bdf ]);_dfa !=nil {return _f .Wrap (_dfa ,_fgg ,"");};};};};return nil ;};func (_cdge *Bitmap )setPadBits (_becc int ){_gce :=8-_cdge .Width %8;
if _gce ==8{return ;};_caff :=_cdge .Width /8;_daad :=_fecg [_gce ];if _becc ==0{_daad ^=_daad ;};var _debfc int ;for _cggd :=0;_cggd < _cdge .Height ;_cggd ++{_debfc =_cggd *_cdge .RowStride +_caff ;if _becc ==0{_cdge .Data [_debfc ]&=_daad ;}else {_cdge .Data [_debfc ]|=_daad ;
};};};func _ddc (_aga *Bitmap ,_dcd int ,_dga []byte )(_cf *Bitmap ,_bcc error ){const _dcdd ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";if _aga ==nil {return nil ,_f .Error (_dcdd ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _dcd < 1||_dcd > 4{return nil ,_f .Error (_dcdd ,"\u006c\u0065\u0076\u0065\u006c\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u0069\u006e\u0020\u0073e\u0074\u0020\u007b\u0031\u002c\u0032\u002c\u0033\u002c\u0034\u007d");};if _aga .Height <=1{return nil ,_f .Errorf (_dcdd ,"\u0073o\u0075\u0072c\u0065\u0020\u0068e\u0069\u0067\u0068\u0074\u0020\u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u0061t\u0020\u006c\u0065\u0061\u0073\u0074\u0020\u0027\u0032\u0027\u0020-\u0020\u0069\u0073\u003a\u0020\u0027\u0025\u0064\u0027",_aga .Height );
};_cf =New (_aga .Width /2,_aga .Height /2);if _dga ==nil {_dga =_afe ();};_cd :=_gacf (_aga .RowStride ,2*_cf .RowStride );switch _dcd {case 1:_bcc =_cfc (_aga ,_cf ,_dcd ,_dga ,_cd );case 2:_bcc =_ab (_aga ,_cf ,_dcd ,_dga ,_cd );case 3:_bcc =_fedc (_aga ,_cf ,_dcd ,_dga ,_cd );
case 4:_bcc =_aedb (_aga ,_cf ,_dcd ,_dga ,_cd );};if _bcc !=nil {return nil ,_bcc ;};return _cf ,nil ;};var (_ccdb =_dce ();_fgdf =_aed ();_abgc =_ec (););func (_geaf *ClassedPoints )XAtIndex (i int )float32 {return (*_geaf .Points )[_geaf .IntSlice [i ]].X };
func (_dada *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_ggbb bool ,_ggda error ){const _bced ="\u0042i\u0074\u006d\u0061\u0070\u002e\u0054\u0068\u0072\u0065\u0073\u0068o\u006c\u0064\u0050\u0069\u0078\u0065\u006c\u0053\u0075\u006d";if tab8 ==nil {tab8 =_aebbd ();
};_gbdg :=_dada .Width >>3;_cad :=_dada .Width &7;_ddg :=byte (0xff<<uint (8-_cad ));var (_ggdd ,_gfa ,_cbeg ,_cfb int ;_bacd byte ;);for _ggdd =0;_ggdd < _dada .Height ;_ggdd ++{_cbeg =_dada .RowStride *_ggdd ;for _gfa =0;_gfa < _gbdg ;_gfa ++{_bacd ,_ggda =_dada .GetByte (_cbeg +_gfa );
if _ggda !=nil {return false ,_f .Wrap (_ggda ,_bced ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_cfb +=tab8 [_bacd ];};if _cad !=0{_bacd ,_ggda =_dada .GetByte (_cbeg +_gfa );if _ggda !=nil {return false ,_f .Wrap (_ggda ,_bced ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");
};_bacd &=_ddg ;_cfb +=tab8 [_bacd ];};if _cfb > thresh {return true ,nil ;};};return _ggbb ,nil ;};func (_ggab *Bitmap )SetByte (index int ,v byte )error {if index > len (_ggab .Data )-1||index < 0{return _f .Errorf ("\u0053e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",index );
};_ggab .Data [index ]=v ;return nil ;};func _gacf (_bdba ,_bgb int )int {if _bdba < _bgb {return _bdba ;};return _bgb ;};func _bega (_becde ,_gefc *Bitmap ,_dfaa ,_fcea int )(*Bitmap ,error ){const _fcec ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";
if _gefc ==nil {return nil ,_f .Error (_fcec ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _dfaa < 1||_fcea < 1{return nil ,_f .Error (_fcec ,"\u0068\u0073\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069\u007a\u0065\u0020\u0061\u0072e\u0020\u006e\u006f\u0074\u0020\u0067\u0072e\u0061\u0074\u0065\u0072\u0020\u0074\u0068\u0061\u006e\u0020\u006fr\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0074\u006f\u0020\u0031");
};if _dfaa ==1&&_fcea ==1{_gaef ,_bbdd :=_dgbfd (_becde ,_gefc );if _bbdd !=nil {return nil ,_f .Wrap (_bbdd ,_fcec ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _gaef ,nil ;};if _dfaa ==1||_fcea ==1{_gefce :=SelCreateBrick (_fcea ,_dfaa ,_fcea /2,_dfaa /2,SelHit );_bcga ,_eadf :=_agef (_becde ,_gefc ,_gefce );if _eadf !=nil {return nil ,_f .Wrap (_eadf ,_fcec ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _bcga ,nil ;};_fcffd :=SelCreateBrick (1,_dfaa ,0,_dfaa /2,SelHit );_cfae :=SelCreateBrick (_fcea ,1,_fcea /2,0,SelHit );_bbdb ,_gede :=_agef (nil ,_gefc ,_fcffd );if _gede !=nil {return nil ,_f .Wrap (_gede ,_fcec ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_becde ,_gede =_agef (_becde ,_bbdb ,_cfae );if _gede !=nil {return nil ,_f .Wrap (_gede ,_fcec ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _becde ,nil ;};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;
SizeSelectByArea ;SizeSelectByPerimeter ;);func _feedg (_eafc *Bitmap ,_eafb ,_fbad int ,_dgabe ,_gbafba int ,_ddff RasterOperator ){var (_agae int ;_acbf byte ;_dgbfg ,_gbgd int ;_bfbd int ;);_deega :=_dgabe >>3;_adagd :=_dgabe &7;if _adagd > 0{_acbf =_fedg [_adagd ];
};_agae =_eafc .RowStride *_fbad +(_eafb >>3);switch _ddff {case PixClr :for _dgbfg =0;_dgbfg < _gbafba ;_dgbfg ++{_bfbd =_agae +_dgbfg *_eafc .RowStride ;for _gbgd =0;_gbgd < _deega ;_gbgd ++{_eafc .Data [_bfbd ]=0x0;_bfbd ++;};if _adagd > 0{_eafc .Data [_bfbd ]=_bdaa (_eafc .Data [_bfbd ],0x0,_acbf );
};};case PixSet :for _dgbfg =0;_dgbfg < _gbafba ;_dgbfg ++{_bfbd =_agae +_dgbfg *_eafc .RowStride ;for _gbgd =0;_gbgd < _deega ;_gbgd ++{_eafc .Data [_bfbd ]=0xff;_bfbd ++;};if _adagd > 0{_eafc .Data [_bfbd ]=_bdaa (_eafc .Data [_bfbd ],0xff,_acbf );};
};case PixNotDst :for _dgbfg =0;_dgbfg < _gbafba ;_dgbfg ++{_bfbd =_agae +_dgbfg *_eafc .RowStride ;for _gbgd =0;_gbgd < _deega ;_gbgd ++{_eafc .Data [_bfbd ]=^_eafc .Data [_bfbd ];_bfbd ++;};if _adagd > 0{_eafc .Data [_bfbd ]=_bdaa (_eafc .Data [_bfbd ],^_eafc .Data [_bfbd ],_acbf );
};};};};func _efgd (_gafa *Bitmap ,_daada *Bitmap ,_bgcf *Selection ,_feeef **Bitmap )(*Bitmap ,error ){const _fdcd ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _daada ==nil {return nil ,_f .Error (_fdcd ,"\u004d\u006f\u0072\u0070\u0068\u0041\u0072\u0067\u0073\u0031\u0020'\u0073\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066i\u006e\u0065\u0064");
};if _bgcf ==nil {return nil ,_f .Error (_fdcd ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_edgd ,_afafg :=_bgcf .Height ,_bgcf .Width ;if _edgd ==0||_afafg ==0{return nil ,_f .Error (_fdcd ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");
};if _gafa ==nil {_gafa =_daada .createTemplate ();*_feeef =_daada ;return _gafa ,nil ;};_gafa .Width =_daada .Width ;_gafa .Height =_daada .Height ;_gafa .RowStride =_daada .RowStride ;_gafa .Color =_daada .Color ;_gafa .Data =make ([]byte ,_daada .RowStride *_daada .Height );
if _gafa ==_daada {*_feeef =_daada .Copy ();}else {*_feeef =_daada ;};return _gafa ,nil ;};func TstWriteSymbols (t *_bd .T ,bms *Bitmaps ,src *Bitmap ){for _daed :=0;_daed < bms .Size ();_daed ++{_acegb :=bms .Values [_daed ];_cdfg :=bms .Boxes [_daed ];
_eeafc :=src .RasterOperation (_cdfg .Min .X ,_cdfg .Min .Y ,_acegb .Width ,_acegb .Height ,PixSrc ,_acegb ,0,0);_b .NoError (t ,_eeafc );};};func _dac (_deg *Bitmap ,_bfa ...int )(_gdb *Bitmap ,_ge error ){const _gfc ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";
if _deg ==nil {return nil ,_f .Error (_gfc ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_bfa )==0||len (_bfa )> 4{return nil ,_f .Error (_gfc ,"t\u0068\u0065\u0072\u0065\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u0061\u0074\u0020\u006cea\u0073\u0074\u0020\u006fn\u0065\u0020\u0061\u006e\u0064\u0020\u0061\u0074\u0020mo\u0073\u0074 \u0034\u0020\u006c\u0065\u0076\u0065\u006c\u0073");
};if _bfa [0]<=0{_a .Log .Debug ("\u006c\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030 \u002d\u0020\u006e\u006f\u0020\u0072\u0065\u0064\u0075\u0063t\u0069\u006f\u006e");_gdb ,_ge =_dgbfd (nil ,_deg );if _ge !=nil {return nil ,_f .Wrap (_ge ,_gfc ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
};return _gdb ,nil ;};_be :=_afe ();_gdb =_deg ;for _gab ,_aec :=range _bfa {if _aec <=0{break ;};_gdb ,_ge =_ddc (_gdb ,_aec ,_be );if _ge !=nil {return nil ,_f .Wrapf (_ge ,_gfc ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_gab );
};};return _gdb ,nil ;};type Component int ;func (_efef *Bitmaps )SortByHeight (){_gcdce :=(*byHeight )(_efef );_cg .Sort (_gcdce )};func _cbdd (_eaga ,_ddbf *Bitmap ,_bgc ,_ggdf int )(*Bitmap ,error ){const _dccfg ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";
if _ddbf ==nil {_a .Log .Debug ("\u0064\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063k\u0020\u0073\u006f\u0075\u0072\u0063\u0065 \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");return nil ,_f .Error (_dccfg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _bgc < 1||_ggdf < 1{return nil ,_f .Error (_dccfg ,"\u0068\u0053\u007a\u0069\u0065 \u0061\u006e\u0064\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u0061\u0072\u0065 \u006e\u006f\u0020\u0067\u0072\u0065\u0061\u0074\u0065\u0072\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0074\u006f\u0020\u0031");
};if _bgc ==1&&_ggdf ==1{_daff ,_dddb :=_dgbfd (_eaga ,_ddbf );if _dddb !=nil {return nil ,_f .Wrap (_dddb ,_dccfg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _daff ,nil ;};if _bgc ==1||_ggdf ==1{_egf :=SelCreateBrick (_ggdf ,_bgc ,_ggdf /2,_bgc /2,SelHit );_eacfg ,_cdf :=_ggea (_eaga ,_ddbf ,_egf );if _cdf !=nil {return nil ,_f .Wrap (_cdf ,_dccfg ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _eacfg ,nil ;};_cagg :=SelCreateBrick (1,_bgc ,0,_bgc /2,SelHit );_dbgf :=SelCreateBrick (_ggdf ,1,_ggdf /2,0,SelHit );_ddea ,_cdde :=_ggea (nil ,_ddbf ,_cagg );if _cdde !=nil {return nil ,_f .Wrap (_cdde ,_dccfg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_eaga ,_cdde =_ggea (_eaga ,_ddea ,_dbgf );if _cdde !=nil {return nil ,_f .Wrap (_cdde ,_dccfg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _eaga ,nil ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;
SizeSelectIfGTE ;SizeSelectIfEQ ;);func (_bfeb Points )YSorter ()func (_fbfbf ,_cbgf int )bool {return func (_ccaf ,_ddefd int )bool {return _bfeb [_ccaf ].Y < _bfeb [_ddefd ].Y };};func (_ggaa *Bitmaps )selectByIndicator (_fdda *_e .NumSlice )(_dfce *Bitmaps ,_eebeb error ){const _agdd ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _ggaa ==nil {return nil ,_f .Error (_agdd ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _fdda ==nil {return nil ,_f .Error (_agdd ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};if len (_ggaa .Values )==0{return _ggaa ,nil ;};if len (*_fdda )!=len (_ggaa .Values ){return nil ,_f .Errorf (_agdd ,"\u006ea\u0020\u006ce\u006e\u0067\u0074\u0068:\u0020\u0025\u0064,\u0020\u0069\u0073\u0020\u0064\u0069\u0066\u0066\u0065re\u006e\u0074\u0020t\u0068\u0061n\u0020\u0062\u0069\u0074\u006d\u0061p\u0073\u003a \u0025\u0064",len (*_fdda ),len (_ggaa .Values ));
};var _bdcdg ,_cbfg ,_gbadb int ;for _cbfg =0;_cbfg < len (*_fdda );_cbfg ++{if _bdcdg ,_eebeb =_fdda .GetInt (_cbfg );_eebeb !=nil {return nil ,_f .Wrap (_eebeb ,_agdd ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _bdcdg ==1{_gbadb ++;
};};if _gbadb ==len (_ggaa .Values ){return _ggaa ,nil ;};_dfce =&Bitmaps {};_bcec :=len (_ggaa .Values )==len (_ggaa .Boxes );for _cbfg =0;_cbfg < len (*_fdda );_cbfg ++{if _bdcdg =int ((*_fdda )[_cbfg ]);_bdcdg ==0{continue ;};_dfce .Values =append (_dfce .Values ,_ggaa .Values [_cbfg ]);
if _bcec {_dfce .Boxes =append (_dfce .Boxes ,_ggaa .Boxes [_cbfg ]);};};return _dfce ,nil ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_bef float64 ,_efbg error ){const _eegfd ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";
if bm1 ==nil ||bm2 ==nil {return 0,_f .Error (_eegfd ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_f .Error (_eegfd ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
};if area1 <=0||area2 <=0{return 0,_f .Error (_eegfd ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_cege ,_cggfa :=bm1 .Width ,bm1 .Height ;_cce ,_dbfe :=bm2 .Width ,bm2 .Height ;
_fddb :=_eeeg (_cege -_cce );if _fddb > maxDiffW {return 0,nil ;};_ebgc :=_eeeg (_cggfa -_dbfe );if _ebgc > maxDiffH {return 0,nil ;};var _baeb ,_eab int ;if delX >=0{_baeb =int (delX +0.5);}else {_baeb =int (delX -0.5);};if delY >=0{_eab =int (delY +0.5);
}else {_eab =int (delY -0.5);};_gggg :=_fcd (_eab ,0);_gggb :=_gacf (_dbfe +_eab ,_cggfa );_ffa :=bm1 .RowStride *_gggg ;_ddaa :=bm2 .RowStride *(_gggg -_eab );_febab :=_fcd (_baeb ,0);_egcg :=_gacf (_cce +_baeb ,_cege );_gaa :=bm2 .RowStride ;var _bbc ,_badbc int ;
if _baeb >=8{_bbc =_baeb >>3;_ffa +=_bbc ;_febab -=_bbc <<3;_egcg -=_bbc <<3;_baeb &=7;}else if _baeb <=-8{_badbc =-((_baeb +7)>>3);_ddaa +=_badbc ;_gaa -=_badbc ;_baeb +=_badbc <<3;};if _febab >=_egcg ||_gggg >=_gggb {return 0,nil ;};_faa :=(_egcg +7)>>3;
var (_bfg ,_cgf ,_gec byte ;_fdcb ,_ecdea ,_gcdc int ;);switch {case _baeb ==0:for _gcdc =_gggg ;_gcdc < _gggb ;_gcdc ,_ffa ,_ddaa =_gcdc +1,_ffa +bm1 .RowStride ,_ddaa +bm2 .RowStride {for _ecdea =0;_ecdea < _faa ;_ecdea ++{_gec =bm1 .Data [_ffa +_ecdea ]&bm2 .Data [_ddaa +_ecdea ];
_fdcb +=tab [_gec ];};};case _baeb > 0:if _gaa < _faa {for _gcdc =_gggg ;_gcdc < _gggb ;_gcdc ,_ffa ,_ddaa =_gcdc +1,_ffa +bm1 .RowStride ,_ddaa +bm2 .RowStride {_bfg ,_cgf =bm1 .Data [_ffa ],bm2 .Data [_ddaa ]>>uint (_baeb );_gec =_bfg &_cgf ;_fdcb +=tab [_gec ];
for _ecdea =1;_ecdea < _gaa ;_ecdea ++{_bfg ,_cgf =bm1 .Data [_ffa +_ecdea ],(bm2 .Data [_ddaa +_ecdea ]>>uint (_baeb ))|(bm2 .Data [_ddaa +_ecdea -1]<<uint (8-_baeb ));_gec =_bfg &_cgf ;_fdcb +=tab [_gec ];};_bfg =bm1 .Data [_ffa +_ecdea ];_cgf =bm2 .Data [_ddaa +_ecdea -1]<<uint (8-_baeb );
_gec =_bfg &_cgf ;_fdcb +=tab [_gec ];};}else {for _gcdc =_gggg ;_gcdc < _gggb ;_gcdc ,_ffa ,_ddaa =_gcdc +1,_ffa +bm1 .RowStride ,_ddaa +bm2 .RowStride {_bfg ,_cgf =bm1 .Data [_ffa ],bm2 .Data [_ddaa ]>>uint (_baeb );_gec =_bfg &_cgf ;_fdcb +=tab [_gec ];
for _ecdea =1;_ecdea < _faa ;_ecdea ++{_bfg =bm1 .Data [_ffa +_ecdea ];_cgf =(bm2 .Data [_ddaa +_ecdea ]>>uint (_baeb ))|(bm2 .Data [_ddaa +_ecdea -1]<<uint (8-_baeb ));_gec =_bfg &_cgf ;_fdcb +=tab [_gec ];};};};default:if _faa < _gaa {for _gcdc =_gggg ;
_gcdc < _gggb ;_gcdc ,_ffa ,_ddaa =_gcdc +1,_ffa +bm1 .RowStride ,_ddaa +bm2 .RowStride {for _ecdea =0;_ecdea < _faa ;_ecdea ++{_bfg =bm1 .Data [_ffa +_ecdea ];_cgf =bm2 .Data [_ddaa +_ecdea ]<<uint (-_baeb );_cgf |=bm2 .Data [_ddaa +_ecdea +1]>>uint (8+_baeb );
_gec =_bfg &_cgf ;_fdcb +=tab [_gec ];};};}else {for _gcdc =_gggg ;_gcdc < _gggb ;_gcdc ,_ffa ,_ddaa =_gcdc +1,_ffa +bm1 .RowStride ,_ddaa +bm2 .RowStride {for _ecdea =0;_ecdea < _faa -1;_ecdea ++{_bfg =bm1 .Data [_ffa +_ecdea ];_cgf =bm2 .Data [_ddaa +_ecdea ]<<uint (-_baeb );
_cgf |=bm2 .Data [_ddaa +_ecdea +1]>>uint (8+_baeb );_gec =_bfg &_cgf ;_fdcb +=tab [_gec ];};_bfg =bm1 .Data [_ffa +_ecdea ];_cgf =bm2 .Data [_ddaa +_ecdea ]<<uint (-_baeb );_gec =_bfg &_cgf ;_fdcb +=tab [_gec ];};};};_bef =float64 (_fdcb )*float64 (_fdcb )/(float64 (area1 )*float64 (area2 ));
return _bef ,nil ;};func (_cggge *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _ebecd ="\u0043\u006c\u0061\u0073s\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047e\u0074I\u006e\u0074\u0059\u0042\u0079\u0043\u006ca\u0073\u0073";if i >=_cggge .IntSlice .Size (){return 0,_f .Errorf (_ebecd ,"\u0069\u003a\u0020\u0027\u0025\u0064\u0027 \u0069\u0073\u0020o\u0075\u0074\u0020\u006ff\u0020\u0074\u0068\u0065\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065",i );
};return int (_cggge .XAtIndex (i )),nil ;};type SizeComparison int ;func (_dgaa Points )Get (i int )(Point ,error ){if i > len (_dgaa )-1{return Point {},_f .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _dgaa [i ],nil ;};func (_eaeg *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _bdfgeg ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _eaeg ==nil {return nil ,_f .Error (_bdfgeg ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if s ==nil {return nil ,_f .Error (_bdfgeg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_ageeg :=len (_eaeg .Values );_bafe :=&Bitmaps {Values :make ([]*Bitmap ,_ageeg ),Boxes :make ([]*_bg .Rectangle ,_ageeg )};
var (_gada ,_gbcfc *Bitmap ;_cafaa *_bg .Rectangle ;_caea error ;);for _fddg :=0;_fddg < _ageeg ;_fddg ++{if _gada ,_caea =_eaeg .GetBitmap (_fddg );_caea !=nil {return nil ,_f .Wrap (_caea ,_bdfgeg ,"");};if _cafaa ,_caea =_eaeg .GetBox (_fddg );_caea !=nil {return nil ,_f .Wrap (_caea ,_bdfgeg ,"");
};if _gbcfc ,_caea =s .clipRectangle (_cafaa ,nil );_caea !=nil {return nil ,_f .Wrap (_caea ,_bdfgeg ,"");};if _gbcfc ,_caea =_gbcfc .And (_gada );_caea !=nil {return nil ,_f .Wrap (_caea ,_bdfgeg ,"");};_bafe .Values [_fddg ]=_gbcfc ;_bafe .Boxes [_fddg ]=_cafaa ;
};return _bafe ,nil ;};func _gefa (_dadda *_e .Stack )(_eaab *fillSegment ,_fafg error ){const _cfec ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _dadda ==nil {return nil ,_f .Error (_cfec ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
};if _dadda .Aux ==nil {return nil ,_f .Error (_cfec ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_afdd ,_facde :=_dadda .Pop ();if !_facde {return nil ,nil ;};_cbge ,_facde :=_afdd .(*fillSegment );
if !_facde {return nil ,_f .Error (_cfec ,"\u0073\u0074\u0061ck\u0020\u0064\u006f\u0065\u0073\u006e\u0027\u0074\u0020c\u006fn\u0074a\u0069n\u0020\u002a\u0066\u0069\u006c\u006c\u0053\u0065\u0067\u006d\u0065\u006e\u0074");};_eaab =&fillSegment {_cbge ._bgcea ,_cbge ._dbbbf ,_cbge ._dgbg +_cbge ._afafga ,_cbge ._afafga };
_dadda .Aux .Push (_cbge );return _eaab ,nil ;};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _gfgeb (oldByte ,newByte ,op );};func (_dbeb Points )GetIntY (i int )(int ,error ){if i >=len (_dbeb ){return 0,_f .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0059","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return int (_dbeb [i ].Y ),nil ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _dgfe ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_gbafb ,_ggfef :=p1 .Width ,p1 .Height ;_aecc ,_gae :=p3 .Width ,p3 .Height ;
if _e .Abs (_gbafb -_aecc )> maxDiffW {return false ,nil ;};if _e .Abs (_ggfef -_gae )> maxDiffH {return false ,nil ;};_gddg :=int (delX +_e .Sign (delX )*0.5);_fbeg :=int (delY +_e .Sign (delY )*0.5);var _egaa error ;_dffe :=p1 .CreateTemplate ();if _egaa =_dffe .RasterOperation (0,0,_gbafb ,_ggfef ,PixSrc ,p1 ,0,0);
_egaa !=nil {return false ,_f .Wrap (_egaa ,_dgfe ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _egaa =_dffe .RasterOperation (_gddg ,_fbeg ,_gbafb ,_ggfef ,PixNotSrcAndDst ,p4 ,0,0);_egaa !=nil {return false ,_f .Wrap (_egaa ,_dgfe ,"\u0021p\u0034\u0020\u0026\u0020\u0074");
};if _dffe .Zero (){return false ,nil ;};if _egaa =_dffe .RasterOperation (_gddg ,_fbeg ,_aecc ,_gae ,PixSrc ,p3 ,0,0);_egaa !=nil {return false ,_f .Wrap (_egaa ,_dgfe ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _egaa =_dffe .RasterOperation (0,0,_aecc ,_gae ,PixNotSrcAndDst ,p2 ,0,0);
_egaa !=nil {return false ,_f .Wrap (_egaa ,_dgfe ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _dffe .Zero (),nil ;};var (_fedg =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_fecg =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);
func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _deedg ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_edfg :=_ebef (width ,height );_edfg .Data =data ;if _eba :=((width *height )+7)>>3;
len (data )< _eba {return nil ,_f .Errorf (_deedg ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0064a\u0074\u0061\u0020\u006c\u0065\u006e\u0067\u0074\u0068\u003a\u0020\u0027\u0025\u0064\u0027\u002e\u0020\u0054\u0068\u0065\u0020\u0064\u0061t\u0061\u0020s\u0068\u006fu\u006c\u0064\u0020\u0063\u006f\u006e\u0074\u0061\u0069\u006e\u0020\u0061\u0074 l\u0065\u0061\u0073\u0074\u003a\u0020\u0027\u0025\u0064'\u0020\u0062\u0079\u0074\u0065\u0073",len (data ),_eba );
};if _ggfb :=_edfg .addPadBits ();_ggfb !=nil {return nil ,_f .Wrap (_ggfb ,_deedg ,"");};return _edfg ,nil ;};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func (_edff *Bitmap )GetByteIndex (x ,y int )int {return y *_edff .RowStride +(x >>3)};
func _eefdf (_cegb *Bitmap ,_edee *_e .Stack ,_eeaa ,_aefa int )(_dgca *_bg .Rectangle ,_acacc error ){const _agfc ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _cegb ==nil {return nil ,_f .Error (_agfc ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
};if _edee ==nil {return nil ,_f .Error (_agfc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_efda ,_bgcg :=_cegb .Width ,_cegb .Height ;_acbgd :=_efda -1;_bgfa :=_bgcg -1;if _eeaa < 0||_eeaa > _acbgd ||_aefa < 0||_aefa > _bgfa ||!_cegb .GetPixel (_eeaa ,_aefa ){return nil ,nil ;
};_fcdb :=_bg .Rect (100000,100000,0,0);if _acacc =_acgf (_edee ,_eeaa ,_eeaa ,_aefa ,1,_bgfa ,&_fcdb );_acacc !=nil {return nil ,_f .Wrap (_acacc ,_agfc ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _acacc =_acgf (_edee ,_eeaa ,_eeaa ,_aefa +1,-1,_bgfa ,&_fcdb );
_acacc !=nil {return nil ,_f .Wrap (_acacc ,_agfc ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_fcdb .Min .X ,_fcdb .Max .X =_eeaa ,_eeaa ;_fcdb .Min .Y ,_fcdb .Max .Y =_aefa ,_aefa ;var (_gaee *fillSegment ;
_cgggcg int ;);for _edee .Len ()> 0{if _gaee ,_acacc =_gefa (_edee );_acacc !=nil {return nil ,_f .Wrap (_acacc ,_agfc ,"");};_aefa =_gaee ._dgbg ;for _eeaa =_gaee ._bgcea -1;_eeaa >=0&&_cegb .GetPixel (_eeaa ,_aefa );_eeaa --{if _acacc =_cegb .SetPixel (_eeaa ,_aefa ,0);
_acacc !=nil {return nil ,_f .Wrap (_acacc ,_agfc ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _eeaa >=_gaee ._bgcea -1{for {for _eeaa ++;_eeaa <=_gaee ._dbbbf +1&&_eeaa <=_acbgd &&!_cegb .GetPixel (_eeaa ,_aefa );_eeaa ++{};_cgggcg =_eeaa ;if !(_eeaa <=_gaee ._dbbbf +1&&_eeaa <=_acbgd ){break ;
};for ;_eeaa <=_acbgd &&_cegb .GetPixel (_eeaa ,_aefa );_eeaa ++{if _acacc =_cegb .SetPixel (_eeaa ,_aefa ,0);_acacc !=nil {return nil ,_f .Wrap (_acacc ,_agfc ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _acacc =_acgf (_edee ,_cgggcg ,_eeaa -1,_gaee ._dgbg ,_gaee ._afafga ,_bgfa ,&_fcdb );
_acacc !=nil {return nil ,_f .Wrap (_acacc ,_agfc ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _eeaa > _gaee ._dbbbf {if _acacc =_acgf (_edee ,_gaee ._dbbbf +1,_eeaa -1,_gaee ._dgbg ,-_gaee ._afafga ,_bgfa ,&_fcdb );_acacc !=nil {return nil ,_f .Wrap (_acacc ,_agfc ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};};continue ;};_cgggcg =_eeaa +1;if _cgggcg < _gaee ._bgcea {if _acacc =_acgf (_edee ,_cgggcg ,_gaee ._bgcea -1,_gaee ._dgbg ,-_gaee ._afafga ,_bgfa ,&_fcdb );_acacc !=nil {return nil ,_f .Wrap (_acacc ,_agfc ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_eeaa =_gaee ._bgcea ;for {for ;_eeaa <=_acbgd &&_cegb .GetPixel (_eeaa ,_aefa );_eeaa ++{if _acacc =_cegb .SetPixel (_eeaa ,_aefa ,0);_acacc !=nil {return nil ,_f .Wrap (_acacc ,_agfc ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _acacc =_acgf (_edee ,_cgggcg ,_eeaa -1,_gaee ._dgbg ,_gaee ._afafga ,_bgfa ,&_fcdb );
_acacc !=nil {return nil ,_f .Wrap (_acacc ,_agfc ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _eeaa > _gaee ._dbbbf {if _acacc =_acgf (_edee ,_gaee ._dbbbf +1,_eeaa -1,_gaee ._dgbg ,-_gaee ._afafga ,_bgfa ,&_fcdb );_acacc !=nil {return nil ,_f .Wrap (_acacc ,_agfc ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _eeaa ++;_eeaa <=_gaee ._dbbbf +1&&_eeaa <=_acbgd &&!_cegb .GetPixel (_eeaa ,_aefa );_eeaa ++{};_cgggcg =_eeaa ;if !(_eeaa <=_gaee ._dbbbf +1&&_eeaa <=_acbgd ){break ;};};};_fcdb .Max .X ++;_fcdb .Max .Y ++;return &_fcdb ,nil ;};func (_ddb *Bitmap )setEightBytes (_dea int ,_bege uint64 )error {_eage :=_ddb .RowStride -(_dea %_ddb .RowStride );
if _ddb .RowStride !=_ddb .Width >>3{_eage --;};if _eage >=8{return _ddb .setEightFullBytes (_dea ,_bege );};return _ddb .setEightPartlyBytes (_dea ,_eage ,_bege );};func _fcd (_bee ,_gdcf int )int {if _bee > _gdcf {return _bee ;};return _gdcf ;};func _ec ()(_agga [256]uint64 ){for _ad :=0;
_ad < 256;_ad ++{if _ad &0x01!=0{_agga [_ad ]|=0xff;};if _ad &0x02!=0{_agga [_ad ]|=0xff00;};if _ad &0x04!=0{_agga [_ad ]|=0xff0000;};if _ad &0x08!=0{_agga [_ad ]|=0xff000000;};if _ad &0x10!=0{_agga [_ad ]|=0xff00000000;};if _ad &0x20!=0{_agga [_ad ]|=0xff0000000000;
};if _ad &0x40!=0{_agga [_ad ]|=0xff000000000000;};if _ad &0x80!=0{_agga [_ad ]|=0xff00000000000000;};};return _agga ;};func _cfc (_cgb ,_edb *Bitmap ,_ade int ,_bcf []byte ,_cdb int )(_dceb error ){const _ffb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";
var (_fecb ,_egdb ,_gdfe ,_edf ,_ega ,_bac ,_gag ,_cdc int ;_cgg ,_ee uint32 ;_cbe ,_gfg byte ;_cbb uint16 ;);_aa :=make ([]byte ,4);_efg :=make ([]byte ,4);for _gdfe =0;_gdfe < _cgb .Height -1;_gdfe ,_edf =_gdfe +2,_edf +1{_fecb =_gdfe *_cgb .RowStride ;
_egdb =_edf *_edb .RowStride ;for _ega ,_bac =0,0;_ega < _cdb ;_ega ,_bac =_ega +4,_bac +1{for _gag =0;_gag < 4;_gag ++{_cdc =_fecb +_ega +_gag ;if _cdc <=len (_cgb .Data )-1&&_cdc < _fecb +_cgb .RowStride {_aa [_gag ]=_cgb .Data [_cdc ];}else {_aa [_gag ]=0x00;
};_cdc =_fecb +_cgb .RowStride +_ega +_gag ;if _cdc <=len (_cgb .Data )-1&&_cdc < _fecb +(2*_cgb .RowStride ){_efg [_gag ]=_cgb .Data [_cdc ];}else {_efg [_gag ]=0x00;};};_cgg =_db .BigEndian .Uint32 (_aa );_ee =_db .BigEndian .Uint32 (_efg );_ee |=_cgg ;
_ee |=_ee <<1;_ee &=0xaaaaaaaa;_cgg =_ee |(_ee <<7);_cbe =byte (_cgg >>24);_gfg =byte ((_cgg >>8)&0xff);_cdc =_egdb +_bac ;if _cdc +1==len (_edb .Data )-1||_cdc +1>=_egdb +_edb .RowStride {_edb .Data [_cdc ]=_bcf [_cbe ];}else {_cbb =(uint16 (_bcf [_cbe ])<<8)|uint16 (_bcf [_gfg ]);
if _dceb =_edb .setTwoBytes (_cdc ,_cbb );_dceb !=nil {return _f .Wrapf (_dceb ,_ffb ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_cdc );
};_bac ++;};};};return nil ;};func TstWSymbol (t *_bd .T ,scale ...int )*Bitmap {_fdbd ,_bfdaa :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_b .NoError (t ,_bfdaa );return TstGetScaledSymbol (t ,_fdbd ,scale ...);};func TstOSymbol (t *_bd .T ,scale ...int )*Bitmap {_agab ,_cgea :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});
_b .NoError (t ,_cgea );return TstGetScaledSymbol (t ,_agab ,scale ...);};func (_dccb *ClassedPoints )SortByY (){_dccb ._fbff =_dccb .ySortFunction ();_cg .Sort (_dccb )};func (_acabc *BitmapsArray )GetBox (i int )(*_bg .Rectangle ,error ){const _adbac ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";
if _acabc ==nil {return nil ,_f .Error (_adbac ,"p\u0072\u006f\u0076\u0069\u0064\u0065d\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074m\u0061\u0070\u0073A\u0072r\u0061\u0079\u0027");};if i > len (_acabc .Boxes )-1{return nil ,_f .Errorf (_adbac ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _acabc .Boxes [i ],nil ;};func (_afgc *Bitmaps )makeSizeIndicator (_cbcfeb ,_ddbb int ,_bcdg LocationFilter ,_eaege SizeComparison )(_eecg *_e .NumSlice ,_edd error ){const _geef ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _afgc ==nil {return nil ,_f .Error (_geef ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _bcdg {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_f .Errorf (_geef ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",_bcdg );
};switch _eaege {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_f .Errorf (_geef ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_eaege );
};_eecg =&_e .NumSlice {};var (_dbdgc ,_adde ,_ggdb int ;_ceee *Bitmap ;);for _ ,_ceee =range _afgc .Values {_dbdgc =0;_adde ,_ggdb =_ceee .Width ,_ceee .Height ;switch _bcdg {case LocSelectWidth :if (_eaege ==SizeSelectIfLT &&_adde < _cbcfeb )||(_eaege ==SizeSelectIfGT &&_adde > _cbcfeb )||(_eaege ==SizeSelectIfLTE &&_adde <=_cbcfeb )||(_eaege ==SizeSelectIfGTE &&_adde >=_cbcfeb )||(_eaege ==SizeSelectIfEQ &&_adde ==_cbcfeb ){_dbdgc =1;
};case LocSelectHeight :if (_eaege ==SizeSelectIfLT &&_ggdb < _ddbb )||(_eaege ==SizeSelectIfGT &&_ggdb > _ddbb )||(_eaege ==SizeSelectIfLTE &&_ggdb <=_ddbb )||(_eaege ==SizeSelectIfGTE &&_ggdb >=_ddbb )||(_eaege ==SizeSelectIfEQ &&_ggdb ==_ddbb ){_dbdgc =1;
};case LocSelectIfEither :if (_eaege ==SizeSelectIfLT &&(_adde < _cbcfeb ||_ggdb < _ddbb ))||(_eaege ==SizeSelectIfGT &&(_adde > _cbcfeb ||_ggdb > _ddbb ))||(_eaege ==SizeSelectIfLTE &&(_adde <=_cbcfeb ||_ggdb <=_ddbb ))||(_eaege ==SizeSelectIfGTE &&(_adde >=_cbcfeb ||_ggdb >=_ddbb ))||(_eaege ==SizeSelectIfEQ &&(_adde ==_cbcfeb ||_ggdb ==_ddbb )){_dbdgc =1;
};case LocSelectIfBoth :if (_eaege ==SizeSelectIfLT &&(_adde < _cbcfeb &&_ggdb < _ddbb ))||(_eaege ==SizeSelectIfGT &&(_adde > _cbcfeb &&_ggdb > _ddbb ))||(_eaege ==SizeSelectIfLTE &&(_adde <=_cbcfeb &&_ggdb <=_ddbb ))||(_eaege ==SizeSelectIfGTE &&(_adde >=_cbcfeb &&_ggdb >=_ddbb ))||(_eaege ==SizeSelectIfEQ &&(_adde ==_cbcfeb &&_ggdb ==_ddbb )){_dbdgc =1;
};};_eecg .AddInt (_dbdgc );};return _eecg ,nil ;};func (_agacg *Boxes )makeSizeIndicator (_agde ,_eef int ,_fedcg LocationFilter ,_abbaf SizeComparison )*_e .NumSlice {_deeg :=&_e .NumSlice {};var _egca ,_bcad ,_ged int ;for _ ,_bgg :=range *_agacg {_egca =0;
_bcad ,_ged =_bgg .Dx (),_bgg .Dy ();switch _fedcg {case LocSelectWidth :if (_abbaf ==SizeSelectIfLT &&_bcad < _agde )||(_abbaf ==SizeSelectIfGT &&_bcad > _agde )||(_abbaf ==SizeSelectIfLTE &&_bcad <=_agde )||(_abbaf ==SizeSelectIfGTE &&_bcad >=_agde ){_egca =1;
};case LocSelectHeight :if (_abbaf ==SizeSelectIfLT &&_ged < _eef )||(_abbaf ==SizeSelectIfGT &&_ged > _eef )||(_abbaf ==SizeSelectIfLTE &&_ged <=_eef )||(_abbaf ==SizeSelectIfGTE &&_ged >=_eef ){_egca =1;};case LocSelectIfEither :if (_abbaf ==SizeSelectIfLT &&(_ged < _eef ||_bcad < _agde ))||(_abbaf ==SizeSelectIfGT &&(_ged > _eef ||_bcad > _agde ))||(_abbaf ==SizeSelectIfLTE &&(_ged <=_eef ||_bcad <=_agde ))||(_abbaf ==SizeSelectIfGTE &&(_ged >=_eef ||_bcad >=_agde )){_egca =1;
};case LocSelectIfBoth :if (_abbaf ==SizeSelectIfLT &&(_ged < _eef &&_bcad < _agde ))||(_abbaf ==SizeSelectIfGT &&(_ged > _eef &&_bcad > _agde ))||(_abbaf ==SizeSelectIfLTE &&(_ged <=_eef &&_bcad <=_agde ))||(_abbaf ==SizeSelectIfGTE &&(_ged >=_eef &&_bcad >=_agde )){_egca =1;
};};_deeg .AddInt (_egca );};return _deeg ;};func (_debc *Bitmaps )HeightSorter ()func (_ebda ,_fceec int )bool {return func (_fgef ,_dbcd int )bool {_ffdge :=_debc .Values [_fgef ].Height < _debc .Values [_dbcd ].Height ;_a .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_debc .Values [_fgef ].Height ,_debc .Values [_dbcd ].Height ,_ffdge );
return _ffdge ;};};func (_bddg *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _bddg .addBorderGeneral (left ,right ,top ,bot ,val );};func _aaca (_aded ,_eaaf *Bitmap ,_befc ,_bagbd int )(_ecee error ){const _cgdb ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";
var (_abfa ,_cdgb ,_afgd ,_ecbf int ;_aaeb ,_gagb ,_gbff ,_cega ,_adaa ,_gbde ,_fgce byte ;);for _abfa =0;_abfa < _befc ;_abfa ++{_afgd =_abfa *_aded .RowStride ;_ecbf =_abfa *_eaaf .RowStride ;for _cdgb =0;_cdgb < _bagbd ;_cdgb ++{_aaeb ,_ecee =_aded .GetByte (_afgd +_cdgb );
if _ecee !=nil {return _f .Wrap (_ecee ,_cgdb ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_gagb ,_ecee =_eaaf .GetByte (_ecbf +_cdgb );if _ecee !=nil {return _f .Wrap (_ecee ,_cgdb ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");
};if _abfa > 0{_gbff ,_ecee =_aded .GetByte (_afgd -_aded .RowStride +_cdgb );if _ecee !=nil {return _f .Wrap (_ecee ,_cgdb ,"\u0069\u0020\u003e \u0030");};_aaeb |=_gbff ;};if _cdgb > 0{_cega ,_ecee =_aded .GetByte (_afgd +_cdgb -1);if _ecee !=nil {return _f .Wrap (_ecee ,_cgdb ,"\u006a\u0020\u003e \u0030");
};_aaeb |=_cega <<7;};_aaeb &=_gagb ;if _aaeb ==0||(^_aaeb )==0{if _ecee =_aded .SetByte (_afgd +_cdgb ,_aaeb );_ecee !=nil {return _f .Wrap (_ecee ,_cgdb ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");
};continue ;};for {_fgce =_aaeb ;_aaeb =(_aaeb |(_aaeb >>1)|(_aaeb <<1))&_gagb ;if (_aaeb ^_fgce )==0{if _ecee =_aded .SetByte (_afgd +_cdgb ,_aaeb );_ecee !=nil {return _f .Wrap (_ecee ,_cgdb ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
};break ;};};};};for _abfa =_befc -1;_abfa >=0;_abfa --{_afgd =_abfa *_aded .RowStride ;_ecbf =_abfa *_eaaf .RowStride ;for _cdgb =_bagbd -1;_cdgb >=0;_cdgb --{if _aaeb ,_ecee =_aded .GetByte (_afgd +_cdgb );_ecee !=nil {return _f .Wrap (_ecee ,_cgdb ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");
};if _gagb ,_ecee =_eaaf .GetByte (_ecbf +_cdgb );_ecee !=nil {return _f .Wrap (_ecee ,_cgdb ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _abfa < _befc -1{if _adaa ,_ecee =_aded .GetByte (_afgd +_aded .RowStride +_cdgb );
_ecee !=nil {return _f .Wrap (_ecee ,_cgdb ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_aaeb |=_adaa ;};if _cdgb < _bagbd -1{if _gbde ,_ecee =_aded .GetByte (_afgd +_cdgb +1);_ecee !=nil {return _f .Wrap (_ecee ,_cgdb ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");
};_aaeb |=_gbde >>7;};_aaeb &=_gagb ;if _aaeb ==0||(^_aaeb )==0{if _ecee =_aded .SetByte (_afgd +_cdgb ,_aaeb );_ecee !=nil {return _f .Wrap (_ecee ,_cgdb ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006d\u0061\u0073k\u0065\u0064\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061i\u006c\u0065\u0064");
};continue ;};for {_fgce =_aaeb ;_aaeb =(_aaeb |(_aaeb >>1)|(_aaeb <<1))&_gagb ;if (_aaeb ^_fgce )==0{if _ecee =_aded .SetByte (_afgd +_cdgb ,_aaeb );_ecee !=nil {return _f .Wrap (_ecee ,_cgdb ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
};break ;};};};};return nil ;};func (_cfcf *byHeight )Less (i ,j int )bool {return _cfcf .Values [i ].Height < _cfcf .Values [j ].Height };func TstImageBitmapData ()[]byte {return _afgaa .Data };func (_eeg *Bitmap )GetByte (index int )(byte ,error ){if index > len (_eeg .Data )-1||index < 0{return 0,_f .Errorf ("\u0047e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x:\u0020\u0025\u0064\u0020\u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006eg\u0065",index );
};return _eeg .Data [index ],nil ;};func _bgdf (_cabe ,_ebge *Bitmap ,_def ,_cecc ,_ddde ,_aegf ,_dgfdd ,_cfba ,_aead ,_efe int ,_feef CombinationOperator ,_aaad int )error {var _ggad int ;_adfb :=func (){_ggad ++;_ddde +=_ebge .RowStride ;_aegf +=_cabe .RowStride ;
_dgfdd +=_cabe .RowStride };for _ggad =_def ;_ggad < _cecc ;_adfb (){var _ecca uint16 ;_gff :=_ddde ;for _dab :=_aegf ;_dab <=_dgfdd ;_dab ++{_cfe ,_eacf :=_ebge .GetByte (_gff );if _eacf !=nil {return _eacf ;};_ebaf ,_eacf :=_cabe .GetByte (_dab );if _eacf !=nil {return _eacf ;
};_ecca =(_ecca |(uint16 (_ebaf )&0xff))<<uint (_efe );_ebaf =byte (_ecca >>8);if _eacf =_ebge .SetByte (_gff ,_gfgeb (_cfe ,_ebaf ,_feef ));_eacf !=nil {return _eacf ;};_gff ++;_ecca <<=uint (_aead );if _dab ==_dgfdd {_ebaf =byte (_ecca >>(8-uint8 (_efe )));
if _aaad !=0{_ebaf =_efd (uint (8+_cfba ),_ebaf );};_cfe ,_eacf =_ebge .GetByte (_gff );if _eacf !=nil {return _eacf ;};if _eacf =_ebge .SetByte (_gff ,_gfgeb (_cfe ,_ebaf ,_feef ));_eacf !=nil {return _eacf ;};};};};return nil ;};func _ddeb (_ecfe ,_dgfc ,_eeag *Bitmap )(*Bitmap ,error ){const _ddad ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";
if _dgfc ==nil {return nil ,_f .Error (_ddad ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _eeag ==nil {return nil ,_f .Error (_ddad ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _ecfe ==_eeag {return nil ,_f .Error (_ddad ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");
};if !_dgfc .SizesEqual (_eeag ){_a .Log .Debug ("\u0025s\u0020\u002d \u0042\u0069\u0074\u006da\u0070\u0020\u0027b\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074 e\u0071\u0075\u0061l\u0020\u0073i\u007a\u0065\u0020\u0077\u0069\u0074h\u0020\u0027b\u0032\u0027",_ddad );
};var _gcec error ;if _ecfe ,_gcec =_dgbfd (_ecfe ,_dgfc );_gcec !=nil {return nil ,_f .Wrap (_gcec ,_ddad ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _gcec =_ecfe .RasterOperation (0,0,_ecfe .Width ,_ecfe .Height ,PixSrcXorDst ,_eeag ,0,0);
_gcec !=nil {return nil ,_f .Wrap (_gcec ,_ddad ,"");};return _ecfe ,nil ;};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};type Point struct{X ,Y float32 ;};func TstCSymbol (t *_bd .T )*Bitmap {t .Helper ();
_dadcg :=New (6,6);_b .NoError (t ,_dadcg .SetPixel (1,0,1));_b .NoError (t ,_dadcg .SetPixel (2,0,1));_b .NoError (t ,_dadcg .SetPixel (3,0,1));_b .NoError (t ,_dadcg .SetPixel (4,0,1));_b .NoError (t ,_dadcg .SetPixel (0,1,1));_b .NoError (t ,_dadcg .SetPixel (5,1,1));
_b .NoError (t ,_dadcg .SetPixel (0,2,1));_b .NoError (t ,_dadcg .SetPixel (0,3,1));_b .NoError (t ,_dadcg .SetPixel (0,4,1));_b .NoError (t ,_dadcg .SetPixel (5,4,1));_b .NoError (t ,_dadcg .SetPixel (1,5,1));_b .NoError (t ,_dadcg .SetPixel (2,5,1));
_b .NoError (t ,_dadcg .SetPixel (3,5,1));_b .NoError (t ,_dadcg .SetPixel (4,5,1));return _dadcg ;};var _cgda =[5]int {1,2,3,0,4};func (_cead MorphProcess )verify (_acab int ,_fecbb ,_cgfb *int )error {const _aebf ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";
switch _cead .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_cead .Arguments )!=2{return _f .Error (_aebf ,"\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0064\u0027\u002c\u0020\u0027\u0065\u0027\u002c \u0027\u006f\u0027\u002c\u0020\u0027\u0063\u0027\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073\u0020\u0061\u0074\u0020\u006c\u0065\u0061\u0073\u0074\u0020\u0032\u0020\u0061r\u0067\u0075\u006d\u0065\u006et\u0073");
};_egge ,_gbg :=_cead .getWidthHeight ();if _egge <=0||_gbg <=0{return _f .Error (_aebf ,"O\u0070er\u0061t\u0069o\u006e\u003a\u0020\u0027\u0064'\u002c\u0020\u0027e\u0027\u002c\u0020\u0027\u006f'\u002c\u0020\u0027c\u0027\u0020\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073 \u0062\u006f\u0074h w\u0069\u0064\u0074\u0068\u0020\u0061n\u0064\u0020\u0068\u0065\u0069\u0067\u0068\u0074\u0020\u0074\u006f\u0020b\u0065 \u003e\u003d\u0020\u0030");
};case MopRankBinaryReduction :_bcadg :=len (_cead .Arguments );*_fecbb +=_bcadg ;if _bcadg < 1||_bcadg > 4{return _f .Error (_aebf ,"\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0072\u0027\u0020\u0072\u0065\u0071\u0075\u0069r\u0065\u0073\u0020\u0061\u0074\u0020\u006c\u0065\u0061s\u0074\u0020\u0031\u0020\u0061\u006e\u0064\u0020\u0061\u0074\u0020\u006d\u006fs\u0074\u0020\u0034\u0020\u0061\u0072g\u0075\u006d\u0065n\u0074\u0073");
};for _cdbf :=0;_cdbf < _bcadg ;_cdbf ++{if _cead .Arguments [_cdbf ]< 1||_cead .Arguments [_cdbf ]> 4{return _f .Error (_aebf ,"\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0052\u0065\u0064\u0075\u0063\u0074\u0069\u006f\u006e\u0020\u006c\u0065\u0076\u0065\u006c\u0020\u006du\u0073\u0074\u0020\u0062\u0065\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065 \u00280\u002c\u0020\u0034\u003e");
};};case MopReplicativeBinaryExpansion :if len (_cead .Arguments )==0{return _f .Error (_aebf ,"\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074i\u0076\u0065\u0042in\u0061\u0072\u0079\u0045\u0078\u0070a\u006e\u0073\u0069\u006f\u006e\u0020\u0072\u0065\u0071\u0075\u0069\u0072\u0065\u0073\u0020o\u006e\u0065\u0020\u0061\u0072\u0067\u0075\u006de\u006e\u0074");
};_fbf :=_cead .Arguments [0];if _fbf !=2&&_fbf !=4&&_fbf !=8{return _f .Error (_aebf ,"R\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0069\u0076\u0065\u0042\u0069\u006e\u0061\u0072\u0079\u0045\u0078\u0070\u0061\u006e\u0073\u0069\u006f\u006e\u0020m\u0075s\u0074\u0020\u0062\u0065 \u006f\u0066 \u0066\u0061\u0063\u0074\u006f\u0072\u0020\u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");
};*_fecbb -=_cgda [_fbf /4];case MopAddBorder :if len (_cead .Arguments )==0{return _f .Error (_aebf ,"\u0041\u0064\u0064B\u006f\u0072\u0064\u0065r\u0020\u0072\u0065\u0071\u0075\u0069\u0072e\u0073\u0020\u006f\u006e\u0065\u0020\u0061\u0072\u0067\u0075\u006d\u0065\u006e\u0074");
};_faea :=_cead .Arguments [0];if _acab > 0{return _f .Error (_aebf ,"\u0041\u0064\u0064\u0042\u006f\u0072\u0064\u0065\u0072\u0020\u006d\u0075\u0073t\u0020\u0062\u0065\u0020\u0061\u0020f\u0069\u0072\u0073\u0074\u0020\u006d\u006f\u0072\u0070\u0068\u0020\u0070\u0072o\u0063\u0065\u0073\u0073");
};if _faea < 1{return _f .Error (_aebf ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_cgfb =_faea ;};return nil ;};func (_faae *byWidth )Less (i ,j int )bool {return _faae .Values [i ].Width < _faae .Values [j ].Width };
type Points []Point ;func (_ggb *Bitmap )GetVanillaData ()[]byte {if _ggb .Color ==Chocolate {_ggb .inverseData ();};return _ggb .Data ;};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func (_dbcc *Bitmap )nextOnPixel (_acaa ,_cded int )(_bgfc _bg .Point ,_edfb bool ,_gdd error ){const _dfcd ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";
_bgfc ,_edfb ,_gdd =_dbcc .nextOnPixelLow (_dbcc .Width ,_dbcc .Height ,_dbcc .RowStride ,_acaa ,_cded );if _gdd !=nil {return _bgfc ,false ,_f .Wrap (_gdd ,_dfcd ,"");};return _bgfc ,_edfb ,nil ;};type Bitmap struct{Width ,Height int ;BitmapNumber int ;
RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _fdad ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_bcg :=_ebef (width ,height );
_bcg .Data =data ;if len (data )< height *_bcg .RowStride {return nil ,_f .Errorf (_fdad ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0064\u0061\u0074\u0061\u0020l\u0065\u006e\u0067\u0074\u0068\u003a \u0025\u0064\u0020\u002d\u0020\u0073\u0068\u006f\u0075\u006c\u0064\u0020\u0062e\u003a\u0020\u0025\u0064",len (data ),height *_bcg .RowStride );
};return _bcg ,nil ;};const (_cabbb shift =iota ;_efeaf ;);func (_dcbf *Bitmap )connComponentsBB (_abed int )(_abeg *Boxes ,_afcf error ){const _ecgg ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";
if _abed !=4&&_abed !=8{return nil ,_f .Error (_ecgg ,"\u0063\u006f\u006e\u006e\u0065\u0063t\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u0061\u0020\u0027\u0034\u0027\u0020\u006fr\u0020\u0027\u0038\u0027");};if _dcbf .Zero (){return &Boxes {},nil ;
};_dcbf .setPadBits (0);_ecde ,_afcf :=_dgbfd (nil ,_dcbf );if _afcf !=nil {return nil ,_f .Wrap (_afcf ,_ecgg ,"\u0062\u006d\u0031");};_dbcf :=&_e .Stack {};_dbcf .Aux =&_e .Stack {};_abeg =&Boxes {};var (_abda ,_fba int ;_defb _bg .Point ;_baaa bool ;
_ebbc *_bg .Rectangle ;);for {if _defb ,_baaa ,_afcf =_ecde .nextOnPixel (_fba ,_abda );_afcf !=nil {return nil ,_f .Wrap (_afcf ,_ecgg ,"");};if !_baaa {break ;};if _ebbc ,_afcf =_dfbg (_ecde ,_dbcf ,_defb .X ,_defb .Y ,_abed );_afcf !=nil {return nil ,_f .Wrap (_afcf ,_ecgg ,"");
};if _afcf =_abeg .Add (_ebbc );_afcf !=nil {return nil ,_f .Wrap (_afcf ,_ecgg ,"");};_fba =_defb .X ;_abda =_defb .Y ;};return _abeg ,nil ;};func _dce ()(_bfb [256]uint16 ){for _dbb :=0;_dbb < 256;_dbb ++{if _dbb &0x01!=0{_bfb [_dbb ]|=0x3;};if _dbb &0x02!=0{_bfb [_dbb ]|=0xc;
};if _dbb &0x04!=0{_bfb [_dbb ]|=0x30;};if _dbb &0x08!=0{_bfb [_dbb ]|=0xc0;};if _dbb &0x10!=0{_bfb [_dbb ]|=0x300;};if _dbb &0x20!=0{_bfb [_dbb ]|=0xc00;};if _dbb &0x40!=0{_bfb [_dbb ]|=0x3000;};if _dbb &0x80!=0{_bfb [_dbb ]|=0xc000;};};return _bfb ;};
func _ggag (_dfb ,_ggcd *Bitmap ,_gaecc ,_efea int )(*Bitmap ,error ){const _fbge ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";if _ggcd ==nil {return nil ,_f .Error (_fbge ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
};if _gaecc < 1||_efea < 1{return nil ,_f .Error (_fbge ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _gaecc ==1&&_efea ==1{return _dgbfd (_dfb ,_ggcd );};
if MorphBC ==SymmetricMorphBC {_ecaa ,_degc :=_afca (_dfb ,_ggcd ,_gaecc ,_efea );if _degc !=nil {return nil ,_f .Wrap (_degc ,_fbge ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");};return _ecaa ,nil ;};_cced :=_fcd (_gaecc /2,_efea /2);
_deeb :=8*((_cced +7)/8);_afde ,_efae :=_ggcd .AddBorder (_deeb ,0);if _efae !=nil {return nil ,_f .Wrapf (_efae ,_fbge ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_deeb );};var _fbab ,_fcbb *Bitmap ;if _gaecc ==1||_efea ==1{_ddf :=SelCreateBrick (_efea ,_gaecc ,_efea /2,_gaecc /2,SelHit );
_fbab ,_efae =_eafa (nil ,_afde ,_ddf );if _efae !=nil {return nil ,_f .Wrap (_efae ,_fbge ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};}else {_ggdaf :=SelCreateBrick (1,_gaecc ,0,_gaecc /2,SelHit );
_bedb ,_fdf :=_ggea (nil ,_afde ,_ggdaf );if _fdf !=nil {return nil ,_f .Wrap (_fdf ,_fbge ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");};_add :=SelCreateBrick (_efea ,1,_efea /2,0,SelHit );
_fbab ,_fdf =_ggea (nil ,_bedb ,_add );if _fdf !=nil {return nil ,_f .Wrap (_fdf ,_fbge ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_fdf =_agef (_bedb ,_fbab ,_ggdaf );
_fdf !=nil {return nil ,_f .Wrap (_fdf ,_fbge ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_fdf =_agef (_fbab ,_bedb ,_add );_fdf !=nil {return nil ,_f .Wrap (_fdf ,_fbge ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
};};if _fcbb ,_efae =_fbab .RemoveBorder (_deeb );_efae !=nil {return nil ,_f .Wrap (_efae ,_fbge ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _dfb ==nil {return _fcbb ,nil ;};if _ ,_efae =_dgbfd (_dfb ,_fcbb );_efae !=nil {return nil ,_efae ;};return _dfb ,nil ;
};func (_eff *Bitmap )Copy ()*Bitmap {_feba :=make ([]byte ,len (_eff .Data ));copy (_feba ,_eff .Data );return &Bitmap {Width :_eff .Width ,Height :_eff .Height ,RowStride :_eff .RowStride ,Data :_feba ,Color :_eff .Color ,Text :_eff .Text ,BitmapNumber :_eff .BitmapNumber ,Special :_eff .Special };
};func Centroids (bms []*Bitmap )(*Points ,error ){_fbfb :=make ([]Point ,len (bms ));_cadf :=_gccb ();_eaaa :=_aebbd ();var _bfda error ;for _dag ,_cdee :=range bms {_fbfb [_dag ],_bfda =_cdee .centroid (_cadf ,_eaaa );if _bfda !=nil {return nil ,_bfda ;
};};_feee :=Points (_fbfb );return &_feee ,nil ;};type Boxes []*_bg .Rectangle ;func Rect (x ,y ,w ,h int )(*_bg .Rectangle ,error ){const _dfef ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";if x < 0{w +=x ;x =0;if w <=0{return nil ,_f .Errorf (_dfef ,"x\u003a\u0027\u0025\u0064\u0027\u0020<\u0020\u0030\u0020\u0061\u006e\u0064\u0020\u0077\u003a \u0027\u0025\u0064'\u0020<\u003d\u0020\u0030",x ,w );
};};if y < 0{h +=y ;y =0;if h <=0{return nil ,_f .Error (_dfef ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_gfcf :=_bg .Rect (x ,y ,x +w ,y +h );return &_gfcf ,nil ;
};func _eebe (_gefg *Bitmap )(_fgcc *Bitmap ,_fbbd int ,_ffee error ){const _ead ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";if _gefg ==nil {return nil ,0,_f .Errorf (_ead ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");
};var _ffcb ,_acad *Bitmap ;if _ffcb ,_ffee =_dgbfd (nil ,_gefg );_ffee !=nil {return nil ,0,_f .Wrap (_ffee ,_ead ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");};var (_fgfe [13]int ;_adca ,_gca int ;);_bcbb :=12;_eeed :=_e .NewNumSlice (_bcbb +1);
_bgga :=_e .NewNumSlice (_bcbb +1);var _dcea *Boxes ;for _ebeda :=0;_ebeda <=_bcbb ;_ebeda ++{if _ebeda ==0{if _acad ,_ffee =_dgbfd (nil ,_ffcb );_ffee !=nil {return nil ,0,_f .Wrap (_ffee ,_ead ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");};}else {if _acad ,_ffee =_ffag (_ffcb ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});
_ffee !=nil {return nil ,0,_f .Wrap (_ffee ,_ead ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _dcea ,_ffee =_acad .connComponentsBB (4);_ffee !=nil {return nil ,0,_f .Wrap (_ffee ,_ead ,"");};_fgfe [_ebeda ]=len (*_dcea );
_eeed .AddInt (_fgfe [_ebeda ]);switch _ebeda {case 0:_adca =_fgfe [0];default:_gca =_fgfe [_ebeda -1]-_fgfe [_ebeda ];_bgga .AddInt (_gca );};_ffcb =_acad ;};_cgge :=true ;_aefd :=2;var _agdg ,_dffa int ;for _fcdc :=1;_fcdc < len (*_bgga );_fcdc ++{if _agdg ,_ffee =_eeed .GetInt (_fcdc );
_ffee !=nil {return nil ,0,_f .Wrap (_ffee ,_ead ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");};if _cgge &&_agdg < int (0.3*float32 (_adca )){_aefd =_fcdc +1;_cgge =false ;};if _gca ,_ffee =_bgga .GetInt (_fcdc );
_ffee !=nil {return nil ,0,_f .Wrap (_ffee ,_ead ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");};if _gca > _dffa {_dffa =_gca ;};};_bdag :=_gefg .XResolution ;if _bdag ==0{_bdag =150;};if _bdag > 110{_aefd ++;};if _aefd < 2{_a .Log .Trace ("J\u0042\u0049\u0047\u0032\u0020\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0069\u0042\u0065\u0073\u0074 \u0074\u006f\u0020\u006d\u0069\u006e\u0069\u006d\u0075\u006d a\u006c\u006c\u006fw\u0061b\u006c\u0065");
_aefd =2;};_fbbd =_aefd +1;if _fgcc ,_ffee =_afca (nil ,_gefg ,_aefd +1,1);_ffee !=nil {return nil ,0,_f .Wrap (_ffee ,_ead ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _fgcc ,_fbbd ,nil ;
};func (_baf Points )GetGeometry (i int )(_ceaa ,_gcef float32 ,_gfda error ){if i > len (_baf )-1{return 0,0,_f .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};_ddbfe :=_baf [i ];return _ddbfe .X ,_ddbfe .Y ,nil ;};func _aed ()(_bdd [256]uint32 ){for _fcc :=0;_fcc < 256;_fcc ++{if _fcc &0x01!=0{_bdd [_fcc ]|=0xf;};if _fcc &0x02!=0{_bdd [_fcc ]|=0xf0;};if _fcc &0x04!=0{_bdd [_fcc ]|=0xf00;};if _fcc &0x08!=0{_bdd [_fcc ]|=0xf000;
};if _fcc &0x10!=0{_bdd [_fcc ]|=0xf0000;};if _fcc &0x20!=0{_bdd [_fcc ]|=0xf00000;};if _fcc &0x40!=0{_bdd [_fcc ]|=0xf000000;};if _fcc &0x80!=0{_bdd [_fcc ]|=0xf0000000;};};return _bdd ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_bg .Rectangle ;
};func (_ceff *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_gfgg *Bitmaps ,_befeg error ){const _dgef ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";if _ceff ==nil {return nil ,_f .Error (_dgef ,"\u0027\u0062\u0027 B\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_f .Errorf (_dgef ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );
};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_f .Errorf (_dgef ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
};_gecdc ,_befeg :=_ceff .makeSizeIndicator (width ,height ,tp ,relation );if _befeg !=nil {return nil ,_f .Wrap (_befeg ,_dgef ,"");};_gfgg ,_befeg =_ceff .selectByIndicator (_gecdc );if _befeg !=nil {return nil ,_f .Wrap (_befeg ,_dgef ,"");};return _gfgg ,nil ;
};func (_ebec *Bitmap )Equals (s *Bitmap )bool {if len (_ebec .Data )!=len (s .Data )||_ebec .Width !=s .Width ||_ebec .Height !=s .Height {return false ;};for _aee :=0;_aee < _ebec .Height ;_aee ++{_dega :=_aee *_ebec .RowStride ;for _fegg :=0;_fegg < _ebec .RowStride ;
_fegg ++{if _ebec .Data [_dega +_fegg ]!=s .Data [_dega +_fegg ]{return false ;};};};return true ;};func (_bgfb *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _cfdc ="\u0043\u006c\u0061\u0073s\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047e\u0074I\u006e\u0074\u0059\u0042\u0079\u0043\u006ca\u0073\u0073";
if i >=_bgfb .IntSlice .Size (){return 0,_f .Errorf (_cfdc ,"\u0069\u003a\u0020\u0027\u0025\u0064\u0027 \u0069\u0073\u0020o\u0075\u0074\u0020\u006ff\u0020\u0074\u0068\u0065\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065",i );
};return int (_bgfb .YAtIndex (i )),nil ;};func (_fbb *Bitmap )CountPixels ()int {return _fbb .countPixels ()};func (_cbcfe *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _gddb ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";
if len (_cbcfe .Values )==0{return nil ,_f .Error (_gddb ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_afed :=&BitmapsArray {};_cbcfe .SortByHeight ();_acfc :=-1;_aadfc :=-1;for _cbegb :=0;_cbegb < len (_cbcfe .Values );
_cbegb ++{_gdeg :=_cbcfe .Values [_cbegb ].Height ;if _gdeg > _acfc {_acfc =_gdeg ;_aadfc ++;_afed .Values =append (_afed .Values ,&Bitmaps {});};_afed .Values [_aadfc ].AddBitmap (_cbcfe .Values [_cbegb ]);};return _afed ,nil ;};func TstWordBitmap (t *_bd .T ,scale ...int )*Bitmap {_fcdd :=1;
if len (scale )> 0{_fcdd =scale [0];};_adfa :=3;_bbce :=9+7+15+2*_adfa ;_eeff :=5+_adfa +5;_gccbd :=New (_bbce *_fcdd ,_eeff *_fcdd );_fdffg :=&Bitmaps {};var _geeg *int ;_adfa *=_fcdd ;_gegb :=0;_geeg =&_gegb ;_babf :=0;_edec :=TstDSymbol (t ,scale ...);
TstAddSymbol (t ,_fdffg ,_edec ,_geeg ,_babf ,1*_fcdd );_edec =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_fdffg ,_edec ,_geeg ,_babf ,_adfa );_edec =TstISymbol (t ,scale ...);TstAddSymbol (t ,_fdffg ,_edec ,_geeg ,_babf ,1*_fcdd );_edec =TstTSymbol (t ,scale ...);
TstAddSymbol (t ,_fdffg ,_edec ,_geeg ,_babf ,_adfa );_edec =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_fdffg ,_edec ,_geeg ,_babf ,1*_fcdd );_edec =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_fdffg ,_edec ,_geeg ,_babf ,1*_fcdd );_edec =TstWSymbol (t ,scale ...);
TstAddSymbol (t ,_fdffg ,_edec ,_geeg ,_babf ,0);*_geeg =0;_babf =5*_fcdd +_adfa ;_edec =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_fdffg ,_edec ,_geeg ,_babf ,1*_fcdd );_edec =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_fdffg ,_edec ,_geeg ,_babf ,_adfa );
_edec =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_fdffg ,_edec ,_geeg ,_babf ,1*_fcdd );_edec =TstESymbol (t ,scale ...);TstAddSymbol (t ,_fdffg ,_edec ,_geeg ,_babf ,1*_fcdd );_edec =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_fdffg ,_edec ,_geeg ,_babf ,1*_fcdd );
_edec =TstESymbol (t ,scale ...);TstAddSymbol (t ,_fdffg ,_edec ,_geeg ,_babf ,1*_fcdd );_edec =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_fdffg ,_edec ,_geeg ,_babf ,0);TstWriteSymbols (t ,_fdffg ,_gccbd );return _gccbd ;};type fillSegment struct{_bgcea int ;
_dbbbf int ;_dgbg int ;_afafga int ;};type MorphOperation int ;func (_acee Points )Size ()int {return len (_acee )};type shift int ;func (_bda *Bitmap )And (s *Bitmap )(_bec *Bitmap ,_bbf error ){const _cbbg ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";
if _bda ==nil {return nil ,_f .Error (_cbbg ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");};if s ==nil {return nil ,_f .Error (_cbbg ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");
};if !_bda .SizesEqual (s ){_a .Log .Debug ("\u0025\u0073\u0020-\u0020\u0042\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0065\u0071\u0075\u0061\u006c\u0020\u0073\u0069\u007a\u0065 \u0077\u0069\u0074\u0068\u0020\u0027\u0062\u0027",_cbbg );
};if _bec ,_bbf =_dgbfd (_bec ,_bda );_bbf !=nil {return nil ,_f .Wrap (_bbf ,_cbbg ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _bbf =_bec .RasterOperation (0,0,_bec .Width ,_bec .Height ,PixSrcAndDst ,s ,0,0);
_bbf !=nil {return nil ,_f .Wrap (_bbf ,_cbbg ,"");};return _bec ,nil ;};type BoundaryCondition int ;func _ace (_efc ,_eaa *Bitmap ,_dfdg ,_bbfe ,_ddebe ,_dfg ,_eace ,_abbg ,_cbab ,_cbad int ,_fbeb CombinationOperator )error {var _fegc int ;_adc :=func (){_fegc ++;
_ddebe +=_eaa .RowStride ;_dfg +=_efc .RowStride ;_eace +=_efc .RowStride };for _fegc =_dfdg ;_fegc < _bbfe ;_adc (){var _bga uint16 ;_gcfg :=_ddebe ;for _bdcf :=_dfg ;_bdcf <=_eace ;_bdcf ++{_ccda ,_afae :=_eaa .GetByte (_gcfg );if _afae !=nil {return _afae ;
};_dabb ,_afae :=_efc .GetByte (_bdcf );if _afae !=nil {return _afae ;};_bga =(_bga |uint16 (_dabb ))<<uint (_cbad );_dabb =byte (_bga >>8);if _bdcf ==_eace {_dabb =_efd (uint (_abbg ),_dabb );};if _afae =_eaa .SetByte (_gcfg ,_gfgeb (_ccda ,_dabb ,_fbeb ));
_afae !=nil {return _afae ;};_gcfg ++;_bga <<=uint (_cbab );};};return nil ;};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _ffag (src ,sequence ...);};func _ddbe (_bedd *Bitmap ,_aeag *_e .Stack ,_dgcb ,_cggfb int )(_fefba *_bg .Rectangle ,_dcdb error ){const _fadf ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _bedd ==nil {return nil ,_f .Error (_fadf ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _aeag ==nil {return nil ,_f .Error (_fadf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};_cgggc ,_dbba :=_bedd .Width ,_bedd .Height ;_dbfc :=_cgggc -1;_eabg :=_dbba -1;if _dgcb < 0||_dgcb > _dbfc ||_cggfb < 0||_cggfb > _eabg ||!_bedd .GetPixel (_dgcb ,_cggfb ){return nil ,nil ;};var _fceef *_bg .Rectangle ;_fceef ,_dcdb =Rect (100000,100000,0,0);
if _dcdb !=nil {return nil ,_f .Wrap (_dcdb ,_fadf ,"");};if _dcdb =_acgf (_aeag ,_dgcb ,_dgcb ,_cggfb ,1,_eabg ,_fceef );_dcdb !=nil {return nil ,_f .Wrap (_dcdb ,_fadf ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _dcdb =_acgf (_aeag ,_dgcb ,_dgcb ,_cggfb +1,-1,_eabg ,_fceef );
_dcdb !=nil {return nil ,_f .Wrap (_dcdb ,_fadf ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_fceef .Min .X ,_fceef .Max .X =_dgcb ,_dgcb ;_fceef .Min .Y ,_fceef .Max .Y =_cggfb ,_cggfb ;var (_ddgb *fillSegment ;
_febbe int ;);for _aeag .Len ()> 0{if _ddgb ,_dcdb =_gefa (_aeag );_dcdb !=nil {return nil ,_f .Wrap (_dcdb ,_fadf ,"");};_cggfb =_ddgb ._dgbg ;for _dgcb =_ddgb ._bgcea ;_dgcb >=0&&_bedd .GetPixel (_dgcb ,_cggfb );_dgcb --{if _dcdb =_bedd .SetPixel (_dgcb ,_cggfb ,0);
_dcdb !=nil {return nil ,_f .Wrap (_dcdb ,_fadf ,"");};};if _dgcb >=_ddgb ._bgcea {for _dgcb ++;_dgcb <=_ddgb ._dbbbf &&_dgcb <=_dbfc &&!_bedd .GetPixel (_dgcb ,_cggfb );_dgcb ++{};_febbe =_dgcb ;if !(_dgcb <=_ddgb ._dbbbf &&_dgcb <=_dbfc ){continue ;};
}else {_febbe =_dgcb +1;if _febbe < _ddgb ._bgcea -1{if _dcdb =_acgf (_aeag ,_febbe ,_ddgb ._bgcea -1,_ddgb ._dgbg ,-_ddgb ._afafga ,_eabg ,_fceef );_dcdb !=nil {return nil ,_f .Wrap (_dcdb ,_fadf ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_dgcb =_ddgb ._bgcea +1;};for {for ;_dgcb <=_dbfc &&_bedd .GetPixel (_dgcb ,_cggfb );_dgcb ++{if _dcdb =_bedd .SetPixel (_dgcb ,_cggfb ,0);_dcdb !=nil {return nil ,_f .Wrap (_dcdb ,_fadf ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _dcdb =_acgf (_aeag ,_febbe ,_dgcb -1,_ddgb ._dgbg ,_ddgb ._afafga ,_eabg ,_fceef );
_dcdb !=nil {return nil ,_f .Wrap (_dcdb ,_fadf ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _dgcb > _ddgb ._dbbbf +1{if _dcdb =_acgf (_aeag ,_ddgb ._dbbbf +1,_dgcb -1,_ddgb ._dgbg ,-_ddgb ._afafga ,_eabg ,_fceef );_dcdb !=nil {return nil ,_f .Wrap (_dcdb ,_fadf ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _dgcb ++;_dgcb <=_ddgb ._dbbbf &&_dgcb <=_dbfc &&!_bedd .GetPixel (_dgcb ,_cggfb );_dgcb ++{};_febbe =_dgcb ;if !(_dgcb <=_ddgb ._dbbbf &&_dgcb <=_dbfc ){break ;};};};_fceef .Max .X ++;_fceef .Max .Y ++;return _fceef ,nil ;};func (_dffgb *Points )Add (pt *Points )error {const _fbca ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";
if _dffgb ==nil {return _f .Error (_fbca ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _f .Error (_fbca ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};*_dffgb =append (*_dffgb ,*pt ...);return nil ;};func (_acbgb *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _cafdb ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";
if _acbgb ==nil {return nil ,_f .Error (_cafdb ,"p\u0072\u006f\u0076\u0069\u0064\u0065d\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074m\u0061\u0070\u0073A\u0072r\u0061\u0079\u0027");};if i > len (_acbgb .Values )-1{return nil ,_f .Errorf (_cafdb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _acbgb .Values [i ],nil ;};func (_aeaa *byHeight )Len ()int {return len (_aeaa .Values )};func (_gcb *Bitmap )nextOnPixelLow (_fdef ,_ecf ,_cdg ,_fedf ,_agac int )(_fbcbe _bg .Point ,_aege bool ,_cfa error ){const _cgde ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";
var (_dbg int ;_eag byte ;);_bdb :=_agac *_cdg ;_dec :=_bdb +(_fedf /8);if _eag ,_cfa =_gcb .GetByte (_dec );_cfa !=nil {return _fbcbe ,false ,_f .Wrap (_cfa ,_cgde ,"\u0078\u0053\u0074\u0061\u0072\u0074\u0020\u0061\u006e\u0064 \u0079\u0053\u0074\u0061\u0072\u0074\u0020o\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065");
};if _eag !=0{_feedb :=_fedf -(_fedf %8)+7;for _dbg =_fedf ;_dbg <=_feedb &&_dbg < _fdef ;_dbg ++{if _gcb .GetPixel (_dbg ,_agac ){_fbcbe .X =_dbg ;_fbcbe .Y =_agac ;return _fbcbe ,true ,nil ;};};};_bdeg :=(_fedf /8)+1;_dbg =8*_bdeg ;var _bbdc int ;for _dec =_bdb +_bdeg ;
_dbg < _fdef ;_dec ,_dbg =_dec +1,_dbg +8{if _eag ,_cfa =_gcb .GetByte (_dec );_cfa !=nil {return _fbcbe ,false ,_f .Wrap (_cfa ,_cgde ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _eag ==0{continue ;
};for _bbdc =0;_bbdc < 8&&_dbg < _fdef ;_bbdc ,_dbg =_bbdc +1,_dbg +1{if _gcb .GetPixel (_dbg ,_agac ){_fbcbe .X =_dbg ;_fbcbe .Y =_agac ;return _fbcbe ,true ,nil ;};};};for _bad :=_agac +1;_bad < _ecf ;_bad ++{_bdb =_bad *_cdg ;for _dec ,_dbg =_bdb ,0;
_dbg < _fdef ;_dec ,_dbg =_dec +1,_dbg +8{if _eag ,_cfa =_gcb .GetByte (_dec );_cfa !=nil {return _fbcbe ,false ,_f .Wrap (_cfa ,_cgde ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _eag ==0{continue ;};for _bbdc =0;
_bbdc < 8&&_dbg < _fdef ;_bbdc ,_dbg =_bbdc +1,_dbg +1{if _gcb .GetPixel (_dbg ,_bad ){_fbcbe .X =_dbg ;_fbcbe .Y =_bad ;return _fbcbe ,true ,nil ;};};};};return _fbcbe ,false ,nil ;};func (_dccd *Bitmap )GetUnpaddedData ()([]byte ,error ){_gad :=uint (_dccd .Width &0x07);
if _gad ==0{return _dccd .Data ,nil ;};_fff :=_dccd .Width *_dccd .Height ;if _fff %8!=0{_fff >>=3;_fff ++;}else {_fff >>=3;};_dbea :=make ([]byte ,_fff );_cef :=_da .NewWriterMSB (_dbea );const _dfcg ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
for _ffg :=0;_ffg < _dccd .Height ;_ffg ++{for _afag :=0;_afag < _dccd .RowStride ;_afag ++{_fcg :=_dccd .Data [_ffg *_dccd .RowStride +_afag ];if _afag !=_dccd .RowStride -1{_ebfc :=_cef .WriteByte (_fcg );if _ebfc !=nil {return nil ,_f .Wrap (_ebfc ,_dfcg ,"");
};continue ;};for _febb :=uint (0);_febb < _gad ;_febb ++{_bfc :=_cef .WriteBit (int (_fcg >>(7-_febb )&0x01));if _bfc !=nil {return nil ,_f .Wrap (_bfc ,_dfcg ,"");};};};};return _dbea ,nil ;};func (_ddge *Bitmap )setBit (_fdeg int ){_ddge .Data [(_fdeg >>3)]|=0x80>>uint (_fdeg &7)};
func (_gcdb *Boxes )Add (box *_bg .Rectangle )error {if _gcdb ==nil {return _f .Error ("\u0042o\u0078\u0065\u0073\u002e\u0041\u0064d","\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};*_gcdb =append (*_gcdb ,box );
return nil ;};func _gdf (_aea *Bitmap ,_fd *Bitmap ,_ede int )(_dgb error ){const _ac ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _ede {case 2:_dgb =_dd (_aea ,_fd );case 4:_dgb =_agc (_aea ,_fd );
case 8:_dgb =_gc (_aea ,_fd );default:return _f .Error (_ac ,"\u0065\u0078p\u0061\u006e\u0073\u0069o\u006e\u0020f\u0061\u0063\u0074\u006f\u0072\u0020\u006e\u006ft\u0020\u0069\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d\u0020r\u0061\u006e\u0067\u0065");
};if _dgb !=nil {_dgb =_f .Wrap (_dgb ,_ac ,"");};return _dgb ;};func (_ebgb *Bitmap )InverseData (){_ebgb .inverseData ()};func _baea (_defg *Bitmap ,_cbce ,_bbcda ,_ceaef ,_fbbda int ,_fcaf RasterOperator ,_acabb *Bitmap ,_eacea ,_gdbd int )error {var (_gfagf bool ;
_adcg bool ;_gccbc int ;_ebefa int ;_dgaed int ;_fcabe bool ;_eeee byte ;_begec int ;_dddg int ;_baae int ;_eebed ,_dbce int ;);_dagf :=8-(_cbce &7);_cggc :=_fecg [_dagf ];_bcd :=_defg .RowStride *_bbcda +(_cbce >>3);_bddf :=_acabb .RowStride *_gdbd +(_eacea >>3);
if _ceaef < _dagf {_gfagf =true ;_cggc &=_fedg [8-_dagf +_ceaef ];};if !_gfagf {_gccbc =(_ceaef -_dagf )>>3;if _gccbc > 0{_adcg =true ;_ebefa =_bcd +1;_dgaed =_bddf +1;};};_begec =(_cbce +_ceaef )&7;if !(_gfagf ||_begec ==0){_fcabe =true ;_eeee =_fedg [_begec ];
_dddg =_bcd +1+_gccbc ;_baae =_bddf +1+_gccbc ;};switch _fcaf {case PixSrc :for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_bcd ]=_bdaa (_defg .Data [_bcd ],_acabb .Data [_bddf ],_cggc );_bcd +=_defg .RowStride ;_bddf +=_acabb .RowStride ;};if _adcg {for _eebed =0;
_eebed < _fbbda ;_eebed ++{for _dbce =0;_dbce < _gccbc ;_dbce ++{_defg .Data [_ebefa +_dbce ]=_acabb .Data [_dgaed +_dbce ];};_ebefa +=_defg .RowStride ;_dgaed +=_acabb .RowStride ;};};if _fcabe {for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_dddg ]=_bdaa (_defg .Data [_dddg ],_acabb .Data [_baae ],_eeee );
_dddg +=_defg .RowStride ;_baae +=_acabb .RowStride ;};};case PixNotSrc :for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_bcd ]=_bdaa (_defg .Data [_bcd ],^_acabb .Data [_bddf ],_cggc );_bcd +=_defg .RowStride ;_bddf +=_acabb .RowStride ;};if _adcg {for _eebed =0;
_eebed < _fbbda ;_eebed ++{for _dbce =0;_dbce < _gccbc ;_dbce ++{_defg .Data [_ebefa +_dbce ]=^_acabb .Data [_dgaed +_dbce ];};_ebefa +=_defg .RowStride ;_dgaed +=_acabb .RowStride ;};};if _fcabe {for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_dddg ]=_bdaa (_defg .Data [_dddg ],^_acabb .Data [_baae ],_eeee );
_dddg +=_defg .RowStride ;_baae +=_acabb .RowStride ;};};case PixSrcOrDst :for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_bcd ]=_bdaa (_defg .Data [_bcd ],_acabb .Data [_bddf ]|_defg .Data [_bcd ],_cggc );_bcd +=_defg .RowStride ;_bddf +=_acabb .RowStride ;
};if _adcg {for _eebed =0;_eebed < _fbbda ;_eebed ++{for _dbce =0;_dbce < _gccbc ;_dbce ++{_defg .Data [_ebefa +_dbce ]|=_acabb .Data [_dgaed +_dbce ];};_ebefa +=_defg .RowStride ;_dgaed +=_acabb .RowStride ;};};if _fcabe {for _eebed =0;_eebed < _fbbda ;
_eebed ++{_defg .Data [_dddg ]=_bdaa (_defg .Data [_dddg ],_acabb .Data [_baae ]|_defg .Data [_dddg ],_eeee );_dddg +=_defg .RowStride ;_baae +=_acabb .RowStride ;};};case PixSrcAndDst :for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_bcd ]=_bdaa (_defg .Data [_bcd ],_acabb .Data [_bddf ]&_defg .Data [_bcd ],_cggc );
_bcd +=_defg .RowStride ;_bddf +=_acabb .RowStride ;};if _adcg {for _eebed =0;_eebed < _fbbda ;_eebed ++{for _dbce =0;_dbce < _gccbc ;_dbce ++{_defg .Data [_ebefa +_dbce ]&=_acabb .Data [_dgaed +_dbce ];};_ebefa +=_defg .RowStride ;_dgaed +=_acabb .RowStride ;
};};if _fcabe {for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_dddg ]=_bdaa (_defg .Data [_dddg ],_acabb .Data [_baae ]&_defg .Data [_dddg ],_eeee );_dddg +=_defg .RowStride ;_baae +=_acabb .RowStride ;};};case PixSrcXorDst :for _eebed =0;_eebed < _fbbda ;
_eebed ++{_defg .Data [_bcd ]=_bdaa (_defg .Data [_bcd ],_acabb .Data [_bddf ]^_defg .Data [_bcd ],_cggc );_bcd +=_defg .RowStride ;_bddf +=_acabb .RowStride ;};if _adcg {for _eebed =0;_eebed < _fbbda ;_eebed ++{for _dbce =0;_dbce < _gccbc ;_dbce ++{_defg .Data [_ebefa +_dbce ]^=_acabb .Data [_dgaed +_dbce ];
};_ebefa +=_defg .RowStride ;_dgaed +=_acabb .RowStride ;};};if _fcabe {for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_dddg ]=_bdaa (_defg .Data [_dddg ],_acabb .Data [_baae ]^_defg .Data [_dddg ],_eeee );_dddg +=_defg .RowStride ;_baae +=_acabb .RowStride ;
};};case PixNotSrcOrDst :for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_bcd ]=_bdaa (_defg .Data [_bcd ],^(_acabb .Data [_bddf ])|_defg .Data [_bcd ],_cggc );_bcd +=_defg .RowStride ;_bddf +=_acabb .RowStride ;};if _adcg {for _eebed =0;_eebed < _fbbda ;
_eebed ++{for _dbce =0;_dbce < _gccbc ;_dbce ++{_defg .Data [_ebefa +_dbce ]|=^(_acabb .Data [_dgaed +_dbce ]);};_ebefa +=_defg .RowStride ;_dgaed +=_acabb .RowStride ;};};if _fcabe {for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_dddg ]=_bdaa (_defg .Data [_dddg ],^(_acabb .Data [_baae ])|_defg .Data [_dddg ],_eeee );
_dddg +=_defg .RowStride ;_baae +=_acabb .RowStride ;};};case PixNotSrcAndDst :for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_bcd ]=_bdaa (_defg .Data [_bcd ],^(_acabb .Data [_bddf ])&_defg .Data [_bcd ],_cggc );_bcd +=_defg .RowStride ;_bddf +=_acabb .RowStride ;
};if _adcg {for _eebed =0;_eebed < _fbbda ;_eebed ++{for _dbce =0;_dbce < _gccbc ;_dbce ++{_defg .Data [_ebefa +_dbce ]&=^_acabb .Data [_dgaed +_dbce ];};_ebefa +=_defg .RowStride ;_dgaed +=_acabb .RowStride ;};};if _fcabe {for _eebed =0;_eebed < _fbbda ;
_eebed ++{_defg .Data [_dddg ]=_bdaa (_defg .Data [_dddg ],^(_acabb .Data [_baae ])&_defg .Data [_dddg ],_eeee );_dddg +=_defg .RowStride ;_baae +=_acabb .RowStride ;};};case PixSrcOrNotDst :for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_bcd ]=_bdaa (_defg .Data [_bcd ],_acabb .Data [_bddf ]|^(_defg .Data [_bcd ]),_cggc );
_bcd +=_defg .RowStride ;_bddf +=_acabb .RowStride ;};if _adcg {for _eebed =0;_eebed < _fbbda ;_eebed ++{for _dbce =0;_dbce < _gccbc ;_dbce ++{_defg .Data [_ebefa +_dbce ]=_acabb .Data [_dgaed +_dbce ]|^(_defg .Data [_ebefa +_dbce ]);};_ebefa +=_defg .RowStride ;
_dgaed +=_acabb .RowStride ;};};if _fcabe {for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_dddg ]=_bdaa (_defg .Data [_dddg ],_acabb .Data [_baae ]|^(_defg .Data [_dddg ]),_eeee );_dddg +=_defg .RowStride ;_baae +=_acabb .RowStride ;};};case PixSrcAndNotDst :for _eebed =0;
_eebed < _fbbda ;_eebed ++{_defg .Data [_bcd ]=_bdaa (_defg .Data [_bcd ],_acabb .Data [_bddf ]&^(_defg .Data [_bcd ]),_cggc );_bcd +=_defg .RowStride ;_bddf +=_acabb .RowStride ;};if _adcg {for _eebed =0;_eebed < _fbbda ;_eebed ++{for _dbce =0;_dbce < _gccbc ;
_dbce ++{_defg .Data [_ebefa +_dbce ]=_acabb .Data [_dgaed +_dbce ]&^(_defg .Data [_ebefa +_dbce ]);};_ebefa +=_defg .RowStride ;_dgaed +=_acabb .RowStride ;};};if _fcabe {for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_dddg ]=_bdaa (_defg .Data [_dddg ],_acabb .Data [_baae ]&^(_defg .Data [_dddg ]),_eeee );
_dddg +=_defg .RowStride ;_baae +=_acabb .RowStride ;};};case PixNotPixSrcOrDst :for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_bcd ]=_bdaa (_defg .Data [_bcd ],^(_acabb .Data [_bddf ]|_defg .Data [_bcd ]),_cggc );_bcd +=_defg .RowStride ;_bddf +=_acabb .RowStride ;
};if _adcg {for _eebed =0;_eebed < _fbbda ;_eebed ++{for _dbce =0;_dbce < _gccbc ;_dbce ++{_defg .Data [_ebefa +_dbce ]=^(_acabb .Data [_dgaed +_dbce ]|_defg .Data [_ebefa +_dbce ]);};_ebefa +=_defg .RowStride ;_dgaed +=_acabb .RowStride ;};};if _fcabe {for _eebed =0;
_eebed < _fbbda ;_eebed ++{_defg .Data [_dddg ]=_bdaa (_defg .Data [_dddg ],^(_acabb .Data [_baae ]|_defg .Data [_dddg ]),_eeee );_dddg +=_defg .RowStride ;_baae +=_acabb .RowStride ;};};case PixNotPixSrcAndDst :for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_bcd ]=_bdaa (_defg .Data [_bcd ],^(_acabb .Data [_bddf ]&_defg .Data [_bcd ]),_cggc );
_bcd +=_defg .RowStride ;_bddf +=_acabb .RowStride ;};if _adcg {for _eebed =0;_eebed < _fbbda ;_eebed ++{for _dbce =0;_dbce < _gccbc ;_dbce ++{_defg .Data [_ebefa +_dbce ]=^(_acabb .Data [_dgaed +_dbce ]&_defg .Data [_ebefa +_dbce ]);};_ebefa +=_defg .RowStride ;
_dgaed +=_acabb .RowStride ;};};if _fcabe {for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_dddg ]=_bdaa (_defg .Data [_dddg ],^(_acabb .Data [_baae ]&_defg .Data [_dddg ]),_eeee );_dddg +=_defg .RowStride ;_baae +=_acabb .RowStride ;};};case PixNotPixSrcXorDst :for _eebed =0;
_eebed < _fbbda ;_eebed ++{_defg .Data [_bcd ]=_bdaa (_defg .Data [_bcd ],^(_acabb .Data [_bddf ]^_defg .Data [_bcd ]),_cggc );_bcd +=_defg .RowStride ;_bddf +=_acabb .RowStride ;};if _adcg {for _eebed =0;_eebed < _fbbda ;_eebed ++{for _dbce =0;_dbce < _gccbc ;
_dbce ++{_defg .Data [_ebefa +_dbce ]=^(_acabb .Data [_dgaed +_dbce ]^_defg .Data [_ebefa +_dbce ]);};_ebefa +=_defg .RowStride ;_dgaed +=_acabb .RowStride ;};};if _fcabe {for _eebed =0;_eebed < _fbbda ;_eebed ++{_defg .Data [_dddg ]=_bdaa (_defg .Data [_dddg ],^(_acabb .Data [_baae ]^_defg .Data [_dddg ]),_eeee );
_dddg +=_defg .RowStride ;_baae +=_acabb .RowStride ;};};default:_a .Log .Debug ("I\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070e\u0072\u0061\u0074o\u0072:\u0020\u0025\u0064",_fcaf );return _f .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0056\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004c\u006f\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");
};return nil ;};func (_fdcff *Bitmaps )WidthSorter ()func (_gbcb ,_gded int )bool {return func (_ffgac ,_eeae int )bool {return _fdcff .Values [_ffgac ].Width < _fdcff .Values [_eeae ].Width };};var _bdde =[]byte {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x78,0x27,0xC2,0x27,0x91,0x00,0x22,0x48,0x21,0x03,0x24,0x91,0x00,0x22,0x48,0x21,0x02,0xA4,0x95,0x00,0x22,0x48,0x21,0x02,0x64,0x9B,0x00,0x3C,0x78,0x21,0x02,0x27,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x15,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
func (_gbcdc *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _aadg ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _gbcdc ==nil {return nil ,_f .Error (_aadg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
};if i > len (_gbcdc .Values )-1{return nil ,_f .Errorf (_aadg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _gbcdc .Values [i ],nil ;};const (PixSrc RasterOperator =0xc;
PixDst RasterOperator =0xa;PixNotSrc RasterOperator =0x3;PixNotDst RasterOperator =0x5;PixClr RasterOperator =0x0;PixSet RasterOperator =0xf;PixSrcOrDst RasterOperator =0xe;PixSrcAndDst RasterOperator =0x8;PixSrcXorDst RasterOperator =0x6;PixNotSrcOrDst RasterOperator =0xb;
PixNotSrcAndDst RasterOperator =0x2;PixSrcOrNotDst RasterOperator =0xd;PixSrcAndNotDst RasterOperator =0x4;PixNotPixSrcOrDst RasterOperator =0x1;PixNotPixSrcAndDst RasterOperator =0x7;PixNotPixSrcXorDst RasterOperator =0x9;PixPaint =PixSrcOrDst ;PixSubtract =PixNotSrcAndDst ;
PixMask =PixSrcAndDst ;);func (_gbaa *byWidth )Swap (i ,j int ){_gbaa .Values [i ],_gbaa .Values [j ]=_gbaa .Values [j ],_gbaa .Values [i ];if _gbaa .Boxes !=nil {_gbaa .Boxes [i ],_gbaa .Boxes [j ]=_gbaa .Boxes [j ],_gbaa .Boxes [i ];};};func TstFrameBitmap ()*Bitmap {return _afgbc .Copy ()};
func _bgdcg (_bgbb *Bitmap ,_dbccg ,_cccg ,_bgce ,_gaca int ,_adba RasterOperator ){if _dbccg < 0{_bgce +=_dbccg ;_dbccg =0;};_ecgb :=_dbccg +_bgce -_bgbb .Width ;if _ecgb > 0{_bgce -=_ecgb ;};if _cccg < 0{_gaca +=_cccg ;_cccg =0;};_dcdg :=_cccg +_gaca -_bgbb .Height ;
if _dcdg > 0{_gaca -=_dcdg ;};if _bgce <=0||_gaca <=0{return ;};if (_dbccg &7)==0{_feedg (_bgbb ,_dbccg ,_cccg ,_bgce ,_gaca ,_adba );}else {_ccfe (_bgbb ,_dbccg ,_cccg ,_bgce ,_gaca ,_adba );};};func _afca (_cdea ,_eecda *Bitmap ,_eded ,_gbec int )(*Bitmap ,error ){const _adcac ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";
if _eecda ==nil {return nil ,_f .Error (_adcac ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _eded < 1||_gbec < 1{return nil ,_f .Error (_adcac ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
};if _eded ==1&&_gbec ==1{return _eecda .Copy (),nil ;};if _eded ==1||_gbec ==1{_bgfg :=SelCreateBrick (_gbec ,_eded ,_gbec /2,_eded /2,SelHit );var _daeb error ;_cdea ,_daeb =_eafa (_cdea ,_eecda ,_bgfg );if _daeb !=nil {return nil ,_f .Wrap (_daeb ,_adcac ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _cdea ,nil ;};_eede :=SelCreateBrick (1,_eded ,0,_eded /2,SelHit );_aaaa :=SelCreateBrick (_gbec ,1,_gbec /2,0,SelHit );_cgfg ,_aaf :=_ggea (nil ,_eecda ,_eede );if _aaf !=nil {return nil ,_f .Wrap (_aaf ,_adcac ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _cdea ,_aaf =_ggea (_cdea ,_cgfg ,_aaaa );_aaf !=nil {return nil ,_f .Wrap (_aaf ,_adcac ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_aaf =_agef (_cgfg ,_cdea ,_eede );_aaf !=nil {return nil ,_f .Wrap (_aaf ,_adcac ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};if _ ,_aaf =_agef (_cdea ,_cgfg ,_aaaa );_aaf !=nil {return nil ,_f .Wrap (_aaf ,_adcac ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _cdea ,nil ;};func (_gdab *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_agbb *Bitmaps ,_agf *Boxes ,_dgc error ){const _aedd ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";
if _gdab ==nil {return nil ,nil ,_f .Error (_aedd ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0042\u0069\u0074\u006da\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064\u002e");};switch components {case ComponentConn ,ComponentCharacters ,ComponentWords :default:return nil ,nil ,_f .Error (_aedd ,"\u0069\u006e\u0076\u0061l\u0069\u0064\u0020\u0063\u006f\u006d\u0070\u006f\u006e\u0065n\u0074s\u0020\u0070\u0061\u0072\u0061\u006d\u0065t\u0065\u0072");
};if _gdab .Zero (){_agf =&Boxes {};_agbb =&Bitmaps {};return _agbb ,_agf ,nil ;};switch components {case ComponentConn :_agbb =&Bitmaps {};if _agf ,_dgc =_gdab .ConnComponents (_agbb ,8);_dgc !=nil {return nil ,nil ,_f .Wrap (_dgc ,_aedd ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};case ComponentCharacters :_febbf ,_eebd :=MorphSequence (_gdab ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _eebd !=nil {return nil ,nil ,_f .Wrap (_eebd ,_aedd ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _a .Log .IsLogLevel (_a .LogLevelTrace ){_a .Log .Trace ("\u0043o\u006d\u0070o\u006e\u0065\u006e\u0074C\u0068\u0061\u0072a\u0063\u0074\u0065\u0072\u0073\u0020\u0062\u0069\u0074ma\u0070\u0020\u0061f\u0074\u0065r\u0020\u0063\u006c\u006f\u0073\u0069n\u0067\u003a \u0025\u0073",_febbf .String ());
};_ffff :=&Bitmaps {};_agf ,_eebd =_febbf .ConnComponents (_ffff ,8);if _eebd !=nil {return nil ,nil ,_f .Wrap (_eebd ,_aedd ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _a .Log .IsLogLevel (_a .LogLevelTrace ){_a .Log .Trace ("\u0043\u006f\u006d\u0070\u006f\u006ee\u006e\u0074\u0043\u0068\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0020a\u0066\u0074\u0065\u0072\u0020\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076i\u0074y\u003a\u0020\u0025\u0073",_ffff .String ());
};if _agbb ,_eebd =_ffff .ClipToBitmap (_gdab );_eebd !=nil {return nil ,nil ,_f .Wrap (_eebd ,_aedd ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_aff :=1;
var _eaca *Bitmap ;switch {case _gdab .XResolution <=200:_eaca =_gdab ;case _gdab .XResolution <=400:_aff =2;_eaca ,_dgc =_dac (_gdab ,1,0,0,0);if _dgc !=nil {return nil ,nil ,_f .Wrap (_dgc ,_aedd ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
};default:_aff =4;_eaca ,_dgc =_dac (_gdab ,1,1,0,0);if _dgc !=nil {return nil ,nil ,_f .Wrap (_dgc ,_aedd ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
};};_bdbaf ,_ ,_cgba :=_eebe (_eaca );if _cgba !=nil {return nil ,nil ,_f .Wrap (_cgba ,_aedd ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_dbf ,_cgba :=_beacd (_bdbaf ,_aff );if _cgba !=nil {return nil ,nil ,_f .Wrap (_cgba ,_aedd ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
};_fbbe :=&Bitmaps {};if _agf ,_cgba =_dbf .ConnComponents (_fbbe ,4);_cgba !=nil {return nil ,nil ,_f .Wrap (_cgba ,_aedd ,"\u0077\u006f\u0072\u0064\u0020\u0070r\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u002c\u0020\u0063\u006f\u006en\u0065\u0063\u0074\u0020\u0065\u0078\u0070a\u006e\u0064\u0065\u0064");
};if _agbb ,_cgba =_fbbe .ClipToBitmap (_gdab );_cgba !=nil {return nil ,nil ,_f .Wrap (_cgba ,_aedd ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_agbb ,_dgc =_agbb .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
if _dgc !=nil {return nil ,nil ,_f .Wrap (_dgc ,_aedd ,"");};_agf ,_dgc =_agf .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _dgc !=nil {return nil ,nil ,_f .Wrap (_dgc ,_aedd ,"");};return _agbb ,_agf ,nil ;};func _eeeg (_gbae int )int {if _gbae < 0{return -_gbae ;
};return _gbae ;};type Getter interface{GetBitmap ()*Bitmap ;};func TstISymbol (t *_bd .T ,scale ...int )*Bitmap {_fbde ,_bfcf :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_b .NoError (t ,_bfcf );return TstGetScaledSymbol (t ,_fbde ,scale ...);
};func (_cdd *Bitmap )SetPadBits (value int ){_cdd .setPadBits (value )};func (_befe *Points )AddPoint (x ,y float32 ){*_befe =append (*_befe ,Point {x ,y })};func (_fefda *Bitmap )equivalent (_cfdg *Bitmap )bool {if _fefda ==_cfdg {return true ;};if !_fefda .SizesEqual (_cfdg ){return false ;
};_eggb :=_cbf (_fefda ,_cfdg ,CmbOpXor );_eea :=_fefda .countPixels ();_cdcd :=int (0.25*float32 (_eea ));if _eggb .thresholdPixelSum (_cdcd ){return false ;};var (_daf [9][9]int ;_bea [18][9]int ;_eed [9][18]int ;_gcffg int ;_gbed int ;);_fae :=9;_aeff :=_fefda .Height /_fae ;
_abe :=_fefda .Width /_fae ;_edfe ,_eda :=_aeff /2,_abe /2;if _aeff < _abe {_edfe =_abe /2;_eda =_aeff /2;};_agda :=float64 (_edfe )*float64 (_eda )*_ce .Pi ;_ccdd :=int (float64 (_aeff *_abe /2)*0.9);_cddg :=int (float64 (_abe *_aeff /2)*0.9);for _ffga :=0;
_ffga < _fae ;_ffga ++{_fcf :=_abe *_ffga +_gcffg ;var _ebb int ;if _ffga ==_fae -1{_gcffg =0;_ebb =_fefda .Width ;}else {_ebb =_fcf +_abe ;if ((_fefda .Width -_gcffg )%_fae )> 0{_gcffg ++;_ebb ++;};};for _eegf :=0;_eegf < _fae ;_eegf ++{_becg :=_aeff *_eegf +_gbed ;
var _acd int ;if _eegf ==_fae -1{_gbed =0;_acd =_fefda .Height ;}else {_acd =_becg +_aeff ;if (_fefda .Height -_gbed )%_fae > 0{_gbed ++;_acd ++;};};var _cga ,_ggdaa ,_cbc ,_gde int ;_cae :=(_fcf +_ebb )/2;_bbd :=(_becg +_acd )/2;for _dccdg :=_fcf ;_dccdg < _ebb ;
_dccdg ++{for _geff :=_becg ;_geff < _acd ;_geff ++{if _eggb .GetPixel (_dccdg ,_geff ){if _dccdg < _cae {_cga ++;}else {_ggdaa ++;};if _geff < _bbd {_gde ++;}else {_cbc ++;};};};};_daf [_ffga ][_eegf ]=_cga +_ggdaa ;_bea [_ffga *2][_eegf ]=_cga ;_bea [_ffga *2+1][_eegf ]=_ggdaa ;
_eed [_ffga ][_eegf *2]=_gde ;_eed [_ffga ][_eegf *2+1]=_cbc ;};};for _ebae :=0;_ebae < _fae *2-1;_ebae ++{for _afgb :=0;_afgb < (_fae -1);_afgb ++{var _gfge int ;for _gea :=0;_gea < 2;_gea ++{for _cde :=0;_cde < 2;_cde ++{_gfge +=_bea [_ebae +_gea ][_afgb +_cde ];
};};if _gfge > _cddg {return false ;};};};for _baeg :=0;_baeg < (_fae -1);_baeg ++{for _dgad :=0;_dgad < ((_fae *2)-1);_dgad ++{var _gdfc int ;for _gbc :=0;_gbc < 2;_gbc ++{for _afcb :=0;_afcb < 2;_afcb ++{_gdfc +=_eed [_baeg +_gbc ][_dgad +_afcb ];};};
if _gdfc > _ccdd {return false ;};};};for _fde :=0;_fde < (_fae -2);_fde ++{for _aeg :=0;_aeg < (_fae -2);_aeg ++{var _aecb ,_eccb int ;for _fdb :=0;_fdb < 3;_fdb ++{for _edad :=0;_edad < 3;_edad ++{if _fdb ==_edad {_aecb +=_daf [_fde +_fdb ][_aeg +_edad ];
};if (2-_fdb )==_edad {_eccb +=_daf [_fde +_fdb ][_aeg +_edad ];};};};if _aecb > _cddg ||_eccb > _cddg {return false ;};};};for _ecdf :=0;_ecdf < (_fae -1);_ecdf ++{for _aad :=0;_aad < (_fae -1);_aad ++{var _dbca int ;for _cee :=0;_cee < 2;_cee ++{for _eedf :=0;
_eedf < 2;_eedf ++{_dbca +=_daf [_ecdf +_cee ][_aad +_eedf ];};};if float64 (_dbca )> _agda {return false ;};};};return true ;};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_gbddd :=_bdaga (h ,w ,"");_gbddd .setOrigin (cy ,cx );
var _beccd ,_bgae int ;for _beccd =0;_beccd < h ;_beccd ++{for _bgae =0;_bgae < w ;_bgae ++{_gbddd .Data [_beccd ][_bgae ]=tp ;};};return _gbddd ;};func _acgf (_ceda *_e .Stack ,_ggbdg ,_bceg ,_dbgd ,_fcfa ,_bcba int ,_eeagf *_bg .Rectangle )(_ffdg error ){const _bbec ="\u0070\u0075\u0073\u0068\u0046\u0069\u006c\u006c\u0053\u0065\u0067m\u0065\u006e\u0074\u0042\u006f\u0075\u006e\u0064\u0069\u006eg\u0042\u006f\u0078";
if _ceda ==nil {return _f .Error (_bbec ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _eeagf ==nil {return _f .Error (_bbec ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
};_eeagf .Min .X =_e .Min (_eeagf .Min .X ,_ggbdg );_eeagf .Max .X =_e .Max (_eeagf .Max .X ,_bceg );_eeagf .Min .Y =_e .Min (_eeagf .Min .Y ,_dbgd );_eeagf .Max .Y =_e .Max (_eeagf .Max .Y ,_dbgd );if !(_dbgd +_fcfa >=0&&_dbgd +_fcfa <=_bcba ){return nil ;
};if _ceda .Aux ==nil {return _f .Error (_bbec ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _gebg *fillSegment ;_adgb ,_ffgaa :=_ceda .Aux .Pop ();if _ffgaa {if _gebg ,_ffgaa =_adgb .(*fillSegment );
!_ffgaa {return _f .Error (_bbec ,"a\u0075\u0078\u0053\u0074\u0061\u0063k\u0020\u0064\u0061\u0074\u0061\u0020i\u0073\u0020\u006e\u006f\u0074\u0020\u0061 \u002a\u0066\u0069\u006c\u006c\u0053\u0065\u0067\u006d\u0065n\u0074");};}else {_gebg =&fillSegment {};
};_gebg ._bgcea =_ggbdg ;_gebg ._dbbbf =_bceg ;_gebg ._dgbg =_dbgd ;_gebg ._afafga =_fcfa ;_ceda .Push (_gebg );return nil ;};func (_cffce *Bitmaps )AddBox (box *_bg .Rectangle ){_cffce .Boxes =append (_cffce .Boxes ,box )};func (_edbd *BitmapsArray )AddBitmaps (bm *Bitmaps ){_edbd .Values =append (_edbd .Values ,bm )};
func TstImageBitmapInverseData ()[]byte {_fgfa :=_afgaa .Copy ();_fgfa .InverseData ();return _fgfa .Data ;};func _ggea (_ece *Bitmap ,_cdbb *Bitmap ,_debga *Selection )(*Bitmap ,error ){var (_acbd *Bitmap ;_bdbg error ;);_ece ,_bdbg =_efgd (_ece ,_cdbb ,_debga ,&_acbd );
if _bdbg !=nil {return nil ,_bdbg ;};if _bdbg =_ece .clearAll ();_bdbg !=nil {return nil ,_bdbg ;};var _faec SelectionValue ;for _fdea :=0;_fdea < _debga .Height ;_fdea ++{for _beaa :=0;_beaa < _debga .Width ;_beaa ++{_faec =_debga .Data [_fdea ][_beaa ];
if _faec ==SelHit {if _bdbg =_ece .RasterOperation (_beaa -_debga .Cx ,_fdea -_debga .Cy ,_cdbb .Width ,_cdbb .Height ,PixSrcOrDst ,_acbd ,0,0);_bdbg !=nil {return nil ,_bdbg ;};};};};return _ece ,nil ;};func _cbf (_dbec ,_ffd *Bitmap ,_ebgf CombinationOperator )*Bitmap {_gcfed :=New (_dbec .Width ,_dbec .Height );
for _cbda :=0;_cbda < len (_gcfed .Data );_cbda ++{_gcfed .Data [_cbda ]=_gfgeb (_dbec .Data [_cbda ],_ffd .Data [_cbda ],_ebgf );};return _gcfed ;};func (_gfbd MorphProcess )getWidthHeight ()(_bfe ,_bcaa int ){return _gfbd .Arguments [0],_gfbd .Arguments [1];
};func (_edc *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_edc .Width ,Height :_edc .Height ,RowStride :_edc .RowStride ,Color :_edc .Color ,Text :_edc .Text ,BitmapNumber :_edc .BitmapNumber ,Special :_edc .Special ,Data :make ([]byte ,len (_edc .Data ))};
};func _fddd (_geec ...MorphProcess )(_afec error ){const _cgbbe ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _caab ,_egdbe int ;for _edca ,_eedeg :=range _geec {if _afec =_eedeg .verify (_edca ,&_caab ,&_egdbe );
_afec !=nil {return _f .Wrap (_afec ,_cgbbe ,"");};};if _egdbe !=0&&_caab !=0{return _f .Error (_cgbbe ,"\u004d\u006f\u0072\u0070\u0068\u0020\u0073\u0065\u0071\u0075\u0065n\u0063\u0065\u0020\u002d\u0020\u0062\u006f\u0072d\u0065r\u0020\u0061\u0064\u0064\u0065\u0064\u0020\u0062\u0075\u0074\u0020\u006e\u0065\u0074\u0020\u0072\u0065\u0064u\u0063\u0074\u0069\u006f\u006e\u0020\u006e\u006f\u0074\u0020\u0030");
};return nil ;};func _abcd (_gcfb ,_deff *Bitmap ,_edge *Selection )(*Bitmap ,error ){const _eacd ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _bffdc ,_bccg int ;if _deff ==nil {return nil ,_f .Error (_eacd ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _edge ==nil {return nil ,_f .Error (_eacd ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_bffdc =_edge .Width ;_bccg =_edge .Height ;if _bffdc ==0||_bccg ==0{return nil ,_f .Error (_eacd ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");
};if _gcfb ==nil {return _deff .createTemplate (),nil ;};if _dbaae :=_gcfb .resizeImageData (_deff );_dbaae !=nil {return nil ,_dbaae ;};return _gcfb ,nil ;};func (_acf *Bitmap )GetChocolateData ()[]byte {if _acf .Color ==Vanilla {_acf .inverseData ();
};return _acf .Data ;};func (_acgd *Bitmaps )String ()string {_ccge :=_d .Builder {};for _ ,_aeba :=range _acgd .Values {_ccge .WriteString (_aeba .String ());_ccge .WriteRune ('\n');};return _ccge .String ();};const (Vanilla Color =iota ;Chocolate ;);
func _gfgeb (_abeb ,_abac byte ,_aaagf CombinationOperator )byte {switch _aaagf {case CmbOpOr :return _abac |_abeb ;case CmbOpAnd :return _abac &_abeb ;case CmbOpXor :return _abac ^_abeb ;case CmbOpXNor :return ^(_abac ^_abeb );case CmbOpNot :return ^(_abac );
default:return _abac ;};};func TstAddSymbol (t *_bd .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_fbag :=_bg .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_fbag );*x +=sym .Width +space ;};func _ffag (_ceac *Bitmap ,_aae ...MorphProcess )(_ddef *Bitmap ,_aebbdb error ){const _bggd ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";
if _ceac ==nil {return nil ,_f .Error (_bggd ,"\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065 \u0073\u006f\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
};if len (_aae )==0{return nil ,_f .Error (_bggd ,"m\u006f\u0072\u0070\u0068\u0053\u0065q\u0075\u0065\u006e\u0063\u0065\u002c \u0073\u0065\u0071\u0075\u0065\u006e\u0063e\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};if _aebbdb =_fddd (_aae ...);
_aebbdb !=nil {return nil ,_f .Wrap (_aebbdb ,_bggd ,"");};var _ddaba ,_geccg ,_cede int ;_ddef =_ceac .Copy ();for _ ,_bcgac :=range _aae {switch _bcgac .Operation {case MopDilation :_ddaba ,_geccg =_bcgac .getWidthHeight ();_ddef ,_aebbdb =DilateBrick (nil ,_ddef ,_ddaba ,_geccg );
if _aebbdb !=nil {return nil ,_f .Wrap (_aebbdb ,_bggd ,"");};case MopErosion :_ddaba ,_geccg =_bcgac .getWidthHeight ();_ddef ,_aebbdb =_bega (nil ,_ddef ,_ddaba ,_geccg );if _aebbdb !=nil {return nil ,_f .Wrap (_aebbdb ,_bggd ,"");};case MopOpening :_ddaba ,_geccg =_bcgac .getWidthHeight ();
_ddef ,_aebbdb =_fagd (nil ,_ddef ,_ddaba ,_geccg );if _aebbdb !=nil {return nil ,_f .Wrap (_aebbdb ,_bggd ,"");};case MopClosing :_ddaba ,_geccg =_bcgac .getWidthHeight ();_ddef ,_aebbdb =_ggag (nil ,_ddef ,_ddaba ,_geccg );if _aebbdb !=nil {return nil ,_f .Wrap (_aebbdb ,_bggd ,"");
};case MopRankBinaryReduction :_ddef ,_aebbdb =_dac (_ddef ,_bcgac .Arguments ...);if _aebbdb !=nil {return nil ,_f .Wrap (_aebbdb ,_bggd ,"");};case MopReplicativeBinaryExpansion :_ddef ,_aebbdb =_beacd (_ddef ,_bcgac .Arguments [0]);if _aebbdb !=nil {return nil ,_f .Wrap (_aebbdb ,_bggd ,"");
};case MopAddBorder :_cede =_bcgac .Arguments [0];_ddef ,_aebbdb =_ddef .AddBorder (_cede ,0);if _aebbdb !=nil {return nil ,_f .Wrap (_aebbdb ,_bggd ,"");};default:return nil ,_f .Error (_bggd ,"i\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006d\u006fr\u0070\u0068\u004f\u0070\u0065\u0072\u0061ti\u006f\u006e\u0020\u0070r\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0074\u006f t\u0068\u0065 \u0073\u0065\u0071\u0075\u0065\u006e\u0063\u0065");
};};if _cede > 0{_ddef ,_aebbdb =_ddef .RemoveBorder (_cede );if _aebbdb !=nil {return nil ,_f .Wrap (_aebbdb ,_bggd ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _ddef ,nil ;};func _bdaa (_bdcg ,_ggcda ,_dfee byte )byte {return (_bdcg &^(_dfee ))|(_ggcda &_dfee )};
func _dfbg (_gfca *Bitmap ,_ebecdf *_e .Stack ,_facdg ,_ecga ,_efdd int )(_eaafa *_bg .Rectangle ,_adgf error ){const _afece ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _gfca ==nil {return nil ,_f .Error (_afece ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
};if _ebecdf ==nil {return nil ,_f .Error (_afece ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};switch _efdd {case 4:if _eaafa ,_adgf =_ddbe (_gfca ,_ebecdf ,_facdg ,_ecga );_adgf !=nil {return nil ,_f .Wrap (_adgf ,_afece ,"");
};return _eaafa ,nil ;case 8:if _eaafa ,_adgf =_eefdf (_gfca ,_ebecdf ,_facdg ,_ecga );_adgf !=nil {return nil ,_f .Wrap (_adgf ,_afece ,"");};return _eaafa ,nil ;default:return nil ,_f .Errorf (_afece ,"\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u0069\u0073 \u006eo\u0074\u0020\u0034\u0020\u006f\u0072\u0020\u0038\u003a\u0020\u0027\u0025\u0064\u0027",_efdd );
};};func (_feeb *Bitmap )Equivalent (s *Bitmap )bool {return _feeb .equivalent (s )};func _agef (_agge ,_fedfd *Bitmap ,_edadf *Selection )(*Bitmap ,error ){const _effc ="\u0065\u0072\u006fd\u0065";var (_dadd error ;_dcde *Bitmap ;);_agge ,_dadd =_efgd (_agge ,_fedfd ,_edadf ,&_dcde );
if _dadd !=nil {return nil ,_f .Wrap (_dadd ,_effc ,"");};if _dadd =_agge .setAll ();_dadd !=nil {return nil ,_f .Wrap (_dadd ,_effc ,"");};var _abdd SelectionValue ;for _cgdad :=0;_cgdad < _edadf .Height ;_cgdad ++{for _gbgb :=0;_gbgb < _edadf .Width ;
_gbgb ++{_abdd =_edadf .Data [_cgdad ][_gbgb ];if _abdd ==SelHit {_dadd =_geg (_agge ,_edadf .Cx -_gbgb ,_edadf .Cy -_cgdad ,_fedfd .Width ,_fedfd .Height ,PixSrcAndDst ,_dcde ,0,0);if _dadd !=nil {return nil ,_f .Wrap (_dadd ,_effc ,"");};};};};if MorphBC ==SymmetricMorphBC {return _agge ,nil ;
};_fbd ,_gbdd ,_fedd ,_bdbe :=_edadf .findMaxTranslations ();if _fbd > 0{if _dadd =_agge .RasterOperation (0,0,_fbd ,_fedfd .Height ,PixClr ,nil ,0,0);_dadd !=nil {return nil ,_f .Wrap (_dadd ,_effc ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _fedd > 0{if _dadd =_agge .RasterOperation (_fedfd .Width -_fedd ,0,_fedd ,_fedfd .Height ,PixClr ,nil ,0,0);
_dadd !=nil {return nil ,_f .Wrap (_dadd ,_effc ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _gbdd > 0{if _dadd =_agge .RasterOperation (0,0,_fedfd .Width ,_gbdd ,PixClr ,nil ,0,0);_dadd !=nil {return nil ,_f .Wrap (_dadd ,_effc ,"\u0079\u0070\u0020\u003e\u0020\u0030");
};};if _bdbe > 0{if _dadd =_agge .RasterOperation (0,_fedfd .Height -_bdbe ,_fedfd .Width ,_bdbe ,PixClr ,nil ,0,0);_dadd !=nil {return nil ,_f .Wrap (_dadd ,_effc ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _agge ,nil ;};func (_bged *Bitmaps )SortByWidth (){_dfbgg :=(*byWidth )(_bged );
_cg .Sort (_dfbgg )};func TstTSymbol (t *_bd .T ,scale ...int )*Bitmap {_fab ,_aabb :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_b .NoError (t ,_aabb );return TstGetScaledSymbol (t ,_fab ,scale ...);};func (_ebd *Bitmap )setEightPartlyBytes (_eagb ,_cfff int ,_aaag uint64 )(_fcca error ){var (_fdaa byte ;
_bcfc int ;);const _ccf ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _gbda :=1;_gbda <=_cfff ;_gbda ++{_bcfc =64-_gbda *8;_fdaa =byte (_aaag >>uint (_bcfc )&0xff);_a .Log .Trace ("\u0074\u0065\u006d\u0070\u003a\u0020\u0025\u0030\u0038\u0062\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a %\u0064,\u0020\u0069\u0064\u0078\u003a\u0020\u0025\u0064\u002c\u0020\u0066\u0075l\u006c\u0042\u0079\u0074\u0065\u0073\u004e\u0075\u006d\u0062\u0065\u0072\u003a\u0020\u0025\u0064\u002c \u0073\u0068\u0069\u0066\u0074\u003a\u0020\u0025\u0064",_fdaa ,_eagb ,_eagb +_gbda -1,_cfff ,_bcfc );
if _fcca =_ebd .SetByte (_eagb +_gbda -1,_fdaa );_fcca !=nil {return _f .Wrap (_fcca ,_ccf ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_gbeb :=_ebd .RowStride *8-_ebd .Width ;if _gbeb ==0{return nil ;};_bcfc -=8;_fdaa =byte (_aaag >>uint (_bcfc )&0xff)<<uint (_gbeb );
if _fcca =_ebd .SetByte (_eagb +_cfff ,_fdaa );_fcca !=nil {return _f .Wrap (_fcca ,_ccf ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func (_cdag *Bitmap )centroid (_cbg ,_edbg []int )(Point ,error ){_fggg :=Point {};_cdag .setPadBits (0);if len (_cbg )==0{_cbg =_gccb ();
};if len (_edbg )==0{_edbg =_aebbd ();};var _bed ,_gcc ,_egcb ,_gdcea ,_efbd ,_efga int ;var _bbbb byte ;for _efbd =0;_efbd < _cdag .Height ;_efbd ++{_agca :=_cdag .RowStride *_efbd ;_gdcea =0;for _efga =0;_efga < _cdag .RowStride ;_efga ++{_bbbb =_cdag .Data [_agca +_efga ];
if _bbbb !=0{_gdcea +=_edbg [_bbbb ];_bed +=_cbg [_bbbb ]+_efga *8*_edbg [_bbbb ];};};_egcb +=_gdcea ;_gcc +=_gdcea *_efbd ;};if _egcb !=0{_fggg .X =float32 (_bed )/float32 (_egcb );_fggg .Y =float32 (_gcc )/float32 (_egcb );};return _fggg ,nil ;};func _eafa (_gcad ,_caef *Bitmap ,_gccf *Selection )(*Bitmap ,error ){const _bdcc ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";
var _dfebb error ;if _gcad ,_dfebb =_abcd (_gcad ,_caef ,_gccf );_dfebb !=nil {return nil ,_dfebb ;};_cbdf ,_dfebb :=_ggea (nil ,_caef ,_gccf );if _dfebb !=nil {return nil ,_f .Wrap (_dfebb ,_bdcc ,"");};if _ ,_dfebb =_agef (_gcad ,_cbdf ,_gccf );_dfebb !=nil {return nil ,_f .Wrap (_dfebb ,_bdcc ,"");
};return _gcad ,nil ;};func (_cc *Bitmap )Zero ()bool {_agb :=_cc .Width /8;_gaf :=_cc .Width &7;var _cec byte ;if _gaf !=0{_cec =byte (0xff<<uint (8-_gaf ));};var _fegd ,_cffb ,_fdc int ;for _cffb =0;_cffb < _cc .Height ;_cffb ++{_fegd =_cc .RowStride *_cffb ;
for _fdc =0;_fdc < _agb ;_fdc ,_fegd =_fdc +1,_fegd +1{if _cc .Data [_fegd ]!=0{return false ;};};if _gaf > 0{if _cc .Data [_fegd ]&_cec !=0{return false ;};};};return true ;};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _badg ,_dgbe int ;
_fccad :=src .RowStride -1;if x < 0{_dgbe =-x ;x =0;}else if x +src .Width > dst .Width {_fccad -=src .Width +x -dst .Width ;};if y < 0{_badg =-y ;y =0;_dgbe +=src .RowStride ;_fccad +=src .RowStride ;}else if y +src .Height > dst .Height {_badg =src .Height +y -dst .Height ;
};var (_ageb int ;_afce error ;);_acac :=x &0x07;_dcb :=8-_acac ;_fdcf :=src .Width &0x07;_abde :=_dcb -_fdcf ;_gcea :=_dcb &0x07!=0;_abg :=src .Width <=((_fccad -_dgbe )<<3)+_dcb ;_faf :=dst .GetByteIndex (x ,y );_beef :=_badg +dst .Height ;if src .Height > _beef {_ageb =_beef ;
}else {_ageb =src .Height ;};switch {case !_gcea :_afce =_fdcc (src ,dst ,_badg ,_ageb ,_faf ,_dgbe ,_fccad ,op );case _abg :_afce =_ace (src ,dst ,_badg ,_ageb ,_faf ,_dgbe ,_fccad ,_abde ,_acac ,_dcb ,op );default:_afce =_bgdf (src ,dst ,_badg ,_ageb ,_faf ,_dgbe ,_fccad ,_abde ,_acac ,_dcb ,op ,_fdcf );
};return _afce ;};func _afe ()(_gcff []byte ){_gcff =make ([]byte ,256);for _aged :=0;_aged < 256;_aged ++{_deed :=byte (_aged );_gcff [_deed ]=(_deed &0x01)|((_deed &0x04)>>1)|((_deed &0x10)>>2)|((_deed &0x40)>>3)|((_deed &0x02)<<3)|((_deed &0x08)<<2)|((_deed &0x20)<<1)|(_deed &0x80);
};return _gcff ;};func _ccfe (_acfe *Bitmap ,_gdddb ,_agege int ,_affc ,_bccb int ,_dfggb RasterOperator ){var (_gbcd bool ;_becdc bool ;_cedea int ;_cfeg int ;_cbbc int ;_cdfd int ;_fccf bool ;_dgadg byte ;);_efab :=8-(_gdddb &7);_baedg :=_fecg [_efab ];
_bcda :=_acfe .RowStride *_agege +(_gdddb >>3);if _affc < _efab {_gbcd =true ;_baedg &=_fedg [8-_efab +_affc ];};if !_gbcd {_cedea =(_affc -_efab )>>3;if _cedea !=0{_becdc =true ;_cfeg =_bcda +1;};};_cbbc =(_gdddb +_affc )&7;if !(_gbcd ||_cbbc ==0){_fccf =true ;
_dgadg =_fedg [_cbbc ];_cdfd =_bcda +1+_cedea ;};var _abdf ,_gffe int ;switch _dfggb {case PixClr :for _abdf =0;_abdf < _bccb ;_abdf ++{_acfe .Data [_bcda ]=_bdaa (_acfe .Data [_bcda ],0x0,_baedg );_bcda +=_acfe .RowStride ;};if _becdc {for _abdf =0;_abdf < _bccb ;
_abdf ++{for _gffe =0;_gffe < _cedea ;_gffe ++{_acfe .Data [_cfeg +_gffe ]=0x0;};_cfeg +=_acfe .RowStride ;};};if _fccf {for _abdf =0;_abdf < _bccb ;_abdf ++{_acfe .Data [_cdfd ]=_bdaa (_acfe .Data [_cdfd ],0x0,_dgadg );_cdfd +=_acfe .RowStride ;};};case PixSet :for _abdf =0;
_abdf < _bccb ;_abdf ++{_acfe .Data [_bcda ]=_bdaa (_acfe .Data [_bcda ],0xff,_baedg );_bcda +=_acfe .RowStride ;};if _becdc {for _abdf =0;_abdf < _bccb ;_abdf ++{for _gffe =0;_gffe < _cedea ;_gffe ++{_acfe .Data [_cfeg +_gffe ]=0xff;};_cfeg +=_acfe .RowStride ;
};};if _fccf {for _abdf =0;_abdf < _bccb ;_abdf ++{_acfe .Data [_cdfd ]=_bdaa (_acfe .Data [_cdfd ],0xff,_dgadg );_cdfd +=_acfe .RowStride ;};};case PixNotDst :for _abdf =0;_abdf < _bccb ;_abdf ++{_acfe .Data [_bcda ]=_bdaa (_acfe .Data [_bcda ],^_acfe .Data [_bcda ],_baedg );
_bcda +=_acfe .RowStride ;};if _becdc {for _abdf =0;_abdf < _bccb ;_abdf ++{for _gffe =0;_gffe < _cedea ;_gffe ++{_acfe .Data [_cfeg +_gffe ]=^(_acfe .Data [_cfeg +_gffe ]);};_cfeg +=_acfe .RowStride ;};};if _fccf {for _abdf =0;_abdf < _bccb ;_abdf ++{_acfe .Data [_cdfd ]=_bdaa (_acfe .Data [_cdfd ],^_acfe .Data [_cdfd ],_dgadg );
_cdfd +=_acfe .RowStride ;};};};};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _ggea (d ,s ,sel )};type RasterOperator int ;func (_cab *Bitmap )SizesEqual (s *Bitmap )bool {if _cab ==s {return true ;};if _cab .Width !=s .Width ||_cab .Height !=s .Height {return false ;
};return true ;};func (_caefd *ClassedPoints )Less (i ,j int )bool {return _caefd ._fbff (i ,j )};func (_eabb *ClassedPoints )Len ()int {return _eabb .IntSlice .Size ()};func Extract (roi _bg .Rectangle ,src *Bitmap )(*Bitmap ,error ){_gdaf :=New (roi .Dx (),roi .Dy ());
_dcda :=roi .Min .X &0x07;_adad :=8-_dcda ;_dafe :=uint (8-_gdaf .Width &0x07);_aggbb :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_dcfb :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_effb :=_gdaf .RowStride ==_dcfb +1-_aggbb ;var _becdb int ;for _acec :=roi .Min .Y ;
_acec < roi .Max .Y ;_acec ++{_ggfc :=_aggbb ;_cggb :=_becdb ;switch {case _aggbb ==_dcfb :_dcbd ,_ageee :=src .GetByte (_ggfc );if _ageee !=nil {return nil ,_ageee ;};_dcbd <<=uint (_dcda );_ageee =_gdaf .SetByte (_cggb ,_efd (_dafe ,_dcbd ));if _ageee !=nil {return nil ,_ageee ;
};case _dcda ==0:for _cge :=_aggbb ;_cge <=_dcfb ;_cge ++{_fdab ,_egbe :=src .GetByte (_ggfc );if _egbe !=nil {return nil ,_egbe ;};_ggfc ++;if _cge ==_dcfb &&_effb {_fdab =_efd (_dafe ,_fdab );};_egbe =_gdaf .SetByte (_cggb ,_fdab );if _egbe !=nil {return nil ,_egbe ;
};_cggb ++;};default:_afaf :=_bcedf (src ,_gdaf ,uint (_dcda ),uint (_adad ),_dafe ,_aggbb ,_dcfb ,_effb ,_ggfc ,_cggb );if _afaf !=nil {return nil ,_afaf ;};};_aggbb +=src .RowStride ;_dcfb +=src .RowStride ;_becdb +=_gdaf .RowStride ;};return _gdaf ,nil ;
};type SizeSelection int ;func (_aefb Points )GetIntX (i int )(int ,error ){if i >=len (_aefb ){return 0,_f .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0058","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return int (_aefb [i ].X ),nil ;};func (_dcf *Bitmap )addBorderGeneral (_gfdd ,_gcd ,_gac ,_fgd int ,_efbc int )(*Bitmap ,error ){const _bffd ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _gfdd < 0||_gcd < 0||_gac < 0||_fgd < 0{return nil ,_f .Error (_bffd ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");
};_bbg ,_bfd :=_dcf .Width ,_dcf .Height ;_dbc :=_bbg +_gfdd +_gcd ;_fbgb :=_bfd +_gac +_fgd ;_deeag :=New (_dbc ,_fbgb );_deeag .Color =_dcf .Color ;_debf :=PixClr ;if _efbc > 0{_debf =PixSet ;};_aebb :=_deeag .RasterOperation (0,0,_gfdd ,_fbgb ,_debf ,nil ,0,0);
if _aebb !=nil {return nil ,_f .Wrap (_aebb ,_bffd ,"\u006c\u0065\u0066\u0074");};_aebb =_deeag .RasterOperation (_dbc -_gcd ,0,_gcd ,_fbgb ,_debf ,nil ,0,0);if _aebb !=nil {return nil ,_f .Wrap (_aebb ,_bffd ,"\u0072\u0069\u0067h\u0074");};_aebb =_deeag .RasterOperation (0,0,_dbc ,_gac ,_debf ,nil ,0,0);
if _aebb !=nil {return nil ,_f .Wrap (_aebb ,_bffd ,"\u0074\u006f\u0070");};_aebb =_deeag .RasterOperation (0,_fbgb -_fgd ,_dbc ,_fgd ,_debf ,nil ,0,0);if _aebb !=nil {return nil ,_f .Wrap (_aebb ,_bffd ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_aebb =_deeag .RasterOperation (_gfdd ,_gac ,_bbg ,_bfd ,PixSrc ,_dcf ,0,0);
if _aebb !=nil {return nil ,_f .Wrap (_aebb ,_bffd ,"\u0063\u006f\u0070\u0079");};return _deeag ,nil ;};func (_dfd *Bitmap )countPixels ()int {var (_bbeb int ;_ggeg uint8 ;_dgbf byte ;_gagf int ;);_dadb :=_dfd .RowStride ;_abae :=uint (_dfd .Width &0x07);
if _abae !=0{_ggeg =uint8 ((0xff<<(8-_abae ))&0xff);_dadb --;};for _ccg :=0;_ccg < _dfd .Height ;_ccg ++{for _gagf =0;_gagf < _dadb ;_gagf ++{_dgbf =_dfd .Data [_ccg *_dfd .RowStride +_gagf ];_bbeb +=int (_ebe [_dgbf ]);};if _abae !=0{_bbeb +=int (_ebe [_dfd .Data [_ccg *_dfd .RowStride +_gagf ]&_ggeg ]);
};};return _bbeb ;};func _geg (_eagc *Bitmap ,_bbed ,_aacf ,_dbdg ,_bgdc int ,_dgab RasterOperator ,_fbcg *Bitmap ,_acgef ,_ggaf int )error {const _aecff ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";if _eagc ==nil {return _f .Error (_aecff ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");
};if _dgab ==PixDst {return nil ;};switch _dgab {case PixClr ,PixSet ,PixNotDst :_bgdcg (_eagc ,_bbed ,_aacf ,_dbdg ,_bgdc ,_dgab );return nil ;};if _fbcg ==nil {_a .Log .Debug ("\u0052a\u0073\u0074e\u0072\u004f\u0070\u0065r\u0061\u0074\u0069o\u006e\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020bi\u0074\u006d\u0061p\u0020\u0069s\u0020\u006e\u006f\u0074\u0020\u0064e\u0066\u0069n\u0065\u0064");
return _f .Error (_aecff ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _aaab :=_cfffd (_eagc ,_bbed ,_aacf ,_dbdg ,_bgdc ,_dgab ,_fbcg ,_acgef ,_ggaf );_aaab !=nil {return _f .Wrap (_aaab ,_aecff ,"");};
return nil ;};type byWidth Bitmaps ;func TstGetScaledSymbol (t *_bd .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_beee ,_gaac :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });
_b .NoError (t ,_gaac );return _beee ;};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _geg (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func (_gdbdg *Bitmaps )selectByIndexes (_bedcf []int )(*Bitmaps ,error ){_deae :=&Bitmaps {};
for _ ,_fbgdd :=range _bedcf {_ccag ,_decbc :=_gdbdg .GetBitmap (_fbgdd );if _decbc !=nil {return nil ,_f .Wrap (_decbc ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_deae .AddBitmap (_ccag );};return _deae ,nil ;
};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _ggbd ="C\u006f\u0072\u0072\u0065\u006c\u0061t\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054h\u0072\u0065\u0073h\u006fl\u0064\u0065\u0064";
if bm1 ==nil {return false ,_f .Error (_ggbd ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d1\u0020\u0069s\u0020\u006e\u0069\u006c");
};if bm2 ==nil {return false ,_f .Error (_ggbd ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d2\u0020\u0069s\u0020\u006e\u0069\u006c");
};if area1 <=0||area2 <=0{return false ,_f .Error (_ggbd ,"c\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006fn\u0053\u0063\u006f\u0072\u0065\u0054\u0068re\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u002d\u0020\u0061\u0072\u0065\u0061s \u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u003e\u0020\u0030");
};if downcount ==nil {return false ,_f .Error (_ggbd ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u006f\u0020\u0027\u0064\u006f\u0077\u006e\u0063\u006f\u0075\u006e\u0074\u0027");};if tab ==nil {return false ,_f .Error (_ggbd ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
};_eccd ,_gage :=bm1 .Width ,bm1 .Height ;_cda ,_ebedg :=bm2 .Width ,bm2 .Height ;if _e .Abs (_eccd -_cda )> maxDiffW {return false ,nil ;};if _e .Abs (_gage -_ebedg )> maxDiffH {return false ,nil ;};_abad :=int (delX +_e .Sign (delX )*0.5);_affag :=int (delY +_e .Sign (delY )*0.5);
_gdad :=int (_ce .Ceil (_ce .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_dcg :=bm2 .RowStride ;_ccb :=_fcd (_affag ,0);_bdbd :=_gacf (_ebedg +_affag ,_gage );_dca :=bm1 .RowStride *_ccb ;_accc :=bm2 .RowStride *(_ccb -_affag );
var _dbae int ;if _bdbd <=_gage {_dbae =downcount [_bdbd -1];};_eaf :=_fcd (_abad ,0);_aabf :=_gacf (_cda +_abad ,_eccd );var _gcae ,_ecab int ;if _abad >=8{_gcae =_abad >>3;_dca +=_gcae ;_eaf -=_gcae <<3;_aabf -=_gcae <<3;_abad &=7;}else if _abad <=-8{_ecab =-((_abad +7)>>3);
_accc +=_ecab ;_dcg -=_ecab ;_abad +=_ecab <<3;};var (_cgbad ,_gbcf ,_geb int ;_aabg ,_ggc ,_cgbf byte ;);if _eaf >=_aabf ||_ccb >=_bdbd {return false ,nil ;};_bace :=(_aabf +7)>>3;switch {case _abad ==0:for _gbcf =_ccb ;_gbcf < _bdbd ;_gbcf ,_dca ,_accc =_gbcf +1,_dca +bm1 .RowStride ,_accc +bm2 .RowStride {for _geb =0;
_geb < _bace ;_geb ++{_aabg =bm1 .Data [_dca +_geb ]&bm2 .Data [_accc +_geb ];_cgbad +=tab [_aabg ];};if _cgbad >=_gdad {return true ,nil ;};if _eegg :=_cgbad +downcount [_gbcf ]-_dbae ;_eegg < _gdad {return false ,nil ;};};case _abad > 0&&_dcg < _bace :for _gbcf =_ccb ;
_gbcf < _bdbd ;_gbcf ,_dca ,_accc =_gbcf +1,_dca +bm1 .RowStride ,_accc +bm2 .RowStride {_ggc =bm1 .Data [_dca ];_cgbf =bm2 .Data [_accc ]>>uint (_abad );_aabg =_ggc &_cgbf ;_cgbad +=tab [_aabg ];for _geb =1;_geb < _dcg ;_geb ++{_ggc =bm1 .Data [_dca +_geb ];
_cgbf =bm2 .Data [_accc +_geb ]>>uint (_abad )|bm2 .Data [_accc +_geb -1]<<uint (8-_abad );_aabg =_ggc &_cgbf ;_cgbad +=tab [_aabg ];};_ggc =bm1 .Data [_dca +_geb ];_cgbf =bm2 .Data [_accc +_geb -1]<<uint (8-_abad );_aabg =_ggc &_cgbf ;_cgbad +=tab [_aabg ];
if _cgbad >=_gdad {return true ,nil ;}else if _cgbad +downcount [_gbcf ]-_dbae < _gdad {return false ,nil ;};};case _abad > 0&&_dcg >=_bace :for _gbcf =_ccb ;_gbcf < _bdbd ;_gbcf ,_dca ,_accc =_gbcf +1,_dca +bm1 .RowStride ,_accc +bm2 .RowStride {_ggc =bm1 .Data [_dca ];
_cgbf =bm2 .Data [_accc ]>>uint (_abad );_aabg =_ggc &_cgbf ;_cgbad +=tab [_aabg ];for _geb =1;_geb < _bace ;_geb ++{_ggc =bm1 .Data [_dca +_geb ];_cgbf =bm2 .Data [_accc +_geb ]>>uint (_abad );_cgbf |=bm2 .Data [_accc +_geb -1]<<uint (8-_abad );_aabg =_ggc &_cgbf ;
_cgbad +=tab [_aabg ];};if _cgbad >=_gdad {return true ,nil ;}else if _cgbad +downcount [_gbcf ]-_dbae < _gdad {return false ,nil ;};};case _bace < _dcg :for _gbcf =_ccb ;_gbcf < _bdbd ;_gbcf ,_dca ,_accc =_gbcf +1,_dca +bm1 .RowStride ,_accc +bm2 .RowStride {for _geb =0;
_geb < _bace ;_geb ++{_ggc =bm1 .Data [_dca +_geb ];_cgbf =bm2 .Data [_accc +_geb ]<<uint (-_abad );_cgbf |=bm2 .Data [_accc +_geb +1]>>uint (8+_abad );_aabg =_ggc &_cgbf ;_cgbad +=tab [_aabg ];};if _cgbad >=_gdad {return true ,nil ;}else if _eafe :=_cgbad +downcount [_gbcf ]-_dbae ;
_eafe < _gdad {return false ,nil ;};};case _dcg >=_bace :for _gbcf =_ccb ;_gbcf < _bdbd ;_gbcf ,_dca ,_accc =_gbcf +1,_dca +bm1 .RowStride ,_accc +bm2 .RowStride {for _geb =0;_geb < _bace ;_geb ++{_ggc =bm1 .Data [_dca +_geb ];_cgbf =bm2 .Data [_accc +_geb ]<<uint (-_abad );
_cgbf |=bm2 .Data [_accc +_geb +1]>>uint (8+_abad );_aabg =_ggc &_cgbf ;_cgbad +=tab [_aabg ];};_ggc =bm1 .Data [_dca +_geb ];_cgbf =bm2 .Data [_accc +_geb ]<<uint (-_abad );_aabg =_ggc &_cgbf ;_cgbad +=tab [_aabg ];if _cgbad >=_gdad {return true ,nil ;
}else if _cgbad +downcount [_gbcf ]-_dbae < _gdad {return false ,nil ;};};};_fgfg :=float32 (_cgbad )*float32 (_cgbad )/(float32 (area1 )*float32 (area2 ));if _fgfg >=scoreThreshold {_a .Log .Trace ("\u0063\u006f\u0075\u006e\u0074\u003a\u0020\u0025\u0064\u0020\u003c\u0020\u0074\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0020\u0025\u0064\u0020\u0062\u0075\u0074\u0020\u0073c\u006f\u0072\u0065\u0020\u0025\u0066\u0020\u003e\u003d\u0020\u0073\u0063\u006fr\u0065\u0054\u0068\u0072\u0065\u0073h\u006f\u006c\u0064 \u0025\u0066",_cgbad ,_gdad ,_fgfg ,scoreThreshold );
};return false ,nil ;};func _ggge (_edeg *Bitmap ,_dbaf ,_efeb ,_dadf ,_dcbb int ,_fdcfa RasterOperator ,_bfba *Bitmap ,_gdbf ,_dcbg int )error {var (_adag bool ;_bdeb bool ;_fdcfag byte ;_acbg int ;_efbce int ;_cbbgb int ;_cbgfe int ;_dbab bool ;_gcdfb int ;
_fggc int ;_ecge int ;_effbb bool ;_fceg byte ;_bbgc int ;_ffbf int ;_eagaa int ;_dcef byte ;_adgg int ;_eefd int ;_gbedd uint ;_bacb uint ;_afebg byte ;_edac shift ;_agbd bool ;_bage bool ;_cgeb ,_bdda int ;);if _gdbf &7!=0{_eefd =8-(_gdbf &7);};if _dbaf &7!=0{_efbce =8-(_dbaf &7);
};if _eefd ==0&&_efbce ==0{_afebg =_fecg [0];}else {if _efbce > _eefd {_gbedd =uint (_efbce -_eefd );}else {_gbedd =uint (8-(_eefd -_efbce ));};_bacb =8-_gbedd ;_afebg =_fecg [_gbedd ];};if (_dbaf &7)!=0{_adag =true ;_acbg =8-(_dbaf &7);_fdcfag =_fecg [_acbg ];
_cbbgb =_edeg .RowStride *_efeb +(_dbaf >>3);_cbgfe =_bfba .RowStride *_dcbg +(_gdbf >>3);_adgg =8-(_gdbf &7);if _acbg > _adgg {_edac =_cabbb ;if _dadf >=_eefd {_agbd =true ;};}else {_edac =_efeaf ;};};if _dadf < _acbg {_bdeb =true ;_fdcfag &=_fedg [8-_acbg +_dadf ];
};if !_bdeb {_gcdfb =(_dadf -_acbg )>>3;if _gcdfb !=0{_dbab =true ;_fggc =_edeg .RowStride *_efeb +((_dbaf +_efbce )>>3);_ecge =_bfba .RowStride *_dcbg +((_gdbf +_efbce )>>3);};};_bbgc =(_dbaf +_dadf )&7;if !(_bdeb ||_bbgc ==0){_effbb =true ;_fceg =_fedg [_bbgc ];
_ffbf =_edeg .RowStride *_efeb +((_dbaf +_efbce )>>3)+_gcdfb ;_eagaa =_bfba .RowStride *_dcbg +((_gdbf +_efbce )>>3)+_gcdfb ;if _bbgc > int (_bacb ){_bage =true ;};};switch _fdcfa {case PixSrc :if _adag {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{if _edac ==_cabbb {_dcef =_bfba .Data [_cbgfe ]<<_gbedd ;
if _agbd {_dcef =_bdaa (_dcef ,_bfba .Data [_cbgfe +1]>>_bacb ,_afebg );};}else {_dcef =_bfba .Data [_cbgfe ]>>_bacb ;};_edeg .Data [_cbbgb ]=_bdaa (_edeg .Data [_cbbgb ],_dcef ,_fdcfag );_cbbgb +=_edeg .RowStride ;_cbgfe +=_bfba .RowStride ;};};if _dbab {for _cgeb =0;
_cgeb < _dcbb ;_cgeb ++{for _bdda =0;_bdda < _gcdfb ;_bdda ++{_dcef =_bdaa (_bfba .Data [_ecge +_bdda ]<<_gbedd ,_bfba .Data [_ecge +_bdda +1]>>_bacb ,_afebg );_edeg .Data [_fggc +_bdda ]=_dcef ;};_fggc +=_edeg .RowStride ;_ecge +=_bfba .RowStride ;};};
if _effbb {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{_dcef =_bfba .Data [_eagaa ]<<_gbedd ;if _bage {_dcef =_bdaa (_dcef ,_bfba .Data [_eagaa +1]>>_bacb ,_afebg );};_edeg .Data [_ffbf ]=_bdaa (_edeg .Data [_ffbf ],_dcef ,_fceg );_ffbf +=_edeg .RowStride ;_eagaa +=_bfba .RowStride ;
};};case PixNotSrc :if _adag {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{if _edac ==_cabbb {_dcef =_bfba .Data [_cbgfe ]<<_gbedd ;if _agbd {_dcef =_bdaa (_dcef ,_bfba .Data [_cbgfe +1]>>_bacb ,_afebg );};}else {_dcef =_bfba .Data [_cbgfe ]>>_bacb ;};_edeg .Data [_cbbgb ]=_bdaa (_edeg .Data [_cbbgb ],^_dcef ,_fdcfag );
_cbbgb +=_edeg .RowStride ;_cbgfe +=_bfba .RowStride ;};};if _dbab {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{for _bdda =0;_bdda < _gcdfb ;_bdda ++{_dcef =_bdaa (_bfba .Data [_ecge +_bdda ]<<_gbedd ,_bfba .Data [_ecge +_bdda +1]>>_bacb ,_afebg );_edeg .Data [_fggc +_bdda ]=^_dcef ;
};_fggc +=_edeg .RowStride ;_ecge +=_bfba .RowStride ;};};if _effbb {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{_dcef =_bfba .Data [_eagaa ]<<_gbedd ;if _bage {_dcef =_bdaa (_dcef ,_bfba .Data [_eagaa +1]>>_bacb ,_afebg );};_edeg .Data [_ffbf ]=_bdaa (_edeg .Data [_ffbf ],^_dcef ,_fceg );
_ffbf +=_edeg .RowStride ;_eagaa +=_bfba .RowStride ;};};case PixSrcOrDst :if _adag {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{if _edac ==_cabbb {_dcef =_bfba .Data [_cbgfe ]<<_gbedd ;if _agbd {_dcef =_bdaa (_dcef ,_bfba .Data [_cbgfe +1]>>_bacb ,_afebg );};
}else {_dcef =_bfba .Data [_cbgfe ]>>_bacb ;};_edeg .Data [_cbbgb ]=_bdaa (_edeg .Data [_cbbgb ],_dcef |_edeg .Data [_cbbgb ],_fdcfag );_cbbgb +=_edeg .RowStride ;_cbgfe +=_bfba .RowStride ;};};if _dbab {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{for _bdda =0;
_bdda < _gcdfb ;_bdda ++{_dcef =_bdaa (_bfba .Data [_ecge +_bdda ]<<_gbedd ,_bfba .Data [_ecge +_bdda +1]>>_bacb ,_afebg );_edeg .Data [_fggc +_bdda ]|=_dcef ;};_fggc +=_edeg .RowStride ;_ecge +=_bfba .RowStride ;};};if _effbb {for _cgeb =0;_cgeb < _dcbb ;
_cgeb ++{_dcef =_bfba .Data [_eagaa ]<<_gbedd ;if _bage {_dcef =_bdaa (_dcef ,_bfba .Data [_eagaa +1]>>_bacb ,_afebg );};_edeg .Data [_ffbf ]=_bdaa (_edeg .Data [_ffbf ],_dcef |_edeg .Data [_ffbf ],_fceg );_ffbf +=_edeg .RowStride ;_eagaa +=_bfba .RowStride ;
};};case PixSrcAndDst :if _adag {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{if _edac ==_cabbb {_dcef =_bfba .Data [_cbgfe ]<<_gbedd ;if _agbd {_dcef =_bdaa (_dcef ,_bfba .Data [_cbgfe +1]>>_bacb ,_afebg );};}else {_dcef =_bfba .Data [_cbgfe ]>>_bacb ;};_edeg .Data [_cbbgb ]=_bdaa (_edeg .Data [_cbbgb ],_dcef &_edeg .Data [_cbbgb ],_fdcfag );
_cbbgb +=_edeg .RowStride ;_cbgfe +=_bfba .RowStride ;};};if _dbab {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{for _bdda =0;_bdda < _gcdfb ;_bdda ++{_dcef =_bdaa (_bfba .Data [_ecge +_bdda ]<<_gbedd ,_bfba .Data [_ecge +_bdda +1]>>_bacb ,_afebg );_edeg .Data [_fggc +_bdda ]&=_dcef ;
};_fggc +=_edeg .RowStride ;_ecge +=_bfba .RowStride ;};};if _effbb {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{_dcef =_bfba .Data [_eagaa ]<<_gbedd ;if _bage {_dcef =_bdaa (_dcef ,_bfba .Data [_eagaa +1]>>_bacb ,_afebg );};_edeg .Data [_ffbf ]=_bdaa (_edeg .Data [_ffbf ],_dcef &_edeg .Data [_ffbf ],_fceg );
_ffbf +=_edeg .RowStride ;_eagaa +=_bfba .RowStride ;};};case PixSrcXorDst :if _adag {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{if _edac ==_cabbb {_dcef =_bfba .Data [_cbgfe ]<<_gbedd ;if _agbd {_dcef =_bdaa (_dcef ,_bfba .Data [_cbgfe +1]>>_bacb ,_afebg );
};}else {_dcef =_bfba .Data [_cbgfe ]>>_bacb ;};_edeg .Data [_cbbgb ]=_bdaa (_edeg .Data [_cbbgb ],_dcef ^_edeg .Data [_cbbgb ],_fdcfag );_cbbgb +=_edeg .RowStride ;_cbgfe +=_bfba .RowStride ;};};if _dbab {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{for _bdda =0;
_bdda < _gcdfb ;_bdda ++{_dcef =_bdaa (_bfba .Data [_ecge +_bdda ]<<_gbedd ,_bfba .Data [_ecge +_bdda +1]>>_bacb ,_afebg );_edeg .Data [_fggc +_bdda ]^=_dcef ;};_fggc +=_edeg .RowStride ;_ecge +=_bfba .RowStride ;};};if _effbb {for _cgeb =0;_cgeb < _dcbb ;
_cgeb ++{_dcef =_bfba .Data [_eagaa ]<<_gbedd ;if _bage {_dcef =_bdaa (_dcef ,_bfba .Data [_eagaa +1]>>_bacb ,_afebg );};_edeg .Data [_ffbf ]=_bdaa (_edeg .Data [_ffbf ],_dcef ^_edeg .Data [_ffbf ],_fceg );_ffbf +=_edeg .RowStride ;_eagaa +=_bfba .RowStride ;
};};case PixNotSrcOrDst :if _adag {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{if _edac ==_cabbb {_dcef =_bfba .Data [_cbgfe ]<<_gbedd ;if _agbd {_dcef =_bdaa (_dcef ,_bfba .Data [_cbgfe +1]>>_bacb ,_afebg );};}else {_dcef =_bfba .Data [_cbgfe ]>>_bacb ;};_edeg .Data [_cbbgb ]=_bdaa (_edeg .Data [_cbbgb ],^_dcef |_edeg .Data [_cbbgb ],_fdcfag );
_cbbgb +=_edeg .RowStride ;_cbgfe +=_bfba .RowStride ;};};if _dbab {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{for _bdda =0;_bdda < _gcdfb ;_bdda ++{_dcef =_bdaa (_bfba .Data [_ecge +_bdda ]<<_gbedd ,_bfba .Data [_ecge +_bdda +1]>>_bacb ,_afebg );_edeg .Data [_fggc +_bdda ]|=^_dcef ;
};_fggc +=_edeg .RowStride ;_ecge +=_bfba .RowStride ;};};if _effbb {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{_dcef =_bfba .Data [_eagaa ]<<_gbedd ;if _bage {_dcef =_bdaa (_dcef ,_bfba .Data [_eagaa +1]>>_bacb ,_afebg );};_edeg .Data [_ffbf ]=_bdaa (_edeg .Data [_ffbf ],^_dcef |_edeg .Data [_ffbf ],_fceg );
_ffbf +=_edeg .RowStride ;_eagaa +=_bfba .RowStride ;};};case PixNotSrcAndDst :if _adag {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{if _edac ==_cabbb {_dcef =_bfba .Data [_cbgfe ]<<_gbedd ;if _agbd {_dcef =_bdaa (_dcef ,_bfba .Data [_cbgfe +1]>>_bacb ,_afebg );
};}else {_dcef =_bfba .Data [_cbgfe ]>>_bacb ;};_edeg .Data [_cbbgb ]=_bdaa (_edeg .Data [_cbbgb ],^_dcef &_edeg .Data [_cbbgb ],_fdcfag );_cbbgb +=_edeg .RowStride ;_cbgfe +=_bfba .RowStride ;};};if _dbab {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{for _bdda =0;
_bdda < _gcdfb ;_bdda ++{_dcef =_bdaa (_bfba .Data [_ecge +_bdda ]<<_gbedd ,_bfba .Data [_ecge +_bdda +1]>>_bacb ,_afebg );_edeg .Data [_fggc +_bdda ]&=^_dcef ;};_fggc +=_edeg .RowStride ;_ecge +=_bfba .RowStride ;};};if _effbb {for _cgeb =0;_cgeb < _dcbb ;
_cgeb ++{_dcef =_bfba .Data [_eagaa ]<<_gbedd ;if _bage {_dcef =_bdaa (_dcef ,_bfba .Data [_eagaa +1]>>_bacb ,_afebg );};_edeg .Data [_ffbf ]=_bdaa (_edeg .Data [_ffbf ],^_dcef &_edeg .Data [_ffbf ],_fceg );_ffbf +=_edeg .RowStride ;_eagaa +=_bfba .RowStride ;
};};case PixSrcOrNotDst :if _adag {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{if _edac ==_cabbb {_dcef =_bfba .Data [_cbgfe ]<<_gbedd ;if _agbd {_dcef =_bdaa (_dcef ,_bfba .Data [_cbgfe +1]>>_bacb ,_afebg );};}else {_dcef =_bfba .Data [_cbgfe ]>>_bacb ;};_edeg .Data [_cbbgb ]=_bdaa (_edeg .Data [_cbbgb ],_dcef |^_edeg .Data [_cbbgb ],_fdcfag );
_cbbgb +=_edeg .RowStride ;_cbgfe +=_bfba .RowStride ;};};if _dbab {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{for _bdda =0;_bdda < _gcdfb ;_bdda ++{_dcef =_bdaa (_bfba .Data [_ecge +_bdda ]<<_gbedd ,_bfba .Data [_ecge +_bdda +1]>>_bacb ,_afebg );_edeg .Data [_fggc +_bdda ]=_dcef |^_edeg .Data [_fggc +_bdda ];
};_fggc +=_edeg .RowStride ;_ecge +=_bfba .RowStride ;};};if _effbb {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{_dcef =_bfba .Data [_eagaa ]<<_gbedd ;if _bage {_dcef =_bdaa (_dcef ,_bfba .Data [_eagaa +1]>>_bacb ,_afebg );};_edeg .Data [_ffbf ]=_bdaa (_edeg .Data [_ffbf ],_dcef |^_edeg .Data [_ffbf ],_fceg );
_ffbf +=_edeg .RowStride ;_eagaa +=_bfba .RowStride ;};};case PixSrcAndNotDst :if _adag {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{if _edac ==_cabbb {_dcef =_bfba .Data [_cbgfe ]<<_gbedd ;if _agbd {_dcef =_bdaa (_dcef ,_bfba .Data [_cbgfe +1]>>_bacb ,_afebg );
};}else {_dcef =_bfba .Data [_cbgfe ]>>_bacb ;};_edeg .Data [_cbbgb ]=_bdaa (_edeg .Data [_cbbgb ],_dcef &^_edeg .Data [_cbbgb ],_fdcfag );_cbbgb +=_edeg .RowStride ;_cbgfe +=_bfba .RowStride ;};};if _dbab {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{for _bdda =0;
_bdda < _gcdfb ;_bdda ++{_dcef =_bdaa (_bfba .Data [_ecge +_bdda ]<<_gbedd ,_bfba .Data [_ecge +_bdda +1]>>_bacb ,_afebg );_edeg .Data [_fggc +_bdda ]=_dcef &^_edeg .Data [_fggc +_bdda ];};_fggc +=_edeg .RowStride ;_ecge +=_bfba .RowStride ;};};if _effbb {for _cgeb =0;
_cgeb < _dcbb ;_cgeb ++{_dcef =_bfba .Data [_eagaa ]<<_gbedd ;if _bage {_dcef =_bdaa (_dcef ,_bfba .Data [_eagaa +1]>>_bacb ,_afebg );};_edeg .Data [_ffbf ]=_bdaa (_edeg .Data [_ffbf ],_dcef &^_edeg .Data [_ffbf ],_fceg );_ffbf +=_edeg .RowStride ;_eagaa +=_bfba .RowStride ;
};};case PixNotPixSrcOrDst :if _adag {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{if _edac ==_cabbb {_dcef =_bfba .Data [_cbgfe ]<<_gbedd ;if _agbd {_dcef =_bdaa (_dcef ,_bfba .Data [_cbgfe +1]>>_bacb ,_afebg );};}else {_dcef =_bfba .Data [_cbgfe ]>>_bacb ;};
_edeg .Data [_cbbgb ]=_bdaa (_edeg .Data [_cbbgb ],^(_dcef |_edeg .Data [_cbbgb ]),_fdcfag );_cbbgb +=_edeg .RowStride ;_cbgfe +=_bfba .RowStride ;};};if _dbab {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{for _bdda =0;_bdda < _gcdfb ;_bdda ++{_dcef =_bdaa (_bfba .Data [_ecge +_bdda ]<<_gbedd ,_bfba .Data [_ecge +_bdda +1]>>_bacb ,_afebg );
_edeg .Data [_fggc +_bdda ]=^(_dcef |_edeg .Data [_fggc +_bdda ]);};_fggc +=_edeg .RowStride ;_ecge +=_bfba .RowStride ;};};if _effbb {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{_dcef =_bfba .Data [_eagaa ]<<_gbedd ;if _bage {_dcef =_bdaa (_dcef ,_bfba .Data [_eagaa +1]>>_bacb ,_afebg );
};_edeg .Data [_ffbf ]=_bdaa (_edeg .Data [_ffbf ],^(_dcef |_edeg .Data [_ffbf ]),_fceg );_ffbf +=_edeg .RowStride ;_eagaa +=_bfba .RowStride ;};};case PixNotPixSrcAndDst :if _adag {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{if _edac ==_cabbb {_dcef =_bfba .Data [_cbgfe ]<<_gbedd ;
if _agbd {_dcef =_bdaa (_dcef ,_bfba .Data [_cbgfe +1]>>_bacb ,_afebg );};}else {_dcef =_bfba .Data [_cbgfe ]>>_bacb ;};_edeg .Data [_cbbgb ]=_bdaa (_edeg .Data [_cbbgb ],^(_dcef &_edeg .Data [_cbbgb ]),_fdcfag );_cbbgb +=_edeg .RowStride ;_cbgfe +=_bfba .RowStride ;
};};if _dbab {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{for _bdda =0;_bdda < _gcdfb ;_bdda ++{_dcef =_bdaa (_bfba .Data [_ecge +_bdda ]<<_gbedd ,_bfba .Data [_ecge +_bdda +1]>>_bacb ,_afebg );_edeg .Data [_fggc +_bdda ]=^(_dcef &_edeg .Data [_fggc +_bdda ]);
};_fggc +=_edeg .RowStride ;_ecge +=_bfba .RowStride ;};};if _effbb {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{_dcef =_bfba .Data [_eagaa ]<<_gbedd ;if _bage {_dcef =_bdaa (_dcef ,_bfba .Data [_eagaa +1]>>_bacb ,_afebg );};_edeg .Data [_ffbf ]=_bdaa (_edeg .Data [_ffbf ],^(_dcef &_edeg .Data [_ffbf ]),_fceg );
_ffbf +=_edeg .RowStride ;_eagaa +=_bfba .RowStride ;};};case PixNotPixSrcXorDst :if _adag {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{if _edac ==_cabbb {_dcef =_bfba .Data [_cbgfe ]<<_gbedd ;if _agbd {_dcef =_bdaa (_dcef ,_bfba .Data [_cbgfe +1]>>_bacb ,_afebg );
};}else {_dcef =_bfba .Data [_cbgfe ]>>_bacb ;};_edeg .Data [_cbbgb ]=_bdaa (_edeg .Data [_cbbgb ],^(_dcef ^_edeg .Data [_cbbgb ]),_fdcfag );_cbbgb +=_edeg .RowStride ;_cbgfe +=_bfba .RowStride ;};};if _dbab {for _cgeb =0;_cgeb < _dcbb ;_cgeb ++{for _bdda =0;
_bdda < _gcdfb ;_bdda ++{_dcef =_bdaa (_bfba .Data [_ecge +_bdda ]<<_gbedd ,_bfba .Data [_ecge +_bdda +1]>>_bacb ,_afebg );_edeg .Data [_fggc +_bdda ]=^(_dcef ^_edeg .Data [_fggc +_bdda ]);};_fggc +=_edeg .RowStride ;_ecge +=_bfba .RowStride ;};};if _effbb {for _cgeb =0;
_cgeb < _dcbb ;_cgeb ++{_dcef =_bfba .Data [_eagaa ]<<_gbedd ;if _bage {_dcef =_bdaa (_dcef ,_bfba .Data [_eagaa +1]>>_bacb ,_afebg );};_edeg .Data [_ffbf ]=_bdaa (_edeg .Data [_ffbf ],^(_dcef ^_edeg .Data [_ffbf ]),_fceg );_ffbf +=_edeg .RowStride ;_eagaa +=_bfba .RowStride ;
};};default:_a .Log .Debug ("\u004f\u0070e\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006e\u006f\u0074\u0020\u0070\u0065\u0072\u006d\u0069tt\u0065\u0064",_fdcfa );return _f .Error ("\u0072a\u0073t\u0065\u0072\u004f\u0070\u0047e\u006e\u0065r\u0061\u006c\u004c\u006f\u0077","\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065r\u0061\u0074\u0069\u006f\u006e\u0020\u006eo\u0074\u0020\u0070\u0065\u0072\u006d\u0069\u0074\u0074\u0065\u0064");
};return nil ;};func (_ddae *Bitmaps )Size ()int {return len (_ddae .Values )};func (_cace *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _cgad ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";
if _dbad :=_cace .validateIntSlice ();_dbad !=nil {return nil ,_f .Wrap (_dbad ,_cgad ,"");};if _cace .IntSlice .Size ()==0{return nil ,_f .Error (_cgad ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");
};_cace .SortByY ();var (_gecd []*ClassedPoints ;_bcff int ;);_gbba :=-1;var _bdcd *ClassedPoints ;for _ecggd :=0;_ecggd < len (_cace .IntSlice );_ecggd ++{_bcff =int (_cace .YAtIndex (_ecggd ));if _bcff !=_gbba {_bdcd =&ClassedPoints {Points :_cace .Points };
_gbba =_bcff ;_gecd =append (_gecd ,_bdcd );};_bdcd .IntSlice =append (_bdcd .IntSlice ,_cace .IntSlice [_ecggd ]);};for _ ,_ffaa :=range _gecd {_ffaa .SortByX ();};return _gecd ,nil ;};func (_gdfg *Bitmap )connComponentsBitmapsBB (_abdaa *Bitmaps ,_cfag int )(_dfdc *Boxes ,_fedcd error ){const _gbad ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";
if _cfag !=4&&_cfag !=8{return nil ,_f .Error (_gbad ,"\u0063\u006f\u006e\u006e\u0065\u0063t\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u0061\u0020\u0027\u0034\u0027\u0020\u006fr\u0020\u0027\u0038\u0027");};if _abdaa ==nil {return nil ,_f .Error (_gbad ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
};if len (_abdaa .Values )> 0{return nil ,_f .Error (_gbad ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u006fn\u002d\u0065\u006d\u0070\u0074\u0079\u0020\u0042\u0069\u0074m\u0061\u0070\u0073");};if _gdfg .Zero (){return &Boxes {},nil ;
};var (_acb ,_cdgd ,_decf ,_acbb *Bitmap ;);_gdfg .setPadBits (0);if _acb ,_fedcd =_dgbfd (nil ,_gdfg );_fedcd !=nil {return nil ,_f .Wrap (_fedcd ,_gbad ,"\u0062\u006d\u0031");};if _cdgd ,_fedcd =_dgbfd (nil ,_gdfg );_fedcd !=nil {return nil ,_f .Wrap (_fedcd ,_gbad ,"\u0062\u006d\u0032");
};_ffda :=&_e .Stack {};_ffda .Aux =&_e .Stack {};_dfdc =&Boxes {};var (_bgbd ,_baef int ;_gdce _bg .Point ;_fga bool ;_dfcb *_bg .Rectangle ;);for {if _gdce ,_fga ,_fedcd =_acb .nextOnPixel (_bgbd ,_baef );_fedcd !=nil {return nil ,_f .Wrap (_fedcd ,_gbad ,"");
};if !_fga {break ;};if _dfcb ,_fedcd =_dfbg (_acb ,_ffda ,_gdce .X ,_gdce .Y ,_cfag );_fedcd !=nil {return nil ,_f .Wrap (_fedcd ,_gbad ,"");};if _fedcd =_dfdc .Add (_dfcb );_fedcd !=nil {return nil ,_f .Wrap (_fedcd ,_gbad ,"");};if _decf ,_fedcd =_acb .clipRectangle (_dfcb ,nil );
_fedcd !=nil {return nil ,_f .Wrap (_fedcd ,_gbad ,"\u0062\u006d\u0033");};if _acbb ,_fedcd =_cdgd .clipRectangle (_dfcb ,nil );_fedcd !=nil {return nil ,_f .Wrap (_fedcd ,_gbad ,"\u0062\u006d\u0034");};if _ ,_fedcd =_ddeb (_decf ,_decf ,_acbb );_fedcd !=nil {return nil ,_f .Wrap (_fedcd ,_gbad ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");
};if _fedcd =_cdgd .RasterOperation (_dfcb .Min .X ,_dfcb .Min .Y ,_dfcb .Dx (),_dfcb .Dy (),PixSrcXorDst ,_decf ,0,0);_fedcd !=nil {return nil ,_f .Wrap (_fedcd ,_gbad ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");
};_abdaa .AddBitmap (_decf );_bgbd =_gdce .X ;_baef =_gdce .Y ;};_abdaa .Boxes =*_dfdc ;return _dfdc ,nil ;};func (_effd *Bitmap )SetDefaultPixel (){for _fac :=range _effd .Data {_effd .Data [_fac ]=byte (0xff);};};func (_dgee *ClassedPoints )ySortFunction ()func (_cgbfb int ,_abgf int )bool {return func (_abadd ,_ffac int )bool {return _dgee .YAtIndex (_abadd )< _dgee .YAtIndex (_ffac )};
};func (_abbc *Boxes )selectWithIndicator (_aeca *_e .NumSlice )(_aggf *Boxes ,_gfb error ){const _bcfb ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _abbc ==nil {return nil ,_f .Error (_bcfb ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");
};if _aeca ==nil {return nil ,_f .Error (_bcfb ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_aeca )!=len (*_abbc ){return nil ,_f .Error (_bcfb ,"\u0062\u006f\u0078\u0065\u0073\u0020\u0027\u0062\u0027\u0020\u0068\u0061\u0073\u0020\u0064\u0069\u0066\u0066\u0065\u0072\u0065\u006e\u0074\u0020s\u0069\u007a\u0065\u0020\u0074h\u0061\u006e \u0027\u006e\u0061\u0027");
};var _fag ,_agee int ;for _ebag :=0;_ebag < len (*_aeca );_ebag ++{if _fag ,_gfb =_aeca .GetInt (_ebag );_gfb !=nil {return nil ,_f .Wrap (_gfb ,_bcfb ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _fag ==1{_agee ++;
};};if _agee ==len (*_abbc ){return _abbc ,nil ;};_ddce :=Boxes {};for _egdg :=0;_egdg < len (*_aeca );_egdg ++{_fag =int ((*_aeca )[_egdg ]);if _fag ==0{continue ;};_ddce =append (_ddce ,(*_abbc )[_egdg ]);};_aggf =&_ddce ;return _aggf ,nil ;};func (_bbcd *ClassedPoints )YAtIndex (i int )float32 {return (*_bbcd .Points )[_bbcd .IntSlice [i ]].Y };
func (_bbfed CombinationOperator )String ()string {var _daef string ;switch _bbfed {case CmbOpOr :_daef ="\u004f\u0052";case CmbOpAnd :_daef ="\u0041\u004e\u0044";case CmbOpXor :_daef ="\u0058\u004f\u0052";case CmbOpXNor :_daef ="\u0058\u004e\u004f\u0052";
case CmbOpReplace :_daef ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_daef ="\u004e\u004f\u0054";};return _daef ;};func TstASymbol (t *_bd .T )*Bitmap {t .Helper ();_acbe :=New (6,6);_b .NoError (t ,_acbe .SetPixel (1,0,1));_b .NoError (t ,_acbe .SetPixel (2,0,1));
_b .NoError (t ,_acbe .SetPixel (3,0,1));_b .NoError (t ,_acbe .SetPixel (4,0,1));_b .NoError (t ,_acbe .SetPixel (5,1,1));_b .NoError (t ,_acbe .SetPixel (1,2,1));_b .NoError (t ,_acbe .SetPixel (2,2,1));_b .NoError (t ,_acbe .SetPixel (3,2,1));_b .NoError (t ,_acbe .SetPixel (4,2,1));
_b .NoError (t ,_acbe .SetPixel (5,2,1));_b .NoError (t ,_acbe .SetPixel (0,3,1));_b .NoError (t ,_acbe .SetPixel (5,3,1));_b .NoError (t ,_acbe .SetPixel (0,4,1));_b .NoError (t ,_acbe .SetPixel (5,4,1));_b .NoError (t ,_acbe .SetPixel (1,5,1));_b .NoError (t ,_acbe .SetPixel (2,5,1));
_b .NoError (t ,_acbe .SetPixel (3,5,1));_b .NoError (t ,_acbe .SetPixel (4,5,1));_b .NoError (t ,_acbe .SetPixel (5,5,1));return _acbe ;};const _gaab =5000;type Color int ;func TstESymbol (t *_bd .T ,scale ...int )*Bitmap {_ebff ,_fabf :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});
_b .NoError (t ,_fabf );return TstGetScaledSymbol (t ,_ebff ,scale ...);};func (_gdgf *Bitmap )ClipRectangle (box *_bg .Rectangle )(_adb *Bitmap ,_ecc *_bg .Rectangle ,_edfa error ){const _ebfgg ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,nil ,_f .Error (_ebfgg ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_afg ,_aeae :=_gdgf .Width ,_gdgf .Height ;_afb :=_bg .Rect (0,0,_afg ,_aeae );if !box .Overlaps (_afb ){return nil ,nil ,_f .Error (_ebfgg ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");
};_cdba :=box .Intersect (_afb );_eae ,_fbcb :=_cdba .Min .X ,_cdba .Min .Y ;_cac ,_ebed :=_cdba .Dx (),_cdba .Dy ();_adb =New (_cac ,_ebed );_adb .Text =_gdgf .Text ;if _edfa =_adb .RasterOperation (0,0,_cac ,_ebed ,PixSrc ,_gdgf ,_eae ,_fbcb );_edfa !=nil {return nil ,nil ,_f .Wrap (_edfa ,_ebfgg ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
};_ecc =&_cdba ;return _adb ,_ecc ,nil ;};func _aedb (_fca ,_acc *Bitmap ,_dgd int ,_fea []byte ,_gbb int )(_cgdg error ){const _dacb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";
var (_deea ,_eac ,_gef ,_bfad ,_dddc ,_agag ,_ebfg ,_egg int ;_afa ,_gee uint32 ;_adf ,_gfe byte ;_baed uint16 ;);_edef :=make ([]byte ,4);_fee :=make ([]byte ,4);for _gef =0;_gef < _fca .Height -1;_gef ,_bfad =_gef +2,_bfad +1{_deea =_gef *_fca .RowStride ;
_eac =_bfad *_acc .RowStride ;for _dddc ,_agag =0,0;_dddc < _gbb ;_dddc ,_agag =_dddc +4,_agag +1{for _ebfg =0;_ebfg < 4;_ebfg ++{_egg =_deea +_dddc +_ebfg ;if _egg <=len (_fca .Data )-1&&_egg < _deea +_fca .RowStride {_edef [_ebfg ]=_fca .Data [_egg ];
}else {_edef [_ebfg ]=0x00;};_egg =_deea +_fca .RowStride +_dddc +_ebfg ;if _egg <=len (_fca .Data )-1&&_egg < _deea +(2*_fca .RowStride ){_fee [_ebfg ]=_fca .Data [_egg ];}else {_fee [_ebfg ]=0x00;};};_afa =_db .BigEndian .Uint32 (_edef );_gee =_db .BigEndian .Uint32 (_fee );
_gee &=_afa ;_gee &=_gee <<1;_gee &=0xaaaaaaaa;_afa =_gee |(_gee <<7);_adf =byte (_afa >>24);_gfe =byte ((_afa >>8)&0xff);_egg =_eac +_agag ;if _egg +1==len (_acc .Data )-1||_egg +1>=_eac +_acc .RowStride {_acc .Data [_egg ]=_fea [_adf ];if _cgdg =_acc .SetByte (_egg ,_fea [_adf ]);
_cgdg !=nil {return _f .Wrapf (_cgdg ,_dacb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_egg );};}else {_baed =(uint16 (_fea [_adf ])<<8)|uint16 (_fea [_gfe ]);if _cgdg =_acc .setTwoBytes (_egg ,_baed );_cgdg !=nil {return _f .Wrapf (_cgdg ,_dacb ,"s\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0077\u006f\u0020\u0062\u0079t\u0065\u0073\u0020\u0066\u0061\u0069\u006ce\u0064\u002c\u0020\u0069\u006e\u0064\u0065\u0078\u003a\u0020%\u0064",_egg );
};_agag ++;};};};return nil ;};type LocationFilter int ;func ClipBoxToRectangle (box *_bg .Rectangle ,wi ,hi int )(_fcff *_bg .Rectangle ,_fagf error ){const _eeaf ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,_f .Error (_eeaf ,"\u0027\u0062\u006f\u0078\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if box .Min .X >=wi ||box .Min .Y >=hi ||box .Max .X <=0||box .Max .Y <=0{return nil ,_f .Error (_eeaf ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");
};_aab :=*box ;_fcff =&_aab ;if _fcff .Min .X < 0{_fcff .Max .X +=_fcff .Min .X ;_fcff .Min .X =0;};if _fcff .Min .Y < 0{_fcff .Max .Y +=_fcff .Min .Y ;_fcff .Min .Y =0;};if _fcff .Max .X > wi {_fcff .Max .X =wi ;};if _fcff .Max .Y > hi {_fcff .Max .Y =hi ;
};return _fcff ,nil ;};func (_dccdb *Bitmap )setFourBytes (_bade int ,_eebb uint32 )error {if _bade +3> len (_dccdb .Data )-1{return _f .Errorf ("\u0073\u0065\u0074F\u006f\u0075\u0072\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_bade );
};_dccdb .Data [_bade ]=byte ((_eebb &0xff000000)>>24);_dccdb .Data [_bade +1]=byte ((_eebb &0xff0000)>>16);_dccdb .Data [_bade +2]=byte ((_eebb &0xff00)>>8);_dccdb .Data [_bade +3]=byte (_eebb &0xff);return nil ;};func _afbd (_aefdf ,_accf ,_dcgf *Bitmap ,_fgb int )(*Bitmap ,error ){const _eggaa ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";
if _accf ==nil {return nil ,_f .Error (_eggaa ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _dcgf ==nil {return nil ,_f .Error (_eggaa ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _fgb !=4&&_fgb !=8{return nil ,_f .Error (_eggaa ,"\u0063\u006f\u006en\u0065\u0063\u0074\u0069v\u0069\u0074\u0079\u0020\u006e\u006f\u0074 \u0069\u006e\u0020\u0072\u0061\u006e\u0067\u0065\u0020\u007b\u0034\u002c\u0038\u007d");};var _bgeg error ;_aefdf ,_bgeg =_dgbfd (_aefdf ,_accf );
if _bgeg !=nil {return nil ,_f .Wrap (_bgeg ,_eggaa ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_bedc :=_accf .createTemplate ();_dcgf .setPadBits (0);for _daeg :=0;_daeg < _gaab ;_daeg ++{_bedc ,_bgeg =_dgbfd (_bedc ,_aefdf );
if _bgeg !=nil {return nil ,_f .Wrapf (_bgeg ,_eggaa ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_daeg );};if _bgeg =_debe (_aefdf ,_dcgf ,_fgb );_bgeg !=nil {return nil ,_f .Wrapf (_bgeg ,_eggaa ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_daeg );
};if _bedc .Equals (_aefdf ){break ;};};return _aefdf ,nil ;};func (_ecdda *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _eafcc ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";
_fadfc ,_bggdf :=_ecdda .selectByIndexes (idx );if _bggdf !=nil {return nil ,_f .Wrap (_bggdf ,_eafcc ,"");};return _fadfc ,nil ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _dgbfd (d ,s )};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;
CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func _agc (_ef ,_agg *Bitmap )(_cea error ){const _eg ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_dde :=_agg .RowStride ;_g :=_ef .RowStride ;_ae :=_agg .RowStride *4-_ef .RowStride ;
var (_df ,_dg byte ;_gd uint32 ;_dae ,_dcc ,_cgd ,_egb ,_ba ,_dbd ,_fge int ;);for _cgd =0;_cgd < _agg .Height ;_cgd ++{_dae =_cgd *_dde ;_dcc =4*_cgd *_g ;for _egb =0;_egb < _dde ;_egb ++{_df =_agg .Data [_dae +_egb ];_gd =_fgdf [_df ];_dbd =_dcc +_egb *4;
if _ae !=0&&(_egb +1)*4> _ef .RowStride {for _ba =_ae ;_ba > 0;_ba --{_dg =byte ((_gd >>uint (_ba *8))&0xff);_fge =_dbd +(_ae -_ba );if _cea =_ef .SetByte (_fge ,_dg );_cea !=nil {return _f .Wrapf (_cea ,_eg ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_ba );
};};}else if _cea =_ef .setFourBytes (_dbd ,_gd );_cea !=nil {return _f .Wrap (_cea ,_eg ,"");};if _cea =_ef .setFourBytes (_dcc +_egb *4,_fgdf [_agg .Data [_dae +_egb ]]);_cea !=nil {return _f .Wrap (_cea ,_eg ,"");};};for _ba =1;_ba < 4;_ba ++{for _egb =0;
_egb < _g ;_egb ++{if _cea =_ef .SetByte (_dcc +_ba *_g +_egb ,_ef .Data [_dcc +_egb ]);_cea !=nil {return _f .Wrapf (_cea ,_eg ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0071\u0075\u0061\u0064\u0072\u0061\u0062l\u0065\u0027\u0020\u006c\u0069\u006ee\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0062\u0079\u0074\u0065\u003a \u0027\u0025\u0064\u0027",_ba ,_egb );
};};};};return nil ;};func _debe (_bgad *Bitmap ,_fgac *Bitmap ,_eead int )(_fdff error ){const _bgfgc ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_abgg :=_gacf (_bgad .Height ,_fgac .Height );_edab :=_gacf (_bgad .RowStride ,_fgac .RowStride );
switch _eead {case 4:_fdff =_aaca (_bgad ,_fgac ,_abgg ,_edab );case 8:_fdff =_eadc (_bgad ,_fgac ,_abgg ,_edab );default:return _f .Errorf (_bgfgc ,"\u0063\u006f\u006e\u006e\u0065\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0034\u0020\u006fr\u0020\u0038\u0020\u002d\u0020i\u0073\u003a \u0027\u0025\u0064\u0027",_eead );
};if _fdff !=nil {return _f .Wrap (_fdff ,_bgfgc ,"");};return nil ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_fgcf bool ,_gbdb error ){const _eeegd ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
_dbaa ,_fcb :=p1 .Width ,p1 .Height ;_cgbb ,_gaec :=p3 .Width ,p3 .Height ;if _e .Abs (_dbaa -_cgbb )> maxDiffW {return false ,nil ;};if _e .Abs (_fcb -_gaec )> maxDiffH {return false ,nil ;};_cecg :=int (float32 (area1 )*(1.0-rank )+0.5);_dcec :=int (float32 (area3 )*(1.0-rank )+0.5);
var _baag ,_afaeb int ;if delX >=0{_baag =int (delX +0.5);}else {_baag =int (delX -0.5);};if delY >=0{_afaeb =int (delY +0.5);}else {_afaeb =int (delY -0.5);};_bffc :=p1 .CreateTemplate ();if _gbdb =_bffc .RasterOperation (0,0,_dbaa ,_fcb ,PixSrc ,p1 ,0,0);
_gbdb !=nil {return false ,_f .Wrap (_gbdb ,_eeegd ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _gbdb =_bffc .RasterOperation (_baag ,_afaeb ,_dbaa ,_fcb ,PixNotSrcAndDst ,p4 ,0,0);_gbdb !=nil {return false ,_f .Wrap (_gbdb ,_eeegd ,"\u0074 \u0026\u0020\u0021\u0070\u0034");
};_fgcf ,_gbdb =_bffc .ThresholdPixelSum (_cecg ,tab8 );if _gbdb !=nil {return false ,_f .Wrap (_gbdb ,_eeegd ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _fgcf {return false ,nil ;};if _gbdb =_bffc .RasterOperation (_baag ,_afaeb ,_cgbb ,_gaec ,PixSrc ,p3 ,0,0);
_gbdb !=nil {return false ,_f .Wrap (_gbdb ,_eeegd ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _gbdb =_bffc .RasterOperation (0,0,_cgbb ,_gaec ,PixNotSrcAndDst ,p2 ,0,0);_gbdb !=nil {return false ,_f .Wrap (_gbdb ,_eeegd ,"\u0074 \u0026\u0020\u0021\u0070\u0032");
};_fgcf ,_gbdb =_bffc .ThresholdPixelSum (_dcec ,tab8 );if _gbdb !=nil {return false ,_f .Wrap (_gbdb ,_eeegd ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_fgcf ,nil ;};func _eadc (_cfega ,_bfdf *Bitmap ,_cgff ,_aafg int )(_fdeab error ){const _afbc ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";
var (_baeag ,_afga ,_gcbf ,_afea int ;_bcca ,_dage ,_geafc ,_dgffg ,_bfbde ,_facd ,_bdfge ,_gbfc byte ;);for _baeag =0;_baeag < _cgff ;_baeag ++{_gcbf =_baeag *_cfega .RowStride ;_afea =_baeag *_bfdf .RowStride ;for _afga =0;_afga < _aafg ;_afga ++{if _bcca ,_fdeab =_cfega .GetByte (_gcbf +_afga );
_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _dage ,_fdeab =_bfdf .GetByte (_afea +_afga );_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");
};if _baeag > 0{if _geafc ,_fdeab =_cfega .GetByte (_gcbf -_cfega .RowStride +_afga );_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_bcca |=_geafc |(_geafc <<1)|(_geafc >>1);if _afga > 0{if _gbfc ,_fdeab =_cfega .GetByte (_gcbf -_cfega .RowStride +_afga -1);
_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_bcca |=_gbfc <<7;};if _afga < _aafg -1{if _gbfc ,_fdeab =_cfega .GetByte (_gcbf -_cfega .RowStride +_afga +1);
_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_bcca |=_gbfc >>7;};};if _afga > 0{if _dgffg ,_fdeab =_cfega .GetByte (_gcbf +_afga -1);_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"\u006a\u0020\u003e \u0030");
};_bcca |=_dgffg <<7;};_bcca &=_dage ;if _bcca ==0||^_bcca ==0{if _fdeab =_cfega .SetByte (_gcbf +_afga ,_bcca );_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};
};for {_bdfge =_bcca ;_bcca =(_bcca |(_bcca >>1)|(_bcca <<1))&_dage ;if (_bcca ^_bdfge )==0{if _fdeab =_cfega .SetByte (_gcbf +_afga ,_bcca );_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
};break ;};};};};for _baeag =_cgff -1;_baeag >=0;_baeag --{_gcbf =_baeag *_cfega .RowStride ;_afea =_baeag *_bfdf .RowStride ;for _afga =_aafg -1;_afga >=0;_afga --{if _bcca ,_fdeab =_cfega .GetByte (_gcbf +_afga );_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _dage ,_fdeab =_bfdf .GetByte (_afea +_afga );_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _baeag < _cgff -1{if _bfbde ,_fdeab =_cfega .GetByte (_gcbf +_cfega .RowStride +_afga );
_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_bcca |=_bfbde |(_bfbde <<1)|_bfbde >>1;if _afga > 0{if _gbfc ,_fdeab =_cfega .GetByte (_gcbf +_cfega .RowStride +_afga -1);
_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"\u0069\u0020\u003c h\u002d\u0031\u0020\u0026\u0020\u006a\u0020\u003e\u00200\u0020-\u003e \u0067e\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};_bcca |=_gbfc <<7;};if _afga < _aafg -1{if _gbfc ,_fdeab =_cfega .GetByte (_gcbf +_cfega .RowStride +_afga +1);
_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"\u0069\u0020\u003c\u0020\u0068\u002d\u0031\u0020\u0026\u0026\u0020\u006a\u0020\u003c\u0077\u0070\u006c\u002d\u0031\u0020\u002d\u003e\u0020\u0067e\u0074\u0020\u0073\u006f\u0075r\u0063\u0065 \u0062\u0079\u0074\u0065");
};_bcca |=_gbfc >>7;};};if _afga < _aafg -1{if _facd ,_fdeab =_cfega .GetByte (_gcbf +_afga +1);_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"\u006a\u0020<\u0020\u0077\u0070\u006c\u0020\u002d\u0031\u0020\u002d\u003e\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020by\u0074\u0065");
};_bcca |=_facd >>7;};_bcca &=_dage ;if _bcca ==0||(^_bcca )==0{if _fdeab =_cfega .SetByte (_gcbf +_afga ,_bcca );_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_bdfge =_bcca ;
_bcca =(_bcca |(_bcca >>1)|(_bcca <<1))&_dage ;if (_bcca ^_bdfge )==0{if _fdeab =_cfega .SetByte (_gcbf +_afga ,_bcca );_fdeab !=nil {return _f .Wrap (_fdeab ,_afbc ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
};break ;};};};};return nil ;};func _gccb ()[]int {_gddd :=make ([]int ,256);_gddd [0]=0;_gddd [1]=7;var _cbfa int ;for _cbfa =2;_cbfa < 4;_cbfa ++{_gddd [_cbfa ]=_gddd [_cbfa -2]+6;};for _cbfa =4;_cbfa < 8;_cbfa ++{_gddd [_cbfa ]=_gddd [_cbfa -4]+5;};
for _cbfa =8;_cbfa < 16;_cbfa ++{_gddd [_cbfa ]=_gddd [_cbfa -8]+4;};for _cbfa =16;_cbfa < 32;_cbfa ++{_gddd [_cbfa ]=_gddd [_cbfa -16]+3;};for _cbfa =32;_cbfa < 64;_cbfa ++{_gddd [_cbfa ]=_gddd [_cbfa -32]+2;};for _cbfa =64;_cbfa < 128;_cbfa ++{_gddd [_cbfa ]=_gddd [_cbfa -64]+1;
};for _cbfa =128;_cbfa < 256;_cbfa ++{_gddd [_cbfa ]=_gddd [_cbfa -128];};return _gddd ;};func (_cgggcgg *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _fage ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";if len (_cgggcgg .Values )==0{return nil ,_f .Error (_fage ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
};_fffg :=&BitmapsArray {};_cgggcgg .SortByWidth ();_ggafa :=-1;_gfcc :=-1;for _eebdc :=0;_eebdc < len (_cgggcgg .Values );_eebdc ++{_edffd :=_cgggcgg .Values [_eebdc ].Width ;if _edffd > _ggafa {_ggafa =_edffd ;_gfcc ++;_fffg .Values =append (_fffg .Values ,&Bitmaps {});
};_fffg .Values [_gfcc ].AddBitmap (_cgggcgg .Values [_eebdc ]);};return _fffg ,nil ;};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func _beacd (_fagc *Bitmap ,_aag int )(*Bitmap ,error ){const _gcdf ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";
if _fagc ==nil {return nil ,_f .Error (_gcdf ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _aag <=0{return nil ,_f .Error (_gcdf ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");
};if _aag ==1{_abbd ,_eaead :=_dgbfd (nil ,_fagc );if _eaead !=nil {return nil ,_f .Wrap (_eaead ,_gcdf ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _abbd ,nil ;};_cca ,_eegff :=_fda (_fagc ,_aag ,_aag );if _eegff !=nil {return nil ,_f .Wrap (_eegff ,_gcdf ,"");
};return _cca ,nil ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_bg .Rectangle ;};const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);var (_afgbc *Bitmap ;_afgaa *Bitmap ;);func TstImageBitmap ()*Bitmap {return _afgaa .Copy ()};func (_ddbd *Bitmap )thresholdPixelSum (_dbccb int )bool {var (_ebdg int ;
_dfaf uint8 ;_dgae byte ;_dfcdg int ;);_dgfd :=_ddbd .RowStride ;_ebfe :=uint (_ddbd .Width &0x07);if _ebfe !=0{_dfaf =uint8 ((0xff<<(8-_ebfe ))&0xff);_dgfd --;};for _ebca :=0;_ebca < _ddbd .Height ;_ebca ++{for _dfcdg =0;_dfcdg < _dgfd ;_dfcdg ++{_dgae =_ddbd .Data [_ebca *_ddbd .RowStride +_dfcdg ];
_ebdg +=int (_ebe [_dgae ]);};if _ebfe !=0{_dgae =_ddbd .Data [_ebca *_ddbd .RowStride +_dfcdg ]&_dfaf ;_ebdg +=int (_ebe [_dgae ]);};if _ebdg > _dbccb {return true ;};};return false ;};type byHeight Bitmaps ;func (_cbea *Bitmap )String ()string {var _aba ="\u000a";
for _ggfe :=0;_ggfe < _cbea .Height ;_ggfe ++{var _bge string ;for _bab :=0;_bab < _cbea .Width ;_bab ++{_gcfe :=_cbea .GetPixel (_bab ,_ggfe );if _gcfe {_bge +="\u0031";}else {_bge +="\u0030";};};_aba +=_bge +"\u000a";};return _aba ;};func (_ffba *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _ffba .removeBorderGeneral (left ,right ,top ,bot );
};func (_afeba *Selection )findMaxTranslations ()(_dfac ,_ffeeg ,_gcbb ,_aceg int ){for _cfbaf :=0;_cfbaf < _afeba .Height ;_cfbaf ++{for _cgebg :=0;_cgebg < _afeba .Width ;_cgebg ++{if _afeba .Data [_cfbaf ][_cgebg ]==SelHit {_dfac =_fcd (_dfac ,_afeba .Cx -_cgebg );
_ffeeg =_fcd (_ffeeg ,_afeba .Cy -_cfbaf );_gcbb =_fcd (_gcbb ,_cgebg -_afeba .Cx );_aceg =_fcd (_aceg ,_cfbaf -_afeba .Cy );};};};return _dfac ,_ffeeg ,_gcbb ,_aceg ;};func _ebef (_gbe ,_acg int )*Bitmap {return &Bitmap {Width :_gbe ,Height :_acg ,RowStride :(_gbe +7)>>3};
};func TstFrameBitmapData ()[]byte {return _afgbc .Data };func (_bccc *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_abba *Boxes ,_afeb error ){const _ggdg ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";
if _bccc ==nil {return nil ,_f .Error (_ggdg ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_bccc )==0{return _bccc ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_f .Errorf (_ggdg ,"\u0069\u006e\u0076al\u0069\u0064\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );
};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE :default:return nil ,_f .Errorf (_ggdg ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
};_cfg :=_bccc .makeSizeIndicator (width ,height ,tp ,relation );_acef ,_afeb :=_bccc .selectWithIndicator (_cfg );if _afeb !=nil {return nil ,_f .Wrap (_afeb ,_ggdg ,"");};return _acef ,nil ;};func MakePixelCentroidTab8 ()[]int {return _gccb ()};type ClassedPoints struct{*Points ;
_e .IntSlice ;_fbff func (_dgdb ,_eedec int )bool ;};func (_geea *Selection )setOrigin (_decb ,_dbge int ){_geea .Cy ,_geea .Cx =_decb ,_dbge };func (_cfd *Bitmap )SetPixel (x ,y int ,pixel byte )error {_fad :=_cfd .GetByteIndex (x ,y );if _fad > len (_cfd .Data )-1{return _f .Errorf ("\u0053\u0065\u0074\u0050\u0069\u0078\u0065\u006c","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",_fad );
};_bba :=_cfd .GetBitOffset (x );_afd :=uint (7-_bba );_efb :=_cfd .Data [_fad ];var _gga byte ;if pixel ==1{_gga =_efb |(pixel &0x01<<_afd );}else {_gga =_efb &^(1<<_afd );};_cfd .Data [_fad ]=_gga ;return nil ;};func (_gdgg *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _gdgg .Copy (),nil ;
};_effg ,_ceae :=_gdgg .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _ceae !=nil {return nil ,_f .Wrap (_ceae ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _effg ,nil ;};func _bbff (_fdccf *Bitmap ,_dcfc ,_dcag ,_ggef ,_abegg int ,_ddecd RasterOperator ,_agbf *Bitmap ,_babe ,_ccbb int )error {var (_cece byte ;
_dgcg int ;_agfe int ;_dfeg ,_fgfb int ;_edfc ,_bffef int ;);_cbfc :=_ggef >>3;_dedd :=_ggef &7;if _dedd > 0{_cece =_fedg [_dedd ];};_dgcg =_agbf .RowStride *_ccbb +(_babe >>3);_agfe =_fdccf .RowStride *_dcag +(_dcfc >>3);switch _ddecd {case PixSrc :for _edfc =0;
_edfc < _abegg ;_edfc ++{_dfeg =_dgcg +_edfc *_agbf .RowStride ;_fgfb =_agfe +_edfc *_fdccf .RowStride ;for _bffef =0;_bffef < _cbfc ;_bffef ++{_fdccf .Data [_fgfb ]=_agbf .Data [_dfeg ];_fgfb ++;_dfeg ++;};if _dedd > 0{_fdccf .Data [_fgfb ]=_bdaa (_fdccf .Data [_fgfb ],_agbf .Data [_dfeg ],_cece );
};};case PixNotSrc :for _edfc =0;_edfc < _abegg ;_edfc ++{_dfeg =_dgcg +_edfc *_agbf .RowStride ;_fgfb =_agfe +_edfc *_fdccf .RowStride ;for _bffef =0;_bffef < _cbfc ;_bffef ++{_fdccf .Data [_fgfb ]=^(_agbf .Data [_dfeg ]);_fgfb ++;_dfeg ++;};if _dedd > 0{_fdccf .Data [_fgfb ]=_bdaa (_fdccf .Data [_fgfb ],^_agbf .Data [_dfeg ],_cece );
};};case PixSrcOrDst :for _edfc =0;_edfc < _abegg ;_edfc ++{_dfeg =_dgcg +_edfc *_agbf .RowStride ;_fgfb =_agfe +_edfc *_fdccf .RowStride ;for _bffef =0;_bffef < _cbfc ;_bffef ++{_fdccf .Data [_fgfb ]|=_agbf .Data [_dfeg ];_fgfb ++;_dfeg ++;};if _dedd > 0{_fdccf .Data [_fgfb ]=_bdaa (_fdccf .Data [_fgfb ],_agbf .Data [_dfeg ]|_fdccf .Data [_fgfb ],_cece );
};};case PixSrcAndDst :for _edfc =0;_edfc < _abegg ;_edfc ++{_dfeg =_dgcg +_edfc *_agbf .RowStride ;_fgfb =_agfe +_edfc *_fdccf .RowStride ;for _bffef =0;_bffef < _cbfc ;_bffef ++{_fdccf .Data [_fgfb ]&=_agbf .Data [_dfeg ];_fgfb ++;_dfeg ++;};if _dedd > 0{_fdccf .Data [_fgfb ]=_bdaa (_fdccf .Data [_fgfb ],_agbf .Data [_dfeg ]&_fdccf .Data [_fgfb ],_cece );
};};case PixSrcXorDst :for _edfc =0;_edfc < _abegg ;_edfc ++{_dfeg =_dgcg +_edfc *_agbf .RowStride ;_fgfb =_agfe +_edfc *_fdccf .RowStride ;for _bffef =0;_bffef < _cbfc ;_bffef ++{_fdccf .Data [_fgfb ]^=_agbf .Data [_dfeg ];_fgfb ++;_dfeg ++;};if _dedd > 0{_fdccf .Data [_fgfb ]=_bdaa (_fdccf .Data [_fgfb ],_agbf .Data [_dfeg ]^_fdccf .Data [_fgfb ],_cece );
};};case PixNotSrcOrDst :for _edfc =0;_edfc < _abegg ;_edfc ++{_dfeg =_dgcg +_edfc *_agbf .RowStride ;_fgfb =_agfe +_edfc *_fdccf .RowStride ;for _bffef =0;_bffef < _cbfc ;_bffef ++{_fdccf .Data [_fgfb ]|=^(_agbf .Data [_dfeg ]);_fgfb ++;_dfeg ++;};if _dedd > 0{_fdccf .Data [_fgfb ]=_bdaa (_fdccf .Data [_fgfb ],^(_agbf .Data [_dfeg ])|_fdccf .Data [_fgfb ],_cece );
};};case PixNotSrcAndDst :for _edfc =0;_edfc < _abegg ;_edfc ++{_dfeg =_dgcg +_edfc *_agbf .RowStride ;_fgfb =_agfe +_edfc *_fdccf .RowStride ;for _bffef =0;_bffef < _cbfc ;_bffef ++{_fdccf .Data [_fgfb ]&=^(_agbf .Data [_dfeg ]);_fgfb ++;_dfeg ++;};if _dedd > 0{_fdccf .Data [_fgfb ]=_bdaa (_fdccf .Data [_fgfb ],^(_agbf .Data [_dfeg ])&_fdccf .Data [_fgfb ],_cece );
};};case PixSrcOrNotDst :for _edfc =0;_edfc < _abegg ;_edfc ++{_dfeg =_dgcg +_edfc *_agbf .RowStride ;_fgfb =_agfe +_edfc *_fdccf .RowStride ;for _bffef =0;_bffef < _cbfc ;_bffef ++{_fdccf .Data [_fgfb ]=_agbf .Data [_dfeg ]|^(_fdccf .Data [_fgfb ]);_fgfb ++;
_dfeg ++;};if _dedd > 0{_fdccf .Data [_fgfb ]=_bdaa (_fdccf .Data [_fgfb ],_agbf .Data [_dfeg ]|^(_fdccf .Data [_fgfb ]),_cece );};};case PixSrcAndNotDst :for _edfc =0;_edfc < _abegg ;_edfc ++{_dfeg =_dgcg +_edfc *_agbf .RowStride ;_fgfb =_agfe +_edfc *_fdccf .RowStride ;
for _bffef =0;_bffef < _cbfc ;_bffef ++{_fdccf .Data [_fgfb ]=_agbf .Data [_dfeg ]&^(_fdccf .Data [_fgfb ]);_fgfb ++;_dfeg ++;};if _dedd > 0{_fdccf .Data [_fgfb ]=_bdaa (_fdccf .Data [_fgfb ],_agbf .Data [_dfeg ]&^(_fdccf .Data [_fgfb ]),_cece );};};case PixNotPixSrcOrDst :for _edfc =0;
_edfc < _abegg ;_edfc ++{_dfeg =_dgcg +_edfc *_agbf .RowStride ;_fgfb =_agfe +_edfc *_fdccf .RowStride ;for _bffef =0;_bffef < _cbfc ;_bffef ++{_fdccf .Data [_fgfb ]=^(_agbf .Data [_dfeg ]|_fdccf .Data [_fgfb ]);_fgfb ++;_dfeg ++;};if _dedd > 0{_fdccf .Data [_fgfb ]=_bdaa (_fdccf .Data [_fgfb ],^(_agbf .Data [_dfeg ]|_fdccf .Data [_fgfb ]),_cece );
};};case PixNotPixSrcAndDst :for _edfc =0;_edfc < _abegg ;_edfc ++{_dfeg =_dgcg +_edfc *_agbf .RowStride ;_fgfb =_agfe +_edfc *_fdccf .RowStride ;for _bffef =0;_bffef < _cbfc ;_bffef ++{_fdccf .Data [_fgfb ]=^(_agbf .Data [_dfeg ]&_fdccf .Data [_fgfb ]);
_fgfb ++;_dfeg ++;};if _dedd > 0{_fdccf .Data [_fgfb ]=_bdaa (_fdccf .Data [_fgfb ],^(_agbf .Data [_dfeg ]&_fdccf .Data [_fgfb ]),_cece );};};case PixNotPixSrcXorDst :for _edfc =0;_edfc < _abegg ;_edfc ++{_dfeg =_dgcg +_edfc *_agbf .RowStride ;_fgfb =_agfe +_edfc *_fdccf .RowStride ;
for _bffef =0;_bffef < _cbfc ;_bffef ++{_fdccf .Data [_fgfb ]=^(_agbf .Data [_dfeg ]^_fdccf .Data [_fgfb ]);_fgfb ++;_dfeg ++;};if _dedd > 0{_fdccf .Data [_fgfb ]=_bdaa (_fdccf .Data [_fgfb ],^(_agbf .Data [_dfeg ]^_fdccf .Data [_fgfb ]),_cece );};};default:_a .Log .Debug ("\u0050\u0072ov\u0069\u0064\u0065d\u0020\u0069\u006e\u0076ali\u0064 r\u0061\u0073\u0074\u0065\u0072\u0020\u006fpe\u0072\u0061\u0074\u006f\u0072\u003a\u0020%\u0076",_ddecd );
return _f .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004co\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");
};return nil ;};func _fagd (_fcee ,_cafa *Bitmap ,_bcfa ,_ddfg int )(*Bitmap ,error ){const _caa ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _cafa ==nil {return nil ,_f .Error (_caa ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _bcfa < 1&&_ddfg < 1{return nil ,_f .Error (_caa ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _bcfa ==1&&_ddfg ==1{return _cafa .Copy (),nil ;};if _bcfa ==1||_ddfg ==1{var _dcdae error ;
_gfee :=SelCreateBrick (_ddfg ,_bcfa ,_ddfg /2,_bcfa /2,SelHit );_fcee ,_dcdae =_cdgdf (_fcee ,_cafa ,_gfee );if _dcdae !=nil {return nil ,_f .Wrap (_dcdae ,_caa ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _fcee ,nil ;};_aggg :=SelCreateBrick (1,_bcfa ,0,_bcfa /2,SelHit );_fefbb :=SelCreateBrick (_ddfg ,1,_ddfg /2,0,SelHit );_dbga ,_dfdb :=_agef (nil ,_cafa ,_aggg );if _dfdb !=nil {return nil ,_f .Wrap (_dfdb ,_caa ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_fcee ,_dfdb =_agef (_fcee ,_dbga ,_fefbb );if _dfdb !=nil {return nil ,_f .Wrap (_dfdb ,_caa ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_dfdb =_ggea (_dbga ,_fcee ,_aggg );if _dfdb !=nil {return nil ,_f .Wrap (_dfdb ,_caa ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_ ,_dfdb =_ggea (_fcee ,_dbga ,_fefbb );if _dfdb !=nil {return nil ,_f .Wrap (_dfdb ,_caa ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _fcee ,nil ;};func _dgf (_fe *Bitmap ,_fed int )(*Bitmap ,error ){const _gf ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";
if _fe ==nil {return nil ,_f .Error (_gf ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _fed ==1{return _dgbfd (nil ,_fe );};if _fed !=2&&_fed !=4&&_fed !=8{return nil ,_f .Error (_gf ,"\u0066\u0061\u0063t\u006f\u0072\u0020\u006du\u0073\u0074\u0020\u0062\u0065\u0020\u0069n\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d\u0020\u0072\u0061\u006e\u0067\u0065");
};_cb :=_fed *_fe .Width ;_deb :=_fed *_fe .Height ;_cag :=New (_cb ,_deb );var _ddec error ;switch _fed {case 2:_ddec =_dd (_cag ,_fe );case 4:_ddec =_agc (_cag ,_fe );case 8:_ddec =_gc (_cag ,_fe );};if _ddec !=nil {return nil ,_f .Wrap (_ddec ,_gf ,"");
};return _cag ,nil ;};func TstVSymbol (t *_bd .T ,scale ...int )*Bitmap {_cfdb ,_fgfd :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_b .NoError (t ,_fgfd );return TstGetScaledSymbol (t ,_cfdb ,scale ...);};type Selection struct{Height ,Width int ;
Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func _fda (_fb *Bitmap ,_fec ,_gb int )(*Bitmap ,error ){const _aeb ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";if _fb ==nil {return nil ,_f .Error (_aeb ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _fec <=0||_gb <=0{return nil ,_f .Error (_aeb ,"\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u0073\u0063\u0061l\u0065\u0020\u0066\u0061\u0063\u0074\u006f\u0072\u003a\u0020<\u003d\u0020\u0030");};if _fec ==_gb {if _fec ==1{_dccc ,_gdc :=_dgbfd (nil ,_fb );
if _gdc !=nil {return nil ,_f .Wrap (_gdc ,_aeb ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _dccc ,nil ;};if _fec ==2||_fec ==4||_fec ==8{_edeb ,_fbe :=_dgf (_fb ,_fec );if _fbe !=nil {return nil ,_f .Wrap (_fbe ,_aeb ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");
};return _edeb ,nil ;};};_bc :=_fec *_fb .Width ;_af :=_gb *_fb .Height ;_agea :=New (_bc ,_af );_dee :=_agea .RowStride ;var (_gda ,_fef ,_feb ,_ebc ,_ggg int ;_dfc byte ;_gbf error ;);for _fef =0;_fef < _fb .Height ;_fef ++{_gda =_gb *_fef *_dee ;for _feb =0;
_feb < _fb .Width ;_feb ++{if _ebf :=_fb .GetPixel (_feb ,_fef );_ebf {_ggg =_fec *_feb ;for _ebc =0;_ebc < _fec ;_ebc ++{_agea .setBit (_gda *8+_ggg +_ebc );};};};for _ebc =1;_ebc < _gb ;_ebc ++{_bf :=_gda +_ebc *_dee ;for _aggb :=0;_aggb < _dee ;_aggb ++{if _dfc ,_gbf =_agea .GetByte (_gda +_aggb );
_gbf !=nil {return nil ,_f .Wrapf (_gbf ,_aeb ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_ebc );};if _gbf =_agea .SetByte (_bf +_aggb ,_dfc );_gbf !=nil {return nil ,_f .Wrap (_gbf ,_aeb ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");
};};};};return _agea ,nil ;};func TstNSymbol (t *_bd .T ,scale ...int )*Bitmap {_baad ,_bdab :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_b .NoError (t ,_bdab );return TstGetScaledSymbol (t ,_baad ,scale ...);};func NewClassedPoints (points *Points ,classes _e .IntSlice )(*ClassedPoints ,error ){const _cdeee ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";
if points ==nil {return nil ,_f .Error (_cdeee ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_f .Error (_cdeee ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");
};_dfcc :=&ClassedPoints {Points :points ,IntSlice :classes };if _bbfa :=_dfcc .validateIntSlice ();_bbfa !=nil {return nil ,_f .Wrap (_bbfa ,_cdeee ,"");};return _dfcc ,nil ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_gefb float64 ,_bcgf error ){const _dgeb ="\u0043\u006f\u0072\u0072el\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0053\u0069\u006d\u0070l\u0065";
if bm1 ==nil ||bm2 ==nil {return _gefb ,_f .Error (_dgeb ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _gefb ,_f .Error (_dgeb ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if area1 ==0||area2 ==0{return _gefb ,_f .Error (_dgeb ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_bgfcg ,_dfab :=bm1 .Width ,bm1 .Height ;_feggd ,_edg :=bm2 .Width ,bm2 .Height ;
if _eeeg (_bgfcg -_feggd )> maxDiffW {return 0,nil ;};if _eeeg (_dfab -_edg )> maxDiffH {return 0,nil ;};var _bbgf ,_baee int ;if delX >=0{_bbgf =int (delX +0.5);}else {_bbgf =int (delX -0.5);};if delY >=0{_baee =int (delY +0.5);}else {_baee =int (delY -0.5);
};_fgcd :=bm1 .createTemplate ();if _bcgf =_fgcd .RasterOperation (_bbgf ,_baee ,_feggd ,_edg ,PixSrc ,bm2 ,0,0);_bcgf !=nil {return _gefb ,_f .Wrap (_bcgf ,_dgeb ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _bcgf =_fgcd .RasterOperation (0,0,_bgfcg ,_dfab ,PixSrcAndDst ,bm1 ,0,0);
_bcgf !=nil {return _gefb ,_f .Wrap (_bcgf ,_dgeb ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_ceab :=_fgcd .countPixels ();_gefb =float64 (_ceab )*float64 (_ceab )/(float64 (area1 )*float64 (area2 ));return _gefb ,nil ;};func (_ecd *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _ecd .Copy (),nil ;
};_fbc ,_abcg :=_ecd .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _abcg !=nil {return nil ,_f .Wrap (_abcg ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _fbc ,nil ;};type CombinationOperator int ;func (_bfab *Boxes )Get (i int )(*_bg .Rectangle ,error ){const _fgcg ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";
if _bfab ==nil {return nil ,_f .Error (_fgcg ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if i > len (*_bfab )-1{return nil ,_f .Errorf (_fgcg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return (*_bfab )[i ],nil ;};func TstWordBitmapWithSpaces (t *_bd .T ,scale ...int )*Bitmap {_bcdc :=1;if len (scale )> 0{_bcdc =scale [0];};_adgba :=3;_abbb :=9+7+15+2*_adgba +2*_adgba ;_eagbe :=5+_adgba +5+2*_adgba ;_cbag :=New (_abbb *_bcdc ,_eagbe *_bcdc );
_acdb :=&Bitmaps {};var _dead *int ;_adgba *=_bcdc ;_ccee :=_adgba ;_dead =&_ccee ;_edeba :=_adgba ;_gcgc :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_acdb ,_gcgc ,_dead ,_edeba ,1*_bcdc );_gcgc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_acdb ,_gcgc ,_dead ,_edeba ,_adgba );
_gcgc =TstISymbol (t ,scale ...);TstAddSymbol (t ,_acdb ,_gcgc ,_dead ,_edeba ,1*_bcdc );_gcgc =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_acdb ,_gcgc ,_dead ,_edeba ,_adgba );_gcgc =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_acdb ,_gcgc ,_dead ,_edeba ,1*_bcdc );
_gcgc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_acdb ,_gcgc ,_dead ,_edeba ,1*_bcdc );_gcgc =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_acdb ,_gcgc ,_dead ,_edeba ,0);*_dead =_adgba ;_edeba =5*_bcdc +_adgba ;_gcgc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_acdb ,_gcgc ,_dead ,_edeba ,1*_bcdc );
_gcgc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_acdb ,_gcgc ,_dead ,_edeba ,_adgba );_gcgc =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_acdb ,_gcgc ,_dead ,_edeba ,1*_bcdc );_gcgc =TstESymbol (t ,scale ...);TstAddSymbol (t ,_acdb ,_gcgc ,_dead ,_edeba ,1*_bcdc );
_gcgc =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_acdb ,_gcgc ,_dead ,_edeba ,1*_bcdc );_gcgc =TstESymbol (t ,scale ...);TstAddSymbol (t ,_acdb ,_gcgc ,_dead ,_edeba ,1*_bcdc );_gcgc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_acdb ,_gcgc ,_dead ,_edeba ,0);
TstWriteSymbols (t ,_acdb ,_cbag );return _cbag ;};func TstPSymbol (t *_bd .T )*Bitmap {t .Helper ();_fdeaf :=New (5,8);_b .NoError (t ,_fdeaf .SetPixel (0,0,1));_b .NoError (t ,_fdeaf .SetPixel (1,0,1));_b .NoError (t ,_fdeaf .SetPixel (2,0,1));_b .NoError (t ,_fdeaf .SetPixel (3,0,1));
_b .NoError (t ,_fdeaf .SetPixel (4,1,1));_b .NoError (t ,_fdeaf .SetPixel (0,1,1));_b .NoError (t ,_fdeaf .SetPixel (4,2,1));_b .NoError (t ,_fdeaf .SetPixel (0,2,1));_b .NoError (t ,_fdeaf .SetPixel (4,3,1));_b .NoError (t ,_fdeaf .SetPixel (0,3,1));
_b .NoError (t ,_fdeaf .SetPixel (0,4,1));_b .NoError (t ,_fdeaf .SetPixel (1,4,1));_b .NoError (t ,_fdeaf .SetPixel (2,4,1));_b .NoError (t ,_fdeaf .SetPixel (3,4,1));_b .NoError (t ,_fdeaf .SetPixel (0,5,1));_b .NoError (t ,_fdeaf .SetPixel (0,6,1));
_b .NoError (t ,_fdeaf .SetPixel (0,7,1));return _fdeaf ;};func MakePixelSumTab8 ()[]int {return _aebbd ()};type SelectionValue int ;func (_cbcf *Bitmaps )CountPixels ()*_e .NumSlice {_ceaf :=&_e .NumSlice {};for _ ,_eedd :=range _cbcf .Values {_ceaf .AddInt (_eedd .CountPixels ());
};return _ceaf ;};func (_eega *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_bbebg *Boxes ,_fce error ){const _ffcd ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";if _eega ==nil {return nil ,_f .Error (_ffcd ,"\u0070r\u006f\u0076\u0069\u0064e\u0064\u0020\u0065\u006d\u0070t\u0079 \u0027b\u0027\u0020\u0062\u0069\u0074\u006d\u0061p");
};if connectivity !=4&&connectivity !=8{return nil ,_f .Error (_ffcd ,"\u0063\u006f\u006ene\u0063\u0074\u0069\u0076\u0069\u0074\u0079\u0020\u006e\u006f\u0074\u0020\u0034\u0020\u006f\u0072\u0020\u0038");};if bms ==nil {if _bbebg ,_fce =_eega .connComponentsBB (connectivity );
_fce !=nil {return nil ,_f .Wrap (_fce ,_ffcd ,"");};}else {if _bbebg ,_fce =_eega .connComponentsBitmapsBB (bms ,connectivity );_fce !=nil {return nil ,_f .Wrap (_fce ,_ffcd ,"");};};return _bbebg ,nil ;};func (_ddac *ClassedPoints )validateIntSlice ()error {const _ccc ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";
for _ ,_abddc :=range _ddac .IntSlice {if _abddc >=(_ddac .Points .Size ()){return _f .Errorf (_ccc ,"c\u006c\u0061\u0073\u0073\u0020\u0069\u0064\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u0069\u0073\u0020\u006e\u006f\u0074\u0020\u0061\u0020\u0076\u0061\u006ci\u0064 \u0069\u006e\u0064\u0065x\u0020\u0069n\u0020\u0074\u0068\u0065\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u003a\u0020\u0025\u0064",_abddc ,_ddac .Points .Size ());
};};return nil ;};var _ _cg .Interface =&ClassedPoints {};func (_aeee *Bitmap )setAll ()error {_afda :=_geg (_aeee ,0,0,_aeee .Width ,_aeee .Height ,PixSet ,nil ,0,0);if _afda !=nil {return _f .Wrap (_afda ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};
return nil ;};func TstDSymbol (t *_bd .T ,scale ...int )*Bitmap {_gceag ,_cffda :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_b .NoError (t ,_cffda );return TstGetScaledSymbol (t ,_gceag ,scale ...);};func _bdaga (_dcaa ,_cfdf int ,_dadad string )*Selection {_cafd :=&Selection {Height :_dcaa ,Width :_cfdf ,Name :_dadad };
_cafd .Data =make ([][]SelectionValue ,_dcaa );for _dbff :=0;_dbff < _dcaa ;_dbff ++{_cafd .Data [_dbff ]=make ([]SelectionValue ,_cfdf );};return _cafd ;};func init (){const _dbgaf ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";
_afgbc =New (50,40);var _cgdgd error ;_afgbc ,_cgdgd =_afgbc .AddBorder (2,1);if _cgdgd !=nil {panic (_f .Wrap (_cgdgd ,_dbgaf ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_afgaa ,_cgdgd =NewWithData (50,22,_bdde );if _cgdgd !=nil {panic (_f .Wrap (_cgdgd ,_dbgaf ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
};};func (_daaf *Bitmaps )AddBitmap (bm *Bitmap ){_daaf .Values =append (_daaf .Values ,bm )};var _ebe [256]uint8 ;func (_ddeaa *Bitmaps )GetBox (i int )(*_bg .Rectangle ,error ){const _dbadb ="\u0047\u0065\u0074\u0042\u006f\u0078";if _ddeaa ==nil {return nil ,_f .Error (_dbadb ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");
};if i > len (_ddeaa .Boxes )-1{return nil ,_f .Errorf (_dbadb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _ddeaa .Boxes [i ],nil ;};func (_efaf *Bitmap )addPadBits ()(_ffc error ){const _agd ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";
_dccf :=_efaf .Width %8;if _dccf ==0{return nil ;};_ccd :=_efaf .Width /8;_fgc :=_da .NewReader (_efaf .Data );_bag :=make ([]byte ,_efaf .Height *_efaf .RowStride );_deeaa :=_da .NewWriterMSB (_bag );_cabb :=make ([]byte ,_ccd );var (_cba int ;_bffe uint64 ;
);for _cba =0;_cba < _efaf .Height ;_cba ++{if _ ,_ffc =_fgc .Read (_cabb );_ffc !=nil {return _f .Wrap (_ffc ,_agd ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_ffc =_deeaa .Write (_cabb );_ffc !=nil {return _f .Wrap (_ffc ,_agd ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");
};if _bffe ,_ffc =_fgc .ReadBits (byte (_dccf ));_ffc !=nil {return _f .Wrap (_ffc ,_agd ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _ffc =_deeaa .WriteByte (byte (_bffe )<<uint (8-_dccf ));_ffc !=nil {return _f .Wrap (_ffc ,_agd ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");
};};_efaf .Data =_deeaa .Data ();return nil ;};func (_egae *Bitmap )ToImage ()_bg .Image {_gadg ,_dff :=_ff .NewImage (_egae .Width ,_egae .Height ,1,1,_egae .Data ,nil ,nil );if _dff !=nil {_a .Log .Error ("\u0043\u006f\u006e\u0076\u0065\u0072\u0074\u0069\u006e\u0067\u0020j\u0062\u0069\u0067\u0032\u002e\u0042\u0069\u0074m\u0061p\u0020\u0074\u006f\u0020\u0069\u006d\u0061\u0067\u0065\u0075\u0074\u0069\u006c\u002e\u0049\u006d\u0061\u0067e\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_dff );
};return _gadg ;};func _cfffd (_gagfa *Bitmap ,_bagb ,_bbee int ,_agecb ,_gfag int ,_cfgc RasterOperator ,_dbbb *Bitmap ,_cbde ,_cffbd int )error {var _adbe ,_fbgd ,_febf ,_fbdg int ;if _bagb < 0{_cbde -=_bagb ;_agecb +=_bagb ;_bagb =0;};if _cbde < 0{_bagb -=_cbde ;
_agecb +=_cbde ;_cbde =0;};_adbe =_bagb +_agecb -_gagfa .Width ;if _adbe > 0{_agecb -=_adbe ;};_fbgd =_cbde +_agecb -_dbbb .Width ;if _fbgd > 0{_agecb -=_fbgd ;};if _bbee < 0{_cffbd -=_bbee ;_gfag +=_bbee ;_bbee =0;};if _cffbd < 0{_bbee -=_cffbd ;_gfag +=_cffbd ;
_cffbd =0;};_febf =_bbee +_gfag -_gagfa .Height ;if _febf > 0{_gfag -=_febf ;};_fbdg =_cffbd +_gfag -_dbbb .Height ;if _fbdg > 0{_gfag -=_fbdg ;};if _agecb <=0||_gfag <=0{return nil ;};var _begc error ;switch {case _bagb &7==0&&_cbde &7==0:_begc =_bbff (_gagfa ,_bagb ,_bbee ,_agecb ,_gfag ,_cfgc ,_dbbb ,_cbde ,_cffbd );
case _bagb &7==_cbde &7:_begc =_baea (_gagfa ,_bagb ,_bbee ,_agecb ,_gfag ,_cfgc ,_dbbb ,_cbde ,_cffbd );default:_begc =_ggge (_gagfa ,_bagb ,_bbee ,_agecb ,_gfag ,_cfgc ,_dbbb ,_cbde ,_cffbd );};if _begc !=nil {return _f .Wrap (_begc ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");
};return nil ;};func _dd (_bgf ,_dbe *Bitmap )(_ca error ){const _ag ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_daa :=_dbe .RowStride ;_dc :=_bgf .RowStride ;var (_bgd byte ;_ed uint16 ;
_eb ,_ddd ,_age ,_dba ,_fg int ;);for _age =0;_age < _dbe .Height ;_age ++{_eb =_age *_daa ;_ddd =2*_age *_dc ;for _dba =0;_dba < _daa ;_dba ++{_bgd =_dbe .Data [_eb +_dba ];_ed =_ccdb [_bgd ];_fg =_ddd +_dba *2;if _bgf .RowStride !=_dbe .RowStride *2&&(_dba +1)*2> _bgf .RowStride {_ca =_bgf .SetByte (_fg ,byte (_ed >>8));
}else {_ca =_bgf .setTwoBytes (_fg ,_ed );};if _ca !=nil {return _f .Wrap (_ca ,_ag ,"");};};for _dba =0;_dba < _dc ;_dba ++{_fg =_ddd +_dc +_dba ;_bgd =_bgf .Data [_ddd +_dba ];if _ca =_bgf .SetByte (_fg ,_bgd );_ca !=nil {return _f .Wrapf (_ca ,_ag ,"c\u006f\u0070\u0079\u0020\u0064\u006fu\u0062\u006c\u0065\u0064\u0020\u006ci\u006e\u0065\u003a\u0020\u0027\u0025\u0064'\u002c\u0020\u0042\u0079\u0074\u0065\u003a\u0020\u0027\u0025d\u0027",_ddd +_dba ,_ddd +_dc +_dba );
};};};return nil ;};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _cbdd (d ,s ,hSize ,vSize )};func (_abfd *Bitmap )clearAll ()error {return _abfd .RasterOperation (0,0,_abfd .Width ,_abfd .Height ,PixClr ,nil ,0,0);};func (_bca *Bitmap )GetPixel (x ,y int )bool {_gdcg :=_bca .GetByteIndex (x ,y );
_dbde :=_bca .GetBitOffset (x );_cebc :=uint (7-_dbde );if _gdcg > len (_bca .Data )-1{_a .Log .Debug ("\u0054\u0072\u0079\u0069\u006e\u0067\u0020\u0074\u006f\u0020\u0067\u0065\u0074\u0020\u0070\u0069\u0078\u0065\u006c\u0020o\u0075\u0074\u0020\u006f\u0066\u0020\u0074\u0068\u0065\u0020\u0064\u0061\u0074\u0061\u0020\u0072\u0061\u006e\u0067\u0065\u002e \u0078\u003a\u0020\u0027\u0025\u0064\u0027\u002c\u0020\u0079\u003a\u0027\u0025\u0064'\u002c\u0020\u0062m\u003a\u0020\u0027\u0025\u0073\u0027",x ,y ,_bca );
return false ;};if (_bca .Data [_gdcg ]>>_cebc )&0x01>=1{return true ;};return false ;};func (_fcgf *ClassedPoints )SortByX (){_fcgf ._fbff =_fcgf .xSortFunction ();_cg .Sort (_fcgf )};func (_bbe *Bitmap )GetBitOffset (x int )int {return x &0x07};func _becd (_eeegc ,_gadc ,_ebbd *Bitmap )(*Bitmap ,error ){const _dgec ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";
if _gadc ==nil {return nil ,_f .Error (_dgec ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _ebbd ==nil {return nil ,_f .Error (_dgec ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _dffg error ;switch {case _eeegc ==_gadc :if _dffg =_eeegc .RasterOperation (0,0,_gadc .Width ,_gadc .Height ,PixNotSrcAndDst ,_ebbd ,0,0);
_dffg !=nil {return nil ,_f .Wrap (_dffg ,_dgec ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _eeegc ==_ebbd :if _dffg =_eeegc .RasterOperation (0,0,_gadc .Width ,_gadc .Height ,PixNotSrcAndDst ,_gadc ,0,0);_dffg !=nil {return nil ,_f .Wrap (_dffg ,_dgec ,"\u0064 \u003d\u003d\u0020\u0073\u0032");
};default:_eeegc ,_dffg =_dgbfd (_eeegc ,_gadc );if _dffg !=nil {return nil ,_f .Wrap (_dffg ,_dgec ,"");};if _dffg =_eeegc .RasterOperation (0,0,_gadc .Width ,_gadc .Height ,PixNotSrcAndDst ,_ebbd ,0,0);_dffg !=nil {return nil ,_f .Wrap (_dffg ,_dgec ,"\u0064e\u0066\u0061\u0075\u006c\u0074");
};};return _eeegc ,nil ;};func _dgbfd (_bcgb ,_gadd *Bitmap )(*Bitmap ,error ){if _gadd ==nil {return nil ,_f .Error ("\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _gadd ==_bcgb {return _bcgb ,nil ;};if _bcgb ==nil {_bcgb =_gadd .createTemplate ();copy (_bcgb .Data ,_gadd .Data );return _bcgb ,nil ;};_eaea :=_bcgb .resizeImageData (_gadd );if _eaea !=nil {return nil ,_f .Wrap (_eaea ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
};_bcgb .Text =_gadd .Text ;copy (_bcgb .Data ,_gadd .Data );return _bcgb ,nil ;};func _bcedf (_eaeag ,_aacg *Bitmap ,_fcgg ,_bcb ,_cgdc uint ,_fegca ,_bdgc int ,_egcab bool ,_aceb ,_deaa int )error {for _aggfa :=_fegca ;_aggfa < _bdgc ;_aggfa ++{if _aceb +1< len (_eaeag .Data ){_debg :=_aggfa +1==_bdgc ;
_dadc ,_aabd :=_eaeag .GetByte (_aceb );if _aabd !=nil {return _aabd ;};_aceb ++;_dadc <<=_fcgg ;_abaf ,_aabd :=_eaeag .GetByte (_aceb );if _aabd !=nil {return _aabd ;};_abaf >>=_bcb ;_beac :=_dadc |_abaf ;if _debg &&!_egcab {_beac =_efd (_cgdc ,_beac );
};_aabd =_aacg .SetByte (_deaa ,_beac );if _aabd !=nil {return _aabd ;};_deaa ++;if _debg &&_egcab {_bgdg ,_fefb :=_eaeag .GetByte (_aceb );if _fefb !=nil {return _fefb ;};_bgdg <<=_fcgg ;_beac =_efd (_cgdc ,_bgdg );if _fefb =_aacg .SetByte (_deaa ,_beac );
_fefb !=nil {return _fefb ;};};continue ;};_aecd ,_baa :=_eaeag .GetByte (_aceb );if _baa !=nil {_a .Log .Debug ("G\u0065\u0074\u0074\u0069\u006e\u0067 \u0074\u0068\u0065\u0020\u0076\u0061l\u0075\u0065\u0020\u0061\u0074\u003a\u0020%\u0064\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020%\u0073",_aceb ,_baa );
return _baa ;};_aecd <<=_fcgg ;_aceb ++;_baa =_aacg .SetByte (_deaa ,_aecd );if _baa !=nil {return _baa ;};_deaa ++;};return nil ;};func _fdcc (_bccea ,_dddca *Bitmap ,_bcae ,_efge ,_ageg ,_dffgd ,_fbed int ,_aecba CombinationOperator )error {var _efad int ;
_ebbb :=func (){_efad ++;_ageg +=_dddca .RowStride ;_dffgd +=_bccea .RowStride ;_fbed +=_bccea .RowStride };for _efad =_bcae ;_efad < _efge ;_ebbb (){_cafg :=_ageg ;for _beag :=_dffgd ;_beag <=_fbed ;_beag ++{_cggf ,_cbdg :=_dddca .GetByte (_cafg );if _cbdg !=nil {return _cbdg ;
};_ceg ,_cbdg :=_bccea .GetByte (_beag );if _cbdg !=nil {return _cbdg ;};if _cbdg =_dddca .SetByte (_cafg ,_gfgeb (_cggf ,_ceg ,_aecba ));_cbdg !=nil {return _cbdg ;};_cafg ++;};};return nil ;};var MorphBC BoundaryCondition ;func (_gdea *Bitmap )inverseData (){if _gba :=_gdea .RasterOperation (0,0,_gdea .Width ,_gdea .Height ,PixNotDst ,nil ,0,0);
_gba !=nil {_a .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_gba );};if _gdea .Color ==Chocolate {_gdea .Color =Vanilla ;}else {_gdea .Color =Chocolate ;};};func (_egdc *Bitmap )removeBorderGeneral (_eecd ,_gbaf ,_gbdgf ,_eee int )(*Bitmap ,error ){const _fdg ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
if _eecd < 0||_gbaf < 0||_gbdgf < 0||_eee < 0{return nil ,_f .Error (_fdg ,"\u006e\u0065g\u0061\u0074\u0069\u0076\u0065\u0020\u0062\u0072\u006f\u0064\u0065\u0072\u0020\u0072\u0065\u006d\u006f\u0076\u0065\u0020\u0076\u0061lu\u0065\u0073");};_bcce ,_adg :=_egdc .Width ,_egdc .Height ;
_gabe :=_bcce -_eecd -_gbaf ;_cgaf :=_adg -_gbdgf -_eee ;if _gabe <=0{return nil ,_f .Errorf (_fdg ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_gabe );};if _cgaf <=0{return nil ,_f .Errorf (_fdg ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_cgaf );
};_gbce :=New (_gabe ,_cgaf );_gbce .Color =_egdc .Color ;_daac :=_gbce .RasterOperation (0,0,_gabe ,_cgaf ,PixSrc ,_egdc ,_eecd ,_gbdgf );if _daac !=nil {return nil ,_f .Wrap (_daac ,_fdg ,"");};return _gbce ,nil ;};func _cdgdf (_dfgg ,_ebdgd *Bitmap ,_aggae *Selection )(*Bitmap ,error ){const _ggff ="\u006f\u0070\u0065\u006e";
var _dgfed error ;_dfgg ,_dgfed =_abcd (_dfgg ,_ebdgd ,_aggae );if _dgfed !=nil {return nil ,_f .Wrap (_dgfed ,_ggff ,"");};_bfcc ,_dgfed :=_agef (nil ,_ebdgd ,_aggae );if _dgfed !=nil {return nil ,_f .Wrap (_dgfed ,_ggff ,"");};_ ,_dgfed =_ggea (_dfgg ,_bfcc ,_aggae );
if _dgfed !=nil {return nil ,_f .Wrap (_dgfed ,_ggff ,"");};return _dfgg ,nil ;};func (_eccc *ClassedPoints )Swap (i ,j int ){_eccc .IntSlice [i ],_eccc .IntSlice [j ]=_eccc .IntSlice [j ],_eccc .IntSlice [i ];};func (_fbcbc *byHeight )Swap (i ,j int ){_fbcbc .Values [i ],_fbcbc .Values [j ]=_fbcbc .Values [j ],_fbcbc .Values [i ];
if _fbcbc .Boxes !=nil {_fbcbc .Boxes [i ],_fbcbc .Boxes [j ]=_fbcbc .Boxes [j ],_fbcbc .Boxes [i ];};};