2024-04-16 11:40:43 +00:00

656 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 (_aa "encoding/binary";_d "github.com/stretchr/testify/require";_gg "github.com/unidoc/unipdf/v3/common";_a "github.com/unidoc/unipdf/v3/internal/bitwise";_c "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";_fbc "image";_df "math";_fb "sort";_bg "strings";_g "testing";);func _dbf (_bde ,_dea *Bitmap ,_ffe int ,_adcf []byte ,_fag int )(_cffe error ){const _dabg ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";
var (_bbf ,_eae ,_fbcd ,_bbe ,_cbec ,_aadf ,_bbeb ,_efba int ;_bda ,_cdc uint32 ;_ggef ,_fee byte ;_gbga uint16 ;);_gfec :=make ([]byte ,4);_eaa :=make ([]byte ,4);for _fbcd =0;_fbcd < _bde .Height -1;_fbcd ,_bbe =_fbcd +2,_bbe +1{_bbf =_fbcd *_bde .RowStride ;
_eae =_bbe *_dea .RowStride ;for _cbec ,_aadf =0,0;_cbec < _fag ;_cbec ,_aadf =_cbec +4,_aadf +1{for _bbeb =0;_bbeb < 4;_bbeb ++{_efba =_bbf +_cbec +_bbeb ;if _efba <=len (_bde .Data )-1&&_efba < _bbf +_bde .RowStride {_gfec [_bbeb ]=_bde .Data [_efba ];
}else {_gfec [_bbeb ]=0x00;};_efba =_bbf +_bde .RowStride +_cbec +_bbeb ;if _efba <=len (_bde .Data )-1&&_efba < _bbf +(2*_bde .RowStride ){_eaa [_bbeb ]=_bde .Data [_efba ];}else {_eaa [_bbeb ]=0x00;};};_bda =_aa .BigEndian .Uint32 (_gfec );_cdc =_aa .BigEndian .Uint32 (_eaa );
_cdc &=_bda ;_cdc &=_cdc <<1;_cdc &=0xaaaaaaaa;_bda =_cdc |(_cdc <<7);_ggef =byte (_bda >>24);_fee =byte ((_bda >>8)&0xff);_efba =_eae +_aadf ;if _efba +1==len (_dea .Data )-1||_efba +1>=_eae +_dea .RowStride {_dea .Data [_efba ]=_adcf [_ggef ];if _cffe =_dea .SetByte (_efba ,_adcf [_ggef ]);
_cffe !=nil {return _f .Wrapf (_cffe ,_dabg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_efba );};}else {_gbga =(uint16 (_adcf [_ggef ])<<8)|uint16 (_adcf [_fee ]);if _cffe =_dea .setTwoBytes (_efba ,_gbga );_cffe !=nil {return _f .Wrapf (_cffe ,_dabg ,"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",_efba );
};_aadf ++;};};};return nil ;};func _ccfb (_gafc int )int {if _gafc < 0{return -_gafc ;};return _gafc ;};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;
};func (_gegf *Bitmap )centroid (_fbfe ,_cccf []int )(Point ,error ){_aggbg :=Point {};_gegf .setPadBits (0);if len (_fbfe )==0{_fbfe =_gafe ();};if len (_cccf )==0{_cccf =_efeg ();};var _ebcdc ,_cgca ,_dgcb ,_egfa ,_cgae ,_bfed int ;var _cbbag byte ;for _cgae =0;
_cgae < _gegf .Height ;_cgae ++{_gea :=_gegf .RowStride *_cgae ;_egfa =0;for _bfed =0;_bfed < _gegf .RowStride ;_bfed ++{_cbbag =_gegf .Data [_gea +_bfed ];if _cbbag !=0{_egfa +=_cccf [_cbbag ];_ebcdc +=_fbfe [_cbbag ]+_bfed *8*_cccf [_cbbag ];};};_dgcb +=_egfa ;
_cgca +=_egfa *_cgae ;};if _dgcb !=0{_aggbg .X =float32 (_ebcdc )/float32 (_dgcb );_aggbg .Y =float32 (_cgca )/float32 (_dgcb );};return _aggbg ,nil ;};func ClipBoxToRectangle (box *_fbc .Rectangle ,wi ,hi int )(_bagbd *_fbc .Rectangle ,_gabf error ){const _gbbc ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,_f .Error (_gbbc ,"\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 (_gbbc ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");
};_bac :=*box ;_bagbd =&_bac ;if _bagbd .Min .X < 0{_bagbd .Max .X +=_bagbd .Min .X ;_bagbd .Min .X =0;};if _bagbd .Min .Y < 0{_bagbd .Max .Y +=_bagbd .Min .Y ;_bagbd .Min .Y =0;};if _bagbd .Max .X > wi {_bagbd .Max .X =wi ;};if _bagbd .Max .Y > hi {_bagbd .Max .Y =hi ;
};return _bagbd ,nil ;};func (_agb *Bitmap )clearAll ()error {return _agb .RasterOperation (0,0,_agb .Width ,_agb .Height ,PixClr ,nil ,0,0);};type SelectionValue int ;func (_afb *Bitmap )SetDefaultPixel (){for _edfa :=range _afb .Data {_afb .Data [_edfa ]=byte (0xff);
};};func (_gcbd Points )YSorter ()func (_bfdd ,_bdeb int )bool {return func (_caae ,_ggag int )bool {return _gcbd [_caae ].Y < _gcbd [_ggag ].Y };};var (_gccbe =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_gdg =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
);func (_gaeg *Bitmap )CountPixels ()int {return _gaeg .countPixels ()};const (_dfed shift =iota ;_bebg ;);var _bed [256]uint8 ;func (_gda *Bitmap )thresholdPixelSum (_abg int )bool {var (_cegd int ;_afda uint8 ;_eeaa byte ;_gacc int ;);_eabf :=_gda .RowStride ;
_ceab :=uint (_gda .Width &0x07);if _ceab !=0{_afda =uint8 ((0xff<<(8-_ceab ))&0xff);_eabf --;};for _fef :=0;_fef < _gda .Height ;_fef ++{for _gacc =0;_gacc < _eabf ;_gacc ++{_eeaa =_gda .Data [_fef *_gda .RowStride +_gacc ];_cegd +=int (_bed [_eeaa ]);
};if _ceab !=0{_eeaa =_gda .Data [_fef *_gda .RowStride +_gacc ]&_afda ;_cegd +=int (_bed [_eeaa ]);};if _cegd > _abg {return true ;};};return false ;};func _dbcb (_abfd *Bitmap ,_fege ,_cbbc int ,_egeg ,_ebeg int ,_edbbf RasterOperator ){var (_adgb bool ;
_fdfg bool ;_cfcc int ;_bged int ;_afaa int ;_dfgbd int ;_cbaf bool ;_bgga byte ;);_ceffg :=8-(_fege &7);_fbfba :=_gdg [_ceffg ];_bebc :=_abfd .RowStride *_cbbc +(_fege >>3);if _egeg < _ceffg {_adgb =true ;_fbfba &=_gccbe [8-_ceffg +_egeg ];};if !_adgb {_cfcc =(_egeg -_ceffg )>>3;
if _cfcc !=0{_fdfg =true ;_bged =_bebc +1;};};_afaa =(_fege +_egeg )&7;if !(_adgb ||_afaa ==0){_cbaf =true ;_bgga =_gccbe [_afaa ];_dfgbd =_bebc +1+_cfcc ;};var _gcfg ,_ebbg int ;switch _edbbf {case PixClr :for _gcfg =0;_gcfg < _ebeg ;_gcfg ++{_abfd .Data [_bebc ]=_daea (_abfd .Data [_bebc ],0x0,_fbfba );
_bebc +=_abfd .RowStride ;};if _fdfg {for _gcfg =0;_gcfg < _ebeg ;_gcfg ++{for _ebbg =0;_ebbg < _cfcc ;_ebbg ++{_abfd .Data [_bged +_ebbg ]=0x0;};_bged +=_abfd .RowStride ;};};if _cbaf {for _gcfg =0;_gcfg < _ebeg ;_gcfg ++{_abfd .Data [_dfgbd ]=_daea (_abfd .Data [_dfgbd ],0x0,_bgga );
_dfgbd +=_abfd .RowStride ;};};case PixSet :for _gcfg =0;_gcfg < _ebeg ;_gcfg ++{_abfd .Data [_bebc ]=_daea (_abfd .Data [_bebc ],0xff,_fbfba );_bebc +=_abfd .RowStride ;};if _fdfg {for _gcfg =0;_gcfg < _ebeg ;_gcfg ++{for _ebbg =0;_ebbg < _cfcc ;_ebbg ++{_abfd .Data [_bged +_ebbg ]=0xff;
};_bged +=_abfd .RowStride ;};};if _cbaf {for _gcfg =0;_gcfg < _ebeg ;_gcfg ++{_abfd .Data [_dfgbd ]=_daea (_abfd .Data [_dfgbd ],0xff,_bgga );_dfgbd +=_abfd .RowStride ;};};case PixNotDst :for _gcfg =0;_gcfg < _ebeg ;_gcfg ++{_abfd .Data [_bebc ]=_daea (_abfd .Data [_bebc ],^_abfd .Data [_bebc ],_fbfba );
_bebc +=_abfd .RowStride ;};if _fdfg {for _gcfg =0;_gcfg < _ebeg ;_gcfg ++{for _ebbg =0;_ebbg < _cfcc ;_ebbg ++{_abfd .Data [_bged +_ebbg ]=^(_abfd .Data [_bged +_ebbg ]);};_bged +=_abfd .RowStride ;};};if _cbaf {for _gcfg =0;_gcfg < _ebeg ;_gcfg ++{_abfd .Data [_dfgbd ]=_daea (_abfd .Data [_dfgbd ],^_abfd .Data [_dfgbd ],_bgga );
_dfgbd +=_abfd .RowStride ;};};};};func (_adfb *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_bfbg bool ,_bdbg error ){const _aged ="\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 =_efeg ();};_gbf :=_adfb .Width >>3;_aba :=_adfb .Width &7;_ebc :=byte (0xff<<uint (8-_aba ));var (_deaf ,_ecef ,_cdf ,_gcf int ;_dge byte ;);for _deaf =0;_deaf < _adfb .Height ;_deaf ++{_cdf =_adfb .RowStride *_deaf ;for _ecef =0;_ecef < _gbf ;
_ecef ++{_dge ,_bdbg =_adfb .GetByte (_cdf +_ecef );if _bdbg !=nil {return false ,_f .Wrap (_bdbg ,_aged ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_gcf +=tab8 [_dge ];};if _aba !=0{_dge ,_bdbg =_adfb .GetByte (_cdf +_ecef );if _bdbg !=nil {return false ,_f .Wrap (_bdbg ,_aged ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");
};_dge &=_ebc ;_gcf +=tab8 [_dge ];};if _gcf > thresh {return true ,nil ;};};return _bfbg ,nil ;};func (_gbcbb *Bitmaps )GetBox (i int )(*_fbc .Rectangle ,error ){const _ffge ="\u0047\u0065\u0074\u0042\u006f\u0078";if _gbcbb ==nil {return nil ,_f .Error (_ffge ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");
};if i > len (_gbcbb .Boxes )-1{return nil ,_f .Errorf (_ffge ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _gbcbb .Boxes [i ],nil ;};func init (){for _abd :=0;
_abd < 256;_abd ++{_bed [_abd ]=uint8 (_abd &0x1)+(uint8 (_abd >>1)&0x1)+(uint8 (_abd >>2)&0x1)+(uint8 (_abd >>3)&0x1)+(uint8 (_abd >>4)&0x1)+(uint8 (_abd >>5)&0x1)+(uint8 (_abd >>6)&0x1)+(uint8 (_abd >>7)&0x1);};};func _aga (_gbac ,_fbdf *Bitmap ,_afad CombinationOperator )*Bitmap {_accf :=New (_gbac .Width ,_gbac .Height );
for _ecefe :=0;_ecefe < len (_accf .Data );_ecefe ++{_accf .Data [_ecefe ]=_aefb (_gbac .Data [_ecefe ],_fbdf .Data [_ecefe ],_afad );};return _accf ;};func (_bdbgf *Bitmap )resizeImageData (_bdac *Bitmap )error {if _bdac ==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 _bdbgf .SizesEqual (_bdac ){return nil ;};_bdbgf .Data =make ([]byte ,len (_bdac .Data ));_bdbgf .Width =_bdac .Width ;_bdbgf .Height =_bdac .Height ;_bdbgf .RowStride =_bdac .RowStride ;return nil ;};func (_adee Points )Get (i int )(Point ,error ){if i > len (_adee )-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 _adee [i ],nil ;};func (_fdga *Bitmap )countPixels ()int {var (_gag int ;_fcf uint8 ;_gbce byte ;_aeb int ;);_ccd :=_fdga .RowStride ;_aed :=uint (_fdga .Width &0x07);if _aed !=0{_fcf =uint8 ((0xff<<(8-_aed ))&0xff);_ccd --;};for _bebe :=0;_bebe < _fdga .Height ;
_bebe ++{for _aeb =0;_aeb < _ccd ;_aeb ++{_gbce =_fdga .Data [_bebe *_fdga .RowStride +_aeb ];_gag +=int (_bed [_gbce ]);};if _aed !=0{_gag +=int (_bed [_fdga .Data [_bebe *_fdga .RowStride +_aeb ]&_fcf ]);};};return _gag ;};func (_febde *Selection )findMaxTranslations ()(_ffce ,_bbffc ,_dfddg ,_cggd int ){for _fegg :=0;
_fegg < _febde .Height ;_fegg ++{for _faca :=0;_faca < _febde .Width ;_faca ++{if _febde .Data [_fegg ][_faca ]==SelHit {_ffce =_bcca (_ffce ,_febde .Cx -_faca );_bbffc =_bcca (_bbffc ,_febde .Cy -_fegg );_dfddg =_bcca (_dfddg ,_faca -_febde .Cx );_cggd =_bcca (_cggd ,_fegg -_febde .Cy );
};};};return _ffce ,_bbffc ,_dfddg ,_cggd ;};func (_eafa *Bitmap )setBit (_eeg int ){_eafa .Data [(_eeg >>3)]|=0x80>>uint (_eeg &7)};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;
);func (_acfa *Bitmaps )HeightSorter ()func (_cbdbc ,_cfac int )bool {return func (_dfabc ,_abegg int )bool {_eecba :=_acfa .Values [_dfabc ].Height < _acfa .Values [_abegg ].Height ;_gg .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_acfa .Values [_dfabc ].Height ,_acfa .Values [_abegg ].Height ,_eecba );
return _eecba ;};};func _daea (_egab ,_cgfce ,_aeaa byte )byte {return (_egab &^(_aeaa ))|(_cgfce &_aeaa )};func (_dcfa Points )GetIntX (i int )(int ,error ){if i >=len (_dcfa ){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 (_dcfa [i ].X ),nil ;};type byHeight Bitmaps ;var (_afdba *Bitmap ;_cfbf *Bitmap ;);func Extract (roi _fbc .Rectangle ,src *Bitmap )(*Bitmap ,error ){_adfbb :=New (roi .Dx (),roi .Dy ());_fea :=roi .Min .X &0x07;_ace :=8-_fea ;_eabd :=uint (8-_adfbb .Width &0x07);
_dddd :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_gegd :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_bfbee :=_adfbb .RowStride ==_gegd +1-_dddd ;var _afbfd int ;for _ddb :=roi .Min .Y ;_ddb < roi .Max .Y ;_ddb ++{_dcbba :=_dddd ;_gacfb :=_afbfd ;
switch {case _dddd ==_gegd :_gccb ,_ffag :=src .GetByte (_dcbba );if _ffag !=nil {return nil ,_ffag ;};_gccb <<=uint (_fea );_ffag =_adfbb .SetByte (_gacfb ,_dgae (_eabd ,_gccb ));if _ffag !=nil {return nil ,_ffag ;};case _fea ==0:for _ddaf :=_dddd ;_ddaf <=_gegd ;
_ddaf ++{_aega ,_fcfef :=src .GetByte (_dcbba );if _fcfef !=nil {return nil ,_fcfef ;};_dcbba ++;if _ddaf ==_gegd &&_bfbee {_aega =_dgae (_eabd ,_aega );};_fcfef =_adfbb .SetByte (_gacfb ,_aega );if _fcfef !=nil {return nil ,_fcfef ;};_gacfb ++;};default:_ebbc :=_fadg (src ,_adfbb ,uint (_fea ),uint (_ace ),_eabd ,_dddd ,_gegd ,_bfbee ,_dcbba ,_gacfb );
if _ebbc !=nil {return nil ,_ebbc ;};};_dddd +=src .RowStride ;_gegd +=src .RowStride ;_afbfd +=_adfbb .RowStride ;};return _adfbb ,nil ;};func _bae ()(_agd [256]uint16 ){for _efc :=0;_efc < 256;_efc ++{if _efc &0x01!=0{_agd [_efc ]|=0x3;};if _efc &0x02!=0{_agd [_efc ]|=0xc;
};if _efc &0x04!=0{_agd [_efc ]|=0x30;};if _efc &0x08!=0{_agd [_efc ]|=0xc0;};if _efc &0x10!=0{_agd [_efc ]|=0x300;};if _efc &0x20!=0{_agd [_efc ]|=0xc00;};if _efc &0x40!=0{_agd [_efc ]|=0x3000;};if _efc &0x80!=0{_agd [_efc ]|=0xc000;};};return _agd ;};
func (_gcagd *ClassedPoints )SortByX (){_gcagd ._abda =_gcagd .xSortFunction ();_fb .Sort (_gcagd )};func (_cca *ClassedPoints )xSortFunction ()func (_gdcf int ,_adgf int )bool {return func (_aff ,_dgbd int )bool {return _cca .XAtIndex (_aff )< _cca .XAtIndex (_dgbd )};
};func (_adae *byHeight )Swap (i ,j int ){_adae .Values [i ],_adae .Values [j ]=_adae .Values [j ],_adae .Values [i ];if _adae .Boxes !=nil {_adae .Boxes [i ],_adae .Boxes [j ]=_adae .Boxes [j ],_adae .Boxes [i ];};};func _gabfa (_dabfb *Bitmap ,_eeece ,_cgee ,_dgg ,_dee int ,_fbbf RasterOperator ,_fbeb *Bitmap ,_ddgg ,_beafb int )error {var (_bfdee bool ;
_gdab bool ;_afec byte ;_dgd int ;_aec int ;_fagc int ;_defd int ;_gfge bool ;_cfaa int ;_ffbc int ;_ddbf int ;_fcfc bool ;_aefc byte ;_ffeg int ;_bdae int ;_adce int ;_fcbd byte ;_cfed int ;_aedb int ;_dcee uint ;_eead uint ;_fdce byte ;_dgaeg shift ;
_febd bool ;_daffe bool ;_caec ,_gfgc int ;);if _ddgg &7!=0{_aedb =8-(_ddgg &7);};if _eeece &7!=0{_aec =8-(_eeece &7);};if _aedb ==0&&_aec ==0{_fdce =_gdg [0];}else {if _aec > _aedb {_dcee =uint (_aec -_aedb );}else {_dcee =uint (8-(_aedb -_aec ));};_eead =8-_dcee ;
_fdce =_gdg [_dcee ];};if (_eeece &7)!=0{_bfdee =true ;_dgd =8-(_eeece &7);_afec =_gdg [_dgd ];_fagc =_dabfb .RowStride *_cgee +(_eeece >>3);_defd =_fbeb .RowStride *_beafb +(_ddgg >>3);_cfed =8-(_ddgg &7);if _dgd > _cfed {_dgaeg =_dfed ;if _dgg >=_aedb {_febd =true ;
};}else {_dgaeg =_bebg ;};};if _dgg < _dgd {_gdab =true ;_afec &=_gccbe [8-_dgd +_dgg ];};if !_gdab {_cfaa =(_dgg -_dgd )>>3;if _cfaa !=0{_gfge =true ;_ffbc =_dabfb .RowStride *_cgee +((_eeece +_aec )>>3);_ddbf =_fbeb .RowStride *_beafb +((_ddgg +_aec )>>3);
};};_ffeg =(_eeece +_dgg )&7;if !(_gdab ||_ffeg ==0){_fcfc =true ;_aefc =_gccbe [_ffeg ];_bdae =_dabfb .RowStride *_cgee +((_eeece +_aec )>>3)+_cfaa ;_adce =_fbeb .RowStride *_beafb +((_ddgg +_aec )>>3)+_cfaa ;if _ffeg > int (_eead ){_daffe =true ;};};
switch _fbbf {case PixSrc :if _bfdee {for _caec =0;_caec < _dee ;_caec ++{if _dgaeg ==_dfed {_fcbd =_fbeb .Data [_defd ]<<_dcee ;if _febd {_fcbd =_daea (_fcbd ,_fbeb .Data [_defd +1]>>_eead ,_fdce );};}else {_fcbd =_fbeb .Data [_defd ]>>_eead ;};_dabfb .Data [_fagc ]=_daea (_dabfb .Data [_fagc ],_fcbd ,_afec );
_fagc +=_dabfb .RowStride ;_defd +=_fbeb .RowStride ;};};if _gfge {for _caec =0;_caec < _dee ;_caec ++{for _gfgc =0;_gfgc < _cfaa ;_gfgc ++{_fcbd =_daea (_fbeb .Data [_ddbf +_gfgc ]<<_dcee ,_fbeb .Data [_ddbf +_gfgc +1]>>_eead ,_fdce );_dabfb .Data [_ffbc +_gfgc ]=_fcbd ;
};_ffbc +=_dabfb .RowStride ;_ddbf +=_fbeb .RowStride ;};};if _fcfc {for _caec =0;_caec < _dee ;_caec ++{_fcbd =_fbeb .Data [_adce ]<<_dcee ;if _daffe {_fcbd =_daea (_fcbd ,_fbeb .Data [_adce +1]>>_eead ,_fdce );};_dabfb .Data [_bdae ]=_daea (_dabfb .Data [_bdae ],_fcbd ,_aefc );
_bdae +=_dabfb .RowStride ;_adce +=_fbeb .RowStride ;};};case PixNotSrc :if _bfdee {for _caec =0;_caec < _dee ;_caec ++{if _dgaeg ==_dfed {_fcbd =_fbeb .Data [_defd ]<<_dcee ;if _febd {_fcbd =_daea (_fcbd ,_fbeb .Data [_defd +1]>>_eead ,_fdce );};}else {_fcbd =_fbeb .Data [_defd ]>>_eead ;
};_dabfb .Data [_fagc ]=_daea (_dabfb .Data [_fagc ],^_fcbd ,_afec );_fagc +=_dabfb .RowStride ;_defd +=_fbeb .RowStride ;};};if _gfge {for _caec =0;_caec < _dee ;_caec ++{for _gfgc =0;_gfgc < _cfaa ;_gfgc ++{_fcbd =_daea (_fbeb .Data [_ddbf +_gfgc ]<<_dcee ,_fbeb .Data [_ddbf +_gfgc +1]>>_eead ,_fdce );
_dabfb .Data [_ffbc +_gfgc ]=^_fcbd ;};_ffbc +=_dabfb .RowStride ;_ddbf +=_fbeb .RowStride ;};};if _fcfc {for _caec =0;_caec < _dee ;_caec ++{_fcbd =_fbeb .Data [_adce ]<<_dcee ;if _daffe {_fcbd =_daea (_fcbd ,_fbeb .Data [_adce +1]>>_eead ,_fdce );};_dabfb .Data [_bdae ]=_daea (_dabfb .Data [_bdae ],^_fcbd ,_aefc );
_bdae +=_dabfb .RowStride ;_adce +=_fbeb .RowStride ;};};case PixSrcOrDst :if _bfdee {for _caec =0;_caec < _dee ;_caec ++{if _dgaeg ==_dfed {_fcbd =_fbeb .Data [_defd ]<<_dcee ;if _febd {_fcbd =_daea (_fcbd ,_fbeb .Data [_defd +1]>>_eead ,_fdce );};}else {_fcbd =_fbeb .Data [_defd ]>>_eead ;
};_dabfb .Data [_fagc ]=_daea (_dabfb .Data [_fagc ],_fcbd |_dabfb .Data [_fagc ],_afec );_fagc +=_dabfb .RowStride ;_defd +=_fbeb .RowStride ;};};if _gfge {for _caec =0;_caec < _dee ;_caec ++{for _gfgc =0;_gfgc < _cfaa ;_gfgc ++{_fcbd =_daea (_fbeb .Data [_ddbf +_gfgc ]<<_dcee ,_fbeb .Data [_ddbf +_gfgc +1]>>_eead ,_fdce );
_dabfb .Data [_ffbc +_gfgc ]|=_fcbd ;};_ffbc +=_dabfb .RowStride ;_ddbf +=_fbeb .RowStride ;};};if _fcfc {for _caec =0;_caec < _dee ;_caec ++{_fcbd =_fbeb .Data [_adce ]<<_dcee ;if _daffe {_fcbd =_daea (_fcbd ,_fbeb .Data [_adce +1]>>_eead ,_fdce );};_dabfb .Data [_bdae ]=_daea (_dabfb .Data [_bdae ],_fcbd |_dabfb .Data [_bdae ],_aefc );
_bdae +=_dabfb .RowStride ;_adce +=_fbeb .RowStride ;};};case PixSrcAndDst :if _bfdee {for _caec =0;_caec < _dee ;_caec ++{if _dgaeg ==_dfed {_fcbd =_fbeb .Data [_defd ]<<_dcee ;if _febd {_fcbd =_daea (_fcbd ,_fbeb .Data [_defd +1]>>_eead ,_fdce );};}else {_fcbd =_fbeb .Data [_defd ]>>_eead ;
};_dabfb .Data [_fagc ]=_daea (_dabfb .Data [_fagc ],_fcbd &_dabfb .Data [_fagc ],_afec );_fagc +=_dabfb .RowStride ;_defd +=_fbeb .RowStride ;};};if _gfge {for _caec =0;_caec < _dee ;_caec ++{for _gfgc =0;_gfgc < _cfaa ;_gfgc ++{_fcbd =_daea (_fbeb .Data [_ddbf +_gfgc ]<<_dcee ,_fbeb .Data [_ddbf +_gfgc +1]>>_eead ,_fdce );
_dabfb .Data [_ffbc +_gfgc ]&=_fcbd ;};_ffbc +=_dabfb .RowStride ;_ddbf +=_fbeb .RowStride ;};};if _fcfc {for _caec =0;_caec < _dee ;_caec ++{_fcbd =_fbeb .Data [_adce ]<<_dcee ;if _daffe {_fcbd =_daea (_fcbd ,_fbeb .Data [_adce +1]>>_eead ,_fdce );};_dabfb .Data [_bdae ]=_daea (_dabfb .Data [_bdae ],_fcbd &_dabfb .Data [_bdae ],_aefc );
_bdae +=_dabfb .RowStride ;_adce +=_fbeb .RowStride ;};};case PixSrcXorDst :if _bfdee {for _caec =0;_caec < _dee ;_caec ++{if _dgaeg ==_dfed {_fcbd =_fbeb .Data [_defd ]<<_dcee ;if _febd {_fcbd =_daea (_fcbd ,_fbeb .Data [_defd +1]>>_eead ,_fdce );};}else {_fcbd =_fbeb .Data [_defd ]>>_eead ;
};_dabfb .Data [_fagc ]=_daea (_dabfb .Data [_fagc ],_fcbd ^_dabfb .Data [_fagc ],_afec );_fagc +=_dabfb .RowStride ;_defd +=_fbeb .RowStride ;};};if _gfge {for _caec =0;_caec < _dee ;_caec ++{for _gfgc =0;_gfgc < _cfaa ;_gfgc ++{_fcbd =_daea (_fbeb .Data [_ddbf +_gfgc ]<<_dcee ,_fbeb .Data [_ddbf +_gfgc +1]>>_eead ,_fdce );
_dabfb .Data [_ffbc +_gfgc ]^=_fcbd ;};_ffbc +=_dabfb .RowStride ;_ddbf +=_fbeb .RowStride ;};};if _fcfc {for _caec =0;_caec < _dee ;_caec ++{_fcbd =_fbeb .Data [_adce ]<<_dcee ;if _daffe {_fcbd =_daea (_fcbd ,_fbeb .Data [_adce +1]>>_eead ,_fdce );};_dabfb .Data [_bdae ]=_daea (_dabfb .Data [_bdae ],_fcbd ^_dabfb .Data [_bdae ],_aefc );
_bdae +=_dabfb .RowStride ;_adce +=_fbeb .RowStride ;};};case PixNotSrcOrDst :if _bfdee {for _caec =0;_caec < _dee ;_caec ++{if _dgaeg ==_dfed {_fcbd =_fbeb .Data [_defd ]<<_dcee ;if _febd {_fcbd =_daea (_fcbd ,_fbeb .Data [_defd +1]>>_eead ,_fdce );};
}else {_fcbd =_fbeb .Data [_defd ]>>_eead ;};_dabfb .Data [_fagc ]=_daea (_dabfb .Data [_fagc ],^_fcbd |_dabfb .Data [_fagc ],_afec );_fagc +=_dabfb .RowStride ;_defd +=_fbeb .RowStride ;};};if _gfge {for _caec =0;_caec < _dee ;_caec ++{for _gfgc =0;_gfgc < _cfaa ;
_gfgc ++{_fcbd =_daea (_fbeb .Data [_ddbf +_gfgc ]<<_dcee ,_fbeb .Data [_ddbf +_gfgc +1]>>_eead ,_fdce );_dabfb .Data [_ffbc +_gfgc ]|=^_fcbd ;};_ffbc +=_dabfb .RowStride ;_ddbf +=_fbeb .RowStride ;};};if _fcfc {for _caec =0;_caec < _dee ;_caec ++{_fcbd =_fbeb .Data [_adce ]<<_dcee ;
if _daffe {_fcbd =_daea (_fcbd ,_fbeb .Data [_adce +1]>>_eead ,_fdce );};_dabfb .Data [_bdae ]=_daea (_dabfb .Data [_bdae ],^_fcbd |_dabfb .Data [_bdae ],_aefc );_bdae +=_dabfb .RowStride ;_adce +=_fbeb .RowStride ;};};case PixNotSrcAndDst :if _bfdee {for _caec =0;
_caec < _dee ;_caec ++{if _dgaeg ==_dfed {_fcbd =_fbeb .Data [_defd ]<<_dcee ;if _febd {_fcbd =_daea (_fcbd ,_fbeb .Data [_defd +1]>>_eead ,_fdce );};}else {_fcbd =_fbeb .Data [_defd ]>>_eead ;};_dabfb .Data [_fagc ]=_daea (_dabfb .Data [_fagc ],^_fcbd &_dabfb .Data [_fagc ],_afec );
_fagc +=_dabfb .RowStride ;_defd +=_fbeb .RowStride ;};};if _gfge {for _caec =0;_caec < _dee ;_caec ++{for _gfgc =0;_gfgc < _cfaa ;_gfgc ++{_fcbd =_daea (_fbeb .Data [_ddbf +_gfgc ]<<_dcee ,_fbeb .Data [_ddbf +_gfgc +1]>>_eead ,_fdce );_dabfb .Data [_ffbc +_gfgc ]&=^_fcbd ;
};_ffbc +=_dabfb .RowStride ;_ddbf +=_fbeb .RowStride ;};};if _fcfc {for _caec =0;_caec < _dee ;_caec ++{_fcbd =_fbeb .Data [_adce ]<<_dcee ;if _daffe {_fcbd =_daea (_fcbd ,_fbeb .Data [_adce +1]>>_eead ,_fdce );};_dabfb .Data [_bdae ]=_daea (_dabfb .Data [_bdae ],^_fcbd &_dabfb .Data [_bdae ],_aefc );
_bdae +=_dabfb .RowStride ;_adce +=_fbeb .RowStride ;};};case PixSrcOrNotDst :if _bfdee {for _caec =0;_caec < _dee ;_caec ++{if _dgaeg ==_dfed {_fcbd =_fbeb .Data [_defd ]<<_dcee ;if _febd {_fcbd =_daea (_fcbd ,_fbeb .Data [_defd +1]>>_eead ,_fdce );};
}else {_fcbd =_fbeb .Data [_defd ]>>_eead ;};_dabfb .Data [_fagc ]=_daea (_dabfb .Data [_fagc ],_fcbd |^_dabfb .Data [_fagc ],_afec );_fagc +=_dabfb .RowStride ;_defd +=_fbeb .RowStride ;};};if _gfge {for _caec =0;_caec < _dee ;_caec ++{for _gfgc =0;_gfgc < _cfaa ;
_gfgc ++{_fcbd =_daea (_fbeb .Data [_ddbf +_gfgc ]<<_dcee ,_fbeb .Data [_ddbf +_gfgc +1]>>_eead ,_fdce );_dabfb .Data [_ffbc +_gfgc ]=_fcbd |^_dabfb .Data [_ffbc +_gfgc ];};_ffbc +=_dabfb .RowStride ;_ddbf +=_fbeb .RowStride ;};};if _fcfc {for _caec =0;
_caec < _dee ;_caec ++{_fcbd =_fbeb .Data [_adce ]<<_dcee ;if _daffe {_fcbd =_daea (_fcbd ,_fbeb .Data [_adce +1]>>_eead ,_fdce );};_dabfb .Data [_bdae ]=_daea (_dabfb .Data [_bdae ],_fcbd |^_dabfb .Data [_bdae ],_aefc );_bdae +=_dabfb .RowStride ;_adce +=_fbeb .RowStride ;
};};case PixSrcAndNotDst :if _bfdee {for _caec =0;_caec < _dee ;_caec ++{if _dgaeg ==_dfed {_fcbd =_fbeb .Data [_defd ]<<_dcee ;if _febd {_fcbd =_daea (_fcbd ,_fbeb .Data [_defd +1]>>_eead ,_fdce );};}else {_fcbd =_fbeb .Data [_defd ]>>_eead ;};_dabfb .Data [_fagc ]=_daea (_dabfb .Data [_fagc ],_fcbd &^_dabfb .Data [_fagc ],_afec );
_fagc +=_dabfb .RowStride ;_defd +=_fbeb .RowStride ;};};if _gfge {for _caec =0;_caec < _dee ;_caec ++{for _gfgc =0;_gfgc < _cfaa ;_gfgc ++{_fcbd =_daea (_fbeb .Data [_ddbf +_gfgc ]<<_dcee ,_fbeb .Data [_ddbf +_gfgc +1]>>_eead ,_fdce );_dabfb .Data [_ffbc +_gfgc ]=_fcbd &^_dabfb .Data [_ffbc +_gfgc ];
};_ffbc +=_dabfb .RowStride ;_ddbf +=_fbeb .RowStride ;};};if _fcfc {for _caec =0;_caec < _dee ;_caec ++{_fcbd =_fbeb .Data [_adce ]<<_dcee ;if _daffe {_fcbd =_daea (_fcbd ,_fbeb .Data [_adce +1]>>_eead ,_fdce );};_dabfb .Data [_bdae ]=_daea (_dabfb .Data [_bdae ],_fcbd &^_dabfb .Data [_bdae ],_aefc );
_bdae +=_dabfb .RowStride ;_adce +=_fbeb .RowStride ;};};case PixNotPixSrcOrDst :if _bfdee {for _caec =0;_caec < _dee ;_caec ++{if _dgaeg ==_dfed {_fcbd =_fbeb .Data [_defd ]<<_dcee ;if _febd {_fcbd =_daea (_fcbd ,_fbeb .Data [_defd +1]>>_eead ,_fdce );
};}else {_fcbd =_fbeb .Data [_defd ]>>_eead ;};_dabfb .Data [_fagc ]=_daea (_dabfb .Data [_fagc ],^(_fcbd |_dabfb .Data [_fagc ]),_afec );_fagc +=_dabfb .RowStride ;_defd +=_fbeb .RowStride ;};};if _gfge {for _caec =0;_caec < _dee ;_caec ++{for _gfgc =0;
_gfgc < _cfaa ;_gfgc ++{_fcbd =_daea (_fbeb .Data [_ddbf +_gfgc ]<<_dcee ,_fbeb .Data [_ddbf +_gfgc +1]>>_eead ,_fdce );_dabfb .Data [_ffbc +_gfgc ]=^(_fcbd |_dabfb .Data [_ffbc +_gfgc ]);};_ffbc +=_dabfb .RowStride ;_ddbf +=_fbeb .RowStride ;};};if _fcfc {for _caec =0;
_caec < _dee ;_caec ++{_fcbd =_fbeb .Data [_adce ]<<_dcee ;if _daffe {_fcbd =_daea (_fcbd ,_fbeb .Data [_adce +1]>>_eead ,_fdce );};_dabfb .Data [_bdae ]=_daea (_dabfb .Data [_bdae ],^(_fcbd |_dabfb .Data [_bdae ]),_aefc );_bdae +=_dabfb .RowStride ;_adce +=_fbeb .RowStride ;
};};case PixNotPixSrcAndDst :if _bfdee {for _caec =0;_caec < _dee ;_caec ++{if _dgaeg ==_dfed {_fcbd =_fbeb .Data [_defd ]<<_dcee ;if _febd {_fcbd =_daea (_fcbd ,_fbeb .Data [_defd +1]>>_eead ,_fdce );};}else {_fcbd =_fbeb .Data [_defd ]>>_eead ;};_dabfb .Data [_fagc ]=_daea (_dabfb .Data [_fagc ],^(_fcbd &_dabfb .Data [_fagc ]),_afec );
_fagc +=_dabfb .RowStride ;_defd +=_fbeb .RowStride ;};};if _gfge {for _caec =0;_caec < _dee ;_caec ++{for _gfgc =0;_gfgc < _cfaa ;_gfgc ++{_fcbd =_daea (_fbeb .Data [_ddbf +_gfgc ]<<_dcee ,_fbeb .Data [_ddbf +_gfgc +1]>>_eead ,_fdce );_dabfb .Data [_ffbc +_gfgc ]=^(_fcbd &_dabfb .Data [_ffbc +_gfgc ]);
};_ffbc +=_dabfb .RowStride ;_ddbf +=_fbeb .RowStride ;};};if _fcfc {for _caec =0;_caec < _dee ;_caec ++{_fcbd =_fbeb .Data [_adce ]<<_dcee ;if _daffe {_fcbd =_daea (_fcbd ,_fbeb .Data [_adce +1]>>_eead ,_fdce );};_dabfb .Data [_bdae ]=_daea (_dabfb .Data [_bdae ],^(_fcbd &_dabfb .Data [_bdae ]),_aefc );
_bdae +=_dabfb .RowStride ;_adce +=_fbeb .RowStride ;};};case PixNotPixSrcXorDst :if _bfdee {for _caec =0;_caec < _dee ;_caec ++{if _dgaeg ==_dfed {_fcbd =_fbeb .Data [_defd ]<<_dcee ;if _febd {_fcbd =_daea (_fcbd ,_fbeb .Data [_defd +1]>>_eead ,_fdce );
};}else {_fcbd =_fbeb .Data [_defd ]>>_eead ;};_dabfb .Data [_fagc ]=_daea (_dabfb .Data [_fagc ],^(_fcbd ^_dabfb .Data [_fagc ]),_afec );_fagc +=_dabfb .RowStride ;_defd +=_fbeb .RowStride ;};};if _gfge {for _caec =0;_caec < _dee ;_caec ++{for _gfgc =0;
_gfgc < _cfaa ;_gfgc ++{_fcbd =_daea (_fbeb .Data [_ddbf +_gfgc ]<<_dcee ,_fbeb .Data [_ddbf +_gfgc +1]>>_eead ,_fdce );_dabfb .Data [_ffbc +_gfgc ]=^(_fcbd ^_dabfb .Data [_ffbc +_gfgc ]);};_ffbc +=_dabfb .RowStride ;_ddbf +=_fbeb .RowStride ;};};if _fcfc {for _caec =0;
_caec < _dee ;_caec ++{_fcbd =_fbeb .Data [_adce ]<<_dcee ;if _daffe {_fcbd =_daea (_fcbd ,_fbeb .Data [_adce +1]>>_eead ,_fdce );};_dabfb .Data [_bdae ]=_daea (_dabfb .Data [_bdae ],^(_fcbd ^_dabfb .Data [_bdae ]),_aefc );_bdae +=_dabfb .RowStride ;_adce +=_fbeb .RowStride ;
};};default:_gg .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",_fbbf );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 _bbfa (_ecefb *Bitmap ,_ggdg int )(*Bitmap ,error ){const _efaa ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _ecefb ==nil {return nil ,_f .Error (_efaa ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _ggdg <=0{return nil ,_f .Error (_efaa ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _ggdg ==1{_cddc ,_baca :=_dbfae (nil ,_ecefb );if _baca !=nil {return nil ,_f .Wrap (_baca ,_efaa ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");
};return _cddc ,nil ;};_bdcf ,_ccfe :=_bdf (_ecefb ,_ggdg ,_ggdg );if _ccfe !=nil {return nil ,_f .Wrap (_ccfe ,_efaa ,"");};return _bdcf ,nil ;};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _egeb ,_gagc int ;_bcb :=src .RowStride -1;
if x < 0{_gagc =-x ;x =0;}else if x +src .Width > dst .Width {_bcb -=src .Width +x -dst .Width ;};if y < 0{_egeb =-y ;y =0;_gagc +=src .RowStride ;_bcb +=src .RowStride ;}else if y +src .Height > dst .Height {_egeb =src .Height +y -dst .Height ;};var (_gcce int ;
_gee error ;);_efa :=x &0x07;_ddde :=8-_efa ;_egc :=src .Width &0x07;_ced :=_ddde -_egc ;_ggbe :=_ddde &0x07!=0;_bfbe :=src .Width <=((_bcb -_gagc )<<3)+_ddde ;_cebe :=dst .GetByteIndex (x ,y );_ebd :=_egeb +dst .Height ;if src .Height > _ebd {_gcce =_ebd ;
}else {_gcce =src .Height ;};switch {case !_ggbe :_gee =_bccd (src ,dst ,_egeb ,_gcce ,_cebe ,_gagc ,_bcb ,op );case _bfbe :_gee =_dcbb (src ,dst ,_egeb ,_gcce ,_cebe ,_gagc ,_bcb ,_ced ,_efa ,_ddde ,op );default:_gee =_ebea (src ,dst ,_egeb ,_gcce ,_cebe ,_gagc ,_bcb ,_ced ,_efa ,_ddde ,op ,_egc );
};return _gee ;};func (_efcg *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _efcg .removeBorderGeneral (left ,right ,top ,bot );};func TstWriteSymbols (t *_g .T ,bms *Bitmaps ,src *Bitmap ){for _bgad :=0;_bgad < bms .Size ();
_bgad ++{_dcgc :=bms .Values [_bgad ];_acec :=bms .Boxes [_bgad ];_gcbb :=src .RasterOperation (_acec .Min .X ,_acec .Min .Y ,_dcgc .Width ,_dcgc .Height ,PixSrc ,_dcgc ,0,0);_d .NoError (t ,_gcbb );};};const _dgcg =5000;func (_adeg *ClassedPoints )Less (i ,j int )bool {return _adeg ._abda (i ,j )};
const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);var (_ebcc =_bae ();_agga =_adf ();_egaa =_eaf (););func _fbf ()(_cdb []byte ){_cdb =make ([]byte ,256);for _cgc :=0;_cgc < 256;_cgc ++{_befg :=byte (_cgc );
_cdb [_befg ]=(_befg &0x01)|((_befg &0x04)>>1)|((_befg &0x10)>>2)|((_befg &0x40)>>3)|((_befg &0x02)<<3)|((_befg &0x08)<<2)|((_befg &0x20)<<1)|(_befg &0x80);};return _cdb ;};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func _bcca (_ecdg ,_ecfg int )int {if _ecdg > _ecfg {return _ecdg ;
};return _ecfg ;};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func _fedf (_befb *Bitmap ,_ccfca ,_gef ,_bfbfb ,_acba int ,_eacf RasterOperator ,_ggfbf *Bitmap ,_gecc ,_bagff int )error {const _dabfg ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";
if _befb ==nil {return _f .Error (_dabfg ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _eacf ==PixDst {return nil ;};switch _eacf {case PixClr ,PixSet ,PixNotDst :_gdedb (_befb ,_ccfca ,_gef ,_bfbfb ,_acba ,_eacf );
return nil ;};if _ggfbf ==nil {_gg .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 (_dabfg ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _gfag :=_gddac (_befb ,_ccfca ,_gef ,_bfbfb ,_acba ,_eacf ,_ggfbf ,_gecc ,_bagff );_gfag !=nil {return _f .Wrap (_gfag ,_dabfg ,"");
};return nil ;};func (_cgge *Bitmap )inverseData (){if _agde :=_cgge .RasterOperation (0,0,_cgge .Width ,_cgge .Height ,PixNotDst ,nil ,0,0);_agde !=nil {_gg .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_agde );
};if _cgge .Color ==Chocolate {_cgge .Color =Vanilla ;}else {_cgge .Color =Chocolate ;};};func _efbd (_faaa ,_dfdb *Bitmap ,_accfg *Selection )(*Bitmap ,error ){const _ggg ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _aafa error ;
if _faaa ,_aafa =_cdcg (_faaa ,_dfdb ,_accfg );_aafa !=nil {return nil ,_aafa ;};_efff ,_aafa :=_afgc (nil ,_dfdb ,_accfg );if _aafa !=nil {return nil ,_f .Wrap (_aafa ,_ggg ,"");};if _ ,_aafa =_afbe (_faaa ,_efff ,_accfg );_aafa !=nil {return nil ,_f .Wrap (_aafa ,_ggg ,"");
};return _faaa ,nil ;};func (_cce *Bitmap )GetVanillaData ()[]byte {if _cce .Color ==Chocolate {_cce .inverseData ();};return _cce .Data ;};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_gggd :=_egfea (h ,w ,"");_gggd .setOrigin (cy ,cx );
var _ecea ,_ffeee int ;for _ecea =0;_ecea < h ;_ecea ++{for _ffeee =0;_ffeee < w ;_ffeee ++{_gggd .Data [_ecea ][_ffeee ]=tp ;};};return _gggd ;};func _dcbb (_bcaa ,_bbef *Bitmap ,_ffga ,_dabe ,_fae ,_fdc ,_fca ,_afg ,_cgcc ,_fefg int ,_fbdbf CombinationOperator )error {var _aade int ;
_acgc :=func (){_aade ++;_fae +=_bbef .RowStride ;_fdc +=_bcaa .RowStride ;_fca +=_bcaa .RowStride };for _aade =_ffga ;_aade < _dabe ;_acgc (){var _eace uint16 ;_fbgc :=_fae ;for _bgdc :=_fdc ;_bgdc <=_fca ;_bgdc ++{_faeg ,_edb :=_bbef .GetByte (_fbgc );
if _edb !=nil {return _edb ;};_fcfb ,_edb :=_bcaa .GetByte (_bgdc );if _edb !=nil {return _edb ;};_eace =(_eace |uint16 (_fcfb ))<<uint (_fefg );_fcfb =byte (_eace >>8);if _bgdc ==_fca {_fcfb =_dgae (uint (_afg ),_fcfb );};if _edb =_bbef .SetByte (_fbgc ,_aefb (_faeg ,_fcfb ,_fbdbf ));
_edb !=nil {return _edb ;};_fbgc ++;_eace <<=uint (_cgcc );};};return nil ;};const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func (_afgd *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _aede ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";
if _afgd ==nil {return nil ,_f .Error (_aede ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_afgd .Values )-1{return nil ,_f .Errorf (_aede ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _afgd .Values [i ],nil ;};func TstImageBitmapData ()[]byte {return _cfbf .Data };func (_dabgf *Bitmap )String ()string {var _bbg ="\u000a";for _egda :=0;_egda < _dabgf .Height ;_egda ++{var _fab string ;for _gdd :=0;_gdd < _dabgf .Width ;_gdd ++{_bfd :=_dabgf .GetPixel (_gdd ,_egda );
if _bfd {_fab +="\u0031";}else {_fab +="\u0030";};};_bbg +=_fab +"\u000a";};return _bbg ;};func (_cdbc *Bitmap )addBorderGeneral (_gdca ,_fdg ,_dcff ,_dbg int ,_gdbb int )(*Bitmap ,error ){const _acce ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
if _gdca < 0||_fdg < 0||_dcff < 0||_dbg < 0{return nil ,_f .Error (_acce ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_gaf ,_fgbd :=_cdbc .Width ,_cdbc .Height ;_gab :=_gaf +_gdca +_fdg ;_dbfa :=_fgbd +_dcff +_dbg ;
_fbccf :=New (_gab ,_dbfa );_fbccf .Color =_cdbc .Color ;_dgcec :=PixClr ;if _gdbb > 0{_dgcec =PixSet ;};_bdee :=_fbccf .RasterOperation (0,0,_gdca ,_dbfa ,_dgcec ,nil ,0,0);if _bdee !=nil {return nil ,_f .Wrap (_bdee ,_acce ,"\u006c\u0065\u0066\u0074");
};_bdee =_fbccf .RasterOperation (_gab -_fdg ,0,_fdg ,_dbfa ,_dgcec ,nil ,0,0);if _bdee !=nil {return nil ,_f .Wrap (_bdee ,_acce ,"\u0072\u0069\u0067h\u0074");};_bdee =_fbccf .RasterOperation (0,0,_gab ,_dcff ,_dgcec ,nil ,0,0);if _bdee !=nil {return nil ,_f .Wrap (_bdee ,_acce ,"\u0074\u006f\u0070");
};_bdee =_fbccf .RasterOperation (0,_dbfa -_dbg ,_gab ,_dbg ,_dgcec ,nil ,0,0);if _bdee !=nil {return nil ,_f .Wrap (_bdee ,_acce ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_bdee =_fbccf .RasterOperation (_gdca ,_dcff ,_gaf ,_fgbd ,PixSrc ,_cdbc ,0,0);
if _bdee !=nil {return nil ,_f .Wrap (_bdee ,_acce ,"\u0063\u006f\u0070\u0079");};return _fbccf ,nil ;};func (_bedg *Bitmap )setEightPartlyBytes (_bbdg ,_eacb int ,_fed uint64 )(_dgcfa error ){var (_dcag byte ;_fdag int ;);const _dfda ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";
for _edeb :=1;_edeb <=_eacb ;_edeb ++{_fdag =64-_edeb *8;_dcag =byte (_fed >>uint (_fdag )&0xff);_gg .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",_dcag ,_bbdg ,_bbdg +_edeb -1,_eacb ,_fdag );
if _dgcfa =_bedg .SetByte (_bbdg +_edeb -1,_dcag );_dgcfa !=nil {return _f .Wrap (_dgcfa ,_dfda ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_bgf :=_bedg .RowStride *8-_bedg .Width ;if _bgf ==0{return nil ;};_fdag -=8;_dcag =byte (_fed >>uint (_fdag )&0xff)<<uint (_bgf );
if _dgcfa =_bedg .SetByte (_bbdg +_eacb ,_dcag );_dgcfa !=nil {return _f .Wrap (_dgcfa ,_dfda ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func (_bgfb Points )XSorter ()func (_ggbg ,_bbaf int )bool {return func (_aead ,_beaf int )bool {return _bgfb [_aead ].X < _bgfb [_beaf ].X };
};func (_gbfg MorphProcess )verify (_ccgd int ,_dcgg ,_dbeg *int )error {const _ddcf ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";switch _gbfg .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_gbfg .Arguments )!=2{return _f .Error (_ddcf ,"\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");
};_cbf ,_dbec :=_gbfg .getWidthHeight ();if _cbf <=0||_dbec <=0{return _f .Error (_ddcf ,"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 :_dagc :=len (_gbfg .Arguments );*_dcgg +=_dagc ;if _dagc < 1||_dagc > 4{return _f .Error (_ddcf ,"\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 _cbdg :=0;_cbdg < _dagc ;_cbdg ++{if _gbfg .Arguments [_cbdg ]< 1||_gbfg .Arguments [_cbdg ]> 4{return _f .Error (_ddcf ,"\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 (_gbfg .Arguments )==0{return _f .Error (_ddcf ,"\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");
};_eeba :=_gbfg .Arguments [0];if _eeba !=2&&_eeba !=4&&_eeba !=8{return _f .Error (_ddcf ,"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");
};*_dcgg -=_bdga [_eeba /4];case MopAddBorder :if len (_gbfg .Arguments )==0{return _f .Error (_ddcf ,"\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");
};_gagb :=_gbfg .Arguments [0];if _ccgd > 0{return _f .Error (_ddcf ,"\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 _gagb < 1{return _f .Error (_ddcf ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_dbeg =_gagb ;};return nil ;};type RasterOperator int ;func (_aee *Bitmap )GetPixel (x ,y int )bool {_gff :=_aee .GetByteIndex (x ,y );
_bgd :=_aee .GetBitOffset (x );_ada :=uint (7-_bgd );if _gff > len (_aee .Data )-1{_gg .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 ,_aee );
return false ;};if (_aee .Data [_gff ]>>_ada )&0x01>=1{return true ;};return false ;};func (_fgf *Bitmap )clipRectangle (_acgd ,_cafd *_fbc .Rectangle )(_cdg *Bitmap ,_afbf error ){const _ebeb ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if _acgd ==nil {return nil ,_f .Error (_ebeb ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_adbc ,_ebebb :=_fgf .Width ,_fgf .Height ;_ccf ,_afbf :=ClipBoxToRectangle (_acgd ,_adbc ,_ebebb );if _afbf !=nil {_gg .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",_afbf );
return nil ,nil ;};_bagb ,_adff :=_ccf .Min .X ,_ccf .Min .Y ;_cad ,_efd :=_ccf .Max .X -_ccf .Min .X ,_ccf .Max .Y -_ccf .Min .Y ;_cdg =New (_cad ,_efd );_cdg .Text =_fgf .Text ;if _afbf =_cdg .RasterOperation (0,0,_cad ,_efd ,PixSrc ,_fgf ,_bagb ,_adff );
_afbf !=nil {return nil ,_f .Wrap (_afbf ,_ebeb ,"");};if _cafd !=nil {*_cafd =*_ccf ;};return _cdg ,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 (_acda *Bitmap )SetByte (index int ,v byte )error {if index > len (_acda .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 );
};_acda .Data [index ]=v ;return nil ;};type SizeSelection int ;func (_cbdb *Bitmap )nextOnPixel (_aeba ,_gccc int )(_cdea _fbc .Point ,_acbb bool ,_fade error ){const _ead ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_cdea ,_acbb ,_fade =_cbdb .nextOnPixelLow (_cbdb .Width ,_cbdb .Height ,_cbdb .RowStride ,_aeba ,_gccc );
if _fade !=nil {return _cdea ,false ,_f .Wrap (_fade ,_ead ,"");};return _cdea ,_acbb ,nil ;};func (_fdcbc *Bitmaps )AddBitmap (bm *Bitmap ){_fdcbc .Values =append (_fdcbc .Values ,bm )};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;
MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);type Boxes []*_fbc .Rectangle ;func TstFrameBitmapData ()[]byte {return _afdba .Data };func _dddcc (_cdd ,_dfaf *Bitmap ,_cabg ,_gfa int )(*Bitmap ,error ){const _fdb ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";
if _dfaf ==nil {_gg .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 (_fdb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _cabg < 1||_gfa < 1{return nil ,_f .Error (_fdb ,"\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 _cabg ==1&&_gfa ==1{_bdgc ,_dege :=_dbfae (_cdd ,_dfaf );if _dege !=nil {return nil ,_f .Wrap (_dege ,_fdb ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};
return _bdgc ,nil ;};if _cabg ==1||_gfa ==1{_gdfbg :=SelCreateBrick (_gfa ,_cabg ,_gfa /2,_cabg /2,SelHit );_fgge ,_fbgd :=_afgc (_cdd ,_dfaf ,_gdfbg );if _fbgd !=nil {return nil ,_f .Wrap (_fbgd ,_fdb ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _fgge ,nil ;};_gacfd :=SelCreateBrick (1,_cabg ,0,_cabg /2,SelHit );_bgc :=SelCreateBrick (_gfa ,1,_gfa /2,0,SelHit );_ceeab ,_dcbg :=_afgc (nil ,_dfaf ,_gacfd );if _dcbg !=nil {return nil ,_f .Wrap (_dcbg ,_fdb ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_cdd ,_dcbg =_afgc (_cdd ,_ceeab ,_bgc );if _dcbg !=nil {return nil ,_f .Wrap (_dcbg ,_fdb ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _cdd ,nil ;};func (_gfc *Bitmap )GetChocolateData ()[]byte {if _gfc .Color ==Vanilla {_gfc .inverseData ();
};return _gfc .Data ;};type Component int ;func (_dcccg *BitmapsArray )AddBox (box *_fbc .Rectangle ){_dcccg .Boxes =append (_dcccg .Boxes ,box )};func (_eeeccd Points )Size ()int {return len (_eeeccd )};func (_bag *Bitmap )GetUnpaddedData ()([]byte ,error ){_fge :=uint (_bag .Width &0x07);
if _fge ==0{return _bag .Data ,nil ;};_dcf :=_bag .Width *_bag .Height ;if _dcf %8!=0{_dcf >>=3;_dcf ++;}else {_dcf >>=3;};_cfe :=make ([]byte ,_dcf );_cdcd :=_a .NewWriterMSB (_cfe );const _feb ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
for _babc :=0;_babc < _bag .Height ;_babc ++{for _bgb :=0;_bgb < _bag .RowStride ;_bgb ++{_gaa :=_bag .Data [_babc *_bag .RowStride +_bgb ];if _bgb !=_bag .RowStride -1{_afa :=_cdcd .WriteByte (_gaa );if _afa !=nil {return nil ,_f .Wrap (_afa ,_feb ,"");
};continue ;};for _afc :=uint (0);_afc < _fge ;_afc ++{_adaa :=_cdcd .WriteBit (int (_gaa >>(7-_afc )&0x01));if _adaa !=nil {return nil ,_f .Wrap (_adaa ,_feb ,"");};};};};return _cfe ,nil ;};func _bfce (_gaeab *_e .Stack )(_daef *fillSegment ,_cfgf error ){const _cacf ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";
if _gaeab ==nil {return nil ,_f .Error (_cacf ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _gaeab .Aux ==nil {return nil ,_f .Error (_cacf ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");
};_gddd ,_bgaf :=_gaeab .Pop ();if !_bgaf {return nil ,nil ;};_bggg ,_bgaf :=_gddd .(*fillSegment );if !_bgaf {return nil ,_f .Error (_cacf ,"\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");
};_daef =&fillSegment {_bggg ._caddb ,_bggg ._aaad ,_bggg ._dggc +_bggg ._cdde ,_bggg ._cdde };_gaeab .Aux .Push (_bggg );return _daef ,nil ;};func (_gbe *Bitmap )ClipRectangle (box *_fbc .Rectangle )(_gfg *Bitmap ,_ddef *_fbc .Rectangle ,_efg error ){const _age ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,nil ,_f .Error (_age ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_dgc ,_ecd :=_gbe .Width ,_gbe .Height ;_gcec :=_fbc .Rect (0,0,_dgc ,_ecd );if !box .Overlaps (_gcec ){return nil ,nil ,_f .Error (_age ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");
};_dede :=box .Intersect (_gcec );_dbe ,_fde :=_dede .Min .X ,_dede .Min .Y ;_dff ,_dgcc :=_dede .Dx (),_dede .Dy ();_gfg =New (_dff ,_dgcc );_gfg .Text =_gbe .Text ;if _efg =_gfg .RasterOperation (0,0,_dff ,_dgcc ,PixSrc ,_gbe ,_dbe ,_fde );_efg !=nil {return nil ,nil ,_f .Wrap (_efg ,_age ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
};_ddef =&_dede ;return _gfg ,_ddef ,nil ;};func _defb (_eabe ,_adef *Bitmap ,_dbcc ,_dfgc int )(*Bitmap ,error ){const _adfbg ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _adef ==nil {return nil ,_f .Error (_adfbg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _dbcc < 1||_dfgc < 1{return nil ,_f .Error (_adfbg ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _dbcc ==1&&_dfgc ==1{return _adef .Copy (),nil ;};if _dbcc ==1||_dfgc ==1{_dccc :=SelCreateBrick (_dfgc ,_dbcc ,_dfgc /2,_dbcc /2,SelHit );
var _becc error ;_eabe ,_becc =_efbd (_eabe ,_adef ,_dccc );if _becc !=nil {return nil ,_f .Wrap (_becc ,_adfbg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};
return _eabe ,nil ;};_accbg :=SelCreateBrick (1,_dbcc ,0,_dbcc /2,SelHit );_fdcb :=SelCreateBrick (_dfgc ,1,_dfgc /2,0,SelHit );_gggg ,_ggab :=_afgc (nil ,_adef ,_accbg );if _ggab !=nil {return nil ,_f .Wrap (_ggab ,_adfbg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _eabe ,_ggab =_afgc (_eabe ,_gggg ,_fdcb );_ggab !=nil {return nil ,_f .Wrap (_ggab ,_adfbg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_ggab =_afbe (_gggg ,_eabe ,_accbg );_ggab !=nil {return nil ,_f .Wrap (_ggab ,_adfbg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};if _ ,_ggab =_afbe (_eabe ,_gggg ,_fdcb );_ggab !=nil {return nil ,_f .Wrap (_ggab ,_adfbg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _eabe ,nil ;};func (_gcc *Bitmap )Equals (s *Bitmap )bool {if len (_gcc .Data )!=len (s .Data )||_gcc .Width !=s .Width ||_gcc .Height !=s .Height {return false ;
};for _acbd :=0;_acbd < _gcc .Height ;_acbd ++{_ceg :=_acbd *_gcc .RowStride ;for _cbd :=0;_cbd < _gcc .RowStride ;_cbd ++{if _gcc .Data [_ceg +_cbd ]!=s .Data [_ceg +_cbd ]{return false ;};};};return true ;};func _eaf ()(_ebf [256]uint64 ){for _ebe :=0;
_ebe < 256;_ebe ++{if _ebe &0x01!=0{_ebf [_ebe ]|=0xff;};if _ebe &0x02!=0{_ebf [_ebe ]|=0xff00;};if _ebe &0x04!=0{_ebf [_ebe ]|=0xff0000;};if _ebe &0x08!=0{_ebf [_ebe ]|=0xff000000;};if _ebe &0x10!=0{_ebf [_ebe ]|=0xff00000000;};if _ebe &0x20!=0{_ebf [_ebe ]|=0xff0000000000;
};if _ebe &0x40!=0{_ebf [_ebe ]|=0xff000000000000;};if _ebe &0x80!=0{_ebf [_ebe ]|=0xff00000000000000;};};return _ebf ;};func _ccfce (_ddcb ,_gfgb *Bitmap ,_dadb *Selection )(*Bitmap ,error ){const _fbcdg ="\u006f\u0070\u0065\u006e";var _ggacf error ;_ddcb ,_ggacf =_cdcg (_ddcb ,_gfgb ,_dadb );
if _ggacf !=nil {return nil ,_f .Wrap (_ggacf ,_fbcdg ,"");};_cbdcg ,_ggacf :=_afbe (nil ,_gfgb ,_dadb );if _ggacf !=nil {return nil ,_f .Wrap (_ggacf ,_fbcdg ,"");};_ ,_ggacf =_afgc (_ddcb ,_cbdcg ,_dadb );if _ggacf !=nil {return nil ,_f .Wrap (_ggacf ,_fbcdg ,"");
};return _ddcb ,nil ;};func _ddf (_gc *Bitmap ,_ba int )(*Bitmap ,error ){const _fbe ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _gc ==nil {return nil ,_f .Error (_fbe ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _ba ==1{return _dbfae (nil ,_gc );};if _ba !=2&&_ba !=4&&_ba !=8{return nil ,_f .Error (_fbe ,"\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");
};_eb :=_ba *_gc .Width ;_fe :=_ba *_gc .Height ;_ce :=New (_eb ,_fe );var _de error ;switch _ba {case 2:_de =_gga (_ce ,_gc );case 4:_de =_cf (_ce ,_gc );case 8:_de =_fff (_ce ,_gc );};if _de !=nil {return nil ,_f .Wrap (_de ,_fbe ,"");};return _ce ,nil ;
};func (_ceb *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _ceb .Copy (),nil ;};_edfc ,_afdf :=_ceb .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _afdf !=nil {return nil ,_f .Wrap (_afdf ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");
};return _edfc ,nil ;};func _gdedb (_cda *Bitmap ,_adag ,_fdbc ,_egbdc ,_fefgb int ,_beeg RasterOperator ){if _adag < 0{_egbdc +=_adag ;_adag =0;};_gbgb :=_adag +_egbdc -_cda .Width ;if _gbgb > 0{_egbdc -=_gbgb ;};if _fdbc < 0{_fefgb +=_fdbc ;_fdbc =0;
};_dadgb :=_fdbc +_fefgb -_cda .Height ;if _dadgb > 0{_fefgb -=_dadgb ;};if _egbdc <=0||_fefgb <=0{return ;};if (_adag &7)==0{_gbdae (_cda ,_adag ,_fdbc ,_egbdc ,_fefgb ,_beeg );}else {_dbcb (_cda ,_adag ,_fdbc ,_egbdc ,_fefgb ,_beeg );};};func _gagf (_bdcfc *Bitmap ,_dbfc *_e .Stack ,_acgef ,_efecf ,_gfbb int )(_acee *_fbc .Rectangle ,_aaa error ){const _ffbf ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _bdcfc ==nil {return nil ,_f .Error (_ffbf ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _dbfc ==nil {return nil ,_f .Error (_ffbf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};switch _gfbb {case 4:if _acee ,_aaa =_gffc (_bdcfc ,_dbfc ,_acgef ,_efecf );_aaa !=nil {return nil ,_f .Wrap (_aaa ,_ffbf ,"");};return _acee ,nil ;case 8:if _acee ,_aaa =_bafb (_bdcfc ,_dbfc ,_acgef ,_efecf );_aaa !=nil {return nil ,_f .Wrap (_aaa ,_ffbf ,"");
};return _acee ,nil ;default:return nil ,_f .Errorf (_ffbf ,"\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",_gfbb );
};};func MakePixelCentroidTab8 ()[]int {return _gafe ()};func _ebea (_efaf ,_cbab *Bitmap ,_gfeg ,_bbea ,_fcfa ,_cdbbd ,_fecg ,_ccc ,_edebc ,_efeb int ,_aag CombinationOperator ,_fbad int )error {var _bccaa int ;_dcg :=func (){_bccaa ++;_fcfa +=_cbab .RowStride ;
_cdbbd +=_efaf .RowStride ;_fecg +=_efaf .RowStride };for _bccaa =_gfeg ;_bccaa < _bbea ;_dcg (){var _ffbe uint16 ;_eebg :=_fcfa ;for _agce :=_cdbbd ;_agce <=_fecg ;_agce ++{_cggb ,_eeec :=_cbab .GetByte (_eebg );if _eeec !=nil {return _eeec ;};_ebdf ,_eeec :=_efaf .GetByte (_agce );
if _eeec !=nil {return _eeec ;};_ffbe =(_ffbe |(uint16 (_ebdf )&0xff))<<uint (_efeb );_ebdf =byte (_ffbe >>8);if _eeec =_cbab .SetByte (_eebg ,_aefb (_cggb ,_ebdf ,_aag ));_eeec !=nil {return _eeec ;};_eebg ++;_ffbe <<=uint (_edebc );if _agce ==_fecg {_ebdf =byte (_ffbe >>(8-uint8 (_efeb )));
if _fbad !=0{_ebdf =_dgae (uint (8+_ccc ),_ebdf );};_cggb ,_eeec =_cbab .GetByte (_eebg );if _eeec !=nil {return _eeec ;};if _eeec =_cbab .SetByte (_eebg ,_aefb (_cggb ,_ebdf ,_aag ));_eeec !=nil {return _eeec ;};};};};return nil ;};func (_ebda *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _aeea ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";
if len (_ebda .Values )==0{return nil ,_f .Error (_aeea ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_eddc :=&BitmapsArray {};_ebda .SortByWidth ();_bcce :=-1;_edge :=-1;for _gfbgd :=0;_gfbgd < len (_ebda .Values );
_gfbgd ++{_affb :=_ebda .Values [_gfbgd ].Width ;if _affb > _bcce {_bcce =_affb ;_edge ++;_eddc .Values =append (_eddc .Values ,&Bitmaps {});};_eddc .Values [_edge ].AddBitmap (_ebda .Values [_gfbgd ]);};return _eddc ,nil ;};const (ComponentConn Component =iota ;
ComponentCharacters ;ComponentWords ;);func TstWSymbol (t *_g .T ,scale ...int )*Bitmap {_cdbd ,_cbca :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_d .NoError (t ,_cbca );return TstGetScaledSymbol (t ,_cdbd ,scale ...);};func TstGetScaledSymbol (t *_g .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;
};if scale [0]==1{return sm ;};_fcef ,_efbe :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_d .NoError (t ,_efbe );return _fcef ;};func TstRSymbol (t *_g .T ,scale ...int )*Bitmap {_fgcb ,_edfb :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});
_d .NoError (t ,_edfb );return TstGetScaledSymbol (t ,_fgcb ,scale ...);};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _adb ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
_beg :=_dabf (width ,height );_beg .Data =data ;if _cee :=((width *height )+7)>>3;len (data )< _cee {return nil ,_f .Errorf (_adb ,"\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 ),_cee );
};if _eac :=_beg .addPadBits ();_eac !=nil {return nil ,_f .Wrap (_eac ,_adb ,"");};return _beg ,nil ;};func _efeg ()[]int {_afbd :=make ([]int ,256);for _defa :=0;_defa <=0xff;_defa ++{_fbcf :=byte (_defa );_afbd [_fbcf ]=int (_fbcf &0x1)+(int (_fbcf >>1)&0x1)+(int (_fbcf >>2)&0x1)+(int (_fbcf >>3)&0x1)+(int (_fbcf >>4)&0x1)+(int (_fbcf >>5)&0x1)+(int (_fbcf >>6)&0x1)+(int (_fbcf >>7)&0x1);
};return _afbd ;};func (_cag *Boxes )Get (i int )(*_fbc .Rectangle ,error ){const _gacf ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _cag ==nil {return nil ,_f .Error (_gacf ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if i > len (*_cag )-1{return nil ,_f .Errorf (_gacf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_cag )[i ],nil ;};func (_bbaae *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _fgfg ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";
if len (_bbaae .Values )==0{return nil ,_f .Error (_fgfg ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_efaag :=&BitmapsArray {};_bbaae .SortByHeight ();_cfgc :=-1;_bdebe :=-1;for _egefd :=0;_egefd < len (_bbaae .Values );
_egefd ++{_cdbe :=_bbaae .Values [_egefd ].Height ;if _cdbe > _cfgc {_cfgc =_cdbe ;_bdebe ++;_efaag .Values =append (_efaag .Values ,&Bitmaps {});};_efaag .Values [_bdebe ].AddBitmap (_bbaae .Values [_egefd ]);};return _efaag ,nil ;};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _acfc (src ,sequence ...);
};func _fff (_geb ,_gbc *Bitmap )(_cg error ){const _ed ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_gge :=_gbc .RowStride ;_ggd :=_geb .RowStride ;var _fa ,_dd ,_gbg ,_acd ,_dfa int ;for _gbg =0;
_gbg < _gbc .Height ;_gbg ++{_fa =_gbg *_gge ;_dd =8*_gbg *_ggd ;for _acd =0;_acd < _gge ;_acd ++{if _cg =_geb .setEightBytes (_dd +_acd *8,_egaa [_gbc .Data [_fa +_acd ]]);_cg !=nil {return _f .Wrap (_cg ,_ed ,"");};};for _dfa =1;_dfa < 8;_dfa ++{for _acd =0;
_acd < _ggd ;_acd ++{if _cg =_geb .SetByte (_dd +_dfa *_ggd +_acd ,_geb .Data [_dd +_acd ]);_cg !=nil {return _f .Wrap (_cg ,_ed ,"");};};};};return nil ;};func _geea (_dfgbc *Bitmap ,_afea ,_ceca ,_gbda ,_bbfd int ,_bcgag RasterOperator ,_bdgce *Bitmap ,_cffd ,_fagg int )error {var (_befc byte ;
_cfff int ;_fdbd int ;_dbee ,_cbgg int ;_eecbd ,_gcaa int ;);_cdef :=_gbda >>3;_gfecb :=_gbda &7;if _gfecb > 0{_befc =_gccbe [_gfecb ];};_cfff =_bdgce .RowStride *_fagg +(_cffd >>3);_fdbd =_dfgbc .RowStride *_ceca +(_afea >>3);switch _bcgag {case PixSrc :for _eecbd =0;
_eecbd < _bbfd ;_eecbd ++{_dbee =_cfff +_eecbd *_bdgce .RowStride ;_cbgg =_fdbd +_eecbd *_dfgbc .RowStride ;for _gcaa =0;_gcaa < _cdef ;_gcaa ++{_dfgbc .Data [_cbgg ]=_bdgce .Data [_dbee ];_cbgg ++;_dbee ++;};if _gfecb > 0{_dfgbc .Data [_cbgg ]=_daea (_dfgbc .Data [_cbgg ],_bdgce .Data [_dbee ],_befc );
};};case PixNotSrc :for _eecbd =0;_eecbd < _bbfd ;_eecbd ++{_dbee =_cfff +_eecbd *_bdgce .RowStride ;_cbgg =_fdbd +_eecbd *_dfgbc .RowStride ;for _gcaa =0;_gcaa < _cdef ;_gcaa ++{_dfgbc .Data [_cbgg ]=^(_bdgce .Data [_dbee ]);_cbgg ++;_dbee ++;};if _gfecb > 0{_dfgbc .Data [_cbgg ]=_daea (_dfgbc .Data [_cbgg ],^_bdgce .Data [_dbee ],_befc );
};};case PixSrcOrDst :for _eecbd =0;_eecbd < _bbfd ;_eecbd ++{_dbee =_cfff +_eecbd *_bdgce .RowStride ;_cbgg =_fdbd +_eecbd *_dfgbc .RowStride ;for _gcaa =0;_gcaa < _cdef ;_gcaa ++{_dfgbc .Data [_cbgg ]|=_bdgce .Data [_dbee ];_cbgg ++;_dbee ++;};if _gfecb > 0{_dfgbc .Data [_cbgg ]=_daea (_dfgbc .Data [_cbgg ],_bdgce .Data [_dbee ]|_dfgbc .Data [_cbgg ],_befc );
};};case PixSrcAndDst :for _eecbd =0;_eecbd < _bbfd ;_eecbd ++{_dbee =_cfff +_eecbd *_bdgce .RowStride ;_cbgg =_fdbd +_eecbd *_dfgbc .RowStride ;for _gcaa =0;_gcaa < _cdef ;_gcaa ++{_dfgbc .Data [_cbgg ]&=_bdgce .Data [_dbee ];_cbgg ++;_dbee ++;};if _gfecb > 0{_dfgbc .Data [_cbgg ]=_daea (_dfgbc .Data [_cbgg ],_bdgce .Data [_dbee ]&_dfgbc .Data [_cbgg ],_befc );
};};case PixSrcXorDst :for _eecbd =0;_eecbd < _bbfd ;_eecbd ++{_dbee =_cfff +_eecbd *_bdgce .RowStride ;_cbgg =_fdbd +_eecbd *_dfgbc .RowStride ;for _gcaa =0;_gcaa < _cdef ;_gcaa ++{_dfgbc .Data [_cbgg ]^=_bdgce .Data [_dbee ];_cbgg ++;_dbee ++;};if _gfecb > 0{_dfgbc .Data [_cbgg ]=_daea (_dfgbc .Data [_cbgg ],_bdgce .Data [_dbee ]^_dfgbc .Data [_cbgg ],_befc );
};};case PixNotSrcOrDst :for _eecbd =0;_eecbd < _bbfd ;_eecbd ++{_dbee =_cfff +_eecbd *_bdgce .RowStride ;_cbgg =_fdbd +_eecbd *_dfgbc .RowStride ;for _gcaa =0;_gcaa < _cdef ;_gcaa ++{_dfgbc .Data [_cbgg ]|=^(_bdgce .Data [_dbee ]);_cbgg ++;_dbee ++;};
if _gfecb > 0{_dfgbc .Data [_cbgg ]=_daea (_dfgbc .Data [_cbgg ],^(_bdgce .Data [_dbee ])|_dfgbc .Data [_cbgg ],_befc );};};case PixNotSrcAndDst :for _eecbd =0;_eecbd < _bbfd ;_eecbd ++{_dbee =_cfff +_eecbd *_bdgce .RowStride ;_cbgg =_fdbd +_eecbd *_dfgbc .RowStride ;
for _gcaa =0;_gcaa < _cdef ;_gcaa ++{_dfgbc .Data [_cbgg ]&=^(_bdgce .Data [_dbee ]);_cbgg ++;_dbee ++;};if _gfecb > 0{_dfgbc .Data [_cbgg ]=_daea (_dfgbc .Data [_cbgg ],^(_bdgce .Data [_dbee ])&_dfgbc .Data [_cbgg ],_befc );};};case PixSrcOrNotDst :for _eecbd =0;
_eecbd < _bbfd ;_eecbd ++{_dbee =_cfff +_eecbd *_bdgce .RowStride ;_cbgg =_fdbd +_eecbd *_dfgbc .RowStride ;for _gcaa =0;_gcaa < _cdef ;_gcaa ++{_dfgbc .Data [_cbgg ]=_bdgce .Data [_dbee ]|^(_dfgbc .Data [_cbgg ]);_cbgg ++;_dbee ++;};if _gfecb > 0{_dfgbc .Data [_cbgg ]=_daea (_dfgbc .Data [_cbgg ],_bdgce .Data [_dbee ]|^(_dfgbc .Data [_cbgg ]),_befc );
};};case PixSrcAndNotDst :for _eecbd =0;_eecbd < _bbfd ;_eecbd ++{_dbee =_cfff +_eecbd *_bdgce .RowStride ;_cbgg =_fdbd +_eecbd *_dfgbc .RowStride ;for _gcaa =0;_gcaa < _cdef ;_gcaa ++{_dfgbc .Data [_cbgg ]=_bdgce .Data [_dbee ]&^(_dfgbc .Data [_cbgg ]);
_cbgg ++;_dbee ++;};if _gfecb > 0{_dfgbc .Data [_cbgg ]=_daea (_dfgbc .Data [_cbgg ],_bdgce .Data [_dbee ]&^(_dfgbc .Data [_cbgg ]),_befc );};};case PixNotPixSrcOrDst :for _eecbd =0;_eecbd < _bbfd ;_eecbd ++{_dbee =_cfff +_eecbd *_bdgce .RowStride ;_cbgg =_fdbd +_eecbd *_dfgbc .RowStride ;
for _gcaa =0;_gcaa < _cdef ;_gcaa ++{_dfgbc .Data [_cbgg ]=^(_bdgce .Data [_dbee ]|_dfgbc .Data [_cbgg ]);_cbgg ++;_dbee ++;};if _gfecb > 0{_dfgbc .Data [_cbgg ]=_daea (_dfgbc .Data [_cbgg ],^(_bdgce .Data [_dbee ]|_dfgbc .Data [_cbgg ]),_befc );};};case PixNotPixSrcAndDst :for _eecbd =0;
_eecbd < _bbfd ;_eecbd ++{_dbee =_cfff +_eecbd *_bdgce .RowStride ;_cbgg =_fdbd +_eecbd *_dfgbc .RowStride ;for _gcaa =0;_gcaa < _cdef ;_gcaa ++{_dfgbc .Data [_cbgg ]=^(_bdgce .Data [_dbee ]&_dfgbc .Data [_cbgg ]);_cbgg ++;_dbee ++;};if _gfecb > 0{_dfgbc .Data [_cbgg ]=_daea (_dfgbc .Data [_cbgg ],^(_bdgce .Data [_dbee ]&_dfgbc .Data [_cbgg ]),_befc );
};};case PixNotPixSrcXorDst :for _eecbd =0;_eecbd < _bbfd ;_eecbd ++{_dbee =_cfff +_eecbd *_bdgce .RowStride ;_cbgg =_fdbd +_eecbd *_dfgbc .RowStride ;for _gcaa =0;_gcaa < _cdef ;_gcaa ++{_dfgbc .Data [_cbgg ]=^(_bdgce .Data [_dbee ]^_dfgbc .Data [_cbgg ]);
_cbgg ++;_dbee ++;};if _gfecb > 0{_dfgbc .Data [_cbgg ]=_daea (_dfgbc .Data [_cbgg ],^(_bdgce .Data [_dbee ]^_dfgbc .Data [_cbgg ]),_befc );};};default:_gg .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",_bcgag );
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 (_gcef *Bitmap )CreateTemplate ()*Bitmap {return _gcef .createTemplate ()};func _afgc (_cdfc *Bitmap ,_eeaf *Bitmap ,_gbceg *Selection )(*Bitmap ,error ){var (_abge *Bitmap ;_fdcd error ;);_cdfc ,_fdcd =_cbfa (_cdfc ,_eeaf ,_gbceg ,&_abge );
if _fdcd !=nil {return nil ,_fdcd ;};if _fdcd =_cdfc .clearAll ();_fdcd !=nil {return nil ,_fdcd ;};var _aedg SelectionValue ;for _eefg :=0;_eefg < _gbceg .Height ;_eefg ++{for _cgbg :=0;_cgbg < _gbceg .Width ;_cgbg ++{_aedg =_gbceg .Data [_eefg ][_cgbg ];
if _aedg ==SelHit {if _fdcd =_cdfc .RasterOperation (_cgbg -_gbceg .Cx ,_eefg -_gbceg .Cy ,_eeaf .Width ,_eeaf .Height ,PixSrcOrDst ,_abge ,0,0);_fdcd !=nil {return nil ,_fdcd ;};};};};return _cdfc ,nil ;};func (_eec *Bitmap )SetPixel (x ,y int ,pixel byte )error {_bgg :=_eec .GetByteIndex (x ,y );
if _bgg > len (_eec .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",_bgg );};_bcgf :=_eec .GetBitOffset (x );
_ecf :=uint (7-_bcgf );_egd :=_eec .Data [_bgg ];var _cbc byte ;if pixel ==1{_cbc =_egd |(pixel &0x01<<_ecf );}else {_cbc =_egd &^(1<<_ecf );};_eec .Data [_bgg ]=_cbc ;return nil ;};type byWidth Bitmaps ;func _acbbf (_agac ,_gcfd *Bitmap ,_cdcfd ,_cabb int )(*Bitmap ,error ){const _gcba ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";
if _gcfd ==nil {return nil ,_f .Error (_gcba ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _cdcfd < 1||_cabb < 1{return nil ,_f .Error (_gcba ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
};if _cdcfd ==1&&_cabb ==1{return _dbfae (_agac ,_gcfd );};if MorphBC ==SymmetricMorphBC {_adfed ,_ceee :=_defb (_agac ,_gcfd ,_cdcfd ,_cabb );if _ceee !=nil {return nil ,_f .Wrap (_ceee ,_gcba ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");
};return _adfed ,nil ;};_gacd :=_bcca (_cdcfd /2,_cabb /2);_afag :=8*((_gacd +7)/8);_gdfb ,_dedb :=_gcfd .AddBorder (_afag ,0);if _dedb !=nil {return nil ,_f .Wrapf (_dedb ,_gcba ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_afag );
};var _egcb ,_edfaf *Bitmap ;if _cdcfd ==1||_cabb ==1{_ggbcg :=SelCreateBrick (_cabb ,_cdcfd ,_cabb /2,_cdcfd /2,SelHit );_egcb ,_dedb =_efbd (nil ,_gdfb ,_ggbcg );if _dedb !=nil {return nil ,_f .Wrap (_dedb ,_gcba ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};}else {_fgcg :=SelCreateBrick (1,_cdcfd ,0,_cdcfd /2,SelHit );_acbfa ,_fbdfb :=_afgc (nil ,_gdfb ,_fgcg );if _fbdfb !=nil {return nil ,_f .Wrap (_fbdfb ,_gcba ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");
};_bcef :=SelCreateBrick (_cabb ,1,_cabb /2,0,SelHit );_egcb ,_fbdfb =_afgc (nil ,_acbfa ,_bcef );if _fbdfb !=nil {return nil ,_f .Wrap (_fbdfb ,_gcba ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _ ,_fbdfb =_afbe (_acbfa ,_egcb ,_fgcg );_fbdfb !=nil {return nil ,_f .Wrap (_fbdfb ,_gcba ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_fbdfb =_afbe (_egcb ,_acbfa ,_bcef );_fbdfb !=nil {return nil ,_f .Wrap (_fbdfb ,_gcba ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
};};if _edfaf ,_dedb =_egcb .RemoveBorder (_afag );_dedb !=nil {return nil ,_f .Wrap (_dedb ,_gcba ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _agac ==nil {return _edfaf ,nil ;};if _ ,_dedb =_dbfae (_agac ,_edfaf );_dedb !=nil {return nil ,_dedb ;};
return _agac ,nil ;};func (_cdeed CombinationOperator )String ()string {var _gdad string ;switch _cdeed {case CmbOpOr :_gdad ="\u004f\u0052";case CmbOpAnd :_gdad ="\u0041\u004e\u0044";case CmbOpXor :_gdad ="\u0058\u004f\u0052";case CmbOpXNor :_gdad ="\u0058\u004e\u004f\u0052";
case CmbOpReplace :_gdad ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_gdad ="\u004e\u004f\u0054";};return _gdad ;};func TstImageBitmap ()*Bitmap {return _cfbf .Copy ()};func _bgbd (_dgaee *Bitmap ,_dafab ,_ecaeg ,_ebab ,_bga int ,_cbae RasterOperator ,_fbfeg *Bitmap ,_efdd ,_fgege int )error {var (_ceff bool ;
_feeg bool ;_bcdf int ;_cgdb int ;_aaga int ;_aebaf bool ;_ceae byte ;_gcgg int ;_fcca int ;_cbga int ;_ccgec ,_dddaa int ;);_dcbd :=8-(_dafab &7);_eade :=_gdg [_dcbd ];_cgdc :=_dgaee .RowStride *_ecaeg +(_dafab >>3);_bgcd :=_fbfeg .RowStride *_fgege +(_efdd >>3);
if _ebab < _dcbd {_ceff =true ;_eade &=_gccbe [8-_dcbd +_ebab ];};if !_ceff {_bcdf =(_ebab -_dcbd )>>3;if _bcdf > 0{_feeg =true ;_cgdb =_cgdc +1;_aaga =_bgcd +1;};};_gcgg =(_dafab +_ebab )&7;if !(_ceff ||_gcgg ==0){_aebaf =true ;_ceae =_gccbe [_gcgg ];
_fcca =_cgdc +1+_bcdf ;_cbga =_bgcd +1+_bcdf ;};switch _cbae {case PixSrc :for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_cgdc ]=_daea (_dgaee .Data [_cgdc ],_fbfeg .Data [_bgcd ],_eade );_cgdc +=_dgaee .RowStride ;_bgcd +=_fbfeg .RowStride ;};if _feeg {for _ccgec =0;
_ccgec < _bga ;_ccgec ++{for _dddaa =0;_dddaa < _bcdf ;_dddaa ++{_dgaee .Data [_cgdb +_dddaa ]=_fbfeg .Data [_aaga +_dddaa ];};_cgdb +=_dgaee .RowStride ;_aaga +=_fbfeg .RowStride ;};};if _aebaf {for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_fcca ]=_daea (_dgaee .Data [_fcca ],_fbfeg .Data [_cbga ],_ceae );
_fcca +=_dgaee .RowStride ;_cbga +=_fbfeg .RowStride ;};};case PixNotSrc :for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_cgdc ]=_daea (_dgaee .Data [_cgdc ],^_fbfeg .Data [_bgcd ],_eade );_cgdc +=_dgaee .RowStride ;_bgcd +=_fbfeg .RowStride ;};if _feeg {for _ccgec =0;
_ccgec < _bga ;_ccgec ++{for _dddaa =0;_dddaa < _bcdf ;_dddaa ++{_dgaee .Data [_cgdb +_dddaa ]=^_fbfeg .Data [_aaga +_dddaa ];};_cgdb +=_dgaee .RowStride ;_aaga +=_fbfeg .RowStride ;};};if _aebaf {for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_fcca ]=_daea (_dgaee .Data [_fcca ],^_fbfeg .Data [_cbga ],_ceae );
_fcca +=_dgaee .RowStride ;_cbga +=_fbfeg .RowStride ;};};case PixSrcOrDst :for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_cgdc ]=_daea (_dgaee .Data [_cgdc ],_fbfeg .Data [_bgcd ]|_dgaee .Data [_cgdc ],_eade );_cgdc +=_dgaee .RowStride ;_bgcd +=_fbfeg .RowStride ;
};if _feeg {for _ccgec =0;_ccgec < _bga ;_ccgec ++{for _dddaa =0;_dddaa < _bcdf ;_dddaa ++{_dgaee .Data [_cgdb +_dddaa ]|=_fbfeg .Data [_aaga +_dddaa ];};_cgdb +=_dgaee .RowStride ;_aaga +=_fbfeg .RowStride ;};};if _aebaf {for _ccgec =0;_ccgec < _bga ;
_ccgec ++{_dgaee .Data [_fcca ]=_daea (_dgaee .Data [_fcca ],_fbfeg .Data [_cbga ]|_dgaee .Data [_fcca ],_ceae );_fcca +=_dgaee .RowStride ;_cbga +=_fbfeg .RowStride ;};};case PixSrcAndDst :for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_cgdc ]=_daea (_dgaee .Data [_cgdc ],_fbfeg .Data [_bgcd ]&_dgaee .Data [_cgdc ],_eade );
_cgdc +=_dgaee .RowStride ;_bgcd +=_fbfeg .RowStride ;};if _feeg {for _ccgec =0;_ccgec < _bga ;_ccgec ++{for _dddaa =0;_dddaa < _bcdf ;_dddaa ++{_dgaee .Data [_cgdb +_dddaa ]&=_fbfeg .Data [_aaga +_dddaa ];};_cgdb +=_dgaee .RowStride ;_aaga +=_fbfeg .RowStride ;
};};if _aebaf {for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_fcca ]=_daea (_dgaee .Data [_fcca ],_fbfeg .Data [_cbga ]&_dgaee .Data [_fcca ],_ceae );_fcca +=_dgaee .RowStride ;_cbga +=_fbfeg .RowStride ;};};case PixSrcXorDst :for _ccgec =0;_ccgec < _bga ;
_ccgec ++{_dgaee .Data [_cgdc ]=_daea (_dgaee .Data [_cgdc ],_fbfeg .Data [_bgcd ]^_dgaee .Data [_cgdc ],_eade );_cgdc +=_dgaee .RowStride ;_bgcd +=_fbfeg .RowStride ;};if _feeg {for _ccgec =0;_ccgec < _bga ;_ccgec ++{for _dddaa =0;_dddaa < _bcdf ;_dddaa ++{_dgaee .Data [_cgdb +_dddaa ]^=_fbfeg .Data [_aaga +_dddaa ];
};_cgdb +=_dgaee .RowStride ;_aaga +=_fbfeg .RowStride ;};};if _aebaf {for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_fcca ]=_daea (_dgaee .Data [_fcca ],_fbfeg .Data [_cbga ]^_dgaee .Data [_fcca ],_ceae );_fcca +=_dgaee .RowStride ;_cbga +=_fbfeg .RowStride ;
};};case PixNotSrcOrDst :for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_cgdc ]=_daea (_dgaee .Data [_cgdc ],^(_fbfeg .Data [_bgcd ])|_dgaee .Data [_cgdc ],_eade );_cgdc +=_dgaee .RowStride ;_bgcd +=_fbfeg .RowStride ;};if _feeg {for _ccgec =0;_ccgec < _bga ;
_ccgec ++{for _dddaa =0;_dddaa < _bcdf ;_dddaa ++{_dgaee .Data [_cgdb +_dddaa ]|=^(_fbfeg .Data [_aaga +_dddaa ]);};_cgdb +=_dgaee .RowStride ;_aaga +=_fbfeg .RowStride ;};};if _aebaf {for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_fcca ]=_daea (_dgaee .Data [_fcca ],^(_fbfeg .Data [_cbga ])|_dgaee .Data [_fcca ],_ceae );
_fcca +=_dgaee .RowStride ;_cbga +=_fbfeg .RowStride ;};};case PixNotSrcAndDst :for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_cgdc ]=_daea (_dgaee .Data [_cgdc ],^(_fbfeg .Data [_bgcd ])&_dgaee .Data [_cgdc ],_eade );_cgdc +=_dgaee .RowStride ;
_bgcd +=_fbfeg .RowStride ;};if _feeg {for _ccgec =0;_ccgec < _bga ;_ccgec ++{for _dddaa =0;_dddaa < _bcdf ;_dddaa ++{_dgaee .Data [_cgdb +_dddaa ]&=^_fbfeg .Data [_aaga +_dddaa ];};_cgdb +=_dgaee .RowStride ;_aaga +=_fbfeg .RowStride ;};};if _aebaf {for _ccgec =0;
_ccgec < _bga ;_ccgec ++{_dgaee .Data [_fcca ]=_daea (_dgaee .Data [_fcca ],^(_fbfeg .Data [_cbga ])&_dgaee .Data [_fcca ],_ceae );_fcca +=_dgaee .RowStride ;_cbga +=_fbfeg .RowStride ;};};case PixSrcOrNotDst :for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_cgdc ]=_daea (_dgaee .Data [_cgdc ],_fbfeg .Data [_bgcd ]|^(_dgaee .Data [_cgdc ]),_eade );
_cgdc +=_dgaee .RowStride ;_bgcd +=_fbfeg .RowStride ;};if _feeg {for _ccgec =0;_ccgec < _bga ;_ccgec ++{for _dddaa =0;_dddaa < _bcdf ;_dddaa ++{_dgaee .Data [_cgdb +_dddaa ]=_fbfeg .Data [_aaga +_dddaa ]|^(_dgaee .Data [_cgdb +_dddaa ]);};_cgdb +=_dgaee .RowStride ;
_aaga +=_fbfeg .RowStride ;};};if _aebaf {for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_fcca ]=_daea (_dgaee .Data [_fcca ],_fbfeg .Data [_cbga ]|^(_dgaee .Data [_fcca ]),_ceae );_fcca +=_dgaee .RowStride ;_cbga +=_fbfeg .RowStride ;};};case PixSrcAndNotDst :for _ccgec =0;
_ccgec < _bga ;_ccgec ++{_dgaee .Data [_cgdc ]=_daea (_dgaee .Data [_cgdc ],_fbfeg .Data [_bgcd ]&^(_dgaee .Data [_cgdc ]),_eade );_cgdc +=_dgaee .RowStride ;_bgcd +=_fbfeg .RowStride ;};if _feeg {for _ccgec =0;_ccgec < _bga ;_ccgec ++{for _dddaa =0;_dddaa < _bcdf ;
_dddaa ++{_dgaee .Data [_cgdb +_dddaa ]=_fbfeg .Data [_aaga +_dddaa ]&^(_dgaee .Data [_cgdb +_dddaa ]);};_cgdb +=_dgaee .RowStride ;_aaga +=_fbfeg .RowStride ;};};if _aebaf {for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_fcca ]=_daea (_dgaee .Data [_fcca ],_fbfeg .Data [_cbga ]&^(_dgaee .Data [_fcca ]),_ceae );
_fcca +=_dgaee .RowStride ;_cbga +=_fbfeg .RowStride ;};};case PixNotPixSrcOrDst :for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_cgdc ]=_daea (_dgaee .Data [_cgdc ],^(_fbfeg .Data [_bgcd ]|_dgaee .Data [_cgdc ]),_eade );_cgdc +=_dgaee .RowStride ;
_bgcd +=_fbfeg .RowStride ;};if _feeg {for _ccgec =0;_ccgec < _bga ;_ccgec ++{for _dddaa =0;_dddaa < _bcdf ;_dddaa ++{_dgaee .Data [_cgdb +_dddaa ]=^(_fbfeg .Data [_aaga +_dddaa ]|_dgaee .Data [_cgdb +_dddaa ]);};_cgdb +=_dgaee .RowStride ;_aaga +=_fbfeg .RowStride ;
};};if _aebaf {for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_fcca ]=_daea (_dgaee .Data [_fcca ],^(_fbfeg .Data [_cbga ]|_dgaee .Data [_fcca ]),_ceae );_fcca +=_dgaee .RowStride ;_cbga +=_fbfeg .RowStride ;};};case PixNotPixSrcAndDst :for _ccgec =0;
_ccgec < _bga ;_ccgec ++{_dgaee .Data [_cgdc ]=_daea (_dgaee .Data [_cgdc ],^(_fbfeg .Data [_bgcd ]&_dgaee .Data [_cgdc ]),_eade );_cgdc +=_dgaee .RowStride ;_bgcd +=_fbfeg .RowStride ;};if _feeg {for _ccgec =0;_ccgec < _bga ;_ccgec ++{for _dddaa =0;_dddaa < _bcdf ;
_dddaa ++{_dgaee .Data [_cgdb +_dddaa ]=^(_fbfeg .Data [_aaga +_dddaa ]&_dgaee .Data [_cgdb +_dddaa ]);};_cgdb +=_dgaee .RowStride ;_aaga +=_fbfeg .RowStride ;};};if _aebaf {for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_fcca ]=_daea (_dgaee .Data [_fcca ],^(_fbfeg .Data [_cbga ]&_dgaee .Data [_fcca ]),_ceae );
_fcca +=_dgaee .RowStride ;_cbga +=_fbfeg .RowStride ;};};case PixNotPixSrcXorDst :for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_cgdc ]=_daea (_dgaee .Data [_cgdc ],^(_fbfeg .Data [_bgcd ]^_dgaee .Data [_cgdc ]),_eade );_cgdc +=_dgaee .RowStride ;
_bgcd +=_fbfeg .RowStride ;};if _feeg {for _ccgec =0;_ccgec < _bga ;_ccgec ++{for _dddaa =0;_dddaa < _bcdf ;_dddaa ++{_dgaee .Data [_cgdb +_dddaa ]=^(_fbfeg .Data [_aaga +_dddaa ]^_dgaee .Data [_cgdb +_dddaa ]);};_cgdb +=_dgaee .RowStride ;_aaga +=_fbfeg .RowStride ;
};};if _aebaf {for _ccgec =0;_ccgec < _bga ;_ccgec ++{_dgaee .Data [_fcca ]=_daea (_dgaee .Data [_fcca ],^(_fbfeg .Data [_cbga ]^_dgaee .Data [_fcca ]),_ceae );_fcca +=_dgaee .RowStride ;_cbga +=_fbfeg .RowStride ;};};default:_gg .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",_cbae );
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 _aeg (_bfad ,_fadc ,_aef *Bitmap )(*Bitmap ,error ){const _efgf ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _fadc ==nil {return nil ,_f .Error (_efgf ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _aef ==nil {return nil ,_f .Error (_efgf ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
};var _gbfec error ;switch {case _bfad ==_fadc :if _gbfec =_bfad .RasterOperation (0,0,_fadc .Width ,_fadc .Height ,PixNotSrcAndDst ,_aef ,0,0);_gbfec !=nil {return nil ,_f .Wrap (_gbfec ,_efgf ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _bfad ==_aef :if _gbfec =_bfad .RasterOperation (0,0,_fadc .Width ,_fadc .Height ,PixNotSrcAndDst ,_fadc ,0,0);
_gbfec !=nil {return nil ,_f .Wrap (_gbfec ,_efgf ,"\u0064 \u003d\u003d\u0020\u0073\u0032");};default:_bfad ,_gbfec =_dbfae (_bfad ,_fadc );if _gbfec !=nil {return nil ,_f .Wrap (_gbfec ,_efgf ,"");};if _gbfec =_bfad .RasterOperation (0,0,_fadc .Width ,_fadc .Height ,PixNotSrcAndDst ,_aef ,0,0);
_gbfec !=nil {return nil ,_f .Wrap (_gbfec ,_efgf ,"\u0064e\u0066\u0061\u0075\u006c\u0074");};};return _bfad ,nil ;};func (_gegdg *Bitmaps )WidthSorter ()func (_acde ,_acea int )bool {return func (_fabe ,_afcfc int )bool {return _gegdg .Values [_fabe ].Width < _gegdg .Values [_afcfc ].Width };
};var MorphBC BoundaryCondition ;func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _afgc (d ,s ,sel )};func _cdcg (_fbdde ,_caa *Bitmap ,_feab *Selection )(*Bitmap ,error ){const _ebgb ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";
var _acdd ,_fcd int ;if _caa ==nil {return nil ,_f .Error (_ebgb ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _feab ==nil {return nil ,_f .Error (_ebgb ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};_acdd =_feab .Width ;_fcd =_feab .Height ;if _acdd ==0||_fcd ==0{return nil ,_f .Error (_ebgb ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _fbdde ==nil {return _caa .createTemplate (),nil ;};if _aeag :=_fbdde .resizeImageData (_caa );
_aeag !=nil {return nil ,_aeag ;};return _fbdde ,nil ;};func _egfea (_cfbe ,_eedde int ,_dbcg string )*Selection {_fcdb :=&Selection {Height :_cfbe ,Width :_eedde ,Name :_dbcg };_fcdb .Data =make ([][]SelectionValue ,_cfbe );for _adfg :=0;_adfg < _cfbe ;
_adfg ++{_fcdb .Data [_adfg ]=make ([]SelectionValue ,_eedde );};return _fcdb ;};func (_fgca *Bitmap )setAll ()error {_dcb :=_fedf (_fgca ,0,0,_fgca .Width ,_fgca .Height ,PixSet ,nil ,0,0);if _dcb !=nil {return _f .Wrap (_dcb ,"\u0073\u0065\u0074\u0041\u006c\u006c","");
};return nil ;};func _dffe (_egag ,_aagb *Bitmap ,_abed ,_bagfc int )(_ggc error ){const _gagd ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_afee ,_abbe ,_febe ,_cegc int ;_fdeg ,_gcbdc ,_cfeg ,_deee ,_dbag ,_eaae ,_fegfb ,_eccg byte ;
);for _afee =0;_afee < _abed ;_afee ++{_febe =_afee *_egag .RowStride ;_cegc =_afee *_aagb .RowStride ;for _abbe =0;_abbe < _bagfc ;_abbe ++{if _fdeg ,_ggc =_egag .GetByte (_febe +_abbe );_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _gcbdc ,_ggc =_aagb .GetByte (_cegc +_abbe );_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _afee > 0{if _cfeg ,_ggc =_egag .GetByte (_febe -_egag .RowStride +_abbe );
_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_fdeg |=_cfeg |(_cfeg <<1)|(_cfeg >>1);if _abbe > 0{if _eccg ,_ggc =_egag .GetByte (_febe -_egag .RowStride +_abbe -1);_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");
};_fdeg |=_eccg <<7;};if _abbe < _bagfc -1{if _eccg ,_ggc =_egag .GetByte (_febe -_egag .RowStride +_abbe +1);_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_fdeg |=_eccg >>7;
};};if _abbe > 0{if _deee ,_ggc =_egag .GetByte (_febe +_abbe -1);_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"\u006a\u0020\u003e \u0030");};_fdeg |=_deee <<7;};_fdeg &=_gcbdc ;if _fdeg ==0||^_fdeg ==0{if _ggc =_egag .SetByte (_febe +_abbe ,_fdeg );_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");
};};for {_fegfb =_fdeg ;_fdeg =(_fdeg |(_fdeg >>1)|(_fdeg <<1))&_gcbdc ;if (_fdeg ^_fegfb )==0{if _ggc =_egag .SetByte (_febe +_abbe ,_fdeg );_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
};break ;};};};};for _afee =_abed -1;_afee >=0;_afee --{_febe =_afee *_egag .RowStride ;_cegc =_afee *_aagb .RowStride ;for _abbe =_bagfc -1;_abbe >=0;_abbe --{if _fdeg ,_ggc =_egag .GetByte (_febe +_abbe );_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _gcbdc ,_ggc =_aagb .GetByte (_cegc +_abbe );_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _afee < _abed -1{if _dbag ,_ggc =_egag .GetByte (_febe +_egag .RowStride +_abbe );
_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_fdeg |=_dbag |(_dbag <<1)|_dbag >>1;if _abbe > 0{if _eccg ,_ggc =_egag .GetByte (_febe +_egag .RowStride +_abbe -1);
_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"\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");};_fdeg |=_eccg <<7;};if _abbe < _bagfc -1{if _eccg ,_ggc =_egag .GetByte (_febe +_egag .RowStride +_abbe +1);
_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"\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");
};_fdeg |=_eccg >>7;};};if _abbe < _bagfc -1{if _eaae ,_ggc =_egag .GetByte (_febe +_abbe +1);_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"\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");
};_fdeg |=_eaae >>7;};_fdeg &=_gcbdc ;if _fdeg ==0||(^_fdeg )==0{if _ggc =_egag .SetByte (_febe +_abbe ,_fdeg );_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_fegfb =_fdeg ;
_fdeg =(_fdeg |(_fdeg >>1)|(_fdeg <<1))&_gcbdc ;if (_fdeg ^_fegfb )==0{if _ggc =_egag .SetByte (_febe +_abbe ,_fdeg );_ggc !=nil {return _f .Wrap (_ggc ,_gagd ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
};break ;};};};};return nil ;};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _aefb (oldByte ,newByte ,op );};func _dbfae (_fbfb ,_fec *Bitmap )(*Bitmap ,error ){if _fec ==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 _fec ==_fbfb {return _fbfb ,nil ;};if _fbfb ==nil {_fbfb =_fec .createTemplate ();copy (_fbfb .Data ,_fec .Data );return _fbfb ,nil ;};_baafe :=_fbfb .resizeImageData (_fec );if _baafe !=nil {return nil ,_f .Wrap (_baafe ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
};_fbfb .Text =_fec .Text ;copy (_fbfb .Data ,_fec .Data );return _fbfb ,nil ;};func _bdf (_ec *Bitmap ,_efb ,_fg int )(*Bitmap ,error ){const _egb ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";
if _ec ==nil {return nil ,_f .Error (_egb ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _efb <=0||_fg <=0{return nil ,_f .Error (_egb ,"\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 _efb ==_fg {if _efb ==1{_acge ,_gd :=_dbfae (nil ,_ec );if _gd !=nil {return nil ,_f .Wrap (_gd ,_egb ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _acge ,nil ;};if _efb ==2||_efb ==4||_efb ==8{_dfd ,_baf :=_ddf (_ec ,_efb );
if _baf !=nil {return nil ,_f .Wrap (_baf ,_egb ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _dfd ,nil ;};};_ded :=_efb *_ec .Width ;_ag :=_fg *_ec .Height ;_bee :=New (_ded ,_ag );_bfb :=_bee .RowStride ;
var (_ged ,_dab ,_fbdd ,_dfad ,_bc int ;_fc byte ;_geg error ;);for _dab =0;_dab < _ec .Height ;_dab ++{_ged =_fg *_dab *_bfb ;for _fbdd =0;_fbdd < _ec .Width ;_fbdd ++{if _ddd :=_ec .GetPixel (_fbdd ,_dab );_ddd {_bc =_efb *_fbdd ;for _dfad =0;_dfad < _efb ;
_dfad ++{_bee .setBit (_ged *8+_bc +_dfad );};};};for _dfad =1;_dfad < _fg ;_dfad ++{_bbaa :=_ged +_dfad *_bfb ;for _eed :=0;_eed < _bfb ;_eed ++{if _fc ,_geg =_bee .GetByte (_ged +_eed );_geg !=nil {return nil ,_f .Wrapf (_geg ,_egb ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_dfad );
};if _geg =_bee .SetByte (_bbaa +_eed ,_fc );_geg !=nil {return nil ,_f .Wrap (_geg ,_egb ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _bee ,nil ;};func (_cfeac *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_gdfed *Boxes ,_cgd error ){const _cccb ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";
if _cfeac ==nil {return nil ,_f .Error (_cccb ,"\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 (_cccb ,"\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 _gdfed ,_cgd =_cfeac .connComponentsBB (connectivity );_cgd !=nil {return nil ,_f .Wrap (_cgd ,_cccb ,"");};}else {if _gdfed ,_cgd =_cfeac .connComponentsBitmapsBB (bms ,connectivity );_cgd !=nil {return nil ,_f .Wrap (_cgd ,_cccb ,"");
};};return _gdfed ,nil ;};func New (width ,height int )*Bitmap {_fbg :=_dabf (width ,height );_fbg .Data =make ([]byte ,height *_fbg .RowStride );return _fbg ;};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _dddcc (d ,s ,hSize ,vSize )};
func (_gegfa *Bitmaps )SortByWidth (){_faf :=(*byWidth )(_gegfa );_fb .Sort (_faf )};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func _ca (_fgg *Bitmap ,_aaef ...int )(_edc *Bitmap ,_acc error ){const _ggf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";
if _fgg ==nil {return nil ,_f .Error (_ggf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_aaef )==0||len (_aaef )> 4{return nil ,_f .Error (_ggf ,"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 _aaef [0]<=0{_gg .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");_edc ,_acc =_dbfae (nil ,_fgg );if _acc !=nil {return nil ,_f .Wrap (_acc ,_ggf ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
};return _edc ,nil ;};_cb :=_fbf ();_edc =_fgg ;for _ddc ,_eab :=range _aaef {if _eab <=0{break ;};_edc ,_acc =_gce (_edc ,_eab ,_cb );if _acc !=nil {return nil ,_f .Wrapf (_acc ,_ggf ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_ddc );
};};return _edc ,nil ;};func (_cged *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _ebad ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";_aece ,_eeca :=_cged .selectByIndexes (idx );
if _eeca !=nil {return nil ,_f .Wrap (_eeca ,_ebad ,"");};return _aece ,nil ;};func (_eaef *Bitmap )setPadBits (_gebg int ){_fdeb :=8-_eaef .Width %8;if _fdeb ==8{return ;};_ffac :=_eaef .Width /8;_bafd :=_gdg [_fdeb ];if _gebg ==0{_bafd ^=_bafd ;};var _cgb int ;
for _dcbf :=0;_dcbf < _eaef .Height ;_dcbf ++{_cgb =_dcbf *_eaef .RowStride +_ffac ;if _gebg ==0{_eaef .Data [_cgb ]&=_bafd ;}else {_eaef .Data [_cgb ]|=_bafd ;};};};func _ab (_dca ,_gdfe *Bitmap ,_fga int ,_agf []byte ,_cbe int )(_fd error ){const _dacb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";
var (_abe ,_cea ,_dcc ,_agg ,_degc ,_gbab ,_cgf ,_fad int ;_bdb ,_fgd ,_ddg ,_dfb uint32 ;_daab ,_ffgd byte ;_bef uint16 ;);_fbcc :=make ([]byte ,4);_cff :=make ([]byte ,4);for _dcc =0;_dcc < _dca .Height -1;_dcc ,_agg =_dcc +2,_agg +1{_abe =_dcc *_dca .RowStride ;
_cea =_agg *_gdfe .RowStride ;for _degc ,_gbab =0,0;_degc < _cbe ;_degc ,_gbab =_degc +4,_gbab +1{for _cgf =0;_cgf < 4;_cgf ++{_fad =_abe +_degc +_cgf ;if _fad <=len (_dca .Data )-1&&_fad < _abe +_dca .RowStride {_fbcc [_cgf ]=_dca .Data [_fad ];}else {_fbcc [_cgf ]=0x00;
};_fad =_abe +_dca .RowStride +_degc +_cgf ;if _fad <=len (_dca .Data )-1&&_fad < _abe +(2*_dca .RowStride ){_cff [_cgf ]=_dca .Data [_fad ];}else {_cff [_cgf ]=0x00;};};_bdb =_aa .BigEndian .Uint32 (_fbcc );_fgd =_aa .BigEndian .Uint32 (_cff );_ddg =_bdb &_fgd ;
_ddg |=_ddg <<1;_dfb =_bdb |_fgd ;_dfb &=_dfb <<1;_fgd =_ddg &_dfb ;_fgd &=0xaaaaaaaa;_bdb =_fgd |(_fgd <<7);_daab =byte (_bdb >>24);_ffgd =byte ((_bdb >>8)&0xff);_fad =_cea +_gbab ;if _fad +1==len (_gdfe .Data )-1||_fad +1>=_cea +_gdfe .RowStride {if _fd =_gdfe .SetByte (_fad ,_agf [_daab ]);
_fd !=nil {return _f .Wrapf (_fd ,_dacb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_fad );};}else {_bef =(uint16 (_agf [_daab ])<<8)|uint16 (_agf [_ffgd ]);if _fd =_gdfe .setTwoBytes (_fad ,_bef );_fd !=nil {return _f .Wrapf (_fd ,_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",_fad );
};_gbab ++;};};};return nil ;};func (_gcac *ClassedPoints )XAtIndex (i int )float32 {return (*_gcac .Points )[_gcac .IntSlice [i ]].X };func (_dcec *byHeight )Less (i ,j int )bool {return _dcec .Values [i ].Height < _dcec .Values [j ].Height };type Getter interface{GetBitmap ()*Bitmap ;
};func _afbe (_gdcc ,_ceec *Bitmap ,_aegf *Selection )(*Bitmap ,error ){const _gcefe ="\u0065\u0072\u006fd\u0065";var (_gffa error ;_cbdbf *Bitmap ;);_gdcc ,_gffa =_cbfa (_gdcc ,_ceec ,_aegf ,&_cbdbf );if _gffa !=nil {return nil ,_f .Wrap (_gffa ,_gcefe ,"");
};if _gffa =_gdcc .setAll ();_gffa !=nil {return nil ,_f .Wrap (_gffa ,_gcefe ,"");};var _cdga SelectionValue ;for _ffacd :=0;_ffacd < _aegf .Height ;_ffacd ++{for _dadg :=0;_dadg < _aegf .Width ;_dadg ++{_cdga =_aegf .Data [_ffacd ][_dadg ];if _cdga ==SelHit {_gffa =_fedf (_gdcc ,_aegf .Cx -_dadg ,_aegf .Cy -_ffacd ,_ceec .Width ,_ceec .Height ,PixSrcAndDst ,_cbdbf ,0,0);
if _gffa !=nil {return nil ,_f .Wrap (_gffa ,_gcefe ,"");};};};};if MorphBC ==SymmetricMorphBC {return _gdcc ,nil ;};_caed ,_dbd ,_gbag ,_ccfa :=_aegf .findMaxTranslations ();if _caed > 0{if _gffa =_gdcc .RasterOperation (0,0,_caed ,_ceec .Height ,PixClr ,nil ,0,0);
_gffa !=nil {return nil ,_f .Wrap (_gffa ,_gcefe ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _gbag > 0{if _gffa =_gdcc .RasterOperation (_ceec .Width -_gbag ,0,_gbag ,_ceec .Height ,PixClr ,nil ,0,0);_gffa !=nil {return nil ,_f .Wrap (_gffa ,_gcefe ,"\u0078\u006e\u0020\u003e\u0020\u0030");
};};if _dbd > 0{if _gffa =_gdcc .RasterOperation (0,0,_ceec .Width ,_dbd ,PixClr ,nil ,0,0);_gffa !=nil {return nil ,_f .Wrap (_gffa ,_gcefe ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _ccfa > 0{if _gffa =_gdcc .RasterOperation (0,_ceec .Height -_ccfa ,_ceec .Width ,_ccfa ,PixClr ,nil ,0,0);
_gffa !=nil {return nil ,_f .Wrap (_gffa ,_gcefe ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _gdcc ,nil ;};type LocationFilter int ;func (_ggdb *Bitmap )InverseData (){_ggdb .inverseData ()};func (_cbfb *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _eege ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";
if _gfbg :=_cbfb .validateIntSlice ();_gfbg !=nil {return nil ,_f .Wrap (_gfbg ,_eege ,"");};if _cbfb .IntSlice .Size ()==0{return nil ,_f .Error (_eege ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");
};_cbfb .SortByY ();var (_ffgad []*ClassedPoints ;_fdgb int ;);_cgga :=-1;var _cdeec *ClassedPoints ;for _feff :=0;_feff < len (_cbfb .IntSlice );_feff ++{_fdgb =int (_cbfb .YAtIndex (_feff ));if _fdgb !=_cgga {_cdeec =&ClassedPoints {Points :_cbfb .Points };
_cgga =_fdgb ;_ffgad =append (_ffgad ,_cdeec );};_cdeec .IntSlice =append (_cdeec .IntSlice ,_cbfb .IntSlice [_feff ]);};for _ ,_eaea :=range _ffgad {_eaea .SortByX ();};return _ffgad ,nil ;};func (_efcc *Bitmap )setEightBytes (_ggfc int ,_cab uint64 )error {_daf :=_efcc .RowStride -(_ggfc %_efcc .RowStride );
if _efcc .RowStride !=_efcc .Width >>3{_daf --;};if _daf >=8{return _efcc .setEightFullBytes (_ggfc ,_cab );};return _efcc .setEightPartlyBytes (_ggfc ,_daf ,_cab );};func (_geac *byWidth )Less (i ,j int )bool {return _geac .Values [i ].Width < _geac .Values [j ].Width };
func TstWordBitmapWithSpaces (t *_g .T ,scale ...int )*Bitmap {_fbcdgc :=1;if len (scale )> 0{_fbcdgc =scale [0];};_cefc :=3;_ebbga :=9+7+15+2*_cefc +2*_cefc ;_bedgd :=5+_cefc +5+2*_cefc ;_facd :=New (_ebbga *_fbcdgc ,_bedgd *_fbcdgc );_aefa :=&Bitmaps {};
var _fedc *int ;_cefc *=_fbcdgc ;_fcde :=_cefc ;_fedc =&_fcde ;_facdd :=_cefc ;_ffgf :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_aefa ,_ffgf ,_fedc ,_facdd ,1*_fbcdgc );_ffgf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_aefa ,_ffgf ,_fedc ,_facdd ,_cefc );
_ffgf =TstISymbol (t ,scale ...);TstAddSymbol (t ,_aefa ,_ffgf ,_fedc ,_facdd ,1*_fbcdgc );_ffgf =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_aefa ,_ffgf ,_fedc ,_facdd ,_cefc );_ffgf =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_aefa ,_ffgf ,_fedc ,_facdd ,1*_fbcdgc );
_ffgf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_aefa ,_ffgf ,_fedc ,_facdd ,1*_fbcdgc );_ffgf =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_aefa ,_ffgf ,_fedc ,_facdd ,0);*_fedc =_cefc ;_facdd =5*_fbcdgc +_cefc ;_ffgf =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_aefa ,_ffgf ,_fedc ,_facdd ,1*_fbcdgc );
_ffgf =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_aefa ,_ffgf ,_fedc ,_facdd ,_cefc );_ffgf =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_aefa ,_ffgf ,_fedc ,_facdd ,1*_fbcdgc );_ffgf =TstESymbol (t ,scale ...);TstAddSymbol (t ,_aefa ,_ffgf ,_fedc ,_facdd ,1*_fbcdgc );
_ffgf =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_aefa ,_ffgf ,_fedc ,_facdd ,1*_fbcdgc );_ffgf =TstESymbol (t ,scale ...);TstAddSymbol (t ,_aefa ,_ffgf ,_fedc ,_facdd ,1*_fbcdgc );_ffgf =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_aefa ,_ffgf ,_fedc ,_facdd ,0);
TstWriteSymbols (t ,_aefa ,_facd );return _facd ;};type BoundaryCondition int ;func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_fecd float64 ,_baaa error ){const _deff ="\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 _fecd ,_f .Error (_deff ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _fecd ,_f .Error (_deff ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if area1 ==0||area2 ==0{return _fecd ,_f .Error (_deff ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_afdb ,_dfgbf :=bm1 .Width ,bm1 .Height ;_fgbe ,_gbff :=bm2 .Width ,bm2 .Height ;
if _ccfb (_afdb -_fgbe )> maxDiffW {return 0,nil ;};if _ccfb (_dfgbf -_gbff )> maxDiffH {return 0,nil ;};var _dfdcf ,_gccbgf int ;if delX >=0{_dfdcf =int (delX +0.5);}else {_dfdcf =int (delX -0.5);};if delY >=0{_gccbgf =int (delY +0.5);}else {_gccbgf =int (delY -0.5);
};_ffccb :=bm1 .createTemplate ();if _baaa =_ffccb .RasterOperation (_dfdcf ,_gccbgf ,_fgbe ,_gbff ,PixSrc ,bm2 ,0,0);_baaa !=nil {return _fecd ,_f .Wrap (_baaa ,_deff ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");
};if _baaa =_ffccb .RasterOperation (0,0,_afdb ,_dfgbf ,PixSrcAndDst ,bm1 ,0,0);_baaa !=nil {return _fecd ,_f .Wrap (_baaa ,_deff ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_cadf :=_ffccb .countPixels ();_fecd =float64 (_cadf )*float64 (_cadf )/(float64 (area1 )*float64 (area2 ));
return _fecd ,nil ;};func _dfdc (_cd ,_efca *Bitmap ,_gfe int ,_deg []byte ,_eef int )(_cfd error ){const _agc ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_bdg ,_ebg ,_dddc ,_cgg ,_dg ,_gedg ,_dba ,_cac int ;
_bab ,_afe uint32 ;_gae ,_geca byte ;_bfa uint16 ;);_fcg :=make ([]byte ,4);_afd :=make ([]byte ,4);for _dddc =0;_dddc < _cd .Height -1;_dddc ,_cgg =_dddc +2,_cgg +1{_bdg =_dddc *_cd .RowStride ;_ebg =_cgg *_efca .RowStride ;for _dg ,_gedg =0,0;_dg < _eef ;
_dg ,_gedg =_dg +4,_gedg +1{for _dba =0;_dba < 4;_dba ++{_cac =_bdg +_dg +_dba ;if _cac <=len (_cd .Data )-1&&_cac < _bdg +_cd .RowStride {_fcg [_dba ]=_cd .Data [_cac ];}else {_fcg [_dba ]=0x00;};_cac =_bdg +_cd .RowStride +_dg +_dba ;if _cac <=len (_cd .Data )-1&&_cac < _bdg +(2*_cd .RowStride ){_afd [_dba ]=_cd .Data [_cac ];
}else {_afd [_dba ]=0x00;};};_bab =_aa .BigEndian .Uint32 (_fcg );_afe =_aa .BigEndian .Uint32 (_afd );_afe |=_bab ;_afe |=_afe <<1;_afe &=0xaaaaaaaa;_bab =_afe |(_afe <<7);_gae =byte (_bab >>24);_geca =byte ((_bab >>8)&0xff);_cac =_ebg +_gedg ;if _cac +1==len (_efca .Data )-1||_cac +1>=_ebg +_efca .RowStride {_efca .Data [_cac ]=_deg [_gae ];
}else {_bfa =(uint16 (_deg [_gae ])<<8)|uint16 (_deg [_geca ]);if _cfd =_efca .setTwoBytes (_cac ,_bfa );_cfd !=nil {return _f .Wrapf (_cfd ,_agc ,"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",_cac );
};_gedg ++;};};};return nil ;};var _ _fb .Interface =&ClassedPoints {};func (_gfcf *byWidth )Len ()int {return len (_gfcf .Values )};func _gffc (_fcbc *Bitmap ,_ceeg *_e .Stack ,_ebeaf ,_cfbd int )(_gbbcf *_fbc .Rectangle ,_bbecb error ){const _fcga ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _fcbc ==nil {return nil ,_f .Error (_fcga ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _ceeg ==nil {return nil ,_f .Error (_fcga ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};_defg ,_daaba :=_fcbc .Width ,_fcbc .Height ;_begcf :=_defg -1;_cbcdf :=_daaba -1;if _ebeaf < 0||_ebeaf > _begcf ||_cfbd < 0||_cfbd > _cbcdf ||!_fcbc .GetPixel (_ebeaf ,_cfbd ){return nil ,nil ;};var _bcac *_fbc .Rectangle ;_bcac ,_bbecb =Rect (100000,100000,0,0);
if _bbecb !=nil {return nil ,_f .Wrap (_bbecb ,_fcga ,"");};if _bbecb =_eaffe (_ceeg ,_ebeaf ,_ebeaf ,_cfbd ,1,_cbcdf ,_bcac );_bbecb !=nil {return nil ,_f .Wrap (_bbecb ,_fcga ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _bbecb =_eaffe (_ceeg ,_ebeaf ,_ebeaf ,_cfbd +1,-1,_cbcdf ,_bcac );
_bbecb !=nil {return nil ,_f .Wrap (_bbecb ,_fcga ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_bcac .Min .X ,_bcac .Max .X =_ebeaf ,_ebeaf ;_bcac .Min .Y ,_bcac .Max .Y =_cfbd ,_cfbd ;var (_fabd *fillSegment ;
_ggde int ;);for _ceeg .Len ()> 0{if _fabd ,_bbecb =_bfce (_ceeg );_bbecb !=nil {return nil ,_f .Wrap (_bbecb ,_fcga ,"");};_cfbd =_fabd ._dggc ;for _ebeaf =_fabd ._caddb ;_ebeaf >=0&&_fcbc .GetPixel (_ebeaf ,_cfbd );_ebeaf --{if _bbecb =_fcbc .SetPixel (_ebeaf ,_cfbd ,0);
_bbecb !=nil {return nil ,_f .Wrap (_bbecb ,_fcga ,"");};};if _ebeaf >=_fabd ._caddb {for _ebeaf ++;_ebeaf <=_fabd ._aaad &&_ebeaf <=_begcf &&!_fcbc .GetPixel (_ebeaf ,_cfbd );_ebeaf ++{};_ggde =_ebeaf ;if !(_ebeaf <=_fabd ._aaad &&_ebeaf <=_begcf ){continue ;
};}else {_ggde =_ebeaf +1;if _ggde < _fabd ._caddb -1{if _bbecb =_eaffe (_ceeg ,_ggde ,_fabd ._caddb -1,_fabd ._dggc ,-_fabd ._cdde ,_cbcdf ,_bcac );_bbecb !=nil {return nil ,_f .Wrap (_bbecb ,_fcga ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_ebeaf =_fabd ._caddb +1;};for {for ;_ebeaf <=_begcf &&_fcbc .GetPixel (_ebeaf ,_cfbd );_ebeaf ++{if _bbecb =_fcbc .SetPixel (_ebeaf ,_cfbd ,0);_bbecb !=nil {return nil ,_f .Wrap (_bbecb ,_fcga ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bbecb =_eaffe (_ceeg ,_ggde ,_ebeaf -1,_fabd ._dggc ,_fabd ._cdde ,_cbcdf ,_bcac );
_bbecb !=nil {return nil ,_f .Wrap (_bbecb ,_fcga ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ebeaf > _fabd ._aaad +1{if _bbecb =_eaffe (_ceeg ,_fabd ._aaad +1,_ebeaf -1,_fabd ._dggc ,-_fabd ._cdde ,_cbcdf ,_bcac );_bbecb !=nil {return nil ,_f .Wrap (_bbecb ,_fcga ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _ebeaf ++;_ebeaf <=_fabd ._aaad &&_ebeaf <=_begcf &&!_fcbc .GetPixel (_ebeaf ,_cfbd );_ebeaf ++{};_ggde =_ebeaf ;if !(_ebeaf <=_fabd ._aaad &&_ebeaf <=_begcf ){break ;};};};_bcac .Max .X ++;_bcac .Max .Y ++;return _bcac ,nil ;};func (_ebb *Bitmap )setEightFullBytes (_egbd int ,_ecb uint64 )error {if _egbd +7> len (_ebb .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");
};_ebb .Data [_egbd ]=byte ((_ecb &0xff00000000000000)>>56);_ebb .Data [_egbd +1]=byte ((_ecb &0xff000000000000)>>48);_ebb .Data [_egbd +2]=byte ((_ecb &0xff0000000000)>>40);_ebb .Data [_egbd +3]=byte ((_ecb &0xff00000000)>>32);_ebb .Data [_egbd +4]=byte ((_ecb &0xff000000)>>24);
_ebb .Data [_egbd +5]=byte ((_ecb &0xff0000)>>16);_ebb .Data [_egbd +6]=byte ((_ecb &0xff00)>>8);_ebb .Data [_egbd +7]=byte (_ecb &0xff);return nil ;};func (_cddec *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _afeg ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";
if _cddec ==nil {return nil ,_f .Error (_afeg ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_f .Error (_afeg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};_dbff :=len (_cddec .Values );_dgcbf :=&Bitmaps {Values :make ([]*Bitmap ,_dbff ),Boxes :make ([]*_fbc .Rectangle ,_dbff )};var (_fdd ,_cbaba *Bitmap ;_bedd *_fbc .Rectangle ;_adad error ;);for _cgbe :=0;_cgbe < _dbff ;_cgbe ++{if _fdd ,_adad =_cddec .GetBitmap (_cgbe );
_adad !=nil {return nil ,_f .Wrap (_adad ,_afeg ,"");};if _bedd ,_adad =_cddec .GetBox (_cgbe );_adad !=nil {return nil ,_f .Wrap (_adad ,_afeg ,"");};if _cbaba ,_adad =s .clipRectangle (_bedd ,nil );_adad !=nil {return nil ,_f .Wrap (_adad ,_afeg ,"");
};if _cbaba ,_adad =_cbaba .And (_fdd );_adad !=nil {return nil ,_f .Wrap (_adad ,_afeg ,"");};_dgcbf .Values [_cgbe ]=_cbaba ;_dgcbf .Boxes [_cgbe ]=_bedd ;};return _dgcbf ,nil ;};func (_bgcdc *BitmapsArray )AddBitmaps (bm *Bitmaps ){_bgcdc .Values =append (_bgcdc .Values ,bm )};
func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _agfad ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_ggadb ,_dbgc :=p1 .Width ,p1 .Height ;_adbb ,_adba :=p3 .Width ,p3 .Height ;if _e .Abs (_ggadb -_adbb )> maxDiffW {return false ,nil ;
};if _e .Abs (_dbgc -_adba )> maxDiffH {return false ,nil ;};_decb :=int (delX +_e .Sign (delX )*0.5);_edcc :=int (delY +_e .Sign (delY )*0.5);var _gaeag error ;_fgcc :=p1 .CreateTemplate ();if _gaeag =_fgcc .RasterOperation (0,0,_ggadb ,_dbgc ,PixSrc ,p1 ,0,0);
_gaeag !=nil {return false ,_f .Wrap (_gaeag ,_agfad ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _gaeag =_fgcc .RasterOperation (_decb ,_edcc ,_ggadb ,_dbgc ,PixNotSrcAndDst ,p4 ,0,0);_gaeag !=nil {return false ,_f .Wrap (_gaeag ,_agfad ,"\u0021p\u0034\u0020\u0026\u0020\u0074");
};if _fgcc .Zero (){return false ,nil ;};if _gaeag =_fgcc .RasterOperation (_decb ,_edcc ,_adbb ,_adba ,PixSrc ,p3 ,0,0);_gaeag !=nil {return false ,_f .Wrap (_gaeag ,_agfad ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _gaeag =_fgcc .RasterOperation (0,0,_adbb ,_adba ,PixNotSrcAndDst ,p2 ,0,0);
_gaeag !=nil {return false ,_f .Wrap (_gaeag ,_agfad ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _fgcc .Zero (),nil ;};func _eaffe (_bdfd *_e .Stack ,_aeae ,_gfgf ,_aegaa ,_bdfb ,_dgfc int ,_ddfa *_fbc .Rectangle )(_ffeb error ){const _afed ="\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 _bdfd ==nil {return _f .Error (_afed ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _ddfa ==nil {return _f .Error (_afed ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
};_ddfa .Min .X =_e .Min (_ddfa .Min .X ,_aeae );_ddfa .Max .X =_e .Max (_ddfa .Max .X ,_gfgf );_ddfa .Min .Y =_e .Min (_ddfa .Min .Y ,_aegaa );_ddfa .Max .Y =_e .Max (_ddfa .Max .Y ,_aegaa );if !(_aegaa +_bdfb >=0&&_aegaa +_bdfb <=_dgfc ){return nil ;
};if _bdfd .Aux ==nil {return _f .Error (_afed ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _faga *fillSegment ;_bbcc ,_afbef :=_bdfd .Aux .Pop ();if _afbef {if _faga ,_afbef =_bbcc .(*fillSegment );
!_afbef {return _f .Error (_afed ,"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 {_faga =&fillSegment {};
};_faga ._caddb =_aeae ;_faga ._aaad =_gfgf ;_faga ._dggc =_aegaa ;_faga ._cdde =_bdfb ;_bdfd .Push (_faga );return nil ;};func (_dddb *Bitmap )And (s *Bitmap )(_cgfd *Bitmap ,_bcga error ){const _dbc ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";
if _dddb ==nil {return nil ,_f .Error (_dbc ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");};if s ==nil {return nil ,_f .Error (_dbc ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");
};if !_dddb .SizesEqual (s ){_gg .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",_dbc );
};if _cgfd ,_bcga =_dbfae (_cgfd ,_dddb );_bcga !=nil {return nil ,_f .Wrap (_bcga ,_dbc ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _bcga =_cgfd .RasterOperation (0,0,_cgfd .Width ,_cgfd .Height ,PixSrcAndDst ,s ,0,0);
_bcga !=nil {return nil ,_f .Wrap (_bcga ,_dbc ,"");};return _cgfd ,nil ;};func (_efde *Bitmaps )Size ()int {return len (_efde .Values )};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_beda float64 ,_ddafb error ){const _acf ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";
if bm1 ==nil ||bm2 ==nil {return 0,_f .Error (_acf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_f .Error (_acf ,"\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 (_acf ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_ecg ,_eaee :=bm1 .Width ,bm1 .Height ;_ggadg ,_adgc :=bm2 .Width ,bm2 .Height ;
_dbac :=_ccfb (_ecg -_ggadg );if _dbac > maxDiffW {return 0,nil ;};_ecda :=_ccfb (_eaee -_adgc );if _ecda > maxDiffH {return 0,nil ;};var _def ,_gdcd int ;if delX >=0{_def =int (delX +0.5);}else {_def =int (delX -0.5);};if delY >=0{_gdcd =int (delY +0.5);
}else {_gdcd =int (delY -0.5);};_dfcg :=_bcca (_gdcd ,0);_gcfe :=_dfbg (_adgc +_gdcd ,_eaee );_bege :=bm1 .RowStride *_dfcg ;_cagb :=bm2 .RowStride *(_dfcg -_gdcd );_dccb :=_bcca (_def ,0);_eaca :=_dfbg (_ggadg +_def ,_ecg );_cbcd :=bm2 .RowStride ;var _cggbg ,_bcbe int ;
if _def >=8{_cggbg =_def >>3;_bege +=_cggbg ;_dccb -=_cggbg <<3;_eaca -=_cggbg <<3;_def &=7;}else if _def <=-8{_bcbe =-((_def +7)>>3);_cagb +=_bcbe ;_cbcd -=_bcbe ;_def +=_bcbe <<3;};if _dccb >=_eaca ||_dfcg >=_gcfe {return 0,nil ;};_babcd :=(_eaca +7)>>3;
var (_edcf ,_dcba ,_feec byte ;_gccbg ,_adaf ,_eda int ;);switch {case _def ==0:for _eda =_dfcg ;_eda < _gcfe ;_eda ,_bege ,_cagb =_eda +1,_bege +bm1 .RowStride ,_cagb +bm2 .RowStride {for _adaf =0;_adaf < _babcd ;_adaf ++{_feec =bm1 .Data [_bege +_adaf ]&bm2 .Data [_cagb +_adaf ];
_gccbg +=tab [_feec ];};};case _def > 0:if _cbcd < _babcd {for _eda =_dfcg ;_eda < _gcfe ;_eda ,_bege ,_cagb =_eda +1,_bege +bm1 .RowStride ,_cagb +bm2 .RowStride {_edcf ,_dcba =bm1 .Data [_bege ],bm2 .Data [_cagb ]>>uint (_def );_feec =_edcf &_dcba ;_gccbg +=tab [_feec ];
for _adaf =1;_adaf < _cbcd ;_adaf ++{_edcf ,_dcba =bm1 .Data [_bege +_adaf ],(bm2 .Data [_cagb +_adaf ]>>uint (_def ))|(bm2 .Data [_cagb +_adaf -1]<<uint (8-_def ));_feec =_edcf &_dcba ;_gccbg +=tab [_feec ];};_edcf =bm1 .Data [_bege +_adaf ];_dcba =bm2 .Data [_cagb +_adaf -1]<<uint (8-_def );
_feec =_edcf &_dcba ;_gccbg +=tab [_feec ];};}else {for _eda =_dfcg ;_eda < _gcfe ;_eda ,_bege ,_cagb =_eda +1,_bege +bm1 .RowStride ,_cagb +bm2 .RowStride {_edcf ,_dcba =bm1 .Data [_bege ],bm2 .Data [_cagb ]>>uint (_def );_feec =_edcf &_dcba ;_gccbg +=tab [_feec ];
for _adaf =1;_adaf < _babcd ;_adaf ++{_edcf =bm1 .Data [_bege +_adaf ];_dcba =(bm2 .Data [_cagb +_adaf ]>>uint (_def ))|(bm2 .Data [_cagb +_adaf -1]<<uint (8-_def ));_feec =_edcf &_dcba ;_gccbg +=tab [_feec ];};};};default:if _babcd < _cbcd {for _eda =_dfcg ;
_eda < _gcfe ;_eda ,_bege ,_cagb =_eda +1,_bege +bm1 .RowStride ,_cagb +bm2 .RowStride {for _adaf =0;_adaf < _babcd ;_adaf ++{_edcf =bm1 .Data [_bege +_adaf ];_dcba =bm2 .Data [_cagb +_adaf ]<<uint (-_def );_dcba |=bm2 .Data [_cagb +_adaf +1]>>uint (8+_def );
_feec =_edcf &_dcba ;_gccbg +=tab [_feec ];};};}else {for _eda =_dfcg ;_eda < _gcfe ;_eda ,_bege ,_cagb =_eda +1,_bege +bm1 .RowStride ,_cagb +bm2 .RowStride {for _adaf =0;_adaf < _babcd -1;_adaf ++{_edcf =bm1 .Data [_bege +_adaf ];_dcba =bm2 .Data [_cagb +_adaf ]<<uint (-_def );
_dcba |=bm2 .Data [_cagb +_adaf +1]>>uint (8+_def );_feec =_edcf &_dcba ;_gccbg +=tab [_feec ];};_edcf =bm1 .Data [_bege +_adaf ];_dcba =bm2 .Data [_cagb +_adaf ]<<uint (-_def );_feec =_edcf &_dcba ;_gccbg +=tab [_feec ];};};};_beda =float64 (_gccbg )*float64 (_gccbg )/(float64 (area1 )*float64 (area2 ));
return _beda ,nil ;};func (_dcfaf *ClassedPoints )ySortFunction ()func (_dfab int ,_acfb int )bool {return func (_eecb ,_dbedb int )bool {return _dcfaf .YAtIndex (_eecb )< _dcfaf .YAtIndex (_dbedb )};};func Centroids (bms []*Bitmap )(*Points ,error ){_cfab :=make ([]Point ,len (bms ));
_bace :=_gafe ();_agef :=_efeg ();var _dcdc error ;for _cdff ,_daff :=range bms {_cfab [_cdff ],_dcdc =_daff .centroid (_bace ,_agef );if _dcdc !=nil {return nil ,_dcdc ;};};_fgeg :=Points (_cfab );return &_fgeg ,nil ;};func _gce (_egg *Bitmap ,_gec int ,_aadb []byte )(_daa *Bitmap ,_cge error ){const _beb ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";
if _egg ==nil {return nil ,_f .Error (_beb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _gec < 1||_gec > 4{return nil ,_f .Error (_beb ,"\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 _egg .Height <=1{return nil ,_f .Errorf (_beb ,"\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",_egg .Height );
};_daa =New (_egg .Width /2,_egg .Height /2);if _aadb ==nil {_aadb =_fbf ();};_gfd :=_dfbg (_egg .RowStride ,2*_daa .RowStride );switch _gec {case 1:_cge =_dfdc (_egg ,_daa ,_gec ,_aadb ,_gfd );case 2:_cge =_adc (_egg ,_daa ,_gec ,_aadb ,_gfd );case 3:_cge =_ab (_egg ,_daa ,_gec ,_aadb ,_gfd );
case 4:_cge =_dbf (_egg ,_daa ,_gec ,_aadb ,_gfd );};if _cge !=nil {return nil ,_cge ;};return _daa ,nil ;};func MakePixelSumTab8 ()[]int {return _efeg ()};func TstNSymbol (t *_g .T ,scale ...int )*Bitmap {_cddf ,_deeb :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});
_d .NoError (t ,_deeb );return TstGetScaledSymbol (t ,_cddf ,scale ...);};func (_bce *Bitmap )GetBitOffset (x int )int {return x &0x07};func _gbdae (_gfcd *Bitmap ,_bfga ,_fcag int ,_eefca ,_gdecf int ,_ccgeb RasterOperator ){var (_daffa int ;_agbf byte ;
_eeaff ,_egcfe int ;_agag int ;);_degd :=_eefca >>3;_dafb :=_eefca &7;if _dafb > 0{_agbf =_gccbe [_dafb ];};_daffa =_gfcd .RowStride *_fcag +(_bfga >>3);switch _ccgeb {case PixClr :for _eeaff =0;_eeaff < _gdecf ;_eeaff ++{_agag =_daffa +_eeaff *_gfcd .RowStride ;
for _egcfe =0;_egcfe < _degd ;_egcfe ++{_gfcd .Data [_agag ]=0x0;_agag ++;};if _dafb > 0{_gfcd .Data [_agag ]=_daea (_gfcd .Data [_agag ],0x0,_agbf );};};case PixSet :for _eeaff =0;_eeaff < _gdecf ;_eeaff ++{_agag =_daffa +_eeaff *_gfcd .RowStride ;for _egcfe =0;
_egcfe < _degd ;_egcfe ++{_gfcd .Data [_agag ]=0xff;_agag ++;};if _dafb > 0{_gfcd .Data [_agag ]=_daea (_gfcd .Data [_agag ],0xff,_agbf );};};case PixNotDst :for _eeaff =0;_eeaff < _gdecf ;_eeaff ++{_agag =_daffa +_eeaff *_gfcd .RowStride ;for _egcfe =0;
_egcfe < _degd ;_egcfe ++{_gfcd .Data [_agag ]=^_gfcd .Data [_agag ];_agag ++;};if _dafb > 0{_gfcd .Data [_agag ]=_daea (_gfcd .Data [_agag ],^_gfcd .Data [_agag ],_agbf );};};};};type fillSegment struct{_caddb int ;_aaad int ;_dggc int ;_cdde int ;};func TstOSymbol (t *_g .T ,scale ...int )*Bitmap {_acded ,_dgbe :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});
_d .NoError (t ,_dgbe );return TstGetScaledSymbol (t ,_acded ,scale ...);};func _dfbg (_ccgcg ,_dad int )int {if _ccgcg < _dad {return _ccgcg ;};return _dad ;};func (_adec *ClassedPoints )SortByY (){_adec ._abda =_adec .ySortFunction ();_fb .Sort (_adec )};
func (_eede *Points )Add (pt *Points )error {const _feag ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _eede ==nil {return _f .Error (_feag ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if pt ==nil {return _f .Error (_feag ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_eede =append (*_eede ,*pt ...);return nil ;};func _adc (_fbb ,_ccg *Bitmap ,_dbaa int ,_aca []byte ,_gdb int )(_fgb error ){const _acgg ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";
var (_cba ,_edf ,_gac ,_fcb ,_dc ,_gca ,_ggb ,_bcg int ;_dce ,_acb ,_ede ,_ece uint32 ;_acac ,_bdgb byte ;_gecd uint16 ;);_eefc :=make ([]byte ,4);_bca :=make ([]byte ,4);for _gac =0;_gac < _fbb .Height -1;_gac ,_fcb =_gac +2,_fcb +1{_cba =_gac *_fbb .RowStride ;
_edf =_fcb *_ccg .RowStride ;for _dc ,_gca =0,0;_dc < _gdb ;_dc ,_gca =_dc +4,_gca +1{for _ggb =0;_ggb < 4;_ggb ++{_bcg =_cba +_dc +_ggb ;if _bcg <=len (_fbb .Data )-1&&_bcg < _cba +_fbb .RowStride {_eefc [_ggb ]=_fbb .Data [_bcg ];}else {_eefc [_ggb ]=0x00;
};_bcg =_cba +_fbb .RowStride +_dc +_ggb ;if _bcg <=len (_fbb .Data )-1&&_bcg < _cba +(2*_fbb .RowStride ){_bca [_ggb ]=_fbb .Data [_bcg ];}else {_bca [_ggb ]=0x00;};};_dce =_aa .BigEndian .Uint32 (_eefc );_acb =_aa .BigEndian .Uint32 (_bca );_ede =_dce &_acb ;
_ede |=_ede <<1;_ece =_dce |_acb ;_ece &=_ece <<1;_acb =_ede |_ece ;_acb &=0xaaaaaaaa;_dce =_acb |(_acb <<7);_acac =byte (_dce >>24);_bdgb =byte ((_dce >>8)&0xff);_bcg =_edf +_gca ;if _bcg +1==len (_ccg .Data )-1||_bcg +1>=_edf +_ccg .RowStride {if _fgb =_ccg .SetByte (_bcg ,_aca [_acac ]);
_fgb !=nil {return _f .Wrapf (_fgb ,_acgg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_bcg );};}else {_gecd =(uint16 (_aca [_acac ])<<8)|uint16 (_aca [_bdgb ]);if _fgb =_ccg .setTwoBytes (_bcg ,_gecd );_fgb !=nil {return _f .Wrapf (_fgb ,_acgg ,"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",_bcg );
};_gca ++;};};};return nil ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_fbc .Rectangle ;};func (_aaed *Bitmap )removeBorderGeneral (_ggad ,_ffaf ,_beba ,_caff int )(*Bitmap ,error ){const _bbb ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
if _ggad < 0||_ffaf < 0||_beba < 0||_caff < 0{return nil ,_f .Error (_bbb ,"\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");};_fgc ,_ggac :=_aaed .Width ,_aaed .Height ;
_ebeba :=_fgc -_ggad -_ffaf ;_bgea :=_ggac -_beba -_caff ;if _ebeba <=0{return nil ,_f .Errorf (_bbb ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_ebeba );};if _bgea <=0{return nil ,_f .Errorf (_bbb ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_bgea );
};_ggeb :=New (_ebeba ,_bgea );_ggeb .Color =_aaed .Color ;_ffff :=_ggeb .RasterOperation (0,0,_ebeba ,_bgea ,PixSrc ,_aaed ,_ggad ,_beba );if _ffff !=nil {return nil ,_f .Wrap (_ffff ,_bbb ,"");};return _ggeb ,nil ;};type Points []Point ;func NewClassedPoints (points *Points ,classes _e .IntSlice )(*ClassedPoints ,error ){const _aedc ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";
if points ==nil {return nil ,_f .Error (_aedc ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_f .Error (_aedc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");
};_abgf :=&ClassedPoints {Points :points ,IntSlice :classes };if _fdac :=_abgf .validateIntSlice ();_fdac !=nil {return nil ,_f .Wrap (_fdac ,_aedc ,"");};return _abgf ,nil ;};func (_acgb *Bitmaps )selectByIndexes (_dfedd []int )(*Bitmaps ,error ){_gbbg :=&Bitmaps {};
for _ ,_fbgg :=range _dfedd {_caef ,_bdfc :=_acgb .GetBitmap (_fbgg );if _bdfc !=nil {return nil ,_f .Wrap (_bdfc ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_gbbg .AddBitmap (_caef );};return _gbbg ,nil ;};
func (_ceaa *byWidth )Swap (i ,j int ){_ceaa .Values [i ],_ceaa .Values [j ]=_ceaa .Values [j ],_ceaa .Values [i ];if _ceaa .Boxes !=nil {_ceaa .Boxes [i ],_ceaa .Boxes [j ]=_ceaa .Boxes [j ],_ceaa .Boxes [i ];};};func TstPSymbol (t *_g .T )*Bitmap {t .Helper ();
_gbgge :=New (5,8);_d .NoError (t ,_gbgge .SetPixel (0,0,1));_d .NoError (t ,_gbgge .SetPixel (1,0,1));_d .NoError (t ,_gbgge .SetPixel (2,0,1));_d .NoError (t ,_gbgge .SetPixel (3,0,1));_d .NoError (t ,_gbgge .SetPixel (4,1,1));_d .NoError (t ,_gbgge .SetPixel (0,1,1));
_d .NoError (t ,_gbgge .SetPixel (4,2,1));_d .NoError (t ,_gbgge .SetPixel (0,2,1));_d .NoError (t ,_gbgge .SetPixel (4,3,1));_d .NoError (t ,_gbgge .SetPixel (0,3,1));_d .NoError (t ,_gbgge .SetPixel (0,4,1));_d .NoError (t ,_gbgge .SetPixel (1,4,1));
_d .NoError (t ,_gbgge .SetPixel (2,4,1));_d .NoError (t ,_gbgge .SetPixel (3,4,1));_d .NoError (t ,_gbgge .SetPixel (0,5,1));_d .NoError (t ,_gbgge .SetPixel (0,6,1));_d .NoError (t ,_gbgge .SetPixel (0,7,1));return _gbgge ;};func (_dggf *Bitmaps )CountPixels ()*_e .NumSlice {_cefg :=&_e .NumSlice {};
for _ ,_adbf :=range _dggf .Values {_cefg .AddInt (_adbf .CountPixels ());};return _cefg ;};func (_fgda *Boxes )selectWithIndicator (_cgccf *_e .NumSlice )(_gcea *Boxes ,_adfa error ){const _deb ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _fgda ==nil {return nil ,_f .Error (_deb ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _cgccf ==nil {return nil ,_f .Error (_deb ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if len (*_cgccf )!=len (*_fgda ){return nil ,_f .Error (_deb ,"\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 _fbdg ,_ebcb int ;for _eecg :=0;_eecg < len (*_cgccf );_eecg ++{if _fbdg ,_adfa =_cgccf .GetInt (_eecg );_adfa !=nil {return nil ,_f .Wrap (_adfa ,_deb ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _fbdg ==1{_ebcb ++;
};};if _ebcb ==len (*_fgda ){return _fgda ,nil ;};_agbg :=Boxes {};for _dafa :=0;_dafa < len (*_cgccf );_dafa ++{_fbdg =int ((*_cgccf )[_dafa ]);if _fbdg ==0{continue ;};_agbg =append (_agbg ,(*_fgda )[_dafa ]);};_gcea =&_agbg ;return _gcea ,nil ;};func TstWordBitmap (t *_g .T ,scale ...int )*Bitmap {_geeg :=1;
if len (scale )> 0{_geeg =scale [0];};_dbef :=3;_ccdc :=9+7+15+2*_dbef ;_fddd :=5+_dbef +5;_ggafa :=New (_ccdc *_geeg ,_fddd *_geeg );_baad :=&Bitmaps {};var _dfdf *int ;_dbef *=_geeg ;_fgga :=0;_dfdf =&_fgga ;_ggefc :=0;_dgfg :=TstDSymbol (t ,scale ...);
TstAddSymbol (t ,_baad ,_dgfg ,_dfdf ,_ggefc ,1*_geeg );_dgfg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_baad ,_dgfg ,_dfdf ,_ggefc ,_dbef );_dgfg =TstISymbol (t ,scale ...);TstAddSymbol (t ,_baad ,_dgfg ,_dfdf ,_ggefc ,1*_geeg );_dgfg =TstTSymbol (t ,scale ...);
TstAddSymbol (t ,_baad ,_dgfg ,_dfdf ,_ggefc ,_dbef );_dgfg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_baad ,_dgfg ,_dfdf ,_ggefc ,1*_geeg );_dgfg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_baad ,_dgfg ,_dfdf ,_ggefc ,1*_geeg );_dgfg =TstWSymbol (t ,scale ...);
TstAddSymbol (t ,_baad ,_dgfg ,_dfdf ,_ggefc ,0);*_dfdf =0;_ggefc =5*_geeg +_dbef ;_dgfg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_baad ,_dgfg ,_dfdf ,_ggefc ,1*_geeg );_dgfg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_baad ,_dgfg ,_dfdf ,_ggefc ,_dbef );
_dgfg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_baad ,_dgfg ,_dfdf ,_ggefc ,1*_geeg );_dgfg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_baad ,_dgfg ,_dfdf ,_ggefc ,1*_geeg );_dgfg =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_baad ,_dgfg ,_dfdf ,_ggefc ,1*_geeg );
_dgfg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_baad ,_dgfg ,_dfdf ,_ggefc ,1*_geeg );_dgfg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_baad ,_dgfg ,_dfdf ,_ggefc ,0);TstWriteSymbols (t ,_baad ,_ggafa );return _ggafa ;};func (_ecde *Points )AddPoint (x ,y float32 ){*_ecde =append (*_ecde ,Point {x ,y })};
func (_gggdd *Bitmaps )AddBox (box *_fbc .Rectangle ){_gggdd .Boxes =append (_gggdd .Boxes ,box )};func (_gfga *Bitmap )SetPadBits (value int ){_gfga .setPadBits (value )};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;
CmbOpNot ;);func (_bccdg *ClassedPoints )Swap (i ,j int ){_bccdg .IntSlice [i ],_bccdg .IntSlice [j ]=_bccdg .IntSlice [j ],_bccdg .IntSlice [i ];};func _dgae (_cec uint ,_babf byte )byte {return _babf >>_cec <<_cec };func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _fedf (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};type Bitmaps struct{Values []*Bitmap ;Boxes []*_fbc .Rectangle ;};func _agfa (_dfgb ,_agdaf ,_gdce *Bitmap )(*Bitmap ,error ){const _ebcd ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _agdaf ==nil {return nil ,_f .Error (_ebcd ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
};if _gdce ==nil {return nil ,_f .Error (_ebcd ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _dfgb ==_gdce {return nil ,_f .Error (_ebcd ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_agdaf .SizesEqual (_gdce ){_gg .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",_ebcd );
};var _ecbe error ;if _dfgb ,_ecbe =_dbfae (_dfgb ,_agdaf );_ecbe !=nil {return nil ,_f .Wrap (_ecbe ,_ebcd ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _ecbe =_dfgb .RasterOperation (0,0,_dfgb .Width ,_dfgb .Height ,PixSrcXorDst ,_gdce ,0,0);
_ecbe !=nil {return nil ,_f .Wrap (_ecbe ,_ebcd ,"");};return _dfgb ,nil ;};func (_bagf *Boxes )makeSizeIndicator (_aagc ,_adfe int ,_fabgf LocationFilter ,_gcg SizeComparison )*_e .NumSlice {_ggfb :=&_e .NumSlice {};var _cedc ,_bfdad ,_fbda int ;for _ ,_adab :=range *_bagf {_cedc =0;
_bfdad ,_fbda =_adab .Dx (),_adab .Dy ();switch _fabgf {case LocSelectWidth :if (_gcg ==SizeSelectIfLT &&_bfdad < _aagc )||(_gcg ==SizeSelectIfGT &&_bfdad > _aagc )||(_gcg ==SizeSelectIfLTE &&_bfdad <=_aagc )||(_gcg ==SizeSelectIfGTE &&_bfdad >=_aagc ){_cedc =1;
};case LocSelectHeight :if (_gcg ==SizeSelectIfLT &&_fbda < _adfe )||(_gcg ==SizeSelectIfGT &&_fbda > _adfe )||(_gcg ==SizeSelectIfLTE &&_fbda <=_adfe )||(_gcg ==SizeSelectIfGTE &&_fbda >=_adfe ){_cedc =1;};case LocSelectIfEither :if (_gcg ==SizeSelectIfLT &&(_fbda < _adfe ||_bfdad < _aagc ))||(_gcg ==SizeSelectIfGT &&(_fbda > _adfe ||_bfdad > _aagc ))||(_gcg ==SizeSelectIfLTE &&(_fbda <=_adfe ||_bfdad <=_aagc ))||(_gcg ==SizeSelectIfGTE &&(_fbda >=_adfe ||_bfdad >=_aagc )){_cedc =1;
};case LocSelectIfBoth :if (_gcg ==SizeSelectIfLT &&(_fbda < _adfe &&_bfdad < _aagc ))||(_gcg ==SizeSelectIfGT &&(_fbda > _adfe &&_bfdad > _aagc ))||(_gcg ==SizeSelectIfLTE &&(_fbda <=_adfe &&_bfdad <=_aagc ))||(_gcg ==SizeSelectIfGTE &&(_fbda >=_adfe &&_bfdad >=_aagc )){_cedc =1;
};};_ggfb .AddInt (_cedc );};return _ggfb ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_ceef bool ,_fefb error ){const _cbdc ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
_aeffe ,_beff :=p1 .Width ,p1 .Height ;_eebc ,_gbcef :=p3 .Width ,p3 .Height ;if _e .Abs (_aeffe -_eebc )> maxDiffW {return false ,nil ;};if _e .Abs (_beff -_gbcef )> maxDiffH {return false ,nil ;};_geba :=int (float32 (area1 )*(1.0-rank )+0.5);_dfdd :=int (float32 (area3 )*(1.0-rank )+0.5);
var _abfb ,_cfda int ;if delX >=0{_abfb =int (delX +0.5);}else {_abfb =int (delX -0.5);};if delY >=0{_cfda =int (delY +0.5);}else {_cfda =int (delY -0.5);};_gaba :=p1 .CreateTemplate ();if _fefb =_gaba .RasterOperation (0,0,_aeffe ,_beff ,PixSrc ,p1 ,0,0);
_fefb !=nil {return false ,_f .Wrap (_fefb ,_cbdc ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _fefb =_gaba .RasterOperation (_abfb ,_cfda ,_aeffe ,_beff ,PixNotSrcAndDst ,p4 ,0,0);_fefb !=nil {return false ,_f .Wrap (_fefb ,_cbdc ,"\u0074 \u0026\u0020\u0021\u0070\u0034");
};_ceef ,_fefb =_gaba .ThresholdPixelSum (_geba ,tab8 );if _fefb !=nil {return false ,_f .Wrap (_fefb ,_cbdc ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _ceef {return false ,nil ;};if _fefb =_gaba .RasterOperation (_abfb ,_cfda ,_eebc ,_gbcef ,PixSrc ,p3 ,0,0);
_fefb !=nil {return false ,_f .Wrap (_fefb ,_cbdc ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _fefb =_gaba .RasterOperation (0,0,_eebc ,_gbcef ,PixNotSrcAndDst ,p2 ,0,0);_fefb !=nil {return false ,_f .Wrap (_fefb ,_cbdc ,"\u0074 \u0026\u0020\u0021\u0070\u0032");
};_ceef ,_fefb =_gaba .ThresholdPixelSum (_dfdd ,tab8 );if _fefb !=nil {return false ,_f .Wrap (_fefb ,_cbdc ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_ceef ,nil ;};func _ddaad (_eadg ,_ddba *Bitmap ,_ecaa ,_dgaa int )(_fcgdc error ){const _cfcd ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";
var (_cafa ,_adfba ,_eagc ,_ebecb int ;_ceed ,_gcbab ,_bedfc ,_fegf ,_ecaefg ,_cecg ,_fbcg byte ;);for _cafa =0;_cafa < _ecaa ;_cafa ++{_eagc =_cafa *_eadg .RowStride ;_ebecb =_cafa *_ddba .RowStride ;for _adfba =0;_adfba < _dgaa ;_adfba ++{_ceed ,_fcgdc =_eadg .GetByte (_eagc +_adfba );
if _fcgdc !=nil {return _f .Wrap (_fcgdc ,_cfcd ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_gcbab ,_fcgdc =_ddba .GetByte (_ebecb +_adfba );if _fcgdc !=nil {return _f .Wrap (_fcgdc ,_cfcd ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");
};if _cafa > 0{_bedfc ,_fcgdc =_eadg .GetByte (_eagc -_eadg .RowStride +_adfba );if _fcgdc !=nil {return _f .Wrap (_fcgdc ,_cfcd ,"\u0069\u0020\u003e \u0030");};_ceed |=_bedfc ;};if _adfba > 0{_fegf ,_fcgdc =_eadg .GetByte (_eagc +_adfba -1);if _fcgdc !=nil {return _f .Wrap (_fcgdc ,_cfcd ,"\u006a\u0020\u003e \u0030");
};_ceed |=_fegf <<7;};_ceed &=_gcbab ;if _ceed ==0||(^_ceed )==0{if _fcgdc =_eadg .SetByte (_eagc +_adfba ,_ceed );_fcgdc !=nil {return _f .Wrap (_fcgdc ,_cfcd ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");
};continue ;};for {_fbcg =_ceed ;_ceed =(_ceed |(_ceed >>1)|(_ceed <<1))&_gcbab ;if (_ceed ^_fbcg )==0{if _fcgdc =_eadg .SetByte (_eagc +_adfba ,_ceed );_fcgdc !=nil {return _f .Wrap (_fcgdc ,_cfcd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
};break ;};};};};for _cafa =_ecaa -1;_cafa >=0;_cafa --{_eagc =_cafa *_eadg .RowStride ;_ebecb =_cafa *_ddba .RowStride ;for _adfba =_dgaa -1;_adfba >=0;_adfba --{if _ceed ,_fcgdc =_eadg .GetByte (_eagc +_adfba );_fcgdc !=nil {return _f .Wrap (_fcgdc ,_cfcd ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");
};if _gcbab ,_fcgdc =_ddba .GetByte (_ebecb +_adfba );_fcgdc !=nil {return _f .Wrap (_fcgdc ,_cfcd ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _cafa < _ecaa -1{if _ecaefg ,_fcgdc =_eadg .GetByte (_eagc +_eadg .RowStride +_adfba );
_fcgdc !=nil {return _f .Wrap (_fcgdc ,_cfcd ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_ceed |=_ecaefg ;};if _adfba < _dgaa -1{if _cecg ,_fcgdc =_eadg .GetByte (_eagc +_adfba +1);_fcgdc !=nil {return _f .Wrap (_fcgdc ,_cfcd ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");
};_ceed |=_cecg >>7;};_ceed &=_gcbab ;if _ceed ==0||(^_ceed )==0{if _fcgdc =_eadg .SetByte (_eagc +_adfba ,_ceed );_fcgdc !=nil {return _f .Wrap (_fcgdc ,_cfcd ,"\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 {_fbcg =_ceed ;_ceed =(_ceed |(_ceed >>1)|(_ceed <<1))&_gcbab ;if (_ceed ^_fbcg )==0{if _fcgdc =_eadg .SetByte (_eagc +_adfba ,_ceed );_fcgdc !=nil {return _f .Wrap (_fcgdc ,_cfcd ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
};break ;};};};};return nil ;};var _bdga =[5]int {1,2,3,0,4};func (_eba *Bitmap )SizesEqual (s *Bitmap )bool {if _eba ==s {return true ;};if _eba .Width !=s .Width ||_eba .Height !=s .Height {return false ;};return true ;};func (_baba *Bitmaps )selectByIndicator (_dgcfd *_e .NumSlice )(_dgdf *Bitmaps ,_dgbg error ){const _eebe ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _baba ==nil {return nil ,_f .Error (_eebe ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _dgcfd ==nil {return nil ,_f .Error (_eebe ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};if len (_baba .Values )==0{return _baba ,nil ;};if len (*_dgcfd )!=len (_baba .Values ){return nil ,_f .Errorf (_eebe ,"\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 (*_dgcfd ),len (_baba .Values ));
};var _cbgag ,_gbfc ,_gdeg int ;for _gbfc =0;_gbfc < len (*_dgcfd );_gbfc ++{if _cbgag ,_dgbg =_dgcfd .GetInt (_gbfc );_dgbg !=nil {return nil ,_f .Wrap (_dgbg ,_eebe ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _cbgag ==1{_gdeg ++;
};};if _gdeg ==len (_baba .Values ){return _baba ,nil ;};_dgdf =&Bitmaps {};_aeab :=len (_baba .Values )==len (_baba .Boxes );for _gbfc =0;_gbfc < len (*_dgcfd );_gbfc ++{if _cbgag =int ((*_dgcfd )[_gbfc ]);_cbgag ==0{continue ;};_dgdf .Values =append (_dgdf .Values ,_baba .Values [_gbfc ]);
if _aeab {_dgdf .Boxes =append (_dgdf .Boxes ,_baba .Boxes [_gbfc ]);};};return _dgdf ,nil ;};func (_bfc MorphProcess )getWidthHeight ()(_eadc ,_afdab int ){return _bfc .Arguments [0],_bfc .Arguments [1];};func (_fbbe *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _ddbd ="\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 >=_fbbe .IntSlice .Size (){return 0,_f .Errorf (_ddbd ,"\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 (_fbbe .YAtIndex (i )),nil ;};func _edbb (_cdeb ,_fccg *Bitmap ,_cgab ,_gdcb int )(*Bitmap ,error ){const _cgdg ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _fccg ==nil {return nil ,_f .Error (_cgdg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _cgab < 1&&_gdcb < 1{return nil ,_f .Error (_cgdg ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _cgab ==1&&_gdcb ==1{return _fccg .Copy (),nil ;};if _cgab ==1||_gdcb ==1{var _gega error ;
_dcca :=SelCreateBrick (_gdcb ,_cgab ,_gdcb /2,_cgab /2,SelHit );_cdeb ,_gega =_ccfce (_cdeb ,_fccg ,_dcca );if _gega !=nil {return nil ,_f .Wrap (_gega ,_cgdg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _cdeb ,nil ;};_edag :=SelCreateBrick (1,_cgab ,0,_cgab /2,SelHit );_fbee :=SelCreateBrick (_gdcb ,1,_gdcb /2,0,SelHit );_fabga ,_dcef :=_afbe (nil ,_fccg ,_edag );if _dcef !=nil {return nil ,_f .Wrap (_dcef ,_cgdg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_cdeb ,_dcef =_afbe (_cdeb ,_fabga ,_fbee );if _dcef !=nil {return nil ,_f .Wrap (_dcef ,_cgdg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_dcef =_afgc (_fabga ,_cdeb ,_edag );if _dcef !=nil {return nil ,_f .Wrap (_dcef ,_cgdg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_ ,_dcef =_afgc (_cdeb ,_fabga ,_fbee );if _dcef !=nil {return nil ,_f .Wrap (_dcef ,_cgdg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _cdeb ,nil ;};func (_ebfg *Bitmap )ToImage ()_fbc .Image {_eea ,_faa :=_c .NewImage (_ebfg .Width ,_ebfg .Height ,1,1,_ebfg .Data ,nil ,nil );
if _faa !=nil {_gg .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",_faa );
};return _eea ;};func _fadg (_cfg ,_egef *Bitmap ,_gdaf ,_dgeg ,_cfae uint ,_egefe ,_ecba int ,_fgfc bool ,_egcf ,_egf int )error {for _cadb :=_egefe ;_cadb < _ecba ;_cadb ++{if _egcf +1< len (_cfg .Data ){_eaff :=_cadb +1==_ecba ;_gddf ,_fgde :=_cfg .GetByte (_egcf );
if _fgde !=nil {return _fgde ;};_egcf ++;_gddf <<=_gdaf ;_begf ,_fgde :=_cfg .GetByte (_egcf );if _fgde !=nil {return _fgde ;};_begf >>=_dgeg ;_abdc :=_gddf |_begf ;if _eaff &&!_fgfc {_abdc =_dgae (_cfae ,_abdc );};_fgde =_egef .SetByte (_egf ,_abdc );
if _fgde !=nil {return _fgde ;};_egf ++;if _eaff &&_fgfc {_aeff ,_cfbc :=_cfg .GetByte (_egcf );if _cfbc !=nil {return _cfbc ;};_aeff <<=_gdaf ;_abdc =_dgae (_cfae ,_aeff );if _cfbc =_egef .SetByte (_egf ,_abdc );_cfbc !=nil {return _cfbc ;};};continue ;
};_cdeg ,_cccc :=_cfg .GetByte (_egcf );if _cccc !=nil {_gg .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",_egcf ,_cccc );
return _cccc ;};_cdeg <<=_gdaf ;_egcf ++;_cccc =_egef .SetByte (_egf ,_cdeg );if _cccc !=nil {return _cccc ;};_egf ++;};return nil ;};func (_gaef *Boxes )Add (box *_fbc .Rectangle )error {if _gaef ==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");
};*_gaef =append (*_gaef ,box );return nil ;};func (_dfg *Bitmap )equivalent (_aab *Bitmap )bool {if _dfg ==_aab {return true ;};if !_dfg .SizesEqual (_aab ){return false ;};_cde :=_aga (_dfg ,_aab ,CmbOpXor );_abc :=_dfg .countPixels ();_beca :=int (0.25*float32 (_abc ));
if _cde .thresholdPixelSum (_beca ){return false ;};var (_gbb [9][9]int ;_acaa [18][9]int ;_acad [9][18]int ;_acacd int ;_efga int ;);_cdcf :=9;_fadd :=_dfg .Height /_cdcf ;_bcc :=_dfg .Width /_cdcf ;_gdda ,_bbd :=_fadd /2,_bcc /2;if _fadd < _bcc {_gdda =_bcc /2;
_bbd =_fadd /2;};_baef :=float64 (_gdda )*float64 (_bbd )*_df .Pi ;_gbcb :=int (float64 (_fadd *_bcc /2)*0.9);_daabf :=int (float64 (_bcc *_fadd /2)*0.9);for _adbcf :=0;_adbcf < _cdcf ;_adbcf ++{_efec :=_bcc *_adbcf +_acacd ;var _dae int ;if _adbcf ==_cdcf -1{_acacd =0;
_dae =_dfg .Width ;}else {_dae =_efec +_bcc ;if ((_dfg .Width -_acacd )%_cdcf )> 0{_acacd ++;_dae ++;};};for _dga :=0;_dga < _cdcf ;_dga ++{_fdfc :=_fadd *_dga +_efga ;var _ffd int ;if _dga ==_cdcf -1{_efga =0;_ffd =_dfg .Height ;}else {_ffd =_fdfc +_fadd ;
if (_dfg .Height -_efga )%_cdcf > 0{_efga ++;_ffd ++;};};var _bcab ,_ccge ,_gaea ,_abeg int ;_adg :=(_efec +_dae )/2;_dda :=(_fdfc +_ffd )/2;for _gbfe :=_efec ;_gbfe < _dae ;_gbfe ++{for _eced :=_fdfc ;_eced < _ffd ;_eced ++{if _cde .GetPixel (_gbfe ,_eced ){if _gbfe < _adg {_bcab ++;
}else {_ccge ++;};if _eced < _dda {_abeg ++;}else {_gaea ++;};};};};_gbb [_adbcf ][_dga ]=_bcab +_ccge ;_acaa [_adbcf *2][_dga ]=_bcab ;_acaa [_adbcf *2+1][_dga ]=_ccge ;_acad [_adbcf ][_dga *2]=_abeg ;_acad [_adbcf ][_dga *2+1]=_gaea ;};};for _cadd :=0;
_cadd < _cdcf *2-1;_cadd ++{for _add :=0;_add < (_cdcf -1);_add ++{var _ebgf int ;for _fggg :=0;_fggg < 2;_fggg ++{for _bgdg :=0;_bgdg < 2;_bgdg ++{_ebgf +=_acaa [_cadd +_fggg ][_add +_bgdg ];};};if _ebgf > _daabf {return false ;};};};for _cga :=0;_cga < (_cdcf -1);
_cga ++{for _cbb :=0;_cbb < ((_cdcf *2)-1);_cbb ++{var _cae int ;for _bcd :=0;_bcd < 2;_bcd ++{for _bge :=0;_bge < 2;_bge ++{_cae +=_acad [_cga +_bcd ][_cbb +_bge ];};};if _cae > _gbcb {return false ;};};};for _bff :=0;_bff < (_cdcf -2);_bff ++{for _gcfb :=0;
_gcfb < (_cdcf -2);_gcfb ++{var _abb ,_dfc int ;for _aggf :=0;_aggf < 3;_aggf ++{for _abf :=0;_abf < 3;_abf ++{if _aggf ==_abf {_abb +=_gbb [_bff +_aggf ][_gcfb +_abf ];};if (2-_aggf )==_abf {_dfc +=_gbb [_bff +_aggf ][_gcfb +_abf ];};};};if _abb > _daabf ||_dfc > _daabf {return false ;
};};};for _eca :=0;_eca < (_cdcf -1);_eca ++{for _acca :=0;_acca < (_cdcf -1);_acca ++{var _begc int ;for _dgb :=0;_dgb < 2;_dgb ++{for _fcfe :=0;_fcfe < 2;_fcfe ++{_begc +=_gbb [_eca +_dgb ][_acca +_fcfe ];};};if float64 (_begc )> _baef {return false ;
};};};return true ;};func (_edac *Bitmaps )String ()string {_ebfc :=_bg .Builder {};for _ ,_dcdd :=range _edac .Values {_ebfc .WriteString (_dcdd .String ());_ebfc .WriteRune ('\n');};return _ebfc .String ();};func TstISymbol (t *_g .T ,scale ...int )*Bitmap {_acabc ,_acdf :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});
_d .NoError (t ,_acdf );return TstGetScaledSymbol (t ,_acabc ,scale ...);};func (_gcfea *Bitmaps )SortByHeight (){_dcgd :=(*byHeight )(_gcfea );_fb .Sort (_dcgd )};func (_fdebg *ClassedPoints )validateIntSlice ()error {const _cbea ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";
for _ ,_ccce :=range _fdebg .IntSlice {if _ccce >=(_fdebg .Points .Size ()){return _f .Errorf (_cbea ,"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",_ccce ,_fdebg .Points .Size ());
};};return nil ;};func _gafe ()[]int {_gded :=make ([]int ,256);_gded [0]=0;_gded [1]=7;var _bedf int ;for _bedf =2;_bedf < 4;_bedf ++{_gded [_bedf ]=_gded [_bedf -2]+6;};for _bedf =4;_bedf < 8;_bedf ++{_gded [_bedf ]=_gded [_bedf -4]+5;};for _bedf =8;
_bedf < 16;_bedf ++{_gded [_bedf ]=_gded [_bedf -8]+4;};for _bedf =16;_bedf < 32;_bedf ++{_gded [_bedf ]=_gded [_bedf -16]+3;};for _bedf =32;_bedf < 64;_bedf ++{_gded [_bedf ]=_gded [_bedf -32]+2;};for _bedf =64;_bedf < 128;_bedf ++{_gded [_bedf ]=_gded [_bedf -64]+1;
};for _bedf =128;_bedf < 256;_bedf ++{_gded [_bedf ]=_gded [_bedf -128];};return _gded ;};func (_ffdg *byHeight )Len ()int {return len (_ffdg .Values )};func _bad (_cddd ,_gad *Bitmap ,_dgf ,_agff int )(*Bitmap ,error ){const _dgfd ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";
if _gad ==nil {return nil ,_f .Error (_dgfd ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _dgf < 1||_agff < 1{return nil ,_f .Error (_dgfd ,"\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 _dgf ==1&&_agff ==1{_baga ,_afdg :=_dbfae (_cddd ,_gad );if _afdg !=nil {return nil ,_f .Wrap (_afdg ,_dgfd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _baga ,nil ;};if _dgf ==1||_agff ==1{_cefd :=SelCreateBrick (_agff ,_dgf ,_agff /2,_dgf /2,SelHit );_gaee ,_dacd :=_afbe (_cddd ,_gad ,_cefd );if _dacd !=nil {return nil ,_f .Wrap (_dacd ,_dgfd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _gaee ,nil ;};_cfdf :=SelCreateBrick (1,_dgf ,0,_dgf /2,SelHit );_edd :=SelCreateBrick (_agff ,1,_agff /2,0,SelHit );_dcga ,_dcccf :=_afbe (nil ,_gad ,_cfdf );if _dcccf !=nil {return nil ,_f .Wrap (_dcccf ,_dgfd ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_cddd ,_dcccf =_afbe (_cddd ,_dcga ,_edd );if _dcccf !=nil {return nil ,_f .Wrap (_dcccf ,_dgfd ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _cddd ,nil ;};func (_eedb Points )GetIntY (i int )(int ,error ){if i >=len (_eedb ){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 (_eedb [i ].Y ),nil ;};func (_aafc *Bitmap )GetByte (index int )(byte ,error ){if index > len (_aafc .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 _aafc .Data [index ],nil ;};type SizeComparison int ;func _acfc (_acdb *Bitmap ,_aea ...MorphProcess )(_abdg *Bitmap ,_bcge error ){const _dfadb ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _acdb ==nil {return nil ,_f .Error (_dfadb ,"\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 (_aea )==0{return nil ,_f .Error (_dfadb ,"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 _bcge =_egcd (_aea ...);
_bcge !=nil {return nil ,_f .Wrap (_bcge ,_dfadb ,"");};var _gbbe ,_faeb ,_egge int ;_abdg =_acdb .Copy ();for _ ,_acab :=range _aea {switch _acab .Operation {case MopDilation :_gbbe ,_faeb =_acab .getWidthHeight ();_abdg ,_bcge =DilateBrick (nil ,_abdg ,_gbbe ,_faeb );
if _bcge !=nil {return nil ,_f .Wrap (_bcge ,_dfadb ,"");};case MopErosion :_gbbe ,_faeb =_acab .getWidthHeight ();_abdg ,_bcge =_bad (nil ,_abdg ,_gbbe ,_faeb );if _bcge !=nil {return nil ,_f .Wrap (_bcge ,_dfadb ,"");};case MopOpening :_gbbe ,_faeb =_acab .getWidthHeight ();
_abdg ,_bcge =_edbb (nil ,_abdg ,_gbbe ,_faeb );if _bcge !=nil {return nil ,_f .Wrap (_bcge ,_dfadb ,"");};case MopClosing :_gbbe ,_faeb =_acab .getWidthHeight ();_abdg ,_bcge =_acbbf (nil ,_abdg ,_gbbe ,_faeb );if _bcge !=nil {return nil ,_f .Wrap (_bcge ,_dfadb ,"");
};case MopRankBinaryReduction :_abdg ,_bcge =_ca (_abdg ,_acab .Arguments ...);if _bcge !=nil {return nil ,_f .Wrap (_bcge ,_dfadb ,"");};case MopReplicativeBinaryExpansion :_abdg ,_bcge =_bbfa (_abdg ,_acab .Arguments [0]);if _bcge !=nil {return nil ,_f .Wrap (_bcge ,_dfadb ,"");
};case MopAddBorder :_egge =_acab .Arguments [0];_abdg ,_bcge =_abdg .AddBorder (_egge ,0);if _bcge !=nil {return nil ,_f .Wrap (_bcge ,_dfadb ,"");};default:return nil ,_f .Error (_dfadb ,"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 _egge > 0{_abdg ,_bcge =_abdg .RemoveBorder (_egge );if _bcge !=nil {return nil ,_f .Wrap (_bcge ,_dfadb ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _abdg ,nil ;};func (_cggeg *BitmapsArray )GetBox (i int )(*_fbc .Rectangle ,error ){const _dgga ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";
if _cggeg ==nil {return nil ,_f .Error (_dgga ,"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 (_cggeg .Boxes )-1{return nil ,_f .Errorf (_dgga ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _cggeg .Boxes [i ],nil ;};var _ggdgd =[]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 TstFrameBitmap ()*Bitmap {return _afdba .Copy ()};type Color int ;func _aefb (_dffg ,_dcbe byte ,_fgef CombinationOperator )byte {switch _fgef {case CmbOpOr :return _dcbe |_dffg ;case CmbOpAnd :return _dcbe &_dffg ;case CmbOpXor :return _dcbe ^_dffg ;
case CmbOpXNor :return ^(_dcbe ^_dffg );case CmbOpNot :return ^(_dcbe );default:return _dcbe ;};};type ClassedPoints struct{*Points ;_e .IntSlice ;_abda func (_addf ,_cbfac int )bool ;};func (_dgcf *Bitmap )nextOnPixelLow (_cfea ,_gceff ,_gcfc ,_bbc ,_bgbg int )(_eeb _fbc .Point ,_accb bool ,_aadbf error ){const _agda ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";
var (_gbcf int ;_ecae byte ;);_daee :=_bgbg *_gcfc ;_ecc :=_daee +(_bbc /8);if _ecae ,_aadbf =_dgcf .GetByte (_ecc );_aadbf !=nil {return _eeb ,false ,_f .Wrap (_aadbf ,_agda ,"\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 _ecae !=0{_ade :=_bbc -(_bbc %8)+7;for _gbcf =_bbc ;_gbcf <=_ade &&_gbcf < _cfea ;_gbcf ++{if _dgcf .GetPixel (_gbcf ,_bgbg ){_eeb .X =_gbcf ;_eeb .Y =_bgbg ;return _eeb ,true ,nil ;};};};_fffg :=(_bbc /8)+1;_gbcf =8*_fffg ;var _ebec int ;for _ecc =_daee +_fffg ;
_gbcf < _cfea ;_ecc ,_gbcf =_ecc +1,_gbcf +8{if _ecae ,_aadbf =_dgcf .GetByte (_ecc );_aadbf !=nil {return _eeb ,false ,_f .Wrap (_aadbf ,_agda ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};
if _ecae ==0{continue ;};for _ebec =0;_ebec < 8&&_gbcf < _cfea ;_ebec ,_gbcf =_ebec +1,_gbcf +1{if _dgcf .GetPixel (_gbcf ,_bgbg ){_eeb .X =_gbcf ;_eeb .Y =_bgbg ;return _eeb ,true ,nil ;};};};for _fcgd :=_bgbg +1;_fcgd < _gceff ;_fcgd ++{_daee =_fcgd *_gcfc ;
for _ecc ,_gbcf =_daee ,0;_gbcf < _cfea ;_ecc ,_gbcf =_ecc +1,_gbcf +8{if _ecae ,_aadbf =_dgcf .GetByte (_ecc );_aadbf !=nil {return _eeb ,false ,_f .Wrap (_aadbf ,_agda ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");
};if _ecae ==0{continue ;};for _ebec =0;_ebec < 8&&_gbcf < _cfea ;_ebec ,_gbcf =_ebec +1,_gbcf +1{if _dgcf .GetPixel (_gbcf ,_fcgd ){_eeb .X =_gbcf ;_eeb .Y =_fcgd ;return _eeb ,true ,nil ;};};};};return _eeb ,false ,nil ;};type Point struct{X ,Y float32 ;
};func _bccd (_fbdb ,_dfge *Bitmap ,_fcgc ,_bedga ,_gdec ,_aggb ,_cgfc int ,_dfce CombinationOperator )error {var _fgec int ;_dec :=func (){_fgec ++;_gdec +=_dfge .RowStride ;_aggb +=_fbdb .RowStride ;_cgfc +=_fbdb .RowStride };for _fgec =_fcgc ;_fgec < _bedga ;
_dec (){_acbf :=_gdec ;for _abdf :=_aggb ;_abdf <=_cgfc ;_abdf ++{_egdg ,_ggae :=_dfge .GetByte (_acbf );if _ggae !=nil {return _ggae ;};_cgfcg ,_ggae :=_fbdb .GetByte (_abdf );if _ggae !=nil {return _ggae ;};if _ggae =_dfge .SetByte (_acbf ,_aefb (_egdg ,_cgfcg ,_dfce ));
_ggae !=nil {return _ggae ;};_acbf ++;};};return nil ;};func (_dbed *Bitmap )setFourBytes (_ccff int ,_baaf uint32 )error {if _ccff +3> len (_dbed .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",_ccff );
};_dbed .Data [_ccff ]=byte ((_baaf &0xff000000)>>24);_dbed .Data [_ccff +1]=byte ((_baaf &0xff0000)>>16);_dbed .Data [_ccff +2]=byte ((_baaf &0xff00)>>8);_dbed .Data [_ccff +3]=byte (_baaf &0xff);return nil ;};func (_daddd *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _deec ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";
if _daddd ==nil {return nil ,_f .Error (_deec ,"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 (_daddd .Values )-1{return nil ,_f .Errorf (_deec ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _daddd .Values [i ],nil ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _ecca ="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 (_ecca ,"\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 (_ecca ,"\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 (_ecca ,"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 (_ecca ,"\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 (_ecca ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
};_ebdb ,_ccdg :=bm1 .Width ,bm1 .Height ;_gfb ,_adfd :=bm2 .Width ,bm2 .Height ;if _e .Abs (_ebdb -_gfb )> maxDiffW {return false ,nil ;};if _e .Abs (_ccdg -_adfd )> maxDiffH {return false ,nil ;};_ggaf :=int (delX +_e .Sign (delX )*0.5);_ccfbd :=int (delY +_e .Sign (delY )*0.5);
_gbgg :=int (_df .Ceil (_df .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_eeecc :=bm2 .RowStride ;_afeb :=_bcca (_ccfbd ,0);_aegad :=_dfbg (_adfd +_ccfbd ,_ccdg );_edgf :=bm1 .RowStride *_afeb ;_cbba :=bm2 .RowStride *(_afeb -_ccfbd );
var _ddda int ;if _aegad <=_ccdg {_ddda =downcount [_aegad -1];};_egde :=_bcca (_ggaf ,0);_bbcf :=_dfbg (_gfb +_ggaf ,_ebdb );var _eabc ,_aebb int ;if _ggaf >=8{_eabc =_ggaf >>3;_edgf +=_eabc ;_egde -=_eabc <<3;_bbcf -=_eabc <<3;_ggaf &=7;}else if _ggaf <=-8{_aebb =-((_ggaf +7)>>3);
_cbba +=_aebb ;_eeecc -=_aebb ;_ggaf +=_aebb <<3;};var (_daag ,_abab ,_fbdeg int ;_bdgbf ,_dade ,_abbf byte ;);if _egde >=_bbcf ||_afeb >=_aegad {return false ,nil ;};_bacd :=(_bbcf +7)>>3;switch {case _ggaf ==0:for _abab =_afeb ;_abab < _aegad ;_abab ,_edgf ,_cbba =_abab +1,_edgf +bm1 .RowStride ,_cbba +bm2 .RowStride {for _fbdeg =0;
_fbdeg < _bacd ;_fbdeg ++{_bdgbf =bm1 .Data [_edgf +_fbdeg ]&bm2 .Data [_cbba +_fbdeg ];_daag +=tab [_bdgbf ];};if _daag >=_gbgg {return true ,nil ;};if _abfe :=_daag +downcount [_abab ]-_ddda ;_abfe < _gbgg {return false ,nil ;};};case _ggaf > 0&&_eeecc < _bacd :for _abab =_afeb ;
_abab < _aegad ;_abab ,_edgf ,_cbba =_abab +1,_edgf +bm1 .RowStride ,_cbba +bm2 .RowStride {_dade =bm1 .Data [_edgf ];_abbf =bm2 .Data [_cbba ]>>uint (_ggaf );_bdgbf =_dade &_abbf ;_daag +=tab [_bdgbf ];for _fbdeg =1;_fbdeg < _eeecc ;_fbdeg ++{_dade =bm1 .Data [_edgf +_fbdeg ];
_abbf =bm2 .Data [_cbba +_fbdeg ]>>uint (_ggaf )|bm2 .Data [_cbba +_fbdeg -1]<<uint (8-_ggaf );_bdgbf =_dade &_abbf ;_daag +=tab [_bdgbf ];};_dade =bm1 .Data [_edgf +_fbdeg ];_abbf =bm2 .Data [_cbba +_fbdeg -1]<<uint (8-_ggaf );_bdgbf =_dade &_abbf ;_daag +=tab [_bdgbf ];
if _daag >=_gbgg {return true ,nil ;}else if _daag +downcount [_abab ]-_ddda < _gbgg {return false ,nil ;};};case _ggaf > 0&&_eeecc >=_bacd :for _abab =_afeb ;_abab < _aegad ;_abab ,_edgf ,_cbba =_abab +1,_edgf +bm1 .RowStride ,_cbba +bm2 .RowStride {_dade =bm1 .Data [_edgf ];
_abbf =bm2 .Data [_cbba ]>>uint (_ggaf );_bdgbf =_dade &_abbf ;_daag +=tab [_bdgbf ];for _fbdeg =1;_fbdeg < _bacd ;_fbdeg ++{_dade =bm1 .Data [_edgf +_fbdeg ];_abbf =bm2 .Data [_cbba +_fbdeg ]>>uint (_ggaf );_abbf |=bm2 .Data [_cbba +_fbdeg -1]<<uint (8-_ggaf );
_bdgbf =_dade &_abbf ;_daag +=tab [_bdgbf ];};if _daag >=_gbgg {return true ,nil ;}else if _daag +downcount [_abab ]-_ddda < _gbgg {return false ,nil ;};};case _bacd < _eeecc :for _abab =_afeb ;_abab < _aegad ;_abab ,_edgf ,_cbba =_abab +1,_edgf +bm1 .RowStride ,_cbba +bm2 .RowStride {for _fbdeg =0;
_fbdeg < _bacd ;_fbdeg ++{_dade =bm1 .Data [_edgf +_fbdeg ];_abbf =bm2 .Data [_cbba +_fbdeg ]<<uint (-_ggaf );_abbf |=bm2 .Data [_cbba +_fbdeg +1]>>uint (8+_ggaf );_bdgbf =_dade &_abbf ;_daag +=tab [_bdgbf ];};if _daag >=_gbgg {return true ,nil ;}else if _baffb :=_daag +downcount [_abab ]-_ddda ;
_baffb < _gbgg {return false ,nil ;};};case _eeecc >=_bacd :for _abab =_afeb ;_abab < _aegad ;_abab ,_edgf ,_cbba =_abab +1,_edgf +bm1 .RowStride ,_cbba +bm2 .RowStride {for _fbdeg =0;_fbdeg < _bacd ;_fbdeg ++{_dade =bm1 .Data [_edgf +_fbdeg ];_abbf =bm2 .Data [_cbba +_fbdeg ]<<uint (-_ggaf );
_abbf |=bm2 .Data [_cbba +_fbdeg +1]>>uint (8+_ggaf );_bdgbf =_dade &_abbf ;_daag +=tab [_bdgbf ];};_dade =bm1 .Data [_edgf +_fbdeg ];_abbf =bm2 .Data [_cbba +_fbdeg ]<<uint (-_ggaf );_bdgbf =_dade &_abbf ;_daag +=tab [_bdgbf ];if _daag >=_gbgg {return true ,nil ;
}else if _daag +downcount [_abab ]-_ddda < _gbgg {return false ,nil ;};};};_dcd :=float32 (_daag )*float32 (_daag )/(float32 (area1 )*float32 (area2 ));if _dcd >=scoreThreshold {_gg .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",_daag ,_gbgg ,_dcd ,scoreThreshold );
};return false ,nil ;};func TstVSymbol (t *_g .T ,scale ...int )*Bitmap {_gcceg ,_eacad :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_d .NoError (t ,_eacad );return TstGetScaledSymbol (t ,_gcceg ,scale ...);};func (_fda *Bitmap )Copy ()*Bitmap {_dbab :=make ([]byte ,len (_fda .Data ));
copy (_dbab ,_fda .Data );return &Bitmap {Width :_fda .Width ,Height :_fda .Height ,RowStride :_fda .RowStride ,Data :_dbab ,Color :_fda .Color ,Text :_fda .Text ,BitmapNumber :_fda .BitmapNumber ,Special :_fda .Special };};func TstASymbol (t *_g .T )*Bitmap {t .Helper ();
_dedbg :=New (6,6);_d .NoError (t ,_dedbg .SetPixel (1,0,1));_d .NoError (t ,_dedbg .SetPixel (2,0,1));_d .NoError (t ,_dedbg .SetPixel (3,0,1));_d .NoError (t ,_dedbg .SetPixel (4,0,1));_d .NoError (t ,_dedbg .SetPixel (5,1,1));_d .NoError (t ,_dedbg .SetPixel (1,2,1));
_d .NoError (t ,_dedbg .SetPixel (2,2,1));_d .NoError (t ,_dedbg .SetPixel (3,2,1));_d .NoError (t ,_dedbg .SetPixel (4,2,1));_d .NoError (t ,_dedbg .SetPixel (5,2,1));_d .NoError (t ,_dedbg .SetPixel (0,3,1));_d .NoError (t ,_dedbg .SetPixel (5,3,1));
_d .NoError (t ,_dedbg .SetPixel (0,4,1));_d .NoError (t ,_dedbg .SetPixel (5,4,1));_d .NoError (t ,_dedbg .SetPixel (1,5,1));_d .NoError (t ,_dedbg .SetPixel (2,5,1));_d .NoError (t ,_dedbg .SetPixel (3,5,1));_d .NoError (t ,_dedbg .SetPixel (4,5,1));
_d .NoError (t ,_dedbg .SetPixel (5,5,1));return _dedbg ;};func _acef (_eeaab ,_bcabe ,_caag *Bitmap ,_edae int )(*Bitmap ,error ){const _cfba ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _bcabe ==nil {return nil ,_f .Error (_cfba ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _caag ==nil {return nil ,_f .Error (_cfba ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _edae !=4&&_edae !=8{return nil ,_f .Error (_cfba ,"\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 _aggbe error ;_eeaab ,_aggbe =_dbfae (_eeaab ,_bcabe );if _aggbe !=nil {return nil ,_f .Wrap (_aggbe ,_cfba ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_acbfe :=_bcabe .createTemplate ();_caag .setPadBits (0);
for _ggefb :=0;_ggefb < _dgcg ;_ggefb ++{_acbfe ,_aggbe =_dbfae (_acbfe ,_eeaab );if _aggbe !=nil {return nil ,_f .Wrapf (_aggbe ,_cfba ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_ggefb );};if _aggbe =_eedd (_eeaab ,_caag ,_edae );
_aggbe !=nil {return nil ,_f .Wrapf (_aggbe ,_cfba ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_ggefb );};if _acbfe .Equals (_eeaab ){break ;};};return _eeaab ,nil ;};const (Vanilla Color =iota ;Chocolate ;);type shift int ;
func (_baff *Bitmap )connComponentsBB (_gbfa int )(_efeab *Boxes ,_bdc error ){const _ffad ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";if _gbfa !=4&&_gbfa !=8{return nil ,_f .Error (_ffad ,"\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 _baff .Zero (){return &Boxes {},nil ;};_baff .setPadBits (0);_cgfa ,_bdc :=_dbfae (nil ,_baff );if _bdc !=nil {return nil ,_f .Wrap (_bdc ,_ffad ,"\u0062\u006d\u0031");};_bceg :=&_e .Stack {};_bceg .Aux =&_e .Stack {};_efeab =&Boxes {};var (_cdfb ,_dbgg int ;
_eacee _fbc .Point ;_abgb bool ;_eafaa *_fbc .Rectangle ;);for {if _eacee ,_abgb ,_bdc =_cgfa .nextOnPixel (_dbgg ,_cdfb );_bdc !=nil {return nil ,_f .Wrap (_bdc ,_ffad ,"");};if !_abgb {break ;};if _eafaa ,_bdc =_gagf (_cgfa ,_bceg ,_eacee .X ,_eacee .Y ,_gbfa );
_bdc !=nil {return nil ,_f .Wrap (_bdc ,_ffad ,"");};if _bdc =_efeab .Add (_eafaa );_bdc !=nil {return nil ,_f .Wrap (_bdc ,_ffad ,"");};_dbgg =_eacee .X ;_cdfb =_eacee .Y ;};return _efeab ,nil ;};func (_beab *Bitmap )Zero ()bool {_gfef :=_beab .Width /8;
_fbde :=_beab .Width &7;var _bfda byte ;if _fbde !=0{_bfda =byte (0xff<<uint (8-_fbde ));};var _efe ,_gdc ,_eeab int ;for _gdc =0;_gdc < _beab .Height ;_gdc ++{_efe =_beab .RowStride *_gdc ;for _eeab =0;_eeab < _gfef ;_eeab ,_efe =_eeab +1,_efe +1{if _beab .Data [_efe ]!=0{return false ;
};};if _fbde > 0{if _beab .Data [_efe ]&_bfda !=0{return false ;};};};return true ;};func TstAddSymbol (t *_g .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_gdfg :=_fbc .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_gdfg );
*x +=sym .Width +space ;};func (_edg *Bitmap )Equivalent (s *Bitmap )bool {return _edg .equivalent (s )};func _dac (_aad *Bitmap ,_gcb *Bitmap ,_eff int )(_acg error ){const _cc ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";
switch _eff {case 2:_acg =_gga (_aad ,_gcb );case 4:_acg =_cf (_aad ,_gcb );case 8:_acg =_fff (_aad ,_gcb );default:return _f .Error (_cc ,"\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 _acg !=nil {_acg =_f .Wrap (_acg ,_cc ,"");};return _acg ;};func (_gafa *Bitmaps )makeSizeIndicator (_dagcf ,_ecdc int ,_dccg LocationFilter ,_beegf SizeComparison )(_fgeb *_e .NumSlice ,_cccec error ){const _gdcfc ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _gafa ==nil {return nil ,_f .Error (_gdcfc ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _dccg {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_f .Errorf (_gdcfc ,"\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",_dccg );
};switch _beegf {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_f .Errorf (_gdcfc ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_beegf );
};_fgeb =&_e .NumSlice {};var (_gefg ,_gaegb ,_cdca int ;_gabc *Bitmap ;);for _ ,_gabc =range _gafa .Values {_gefg =0;_gaegb ,_cdca =_gabc .Width ,_gabc .Height ;switch _dccg {case LocSelectWidth :if (_beegf ==SizeSelectIfLT &&_gaegb < _dagcf )||(_beegf ==SizeSelectIfGT &&_gaegb > _dagcf )||(_beegf ==SizeSelectIfLTE &&_gaegb <=_dagcf )||(_beegf ==SizeSelectIfGTE &&_gaegb >=_dagcf )||(_beegf ==SizeSelectIfEQ &&_gaegb ==_dagcf ){_gefg =1;
};case LocSelectHeight :if (_beegf ==SizeSelectIfLT &&_cdca < _ecdc )||(_beegf ==SizeSelectIfGT &&_cdca > _ecdc )||(_beegf ==SizeSelectIfLTE &&_cdca <=_ecdc )||(_beegf ==SizeSelectIfGTE &&_cdca >=_ecdc )||(_beegf ==SizeSelectIfEQ &&_cdca ==_ecdc ){_gefg =1;
};case LocSelectIfEither :if (_beegf ==SizeSelectIfLT &&(_gaegb < _dagcf ||_cdca < _ecdc ))||(_beegf ==SizeSelectIfGT &&(_gaegb > _dagcf ||_cdca > _ecdc ))||(_beegf ==SizeSelectIfLTE &&(_gaegb <=_dagcf ||_cdca <=_ecdc ))||(_beegf ==SizeSelectIfGTE &&(_gaegb >=_dagcf ||_cdca >=_ecdc ))||(_beegf ==SizeSelectIfEQ &&(_gaegb ==_dagcf ||_cdca ==_ecdc )){_gefg =1;
};case LocSelectIfBoth :if (_beegf ==SizeSelectIfLT &&(_gaegb < _dagcf &&_cdca < _ecdc ))||(_beegf ==SizeSelectIfGT &&(_gaegb > _dagcf &&_cdca > _ecdc ))||(_beegf ==SizeSelectIfLTE &&(_gaegb <=_dagcf &&_cdca <=_ecdc ))||(_beegf ==SizeSelectIfGTE &&(_gaegb >=_dagcf &&_cdca >=_ecdc ))||(_beegf ==SizeSelectIfEQ &&(_gaegb ==_dagcf &&_cdca ==_ecdc )){_gefg =1;
};};_fgeb .AddInt (_gefg );};return _fgeb ,nil ;};func TstDSymbol (t *_g .T ,scale ...int )*Bitmap {_gcace ,_edba :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_d .NoError (t ,_edba );return TstGetScaledSymbol (t ,_gcace ,scale ...);};func (_eedc *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _fedf (_eedc ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};func _cf (_bd ,_db *Bitmap )(_dfe error ){const _bf ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_fbd :=_db .RowStride ;_cfb :=_bd .RowStride ;_ge :=_db .RowStride *4-_bd .RowStride ;var (_bea ,_cfc byte ;
_ad uint32 ;_ac ,_ef ,_aae ,_ee ,_da ,_ga ,_ea int ;);for _aae =0;_aae < _db .Height ;_aae ++{_ac =_aae *_fbd ;_ef =4*_aae *_cfb ;for _ee =0;_ee < _fbd ;_ee ++{_bea =_db .Data [_ac +_ee ];_ad =_agga [_bea ];_ga =_ef +_ee *4;if _ge !=0&&(_ee +1)*4> _bd .RowStride {for _da =_ge ;
_da > 0;_da --{_cfc =byte ((_ad >>uint (_da *8))&0xff);_ea =_ga +(_ge -_da );if _dfe =_bd .SetByte (_ea ,_cfc );_dfe !=nil {return _f .Wrapf (_dfe ,_bf ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_da );
};};}else if _dfe =_bd .setFourBytes (_ga ,_ad );_dfe !=nil {return _f .Wrap (_dfe ,_bf ,"");};if _dfe =_bd .setFourBytes (_ef +_ee *4,_agga [_db .Data [_ac +_ee ]]);_dfe !=nil {return _f .Wrap (_dfe ,_bf ,"");};};for _da =1;_da < 4;_da ++{for _ee =0;_ee < _cfb ;
_ee ++{if _dfe =_bd .SetByte (_ef +_da *_cfb +_ee ,_bd .Data [_ef +_ee ]);_dfe !=nil {return _f .Wrapf (_dfe ,_bf ,"\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",_da ,_ee );
};};};};return nil ;};func (_caf *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _caf .Copy (),nil ;};_ffa ,_fcge :=_caf .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _fcge !=nil {return nil ,_f .Wrap (_fcge ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");
};return _ffa ,nil ;};func _cbfa (_cbdf *Bitmap ,_dgcde *Bitmap ,_cfcb *Selection ,_bgfg **Bitmap )(*Bitmap ,error ){const _afdbb ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _dgcde ==nil {return nil ,_f .Error (_afdbb ,"\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 _cfcb ==nil {return nil ,_f .Error (_afdbb ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_cbfe ,_egdb :=_cfcb .Height ,_cfcb .Width ;if _cbfe ==0||_egdb ==0{return nil ,_f .Error (_afdbb ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");
};if _cbdf ==nil {_cbdf =_dgcde .createTemplate ();*_bgfg =_dgcde ;return _cbdf ,nil ;};_cbdf .Width =_dgcde .Width ;_cbdf .Height =_dgcde .Height ;_cbdf .RowStride =_dgcde .RowStride ;_cbdf .Color =_dgcde .Color ;_cbdf .Data =make ([]byte ,_dgcde .RowStride *_dgcde .Height );
if _cbdf ==_dgcde {*_bgfg =_dgcde .Copy ();}else {*_bgfg =_dgcde ;};return _cbdf ,nil ;};func (_ffed *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_ebabe *Bitmaps ,_bgdd error ){const _cfffe ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";
if _ffed ==nil {return nil ,_f .Error (_cfffe ,"\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 (_cfffe ,"\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 (_cfffe ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
};_cagd ,_bgdd :=_ffed .makeSizeIndicator (width ,height ,tp ,relation );if _bgdd !=nil {return nil ,_f .Wrap (_bgdd ,_cfffe ,"");};_ebabe ,_bgdd =_ffed .selectByIndicator (_cagd );if _bgdd !=nil {return nil ,_f .Wrap (_bgdd ,_cfffe ,"");};return _ebabe ,nil ;
};func (_egfe Points )GetGeometry (i int )(_dgag ,_dage float32 ,_bgbf error ){if i > len (_egfe )-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 );
};_gebba :=_egfe [i ];return _gebba .X ,_gebba .Y ,nil ;};type CombinationOperator int ;func (_dgce *Bitmap )GetByteIndex (x ,y int )int {return y *_dgce .RowStride +(x >>3)};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _dbfae (d ,s )};func (_bfbf *Bitmap )connComponentsBitmapsBB (_cggc *Bitmaps ,_gaga int )(_abfc *Boxes ,_cbg error ){const _ffcc ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";
if _gaga !=4&&_gaga !=8{return nil ,_f .Error (_ffcc ,"\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 _cggc ==nil {return nil ,_f .Error (_ffcc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
};if len (_cggc .Values )> 0{return nil ,_f .Error (_ffcc ,"\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 _bfbf .Zero (){return &Boxes {},nil ;};
var (_bbec ,_gcfa ,_cedg ,_ccdd *Bitmap ;);_bfbf .setPadBits (0);if _bbec ,_cbg =_dbfae (nil ,_bfbf );_cbg !=nil {return nil ,_f .Wrap (_cbg ,_ffcc ,"\u0062\u006d\u0031");};if _gcfa ,_cbg =_dbfae (nil ,_bfbf );_cbg !=nil {return nil ,_f .Wrap (_cbg ,_ffcc ,"\u0062\u006d\u0032");
};_gebb :=&_e .Stack {};_gebb .Aux =&_e .Stack {};_abfc =&Boxes {};var (_bfdg ,_ddbc int ;_eggf _fbc .Point ;_bfg bool ;_accc *_fbc .Rectangle ;);for {if _eggf ,_bfg ,_cbg =_bbec .nextOnPixel (_bfdg ,_ddbc );_cbg !=nil {return nil ,_f .Wrap (_cbg ,_ffcc ,"");
};if !_bfg {break ;};if _accc ,_cbg =_gagf (_bbec ,_gebb ,_eggf .X ,_eggf .Y ,_gaga );_cbg !=nil {return nil ,_f .Wrap (_cbg ,_ffcc ,"");};if _cbg =_abfc .Add (_accc );_cbg !=nil {return nil ,_f .Wrap (_cbg ,_ffcc ,"");};if _cedg ,_cbg =_bbec .clipRectangle (_accc ,nil );
_cbg !=nil {return nil ,_f .Wrap (_cbg ,_ffcc ,"\u0062\u006d\u0033");};if _ccdd ,_cbg =_gcfa .clipRectangle (_accc ,nil );_cbg !=nil {return nil ,_f .Wrap (_cbg ,_ffcc ,"\u0062\u006d\u0034");};if _ ,_cbg =_agfa (_cedg ,_cedg ,_ccdd );_cbg !=nil {return nil ,_f .Wrap (_cbg ,_ffcc ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");
};if _cbg =_gcfa .RasterOperation (_accc .Min .X ,_accc .Min .Y ,_accc .Dx (),_accc .Dy (),PixSrcXorDst ,_cedg ,0,0);_cbg !=nil {return nil ,_f .Wrap (_cbg ,_ffcc ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_cggc .AddBitmap (_cedg );
_bfdg =_eggf .X ;_ddbc =_eggf .Y ;};_cggc .Boxes =*_abfc ;return _abfc ,nil ;};func _gga (_eg ,_bb *Bitmap )(_ff error ){const _gf ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_ffb :=_bb .RowStride ;
_be :=_eg .RowStride ;var (_ae byte ;_gb uint16 ;_ffg ,_bba ,_ege ,_af ,_gba int ;);for _ege =0;_ege < _bb .Height ;_ege ++{_ffg =_ege *_ffb ;_bba =2*_ege *_be ;for _af =0;_af < _ffb ;_af ++{_ae =_bb .Data [_ffg +_af ];_gb =_ebcc [_ae ];_gba =_bba +_af *2;
if _eg .RowStride !=_bb .RowStride *2&&(_af +1)*2> _eg .RowStride {_ff =_eg .SetByte (_gba ,byte (_gb >>8));}else {_ff =_eg .setTwoBytes (_gba ,_gb );};if _ff !=nil {return _f .Wrap (_ff ,_gf ,"");};};for _af =0;_af < _be ;_af ++{_gba =_bba +_be +_af ;
_ae =_eg .Data [_bba +_af ];if _ff =_eg .SetByte (_gba ,_ae );_ff !=nil {return _f .Wrapf (_ff ,_gf ,"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",_bba +_af ,_bba +_be +_af );
};};};return nil ;};func _eedd (_gcda *Bitmap ,_efcb *Bitmap ,_deef int )(_gaec error ){const _faee ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_eecbdg :=_dfbg (_gcda .Height ,_efcb .Height );_abeb :=_dfbg (_gcda .RowStride ,_efcb .RowStride );
switch _deef {case 4:_gaec =_ddaad (_gcda ,_efcb ,_eecbdg ,_abeb );case 8:_gaec =_dffe (_gcda ,_efcb ,_eecbdg ,_abeb );default:return _f .Errorf (_faee ,"\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",_deef );
};if _gaec !=nil {return _f .Wrap (_gaec ,_faee ,"");};return nil ;};func Rect (x ,y ,w ,h int )(*_fbc .Rectangle ,error ){const _ebgc ="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 (_ebgc ,"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 (_ebgc ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_eag :=_fbc .Rect (x ,y ,x +w ,y +h );return &_eag ,nil ;
};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func (_fabg *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_fabg .Width ,Height :_fabg .Height ,RowStride :_fabg .RowStride ,Color :_fabg .Color ,Text :_fabg .Text ,BitmapNumber :_fabg .BitmapNumber ,Special :_fabg .Special ,Data :make ([]byte ,len (_fabg .Data ))};
};func init (){const _cbdga ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_afdba =New (50,40);var _ggga error ;_afdba ,_ggga =_afdba .AddBorder (2,1);if _ggga !=nil {panic (_f .Wrap (_ggga ,_cbdga ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
};_cfbf ,_ggga =NewWithData (50,22,_ggdgd );if _ggga !=nil {panic (_f .Wrap (_ggga ,_cbdga ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};};func (_fadb *ClassedPoints )YAtIndex (i int )float32 {return (*_fadb .Points )[_fadb .IntSlice [i ]].Y };
func _dabf (_eaac ,_dde int )*Bitmap {return &Bitmap {Width :_eaac ,Height :_dde ,RowStride :(_eaac +7)>>3};};func TstTSymbol (t *_g .T ,scale ...int )*Bitmap {_fce ,_baaab :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_d .NoError (t ,_baaab );
return TstGetScaledSymbol (t ,_fce ,scale ...);};func (_babd *ClassedPoints )Len ()int {return _babd .IntSlice .Size ()};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);type MorphOperation int ;func _ccfc (_fbbb *Bitmap )(_bdca *Bitmap ,_gfee int ,_aded error ){const _bcgb ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";
if _fbbb ==nil {return nil ,0,_f .Errorf (_bcgb ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _cdfd ,_faea *Bitmap ;if _cdfd ,_aded =_dbfae (nil ,_fbbb );_aded !=nil {return nil ,0,_f .Wrap (_aded ,_bcgb ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");
};var (_accff [13]int ;_deac ,_gbd int ;);_gacg :=12;_dgcd :=_e .NewNumSlice (_gacg +1);_bbeaf :=_e .NewNumSlice (_gacg +1);var _begg *Boxes ;for _eeecd :=0;_eeecd <=_gacg ;_eeecd ++{if _eeecd ==0{if _faea ,_aded =_dbfae (nil ,_cdfd );_aded !=nil {return nil ,0,_f .Wrap (_aded ,_bcgb ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");
};}else {if _faea ,_aded =_acfc (_cdfd ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_aded !=nil {return nil ,0,_f .Wrap (_aded ,_bcgb ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _begg ,_aded =_faea .connComponentsBB (4);
_aded !=nil {return nil ,0,_f .Wrap (_aded ,_bcgb ,"");};_accff [_eeecd ]=len (*_begg );_dgcd .AddInt (_accff [_eeecd ]);switch _eeecd {case 0:_deac =_accff [0];default:_gbd =_accff [_eeecd -1]-_accff [_eeecd ];_bbeaf .AddInt (_gbd );};_cdfd =_faea ;};
_gcag :=true ;_efda :=2;var _deba ,_aedf int ;for _eabg :=1;_eabg < len (*_bbeaf );_eabg ++{if _deba ,_aded =_dgcd .GetInt (_eabg );_aded !=nil {return nil ,0,_f .Wrap (_aded ,_bcgb ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");
};if _gcag &&_deba < int (0.3*float32 (_deac )){_efda =_eabg +1;_gcag =false ;};if _gbd ,_aded =_bbeaf .GetInt (_eabg );_aded !=nil {return nil ,0,_f .Wrap (_aded ,_bcgb ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");
};if _gbd > _aedf {_aedf =_gbd ;};};_bbff :=_fbbb .XResolution ;if _bbff ==0{_bbff =150;};if _bbff > 110{_efda ++;};if _efda < 2{_gg .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");
_efda =2;};_gfee =_efda +1;if _bdca ,_aded =_defb (nil ,_fbbb ,_efda +1,1);_aded !=nil {return nil ,0,_f .Wrap (_aded ,_bcgb ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _bdca ,_gfee ,nil ;
};func (_ecgf *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _bbga ="\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 >=_ecgf .IntSlice .Size (){return 0,_f .Errorf (_bbga ,"\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 (_ecgf .XAtIndex (i )),nil ;};func (_cecd *Selection )setOrigin (_ffbeg ,_fccgg int ){_cecd .Cy ,_cecd .Cx =_ffbeg ,_fccgg };func TstESymbol (t *_g .T ,scale ...int )*Bitmap {_aaaa ,_acaad :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});
_d .NoError (t ,_acaad );return TstGetScaledSymbol (t ,_aaaa ,scale ...);};func (_febf *Bitmap )addPadBits ()(_ggbc error ){const _bec ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_eeag :=_febf .Width %8;
if _eeag ==0{return nil ;};_gde :=_febf .Width /8;_dbaf :=_a .NewReader (_febf .Data );_gafd :=make ([]byte ,_febf .Height *_febf .RowStride );_dag :=_a .NewWriterMSB (_gafd );_cdbb :=make ([]byte ,_gde );var (_fdf int ;_ceea uint64 ;);for _fdf =0;_fdf < _febf .Height ;
_fdf ++{if _ ,_ggbc =_dbaf .Read (_cdbb );_ggbc !=nil {return _f .Wrap (_ggbc ,_bec ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_ggbc =_dag .Write (_cdbb );_ggbc !=nil {return _f .Wrap (_ggbc ,_bec ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");
};if _ceea ,_ggbc =_dbaf .ReadBits (byte (_eeag ));_ggbc !=nil {return _f .Wrap (_ggbc ,_bec ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _ggbc =_dag .WriteByte (byte (_ceea )<<uint (8-_eeag ));_ggbc !=nil {return _f .Wrap (_ggbc ,_bec ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");
};};_febf .Data =_dag .Data ();return nil ;};func TstCSymbol (t *_g .T )*Bitmap {t .Helper ();_bgaa :=New (6,6);_d .NoError (t ,_bgaa .SetPixel (1,0,1));_d .NoError (t ,_bgaa .SetPixel (2,0,1));_d .NoError (t ,_bgaa .SetPixel (3,0,1));_d .NoError (t ,_bgaa .SetPixel (4,0,1));
_d .NoError (t ,_bgaa .SetPixel (0,1,1));_d .NoError (t ,_bgaa .SetPixel (5,1,1));_d .NoError (t ,_bgaa .SetPixel (0,2,1));_d .NoError (t ,_bgaa .SetPixel (0,3,1));_d .NoError (t ,_bgaa .SetPixel (0,4,1));_d .NoError (t ,_bgaa .SetPixel (5,4,1));_d .NoError (t ,_bgaa .SetPixel (1,5,1));
_d .NoError (t ,_bgaa .SetPixel (2,5,1));_d .NoError (t ,_bgaa .SetPixel (3,5,1));_d .NoError (t ,_bgaa .SetPixel (4,5,1));return _bgaa ;};func _egcd (_fcce ...MorphProcess )(_acga error ){const _bfbd ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";
var _bbfe ,_cdee int ;for _ffee ,_eddd :=range _fcce {if _acga =_eddd .verify (_ffee ,&_bbfe ,&_cdee );_acga !=nil {return _f .Wrap (_acga ,_bfbd ,"");};};if _cdee !=0&&_bbfe !=0{return _f .Error (_bfbd ,"\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 _bafb (_egfd *Bitmap ,_cega *_e .Stack ,_ccaf ,_cebf int )(_ebcdcd *_fbc .Rectangle ,_efffe error ){const _eagb ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _egfd ==nil {return nil ,_f .Error (_eagb ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
};if _cega ==nil {return nil ,_f .Error (_eagb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_dafd ,_cegcc :=_egfd .Width ,_egfd .Height ;_fgdf :=_dafd -1;_febc :=_cegcc -1;if _ccaf < 0||_ccaf > _fgdf ||_cebf < 0||_cebf > _febc ||!_egfd .GetPixel (_ccaf ,_cebf ){return nil ,nil ;
};_bdd :=_fbc .Rect (100000,100000,0,0);if _efffe =_eaffe (_cega ,_ccaf ,_ccaf ,_cebf ,1,_febc ,&_bdd );_efffe !=nil {return nil ,_f .Wrap (_efffe ,_eagb ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _efffe =_eaffe (_cega ,_ccaf ,_ccaf ,_cebf +1,-1,_febc ,&_bdd );
_efffe !=nil {return nil ,_f .Wrap (_efffe ,_eagb ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_bdd .Min .X ,_bdd .Max .X =_ccaf ,_ccaf ;_bdd .Min .Y ,_bdd .Max .Y =_cebf ,_cebf ;var (_cfdg *fillSegment ;
_bbde int ;);for _cega .Len ()> 0{if _cfdg ,_efffe =_bfce (_cega );_efffe !=nil {return nil ,_f .Wrap (_efffe ,_eagb ,"");};_cebf =_cfdg ._dggc ;for _ccaf =_cfdg ._caddb -1;_ccaf >=0&&_egfd .GetPixel (_ccaf ,_cebf );_ccaf --{if _efffe =_egfd .SetPixel (_ccaf ,_cebf ,0);
_efffe !=nil {return nil ,_f .Wrap (_efffe ,_eagb ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _ccaf >=_cfdg ._caddb -1{for {for _ccaf ++;_ccaf <=_cfdg ._aaad +1&&_ccaf <=_fgdf &&!_egfd .GetPixel (_ccaf ,_cebf );_ccaf ++{};_bbde =_ccaf ;if !(_ccaf <=_cfdg ._aaad +1&&_ccaf <=_fgdf ){break ;
};for ;_ccaf <=_fgdf &&_egfd .GetPixel (_ccaf ,_cebf );_ccaf ++{if _efffe =_egfd .SetPixel (_ccaf ,_cebf ,0);_efffe !=nil {return nil ,_f .Wrap (_efffe ,_eagb ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _efffe =_eaffe (_cega ,_bbde ,_ccaf -1,_cfdg ._dggc ,_cfdg ._cdde ,_febc ,&_bdd );
_efffe !=nil {return nil ,_f .Wrap (_efffe ,_eagb ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ccaf > _cfdg ._aaad {if _efffe =_eaffe (_cega ,_cfdg ._aaad +1,_ccaf -1,_cfdg ._dggc ,-_cfdg ._cdde ,_febc ,&_bdd );_efffe !=nil {return nil ,_f .Wrap (_efffe ,_eagb ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};};continue ;};_bbde =_ccaf +1;if _bbde < _cfdg ._caddb {if _efffe =_eaffe (_cega ,_bbde ,_cfdg ._caddb -1,_cfdg ._dggc ,-_cfdg ._cdde ,_febc ,&_bdd );_efffe !=nil {return nil ,_f .Wrap (_efffe ,_eagb ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_ccaf =_cfdg ._caddb ;for {for ;_ccaf <=_fgdf &&_egfd .GetPixel (_ccaf ,_cebf );_ccaf ++{if _efffe =_egfd .SetPixel (_ccaf ,_cebf ,0);_efffe !=nil {return nil ,_f .Wrap (_efffe ,_eagb ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _efffe =_eaffe (_cega ,_bbde ,_ccaf -1,_cfdg ._dggc ,_cfdg ._cdde ,_febc ,&_bdd );
_efffe !=nil {return nil ,_f .Wrap (_efffe ,_eagb ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ccaf > _cfdg ._aaad {if _efffe =_eaffe (_cega ,_cfdg ._aaad +1,_ccaf -1,_cfdg ._dggc ,-_cfdg ._cdde ,_febc ,&_bdd );_efffe !=nil {return nil ,_f .Wrap (_efffe ,_eagb ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _ccaf ++;_ccaf <=_cfdg ._aaad +1&&_ccaf <=_fgdf &&!_egfd .GetPixel (_ccaf ,_cebf );_ccaf ++{};_bbde =_ccaf ;if !(_ccaf <=_cfdg ._aaad +1&&_ccaf <=_fgdf ){break ;};};};_bdd .Max .X ++;_bdd .Max .Y ++;return &_bdd ,nil ;};func _gddac (_ddaa *Bitmap ,_ebde ,_ccab int ,_cafb ,_bfde int ,_gfeb RasterOperator ,_befff *Bitmap ,_cagba ,_fbdea int )error {var _ffade ,_dfeb ,_dbgf ,_deace int ;
if _ebde < 0{_cagba -=_ebde ;_cafb +=_ebde ;_ebde =0;};if _cagba < 0{_ebde -=_cagba ;_cafb +=_cagba ;_cagba =0;};_ffade =_ebde +_cafb -_ddaa .Width ;if _ffade > 0{_cafb -=_ffade ;};_dfeb =_cagba +_cafb -_befff .Width ;if _dfeb > 0{_cafb -=_dfeb ;};if _ccab < 0{_fbdea -=_ccab ;
_bfde +=_ccab ;_ccab =0;};if _fbdea < 0{_ccab -=_fbdea ;_bfde +=_fbdea ;_fbdea =0;};_dbgf =_ccab +_bfde -_ddaa .Height ;if _dbgf > 0{_bfde -=_dbgf ;};_deace =_fbdea +_bfde -_befff .Height ;if _deace > 0{_bfde -=_deace ;};if _cafb <=0||_bfde <=0{return nil ;
};var _edgc error ;switch {case _ebde &7==0&&_cagba &7==0:_edgc =_geea (_ddaa ,_ebde ,_ccab ,_cafb ,_bfde ,_gfeb ,_befff ,_cagba ,_fbdea );case _ebde &7==_cagba &7:_edgc =_bgbd (_ddaa ,_ebde ,_ccab ,_cafb ,_bfde ,_gfeb ,_befff ,_cagba ,_fbdea );default:_edgc =_gabfa (_ddaa ,_ebde ,_ccab ,_cafb ,_bfde ,_gfeb ,_befff ,_cagba ,_fbdea );
};if _edgc !=nil {return _f .Wrap (_edgc ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func (_ffc *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_bcf *Boxes ,_daba error ){const _bfe ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";
if _ffc ==nil {return nil ,_f .Error (_bfe ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_ffc )==0{return _ffc ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_f .Errorf (_bfe ,"\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 (_bfe ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
};_efea :=_ffc .makeSizeIndicator (width ,height ,tp ,relation );_cfa ,_daba :=_ffc .selectWithIndicator (_efea );if _daba !=nil {return nil ,_f .Wrap (_daba ,_bfe ,"");};return _cfa ,nil ;};func (_fba *Bitmap )setTwoBytes (_gcd int ,_ccgc uint16 )error {if _gcd +1> len (_fba .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",_gcd );
};_fba .Data [_gcd ]=byte ((_ccgc &0xff00)>>8);_fba .Data [_gcd +1]=byte (_ccgc &0xff);return nil ;};func (_efed *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_caddd *Bitmaps ,_ecaef *Boxes ,_bcfe error ){const _gdafg ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";
if _efed ==nil {return nil ,nil ,_f .Error (_gdafg ,"\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 (_gdafg ,"\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 _efed .Zero (){_ecaef =&Boxes {};_caddd =&Bitmaps {};return _caddd ,_ecaef ,nil ;};switch components {case ComponentConn :_caddd =&Bitmaps {};if _ecaef ,_bcfe =_efed .ConnComponents (_caddd ,8);_bcfe !=nil {return nil ,nil ,_f .Wrap (_bcfe ,_gdafg ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};case ComponentCharacters :_fdeeg ,_fbce :=MorphSequence (_efed ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _fbce !=nil {return nil ,nil ,_f .Wrap (_fbce ,_gdafg ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _gg .Log .IsLogLevel (_gg .LogLevelTrace ){_gg .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",_fdeeg .String ());
};_egefg :=&Bitmaps {};_ecaef ,_fbce =_fdeeg .ConnComponents (_egefg ,8);if _fbce !=nil {return nil ,nil ,_f .Wrap (_fbce ,_gdafg ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _gg .Log .IsLogLevel (_gg .LogLevelTrace ){_gg .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",_egefg .String ());
};if _caddd ,_fbce =_egefg .ClipToBitmap (_efed );_fbce !=nil {return nil ,nil ,_f .Wrap (_fbce ,_gdafg ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_gbeb :=1;
var _fgdc *Bitmap ;switch {case _efed .XResolution <=200:_fgdc =_efed ;case _efed .XResolution <=400:_gbeb =2;_fgdc ,_bcfe =_ca (_efed ,1,0,0,0);if _bcfe !=nil {return nil ,nil ,_f .Wrap (_bcfe ,_gdafg ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
};default:_gbeb =4;_fgdc ,_bcfe =_ca (_efed ,1,1,0,0);if _bcfe !=nil {return nil ,nil ,_f .Wrap (_bcfe ,_gdafg ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
};};_ccee ,_ ,_fefga :=_ccfc (_fgdc );if _fefga !=nil {return nil ,nil ,_f .Wrap (_fefga ,_gdafg ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_eceb ,_fefga :=_bbfa (_ccee ,_gbeb );if _fefga !=nil {return nil ,nil ,_f .Wrap (_fefga ,_gdafg ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
};_daad :=&Bitmaps {};if _ecaef ,_fefga =_eceb .ConnComponents (_daad ,4);_fefga !=nil {return nil ,nil ,_f .Wrap (_fefga ,_gdafg ,"\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 _caddd ,_fefga =_daad .ClipToBitmap (_efed );_fefga !=nil {return nil ,nil ,_f .Wrap (_fefga ,_gdafg ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_caddd ,_bcfe =_caddd .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
if _bcfe !=nil {return nil ,nil ,_f .Wrap (_bcfe ,_gdafg ,"");};_ecaef ,_bcfe =_ecaef .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _bcfe !=nil {return nil ,nil ,_f .Wrap (_bcfe ,_gdafg ,"");};return _caddd ,_ecaef ,nil ;};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _dead ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";
_baa :=_dabf (width ,height );_baa .Data =data ;if len (data )< height *_baa .RowStride {return nil ,_f .Errorf (_dead ,"\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 *_baa .RowStride );
};return _baa ,nil ;};func (_aaf *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _aaf .addBorderGeneral (left ,right ,top ,bot ,val );};func TstImageBitmapInverseData ()[]byte {_dagcb :=_cfbf .Copy ();_dagcb .InverseData ();
return _dagcb .Data ;};func _adf ()(_feg [256]uint32 ){for _gdf :=0;_gdf < 256;_gdf ++{if _gdf &0x01!=0{_feg [_gdf ]|=0xf;};if _gdf &0x02!=0{_feg [_gdf ]|=0xf0;};if _gdf &0x04!=0{_feg [_gdf ]|=0xf00;};if _gdf &0x08!=0{_feg [_gdf ]|=0xf000;};if _gdf &0x10!=0{_feg [_gdf ]|=0xf0000;
};if _gdf &0x20!=0{_feg [_gdf ]|=0xf00000;};if _gdf &0x40!=0{_feg [_gdf ]|=0xf000000;};if _gdf &0x80!=0{_feg [_gdf ]|=0xf0000000;};};return _feg ;};