2024-07-25 19:53:55 +00:00

660 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 (_d "encoding/binary";_b "github.com/stretchr/testify/require";_g "github.com/unidoc/unipdf/v3/common";_age "github.com/unidoc/unipdf/v3/internal/bitwise";_e "github.com/unidoc/unipdf/v3/internal/imageutil";_bf "github.com/unidoc/unipdf/v3/internal/jbig2/basic";
_c "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_fc "image";_ac "math";_f "sort";_ca "strings";_ag "testing";);const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func _fegc (_cecf uint ,_cgc byte )byte {return _cgc >>_cecf <<_cecf };func (_cbfbe *byWidth )Len ()int {return len (_cbfbe .Values )};
func _gbb (_gea *Bitmap ,_agea int )(*Bitmap ,error ){const _bdc ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _gea ==nil {return nil ,_c .Error (_bdc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _agea ==1{return _fce (nil ,_gea );};if _agea !=2&&_agea !=4&&_agea !=8{return nil ,_c .Error (_bdc ,"\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");
};_cda :=_agea *_gea .Width ;_cfg :=_agea *_gea .Height ;_cbc :=New (_cda ,_cfg );var _ecb error ;switch _agea {case 2:_ecb =_de (_cbc ,_gea );case 4:_ecb =_bc (_cbc ,_gea );case 8:_ecb =_bg (_cbc ,_gea );};if _ecb !=nil {return nil ,_c .Wrap (_ecb ,_bdc ,"");
};return _cbc ,nil ;};func (_aaa *Bitmap )GetBitOffset (x int )int {return x &0x07};func _bcag (_geeb ,_bgb *Bitmap ,_begc ,_aba ,_gef ,_efae ,_ecge int ,_abca CombinationOperator )error {var _bafg int ;_bbcb :=func (){_bafg ++;_gef +=_bgb .RowStride ;
_efae +=_geeb .RowStride ;_ecge +=_geeb .RowStride };for _bafg =_begc ;_bafg < _aba ;_bbcb (){_dbg :=_gef ;for _dge :=_efae ;_dge <=_ecge ;_dge ++{_caeb ,_fgg :=_bgb .GetByte (_dbg );if _fgg !=nil {return _fgg ;};_bae ,_fgg :=_geeb .GetByte (_dge );if _fgg !=nil {return _fgg ;
};if _fgg =_bgb .SetByte (_dbg ,_bdcd (_caeb ,_bae ,_abca ));_fgg !=nil {return _fgg ;};_dbg ++;};};return nil ;};func _gfg (_dfcd *Bitmap ,_fbff int )(*Bitmap ,error ){const _bcge ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";
if _dfcd ==nil {return nil ,_c .Error (_bcge ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _fbff <=0{return nil ,_c .Error (_bcge ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");
};if _fbff ==1{_bbdb ,_edc :=_fce (nil ,_dfcd );if _edc !=nil {return nil ,_c .Wrap (_edc ,_bcge ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _bbdb ,nil ;};_bebg ,_eeeb :=_dd (_dfcd ,_fbff ,_fbff );if _eeeb !=nil {return nil ,_c .Wrap (_eeeb ,_bcge ,"");
};return _bebg ,nil ;};func _gegd (_cdf int )int {if _cdf < 0{return -_cdf ;};return _cdf ;};func _ebcb (_dbeb ,_ebeg *Bitmap ,_ccd ,_cgef ,_ggbf uint ,_efaa ,_cegd int ,_deca bool ,_fffd ,_cggg int )error {for _eefc :=_efaa ;_eefc < _cegd ;_eefc ++{if _fffd +1< len (_dbeb .Data ){_bgbff :=_eefc +1==_cegd ;
_cbge ,_caba :=_dbeb .GetByte (_fffd );if _caba !=nil {return _caba ;};_fffd ++;_cbge <<=_ccd ;_fecbc ,_caba :=_dbeb .GetByte (_fffd );if _caba !=nil {return _caba ;};_fecbc >>=_cgef ;_dgec :=_cbge |_fecbc ;if _bgbff &&!_deca {_dgec =_fegc (_ggbf ,_dgec );
};_caba =_ebeg .SetByte (_cggg ,_dgec );if _caba !=nil {return _caba ;};_cggg ++;if _bgbff &&_deca {_egge ,_bgcb :=_dbeb .GetByte (_fffd );if _bgcb !=nil {return _bgcb ;};_egge <<=_ccd ;_dgec =_fegc (_ggbf ,_egge );if _bgcb =_ebeg .SetByte (_cggg ,_dgec );
_bgcb !=nil {return _bgcb ;};};continue ;};_cage ,_dgba :=_dbeb .GetByte (_fffd );if _dgba !=nil {_g .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",_fffd ,_dgba );
return _dgba ;};_cage <<=_ccd ;_fffd ++;_dgba =_ebeg .SetByte (_cggg ,_cage );if _dgba !=nil {return _dgba ;};_cggg ++;};return nil ;};func (_bcca Points )GetIntX (i int )(int ,error ){if i >=len (_bcca ){return 0,_c .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 (_bcca [i ].X ),nil ;};func _aec (_ecf ,_agc *Bitmap ,_eda int ,_baf []byte ,_be int )(_bb error ){const _ece ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";
var (_gbf ,_efa ,_bbg ,_gd ,_cfad ,_gba ,_bba ,_aebd int ;_geb ,_bcg uint32 ;_dgd ,_cdaa byte ;_fgcb uint16 ;);_fec :=make ([]byte ,4);_gaf :=make ([]byte ,4);for _bbg =0;_bbg < _ecf .Height -1;_bbg ,_gd =_bbg +2,_gd +1{_gbf =_bbg *_ecf .RowStride ;_efa =_gd *_agc .RowStride ;
for _cfad ,_gba =0,0;_cfad < _be ;_cfad ,_gba =_cfad +4,_gba +1{for _bba =0;_bba < 4;_bba ++{_aebd =_gbf +_cfad +_bba ;if _aebd <=len (_ecf .Data )-1&&_aebd < _gbf +_ecf .RowStride {_fec [_bba ]=_ecf .Data [_aebd ];}else {_fec [_bba ]=0x00;};_aebd =_gbf +_ecf .RowStride +_cfad +_bba ;
if _aebd <=len (_ecf .Data )-1&&_aebd < _gbf +(2*_ecf .RowStride ){_gaf [_bba ]=_ecf .Data [_aebd ];}else {_gaf [_bba ]=0x00;};};_geb =_d .BigEndian .Uint32 (_fec );_bcg =_d .BigEndian .Uint32 (_gaf );_bcg |=_geb ;_bcg |=_bcg <<1;_bcg &=0xaaaaaaaa;_geb =_bcg |(_bcg <<7);
_dgd =byte (_geb >>24);_cdaa =byte ((_geb >>8)&0xff);_aebd =_efa +_gba ;if _aebd +1==len (_agc .Data )-1||_aebd +1>=_efa +_agc .RowStride {_agc .Data [_aebd ]=_baf [_dgd ];}else {_fgcb =(uint16 (_baf [_dgd ])<<8)|uint16 (_baf [_cdaa ]);if _bb =_agc .setTwoBytes (_aebd ,_fgcb );
_bb !=nil {return _c .Wrapf (_bb ,_ece ,"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",_aebd );};_gba ++;};};};
return nil ;};func _bec ()(_eba []byte ){_eba =make ([]byte ,256);for _afe :=0;_afe < 256;_afe ++{_badd :=byte (_afe );_eba [_badd ]=(_badd &0x01)|((_badd &0x04)>>1)|((_badd &0x10)>>2)|((_badd &0x40)>>3)|((_badd &0x02)<<3)|((_badd &0x08)<<2)|((_badd &0x20)<<1)|(_badd &0x80);
};return _eba ;};func _dfda (_bggd *Bitmap ,_egdgg *_bf .Stack ,_cceb ,_eeaf int )(_dcddc *_fc .Rectangle ,_gfab error ){const _fcbe ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _bggd ==nil {return nil ,_c .Error (_fcbe ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
};if _egdgg ==nil {return nil ,_c .Error (_fcbe ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_aceaa ,_dccb :=_bggd .Width ,_bggd .Height ;_dgfb :=_aceaa -1;_gffb :=_dccb -1;if _cceb < 0||_cceb > _dgfb ||_eeaf < 0||_eeaf > _gffb ||!_bggd .GetPixel (_cceb ,_eeaf ){return nil ,nil ;
};var _fcgb *_fc .Rectangle ;_fcgb ,_gfab =Rect (100000,100000,0,0);if _gfab !=nil {return nil ,_c .Wrap (_gfab ,_fcbe ,"");};if _gfab =_cgge (_egdgg ,_cceb ,_cceb ,_eeaf ,1,_gffb ,_fcgb );_gfab !=nil {return nil ,_c .Wrap (_gfab ,_fcbe ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
};if _gfab =_cgge (_egdgg ,_cceb ,_cceb ,_eeaf +1,-1,_gffb ,_fcgb );_gfab !=nil {return nil ,_c .Wrap (_gfab ,_fcbe ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_fcgb .Min .X ,_fcgb .Max .X =_cceb ,_cceb ;
_fcgb .Min .Y ,_fcgb .Max .Y =_eeaf ,_eeaf ;var (_bgae *fillSegment ;_fbdd int ;);for _egdgg .Len ()> 0{if _bgae ,_gfab =_efaba (_egdgg );_gfab !=nil {return nil ,_c .Wrap (_gfab ,_fcbe ,"");};_eeaf =_bgae ._eagdg ;for _cceb =_bgae ._ggbba ;_cceb >=0&&_bggd .GetPixel (_cceb ,_eeaf );
_cceb --{if _gfab =_bggd .SetPixel (_cceb ,_eeaf ,0);_gfab !=nil {return nil ,_c .Wrap (_gfab ,_fcbe ,"");};};if _cceb >=_bgae ._ggbba {for _cceb ++;_cceb <=_bgae ._acfe &&_cceb <=_dgfb &&!_bggd .GetPixel (_cceb ,_eeaf );_cceb ++{};_fbdd =_cceb ;if !(_cceb <=_bgae ._acfe &&_cceb <=_dgfb ){continue ;
};}else {_fbdd =_cceb +1;if _fbdd < _bgae ._ggbba -1{if _gfab =_cgge (_egdgg ,_fbdd ,_bgae ._ggbba -1,_bgae ._eagdg ,-_bgae ._abfc ,_gffb ,_fcgb );_gfab !=nil {return nil ,_c .Wrap (_gfab ,_fcbe ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_cceb =_bgae ._ggbba +1;};for {for ;_cceb <=_dgfb &&_bggd .GetPixel (_cceb ,_eeaf );_cceb ++{if _gfab =_bggd .SetPixel (_cceb ,_eeaf ,0);_gfab !=nil {return nil ,_c .Wrap (_gfab ,_fcbe ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _gfab =_cgge (_egdgg ,_fbdd ,_cceb -1,_bgae ._eagdg ,_bgae ._abfc ,_gffb ,_fcgb );
_gfab !=nil {return nil ,_c .Wrap (_gfab ,_fcbe ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _cceb > _bgae ._acfe +1{if _gfab =_cgge (_egdgg ,_bgae ._acfe +1,_cceb -1,_bgae ._eagdg ,-_bgae ._abfc ,_gffb ,_fcgb );_gfab !=nil {return nil ,_c .Wrap (_gfab ,_fcbe ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _cceb ++;_cceb <=_bgae ._acfe &&_cceb <=_dgfb &&!_bggd .GetPixel (_cceb ,_eeaf );_cceb ++{};_fbdd =_cceb ;if !(_cceb <=_bgae ._acfe &&_cceb <=_dgfb ){break ;};};};_fcgb .Max .X ++;_fcgb .Max .Y ++;return _fcgb ,nil ;};func (_cga *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_cga .Width ,Height :_cga .Height ,RowStride :_cga .RowStride ,Color :_cga .Color ,Text :_cga .Text ,BitmapNumber :_cga .BitmapNumber ,Special :_cga .Special ,Data :make ([]byte ,len (_cga .Data ))};
};func (_fcd *Bitmap )SizesEqual (s *Bitmap )bool {if _fcd ==s {return true ;};if _fcd .Width !=s .Width ||_fcd .Height !=s .Height {return false ;};return true ;};func TstASymbol (t *_ag .T )*Bitmap {t .Helper ();_cddgf :=New (6,6);_b .NoError (t ,_cddgf .SetPixel (1,0,1));
_b .NoError (t ,_cddgf .SetPixel (2,0,1));_b .NoError (t ,_cddgf .SetPixel (3,0,1));_b .NoError (t ,_cddgf .SetPixel (4,0,1));_b .NoError (t ,_cddgf .SetPixel (5,1,1));_b .NoError (t ,_cddgf .SetPixel (1,2,1));_b .NoError (t ,_cddgf .SetPixel (2,2,1));
_b .NoError (t ,_cddgf .SetPixel (3,2,1));_b .NoError (t ,_cddgf .SetPixel (4,2,1));_b .NoError (t ,_cddgf .SetPixel (5,2,1));_b .NoError (t ,_cddgf .SetPixel (0,3,1));_b .NoError (t ,_cddgf .SetPixel (5,3,1));_b .NoError (t ,_cddgf .SetPixel (0,4,1));
_b .NoError (t ,_cddgf .SetPixel (5,4,1));_b .NoError (t ,_cddgf .SetPixel (1,5,1));_b .NoError (t ,_cddgf .SetPixel (2,5,1));_b .NoError (t ,_cddgf .SetPixel (3,5,1));_b .NoError (t ,_cddgf .SetPixel (4,5,1));_b .NoError (t ,_cddgf .SetPixel (5,5,1));
return _cddgf ;};func _cdbd (_bac *Bitmap ,_dfbg ,_gbgba ,_egba ,_bfdb int ,_gefd RasterOperator ,_gggd *Bitmap ,_acegg ,_bggb int )error {var (_ceee bool ;_dgdg bool ;_bdcff byte ;_ccefd int ;_dabe int ;_cfeee int ;_ceff int ;_ebdf bool ;_bcfe int ;_efef int ;
_bfbge int ;_dccec bool ;_afbe byte ;_cbfb int ;_bfdee int ;_agbb int ;_efee byte ;_gffe int ;_cadbd int ;_addbg uint ;_bcff uint ;_eaff byte ;_ddfc shift ;_efbd bool ;_fgada bool ;_dgbb ,_daae int ;);if _acegg &7!=0{_cadbd =8-(_acegg &7);};if _dfbg &7!=0{_dabe =8-(_dfbg &7);
};if _cadbd ==0&&_dabe ==0{_eaff =_bfecc [0];}else {if _dabe > _cadbd {_addbg =uint (_dabe -_cadbd );}else {_addbg =uint (8-(_cadbd -_dabe ));};_bcff =8-_addbg ;_eaff =_bfecc [_addbg ];};if (_dfbg &7)!=0{_ceee =true ;_ccefd =8-(_dfbg &7);_bdcff =_bfecc [_ccefd ];
_cfeee =_bac .RowStride *_gbgba +(_dfbg >>3);_ceff =_gggd .RowStride *_bggb +(_acegg >>3);_gffe =8-(_acegg &7);if _ccefd > _gffe {_ddfc =_bbbe ;if _egba >=_cadbd {_efbd =true ;};}else {_ddfc =_cgefc ;};};if _egba < _ccefd {_dgdg =true ;_bdcff &=_bcgeb [8-_ccefd +_egba ];
};if !_dgdg {_bcfe =(_egba -_ccefd )>>3;if _bcfe !=0{_ebdf =true ;_efef =_bac .RowStride *_gbgba +((_dfbg +_dabe )>>3);_bfbge =_gggd .RowStride *_bggb +((_acegg +_dabe )>>3);};};_cbfb =(_dfbg +_egba )&7;if !(_dgdg ||_cbfb ==0){_dccec =true ;_afbe =_bcgeb [_cbfb ];
_bfdee =_bac .RowStride *_gbgba +((_dfbg +_dabe )>>3)+_bcfe ;_agbb =_gggd .RowStride *_bggb +((_acegg +_dabe )>>3)+_bcfe ;if _cbfb > int (_bcff ){_fgada =true ;};};switch _gefd {case PixSrc :if _ceee {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{if _ddfc ==_bbbe {_efee =_gggd .Data [_ceff ]<<_addbg ;
if _efbd {_efee =_cdbf (_efee ,_gggd .Data [_ceff +1]>>_bcff ,_eaff );};}else {_efee =_gggd .Data [_ceff ]>>_bcff ;};_bac .Data [_cfeee ]=_cdbf (_bac .Data [_cfeee ],_efee ,_bdcff );_cfeee +=_bac .RowStride ;_ceff +=_gggd .RowStride ;};};if _ebdf {for _dgbb =0;
_dgbb < _bfdb ;_dgbb ++{for _daae =0;_daae < _bcfe ;_daae ++{_efee =_cdbf (_gggd .Data [_bfbge +_daae ]<<_addbg ,_gggd .Data [_bfbge +_daae +1]>>_bcff ,_eaff );_bac .Data [_efef +_daae ]=_efee ;};_efef +=_bac .RowStride ;_bfbge +=_gggd .RowStride ;};};
if _dccec {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{_efee =_gggd .Data [_agbb ]<<_addbg ;if _fgada {_efee =_cdbf (_efee ,_gggd .Data [_agbb +1]>>_bcff ,_eaff );};_bac .Data [_bfdee ]=_cdbf (_bac .Data [_bfdee ],_efee ,_afbe );_bfdee +=_bac .RowStride ;_agbb +=_gggd .RowStride ;
};};case PixNotSrc :if _ceee {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{if _ddfc ==_bbbe {_efee =_gggd .Data [_ceff ]<<_addbg ;if _efbd {_efee =_cdbf (_efee ,_gggd .Data [_ceff +1]>>_bcff ,_eaff );};}else {_efee =_gggd .Data [_ceff ]>>_bcff ;};_bac .Data [_cfeee ]=_cdbf (_bac .Data [_cfeee ],^_efee ,_bdcff );
_cfeee +=_bac .RowStride ;_ceff +=_gggd .RowStride ;};};if _ebdf {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{for _daae =0;_daae < _bcfe ;_daae ++{_efee =_cdbf (_gggd .Data [_bfbge +_daae ]<<_addbg ,_gggd .Data [_bfbge +_daae +1]>>_bcff ,_eaff );_bac .Data [_efef +_daae ]=^_efee ;
};_efef +=_bac .RowStride ;_bfbge +=_gggd .RowStride ;};};if _dccec {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{_efee =_gggd .Data [_agbb ]<<_addbg ;if _fgada {_efee =_cdbf (_efee ,_gggd .Data [_agbb +1]>>_bcff ,_eaff );};_bac .Data [_bfdee ]=_cdbf (_bac .Data [_bfdee ],^_efee ,_afbe );
_bfdee +=_bac .RowStride ;_agbb +=_gggd .RowStride ;};};case PixSrcOrDst :if _ceee {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{if _ddfc ==_bbbe {_efee =_gggd .Data [_ceff ]<<_addbg ;if _efbd {_efee =_cdbf (_efee ,_gggd .Data [_ceff +1]>>_bcff ,_eaff );};}else {_efee =_gggd .Data [_ceff ]>>_bcff ;
};_bac .Data [_cfeee ]=_cdbf (_bac .Data [_cfeee ],_efee |_bac .Data [_cfeee ],_bdcff );_cfeee +=_bac .RowStride ;_ceff +=_gggd .RowStride ;};};if _ebdf {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{for _daae =0;_daae < _bcfe ;_daae ++{_efee =_cdbf (_gggd .Data [_bfbge +_daae ]<<_addbg ,_gggd .Data [_bfbge +_daae +1]>>_bcff ,_eaff );
_bac .Data [_efef +_daae ]|=_efee ;};_efef +=_bac .RowStride ;_bfbge +=_gggd .RowStride ;};};if _dccec {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{_efee =_gggd .Data [_agbb ]<<_addbg ;if _fgada {_efee =_cdbf (_efee ,_gggd .Data [_agbb +1]>>_bcff ,_eaff );};_bac .Data [_bfdee ]=_cdbf (_bac .Data [_bfdee ],_efee |_bac .Data [_bfdee ],_afbe );
_bfdee +=_bac .RowStride ;_agbb +=_gggd .RowStride ;};};case PixSrcAndDst :if _ceee {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{if _ddfc ==_bbbe {_efee =_gggd .Data [_ceff ]<<_addbg ;if _efbd {_efee =_cdbf (_efee ,_gggd .Data [_ceff +1]>>_bcff ,_eaff );};}else {_efee =_gggd .Data [_ceff ]>>_bcff ;
};_bac .Data [_cfeee ]=_cdbf (_bac .Data [_cfeee ],_efee &_bac .Data [_cfeee ],_bdcff );_cfeee +=_bac .RowStride ;_ceff +=_gggd .RowStride ;};};if _ebdf {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{for _daae =0;_daae < _bcfe ;_daae ++{_efee =_cdbf (_gggd .Data [_bfbge +_daae ]<<_addbg ,_gggd .Data [_bfbge +_daae +1]>>_bcff ,_eaff );
_bac .Data [_efef +_daae ]&=_efee ;};_efef +=_bac .RowStride ;_bfbge +=_gggd .RowStride ;};};if _dccec {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{_efee =_gggd .Data [_agbb ]<<_addbg ;if _fgada {_efee =_cdbf (_efee ,_gggd .Data [_agbb +1]>>_bcff ,_eaff );};_bac .Data [_bfdee ]=_cdbf (_bac .Data [_bfdee ],_efee &_bac .Data [_bfdee ],_afbe );
_bfdee +=_bac .RowStride ;_agbb +=_gggd .RowStride ;};};case PixSrcXorDst :if _ceee {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{if _ddfc ==_bbbe {_efee =_gggd .Data [_ceff ]<<_addbg ;if _efbd {_efee =_cdbf (_efee ,_gggd .Data [_ceff +1]>>_bcff ,_eaff );};}else {_efee =_gggd .Data [_ceff ]>>_bcff ;
};_bac .Data [_cfeee ]=_cdbf (_bac .Data [_cfeee ],_efee ^_bac .Data [_cfeee ],_bdcff );_cfeee +=_bac .RowStride ;_ceff +=_gggd .RowStride ;};};if _ebdf {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{for _daae =0;_daae < _bcfe ;_daae ++{_efee =_cdbf (_gggd .Data [_bfbge +_daae ]<<_addbg ,_gggd .Data [_bfbge +_daae +1]>>_bcff ,_eaff );
_bac .Data [_efef +_daae ]^=_efee ;};_efef +=_bac .RowStride ;_bfbge +=_gggd .RowStride ;};};if _dccec {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{_efee =_gggd .Data [_agbb ]<<_addbg ;if _fgada {_efee =_cdbf (_efee ,_gggd .Data [_agbb +1]>>_bcff ,_eaff );};_bac .Data [_bfdee ]=_cdbf (_bac .Data [_bfdee ],_efee ^_bac .Data [_bfdee ],_afbe );
_bfdee +=_bac .RowStride ;_agbb +=_gggd .RowStride ;};};case PixNotSrcOrDst :if _ceee {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{if _ddfc ==_bbbe {_efee =_gggd .Data [_ceff ]<<_addbg ;if _efbd {_efee =_cdbf (_efee ,_gggd .Data [_ceff +1]>>_bcff ,_eaff );};}else {_efee =_gggd .Data [_ceff ]>>_bcff ;
};_bac .Data [_cfeee ]=_cdbf (_bac .Data [_cfeee ],^_efee |_bac .Data [_cfeee ],_bdcff );_cfeee +=_bac .RowStride ;_ceff +=_gggd .RowStride ;};};if _ebdf {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{for _daae =0;_daae < _bcfe ;_daae ++{_efee =_cdbf (_gggd .Data [_bfbge +_daae ]<<_addbg ,_gggd .Data [_bfbge +_daae +1]>>_bcff ,_eaff );
_bac .Data [_efef +_daae ]|=^_efee ;};_efef +=_bac .RowStride ;_bfbge +=_gggd .RowStride ;};};if _dccec {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{_efee =_gggd .Data [_agbb ]<<_addbg ;if _fgada {_efee =_cdbf (_efee ,_gggd .Data [_agbb +1]>>_bcff ,_eaff );};
_bac .Data [_bfdee ]=_cdbf (_bac .Data [_bfdee ],^_efee |_bac .Data [_bfdee ],_afbe );_bfdee +=_bac .RowStride ;_agbb +=_gggd .RowStride ;};};case PixNotSrcAndDst :if _ceee {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{if _ddfc ==_bbbe {_efee =_gggd .Data [_ceff ]<<_addbg ;
if _efbd {_efee =_cdbf (_efee ,_gggd .Data [_ceff +1]>>_bcff ,_eaff );};}else {_efee =_gggd .Data [_ceff ]>>_bcff ;};_bac .Data [_cfeee ]=_cdbf (_bac .Data [_cfeee ],^_efee &_bac .Data [_cfeee ],_bdcff );_cfeee +=_bac .RowStride ;_ceff +=_gggd .RowStride ;
};};if _ebdf {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{for _daae =0;_daae < _bcfe ;_daae ++{_efee =_cdbf (_gggd .Data [_bfbge +_daae ]<<_addbg ,_gggd .Data [_bfbge +_daae +1]>>_bcff ,_eaff );_bac .Data [_efef +_daae ]&=^_efee ;};_efef +=_bac .RowStride ;_bfbge +=_gggd .RowStride ;
};};if _dccec {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{_efee =_gggd .Data [_agbb ]<<_addbg ;if _fgada {_efee =_cdbf (_efee ,_gggd .Data [_agbb +1]>>_bcff ,_eaff );};_bac .Data [_bfdee ]=_cdbf (_bac .Data [_bfdee ],^_efee &_bac .Data [_bfdee ],_afbe );_bfdee +=_bac .RowStride ;
_agbb +=_gggd .RowStride ;};};case PixSrcOrNotDst :if _ceee {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{if _ddfc ==_bbbe {_efee =_gggd .Data [_ceff ]<<_addbg ;if _efbd {_efee =_cdbf (_efee ,_gggd .Data [_ceff +1]>>_bcff ,_eaff );};}else {_efee =_gggd .Data [_ceff ]>>_bcff ;
};_bac .Data [_cfeee ]=_cdbf (_bac .Data [_cfeee ],_efee |^_bac .Data [_cfeee ],_bdcff );_cfeee +=_bac .RowStride ;_ceff +=_gggd .RowStride ;};};if _ebdf {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{for _daae =0;_daae < _bcfe ;_daae ++{_efee =_cdbf (_gggd .Data [_bfbge +_daae ]<<_addbg ,_gggd .Data [_bfbge +_daae +1]>>_bcff ,_eaff );
_bac .Data [_efef +_daae ]=_efee |^_bac .Data [_efef +_daae ];};_efef +=_bac .RowStride ;_bfbge +=_gggd .RowStride ;};};if _dccec {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{_efee =_gggd .Data [_agbb ]<<_addbg ;if _fgada {_efee =_cdbf (_efee ,_gggd .Data [_agbb +1]>>_bcff ,_eaff );
};_bac .Data [_bfdee ]=_cdbf (_bac .Data [_bfdee ],_efee |^_bac .Data [_bfdee ],_afbe );_bfdee +=_bac .RowStride ;_agbb +=_gggd .RowStride ;};};case PixSrcAndNotDst :if _ceee {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{if _ddfc ==_bbbe {_efee =_gggd .Data [_ceff ]<<_addbg ;
if _efbd {_efee =_cdbf (_efee ,_gggd .Data [_ceff +1]>>_bcff ,_eaff );};}else {_efee =_gggd .Data [_ceff ]>>_bcff ;};_bac .Data [_cfeee ]=_cdbf (_bac .Data [_cfeee ],_efee &^_bac .Data [_cfeee ],_bdcff );_cfeee +=_bac .RowStride ;_ceff +=_gggd .RowStride ;
};};if _ebdf {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{for _daae =0;_daae < _bcfe ;_daae ++{_efee =_cdbf (_gggd .Data [_bfbge +_daae ]<<_addbg ,_gggd .Data [_bfbge +_daae +1]>>_bcff ,_eaff );_bac .Data [_efef +_daae ]=_efee &^_bac .Data [_efef +_daae ];};_efef +=_bac .RowStride ;
_bfbge +=_gggd .RowStride ;};};if _dccec {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{_efee =_gggd .Data [_agbb ]<<_addbg ;if _fgada {_efee =_cdbf (_efee ,_gggd .Data [_agbb +1]>>_bcff ,_eaff );};_bac .Data [_bfdee ]=_cdbf (_bac .Data [_bfdee ],_efee &^_bac .Data [_bfdee ],_afbe );
_bfdee +=_bac .RowStride ;_agbb +=_gggd .RowStride ;};};case PixNotPixSrcOrDst :if _ceee {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{if _ddfc ==_bbbe {_efee =_gggd .Data [_ceff ]<<_addbg ;if _efbd {_efee =_cdbf (_efee ,_gggd .Data [_ceff +1]>>_bcff ,_eaff );
};}else {_efee =_gggd .Data [_ceff ]>>_bcff ;};_bac .Data [_cfeee ]=_cdbf (_bac .Data [_cfeee ],^(_efee |_bac .Data [_cfeee ]),_bdcff );_cfeee +=_bac .RowStride ;_ceff +=_gggd .RowStride ;};};if _ebdf {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{for _daae =0;
_daae < _bcfe ;_daae ++{_efee =_cdbf (_gggd .Data [_bfbge +_daae ]<<_addbg ,_gggd .Data [_bfbge +_daae +1]>>_bcff ,_eaff );_bac .Data [_efef +_daae ]=^(_efee |_bac .Data [_efef +_daae ]);};_efef +=_bac .RowStride ;_bfbge +=_gggd .RowStride ;};};if _dccec {for _dgbb =0;
_dgbb < _bfdb ;_dgbb ++{_efee =_gggd .Data [_agbb ]<<_addbg ;if _fgada {_efee =_cdbf (_efee ,_gggd .Data [_agbb +1]>>_bcff ,_eaff );};_bac .Data [_bfdee ]=_cdbf (_bac .Data [_bfdee ],^(_efee |_bac .Data [_bfdee ]),_afbe );_bfdee +=_bac .RowStride ;_agbb +=_gggd .RowStride ;
};};case PixNotPixSrcAndDst :if _ceee {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{if _ddfc ==_bbbe {_efee =_gggd .Data [_ceff ]<<_addbg ;if _efbd {_efee =_cdbf (_efee ,_gggd .Data [_ceff +1]>>_bcff ,_eaff );};}else {_efee =_gggd .Data [_ceff ]>>_bcff ;};_bac .Data [_cfeee ]=_cdbf (_bac .Data [_cfeee ],^(_efee &_bac .Data [_cfeee ]),_bdcff );
_cfeee +=_bac .RowStride ;_ceff +=_gggd .RowStride ;};};if _ebdf {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{for _daae =0;_daae < _bcfe ;_daae ++{_efee =_cdbf (_gggd .Data [_bfbge +_daae ]<<_addbg ,_gggd .Data [_bfbge +_daae +1]>>_bcff ,_eaff );_bac .Data [_efef +_daae ]=^(_efee &_bac .Data [_efef +_daae ]);
};_efef +=_bac .RowStride ;_bfbge +=_gggd .RowStride ;};};if _dccec {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{_efee =_gggd .Data [_agbb ]<<_addbg ;if _fgada {_efee =_cdbf (_efee ,_gggd .Data [_agbb +1]>>_bcff ,_eaff );};_bac .Data [_bfdee ]=_cdbf (_bac .Data [_bfdee ],^(_efee &_bac .Data [_bfdee ]),_afbe );
_bfdee +=_bac .RowStride ;_agbb +=_gggd .RowStride ;};};case PixNotPixSrcXorDst :if _ceee {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{if _ddfc ==_bbbe {_efee =_gggd .Data [_ceff ]<<_addbg ;if _efbd {_efee =_cdbf (_efee ,_gggd .Data [_ceff +1]>>_bcff ,_eaff );
};}else {_efee =_gggd .Data [_ceff ]>>_bcff ;};_bac .Data [_cfeee ]=_cdbf (_bac .Data [_cfeee ],^(_efee ^_bac .Data [_cfeee ]),_bdcff );_cfeee +=_bac .RowStride ;_ceff +=_gggd .RowStride ;};};if _ebdf {for _dgbb =0;_dgbb < _bfdb ;_dgbb ++{for _daae =0;
_daae < _bcfe ;_daae ++{_efee =_cdbf (_gggd .Data [_bfbge +_daae ]<<_addbg ,_gggd .Data [_bfbge +_daae +1]>>_bcff ,_eaff );_bac .Data [_efef +_daae ]=^(_efee ^_bac .Data [_efef +_daae ]);};_efef +=_bac .RowStride ;_bfbge +=_gggd .RowStride ;};};if _dccec {for _dgbb =0;
_dgbb < _bfdb ;_dgbb ++{_efee =_gggd .Data [_agbb ]<<_addbg ;if _fgada {_efee =_cdbf (_efee ,_gggd .Data [_agbb +1]>>_bcff ,_eaff );};_bac .Data [_bfdee ]=_cdbf (_bac .Data [_bfdee ],^(_efee ^_bac .Data [_bfdee ]),_afbe );_bfdee +=_bac .RowStride ;_agbb +=_gggd .RowStride ;
};};default:_g .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",_gefd );return _c .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 init (){for _gad :=0;_gad < 256;_gad ++{_dfd [_gad ]=uint8 (_gad &0x1)+(uint8 (_gad >>1)&0x1)+(uint8 (_gad >>2)&0x1)+(uint8 (_gad >>3)&0x1)+(uint8 (_gad >>4)&0x1)+(uint8 (_gad >>5)&0x1)+(uint8 (_gad >>6)&0x1)+(uint8 (_gad >>7)&0x1);
};};func _ffea ()(_ae [256]uint32 ){for _aeb :=0;_aeb < 256;_aeb ++{if _aeb &0x01!=0{_ae [_aeb ]|=0xf;};if _aeb &0x02!=0{_ae [_aeb ]|=0xf0;};if _aeb &0x04!=0{_ae [_aeb ]|=0xf00;};if _aeb &0x08!=0{_ae [_aeb ]|=0xf000;};if _aeb &0x10!=0{_ae [_aeb ]|=0xf0000;
};if _aeb &0x20!=0{_ae [_aeb ]|=0xf00000;};if _aeb &0x40!=0{_ae [_aeb ]|=0xf000000;};if _aeb &0x80!=0{_ae [_aeb ]|=0xf0000000;};};return _ae ;};func (_fcab *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _gagb ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";
if _fcab ==nil {return nil ,_c .Error (_gagb ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_c .Error (_gagb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};_bbdbd :=len (_fcab .Values );_dbbg :=&Bitmaps {Values :make ([]*Bitmap ,_bbdbd ),Boxes :make ([]*_fc .Rectangle ,_bbdbd )};var (_efeb ,_aafd *Bitmap ;_facc *_fc .Rectangle ;_bebb error ;);for _cgff :=0;_cgff < _bbdbd ;_cgff ++{if _efeb ,_bebb =_fcab .GetBitmap (_cgff );
_bebb !=nil {return nil ,_c .Wrap (_bebb ,_gagb ,"");};if _facc ,_bebb =_fcab .GetBox (_cgff );_bebb !=nil {return nil ,_c .Wrap (_bebb ,_gagb ,"");};if _aafd ,_bebb =s .clipRectangle (_facc ,nil );_bebb !=nil {return nil ,_c .Wrap (_bebb ,_gagb ,"");};
if _aafd ,_bebb =_aafd .And (_efeb );_bebb !=nil {return nil ,_c .Wrap (_bebb ,_gagb ,"");};_dbbg .Values [_cgff ]=_aafd ;_dbbg .Boxes [_cgff ]=_facc ;};return _dbbg ,nil ;};func (_daf *Bitmap )Zero ()bool {_dedc :=_daf .Width /8;_gee :=_daf .Width &7;
var _gegf byte ;if _gee !=0{_gegf =byte (0xff<<uint (8-_gee ));};var _cbgc ,_fbd ,_gebc int ;for _fbd =0;_fbd < _daf .Height ;_fbd ++{_cbgc =_daf .RowStride *_fbd ;for _gebc =0;_gebc < _dedc ;_gebc ,_cbgc =_gebc +1,_cbgc +1{if _daf .Data [_cbgc ]!=0{return false ;
};};if _gee > 0{if _daf .Data [_cbgc ]&_gegf !=0{return false ;};};};return true ;};func (_fecb *Bitmap )setAll ()error {_bbd :=_aeeg (_fecb ,0,0,_fecb .Width ,_fecb .Height ,PixSet ,nil ,0,0);if _bbd !=nil {return _c .Wrap (_bbd ,"\u0073\u0065\u0074\u0041\u006c\u006c","");
};return nil ;};func _dbad (_ggaf *Bitmap ,_dbbb *Bitmap ,_bece *Selection )(*Bitmap ,error ){var (_ffefe *Bitmap ;_cbdcff error ;);_ggaf ,_cbdcff =_feff (_ggaf ,_dbbb ,_bece ,&_ffefe );if _cbdcff !=nil {return nil ,_cbdcff ;};if _cbdcff =_ggaf .clearAll ();
_cbdcff !=nil {return nil ,_cbdcff ;};var _egb SelectionValue ;for _ffge :=0;_ffge < _bece .Height ;_ffge ++{for _fdbe :=0;_fdbe < _bece .Width ;_fdbe ++{_egb =_bece .Data [_ffge ][_fdbe ];if _egb ==SelHit {if _cbdcff =_ggaf .RasterOperation (_fdbe -_bece .Cx ,_ffge -_bece .Cy ,_dbbb .Width ,_dbbb .Height ,PixSrcOrDst ,_ffefe ,0,0);
_cbdcff !=nil {return nil ,_cbdcff ;};};};};return _ggaf ,nil ;};func (_fefc *Points )Add (pt *Points )error {const _fddf ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _fefc ==nil {return _c .Error (_fddf ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if pt ==nil {return _c .Error (_fddf ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_fefc =append (*_fefc ,*pt ...);return nil ;};type LocationFilter int ;
func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_gbdf bool ,_ggad error ){const _eega ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_caed ,_acbe :=p1 .Width ,p1 .Height ;
_gddg ,_aeac :=p3 .Width ,p3 .Height ;if _bf .Abs (_caed -_gddg )> maxDiffW {return false ,nil ;};if _bf .Abs (_acbe -_aeac )> maxDiffH {return false ,nil ;};_fafg :=int (float32 (area1 )*(1.0-rank )+0.5);_afdf :=int (float32 (area3 )*(1.0-rank )+0.5);
var _fbdaa ,_baec int ;if delX >=0{_fbdaa =int (delX +0.5);}else {_fbdaa =int (delX -0.5);};if delY >=0{_baec =int (delY +0.5);}else {_baec =int (delY -0.5);};_deed :=p1 .CreateTemplate ();if _ggad =_deed .RasterOperation (0,0,_caed ,_acbe ,PixSrc ,p1 ,0,0);
_ggad !=nil {return false ,_c .Wrap (_ggad ,_eega ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _ggad =_deed .RasterOperation (_fbdaa ,_baec ,_caed ,_acbe ,PixNotSrcAndDst ,p4 ,0,0);_ggad !=nil {return false ,_c .Wrap (_ggad ,_eega ,"\u0074 \u0026\u0020\u0021\u0070\u0034");
};_gbdf ,_ggad =_deed .ThresholdPixelSum (_fafg ,tab8 );if _ggad !=nil {return false ,_c .Wrap (_ggad ,_eega ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _gbdf {return false ,nil ;};if _ggad =_deed .RasterOperation (_fbdaa ,_baec ,_gddg ,_aeac ,PixSrc ,p3 ,0,0);
_ggad !=nil {return false ,_c .Wrap (_ggad ,_eega ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _ggad =_deed .RasterOperation (0,0,_gddg ,_aeac ,PixNotSrcAndDst ,p2 ,0,0);_ggad !=nil {return false ,_c .Wrap (_ggad ,_eega ,"\u0074 \u0026\u0020\u0021\u0070\u0032");
};_gbdf ,_ggad =_deed .ThresholdPixelSum (_afdf ,tab8 );if _ggad !=nil {return false ,_c .Wrap (_ggad ,_eega ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_gbdf ,nil ;};var _dfd [256]uint8 ;func (_aea *Bitmap )String ()string {var _ceg ="\u000a";
for _acca :=0;_acca < _aea .Height ;_acca ++{var _ggbb string ;for _ege :=0;_ege < _aea .Width ;_ege ++{_daeb :=_aea .GetPixel (_ege ,_acca );if _daeb {_ggbb +="\u0031";}else {_ggbb +="\u0030";};};_ceg +=_ggbb +"\u000a";};return _ceg ;};func _dafe (_bcf ,_ggf *Bitmap ,_cdfa CombinationOperator )*Bitmap {_cace :=New (_bcf .Width ,_bcf .Height );
for _faab :=0;_faab < len (_cace .Data );_faab ++{_cace .Data [_faab ]=_bdcd (_bcf .Data [_faab ],_ggf .Data [_faab ],_cdfa );};return _cace ;};func _bdcd (_faabc ,_cbaf byte ,_ddf CombinationOperator )byte {switch _ddf {case CmbOpOr :return _cbaf |_faabc ;
case CmbOpAnd :return _cbaf &_faabc ;case CmbOpXor :return _cbaf ^_faabc ;case CmbOpXNor :return ^(_cbaf ^_faabc );case CmbOpNot :return ^(_cbaf );default:return _cbaf ;};};func (_aede *Bitmap )GetByteIndex (x ,y int )int {return y *_aede .RowStride +(x >>3)};
func _bbff (_fegd ,_adccf int )int {if _fegd > _adccf {return _fegd ;};return _adccf ;};func _eg (_gcg *Bitmap ,_dfg ...int )(_ebb *Bitmap ,_acg error ){const _fae ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";
if _gcg ==nil {return nil ,_c .Error (_fae ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_dfg )==0||len (_dfg )> 4{return nil ,_c .Error (_fae ,"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 _dfg [0]<=0{_g .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");_ebb ,_acg =_fce (nil ,_gcg );if _acg !=nil {return nil ,_c .Wrap (_acg ,_fae ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
};return _ebb ,nil ;};_bcd :=_bec ();_ebb =_gcg ;for _gga ,_acd :=range _dfg {if _acd <=0{break ;};_ebb ,_acg =_cfd (_ebb ,_acd ,_bcd );if _acg !=nil {return nil ,_c .Wrapf (_acg ,_fae ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_gga );
};};return _ebb ,nil ;};func (_gfc *byHeight )Swap (i ,j int ){_gfc .Values [i ],_gfc .Values [j ]=_gfc .Values [j ],_gfc .Values [i ];if _gfc .Boxes !=nil {_gfc .Boxes [i ],_gfc .Boxes [j ]=_gfc .Boxes [j ],_gfc .Boxes [i ];};};func (_dcce *Boxes )selectWithIndicator (_baabf *_bf .NumSlice )(_fdf *Boxes ,_afbb error ){const _faff ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _dcce ==nil {return nil ,_c .Error (_faff ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _baabf ==nil {return nil ,_c .Error (_faff ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if len (*_baabf )!=len (*_dcce ){return nil ,_c .Error (_faff ,"\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 _afg ,_fbaa int ;for _ebbbf :=0;_ebbbf < len (*_baabf );_ebbbf ++{if _afg ,_afbb =_baabf .GetInt (_ebbbf );_afbb !=nil {return nil ,_c .Wrap (_afbb ,_faff ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _afg ==1{_fbaa ++;
};};if _fbaa ==len (*_dcce ){return _dcce ,nil ;};_fgbg :=Boxes {};for _ega :=0;_ega < len (*_baabf );_ega ++{_afg =int ((*_baabf )[_ega ]);if _afg ==0{continue ;};_fgbg =append (_fgbg ,(*_dcce )[_ega ]);};_fdf =&_fgbg ;return _fdf ,nil ;};func (_daaec *BitmapsArray )AddBox (box *_fc .Rectangle ){_daaec .Boxes =append (_daaec .Boxes ,box )};
func TstPSymbol (t *_ag .T )*Bitmap {t .Helper ();_bdfe :=New (5,8);_b .NoError (t ,_bdfe .SetPixel (0,0,1));_b .NoError (t ,_bdfe .SetPixel (1,0,1));_b .NoError (t ,_bdfe .SetPixel (2,0,1));_b .NoError (t ,_bdfe .SetPixel (3,0,1));_b .NoError (t ,_bdfe .SetPixel (4,1,1));
_b .NoError (t ,_bdfe .SetPixel (0,1,1));_b .NoError (t ,_bdfe .SetPixel (4,2,1));_b .NoError (t ,_bdfe .SetPixel (0,2,1));_b .NoError (t ,_bdfe .SetPixel (4,3,1));_b .NoError (t ,_bdfe .SetPixel (0,3,1));_b .NoError (t ,_bdfe .SetPixel (0,4,1));_b .NoError (t ,_bdfe .SetPixel (1,4,1));
_b .NoError (t ,_bdfe .SetPixel (2,4,1));_b .NoError (t ,_bdfe .SetPixel (3,4,1));_b .NoError (t ,_bdfe .SetPixel (0,5,1));_b .NoError (t ,_bdfe .SetPixel (0,6,1));_b .NoError (t ,_bdfe .SetPixel (0,7,1));return _bdfe ;};func _feff (_dcbd *Bitmap ,_defc *Bitmap ,_bfda *Selection ,_cfcb **Bitmap )(*Bitmap ,error ){const _dfec ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";
if _defc ==nil {return nil ,_c .Error (_dfec ,"\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 _bfda ==nil {return nil ,_c .Error (_dfec ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");
};_cfce ,_afaf :=_bfda .Height ,_bfda .Width ;if _cfce ==0||_afaf ==0{return nil ,_c .Error (_dfec ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _dcbd ==nil {_dcbd =_defc .createTemplate ();
*_cfcb =_defc ;return _dcbd ,nil ;};_dcbd .Width =_defc .Width ;_dcbd .Height =_defc .Height ;_dcbd .RowStride =_defc .RowStride ;_dcbd .Color =_defc .Color ;_dcbd .Data =make ([]byte ,_defc .RowStride *_defc .Height );if _dcbd ==_defc {*_cfcb =_defc .Copy ();
}else {*_cfcb =_defc ;};return _dcbd ,nil ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _fce (d ,s )};func ClipBoxToRectangle (box *_fc .Rectangle ,wi ,hi int )(_dgef *_fc .Rectangle ,_dgdd error ){const _bgbf ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,_c .Error (_bgbf ,"\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 ,_c .Error (_bgbf ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");
};_ecgg :=*box ;_dgef =&_ecgg ;if _dgef .Min .X < 0{_dgef .Max .X +=_dgef .Min .X ;_dgef .Min .X =0;};if _dgef .Min .Y < 0{_dgef .Max .Y +=_dgef .Min .Y ;_dgef .Min .Y =0;};if _dgef .Max .X > wi {_dgef .Max .X =wi ;};if _dgef .Max .Y > hi {_dgef .Max .Y =hi ;
};return _dgef ,nil ;};func _afddb (_eabd ,_dcfe *Bitmap ,_aef *Selection )(*Bitmap ,error ){const _efgb ="\u006f\u0070\u0065\u006e";var _fgdd error ;_eabd ,_fgdd =_gcf (_eabd ,_dcfe ,_aef );if _fgdd !=nil {return nil ,_c .Wrap (_fgdd ,_efgb ,"");};_aefc ,_fgdd :=_ebffd (nil ,_dcfe ,_aef );
if _fgdd !=nil {return nil ,_c .Wrap (_fgdd ,_efgb ,"");};_ ,_fgdd =_dbad (_eabd ,_aefc ,_aef );if _fgdd !=nil {return nil ,_c .Wrap (_fgdd ,_efgb ,"");};return _eabd ,nil ;};func _gfge (_efcc *Bitmap ,_gdcf ,_aabd int ,_fggd ,_aaad int ,_adad RasterOperator ){var (_eabc bool ;
_aafg bool ;_gecg int ;_fecdg int ;_cdbdf int ;_afcf int ;_cbec bool ;_caddf byte ;);_dedce :=8-(_gdcf &7);_cfbd :=_bfecc [_dedce ];_degef :=_efcc .RowStride *_aabd +(_gdcf >>3);if _fggd < _dedce {_eabc =true ;_cfbd &=_bcgeb [8-_dedce +_fggd ];};if !_eabc {_gecg =(_fggd -_dedce )>>3;
if _gecg !=0{_aafg =true ;_fecdg =_degef +1;};};_cdbdf =(_gdcf +_fggd )&7;if !(_eabc ||_cdbdf ==0){_cbec =true ;_caddf =_bcgeb [_cdbdf ];_afcf =_degef +1+_gecg ;};var _cdde ,_ddfd int ;switch _adad {case PixClr :for _cdde =0;_cdde < _aaad ;_cdde ++{_efcc .Data [_degef ]=_cdbf (_efcc .Data [_degef ],0x0,_cfbd );
_degef +=_efcc .RowStride ;};if _aafg {for _cdde =0;_cdde < _aaad ;_cdde ++{for _ddfd =0;_ddfd < _gecg ;_ddfd ++{_efcc .Data [_fecdg +_ddfd ]=0x0;};_fecdg +=_efcc .RowStride ;};};if _cbec {for _cdde =0;_cdde < _aaad ;_cdde ++{_efcc .Data [_afcf ]=_cdbf (_efcc .Data [_afcf ],0x0,_caddf );
_afcf +=_efcc .RowStride ;};};case PixSet :for _cdde =0;_cdde < _aaad ;_cdde ++{_efcc .Data [_degef ]=_cdbf (_efcc .Data [_degef ],0xff,_cfbd );_degef +=_efcc .RowStride ;};if _aafg {for _cdde =0;_cdde < _aaad ;_cdde ++{for _ddfd =0;_ddfd < _gecg ;_ddfd ++{_efcc .Data [_fecdg +_ddfd ]=0xff;
};_fecdg +=_efcc .RowStride ;};};if _cbec {for _cdde =0;_cdde < _aaad ;_cdde ++{_efcc .Data [_afcf ]=_cdbf (_efcc .Data [_afcf ],0xff,_caddf );_afcf +=_efcc .RowStride ;};};case PixNotDst :for _cdde =0;_cdde < _aaad ;_cdde ++{_efcc .Data [_degef ]=_cdbf (_efcc .Data [_degef ],^_efcc .Data [_degef ],_cfbd );
_degef +=_efcc .RowStride ;};if _aafg {for _cdde =0;_cdde < _aaad ;_cdde ++{for _ddfd =0;_ddfd < _gecg ;_ddfd ++{_efcc .Data [_fecdg +_ddfd ]=^(_efcc .Data [_fecdg +_ddfd ]);};_fecdg +=_efcc .RowStride ;};};if _cbec {for _cdde =0;_cdde < _aaad ;_cdde ++{_efcc .Data [_afcf ]=_cdbf (_efcc .Data [_afcf ],^_efcc .Data [_afcf ],_caddf );
_afcf +=_efcc .RowStride ;};};};};func (_dddb *Bitmap )removeBorderGeneral (_cce ,_ffa ,_fab ,_gbab int )(*Bitmap ,error ){const _cdcf ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _cce < 0||_ffa < 0||_fab < 0||_gbab < 0{return nil ,_c .Error (_cdcf ,"\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");
};_agf ,_fda :=_dddb .Width ,_dddb .Height ;_ggaa :=_agf -_cce -_ffa ;_dcf :=_fda -_fab -_gbab ;if _ggaa <=0{return nil ,_c .Errorf (_cdcf ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_ggaa );
};if _dcf <=0{return nil ,_c .Errorf (_cdcf ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_dcf );};_gcdf :=New (_ggaa ,_dcf );_gcdf .Color =_dddb .Color ;_eegd :=_gcdf .RasterOperation (0,0,_ggaa ,_dcf ,PixSrc ,_dddb ,_cce ,_fab );
if _eegd !=nil {return nil ,_c .Wrap (_eegd ,_cdcf ,"");};return _gcdf ,nil ;};func (_gefea *byHeight )Len ()int {return len (_gefea .Values )};func _fcfda (_dcdde *Bitmap ,_babg *Bitmap ,_fecf int )(_dbbdc error ){const _gcca ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";
_ccgbg :=_dgbe (_dcdde .Height ,_babg .Height );_dagge :=_dgbe (_dcdde .RowStride ,_babg .RowStride );switch _fecf {case 4:_dbbdc =_ebdd (_dcdde ,_babg ,_ccgbg ,_dagge );case 8:_dbbdc =_bfdc (_dcdde ,_babg ,_ccgbg ,_dagge );default:return _c .Errorf (_gcca ,"\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",_fecf );
};if _dbbdc !=nil {return _c .Wrap (_dbbdc ,_gcca ,"");};return nil ;};func (_dab *Bitmap )setEightFullBytes (_bdgg int ,_fddc uint64 )error {if _bdgg +7> len (_dab .Data )-1{return _c .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");
};_dab .Data [_bdgg ]=byte ((_fddc &0xff00000000000000)>>56);_dab .Data [_bdgg +1]=byte ((_fddc &0xff000000000000)>>48);_dab .Data [_bdgg +2]=byte ((_fddc &0xff0000000000)>>40);_dab .Data [_bdgg +3]=byte ((_fddc &0xff00000000)>>32);_dab .Data [_bdgg +4]=byte ((_fddc &0xff000000)>>24);
_dab .Data [_bdgg +5]=byte ((_fddc &0xff0000)>>16);_dab .Data [_bdgg +6]=byte ((_fddc &0xff00)>>8);_dab .Data [_bdgg +7]=byte (_fddc &0xff);return nil ;};var (_deedf =_dg ();_fged =_ffea ();_ccfg =_abg (););func _dgbe (_accf ,_fdg int )int {if _accf < _fdg {return _accf ;
};return _fdg ;};func (_dfgcg *Bitmap )SetPixel (x ,y int ,pixel byte )error {_ded :=_dfgcg .GetByteIndex (x ,y );if _ded > len (_dfgcg .Data )-1{return _c .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",_ded );
};_fgf :=_dfgcg .GetBitOffset (x );_aaf :=uint (7-_fgf );_gbae :=_dfgcg .Data [_ded ];var _ccce byte ;if pixel ==1{_ccce =_gbae |(pixel &0x01<<_aaf );}else {_ccce =_gbae &^(1<<_aaf );};_dfgcg .Data [_ded ]=_ccce ;return nil ;};type SelectionValue int ;
func _eggg (_ddde *Bitmap ,_cdea *_bf .Stack ,_geef ,_gegb ,_ccggb int )(_gbfg *_fc .Rectangle ,_ggda error ){const _gdfb ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _ddde ==nil {return nil ,_c .Error (_gdfb ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
};if _cdea ==nil {return nil ,_c .Error (_gdfb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};switch _ccggb {case 4:if _gbfg ,_ggda =_dfda (_ddde ,_cdea ,_geef ,_gegb );_ggda !=nil {return nil ,_c .Wrap (_ggda ,_gdfb ,"");
};return _gbfg ,nil ;case 8:if _gbfg ,_ggda =_eceg (_ddde ,_cdea ,_geef ,_gegb );_ggda !=nil {return nil ,_c .Wrap (_ggda ,_gdfb ,"");};return _gbfg ,nil ;default:return nil ,_c .Errorf (_gdfb ,"\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",_ccggb );
};};func (_fafd *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _dgdf ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _fafd ==nil {return nil ,_c .Error (_dgdf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
};if i > len (_fafd .Values )-1{return nil ,_c .Errorf (_dgdf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _fafd .Values [i ],nil ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_fbbbc float64 ,_fgdfc error ){const _dgeg ="\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 _fbbbc ,_c .Error (_dgeg ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _fbbbc ,_c .Error (_dgeg ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if area1 ==0||area2 ==0{return _fbbbc ,_c .Error (_dgeg ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_fgge ,_edfe :=bm1 .Width ,bm1 .Height ;_cea ,_fcbc :=bm2 .Width ,bm2 .Height ;
if _gegd (_fgge -_cea )> maxDiffW {return 0,nil ;};if _gegd (_edfe -_fcbc )> maxDiffH {return 0,nil ;};var _fcce ,_aadc int ;if delX >=0{_fcce =int (delX +0.5);}else {_fcce =int (delX -0.5);};if delY >=0{_aadc =int (delY +0.5);}else {_aadc =int (delY -0.5);
};_deggb :=bm1 .createTemplate ();if _fgdfc =_deggb .RasterOperation (_fcce ,_aadc ,_cea ,_fcbc ,PixSrc ,bm2 ,0,0);_fgdfc !=nil {return _fbbbc ,_c .Wrap (_fgdfc ,_dgeg ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");
};if _fgdfc =_deggb .RasterOperation (0,0,_fgge ,_edfe ,PixSrcAndDst ,bm1 ,0,0);_fgdfc !=nil {return _fbbbc ,_c .Wrap (_fgdfc ,_dgeg ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_ebfag :=_deggb .countPixels ();_fbbbc =float64 (_ebfag )*float64 (_ebfag )/(float64 (area1 )*float64 (area2 ));
return _fbbbc ,nil ;};func TstAddSymbol (t *_ag .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_dcfda :=_fc .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_dcfda );*x +=sym .Width +space ;};func (_cbgec *byWidth )Swap (i ,j int ){_cbgec .Values [i ],_cbgec .Values [j ]=_cbgec .Values [j ],_cbgec .Values [i ];
if _cbgec .Boxes !=nil {_cbgec .Boxes [i ],_cbgec .Boxes [j ]=_cbgec .Boxes [j ],_cbgec .Boxes [i ];};};func (_abfdgf *Selection )findMaxTranslations ()(_eebaa ,_bbafd ,_aaacc ,_cbde int ){for _fgbe :=0;_fgbe < _abfdgf .Height ;_fgbe ++{for _baeb :=0;_baeb < _abfdgf .Width ;
_baeb ++{if _abfdgf .Data [_fgbe ][_baeb ]==SelHit {_eebaa =_bbff (_eebaa ,_abfdgf .Cx -_baeb );_bbafd =_bbff (_bbafd ,_abfdgf .Cy -_fgbe );_aaacc =_bbff (_aaacc ,_baeb -_abfdgf .Cx );_cbde =_bbff (_cbde ,_fgbe -_abfdgf .Cy );};};};return _eebaa ,_bbafd ,_aaacc ,_cbde ;
};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _dedb (d ,s ,hSize ,vSize )};func (_dcb *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_fecg *Boxes ,_cegf error ){const _ccb ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";
if _dcb ==nil {return nil ,_c .Error (_ccb ,"\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 ,_c .Error (_ccb ,"\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 _fecg ,_cegf =_dcb .connComponentsBB (connectivity );_cegf !=nil {return nil ,_c .Wrap (_cegf ,_ccb ,"");};}else {if _fecg ,_cegf =_dcb .connComponentsBitmapsBB (bms ,connectivity );_cegf !=nil {return nil ,_c .Wrap (_cegf ,_ccb ,"");
};};return _fecg ,nil ;};func (_adc *Bitmap )GetByte (index int )(byte ,error ){if index > len (_adc .Data )-1||index < 0{return 0,_c .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 _adc .Data [index ],nil ;};var (_bcgeb =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_bfecc =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func _bc (_ab ,_cba *Bitmap )(_ge error ){const _fe ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";
_ecc :=_cba .RowStride ;_deg :=_ab .RowStride ;_ffe :=_cba .RowStride *4-_ab .RowStride ;var (_ggb ,_fg byte ;_af uint32 ;_ba ,_cf ,_bd ,_ffd ,_degc ,_df ,_ea int ;);for _bd =0;_bd < _cba .Height ;_bd ++{_ba =_bd *_ecc ;_cf =4*_bd *_deg ;for _ffd =0;_ffd < _ecc ;
_ffd ++{_ggb =_cba .Data [_ba +_ffd ];_af =_fged [_ggb ];_df =_cf +_ffd *4;if _ffe !=0&&(_ffd +1)*4> _ab .RowStride {for _degc =_ffe ;_degc > 0;_degc --{_fg =byte ((_af >>uint (_degc *8))&0xff);_ea =_df +(_ffe -_degc );if _ge =_ab .SetByte (_ea ,_fg );
_ge !=nil {return _c .Wrapf (_ge ,_fe ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_degc );};};}else if _ge =_ab .setFourBytes (_df ,_af );_ge !=nil {return _c .Wrap (_ge ,_fe ,"");
};if _ge =_ab .setFourBytes (_cf +_ffd *4,_fged [_cba .Data [_ba +_ffd ]]);_ge !=nil {return _c .Wrap (_ge ,_fe ,"");};};for _degc =1;_degc < 4;_degc ++{for _ffd =0;_ffd < _deg ;_ffd ++{if _ge =_ab .SetByte (_cf +_degc *_deg +_ffd ,_ab .Data [_cf +_ffd ]);
_ge !=nil {return _c .Wrapf (_ge ,_fe ,"\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",_degc ,_ffd );
};};};};return nil ;};var (_bgca *Bitmap ;_dgff *Bitmap ;);const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func (_fegce *Boxes )Get (i int )(*_fc .Rectangle ,error ){const _fccg ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";
if _fegce ==nil {return nil ,_c .Error (_fccg ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if i > len (*_fegce )-1{return nil ,_c .Errorf (_fccg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return (*_fegce )[i ],nil ;};func _dbaaa (_ddda ,_gefb *Bitmap ,_ffba ,_afa int )(*Bitmap ,error ){const _becg ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _gefb ==nil {return nil ,_c .Error (_becg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _ffba < 1||_afa < 1{return nil ,_c .Error (_becg ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _ffba ==1&&_afa ==1{return _gefb .Copy (),nil ;};if _ffba ==1||_afa ==1{_bcbbg :=SelCreateBrick (_afa ,_ffba ,_afa /2,_ffba /2,SelHit );
var _caced error ;_ddda ,_caced =_dfbc (_ddda ,_gefb ,_bcbbg );if _caced !=nil {return nil ,_c .Wrap (_caced ,_becg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _ddda ,nil ;};_fdb :=SelCreateBrick (1,_ffba ,0,_ffba /2,SelHit );_abbc :=SelCreateBrick (_afa ,1,_afa /2,0,SelHit );_dfde ,_decac :=_dbad (nil ,_gefb ,_fdb );if _decac !=nil {return nil ,_c .Wrap (_decac ,_becg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _ddda ,_decac =_dbad (_ddda ,_dfde ,_abbc );_decac !=nil {return nil ,_c .Wrap (_decac ,_becg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_decac =_ebffd (_dfde ,_ddda ,_fdb );_decac !=nil {return nil ,_c .Wrap (_decac ,_becg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};if _ ,_decac =_ebffd (_ddda ,_dfde ,_abbc );_decac !=nil {return nil ,_c .Wrap (_decac ,_becg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _ddda ,nil ;};func (_bcea *ClassedPoints )Len ()int {return _bcea .IntSlice .Size ()};func (_bcgf *ClassedPoints )XAtIndex (i int )float32 {return (*_bcgf .Points )[_bcgf .IntSlice [i ]].X };
func _fac (_dbd ,_gaed ,_bbe *Bitmap )(*Bitmap ,error ){const _dcd ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _gaed ==nil {return nil ,_c .Error (_dcd ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _bbe ==nil {return nil ,_c .Error (_dcd ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
};if _dbd ==_bbe {return nil ,_c .Error (_dcd ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_gaed .SizesEqual (_bbe ){_g .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",_dcd );
};var _dfb error ;if _dbd ,_dfb =_fce (_dbd ,_gaed );_dfb !=nil {return nil ,_c .Wrap (_dfb ,_dcd ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _dfb =_dbd .RasterOperation (0,0,_dbd .Width ,_dbd .Height ,PixSrcXorDst ,_bbe ,0,0);
_dfb !=nil {return nil ,_c .Wrap (_dfb ,_dcd ,"");};return _dbd ,nil ;};func TstISymbol (t *_ag .T ,scale ...int )*Bitmap {_bbac ,_bcdff :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_b .NoError (t ,_bcdff );return TstGetScaledSymbol (t ,_bbac ,scale ...);
};func _adda (_gcfd ,_eegde int ,_feae string )*Selection {_efbda :=&Selection {Height :_gcfd ,Width :_eegde ,Name :_feae };_efbda .Data =make ([][]SelectionValue ,_gcfd );for _efcd :=0;_efcd < _gcfd ;_efcd ++{_efbda .Data [_efcd ]=make ([]SelectionValue ,_eegde );
};return _efbda ;};func (_gaa *Bitmap )InverseData (){_gaa .inverseData ()};func (_bdcf *Bitmap )SetPadBits (value int ){_bdcf .setPadBits (value )};func (_fgac *Bitmaps )WidthSorter ()func (_fedg ,_fbce int )bool {return func (_agfg ,_febc int )bool {return _fgac .Values [_agfg ].Width < _fgac .Values [_febc ].Width };
};func _fce (_gbgb ,_ddebf *Bitmap )(*Bitmap ,error ){if _ddebf ==nil {return nil ,_c .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 _ddebf ==_gbgb {return _gbgb ,nil ;
};if _gbgb ==nil {_gbgb =_ddebf .createTemplate ();copy (_gbgb .Data ,_ddebf .Data );return _gbgb ,nil ;};_eabe :=_gbgb .resizeImageData (_ddebf );if _eabe !=nil {return nil ,_c .Wrap (_eabe ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
};_gbgb .Text =_ddebf .Text ;copy (_gbgb .Data ,_ddebf .Data );return _gbgb ,nil ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_ebbd float64 ,_cefe error ){const _dfe ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";
if bm1 ==nil ||bm2 ==nil {return 0,_c .Error (_dfe ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_c .Error (_dfe ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
};if area1 <=0||area2 <=0{return 0,_c .Error (_dfe ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_abgf ,_egef :=bm1 .Width ,bm1 .Height ;_ddfe ,_dcgb :=bm2 .Width ,bm2 .Height ;
_gbcgg :=_gegd (_abgf -_ddfe );if _gbcgg > maxDiffW {return 0,nil ;};_fcag :=_gegd (_egef -_dcgb );if _fcag > maxDiffH {return 0,nil ;};var _bfbg ,_cafda int ;if delX >=0{_bfbg =int (delX +0.5);}else {_bfbg =int (delX -0.5);};if delY >=0{_cafda =int (delY +0.5);
}else {_cafda =int (delY -0.5);};_gabd :=_bbff (_cafda ,0);_abde :=_dgbe (_dcgb +_cafda ,_egef );_feag :=bm1 .RowStride *_gabd ;_fege :=bm2 .RowStride *(_gabd -_cafda );_eefg :=_bbff (_bfbg ,0);_gbd :=_dgbe (_ddfe +_bfbg ,_abgf );_ddb :=bm2 .RowStride ;
var _fgdf ,_fcga int ;if _bfbg >=8{_fgdf =_bfbg >>3;_feag +=_fgdf ;_eefg -=_fgdf <<3;_gbd -=_fgdf <<3;_bfbg &=7;}else if _bfbg <=-8{_fcga =-((_bfbg +7)>>3);_fege +=_fcga ;_ddb -=_fcga ;_bfbg +=_fcga <<3;};if _eefg >=_gbd ||_gabd >=_abde {return 0,nil ;
};_fceg :=(_gbd +7)>>3;var (_eeaa ,_cdg ,_gdgc byte ;_dcff ,_cbdg ,_bdga int ;);switch {case _bfbg ==0:for _bdga =_gabd ;_bdga < _abde ;_bdga ,_feag ,_fege =_bdga +1,_feag +bm1 .RowStride ,_fege +bm2 .RowStride {for _cbdg =0;_cbdg < _fceg ;_cbdg ++{_gdgc =bm1 .Data [_feag +_cbdg ]&bm2 .Data [_fege +_cbdg ];
_dcff +=tab [_gdgc ];};};case _bfbg > 0:if _ddb < _fceg {for _bdga =_gabd ;_bdga < _abde ;_bdga ,_feag ,_fege =_bdga +1,_feag +bm1 .RowStride ,_fege +bm2 .RowStride {_eeaa ,_cdg =bm1 .Data [_feag ],bm2 .Data [_fege ]>>uint (_bfbg );_gdgc =_eeaa &_cdg ;
_dcff +=tab [_gdgc ];for _cbdg =1;_cbdg < _ddb ;_cbdg ++{_eeaa ,_cdg =bm1 .Data [_feag +_cbdg ],(bm2 .Data [_fege +_cbdg ]>>uint (_bfbg ))|(bm2 .Data [_fege +_cbdg -1]<<uint (8-_bfbg ));_gdgc =_eeaa &_cdg ;_dcff +=tab [_gdgc ];};_eeaa =bm1 .Data [_feag +_cbdg ];
_cdg =bm2 .Data [_fege +_cbdg -1]<<uint (8-_bfbg );_gdgc =_eeaa &_cdg ;_dcff +=tab [_gdgc ];};}else {for _bdga =_gabd ;_bdga < _abde ;_bdga ,_feag ,_fege =_bdga +1,_feag +bm1 .RowStride ,_fege +bm2 .RowStride {_eeaa ,_cdg =bm1 .Data [_feag ],bm2 .Data [_fege ]>>uint (_bfbg );
_gdgc =_eeaa &_cdg ;_dcff +=tab [_gdgc ];for _cbdg =1;_cbdg < _fceg ;_cbdg ++{_eeaa =bm1 .Data [_feag +_cbdg ];_cdg =(bm2 .Data [_fege +_cbdg ]>>uint (_bfbg ))|(bm2 .Data [_fege +_cbdg -1]<<uint (8-_bfbg ));_gdgc =_eeaa &_cdg ;_dcff +=tab [_gdgc ];};};
};default:if _fceg < _ddb {for _bdga =_gabd ;_bdga < _abde ;_bdga ,_feag ,_fege =_bdga +1,_feag +bm1 .RowStride ,_fege +bm2 .RowStride {for _cbdg =0;_cbdg < _fceg ;_cbdg ++{_eeaa =bm1 .Data [_feag +_cbdg ];_cdg =bm2 .Data [_fege +_cbdg ]<<uint (-_bfbg );
_cdg |=bm2 .Data [_fege +_cbdg +1]>>uint (8+_bfbg );_gdgc =_eeaa &_cdg ;_dcff +=tab [_gdgc ];};};}else {for _bdga =_gabd ;_bdga < _abde ;_bdga ,_feag ,_fege =_bdga +1,_feag +bm1 .RowStride ,_fege +bm2 .RowStride {for _cbdg =0;_cbdg < _fceg -1;_cbdg ++{_eeaa =bm1 .Data [_feag +_cbdg ];
_cdg =bm2 .Data [_fege +_cbdg ]<<uint (-_bfbg );_cdg |=bm2 .Data [_fege +_cbdg +1]>>uint (8+_bfbg );_gdgc =_eeaa &_cdg ;_dcff +=tab [_gdgc ];};_eeaa =bm1 .Data [_feag +_cbdg ];_cdg =bm2 .Data [_fege +_cbdg ]<<uint (-_bfbg );_gdgc =_eeaa &_cdg ;_dcff +=tab [_gdgc ];
};};};_ebbd =float64 (_dcff )*float64 (_dcff )/(float64 (area1 )*float64 (area2 ));return _ebbd ,nil ;};func _gbfb ()[]int {_ccefa :=make ([]int ,256);_ccefa [0]=0;_ccefa [1]=7;var _dgae int ;for _dgae =2;_dgae < 4;_dgae ++{_ccefa [_dgae ]=_ccefa [_dgae -2]+6;
};for _dgae =4;_dgae < 8;_dgae ++{_ccefa [_dgae ]=_ccefa [_dgae -4]+5;};for _dgae =8;_dgae < 16;_dgae ++{_ccefa [_dgae ]=_ccefa [_dgae -8]+4;};for _dgae =16;_dgae < 32;_dgae ++{_ccefa [_dgae ]=_ccefa [_dgae -16]+3;};for _dgae =32;_dgae < 64;_dgae ++{_ccefa [_dgae ]=_ccefa [_dgae -32]+2;
};for _dgae =64;_dgae < 128;_dgae ++{_ccefa [_dgae ]=_ccefa [_dgae -64]+1;};for _dgae =128;_dgae < 256;_dgae ++{_ccefa [_dgae ]=_ccefa [_dgae -128];};return _ccefa ;};func (_daeg *Bitmap )thresholdPixelSum (_acf int )bool {var (_eedf int ;_fafc uint8 ;
_affdb byte ;_deab int ;);_fbgc :=_daeg .RowStride ;_egda :=uint (_daeg .Width &0x07);if _egda !=0{_fafc =uint8 ((0xff<<(8-_egda ))&0xff);_fbgc --;};for _agde :=0;_agde < _daeg .Height ;_agde ++{for _deab =0;_deab < _fbgc ;_deab ++{_affdb =_daeg .Data [_agde *_daeg .RowStride +_deab ];
_eedf +=int (_dfd [_affdb ]);};if _egda !=0{_affdb =_daeg .Data [_agde *_daeg .RowStride +_deab ]&_fafc ;_eedf +=int (_dfd [_affdb ]);};if _eedf > _acf {return true ;};};return false ;};func (_gfbe *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_bdbb *Bitmaps ,_ebeb error ){const _beegb ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";
if _gfbe ==nil {return nil ,_c .Error (_beegb ,"\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 ,_c .Errorf (_beegb ,"\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 ,_c .Errorf (_beegb ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
};_ffbeg ,_ebeb :=_gfbe .makeSizeIndicator (width ,height ,tp ,relation );if _ebeb !=nil {return nil ,_c .Wrap (_ebeb ,_beegb ,"");};_bdbb ,_ebeb =_gfbe .selectByIndicator (_ffbeg );if _ebeb !=nil {return nil ,_c .Wrap (_ebeb ,_beegb ,"");};return _bdbb ,nil ;
};func (_dfea Points )YSorter ()func (_daeba ,_fdbfc int )bool {return func (_effe ,_bdggfa int )bool {return _dfea [_effe ].Y < _dfea [_bdggfa ].Y };};func (_decf *byWidth )Less (i ,j int )bool {return _decf .Values [i ].Width < _decf .Values [j ].Width };
func (_fgdc *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_eafc *Bitmaps ,_degg *Boxes ,_cafg error ){const _cffd ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";if _fgdc ==nil {return nil ,nil ,_c .Error (_cffd ,"\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 ,_c .Error (_cffd ,"\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 _fgdc .Zero (){_degg =&Boxes {};_eafc =&Bitmaps {};return _eafc ,_degg ,nil ;};switch components {case ComponentConn :_eafc =&Bitmaps {};if _degg ,_cafg =_fgdc .ConnComponents (_eafc ,8);_cafg !=nil {return nil ,nil ,_c .Wrap (_cafg ,_cffd ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};case ComponentCharacters :_bgef ,_cdaea :=MorphSequence (_fgdc ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _cdaea !=nil {return nil ,nil ,_c .Wrap (_cdaea ,_cffd ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _g .Log .IsLogLevel (_g .LogLevelTrace ){_g .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",_bgef .String ());
};_efg :=&Bitmaps {};_degg ,_cdaea =_bgef .ConnComponents (_efg ,8);if _cdaea !=nil {return nil ,nil ,_c .Wrap (_cdaea ,_cffd ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _g .Log .IsLogLevel (_g .LogLevelTrace ){_g .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",_efg .String ());
};if _eafc ,_cdaea =_efg .ClipToBitmap (_fgdc );_cdaea !=nil {return nil ,nil ,_c .Wrap (_cdaea ,_cffd ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_dadc :=1;
var _gfaa *Bitmap ;switch {case _fgdc .XResolution <=200:_gfaa =_fgdc ;case _fgdc .XResolution <=400:_dadc =2;_gfaa ,_cafg =_eg (_fgdc ,1,0,0,0);if _cafg !=nil {return nil ,nil ,_c .Wrap (_cafg ,_cffd ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
};default:_dadc =4;_gfaa ,_cafg =_eg (_fgdc ,1,1,0,0);if _cafg !=nil {return nil ,nil ,_c .Wrap (_cafg ,_cffd ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
};};_afge ,_ ,_bdgc :=_ebfa (_gfaa );if _bdgc !=nil {return nil ,nil ,_c .Wrap (_bdgc ,_cffd ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_aeaa ,_bdgc :=_gfg (_afge ,_dadc );if _bdgc !=nil {return nil ,nil ,_c .Wrap (_bdgc ,_cffd ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
};_affee :=&Bitmaps {};if _degg ,_bdgc =_aeaa .ConnComponents (_affee ,4);_bdgc !=nil {return nil ,nil ,_c .Wrap (_bdgc ,_cffd ,"\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 _eafc ,_bdgc =_affee .ClipToBitmap (_fgdc );_bdgc !=nil {return nil ,nil ,_c .Wrap (_bdgc ,_cffd ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_eafc ,_cafg =_eafc .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
if _cafg !=nil {return nil ,nil ,_c .Wrap (_cafg ,_cffd ,"");};_degg ,_cafg =_degg .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _cafg !=nil {return nil ,nil ,_c .Wrap (_cafg ,_cffd ,"");};return _eafc ,_degg ,nil ;};func (_gcfb *ClassedPoints )Swap (i ,j int ){_gcfb .IntSlice [i ],_gcfb .IntSlice [j ]=_gcfb .IntSlice [j ],_gcfb .IntSlice [i ];
};func (_afcd *Bitmap )resizeImageData (_gda *Bitmap )error {if _gda ==nil {return _c .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 _afcd .SizesEqual (_gda ){return nil ;};_afcd .Data =make ([]byte ,len (_gda .Data ));_afcd .Width =_gda .Width ;_afcd .Height =_gda .Height ;_afcd .RowStride =_gda .RowStride ;return nil ;};type MorphOperation int ;func _dfbc (_gege ,_egee *Bitmap ,_ffac *Selection )(*Bitmap ,error ){const _abga ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";
var _fgfaa error ;if _gege ,_fgfaa =_gcf (_gege ,_egee ,_ffac );_fgfaa !=nil {return nil ,_fgfaa ;};_dbgg ,_fgfaa :=_dbad (nil ,_egee ,_ffac );if _fgfaa !=nil {return nil ,_c .Wrap (_fgfaa ,_abga ,"");};if _ ,_fgfaa =_ebffd (_gege ,_dbgg ,_ffac );_fgfaa !=nil {return nil ,_c .Wrap (_fgfaa ,_abga ,"");
};return _gege ,nil ;};func (_eabae *Bitmap )nextOnPixel (_dafa ,_fgd int )(_ebd _fc .Point ,_cfc bool ,_bbgaa error ){const _fcaf ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_ebd ,_cfc ,_bbgaa =_eabae .nextOnPixelLow (_eabae .Width ,_eabae .Height ,_eabae .RowStride ,_dafa ,_fgd );
if _bbgaa !=nil {return _ebd ,false ,_c .Wrap (_bbgaa ,_fcaf ,"");};return _ebd ,_cfc ,nil ;};type Component int ;type BoundaryCondition int ;func (_baaf *Bitmap )setPadBits (_dbaa int ){_bfba :=8-_baaf .Width %8;if _bfba ==8{return ;};_gagdc :=_baaf .Width /8;
_eaeg :=_bfecc [_bfba ];if _dbaa ==0{_eaeg ^=_eaeg ;};var _fbdc int ;for _cdb :=0;_cdb < _baaf .Height ;_cdb ++{_fbdc =_cdb *_baaf .RowStride +_gagdc ;if _dbaa ==0{_baaf .Data [_fbdc ]&=_eaeg ;}else {_baaf .Data [_fbdc ]|=_eaeg ;};};};func _cdaf ()[]int {_dfga :=make ([]int ,256);
for _ebaa :=0;_ebaa <=0xff;_ebaa ++{_eabf :=byte (_ebaa );_dfga [_eabf ]=int (_eabf &0x1)+(int (_eabf >>1)&0x1)+(int (_eabf >>2)&0x1)+(int (_eabf >>3)&0x1)+(int (_eabf >>4)&0x1)+(int (_eabf >>5)&0x1)+(int (_eabf >>6)&0x1)+(int (_eabf >>7)&0x1);};return _dfga ;
};func (_ebbba *Boxes )makeSizeIndicator (_ecfb ,_ebag int ,_agce LocationFilter ,_beb SizeComparison )*_bf .NumSlice {_gdc :=&_bf .NumSlice {};var _febe ,_egce ,_adb int ;for _ ,_bega :=range *_ebbba {_febe =0;_egce ,_adb =_bega .Dx (),_bega .Dy ();switch _agce {case LocSelectWidth :if (_beb ==SizeSelectIfLT &&_egce < _ecfb )||(_beb ==SizeSelectIfGT &&_egce > _ecfb )||(_beb ==SizeSelectIfLTE &&_egce <=_ecfb )||(_beb ==SizeSelectIfGTE &&_egce >=_ecfb ){_febe =1;
};case LocSelectHeight :if (_beb ==SizeSelectIfLT &&_adb < _ebag )||(_beb ==SizeSelectIfGT &&_adb > _ebag )||(_beb ==SizeSelectIfLTE &&_adb <=_ebag )||(_beb ==SizeSelectIfGTE &&_adb >=_ebag ){_febe =1;};case LocSelectIfEither :if (_beb ==SizeSelectIfLT &&(_adb < _ebag ||_egce < _ecfb ))||(_beb ==SizeSelectIfGT &&(_adb > _ebag ||_egce > _ecfb ))||(_beb ==SizeSelectIfLTE &&(_adb <=_ebag ||_egce <=_ecfb ))||(_beb ==SizeSelectIfGTE &&(_adb >=_ebag ||_egce >=_ecfb )){_febe =1;
};case LocSelectIfBoth :if (_beb ==SizeSelectIfLT &&(_adb < _ebag &&_egce < _ecfb ))||(_beb ==SizeSelectIfGT &&(_adb > _ebag &&_egce > _ecfb ))||(_beb ==SizeSelectIfLTE &&(_adb <=_ebag &&_egce <=_ecfb ))||(_beb ==SizeSelectIfGTE &&(_adb >=_ebag &&_egce >=_ecfb )){_febe =1;
};};_gdc .AddInt (_febe );};return _gdc ;};func (_dbfg *Bitmaps )selectByIndexes (_bdef []int )(*Bitmaps ,error ){_cbdf :=&Bitmaps {};for _ ,_dgea :=range _bdef {_bbcf ,_efcdf :=_dbfg .GetBitmap (_dgea );if _efcdf !=nil {return nil ,_c .Wrap (_efcdf ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");
};_cbdf .AddBitmap (_bbcf );};return _cbdf ,nil ;};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _ecce ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_ffec :=_gdf (width ,height );
_ffec .Data =data ;if _fbb :=((width *height )+7)>>3;len (data )< _fbb {return nil ,_c .Errorf (_ecce ,"\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 ),_fbb );
};if _agcg :=_ffec .addPadBits ();_agcg !=nil {return nil ,_c .Wrap (_agcg ,_ecce ,"");};return _ffec ,nil ;};func _eceg (_gcgf *Bitmap ,_aecf *_bf .Stack ,_ggedg ,_bgcc int )(_bgea *_fc .Rectangle ,_fbba error ){const _cdbff ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _gcgf ==nil {return nil ,_c .Error (_cdbff ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _aecf ==nil {return nil ,_c .Error (_cdbff ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};_baee ,_faae :=_gcgf .Width ,_gcgf .Height ;_fabf :=_baee -1;_dffb :=_faae -1;if _ggedg < 0||_ggedg > _fabf ||_bgcc < 0||_bgcc > _dffb ||!_gcgf .GetPixel (_ggedg ,_bgcc ){return nil ,nil ;};_dabfa :=_fc .Rect (100000,100000,0,0);if _fbba =_cgge (_aecf ,_ggedg ,_ggedg ,_bgcc ,1,_dffb ,&_dabfa );
_fbba !=nil {return nil ,_c .Wrap (_fbba ,_cdbff ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _fbba =_cgge (_aecf ,_ggedg ,_ggedg ,_bgcc +1,-1,_dffb ,&_dabfa );_fbba !=nil {return nil ,_c .Wrap (_fbba ,_cdbff ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
};_dabfa .Min .X ,_dabfa .Max .X =_ggedg ,_ggedg ;_dabfa .Min .Y ,_dabfa .Max .Y =_bgcc ,_bgcc ;var (_dgggf *fillSegment ;_cacc int ;);for _aecf .Len ()> 0{if _dgggf ,_fbba =_efaba (_aecf );_fbba !=nil {return nil ,_c .Wrap (_fbba ,_cdbff ,"");};_bgcc =_dgggf ._eagdg ;
for _ggedg =_dgggf ._ggbba -1;_ggedg >=0&&_gcgf .GetPixel (_ggedg ,_bgcc );_ggedg --{if _fbba =_gcgf .SetPixel (_ggedg ,_bgcc ,0);_fbba !=nil {return nil ,_c .Wrap (_fbba ,_cdbff ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _ggedg >=_dgggf ._ggbba -1{for {for _ggedg ++;
_ggedg <=_dgggf ._acfe +1&&_ggedg <=_fabf &&!_gcgf .GetPixel (_ggedg ,_bgcc );_ggedg ++{};_cacc =_ggedg ;if !(_ggedg <=_dgggf ._acfe +1&&_ggedg <=_fabf ){break ;};for ;_ggedg <=_fabf &&_gcgf .GetPixel (_ggedg ,_bgcc );_ggedg ++{if _fbba =_gcgf .SetPixel (_ggedg ,_bgcc ,0);
_fbba !=nil {return nil ,_c .Wrap (_fbba ,_cdbff ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _fbba =_cgge (_aecf ,_cacc ,_ggedg -1,_dgggf ._eagdg ,_dgggf ._abfc ,_dffb ,&_dabfa );_fbba !=nil {return nil ,_c .Wrap (_fbba ,_cdbff ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
};if _ggedg > _dgggf ._acfe {if _fbba =_cgge (_aecf ,_dgggf ._acfe +1,_ggedg -1,_dgggf ._eagdg ,-_dgggf ._abfc ,_dffb ,&_dabfa );_fbba !=nil {return nil ,_c .Wrap (_fbba ,_cdbff ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};};continue ;};_cacc =_ggedg +1;if _cacc < _dgggf ._ggbba {if _fbba =_cgge (_aecf ,_cacc ,_dgggf ._ggbba -1,_dgggf ._eagdg ,-_dgggf ._abfc ,_dffb ,&_dabfa );_fbba !=nil {return nil ,_c .Wrap (_fbba ,_cdbff ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_ggedg =_dgggf ._ggbba ;for {for ;_ggedg <=_fabf &&_gcgf .GetPixel (_ggedg ,_bgcc );_ggedg ++{if _fbba =_gcgf .SetPixel (_ggedg ,_bgcc ,0);_fbba !=nil {return nil ,_c .Wrap (_fbba ,_cdbff ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _fbba =_cgge (_aecf ,_cacc ,_ggedg -1,_dgggf ._eagdg ,_dgggf ._abfc ,_dffb ,&_dabfa );
_fbba !=nil {return nil ,_c .Wrap (_fbba ,_cdbff ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ggedg > _dgggf ._acfe {if _fbba =_cgge (_aecf ,_dgggf ._acfe +1,_ggedg -1,_dgggf ._eagdg ,-_dgggf ._abfc ,_dffb ,&_dabfa );_fbba !=nil {return nil ,_c .Wrap (_fbba ,_cdbff ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _ggedg ++;_ggedg <=_dgggf ._acfe +1&&_ggedg <=_fabf &&!_gcgf .GetPixel (_ggedg ,_bgcc );_ggedg ++{};_cacc =_ggedg ;if !(_ggedg <=_dgggf ._acfe +1&&_ggedg <=_fabf ){break ;};};};_dabfa .Max .X ++;_dabfa .Max .Y ++;return &_dabfa ,nil ;};func (_bbgfd *ClassedPoints )xSortFunction ()func (_gdac int ,_egeec int )bool {return func (_bebc ,_acfaa int )bool {return _bbgfd .XAtIndex (_bebc )< _bbgfd .XAtIndex (_acfaa )};
};func TstFrameBitmapData ()[]byte {return _bgca .Data };func TstWriteSymbols (t *_ag .T ,bms *Bitmaps ,src *Bitmap ){for _ceccb :=0;_ceccb < bms .Size ();_ceccb ++{_ccea :=bms .Values [_ceccb ];_bddb :=bms .Boxes [_ceccb ];_ccde :=src .RasterOperation (_bddb .Min .X ,_bddb .Min .Y ,_ccea .Width ,_ccea .Height ,PixSrc ,_ccea ,0,0);
_b .NoError (t ,_ccde );};};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func _dd (_eae *Bitmap ,_aff ,_fef int )(*Bitmap ,error ){const _ef ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";
if _eae ==nil {return nil ,_c .Error (_ef ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _aff <=0||_fef <=0{return nil ,_c .Error (_ef ,"\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 _aff ==_fef {if _aff ==1{_bdb ,_deb :=_fce (nil ,_eae );if _deb !=nil {return nil ,_c .Wrap (_deb ,_ef ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _bdb ,nil ;};if _aff ==2||_aff ==4||_aff ==8{_eb ,_bfg :=_gbb (_eae ,_aff );
if _bfg !=nil {return nil ,_c .Wrap (_bfg ,_ef ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _eb ,nil ;};};_ga :=_aff *_eae .Width ;_eff :=_fef *_eae .Height ;_fag :=New (_ga ,_eff );_baa :=_fag .RowStride ;
var (_fgb ,_db ,_ce ,_edf ,_cde int ;_fb byte ;_bff error ;);for _db =0;_db < _eae .Height ;_db ++{_fgb =_fef *_db *_baa ;for _ce =0;_ce < _eae .Width ;_ce ++{if _dda :=_eae .GetPixel (_ce ,_db );_dda {_cde =_aff *_ce ;for _edf =0;_edf < _aff ;_edf ++{_fag .setBit (_fgb *8+_cde +_edf );
};};};for _edf =1;_edf < _fef ;_edf ++{_fbe :=_fgb +_edf *_baa ;for _ggba :=0;_ggba < _baa ;_ggba ++{if _fb ,_bff =_fag .GetByte (_fgb +_ggba );_bff !=nil {return nil ,_c .Wrapf (_bff ,_ef ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_edf );
};if _bff =_fag .SetByte (_fbe +_ggba ,_fb );_bff !=nil {return nil ,_c .Wrap (_bff ,_ef ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _fag ,nil ;};func _edfc (_acfa ,_dbadb *Bitmap ,_dbbbf ,_adab int )(*Bitmap ,error ){const _dcfd ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";
if _dbadb ==nil {return nil ,_c .Error (_dcfd ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _dbbbf < 1||_adab < 1{return nil ,_c .Error (_dcfd ,"\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 _dbbbf ==1&&_adab ==1{_cffdf ,_cgce :=_fce (_acfa ,_dbadb );if _cgce !=nil {return nil ,_c .Wrap (_cgce ,_dcfd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _cffdf ,nil ;};if _dbbbf ==1||_adab ==1{_dgc :=SelCreateBrick (_adab ,_dbbbf ,_adab /2,_dbbbf /2,SelHit );_bfaeb ,_fffc :=_ebffd (_acfa ,_dbadb ,_dgc );if _fffc !=nil {return nil ,_c .Wrap (_fffc ,_dcfd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _bfaeb ,nil ;};_aebf :=SelCreateBrick (1,_dbbbf ,0,_dbbbf /2,SelHit );_dgag :=SelCreateBrick (_adab ,1,_adab /2,0,SelHit );_ade ,_eeffd :=_ebffd (nil ,_dbadb ,_aebf );if _eeffd !=nil {return nil ,_c .Wrap (_eeffd ,_dcfd ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_acfa ,_eeffd =_ebffd (_acfa ,_ade ,_dgag );if _eeffd !=nil {return nil ,_c .Wrap (_eeffd ,_dcfd ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _acfa ,nil ;};type Point struct{X ,Y float32 ;};func (_faebf Points )XSorter ()func (_deee ,_aecbf int )bool {return func (_dcedf ,_abfde int )bool {return _faebf [_dcedf ].X < _faebf [_abfde ].X };
};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _fgad ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_bef ,_efe :=p1 .Width ,p1 .Height ;_ccgb ,_cacg :=p3 .Width ,p3 .Height ;if _bf .Abs (_bef -_ccgb )> maxDiffW {return false ,nil ;
};if _bf .Abs (_efe -_cacg )> maxDiffH {return false ,nil ;};_gccg :=int (delX +_bf .Sign (delX )*0.5);_gafad :=int (delY +_bf .Sign (delY )*0.5);var _cadd error ;_cafb :=p1 .CreateTemplate ();if _cadd =_cafb .RasterOperation (0,0,_bef ,_efe ,PixSrc ,p1 ,0,0);
_cadd !=nil {return false ,_c .Wrap (_cadd ,_fgad ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _cadd =_cafb .RasterOperation (_gccg ,_gafad ,_bef ,_efe ,PixNotSrcAndDst ,p4 ,0,0);_cadd !=nil {return false ,_c .Wrap (_cadd ,_fgad ,"\u0021p\u0034\u0020\u0026\u0020\u0074");
};if _cafb .Zero (){return false ,nil ;};if _cadd =_cafb .RasterOperation (_gccg ,_gafad ,_ccgb ,_cacg ,PixSrc ,p3 ,0,0);_cadd !=nil {return false ,_c .Wrap (_cadd ,_fgad ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _cadd =_cafb .RasterOperation (0,0,_ccgb ,_cacg ,PixNotSrcAndDst ,p2 ,0,0);
_cadd !=nil {return false ,_c .Wrap (_cadd ,_fgad ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _cafb .Zero (),nil ;};type Boxes []*_fc .Rectangle ;func (_dfeaa *Bitmaps )AddBox (box *_fc .Rectangle ){_dfeaa .Boxes =append (_dfeaa .Boxes ,box )};func (_ebe *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _ebe .addBorderGeneral (left ,right ,top ,bot ,val );
};func (_edbf *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _aggc ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";if len (_edbf .Values )==0{return nil ,_c .Error (_aggc ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
};_ebdg :=&BitmapsArray {};_edbf .SortByWidth ();_fggeb :=-1;_eeae :=-1;for _cgfa :=0;_cgfa < len (_edbf .Values );_cgfa ++{_acgdd :=_edbf .Values [_cgfa ].Width ;if _acgdd > _fggeb {_fggeb =_acgdd ;_eeae ++;_ebdg .Values =append (_ebdg .Values ,&Bitmaps {});
};_ebdg .Values [_eeae ].AddBitmap (_edbf .Values [_cgfa ]);};return _ebdg ,nil ;};type Getter interface{GetBitmap ()*Bitmap ;};func (_egefa *ClassedPoints )SortByX (){_egefa ._aagf =_egefa .xSortFunction ();_f .Sort (_egefa )};func (_cgf *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _cgf .removeBorderGeneral (left ,right ,top ,bot );
};func TstOSymbol (t *_ag .T ,scale ...int )*Bitmap {_efceb ,_abac :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_b .NoError (t ,_abac );return TstGetScaledSymbol (t ,_efceb ,scale ...);};func (_cbgg *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _cgeb ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";
if len (_cbgg .Values )==0{return nil ,_c .Error (_cgeb ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_fecfa :=&BitmapsArray {};_cbgg .SortByHeight ();_gcfg :=-1;_abdgf :=-1;for _cgda :=0;_cgda < len (_cbgg .Values );
_cgda ++{_cdaaf :=_cbgg .Values [_cgda ].Height ;if _cdaaf > _gcfg {_gcfg =_cdaaf ;_abdgf ++;_fecfa .Values =append (_fecfa .Values ,&Bitmaps {});};_fecfa .Values [_abdgf ].AddBitmap (_cbgg .Values [_cgda ]);};return _fecfa ,nil ;};func (_ccef *Bitmap )setEightPartlyBytes (_afb ,_deae int ,_bdg uint64 )(_ebff error ){var (_cccf byte ;
_dcaf int ;);const _bbcg ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _abda :=1;_abda <=_deae ;_abda ++{_dcaf =64-_abda *8;_cccf =byte (_bdg >>uint (_dcaf )&0xff);_g .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",_cccf ,_afb ,_afb +_abda -1,_deae ,_dcaf );
if _ebff =_ccef .SetByte (_afb +_abda -1,_cccf );_ebff !=nil {return _c .Wrap (_ebff ,_bbcg ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_fee :=_ccef .RowStride *8-_ccef .Width ;if _fee ==0{return nil ;};_dcaf -=8;_cccf =byte (_bdg >>uint (_dcaf )&0xff)<<uint (_fee );
if _ebff =_ccef .SetByte (_afb +_deae ,_cccf );_ebff !=nil {return _c .Wrap (_ebff ,_bbcg ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func (_geae *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _bdgf ="\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 >=_geae .IntSlice .Size (){return 0,_c .Errorf (_bdgf ,"\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 (_geae .YAtIndex (i )),nil ;};func (_cbg *Bitmap )Copy ()*Bitmap {_cafd :=make ([]byte ,len (_cbg .Data ));copy (_cafd ,_cbg .Data );return &Bitmap {Width :_cbg .Width ,Height :_cbg .Height ,RowStride :_cbg .RowStride ,Data :_cafd ,Color :_cbg .Color ,Text :_cbg .Text ,BitmapNumber :_cbg .BitmapNumber ,Special :_cbg .Special };
};func (_aaffg *ClassedPoints )validateIntSlice ()error {const _cffea ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";for _ ,_eeaaf :=range _aaffg .IntSlice {if _eeaaf >=(_aaffg .Points .Size ()){return _c .Errorf (_cffea ,"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",_eeaaf ,_aaffg .Points .Size ());
};};return nil ;};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func _ebffd (_bedb ,_bgbg *Bitmap ,_cfae *Selection )(*Bitmap ,error ){const _cgcg ="\u0065\u0072\u006fd\u0065";var (_eeba error ;_dcgg *Bitmap ;
);_bedb ,_eeba =_feff (_bedb ,_bgbg ,_cfae ,&_dcgg );if _eeba !=nil {return nil ,_c .Wrap (_eeba ,_cgcg ,"");};if _eeba =_bedb .setAll ();_eeba !=nil {return nil ,_c .Wrap (_eeba ,_cgcg ,"");};var _eafe SelectionValue ;for _bgdd :=0;_bgdd < _cfae .Height ;
_bgdd ++{for _bbdd :=0;_bbdd < _cfae .Width ;_bbdd ++{_eafe =_cfae .Data [_bgdd ][_bbdd ];if _eafe ==SelHit {_eeba =_aeeg (_bedb ,_cfae .Cx -_bbdd ,_cfae .Cy -_bgdd ,_bgbg .Width ,_bgbg .Height ,PixSrcAndDst ,_dcgg ,0,0);if _eeba !=nil {return nil ,_c .Wrap (_eeba ,_cgcg ,"");
};};};};if MorphBC ==SymmetricMorphBC {return _bedb ,nil ;};_cdbg ,_degb ,_acbeg ,_acbd :=_cfae .findMaxTranslations ();if _cdbg > 0{if _eeba =_bedb .RasterOperation (0,0,_cdbg ,_bgbg .Height ,PixClr ,nil ,0,0);_eeba !=nil {return nil ,_c .Wrap (_eeba ,_cgcg ,"\u0078\u0070\u0020\u003e\u0020\u0030");
};};if _acbeg > 0{if _eeba =_bedb .RasterOperation (_bgbg .Width -_acbeg ,0,_acbeg ,_bgbg .Height ,PixClr ,nil ,0,0);_eeba !=nil {return nil ,_c .Wrap (_eeba ,_cgcg ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _degb > 0{if _eeba =_bedb .RasterOperation (0,0,_bgbg .Width ,_degb ,PixClr ,nil ,0,0);
_eeba !=nil {return nil ,_c .Wrap (_eeba ,_cgcg ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _acbd > 0{if _eeba =_bedb .RasterOperation (0,_bgbg .Height -_acbd ,_bgbg .Width ,_acbd ,PixClr ,nil ,0,0);_eeba !=nil {return nil ,_c .Wrap (_eeba ,_cgcg ,"\u0079\u006e\u0020\u003e\u0020\u0030");
};};return _bedb ,nil ;};func _bfbd (_fgag ,_dceb *Bitmap ,_aag ,_cgad ,_gaaf ,_gcbd ,_afcg ,_gbea ,_bdfd ,_cebfg int ,_bdfb CombinationOperator ,_gaedb int )error {var _febb int ;_gbbb :=func (){_febb ++;_gaaf +=_dceb .RowStride ;_gcbd +=_fgag .RowStride ;
_afcg +=_fgag .RowStride };for _febb =_aag ;_febb < _cgad ;_gbbb (){var _aecb uint16 ;_bgc :=_gaaf ;for _geee :=_gcbd ;_geee <=_afcg ;_geee ++{_gcgb ,_abdf :=_dceb .GetByte (_bgc );if _abdf !=nil {return _abdf ;};_acacb ,_abdf :=_fgag .GetByte (_geee );
if _abdf !=nil {return _abdf ;};_aecb =(_aecb |(uint16 (_acacb )&0xff))<<uint (_cebfg );_acacb =byte (_aecb >>8);if _abdf =_dceb .SetByte (_bgc ,_bdcd (_gcgb ,_acacb ,_bdfb ));_abdf !=nil {return _abdf ;};_bgc ++;_aecb <<=uint (_bdfd );if _geee ==_afcg {_acacb =byte (_aecb >>(8-uint8 (_cebfg )));
if _gaedb !=0{_acacb =_fegc (uint (8+_gbea ),_acacb );};_gcgb ,_abdf =_dceb .GetByte (_bgc );if _abdf !=nil {return _abdf ;};if _abdf =_dceb .SetByte (_bgc ,_bdcd (_gcgb ,_acacb ,_bdfb ));_abdf !=nil {return _abdf ;};};};};return nil ;};func (_gged MorphProcess )verify (_dcgc int ,_aedg ,_bebf *int )error {const _ffcg ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";
switch _gged .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_gged .Arguments )!=2{return _c .Error (_ffcg ,"\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");
};_egaf ,_efd :=_gged .getWidthHeight ();if _egaf <=0||_efd <=0{return _c .Error (_ffcg ,"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 :_acbf :=len (_gged .Arguments );*_aedg +=_acbf ;if _acbf < 1||_acbf > 4{return _c .Error (_ffcg ,"\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 _fabe :=0;_fabe < _acbf ;_fabe ++{if _gged .Arguments [_fabe ]< 1||_gged .Arguments [_fabe ]> 4{return _c .Error (_ffcg ,"\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 (_gged .Arguments )==0{return _c .Error (_ffcg ,"\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");
};_fefb :=_gged .Arguments [0];if _fefb !=2&&_fefb !=4&&_fefb !=8{return _c .Error (_ffcg ,"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");
};*_aedg -=_gaaa [_fefb /4];case MopAddBorder :if len (_gged .Arguments )==0{return _c .Error (_ffcg ,"\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");
};_eacb :=_gged .Arguments [0];if _dcgc > 0{return _c .Error (_ffcg ,"\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 _eacb < 1{return _c .Error (_ffcg ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_bebf =_eacb ;};return nil ;};func _dg ()(_fgc [256]uint16 ){for _afd :=0;
_afd < 256;_afd ++{if _afd &0x01!=0{_fgc [_afd ]|=0x3;};if _afd &0x02!=0{_fgc [_afd ]|=0xc;};if _afd &0x04!=0{_fgc [_afd ]|=0x30;};if _afd &0x08!=0{_fgc [_afd ]|=0xc0;};if _afd &0x10!=0{_fgc [_afd ]|=0x300;};if _afd &0x20!=0{_fgc [_afd ]|=0xc00;};if _afd &0x40!=0{_fgc [_afd ]|=0x3000;
};if _afd &0x80!=0{_fgc [_afd ]|=0xc000;};};return _fgc ;};func _dedb (_cbaaa ,_cfed *Bitmap ,_gfdf ,_ccgf int )(*Bitmap ,error ){const _addc ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _cfed ==nil {_g .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 ,_c .Error (_addc ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _gfdf < 1||_ccgf < 1{return nil ,_c .Error (_addc ,"\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 _gfdf ==1&&_ccgf ==1{_adba ,_deag :=_fce (_cbaaa ,_cfed );if _deag !=nil {return nil ,_c .Wrap (_deag ,_addc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _adba ,nil ;};if _gfdf ==1||_ccgf ==1{_fcgac :=SelCreateBrick (_ccgf ,_gfdf ,_ccgf /2,_gfdf /2,SelHit );_afad ,_bagba :=_dbad (_cbaaa ,_cfed ,_fcgac );if _bagba !=nil {return nil ,_c .Wrap (_bagba ,_addc ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _afad ,nil ;};_dfeg :=SelCreateBrick (1,_gfdf ,0,_gfdf /2,SelHit );_fbec :=SelCreateBrick (_ccgf ,1,_ccgf /2,0,SelHit );_egea ,_fdfd :=_dbad (nil ,_cfed ,_dfeg );if _fdfd !=nil {return nil ,_c .Wrap (_fdfd ,_addc ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_cbaaa ,_fdfd =_dbad (_cbaaa ,_egea ,_fbec );if _fdfd !=nil {return nil ,_c .Wrap (_fdfd ,_addc ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _cbaaa ,nil ;};func _cdbf (_gcdef ,_bfeb ,_dfegb byte )byte {return (_gcdef &^(_dfegb ))|(_bfeb &_dfegb )};
func (_bgee Points )GetGeometry (i int )(_cgfb ,_daeggc float32 ,_fface error ){if i > len (_bgee )-1{return 0,0,_c .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 );
};_dege :=_bgee [i ];return _dege .X ,_dege .Y ,nil ;};func (_dcef *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_ecad *Boxes ,_faa error ){const _cfb ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";
if _dcef ==nil {return nil ,_c .Error (_cfb ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_dcef )==0{return _dcef ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_cfb ,"\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 ,_c .Errorf (_cfb ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
};_dbc :=_dcef .makeSizeIndicator (width ,height ,tp ,relation );_ede ,_faa :=_dcef .selectWithIndicator (_dbc );if _faa !=nil {return nil ,_c .Wrap (_faa ,_cfb ,"");};return _ede ,nil ;};func _feac (_cdab *Bitmap ,_edae ,_gaec ,_dgfc ,_egcd int ,_adbd RasterOperator ,_bfac *Bitmap ,_efec ,_gcde int )error {var (_cbgd bool ;
_cggc bool ;_edde int ;_bbfb int ;_egbf int ;_cfca bool ;_eegae byte ;_ebegg int ;_gbbbf int ;_fced int ;_dcfed ,_cecc int ;);_dabf :=8-(_edae &7);_ggdc :=_bfecc [_dabf ];_egdac :=_cdab .RowStride *_gaec +(_edae >>3);_ccgbe :=_bfac .RowStride *_gcde +(_efec >>3);
if _dgfc < _dabf {_cbgd =true ;_ggdc &=_bcgeb [8-_dabf +_dgfc ];};if !_cbgd {_edde =(_dgfc -_dabf )>>3;if _edde > 0{_cggc =true ;_bbfb =_egdac +1;_egbf =_ccgbe +1;};};_ebegg =(_edae +_dgfc )&7;if !(_cbgd ||_ebegg ==0){_cfca =true ;_eegae =_bcgeb [_ebegg ];
_gbbbf =_egdac +1+_edde ;_fced =_ccgbe +1+_edde ;};switch _adbd {case PixSrc :for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_egdac ]=_cdbf (_cdab .Data [_egdac ],_bfac .Data [_ccgbe ],_ggdc );_egdac +=_cdab .RowStride ;_ccgbe +=_bfac .RowStride ;
};if _cggc {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{for _cecc =0;_cecc < _edde ;_cecc ++{_cdab .Data [_bbfb +_cecc ]=_bfac .Data [_egbf +_cecc ];};_bbfb +=_cdab .RowStride ;_egbf +=_bfac .RowStride ;};};if _cfca {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_gbbbf ]=_cdbf (_cdab .Data [_gbbbf ],_bfac .Data [_fced ],_eegae );
_gbbbf +=_cdab .RowStride ;_fced +=_bfac .RowStride ;};};case PixNotSrc :for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_egdac ]=_cdbf (_cdab .Data [_egdac ],^_bfac .Data [_ccgbe ],_ggdc );_egdac +=_cdab .RowStride ;_ccgbe +=_bfac .RowStride ;};if _cggc {for _dcfed =0;
_dcfed < _egcd ;_dcfed ++{for _cecc =0;_cecc < _edde ;_cecc ++{_cdab .Data [_bbfb +_cecc ]=^_bfac .Data [_egbf +_cecc ];};_bbfb +=_cdab .RowStride ;_egbf +=_bfac .RowStride ;};};if _cfca {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_gbbbf ]=_cdbf (_cdab .Data [_gbbbf ],^_bfac .Data [_fced ],_eegae );
_gbbbf +=_cdab .RowStride ;_fced +=_bfac .RowStride ;};};case PixSrcOrDst :for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_egdac ]=_cdbf (_cdab .Data [_egdac ],_bfac .Data [_ccgbe ]|_cdab .Data [_egdac ],_ggdc );_egdac +=_cdab .RowStride ;_ccgbe +=_bfac .RowStride ;
};if _cggc {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{for _cecc =0;_cecc < _edde ;_cecc ++{_cdab .Data [_bbfb +_cecc ]|=_bfac .Data [_egbf +_cecc ];};_bbfb +=_cdab .RowStride ;_egbf +=_bfac .RowStride ;};};if _cfca {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_gbbbf ]=_cdbf (_cdab .Data [_gbbbf ],_bfac .Data [_fced ]|_cdab .Data [_gbbbf ],_eegae );
_gbbbf +=_cdab .RowStride ;_fced +=_bfac .RowStride ;};};case PixSrcAndDst :for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_egdac ]=_cdbf (_cdab .Data [_egdac ],_bfac .Data [_ccgbe ]&_cdab .Data [_egdac ],_ggdc );_egdac +=_cdab .RowStride ;_ccgbe +=_bfac .RowStride ;
};if _cggc {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{for _cecc =0;_cecc < _edde ;_cecc ++{_cdab .Data [_bbfb +_cecc ]&=_bfac .Data [_egbf +_cecc ];};_bbfb +=_cdab .RowStride ;_egbf +=_bfac .RowStride ;};};if _cfca {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_gbbbf ]=_cdbf (_cdab .Data [_gbbbf ],_bfac .Data [_fced ]&_cdab .Data [_gbbbf ],_eegae );
_gbbbf +=_cdab .RowStride ;_fced +=_bfac .RowStride ;};};case PixSrcXorDst :for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_egdac ]=_cdbf (_cdab .Data [_egdac ],_bfac .Data [_ccgbe ]^_cdab .Data [_egdac ],_ggdc );_egdac +=_cdab .RowStride ;_ccgbe +=_bfac .RowStride ;
};if _cggc {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{for _cecc =0;_cecc < _edde ;_cecc ++{_cdab .Data [_bbfb +_cecc ]^=_bfac .Data [_egbf +_cecc ];};_bbfb +=_cdab .RowStride ;_egbf +=_bfac .RowStride ;};};if _cfca {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_gbbbf ]=_cdbf (_cdab .Data [_gbbbf ],_bfac .Data [_fced ]^_cdab .Data [_gbbbf ],_eegae );
_gbbbf +=_cdab .RowStride ;_fced +=_bfac .RowStride ;};};case PixNotSrcOrDst :for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_egdac ]=_cdbf (_cdab .Data [_egdac ],^(_bfac .Data [_ccgbe ])|_cdab .Data [_egdac ],_ggdc );_egdac +=_cdab .RowStride ;_ccgbe +=_bfac .RowStride ;
};if _cggc {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{for _cecc =0;_cecc < _edde ;_cecc ++{_cdab .Data [_bbfb +_cecc ]|=^(_bfac .Data [_egbf +_cecc ]);};_bbfb +=_cdab .RowStride ;_egbf +=_bfac .RowStride ;};};if _cfca {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_gbbbf ]=_cdbf (_cdab .Data [_gbbbf ],^(_bfac .Data [_fced ])|_cdab .Data [_gbbbf ],_eegae );
_gbbbf +=_cdab .RowStride ;_fced +=_bfac .RowStride ;};};case PixNotSrcAndDst :for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_egdac ]=_cdbf (_cdab .Data [_egdac ],^(_bfac .Data [_ccgbe ])&_cdab .Data [_egdac ],_ggdc );_egdac +=_cdab .RowStride ;
_ccgbe +=_bfac .RowStride ;};if _cggc {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{for _cecc =0;_cecc < _edde ;_cecc ++{_cdab .Data [_bbfb +_cecc ]&=^_bfac .Data [_egbf +_cecc ];};_bbfb +=_cdab .RowStride ;_egbf +=_bfac .RowStride ;};};if _cfca {for _dcfed =0;
_dcfed < _egcd ;_dcfed ++{_cdab .Data [_gbbbf ]=_cdbf (_cdab .Data [_gbbbf ],^(_bfac .Data [_fced ])&_cdab .Data [_gbbbf ],_eegae );_gbbbf +=_cdab .RowStride ;_fced +=_bfac .RowStride ;};};case PixSrcOrNotDst :for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_egdac ]=_cdbf (_cdab .Data [_egdac ],_bfac .Data [_ccgbe ]|^(_cdab .Data [_egdac ]),_ggdc );
_egdac +=_cdab .RowStride ;_ccgbe +=_bfac .RowStride ;};if _cggc {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{for _cecc =0;_cecc < _edde ;_cecc ++{_cdab .Data [_bbfb +_cecc ]=_bfac .Data [_egbf +_cecc ]|^(_cdab .Data [_bbfb +_cecc ]);};_bbfb +=_cdab .RowStride ;
_egbf +=_bfac .RowStride ;};};if _cfca {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_gbbbf ]=_cdbf (_cdab .Data [_gbbbf ],_bfac .Data [_fced ]|^(_cdab .Data [_gbbbf ]),_eegae );_gbbbf +=_cdab .RowStride ;_fced +=_bfac .RowStride ;};};case PixSrcAndNotDst :for _dcfed =0;
_dcfed < _egcd ;_dcfed ++{_cdab .Data [_egdac ]=_cdbf (_cdab .Data [_egdac ],_bfac .Data [_ccgbe ]&^(_cdab .Data [_egdac ]),_ggdc );_egdac +=_cdab .RowStride ;_ccgbe +=_bfac .RowStride ;};if _cggc {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{for _cecc =0;_cecc < _edde ;
_cecc ++{_cdab .Data [_bbfb +_cecc ]=_bfac .Data [_egbf +_cecc ]&^(_cdab .Data [_bbfb +_cecc ]);};_bbfb +=_cdab .RowStride ;_egbf +=_bfac .RowStride ;};};if _cfca {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_gbbbf ]=_cdbf (_cdab .Data [_gbbbf ],_bfac .Data [_fced ]&^(_cdab .Data [_gbbbf ]),_eegae );
_gbbbf +=_cdab .RowStride ;_fced +=_bfac .RowStride ;};};case PixNotPixSrcOrDst :for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_egdac ]=_cdbf (_cdab .Data [_egdac ],^(_bfac .Data [_ccgbe ]|_cdab .Data [_egdac ]),_ggdc );_egdac +=_cdab .RowStride ;
_ccgbe +=_bfac .RowStride ;};if _cggc {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{for _cecc =0;_cecc < _edde ;_cecc ++{_cdab .Data [_bbfb +_cecc ]=^(_bfac .Data [_egbf +_cecc ]|_cdab .Data [_bbfb +_cecc ]);};_bbfb +=_cdab .RowStride ;_egbf +=_bfac .RowStride ;
};};if _cfca {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_gbbbf ]=_cdbf (_cdab .Data [_gbbbf ],^(_bfac .Data [_fced ]|_cdab .Data [_gbbbf ]),_eegae );_gbbbf +=_cdab .RowStride ;_fced +=_bfac .RowStride ;};};case PixNotPixSrcAndDst :for _dcfed =0;
_dcfed < _egcd ;_dcfed ++{_cdab .Data [_egdac ]=_cdbf (_cdab .Data [_egdac ],^(_bfac .Data [_ccgbe ]&_cdab .Data [_egdac ]),_ggdc );_egdac +=_cdab .RowStride ;_ccgbe +=_bfac .RowStride ;};if _cggc {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{for _cecc =0;_cecc < _edde ;
_cecc ++{_cdab .Data [_bbfb +_cecc ]=^(_bfac .Data [_egbf +_cecc ]&_cdab .Data [_bbfb +_cecc ]);};_bbfb +=_cdab .RowStride ;_egbf +=_bfac .RowStride ;};};if _cfca {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_gbbbf ]=_cdbf (_cdab .Data [_gbbbf ],^(_bfac .Data [_fced ]&_cdab .Data [_gbbbf ]),_eegae );
_gbbbf +=_cdab .RowStride ;_fced +=_bfac .RowStride ;};};case PixNotPixSrcXorDst :for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_egdac ]=_cdbf (_cdab .Data [_egdac ],^(_bfac .Data [_ccgbe ]^_cdab .Data [_egdac ]),_ggdc );_egdac +=_cdab .RowStride ;
_ccgbe +=_bfac .RowStride ;};if _cggc {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{for _cecc =0;_cecc < _edde ;_cecc ++{_cdab .Data [_bbfb +_cecc ]=^(_bfac .Data [_egbf +_cecc ]^_cdab .Data [_bbfb +_cecc ]);};_bbfb +=_cdab .RowStride ;_egbf +=_bfac .RowStride ;
};};if _cfca {for _dcfed =0;_dcfed < _egcd ;_dcfed ++{_cdab .Data [_gbbbf ]=_cdbf (_cdab .Data [_gbbbf ],^(_bfac .Data [_fced ]^_cdab .Data [_gbbbf ]),_eegae );_gbbbf +=_cdab .RowStride ;_fced +=_bfac .RowStride ;};};default:_g .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",_adbd );
return _c .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 (_affc *ClassedPoints )YAtIndex (i int )float32 {return (*_affc .Points )[_affc .IntSlice [i ]].Y };func (_fecgf Points )Size ()int {return len (_fecgf )};func _cadb (_dadcd ,_eaeb *Bitmap ,_cdgd ,_cfef int )(*Bitmap ,error ){const _ggd ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";
if _eaeb ==nil {return nil ,_c .Error (_ggd ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _cdgd < 1&&_cfef < 1{return nil ,_c .Error (_ggd ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");
};if _cdgd ==1&&_cfef ==1{return _eaeb .Copy (),nil ;};if _cdgd ==1||_cfef ==1{var _ebca error ;_bda :=SelCreateBrick (_cfef ,_cdgd ,_cfef /2,_cdgd /2,SelHit );_dadcd ,_ebca =_afddb (_dadcd ,_eaeb ,_bda );if _ebca !=nil {return nil ,_c .Wrap (_ebca ,_ggd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _dadcd ,nil ;};_facd :=SelCreateBrick (1,_cdgd ,0,_cdgd /2,SelHit );_gdcg :=SelCreateBrick (_cfef ,1,_cfef /2,0,SelHit );_afbg ,_febac :=_ebffd (nil ,_eaeb ,_facd );if _febac !=nil {return nil ,_c .Wrap (_febac ,_ggd ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_dadcd ,_febac =_ebffd (_dadcd ,_afbg ,_gdcg );if _febac !=nil {return nil ,_c .Wrap (_febac ,_ggd ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_febac =_dbad (_afbg ,_dadcd ,_facd );if _febac !=nil {return nil ,_c .Wrap (_febac ,_ggd ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_ ,_febac =_dbad (_dadcd ,_afbg ,_gdcg );if _febac !=nil {return nil ,_c .Wrap (_febac ,_ggd ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _dadcd ,nil ;};func (_bgdff *Bitmap )centroid (_gfea ,_cgbb []int )(Point ,error ){_gcge :=Point {};
_bgdff .setPadBits (0);if len (_gfea )==0{_gfea =_gbfb ();};if len (_cgbb )==0{_cgbb =_cdaf ();};var _bfgd ,_cdec ,_agdd ,_acaa ,_gdbe ,_eaec int ;var _aaac byte ;for _gdbe =0;_gdbe < _bgdff .Height ;_gdbe ++{_egcb :=_bgdff .RowStride *_gdbe ;_acaa =0;
for _eaec =0;_eaec < _bgdff .RowStride ;_eaec ++{_aaac =_bgdff .Data [_egcb +_eaec ];if _aaac !=0{_acaa +=_cgbb [_aaac ];_bfgd +=_gfea [_aaac ]+_eaec *8*_cgbb [_aaac ];};};_agdd +=_acaa ;_cdec +=_acaa *_gdbe ;};if _agdd !=0{_gcge .X =float32 (_bfgd )/float32 (_agdd );
_gcge .Y =float32 (_cdec )/float32 (_agdd );};return _gcge ,nil ;};func (_bbag *Bitmap )Equivalent (s *Bitmap )bool {return _bbag .equivalent (s )};func _afda (_abdfc ...MorphProcess )(_bfde error ){const _cbcd ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";
var _aae ,_gefe int ;for _cdce ,_degd :=range _abdfc {if _bfde =_degd .verify (_cdce ,&_aae ,&_gefe );_bfde !=nil {return _c .Wrap (_bfde ,_cbcd ,"");};};if _gefe !=0&&_aae !=0{return _c .Error (_cbcd ,"\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 NewClassedPoints (points *Points ,classes _bf .IntSlice )(*ClassedPoints ,error ){const _eecg ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";if points ==nil {return nil ,_c .Error (_eecg ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");
};if classes ==nil {return nil ,_c .Error (_eecg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");};_cagg :=&ClassedPoints {Points :points ,IntSlice :classes };if _bbfa :=_cagg .validateIntSlice ();_bbfa !=nil {return nil ,_c .Wrap (_bbfa ,_eecg ,"");
};return _cagg ,nil ;};type fillSegment struct{_ggbba int ;_acfe int ;_eagdg int ;_abfc int ;};func (_cdad *Bitmap )GetVanillaData ()[]byte {if _cdad .Color ==Chocolate {_cdad .inverseData ();};return _cdad .Data ;};type MorphProcess struct{Operation MorphOperation ;
Arguments []int ;};func (_gdcb *Bitmaps )Size ()int {return len (_gdcb .Values )};func _gcf (_dfcg ,_ffgd *Bitmap ,_eaga *Selection )(*Bitmap ,error ){const _fdbf ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";
var _gbgfc ,_ecac int ;if _ffgd ==nil {return nil ,_c .Error (_fdbf ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _eaga ==nil {return nil ,_c .Error (_fdbf ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};_gbgfc =_eaga .Width ;_ecac =_eaga .Height ;if _gbgfc ==0||_ecac ==0{return nil ,_c .Error (_fdbf ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _dfcg ==nil {return _ffgd .createTemplate (),nil ;};if _effda :=_dfcg .resizeImageData (_ffgd );
_effda !=nil {return nil ,_effda ;};return _dfcg ,nil ;};func _ebdd (_afea ,_bcae *Bitmap ,_edfef ,_aaag int )(_bfag error ){const _gecb ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_bggcc ,_ecffb ,_ebed ,_bgbfb int ;
_accbd ,_eebfe ,_gcff ,_babe ,_ebffc ,_eabfg ,_aeed byte ;);for _bggcc =0;_bggcc < _edfef ;_bggcc ++{_ebed =_bggcc *_afea .RowStride ;_bgbfb =_bggcc *_bcae .RowStride ;for _ecffb =0;_ecffb < _aaag ;_ecffb ++{_accbd ,_bfag =_afea .GetByte (_ebed +_ecffb );
if _bfag !=nil {return _c .Wrap (_bfag ,_gecb ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_eebfe ,_bfag =_bcae .GetByte (_bgbfb +_ecffb );if _bfag !=nil {return _c .Wrap (_bfag ,_gecb ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");
};if _bggcc > 0{_gcff ,_bfag =_afea .GetByte (_ebed -_afea .RowStride +_ecffb );if _bfag !=nil {return _c .Wrap (_bfag ,_gecb ,"\u0069\u0020\u003e \u0030");};_accbd |=_gcff ;};if _ecffb > 0{_babe ,_bfag =_afea .GetByte (_ebed +_ecffb -1);if _bfag !=nil {return _c .Wrap (_bfag ,_gecb ,"\u006a\u0020\u003e \u0030");
};_accbd |=_babe <<7;};_accbd &=_eebfe ;if _accbd ==0||(^_accbd )==0{if _bfag =_afea .SetByte (_ebed +_ecffb ,_accbd );_bfag !=nil {return _c .Wrap (_bfag ,_gecb ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");
};continue ;};for {_aeed =_accbd ;_accbd =(_accbd |(_accbd >>1)|(_accbd <<1))&_eebfe ;if (_accbd ^_aeed )==0{if _bfag =_afea .SetByte (_ebed +_ecffb ,_accbd );_bfag !=nil {return _c .Wrap (_bfag ,_gecb ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
};break ;};};};};for _bggcc =_edfef -1;_bggcc >=0;_bggcc --{_ebed =_bggcc *_afea .RowStride ;_bgbfb =_bggcc *_bcae .RowStride ;for _ecffb =_aaag -1;_ecffb >=0;_ecffb --{if _accbd ,_bfag =_afea .GetByte (_ebed +_ecffb );_bfag !=nil {return _c .Wrap (_bfag ,_gecb ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");
};if _eebfe ,_bfag =_bcae .GetByte (_bgbfb +_ecffb );_bfag !=nil {return _c .Wrap (_bfag ,_gecb ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _bggcc < _edfef -1{if _ebffc ,_bfag =_afea .GetByte (_ebed +_afea .RowStride +_ecffb );
_bfag !=nil {return _c .Wrap (_bfag ,_gecb ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_accbd |=_ebffc ;};if _ecffb < _aaag -1{if _eabfg ,_bfag =_afea .GetByte (_ebed +_ecffb +1);_bfag !=nil {return _c .Wrap (_bfag ,_gecb ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");
};_accbd |=_eabfg >>7;};_accbd &=_eebfe ;if _accbd ==0||(^_accbd )==0{if _bfag =_afea .SetByte (_ebed +_ecffb ,_accbd );_bfag !=nil {return _c .Wrap (_bfag ,_gecb ,"\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 {_aeed =_accbd ;_accbd =(_accbd |(_accbd >>1)|(_accbd <<1))&_eebfe ;if (_accbd ^_aeed )==0{if _bfag =_afea .SetByte (_ebed +_ecffb ,_accbd );_bfag !=nil {return _c .Wrap (_bfag ,_gecb ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
};break ;};};};};return nil ;};func TstCSymbol (t *_ag .T )*Bitmap {t .Helper ();_abgae :=New (6,6);_b .NoError (t ,_abgae .SetPixel (1,0,1));_b .NoError (t ,_abgae .SetPixel (2,0,1));_b .NoError (t ,_abgae .SetPixel (3,0,1));_b .NoError (t ,_abgae .SetPixel (4,0,1));
_b .NoError (t ,_abgae .SetPixel (0,1,1));_b .NoError (t ,_abgae .SetPixel (5,1,1));_b .NoError (t ,_abgae .SetPixel (0,2,1));_b .NoError (t ,_abgae .SetPixel (0,3,1));_b .NoError (t ,_abgae .SetPixel (0,4,1));_b .NoError (t ,_abgae .SetPixel (5,4,1));
_b .NoError (t ,_abgae .SetPixel (1,5,1));_b .NoError (t ,_abgae .SetPixel (2,5,1));_b .NoError (t ,_abgae .SetPixel (3,5,1));_b .NoError (t ,_abgae .SetPixel (4,5,1));return _abgae ;};var MorphBC BoundaryCondition ;func (_bbc *Bitmap )setBit (_adcd int ){_bbc .Data [(_adcd >>3)]|=0x80>>uint (_adcd &7)};
func (_eeeg *Bitmaps )AddBitmap (bm *Bitmap ){_eeeg .Values =append (_eeeg .Values ,bm )};type shift int ;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 (_acbc *Points )AddPoint (x ,y float32 ){*_acbc =append (*_acbc ,Point {x ,y })};
func _cgge (_cgdf *_bf .Stack ,_egbfg ,_deacc ,_ccfb ,_dgcg ,_bdff int ,_fddg *_fc .Rectangle )(_egab error ){const _gfeb ="\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 _cgdf ==nil {return _c .Error (_gfeb ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _fddg ==nil {return _c .Error (_gfeb ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
};_fddg .Min .X =_bf .Min (_fddg .Min .X ,_egbfg );_fddg .Max .X =_bf .Max (_fddg .Max .X ,_deacc );_fddg .Min .Y =_bf .Min (_fddg .Min .Y ,_ccfb );_fddg .Max .Y =_bf .Max (_fddg .Max .Y ,_ccfb );if !(_ccfb +_dgcg >=0&&_ccfb +_dgcg <=_bdff ){return nil ;
};if _cgdf .Aux ==nil {return _c .Error (_gfeb ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _gecee *fillSegment ;_ffeeg ,_bfdd :=_cgdf .Aux .Pop ();if _bfdd {if _gecee ,_bfdd =_ffeeg .(*fillSegment );
!_bfdd {return _c .Error (_gfeb ,"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 {_gecee =&fillSegment {};
};_gecee ._ggbba =_egbfg ;_gecee ._acfe =_deacc ;_gecee ._eagdg =_ccfb ;_gecee ._abfc =_dgcg ;_cgdf .Push (_gecee );return nil ;};func (_dgcc *BitmapsArray )GetBox (i int )(*_fc .Rectangle ,error ){const _gdfc ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";
if _dgcc ==nil {return nil ,_c .Error (_gdfc ,"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 (_dgcc .Boxes )-1{return nil ,_c .Errorf (_gdfc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _dgcc .Boxes [i ],nil ;};func _efaba (_eaa *_bf .Stack )(_edcd *fillSegment ,_fade error ){const _abcae ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _eaa ==nil {return nil ,_c .Error (_abcae ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
};if _eaa .Aux ==nil {return nil ,_c .Error (_abcae ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_acba ,_ffcc :=_eaa .Pop ();if !_ffcc {return nil ,nil ;};_gfdc ,_ffcc :=_acba .(*fillSegment );if !_ffcc {return nil ,_c .Error (_abcae ,"\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");
};_edcd =&fillSegment {_gfdc ._ggbba ,_gfdc ._acfe ,_gfdc ._eagdg +_gfdc ._abfc ,_gfdc ._abfc };_eaa .Aux .Push (_gfdc );return _edcd ,nil ;};func (_geff *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _dgcf ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";
if _egaa :=_geff .validateIntSlice ();_egaa !=nil {return nil ,_c .Wrap (_egaa ,_dgcf ,"");};if _geff .IntSlice .Size ()==0{return nil ,_c .Error (_dgcf ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");
};_geff .SortByY ();var (_cbeb []*ClassedPoints ;_gagf int ;);_cffc :=-1;var _ecgb *ClassedPoints ;for _fefe :=0;_fefe < len (_geff .IntSlice );_fefe ++{_gagf =int (_geff .YAtIndex (_fefe ));if _gagf !=_cffc {_ecgb =&ClassedPoints {Points :_geff .Points };
_cffc =_gagf ;_cbeb =append (_cbeb ,_ecgb );};_ecgb .IntSlice =append (_ecgb .IntSlice ,_geff .IntSlice [_fefe ]);};for _ ,_daaa :=range _cbeb {_daaa .SortByX ();};return _cbeb ,nil ;};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;
);func (_gdd *Bitmap )clipRectangle (_bdbec ,_dde *_fc .Rectangle )(_gafd *Bitmap ,_bfa error ){const _abc ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if _bdbec ==nil {return nil ,_c .Error (_abc ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");
};_eaed ,_fgfa :=_gdd .Width ,_gdd .Height ;_deef ,_bfa :=ClipBoxToRectangle (_bdbec ,_eaed ,_fgfa );if _bfa !=nil {_g .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",_bfa );
return nil ,nil ;};_cagc ,_eaba :=_deef .Min .X ,_deef .Min .Y ;_cgfc ,_egc :=_deef .Max .X -_deef .Min .X ,_deef .Max .Y -_deef .Min .Y ;_gafd =New (_cgfc ,_egc );_gafd .Text =_gdd .Text ;if _bfa =_gafd .RasterOperation (0,0,_cgfc ,_egc ,PixSrc ,_gdd ,_cagc ,_eaba );
_bfa !=nil {return nil ,_c .Wrap (_bfa ,_abc ,"");};if _dde !=nil {*_dde =*_deef ;};return _gafd ,nil ;};func (_bgf *BitmapsArray )AddBitmaps (bm *Bitmaps ){_bgf .Values =append (_bgf .Values ,bm )};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_efbb :=_adda (h ,w ,"");
_efbb .setOrigin (cy ,cx );var _cedg ,_agagg int ;for _cedg =0;_cedg < h ;_cedg ++{for _agagg =0;_agagg < w ;_agagg ++{_efbb .Data [_cedg ][_agagg ]=tp ;};};return _efbb ;};func TstVSymbol (t *_ag .T ,scale ...int )*Bitmap {_cgcb ,_cdbdc :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});
_b .NoError (t ,_cdbdc );return TstGetScaledSymbol (t ,_cgcb ,scale ...);};func _efba (_ddac ,_dbbf ,_gedf *Bitmap ,_effdg int )(*Bitmap ,error ){const _caeg ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _dbbf ==nil {return nil ,_c .Error (_caeg ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _gedf ==nil {return nil ,_c .Error (_caeg ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _effdg !=4&&_effdg !=8{return nil ,_c .Error (_caeg ,"\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 _dfgd error ;_ddac ,_dfgd =_fce (_ddac ,_dbbf );if _dfgd !=nil {return nil ,_c .Wrap (_dfgd ,_caeg ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_eaecc :=_dbbf .createTemplate ();_gedf .setPadBits (0);
for _fbcb :=0;_fbcb < _faad ;_fbcb ++{_eaecc ,_dfgd =_fce (_eaecc ,_ddac );if _dfgd !=nil {return nil ,_c .Wrapf (_dfgd ,_caeg ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_fbcb );};if _dfgd =_fcfda (_ddac ,_gedf ,_effdg );
_dfgd !=nil {return nil ,_c .Wrapf (_dfgd ,_caeg ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_fbcb );};if _eaecc .Equals (_ddac ){break ;};};return _ddac ,nil ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_fc .Rectangle ;
};func TstGetScaledSymbol (t *_ag .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};_fbdcd ,_abee :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_b .NoError (t ,_abee );
return _fbdcd ;};func _bfdc (_eagd ,_gdcfe *Bitmap ,_gbag ,_ggc int )(_cdfd error ){const _gdce ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_abea ,_ddga ,_gcdea ,_fdcg int ;_ggdb ,_fede ,_egcba ,_cbecf ,_gbfba ,_eegg ,_befa ,_beec byte ;
);for _abea =0;_abea < _gbag ;_abea ++{_gcdea =_abea *_eagd .RowStride ;_fdcg =_abea *_gdcfe .RowStride ;for _ddga =0;_ddga < _ggc ;_ddga ++{if _ggdb ,_cdfd =_eagd .GetByte (_gcdea +_ddga );_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _fede ,_cdfd =_gdcfe .GetByte (_fdcg +_ddga );_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _abea > 0{if _egcba ,_cdfd =_eagd .GetByte (_gcdea -_eagd .RowStride +_ddga );
_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_ggdb |=_egcba |(_egcba <<1)|(_egcba >>1);if _ddga > 0{if _beec ,_cdfd =_eagd .GetByte (_gcdea -_eagd .RowStride +_ddga -1);_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");
};_ggdb |=_beec <<7;};if _ddga < _ggc -1{if _beec ,_cdfd =_eagd .GetByte (_gcdea -_eagd .RowStride +_ddga +1);_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_ggdb |=_beec >>7;
};};if _ddga > 0{if _cbecf ,_cdfd =_eagd .GetByte (_gcdea +_ddga -1);_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"\u006a\u0020\u003e \u0030");};_ggdb |=_cbecf <<7;};_ggdb &=_fede ;if _ggdb ==0||^_ggdb ==0{if _cdfd =_eagd .SetByte (_gcdea +_ddga ,_ggdb );
_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_befa =_ggdb ;_ggdb =(_ggdb |(_ggdb >>1)|(_ggdb <<1))&_fede ;if (_ggdb ^_befa )==0{if _cdfd =_eagd .SetByte (_gcdea +_ddga ,_ggdb );
_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _abea =_gbag -1;_abea >=0;_abea --{_gcdea =_abea *_eagd .RowStride ;_fdcg =_abea *_gdcfe .RowStride ;
for _ddga =_ggc -1;_ddga >=0;_ddga --{if _ggdb ,_cdfd =_eagd .GetByte (_gcdea +_ddga );_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _fede ,_cdfd =_gdcfe .GetByte (_fdcg +_ddga );_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _abea < _gbag -1{if _gbfba ,_cdfd =_eagd .GetByte (_gcdea +_eagd .RowStride +_ddga );
_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_ggdb |=_gbfba |(_gbfba <<1)|_gbfba >>1;if _ddga > 0{if _beec ,_cdfd =_eagd .GetByte (_gcdea +_eagd .RowStride +_ddga -1);
_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"\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");};_ggdb |=_beec <<7;};if _ddga < _ggc -1{if _beec ,_cdfd =_eagd .GetByte (_gcdea +_eagd .RowStride +_ddga +1);
_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"\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");
};_ggdb |=_beec >>7;};};if _ddga < _ggc -1{if _eegg ,_cdfd =_eagd .GetByte (_gcdea +_ddga +1);_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"\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");
};_ggdb |=_eegg >>7;};_ggdb &=_fede ;if _ggdb ==0||(^_ggdb )==0{if _cdfd =_eagd .SetByte (_gcdea +_ddga ,_ggdb );_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_befa =_ggdb ;
_ggdb =(_ggdb |(_ggdb >>1)|(_ggdb <<1))&_fede ;if (_ggdb ^_befa )==0{if _cdfd =_eagd .SetByte (_gcdea +_ddga ,_ggdb );_cdfd !=nil {return _c .Wrap (_cdfd ,_gdce ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
};break ;};};};};return nil ;};func _bg (_gb ,_agaf *Bitmap )(_ee error ){const _da ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_dc :=_agaf .RowStride ;_acc :=_gb .RowStride ;var _cfa ,_cc ,_cac ,_bag ,_fff int ;
for _cac =0;_cac < _agaf .Height ;_cac ++{_cfa =_cac *_dc ;_cc =8*_cac *_acc ;for _bag =0;_bag < _dc ;_bag ++{if _ee =_gb .setEightBytes (_cc +_bag *8,_ccfg [_agaf .Data [_cfa +_bag ]]);_ee !=nil {return _c .Wrap (_ee ,_da ,"");};};for _fff =1;_fff < 8;
_fff ++{for _bag =0;_bag < _acc ;_bag ++{if _ee =_gb .SetByte (_cc +_fff *_acc +_bag ,_gb .Data [_cc +_bag ]);_ee !=nil {return _c .Wrap (_ee ,_da ,"");};};};};return nil ;};type RasterOperator int ;func TstTSymbol (t *_ag .T ,scale ...int )*Bitmap {_fedb ,_bfge :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});
_b .NoError (t ,_bfge );return TstGetScaledSymbol (t ,_fedb ,scale ...);};func (_ebbf *Selection )setOrigin (_cdgc ,_ffefb int ){_ebbf .Cy ,_ebbf .Cx =_cdgc ,_ffefb };func _de (_gg ,_cb *Bitmap )(_gc error ){const _aga ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";
_ff :=_cb .RowStride ;_dea :=_gg .RowStride ;var (_ec byte ;_cd uint16 ;_ecd ,_gcc ,_gf ,_fa ,_gcd int ;);for _gf =0;_gf < _cb .Height ;_gf ++{_ecd =_gf *_ff ;_gcc =2*_gf *_dea ;for _fa =0;_fa < _ff ;_fa ++{_ec =_cb .Data [_ecd +_fa ];_cd =_deedf [_ec ];
_gcd =_gcc +_fa *2;if _gg .RowStride !=_cb .RowStride *2&&(_fa +1)*2> _gg .RowStride {_gc =_gg .SetByte (_gcd ,byte (_cd >>8));}else {_gc =_gg .setTwoBytes (_gcd ,_cd );};if _gc !=nil {return _c .Wrap (_gc ,_aga ,"");};};for _fa =0;_fa < _dea ;_fa ++{_gcd =_gcc +_dea +_fa ;
_ec =_gg .Data [_gcc +_fa ];if _gc =_gg .SetByte (_gcd ,_ec );_gc !=nil {return _c .Wrapf (_gc ,_aga ,"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",_gcc +_fa ,_gcc +_dea +_fa );
};};};return nil ;};func _geba (_aebba ,_gfe ,_cfac *Bitmap )(*Bitmap ,error ){const _bfae ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _gfe ==nil {return nil ,_c .Error (_bfae ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
};if _cfac ==nil {return nil ,_c .Error (_bfae ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _ebea error ;switch {case _aebba ==_gfe :if _ebea =_aebba .RasterOperation (0,0,_gfe .Width ,_gfe .Height ,PixNotSrcAndDst ,_cfac ,0,0);
_ebea !=nil {return nil ,_c .Wrap (_ebea ,_bfae ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _aebba ==_cfac :if _ebea =_aebba .RasterOperation (0,0,_gfe .Width ,_gfe .Height ,PixNotSrcAndDst ,_gfe ,0,0);_ebea !=nil {return nil ,_c .Wrap (_ebea ,_bfae ,"\u0064 \u003d\u003d\u0020\u0073\u0032");
};default:_aebba ,_ebea =_fce (_aebba ,_gfe );if _ebea !=nil {return nil ,_c .Wrap (_ebea ,_bfae ,"");};if _ebea =_aebba .RasterOperation (0,0,_gfe .Width ,_gfe .Height ,PixNotSrcAndDst ,_cfac ,0,0);_ebea !=nil {return nil ,_c .Wrap (_ebea ,_bfae ,"\u0064e\u0066\u0061\u0075\u006c\u0074");
};};return _aebba ,nil ;};func _eacbe (_dgbc *Bitmap ,_aead ,_edec ,_acdd ,_cfee int ,_deaeb RasterOperator ,_cccg *Bitmap ,_baed ,_eebf int )error {var (_dbbd byte ;_edd int ;_gfbg int ;_gffde ,_fcee int ;_fdfe ,_abfdg int ;);_edaa :=_acdd >>3;_geca :=_acdd &7;
if _geca > 0{_dbbd =_bcgeb [_geca ];};_edd =_cccg .RowStride *_eebf +(_baed >>3);_gfbg =_dgbc .RowStride *_edec +(_aead >>3);switch _deaeb {case PixSrc :for _fdfe =0;_fdfe < _cfee ;_fdfe ++{_gffde =_edd +_fdfe *_cccg .RowStride ;_fcee =_gfbg +_fdfe *_dgbc .RowStride ;
for _abfdg =0;_abfdg < _edaa ;_abfdg ++{_dgbc .Data [_fcee ]=_cccg .Data [_gffde ];_fcee ++;_gffde ++;};if _geca > 0{_dgbc .Data [_fcee ]=_cdbf (_dgbc .Data [_fcee ],_cccg .Data [_gffde ],_dbbd );};};case PixNotSrc :for _fdfe =0;_fdfe < _cfee ;_fdfe ++{_gffde =_edd +_fdfe *_cccg .RowStride ;
_fcee =_gfbg +_fdfe *_dgbc .RowStride ;for _abfdg =0;_abfdg < _edaa ;_abfdg ++{_dgbc .Data [_fcee ]=^(_cccg .Data [_gffde ]);_fcee ++;_gffde ++;};if _geca > 0{_dgbc .Data [_fcee ]=_cdbf (_dgbc .Data [_fcee ],^_cccg .Data [_gffde ],_dbbd );};};case PixSrcOrDst :for _fdfe =0;
_fdfe < _cfee ;_fdfe ++{_gffde =_edd +_fdfe *_cccg .RowStride ;_fcee =_gfbg +_fdfe *_dgbc .RowStride ;for _abfdg =0;_abfdg < _edaa ;_abfdg ++{_dgbc .Data [_fcee ]|=_cccg .Data [_gffde ];_fcee ++;_gffde ++;};if _geca > 0{_dgbc .Data [_fcee ]=_cdbf (_dgbc .Data [_fcee ],_cccg .Data [_gffde ]|_dgbc .Data [_fcee ],_dbbd );
};};case PixSrcAndDst :for _fdfe =0;_fdfe < _cfee ;_fdfe ++{_gffde =_edd +_fdfe *_cccg .RowStride ;_fcee =_gfbg +_fdfe *_dgbc .RowStride ;for _abfdg =0;_abfdg < _edaa ;_abfdg ++{_dgbc .Data [_fcee ]&=_cccg .Data [_gffde ];_fcee ++;_gffde ++;};if _geca > 0{_dgbc .Data [_fcee ]=_cdbf (_dgbc .Data [_fcee ],_cccg .Data [_gffde ]&_dgbc .Data [_fcee ],_dbbd );
};};case PixSrcXorDst :for _fdfe =0;_fdfe < _cfee ;_fdfe ++{_gffde =_edd +_fdfe *_cccg .RowStride ;_fcee =_gfbg +_fdfe *_dgbc .RowStride ;for _abfdg =0;_abfdg < _edaa ;_abfdg ++{_dgbc .Data [_fcee ]^=_cccg .Data [_gffde ];_fcee ++;_gffde ++;};if _geca > 0{_dgbc .Data [_fcee ]=_cdbf (_dgbc .Data [_fcee ],_cccg .Data [_gffde ]^_dgbc .Data [_fcee ],_dbbd );
};};case PixNotSrcOrDst :for _fdfe =0;_fdfe < _cfee ;_fdfe ++{_gffde =_edd +_fdfe *_cccg .RowStride ;_fcee =_gfbg +_fdfe *_dgbc .RowStride ;for _abfdg =0;_abfdg < _edaa ;_abfdg ++{_dgbc .Data [_fcee ]|=^(_cccg .Data [_gffde ]);_fcee ++;_gffde ++;};if _geca > 0{_dgbc .Data [_fcee ]=_cdbf (_dgbc .Data [_fcee ],^(_cccg .Data [_gffde ])|_dgbc .Data [_fcee ],_dbbd );
};};case PixNotSrcAndDst :for _fdfe =0;_fdfe < _cfee ;_fdfe ++{_gffde =_edd +_fdfe *_cccg .RowStride ;_fcee =_gfbg +_fdfe *_dgbc .RowStride ;for _abfdg =0;_abfdg < _edaa ;_abfdg ++{_dgbc .Data [_fcee ]&=^(_cccg .Data [_gffde ]);_fcee ++;_gffde ++;};if _geca > 0{_dgbc .Data [_fcee ]=_cdbf (_dgbc .Data [_fcee ],^(_cccg .Data [_gffde ])&_dgbc .Data [_fcee ],_dbbd );
};};case PixSrcOrNotDst :for _fdfe =0;_fdfe < _cfee ;_fdfe ++{_gffde =_edd +_fdfe *_cccg .RowStride ;_fcee =_gfbg +_fdfe *_dgbc .RowStride ;for _abfdg =0;_abfdg < _edaa ;_abfdg ++{_dgbc .Data [_fcee ]=_cccg .Data [_gffde ]|^(_dgbc .Data [_fcee ]);_fcee ++;
_gffde ++;};if _geca > 0{_dgbc .Data [_fcee ]=_cdbf (_dgbc .Data [_fcee ],_cccg .Data [_gffde ]|^(_dgbc .Data [_fcee ]),_dbbd );};};case PixSrcAndNotDst :for _fdfe =0;_fdfe < _cfee ;_fdfe ++{_gffde =_edd +_fdfe *_cccg .RowStride ;_fcee =_gfbg +_fdfe *_dgbc .RowStride ;
for _abfdg =0;_abfdg < _edaa ;_abfdg ++{_dgbc .Data [_fcee ]=_cccg .Data [_gffde ]&^(_dgbc .Data [_fcee ]);_fcee ++;_gffde ++;};if _geca > 0{_dgbc .Data [_fcee ]=_cdbf (_dgbc .Data [_fcee ],_cccg .Data [_gffde ]&^(_dgbc .Data [_fcee ]),_dbbd );};};case PixNotPixSrcOrDst :for _fdfe =0;
_fdfe < _cfee ;_fdfe ++{_gffde =_edd +_fdfe *_cccg .RowStride ;_fcee =_gfbg +_fdfe *_dgbc .RowStride ;for _abfdg =0;_abfdg < _edaa ;_abfdg ++{_dgbc .Data [_fcee ]=^(_cccg .Data [_gffde ]|_dgbc .Data [_fcee ]);_fcee ++;_gffde ++;};if _geca > 0{_dgbc .Data [_fcee ]=_cdbf (_dgbc .Data [_fcee ],^(_cccg .Data [_gffde ]|_dgbc .Data [_fcee ]),_dbbd );
};};case PixNotPixSrcAndDst :for _fdfe =0;_fdfe < _cfee ;_fdfe ++{_gffde =_edd +_fdfe *_cccg .RowStride ;_fcee =_gfbg +_fdfe *_dgbc .RowStride ;for _abfdg =0;_abfdg < _edaa ;_abfdg ++{_dgbc .Data [_fcee ]=^(_cccg .Data [_gffde ]&_dgbc .Data [_fcee ]);_fcee ++;
_gffde ++;};if _geca > 0{_dgbc .Data [_fcee ]=_cdbf (_dgbc .Data [_fcee ],^(_cccg .Data [_gffde ]&_dgbc .Data [_fcee ]),_dbbd );};};case PixNotPixSrcXorDst :for _fdfe =0;_fdfe < _cfee ;_fdfe ++{_gffde =_edd +_fdfe *_cccg .RowStride ;_fcee =_gfbg +_fdfe *_dgbc .RowStride ;
for _abfdg =0;_abfdg < _edaa ;_abfdg ++{_dgbc .Data [_fcee ]=^(_cccg .Data [_gffde ]^_dgbc .Data [_fcee ]);_fcee ++;_gffde ++;};if _geca > 0{_dgbc .Data [_fcee ]=_cdbf (_dgbc .Data [_fcee ],^(_cccg .Data [_gffde ]^_dgbc .Data [_fcee ]),_dbbd );};};default:_g .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",_deaeb );
return _c .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 _eed (_eaf *Bitmap ,_dec *Bitmap ,_ffdb int )(_bge error ){const _ed ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _ffdb {case 2:_bge =_de (_eaf ,_dec );case 4:_bge =_bc (_eaf ,_dec );
case 8:_bge =_bg (_eaf ,_dec );default:return _c .Error (_ed ,"\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 _bge !=nil {_bge =_c .Wrap (_bge ,_ed ,"");};return _bge ;};func (_gbfe *Bitmaps )makeSizeIndicator (_bbce ,_ggff int ,_edfgd LocationFilter ,_eegc SizeComparison )(_fdgbb *_bf .NumSlice ,_efda error ){const _ffccd ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _gbfe ==nil {return nil ,_c .Error (_ffccd ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _edfgd {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_ffccd ,"\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",_edfgd );
};switch _eegc {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_c .Errorf (_ffccd ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_eegc );
};_fdgbb =&_bf .NumSlice {};var (_cefc ,_gcdb ,_aaed int ;_befc *Bitmap ;);for _ ,_befc =range _gbfe .Values {_cefc =0;_gcdb ,_aaed =_befc .Width ,_befc .Height ;switch _edfgd {case LocSelectWidth :if (_eegc ==SizeSelectIfLT &&_gcdb < _bbce )||(_eegc ==SizeSelectIfGT &&_gcdb > _bbce )||(_eegc ==SizeSelectIfLTE &&_gcdb <=_bbce )||(_eegc ==SizeSelectIfGTE &&_gcdb >=_bbce )||(_eegc ==SizeSelectIfEQ &&_gcdb ==_bbce ){_cefc =1;
};case LocSelectHeight :if (_eegc ==SizeSelectIfLT &&_aaed < _ggff )||(_eegc ==SizeSelectIfGT &&_aaed > _ggff )||(_eegc ==SizeSelectIfLTE &&_aaed <=_ggff )||(_eegc ==SizeSelectIfGTE &&_aaed >=_ggff )||(_eegc ==SizeSelectIfEQ &&_aaed ==_ggff ){_cefc =1;
};case LocSelectIfEither :if (_eegc ==SizeSelectIfLT &&(_gcdb < _bbce ||_aaed < _ggff ))||(_eegc ==SizeSelectIfGT &&(_gcdb > _bbce ||_aaed > _ggff ))||(_eegc ==SizeSelectIfLTE &&(_gcdb <=_bbce ||_aaed <=_ggff ))||(_eegc ==SizeSelectIfGTE &&(_gcdb >=_bbce ||_aaed >=_ggff ))||(_eegc ==SizeSelectIfEQ &&(_gcdb ==_bbce ||_aaed ==_ggff )){_cefc =1;
};case LocSelectIfBoth :if (_eegc ==SizeSelectIfLT &&(_gcdb < _bbce &&_aaed < _ggff ))||(_eegc ==SizeSelectIfGT &&(_gcdb > _bbce &&_aaed > _ggff ))||(_eegc ==SizeSelectIfLTE &&(_gcdb <=_bbce &&_aaed <=_ggff ))||(_eegc ==SizeSelectIfGTE &&(_gcdb >=_bbce &&_aaed >=_ggff ))||(_eegc ==SizeSelectIfEQ &&(_gcdb ==_bbce &&_aaed ==_ggff )){_cefc =1;
};};_fdgbb .AddInt (_cefc );};return _fdgbb ,nil ;};func (_bded *Bitmap )addPadBits ()(_fcf error ){const _dfad ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_gge :=_bded .Width %8;if _gge ==0{return nil ;
};_bdec :=_bded .Width /8;_cag :=_age .NewReader (_bded .Data );_baadb :=make ([]byte ,_bded .Height *_bded .RowStride );_bafa :=_age .NewWriterMSB (_baadb );_gaba :=make ([]byte ,_bdec );var (_becfg int ;_efb uint64 ;);for _becfg =0;_becfg < _bded .Height ;
_becfg ++{if _ ,_fcf =_cag .Read (_gaba );_fcf !=nil {return _c .Wrap (_fcf ,_dfad ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_fcf =_bafa .Write (_gaba );_fcf !=nil {return _c .Wrap (_fcf ,_dfad ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");
};if _efb ,_fcf =_cag .ReadBits (byte (_gge ));_fcf !=nil {return _c .Wrap (_fcf ,_dfad ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _fcf =_bafa .WriteByte (byte (_efb )<<uint (8-_gge ));_fcf !=nil {return _c .Wrap (_fcf ,_dfad ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");
};};_bded .Data =_bafa .Data ();return nil ;};func (_adcc *Bitmap )ToImage ()_fc .Image {_effc ,_gegg :=_e .NewImage (_adcc .Width ,_adcc .Height ,1,1,_adcc .Data ,nil ,nil );if _gegg !=nil {_g .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",_gegg );
};return _effc ;};func (_gae *Bitmap )CreateTemplate ()*Bitmap {return _gae .createTemplate ()};func (_bfdbg *Bitmaps )HeightSorter ()func (_gcgbb ,_eded int )bool {return func (_dada ,_ebaee int )bool {_efdd :=_bfdbg .Values [_dada ].Height < _bfdbg .Values [_ebaee ].Height ;
_g .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_bfdbg .Values [_dada ].Height ,_bfdbg .Values [_ebaee ].Height ,_efdd );return _efdd ;};};func (_dba *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _dba .Copy (),nil ;
};_ddd ,_bdbe :=_dba .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _bdbe !=nil {return nil ,_c .Wrap (_bdbe ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _ddd ,nil ;};func _ebfa (_cegg *Bitmap )(_ecgf *Bitmap ,_bdd int ,_cdbb error ){const _bfbae ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";
if _cegg ==nil {return nil ,0,_c .Errorf (_bfbae ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _fcbd ,_aceg *Bitmap ;if _fcbd ,_cdbb =_fce (nil ,_cegg );_cdbb !=nil {return nil ,0,_c .Wrap (_cdbb ,_bfbae ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");
};var (_fdef [13]int ;_eccg ,_feab int ;);_eaegb :=12;_edfd :=_bf .NewNumSlice (_eaegb +1);_fegcf :=_bf .NewNumSlice (_eaegb +1);var _aab *Boxes ;for _edgg :=0;_edgg <=_eaegb ;_edgg ++{if _edgg ==0{if _aceg ,_cdbb =_fce (nil ,_fcbd );_cdbb !=nil {return nil ,0,_c .Wrap (_cdbb ,_bfbae ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");
};}else {if _aceg ,_cdbb =_cffe (_fcbd ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_cdbb !=nil {return nil ,0,_c .Wrap (_cdbb ,_bfbae ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _aab ,_cdbb =_aceg .connComponentsBB (4);
_cdbb !=nil {return nil ,0,_c .Wrap (_cdbb ,_bfbae ,"");};_fdef [_edgg ]=len (*_aab );_edfd .AddInt (_fdef [_edgg ]);switch _edgg {case 0:_eccg =_fdef [0];default:_feab =_fdef [_edgg -1]-_fdef [_edgg ];_fegcf .AddInt (_feab );};_fcbd =_aceg ;};_ecgfd :=true ;
_dcdd :=2;var _gfb ,_dacf int ;for _adcg :=1;_adcg < len (*_fegcf );_adcg ++{if _gfb ,_cdbb =_edfd .GetInt (_adcg );_cdbb !=nil {return nil ,0,_c .Wrap (_cdbb ,_bfbae ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");
};if _ecgfd &&_gfb < int (0.3*float32 (_eccg )){_dcdd =_adcg +1;_ecgfd =false ;};if _feab ,_cdbb =_fegcf .GetInt (_adcg );_cdbb !=nil {return nil ,0,_c .Wrap (_cdbb ,_bfbae ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");
};if _feab > _dacf {_dacf =_feab ;};};_dded :=_cegg .XResolution ;if _dded ==0{_dded =150;};if _dded > 110{_dcdd ++;};if _dcdd < 2{_g .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");
_dcdd =2;};_bdd =_dcdd +1;if _ecgf ,_cdbb =_dbaaa (nil ,_cegg ,_dcdd +1,1);_cdbb !=nil {return nil ,0,_c .Wrap (_cdbb ,_bfbae ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _ecgf ,_bdd ,nil ;
};func (_gec *Bitmap )And (s *Bitmap )(_dgbf *Bitmap ,_bdfg error ){const _eabb ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _gec ==nil {return nil ,_c .Error (_eabb ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");
};if s ==nil {return nil ,_c .Error (_eabb ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_gec .SizesEqual (s ){_g .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",_eabb );
};if _dgbf ,_bdfg =_fce (_dgbf ,_gec );_bdfg !=nil {return nil ,_c .Wrap (_bdfg ,_eabb ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _bdfg =_dgbf .RasterOperation (0,0,_dgbf .Width ,_dgbf .Height ,PixSrcAndDst ,s ,0,0);
_bdfg !=nil {return nil ,_c .Wrap (_bdfg ,_eabb ,"");};return _dgbf ,nil ;};func (_deff *Bitmap )Equals (s *Bitmap )bool {if len (_deff .Data )!=len (s .Data )||_deff .Width !=s .Width ||_deff .Height !=s .Height {return false ;};for _daea :=0;_daea < _deff .Height ;
_daea ++{_eaea :=_daea *_deff .RowStride ;for _gdbg :=0;_gdbg < _deff .RowStride ;_gdbg ++{if _deff .Data [_eaea +_gdbg ]!=s .Data [_eaea +_gdbg ]{return false ;};};};return true ;};func (_daad *Bitmap )setTwoBytes (_dfce int ,_aaff uint16 )error {if _dfce +1> len (_daad .Data )-1{return _c .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",_dfce );
};_daad .Data [_dfce ]=byte ((_aaff &0xff00)>>8);_daad .Data [_dfce +1]=byte (_aaff &0xff);return nil ;};func TstFrameBitmap ()*Bitmap {return _bgca .Copy ()};func (_aeff Points )Get (i int )(Point ,error ){if i > len (_aeff )-1{return Point {},_c .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 _aeff [i ],nil ;};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _bdcd (oldByte ,newByte ,op );};func _fbf (_eecd ,_cdfc *Bitmap ,_fdgb ,_dcg ,_fcb ,_cfda ,_adgg ,_fdga ,_cefa ,_abgg int ,_fgea CombinationOperator )error {var _cfe int ;
_dcgd :=func (){_cfe ++;_fcb +=_cdfc .RowStride ;_cfda +=_eecd .RowStride ;_adgg +=_eecd .RowStride };for _cfe =_fdgb ;_cfe < _dcg ;_dcgd (){var _egeb uint16 ;_cece :=_fcb ;for _fcfd :=_cfda ;_fcfd <=_adgg ;_fcfd ++{_gabc ,_cgd :=_cdfc .GetByte (_cece );
if _cgd !=nil {return _cgd ;};_cddg ,_cgd :=_eecd .GetByte (_fcfd );if _cgd !=nil {return _cgd ;};_egeb =(_egeb |uint16 (_cddg ))<<uint (_abgg );_cddg =byte (_egeb >>8);if _fcfd ==_adgg {_cddg =_fegc (uint (_fdga ),_cddg );};if _cgd =_cdfc .SetByte (_cece ,_bdcd (_gabc ,_cddg ,_fgea ));
_cgd !=nil {return _cgd ;};_cece ++;_egeb <<=uint (_cefa );};};return nil ;};func TstWordBitmapWithSpaces (t *_ag .T ,scale ...int )*Bitmap {_fcdd :=1;if len (scale )> 0{_fcdd =scale [0];};_gcbae :=3;_dgeb :=9+7+15+2*_gcbae +2*_gcbae ;_ccfbc :=5+_gcbae +5+2*_gcbae ;
_bgdb :=New (_dgeb *_fcdd ,_ccfbc *_fcdd );_dged :=&Bitmaps {};var _feaee *int ;_gcbae *=_fcdd ;_fdad :=_gcbae ;_feaee =&_fdad ;_cdfg :=_gcbae ;_dgde :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_dged ,_dgde ,_feaee ,_cdfg ,1*_fcdd );_dgde =TstOSymbol (t ,scale ...);
TstAddSymbol (t ,_dged ,_dgde ,_feaee ,_cdfg ,_gcbae );_dgde =TstISymbol (t ,scale ...);TstAddSymbol (t ,_dged ,_dgde ,_feaee ,_cdfg ,1*_fcdd );_dgde =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_dged ,_dgde ,_feaee ,_cdfg ,_gcbae );_dgde =TstNSymbol (t ,scale ...);
TstAddSymbol (t ,_dged ,_dgde ,_feaee ,_cdfg ,1*_fcdd );_dgde =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_dged ,_dgde ,_feaee ,_cdfg ,1*_fcdd );_dgde =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_dged ,_dgde ,_feaee ,_cdfg ,0);*_feaee =_gcbae ;_cdfg =5*_fcdd +_gcbae ;
_dgde =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_dged ,_dgde ,_feaee ,_cdfg ,1*_fcdd );_dgde =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_dged ,_dgde ,_feaee ,_cdfg ,_gcbae );_dgde =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_dged ,_dgde ,_feaee ,_cdfg ,1*_fcdd );
_dgde =TstESymbol (t ,scale ...);TstAddSymbol (t ,_dged ,_dgde ,_feaee ,_cdfg ,1*_fcdd );_dgde =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_dged ,_dgde ,_feaee ,_cdfg ,1*_fcdd );_dgde =TstESymbol (t ,scale ...);TstAddSymbol (t ,_dged ,_dgde ,_feaee ,_cdfg ,1*_fcdd );
_dgde =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_dged ,_dgde ,_feaee ,_cdfg ,0);TstWriteSymbols (t ,_dged ,_bgdb );return _bgdb ;};type Color int ;const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func (_ccaf *byHeight )Less (i ,j int )bool {return _ccaf .Values [i ].Height < _ccaf .Values [j ].Height };
func (_ccf *Bitmap )inverseData (){if _dcc :=_ccf .RasterOperation (0,0,_ccf .Width ,_ccf .Height ,PixNotDst ,nil ,0,0);_dcc !=nil {_g .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_dcc );
};if _ccf .Color ==Chocolate {_ccf .Color =Vanilla ;}else {_ccf .Color =Chocolate ;};};func (_gaea *Bitmap )setEightBytes (_edgd int ,_defd uint64 )error {_cgb :=_gaea .RowStride -(_edgd %_gaea .RowStride );if _gaea .RowStride !=_gaea .Width >>3{_cgb --;
};if _cgb >=8{return _gaea .setEightFullBytes (_edgd ,_defd );};return _gaea .setEightPartlyBytes (_edgd ,_cgb ,_defd );};type Bitmaps struct{Values []*Bitmap ;Boxes []*_fc .Rectangle ;};func MakePixelSumTab8 ()[]int {return _cdaf ()};func TstWSymbol (t *_ag .T ,scale ...int )*Bitmap {_fbbe ,_adgf :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});
_b .NoError (t ,_adgf );return TstGetScaledSymbol (t ,_fbbe ,scale ...);};func (_def *Bitmap )ClipRectangle (box *_fc .Rectangle )(_cbe *Bitmap ,_bfec *_fc .Rectangle ,_dgf error ){const _ccc ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,nil ,_c .Error (_ccc ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_ebae ,_debb :=_def .Width ,_def .Height ;_edb :=_fc .Rect (0,0,_ebae ,_debb );if !box .Overlaps (_edb ){return nil ,nil ,_c .Error (_ccc ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");
};_dggd :=box .Intersect (_edb );_cbae ,_bgdf :=_dggd .Min .X ,_dggd .Min .Y ;_ebf ,_fba :=_dggd .Dx (),_dggd .Dy ();_cbe =New (_ebf ,_fba );_cbe .Text =_def .Text ;if _dgf =_cbe .RasterOperation (0,0,_ebf ,_fba ,PixSrc ,_def ,_cbae ,_bgdf );_dgf !=nil {return nil ,nil ,_c .Wrap (_dgf ,_ccc ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
};_bfec =&_dggd ;return _cbe ,_bfec ,nil ;};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func (_gdg *Bitmap )GetUnpaddedData ()([]byte ,error ){_bagc :=uint (_gdg .Width &0x07);
if _bagc ==0{return _gdg .Data ,nil ;};_bea :=_gdg .Width *_gdg .Height ;if _bea %8!=0{_bea >>=3;_bea ++;}else {_bea >>=3;};_cabf :=make ([]byte ,_bea );_bgeb :=_age .NewWriterMSB (_cabf );const _bffd ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
for _affdd :=0;_affdd < _gdg .Height ;_affdd ++{for _geg :=0;_geg < _gdg .RowStride ;_geg ++{_baad :=_gdg .Data [_affdd *_gdg .RowStride +_geg ];if _geg !=_gdg .RowStride -1{_bbga :=_bgeb .WriteByte (_baad );if _bbga !=nil {return nil ,_c .Wrap (_bbga ,_bffd ,"");
};continue ;};for _gbee :=uint (0);_gbee < _bagc ;_gbee ++{_gab :=_bgeb .WriteBit (int (_baad >>(7-_gbee )&0x01));if _gab !=nil {return nil ,_c .Wrap (_gab ,_bffd ,"");};};};};return _cabf ,nil ;};func Extract (roi _fc .Rectangle ,src *Bitmap )(*Bitmap ,error ){_fgff :=New (roi .Dx (),roi .Dy ());
_eeb :=roi .Min .X &0x07;_bee :=8-_eeb ;_fbbb :=uint (8-_fgff .Width &0x07);_gbgf :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_bcc :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_ececb :=_fgff .RowStride ==_bcc +1-_gbgf ;var _caaed int ;for _fbgcf :=roi .Min .Y ;
_fbgcf < roi .Max .Y ;_fbgcf ++{_gbed :=_gbgf ;_gcbf :=_caaed ;switch {case _gbgf ==_bcc :_bggg ,_dbe :=src .GetByte (_gbed );if _dbe !=nil {return nil ,_dbe ;};_bggg <<=uint (_eeb );_dbe =_fgff .SetByte (_gcbf ,_fegc (_fbbb ,_bggg ));if _dbe !=nil {return nil ,_dbe ;
};case _eeb ==0:for _dggg :=_gbgf ;_dggg <=_bcc ;_dggg ++{_abcg ,_faag :=src .GetByte (_gbed );if _faag !=nil {return nil ,_faag ;};_gbed ++;if _dggg ==_bcc &&_ececb {_abcg =_fegc (_fbbb ,_abcg );};_faag =_fgff .SetByte (_gcbf ,_abcg );if _faag !=nil {return nil ,_faag ;
};_gcbf ++;};default:_gbcg :=_ebcb (src ,_fgff ,uint (_eeb ),uint (_bee ),_fbbb ,_gbgf ,_bcc ,_ececb ,_gbed ,_gcbf );if _gbcg !=nil {return nil ,_gbcg ;};};_gbgf +=src .RowStride ;_bcc +=src .RowStride ;_caaed +=_fgff .RowStride ;};return _fgff ,nil ;};
type Points []Point ;func (_cabg *Bitmaps )CountPixels ()*_bf .NumSlice {_cbbf :=&_bf .NumSlice {};for _ ,_cabfa :=range _cabg .Values {_cbbf .AddInt (_cabfa .CountPixels ());};return _cbbf ;};func _cfd (_bffg *Bitmap ,_affe int ,_ffb []byte )(_aeg *Bitmap ,_cad error ){const _bgg ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";
if _bffg ==nil {return nil ,_c .Error (_bgg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _affe < 1||_affe > 4{return nil ,_c .Error (_bgg ,"\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 _bffg .Height <=1{return nil ,_c .Errorf (_bgg ,"\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",_bffg .Height );
};_aeg =New (_bffg .Width /2,_bffg .Height /2);if _ffb ==nil {_ffb =_bec ();};_fbc :=_dgbe (_bffg .RowStride ,2*_aeg .RowStride );switch _affe {case 1:_cad =_aec (_bffg ,_aeg ,_affe ,_ffb ,_fbc );case 2:_cad =_ad (_bffg ,_aeg ,_affe ,_ffb ,_fbc );case 3:_cad =_dce (_bffg ,_aeg ,_affe ,_ffb ,_fbc );
case 4:_cad =_bafe (_bffg ,_aeg ,_affe ,_ffb ,_fbc );};if _cad !=nil {return nil ,_cad ;};return _aeg ,nil ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _eee ="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 ,_c .Error (_eee ,"\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 ,_c .Error (_eee ,"\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 ,_c .Error (_eee ,"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 ,_c .Error (_eee ,"\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 ,_c .Error (_eee ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
};_egcg ,_abb :=bm1 .Width ,bm1 .Height ;_bcfc ,_dbgd :=bm2 .Width ,bm2 .Height ;if _bf .Abs (_egcg -_bcfc )> maxDiffW {return false ,nil ;};if _bf .Abs (_abb -_dbgd )> maxDiffH {return false ,nil ;};_eedfa :=int (delX +_bf .Sign (delX )*0.5);_aebac :=int (delY +_bf .Sign (delY )*0.5);
_fgcf :=int (_ac .Ceil (_ac .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_fcgag :=bm2 .RowStride ;_gebb :=_bbff (_aebac ,0);_adbf :=_dgbe (_dbgd +_aebac ,_abb );_gaeb :=bm1 .RowStride *_gebb ;_fdfc :=bm2 .RowStride *(_gebb -_aebac );
var _fdeb int ;if _adbf <=_abb {_fdeb =downcount [_adbf -1];};_cgdd :=_bbff (_eedfa ,0);_ggab :=_dgbe (_bcfc +_eedfa ,_egcg );var _bffbd ,_cgbf int ;if _eedfa >=8{_bffbd =_eedfa >>3;_gaeb +=_bffbd ;_cgdd -=_bffbd <<3;_ggab -=_bffbd <<3;_eedfa &=7;}else if _eedfa <=-8{_cgbf =-((_eedfa +7)>>3);
_fdfc +=_cgbf ;_fcgag -=_cgbf ;_eedfa +=_cgbf <<3;};var (_gdae ,_cdfbc ,_aebbc int ;_adbg ,_dbf ,_beca byte ;);if _cgdd >=_ggab ||_gebb >=_adbf {return false ,nil ;};_gddf :=(_ggab +7)>>3;switch {case _eedfa ==0:for _cdfbc =_gebb ;_cdfbc < _adbf ;_cdfbc ,_gaeb ,_fdfc =_cdfbc +1,_gaeb +bm1 .RowStride ,_fdfc +bm2 .RowStride {for _aebbc =0;
_aebbc < _gddf ;_aebbc ++{_adbg =bm1 .Data [_gaeb +_aebbc ]&bm2 .Data [_fdfc +_aebbc ];_gdae +=tab [_adbg ];};if _gdae >=_fgcf {return true ,nil ;};if _cdga :=_gdae +downcount [_cdfbc ]-_fdeb ;_cdga < _fgcf {return false ,nil ;};};case _eedfa > 0&&_fcgag < _gddf :for _cdfbc =_gebb ;
_cdfbc < _adbf ;_cdfbc ,_gaeb ,_fdfc =_cdfbc +1,_gaeb +bm1 .RowStride ,_fdfc +bm2 .RowStride {_dbf =bm1 .Data [_gaeb ];_beca =bm2 .Data [_fdfc ]>>uint (_eedfa );_adbg =_dbf &_beca ;_gdae +=tab [_adbg ];for _aebbc =1;_aebbc < _fcgag ;_aebbc ++{_dbf =bm1 .Data [_gaeb +_aebbc ];
_beca =bm2 .Data [_fdfc +_aebbc ]>>uint (_eedfa )|bm2 .Data [_fdfc +_aebbc -1]<<uint (8-_eedfa );_adbg =_dbf &_beca ;_gdae +=tab [_adbg ];};_dbf =bm1 .Data [_gaeb +_aebbc ];_beca =bm2 .Data [_fdfc +_aebbc -1]<<uint (8-_eedfa );_adbg =_dbf &_beca ;_gdae +=tab [_adbg ];
if _gdae >=_fgcf {return true ,nil ;}else if _gdae +downcount [_cdfbc ]-_fdeb < _fgcf {return false ,nil ;};};case _eedfa > 0&&_fcgag >=_gddf :for _cdfbc =_gebb ;_cdfbc < _adbf ;_cdfbc ,_gaeb ,_fdfc =_cdfbc +1,_gaeb +bm1 .RowStride ,_fdfc +bm2 .RowStride {_dbf =bm1 .Data [_gaeb ];
_beca =bm2 .Data [_fdfc ]>>uint (_eedfa );_adbg =_dbf &_beca ;_gdae +=tab [_adbg ];for _aebbc =1;_aebbc < _gddf ;_aebbc ++{_dbf =bm1 .Data [_gaeb +_aebbc ];_beca =bm2 .Data [_fdfc +_aebbc ]>>uint (_eedfa );_beca |=bm2 .Data [_fdfc +_aebbc -1]<<uint (8-_eedfa );
_adbg =_dbf &_beca ;_gdae +=tab [_adbg ];};if _gdae >=_fgcf {return true ,nil ;}else if _gdae +downcount [_cdfbc ]-_fdeb < _fgcf {return false ,nil ;};};case _gddf < _fcgag :for _cdfbc =_gebb ;_cdfbc < _adbf ;_cdfbc ,_gaeb ,_fdfc =_cdfbc +1,_gaeb +bm1 .RowStride ,_fdfc +bm2 .RowStride {for _aebbc =0;
_aebbc < _gddf ;_aebbc ++{_dbf =bm1 .Data [_gaeb +_aebbc ];_beca =bm2 .Data [_fdfc +_aebbc ]<<uint (-_eedfa );_beca |=bm2 .Data [_fdfc +_aebbc +1]>>uint (8+_eedfa );_adbg =_dbf &_beca ;_gdae +=tab [_adbg ];};if _gdae >=_fgcf {return true ,nil ;}else if _gafa :=_gdae +downcount [_cdfbc ]-_fdeb ;
_gafa < _fgcf {return false ,nil ;};};case _fcgag >=_gddf :for _cdfbc =_gebb ;_cdfbc < _adbf ;_cdfbc ,_gaeb ,_fdfc =_cdfbc +1,_gaeb +bm1 .RowStride ,_fdfc +bm2 .RowStride {for _aebbc =0;_aebbc < _gddf ;_aebbc ++{_dbf =bm1 .Data [_gaeb +_aebbc ];_beca =bm2 .Data [_fdfc +_aebbc ]<<uint (-_eedfa );
_beca |=bm2 .Data [_fdfc +_aebbc +1]>>uint (8+_eedfa );_adbg =_dbf &_beca ;_gdae +=tab [_adbg ];};_dbf =bm1 .Data [_gaeb +_aebbc ];_beca =bm2 .Data [_fdfc +_aebbc ]<<uint (-_eedfa );_adbg =_dbf &_beca ;_gdae +=tab [_adbg ];if _gdae >=_fgcf {return true ,nil ;
}else if _gdae +downcount [_cdfbc ]-_fdeb < _fgcf {return false ,nil ;};};};_gdgcd :=float32 (_gdae )*float32 (_gdae )/(float32 (area1 )*float32 (area2 ));if _gdgcd >=scoreThreshold {_g .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",_gdae ,_fgcf ,_gdgcd ,scoreThreshold );
};return false ,nil ;};var _fbcag =[]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};
type CombinationOperator int ;const (_bbbe shift =iota ;_cgefc ;);func (_eac *Bitmap )CountPixels ()int {return _eac .countPixels ()};func _afca (_baecc *Bitmap ,_gece ,_addb int ,_cedd ,_edee int ,_fecd RasterOperator ,_gac *Bitmap ,_eede ,_cbade int )error {var _dbdc ,_baaba ,_gfaf ,_cffg int ;
if _gece < 0{_eede -=_gece ;_cedd +=_gece ;_gece =0;};if _eede < 0{_gece -=_eede ;_cedd +=_eede ;_eede =0;};_dbdc =_gece +_cedd -_baecc .Width ;if _dbdc > 0{_cedd -=_dbdc ;};_baaba =_eede +_cedd -_gac .Width ;if _baaba > 0{_cedd -=_baaba ;};if _addb < 0{_cbade -=_addb ;
_edee +=_addb ;_addb =0;};if _cbade < 0{_addb -=_cbade ;_edee +=_cbade ;_cbade =0;};_gfaf =_addb +_edee -_baecc .Height ;if _gfaf > 0{_edee -=_gfaf ;};_cffg =_cbade +_edee -_gac .Height ;if _cffg > 0{_edee -=_cffg ;};if _cedd <=0||_edee <=0{return nil ;
};var _fgba error ;switch {case _gece &7==0&&_eede &7==0:_fgba =_eacbe (_baecc ,_gece ,_addb ,_cedd ,_edee ,_fecd ,_gac ,_eede ,_cbade );case _gece &7==_eede &7:_fgba =_feac (_baecc ,_gece ,_addb ,_cedd ,_edee ,_fecd ,_gac ,_eede ,_cbade );default:_fgba =_cdbd (_baecc ,_gece ,_addb ,_cedd ,_edee ,_fecd ,_gac ,_eede ,_cbade );
};if _fgba !=nil {return _c .Wrap (_fgba ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func (_fbed *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _aeeg (_fbed ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};func _abg ()(_gbba [256]uint64 ){for _fea :=0;_fea < 256;_fea ++{if _fea &0x01!=0{_gbba [_fea ]|=0xff;};if _fea &0x02!=0{_gbba [_fea ]|=0xff00;};if _fea &0x04!=0{_gbba [_fea ]|=0xff0000;};if _fea &0x08!=0{_gbba [_fea ]|=0xff000000;};if _fea &0x10!=0{_gbba [_fea ]|=0xff00000000;
};if _fea &0x20!=0{_gbba [_fea ]|=0xff0000000000;};if _fea &0x40!=0{_gbba [_fea ]|=0xff000000000000;};if _fea &0x80!=0{_gbba [_fea ]|=0xff00000000000000;};};return _gbba ;};type ClassedPoints struct{*Points ;_bf .IntSlice ;_aagf func (_gebd ,_gdfa int )bool ;
};func _dga (_agdc ,_gfd *Bitmap ,_cgcc ,_bfbb int )(*Bitmap ,error ){const _begd ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";if _gfd ==nil {return nil ,_c .Error (_begd ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
};if _cgcc < 1||_bfbb < 1{return nil ,_c .Error (_begd ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _cgcc ==1&&_bfbb ==1{return _fce (_agdc ,_gfd );};if MorphBC ==SymmetricMorphBC {_gbac ,_ggbd :=_dbaaa (_agdc ,_gfd ,_cgcc ,_bfbb );
if _ggbd !=nil {return nil ,_c .Wrap (_ggbd ,_begd ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");};return _gbac ,nil ;};_gedd :=_bbff (_cgcc /2,_bfbb /2);_agfd :=8*((_gedd +7)/8);_fbef ,_abfd :=_gfd .AddBorder (_agfd ,0);
if _abfd !=nil {return nil ,_c .Wrapf (_abfd ,_begd ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_agfd );};var _eafce ,_bagb *Bitmap ;if _cgcc ==1||_bfbb ==1{_cefd :=SelCreateBrick (_bfbb ,_cgcc ,_bfbb /2,_cgcc /2,SelHit );
_eafce ,_abfd =_dfbc (nil ,_fbef ,_cefd );if _abfd !=nil {return nil ,_c .Wrap (_abfd ,_begd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};}else {_dagc :=SelCreateBrick (1,_cgcc ,0,_cgcc /2,SelHit );
_abdfe ,_efabd :=_dbad (nil ,_fbef ,_dagc );if _efabd !=nil {return nil ,_c .Wrap (_efabd ,_begd ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");};_dced :=SelCreateBrick (_bfbb ,1,_bfbb /2,0,SelHit );
_eafce ,_efabd =_dbad (nil ,_abdfe ,_dced );if _efabd !=nil {return nil ,_c .Wrap (_efabd ,_begd ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_efabd =_ebffd (_abdfe ,_eafce ,_dagc );
_efabd !=nil {return nil ,_c .Wrap (_efabd ,_begd ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_efabd =_ebffd (_eafce ,_abdfe ,_dced );_efabd !=nil {return nil ,_c .Wrap (_efabd ,_begd ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
};};if _bagb ,_abfd =_eafce .RemoveBorder (_agfd );_abfd !=nil {return nil ,_c .Wrap (_abfd ,_begd ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _agdc ==nil {return _bagb ,nil ;};if _ ,_abfd =_fce (_agdc ,_bagb );_abfd !=nil {return nil ,_abfd ;};return _agdc ,nil ;
};func (_ceac *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _bcdg ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";if _ceac ==nil {return nil ,_c .Error (_bcdg ,"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 (_ceac .Values )-1{return nil ,_c .Errorf (_bcdg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _ceac .Values [i ],nil ;};func (_ecdg *Bitmap )addBorderGeneral (_gcb ,_cae ,_bfc ,_edac int ,_bdeb int )(*Bitmap ,error ){const _becf ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
if _gcb < 0||_cae < 0||_bfc < 0||_edac < 0{return nil ,_c .Error (_becf ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_fbda ,_fga :=_ecdg .Width ,_ecdg .Height ;_adge :=_fbda +_gcb +_cae ;_dgdcf :=_fga +_bfc +_edac ;
_cbd :=New (_adge ,_dgdcf );_cbd .Color =_ecdg .Color ;_eea :=PixClr ;if _bdeb > 0{_eea =PixSet ;};_ffgg :=_cbd .RasterOperation (0,0,_gcb ,_dgdcf ,_eea ,nil ,0,0);if _ffgg !=nil {return nil ,_c .Wrap (_ffgg ,_becf ,"\u006c\u0065\u0066\u0074");};_ffgg =_cbd .RasterOperation (_adge -_cae ,0,_cae ,_dgdcf ,_eea ,nil ,0,0);
if _ffgg !=nil {return nil ,_c .Wrap (_ffgg ,_becf ,"\u0072\u0069\u0067h\u0074");};_ffgg =_cbd .RasterOperation (0,0,_adge ,_bfc ,_eea ,nil ,0,0);if _ffgg !=nil {return nil ,_c .Wrap (_ffgg ,_becf ,"\u0074\u006f\u0070");};_ffgg =_cbd .RasterOperation (0,_dgdcf -_edac ,_adge ,_edac ,_eea ,nil ,0,0);
if _ffgg !=nil {return nil ,_c .Wrap (_ffgg ,_becf ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_ffgg =_cbd .RasterOperation (_gcb ,_bfc ,_fbda ,_fga ,PixSrc ,_ecdg ,0,0);if _ffgg !=nil {return nil ,_c .Wrap (_ffgg ,_becf ,"\u0063\u006f\u0070\u0079");};return _cbd ,nil ;
};func (_agaff *Bitmap )connComponentsBitmapsBB (_cbee *Bitmaps ,_acb int )(_gabe *Boxes ,_egcf error ){const _cdfb ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";if _acb !=4&&_acb !=8{return nil ,_c .Error (_cdfb ,"\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 _cbee ==nil {return nil ,_c .Error (_cdfb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if len (_cbee .Values )> 0{return nil ,_c .Error (_cdfb ,"\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 _agaff .Zero (){return &Boxes {},nil ;};var (_aafff ,_effd ,_cbaag ,_baeg *Bitmap ;);_agaff .setPadBits (0);if _aafff ,_egcf =_fce (nil ,_agaff );_egcf !=nil {return nil ,_c .Wrap (_egcf ,_cdfb ,"\u0062\u006d\u0031");};if _effd ,_egcf =_fce (nil ,_agaff );
_egcf !=nil {return nil ,_c .Wrap (_egcf ,_cdfb ,"\u0062\u006d\u0032");};_fbdca :=&_bf .Stack {};_fbdca .Aux =&_bf .Stack {};_gabe =&Boxes {};var (_eag ,_ffc int ;_egdb _fc .Point ;_adfa bool ;_deea *_fc .Rectangle ;);for {if _egdb ,_adfa ,_egcf =_aafff .nextOnPixel (_eag ,_ffc );
_egcf !=nil {return nil ,_c .Wrap (_egcf ,_cdfb ,"");};if !_adfa {break ;};if _deea ,_egcf =_eggg (_aafff ,_fbdca ,_egdb .X ,_egdb .Y ,_acb );_egcf !=nil {return nil ,_c .Wrap (_egcf ,_cdfb ,"");};if _egcf =_gabe .Add (_deea );_egcf !=nil {return nil ,_c .Wrap (_egcf ,_cdfb ,"");
};if _cbaag ,_egcf =_aafff .clipRectangle (_deea ,nil );_egcf !=nil {return nil ,_c .Wrap (_egcf ,_cdfb ,"\u0062\u006d\u0033");};if _baeg ,_egcf =_effd .clipRectangle (_deea ,nil );_egcf !=nil {return nil ,_c .Wrap (_egcf ,_cdfb ,"\u0062\u006d\u0034");
};if _ ,_egcf =_fac (_cbaag ,_cbaag ,_baeg );_egcf !=nil {return nil ,_c .Wrap (_egcf ,_cdfb ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");};if _egcf =_effd .RasterOperation (_deea .Min .X ,_deea .Min .Y ,_deea .Dx (),_deea .Dy (),PixSrcXorDst ,_cbaag ,0,0);
_egcf !=nil {return nil ,_c .Wrap (_egcf ,_cdfb ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_cbee .AddBitmap (_cbaag );_eag =_egdb .X ;_ffc =_egdb .Y ;};_cbee .Boxes =*_gabe ;return _gabe ,nil ;};func MakePixelCentroidTab8 ()[]int {return _gbfb ()};
func (_gfeac *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _egbff ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";_cbea ,_bggbg :=_gfeac .selectByIndexes (idx );
if _bggbg !=nil {return nil ,_c .Wrap (_bggbg ,_egbff ,"");};return _cbea ,nil ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func _ad (_efab ,_fd *Bitmap ,_caf int ,_bde []byte ,_dgg int )(_abe error ){const _faeb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";
var (_aa ,_dac ,_gcdc ,_caa ,_bfe ,_ecg ,_cff ,_ggg int ;_acgg ,_aad ,_gebf ,_dae uint32 ;_bad ,_abd byte ;_feb uint16 ;);_adg :=make ([]byte ,4);_ffg :=make ([]byte ,4);for _gcdc =0;_gcdc < _efab .Height -1;_gcdc ,_caa =_gcdc +2,_caa +1{_aa =_gcdc *_efab .RowStride ;
_dac =_caa *_fd .RowStride ;for _bfe ,_ecg =0,0;_bfe < _dgg ;_bfe ,_ecg =_bfe +4,_ecg +1{for _cff =0;_cff < 4;_cff ++{_ggg =_aa +_bfe +_cff ;if _ggg <=len (_efab .Data )-1&&_ggg < _aa +_efab .RowStride {_adg [_cff ]=_efab .Data [_ggg ];}else {_adg [_cff ]=0x00;
};_ggg =_aa +_efab .RowStride +_bfe +_cff ;if _ggg <=len (_efab .Data )-1&&_ggg < _aa +(2*_efab .RowStride ){_ffg [_cff ]=_efab .Data [_ggg ];}else {_ffg [_cff ]=0x00;};};_acgg =_d .BigEndian .Uint32 (_adg );_aad =_d .BigEndian .Uint32 (_ffg );_gebf =_acgg &_aad ;
_gebf |=_gebf <<1;_dae =_acgg |_aad ;_dae &=_dae <<1;_aad =_gebf |_dae ;_aad &=0xaaaaaaaa;_acgg =_aad |(_aad <<7);_bad =byte (_acgg >>24);_abd =byte ((_acgg >>8)&0xff);_ggg =_dac +_ecg ;if _ggg +1==len (_fd .Data )-1||_ggg +1>=_dac +_fd .RowStride {if _abe =_fd .SetByte (_ggg ,_bde [_bad ]);
_abe !=nil {return _c .Wrapf (_abe ,_faeb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_ggg );};}else {_feb =(uint16 (_bde [_bad ])<<8)|uint16 (_bde [_abd ]);if _abe =_fd .setTwoBytes (_ggg ,_feb );_abe !=nil {return _c .Wrapf (_abe ,_faeb ,"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",_ggg );
};_ecg ++;};};};return nil ;};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _feg ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_bgd :=_gdf (width ,height );_bgd .Data =data ;if len (data )< height *_bgd .RowStride {return nil ,_c .Errorf (_feg ,"\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 *_bgd .RowStride );
};return _bgd ,nil ;};func TstImageBitmap ()*Bitmap {return _dgff .Copy ()};func Rect (x ,y ,w ,h int )(*_fc .Rectangle ,error ){const _afgb ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";if x < 0{w +=x ;x =0;if w <=0{return nil ,_c .Errorf (_afgb ,"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 ,_c .Error (_afgb ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_dfac :=_fc .Rect (x ,y ,x +w ,y +h );return &_dfac ,nil ;
};func TstImageBitmapInverseData ()[]byte {_gfcb :=_dgff .Copy ();_gfcb .InverseData ();return _gfcb .Data ;};type byWidth Bitmaps ;func (_ccgg CombinationOperator )String ()string {var _befg string ;switch _ccgg {case CmbOpOr :_befg ="\u004f\u0052";case CmbOpAnd :_befg ="\u0041\u004e\u0044";
case CmbOpXor :_befg ="\u0058\u004f\u0052";case CmbOpXNor :_befg ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_befg ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_befg ="\u004e\u004f\u0054";};return _befg ;};func (_cebfb *Bitmaps )SortByHeight (){_accfa :=(*byHeight )(_cebfb );
_f .Sort (_accfa )};var _gaaa =[5]int {1,2,3,0,4};func (_eace *Bitmap )GetPixel (x ,y int )bool {_fffa :=_eace .GetByteIndex (x ,y );_effb :=_eace .GetBitOffset (x );_egg :=uint (7-_effb );if _fffa > len (_eace .Data )-1{_g .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 ,_eace );
return false ;};if (_eace .Data [_fffa ]>>_egg )&0x01>=1{return true ;};return false ;};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func (_cbf *Bitmap )setFourBytes (_fed int ,_aeba uint32 )error {if _fed +3> len (_cbf .Data )-1{return _c .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",_fed );
};_cbf .Data [_fed ]=byte ((_aeba &0xff000000)>>24);_cbf .Data [_fed +1]=byte ((_aeba &0xff0000)>>16);_cbf .Data [_fed +2]=byte ((_aeba &0xff00)>>8);_cbf .Data [_fed +3]=byte (_aeba &0xff);return nil ;};func (_eabfb *ClassedPoints )SortByY (){_eabfb ._aagf =_eabfb .ySortFunction ();
_f .Sort (_eabfb )};func _dce (_cef ,_cg *Bitmap ,_dfa int ,_bffb []byte ,_dgb int )(_eef error ){const _fbg ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";var (_cee ,_acdf ,_gbe ,_cab ,_ced ,_gag ,_ged ,_gfa int ;
_cdd ,_bffa ,_bed ,_dff uint32 ;_ada ,_eab byte ;_afc uint16 ;);_gdb :=make ([]byte ,4);_dfgc :=make ([]byte ,4);for _gbe =0;_gbe < _cef .Height -1;_gbe ,_cab =_gbe +2,_cab +1{_cee =_gbe *_cef .RowStride ;_acdf =_cab *_cg .RowStride ;for _ced ,_gag =0,0;
_ced < _dgb ;_ced ,_gag =_ced +4,_gag +1{for _ged =0;_ged < 4;_ged ++{_gfa =_cee +_ced +_ged ;if _gfa <=len (_cef .Data )-1&&_gfa < _cee +_cef .RowStride {_gdb [_ged ]=_cef .Data [_gfa ];}else {_gdb [_ged ]=0x00;};_gfa =_cee +_cef .RowStride +_ced +_ged ;
if _gfa <=len (_cef .Data )-1&&_gfa < _cee +(2*_cef .RowStride ){_dfgc [_ged ]=_cef .Data [_gfa ];}else {_dfgc [_ged ]=0x00;};};_cdd =_d .BigEndian .Uint32 (_gdb );_bffa =_d .BigEndian .Uint32 (_dfgc );_bed =_cdd &_bffa ;_bed |=_bed <<1;_dff =_cdd |_bffa ;
_dff &=_dff <<1;_bffa =_bed &_dff ;_bffa &=0xaaaaaaaa;_cdd =_bffa |(_bffa <<7);_ada =byte (_cdd >>24);_eab =byte ((_cdd >>8)&0xff);_gfa =_acdf +_gag ;if _gfa +1==len (_cg .Data )-1||_gfa +1>=_acdf +_cg .RowStride {if _eef =_cg .SetByte (_gfa ,_bffb [_ada ]);
_eef !=nil {return _c .Wrapf (_eef ,_fbg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gfa );};}else {_afc =(uint16 (_bffb [_ada ])<<8)|uint16 (_bffb [_eab ]);if _eef =_cg .setTwoBytes (_gfa ,_afc );_eef !=nil {return _c .Wrapf (_eef ,_fbg ,"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",_gfa );
};_gag ++;};};};return nil ;};func _bafe (_fdc ,_ggae *Bitmap ,_aca int ,_gagd []byte ,_cbb int )(_cfaf error ){const _cca ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";
var (_affd ,_adf ,_bbb ,_aed ,_ddc ,_ebbb ,_bcb ,_bdf int ;_dad ,_bfb uint32 ;_fde ,_aecc byte ;_dee uint16 ;);_ccg :=make ([]byte ,4);_cfgg :=make ([]byte ,4);for _bbb =0;_bbb < _fdc .Height -1;_bbb ,_aed =_bbb +2,_aed +1{_affd =_bbb *_fdc .RowStride ;
_adf =_aed *_ggae .RowStride ;for _ddc ,_ebbb =0,0;_ddc < _cbb ;_ddc ,_ebbb =_ddc +4,_ebbb +1{for _bcb =0;_bcb < 4;_bcb ++{_bdf =_affd +_ddc +_bcb ;if _bdf <=len (_fdc .Data )-1&&_bdf < _affd +_fdc .RowStride {_ccg [_bcb ]=_fdc .Data [_bdf ];}else {_ccg [_bcb ]=0x00;
};_bdf =_affd +_fdc .RowStride +_ddc +_bcb ;if _bdf <=len (_fdc .Data )-1&&_bdf < _affd +(2*_fdc .RowStride ){_cfgg [_bcb ]=_fdc .Data [_bdf ];}else {_cfgg [_bcb ]=0x00;};};_dad =_d .BigEndian .Uint32 (_ccg );_bfb =_d .BigEndian .Uint32 (_cfgg );_bfb &=_dad ;
_bfb &=_bfb <<1;_bfb &=0xaaaaaaaa;_dad =_bfb |(_bfb <<7);_fde =byte (_dad >>24);_aecc =byte ((_dad >>8)&0xff);_bdf =_adf +_ebbb ;if _bdf +1==len (_ggae .Data )-1||_bdf +1>=_adf +_ggae .RowStride {_ggae .Data [_bdf ]=_gagd [_fde ];if _cfaf =_ggae .SetByte (_bdf ,_gagd [_fde ]);
_cfaf !=nil {return _c .Wrapf (_cfaf ,_cca ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_bdf );};}else {_dee =(uint16 (_gagd [_fde ])<<8)|uint16 (_gagd [_aecc ]);if _cfaf =_ggae .setTwoBytes (_bdf ,_dee );_cfaf !=nil {return _c .Wrapf (_cfaf ,_cca ,"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",_bdf );
};_ebbb ++;};};};return nil ;};func (_dbca *ClassedPoints )Less (i ,j int )bool {return _dbca ._aagf (i ,j )};func (_dcea *Bitmap )nextOnPixelLow (_gffd ,_cdaag ,_bga ,_bffdd ,_cge int )(_dgdcg _fc .Point ,_agd bool ,_bfed error ){const _fad ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";
var (_fcg int ;_cgg byte ;);_agaa :=_cge *_bga ;_gddd :=_agaa +(_bffdd /8);if _cgg ,_bfed =_dcea .GetByte (_gddd );_bfed !=nil {return _dgdcg ,false ,_c .Wrap (_bfed ,_fad ,"\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 _cgg !=0{_ccfe :=_bffdd -(_bffdd %8)+7;for _fcg =_bffdd ;_fcg <=_ccfe &&_fcg < _gffd ;_fcg ++{if _dcea .GetPixel (_fcg ,_cge ){_dgdcg .X =_fcg ;_dgdcg .Y =_cge ;return _dgdcg ,true ,nil ;};};};_fcda :=(_bffdd /8)+1;_fcg =8*_fcda ;var _eeff int ;for _gddd =_agaa +_fcda ;
_fcg < _gffd ;_gddd ,_fcg =_gddd +1,_fcg +8{if _cgg ,_bfed =_dcea .GetByte (_gddd );_bfed !=nil {return _dgdcg ,false ,_c .Wrap (_bfed ,_fad ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _cgg ==0{continue ;
};for _eeff =0;_eeff < 8&&_fcg < _gffd ;_eeff ,_fcg =_eeff +1,_fcg +1{if _dcea .GetPixel (_fcg ,_cge ){_dgdcg .X =_fcg ;_dgdcg .Y =_cge ;return _dgdcg ,true ,nil ;};};};for _dagg :=_cge +1;_dagg < _cdaag ;_dagg ++{_agaa =_dagg *_bga ;for _gddd ,_fcg =_agaa ,0;
_fcg < _gffd ;_gddd ,_fcg =_gddd +1,_fcg +8{if _cgg ,_bfed =_dcea .GetByte (_gddd );_bfed !=nil {return _dgdcg ,false ,_c .Wrap (_bfed ,_fad ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _cgg ==0{continue ;};
for _eeff =0;_eeff < 8&&_fcg < _gffd ;_eeff ,_fcg =_eeff +1,_fcg +1{if _dcea .GetPixel (_fcg ,_dagg ){_dgdcg .X =_fcg ;_dgdcg .Y =_dagg ;return _dgdcg ,true ,nil ;};};};};return _dgdcg ,false ,nil ;};func (_faf *Bitmap )GetChocolateData ()[]byte {if _faf .Color ==Vanilla {_faf .inverseData ();
};return _faf .Data ;};func (_gfdb *Bitmaps )SortByWidth (){_eacbc :=(*byWidth )(_gfdb );_f .Sort (_eacbc )};func (_bedbd *Bitmaps )selectByIndicator (_bdaa *_bf .NumSlice )(_eegac *Bitmaps ,_abae error ){const _cecd ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _bedbd ==nil {return nil ,_c .Error (_cecd ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _bdaa ==nil {return nil ,_c .Error (_cecd ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};if len (_bedbd .Values )==0{return _bedbd ,nil ;};if len (*_bdaa )!=len (_bedbd .Values ){return nil ,_c .Errorf (_cecd ,"\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 (*_bdaa ),len (_bedbd .Values ));
};var _gfga ,_ccca ,_gfad int ;for _ccca =0;_ccca < len (*_bdaa );_ccca ++{if _gfga ,_abae =_bdaa .GetInt (_ccca );_abae !=nil {return nil ,_c .Wrap (_abae ,_cecd ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _gfga ==1{_gfad ++;
};};if _gfad ==len (_bedbd .Values ){return _bedbd ,nil ;};_eegac =&Bitmaps {};_dcca :=len (_bedbd .Values )==len (_bedbd .Boxes );for _ccca =0;_ccca < len (*_bdaa );_ccca ++{if _gfga =int ((*_bdaa )[_ccca ]);_gfga ==0{continue ;};_eegac .Values =append (_eegac .Values ,_bedbd .Values [_ccca ]);
if _dcca {_eegac .Boxes =append (_eegac .Boxes ,_bedbd .Boxes [_ccca ]);};};return _eegac ,nil ;};func _gdf (_caae ,_ffdf int )*Bitmap {return &Bitmap {Width :_caae ,Height :_ffdf ,RowStride :(_caae +7)>>3};};const (_ LocationFilter =iota ;LocSelectWidth ;
LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func (_ddg *ClassedPoints )ySortFunction ()func (_caff int ,_gaag int )bool {return func (_face ,_ecfbb int )bool {return _ddg .YAtIndex (_face )< _ddg .YAtIndex (_ecfbb )};
};func (_egd *Bitmap )SetDefaultPixel (){for _decg :=range _egd .Data {_egd .Data [_decg ]=byte (0xff);};};func TstESymbol (t *_ag .T ,scale ...int )*Bitmap {_geecd ,_abfbd :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_b .NoError (t ,_abfbd );
return TstGetScaledSymbol (t ,_geecd ,scale ...);};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _cffe (src ,sequence ...);};func (_bcbb *Bitmap )SetByte (index int ,v byte )error {if index > len (_bcbb .Data )-1||index < 0{return _c .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 );
};_bcbb .Data [index ]=v ;return nil ;};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func TstImageBitmapData ()[]byte {return _dgff .Data };func _aeeg (_fgae *Bitmap ,_bagf ,_daead ,_fbefg ,_abdg int ,_eafb RasterOperator ,_ccfd *Bitmap ,_aeab ,_gde int )error {const _ddeda ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";
if _fgae ==nil {return _c .Error (_ddeda ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _eafb ==PixDst {return nil ;};switch _eafb {case PixClr ,PixSet ,PixNotDst :_ffbe (_fgae ,_bagf ,_daead ,_fbefg ,_abdg ,_eafb );
return nil ;};if _ccfd ==nil {_g .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 _c .Error (_ddeda ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ggbdg :=_afca (_fgae ,_bagf ,_daead ,_fbefg ,_abdg ,_eafb ,_ccfd ,_aeab ,_gde );_ggbdg !=nil {return _c .Wrap (_ggbdg ,_ddeda ,"");
};return nil ;};func (_aaaf *Bitmap )connComponentsBB (_daee int )(_afec *Boxes ,_ebcgb error ){const _ageg ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";if _daee !=4&&_daee !=8{return nil ,_c .Error (_ageg ,"\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 _aaaf .Zero (){return &Boxes {},nil ;};_aaaf .setPadBits (0);_dbea ,_ebcgb :=_fce (nil ,_aaaf );if _ebcgb !=nil {return nil ,_c .Wrap (_ebcgb ,_ageg ,"\u0062\u006d\u0031");};_bfbdd :=&_bf .Stack {};_bfbdd .Aux =&_bf .Stack {};_afec =&Boxes {};var (_eedb ,_becd int ;
_dgbd _fc .Point ;_bbgf bool ;_accb *_fc .Rectangle ;);for {if _dgbd ,_bbgf ,_ebcgb =_dbea .nextOnPixel (_becd ,_eedb );_ebcgb !=nil {return nil ,_c .Wrap (_ebcgb ,_ageg ,"");};if !_bbgf {break ;};if _accb ,_ebcgb =_eggg (_dbea ,_bfbdd ,_dgbd .X ,_dgbd .Y ,_daee );
_ebcgb !=nil {return nil ,_c .Wrap (_ebcgb ,_ageg ,"");};if _ebcgb =_afec .Add (_accb );_ebcgb !=nil {return nil ,_c .Wrap (_ebcgb ,_ageg ,"");};_becd =_dgbd .X ;_eedb =_dgbd .Y ;};return _afec ,nil ;};var _ _f .Interface =&ClassedPoints {};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _aeeg (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};func (_aefe Points )GetIntY (i int )(int ,error ){if i >=len (_aefe ){return 0,_c .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 (_aefe [i ].Y ),nil ;};type byHeight Bitmaps ;func (_dffe *Bitmap )equivalent (_fdd *Bitmap )bool {if _dffe ==_fdd {return true ;};if !_dffe .SizesEqual (_fdd ){return false ;};_eec :=_dafe (_dffe ,_fdd ,CmbOpXor );_effg :=_dffe .countPixels ();
_deac :=int (0.25*float32 (_effg ));if _eec .thresholdPixelSum (_deac ){return false ;};var (_gbg [9][9]int ;_feba [18][9]int ;_gbc [9][18]int ;_cbad int ;_eggf int ;);_geac :=9;_bab :=_dffe .Height /_geac ;_gcdce :=_dffe .Width /_geac ;_cebf ,_ebc :=_bab /2,_gcdce /2;
if _bab < _gcdce {_cebf =_gcdce /2;_ebc =_bab /2;};_aebb :=float64 (_cebf )*float64 (_ebc )*_ac .Pi ;_fcc :=int (float64 (_bab *_gcdce /2)*0.9);_cdaad :=int (float64 (_gcdce *_bab /2)*0.9);for _fcdc :=0;_fcdc < _geac ;_fcdc ++{_cbdc :=_gcdce *_fcdc +_cbad ;
var _eca int ;if _fcdc ==_geac -1{_cbad =0;_eca =_dffe .Width ;}else {_eca =_cbdc +_gcdce ;if ((_dffe .Width -_cbad )%_geac )> 0{_cbad ++;_eca ++;};};for _cbdcf :=0;_cbdcf < _geac ;_cbdcf ++{_cagf :=_bab *_cbdcf +_eggf ;var _adag int ;if _cbdcf ==_geac -1{_eggf =0;
_adag =_dffe .Height ;}else {_adag =_cagf +_bab ;if (_dffe .Height -_eggf )%_geac > 0{_eggf ++;_adag ++;};};var _geec ,_ecff ,_ecec ,_dca int ;_fge :=(_cbdc +_eca )/2;_cdae :=(_cagf +_adag )/2;for _dfdf :=_cbdc ;_dfdf < _eca ;_dfdf ++{for _gce :=_cagf ;
_gce < _adag ;_gce ++{if _eec .GetPixel (_dfdf ,_gce ){if _dfdf < _fge {_geec ++;}else {_ecff ++;};if _gce < _cdae {_dca ++;}else {_ecec ++;};};};};_gbg [_fcdc ][_cbdcf ]=_geec +_ecff ;_feba [_fcdc *2][_cbdcf ]=_geec ;_feba [_fcdc *2+1][_cbdcf ]=_ecff ;
_gbc [_fcdc ][_cbdcf *2]=_dca ;_gbc [_fcdc ][_cbdcf *2+1]=_ecec ;};};for _dedd :=0;_dedd < _geac *2-1;_dedd ++{for _agb :=0;_agb < (_geac -1);_agb ++{var _bcga int ;for _dag :=0;_dag < 2;_dag ++{for _fca :=0;_fca < 2;_fca ++{_bcga +=_feba [_dedd +_dag ][_agb +_fca ];
};};if _bcga > _cdaad {return false ;};};};for _edfg :=0;_edfg < (_geac -1);_edfg ++{for _gff :=0;_gff < ((_geac *2)-1);_gff ++{var _eeg int ;for _ace :=0;_ace < 2;_ace ++{for _bbf :=0;_bbf < 2;_bbf ++{_eeg +=_gbc [_edfg +_ace ][_gff +_bbf ];};};if _eeg > _fcc {return false ;
};};};for _bcbe :=0;_bcbe < (_geac -2);_bcbe ++{for _egdg :=0;_egdg < (_geac -2);_egdg ++{var _gcdcc ,_afce int ;for _ddeb :=0;_ddeb < 3;_ddeb ++{for _gcba :=0;_gcba < 3;_gcba ++{if _ddeb ==_gcba {_gcdcc +=_gbg [_bcbe +_ddeb ][_egdg +_gcba ];};if (2-_ddeb )==_gcba {_afce +=_gbg [_bcbe +_ddeb ][_egdg +_gcba ];
};};};if _gcdcc > _cdaad ||_afce > _cdaad {return false ;};};};for _acea :=0;_acea < (_geac -1);_acea ++{for _bcbd :=0;_bcbd < (_geac -1);_bcbd ++{var _abed int ;for _fcaa :=0;_fcaa < 2;_fcaa ++{for _ebg :=0;_ebg < 2;_ebg ++{_abed +=_gbg [_acea +_fcaa ][_bcbd +_ebg ];
};};if float64 (_abed )> _aebb {return false ;};};};return true ;};func (_caac MorphProcess )getWidthHeight ()(_bdcfd ,_fggb int ){return _caac .Arguments [0],_caac .Arguments [1];};func TstDSymbol (t *_ag .T ,scale ...int )*Bitmap {_fcfc ,_efcea :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});
_b .NoError (t ,_efcea );return TstGetScaledSymbol (t ,_fcfc ,scale ...);};func init (){const _edede ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_bgca =New (50,40);var _faebd error ;
_bgca ,_faebd =_bgca .AddBorder (2,1);if _faebd !=nil {panic (_c .Wrap (_faebd ,_edede ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_dgff ,_faebd =NewWithData (50,22,_fbcag );if _faebd !=nil {panic (_c .Wrap (_faebd ,_edede ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
};};func (_fgab *Bitmaps )GetBox (i int )(*_fc .Rectangle ,error ){const _caacd ="\u0047\u0065\u0074\u0042\u006f\u0078";if _fgab ==nil {return nil ,_c .Error (_caacd ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");
};if i > len (_fgab .Boxes )-1{return nil ,_c .Errorf (_caacd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _fgab .Boxes [i ],nil ;};func (_ggef *Bitmaps )String ()string {_ffeb :=_ca .Builder {};
for _ ,_geed :=range _ggef .Values {_ffeb .WriteString (_geed .String ());_ffeb .WriteRune ('\n');};return _ffeb .String ();};func TstNSymbol (t *_ag .T ,scale ...int )*Bitmap {_bgad ,_bebbe :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_b .NoError (t ,_bebbe );
return TstGetScaledSymbol (t ,_bgad ,scale ...);};func TstWordBitmap (t *_ag .T ,scale ...int )*Bitmap {_ggec :=1;if len (scale )> 0{_ggec =scale [0];};_cdca :=3;_gbbba :=9+7+15+2*_cdca ;_bedc :=5+_cdca +5;_gedff :=New (_gbbba *_ggec ,_bedc *_ggec );_edggd :=&Bitmaps {};
var _ecggd *int ;_cdca *=_ggec ;_ggge :=0;_ecggd =&_ggge ;_gbacc :=0;_gcda :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_edggd ,_gcda ,_ecggd ,_gbacc ,1*_ggec );_gcda =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_edggd ,_gcda ,_ecggd ,_gbacc ,_cdca );_gcda =TstISymbol (t ,scale ...);
TstAddSymbol (t ,_edggd ,_gcda ,_ecggd ,_gbacc ,1*_ggec );_gcda =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_edggd ,_gcda ,_ecggd ,_gbacc ,_cdca );_gcda =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_edggd ,_gcda ,_ecggd ,_gbacc ,1*_ggec );_gcda =TstOSymbol (t ,scale ...);
TstAddSymbol (t ,_edggd ,_gcda ,_ecggd ,_gbacc ,1*_ggec );_gcda =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_edggd ,_gcda ,_ecggd ,_gbacc ,0);*_ecggd =0;_gbacc =5*_ggec +_cdca ;_gcda =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_edggd ,_gcda ,_ecggd ,_gbacc ,1*_ggec );
_gcda =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_edggd ,_gcda ,_ecggd ,_gbacc ,_cdca );_gcda =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_edggd ,_gcda ,_ecggd ,_gbacc ,1*_ggec );_gcda =TstESymbol (t ,scale ...);TstAddSymbol (t ,_edggd ,_gcda ,_ecggd ,_gbacc ,1*_ggec );
_gcda =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_edggd ,_gcda ,_ecggd ,_gbacc ,1*_ggec );_gcda =TstESymbol (t ,scale ...);TstAddSymbol (t ,_edggd ,_gcda ,_ecggd ,_gbacc ,1*_ggec );_gcda =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_edggd ,_gcda ,_ecggd ,_gbacc ,0);
TstWriteSymbols (t ,_edggd ,_gedff );return _gedff ;};func (_bbaf *Boxes )Add (box *_fc .Rectangle )error {if _bbaf ==nil {return _c .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");
};*_bbaf =append (*_bbaf ,box );return nil ;};func (_cec *Bitmap )clearAll ()error {return _cec .RasterOperation (0,0,_cec .Width ,_cec .Height ,PixClr ,nil ,0,0);};const (Vanilla Color =iota ;Chocolate ;);func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _dbad (d ,s ,sel )};
func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _gbgd ,_effge int ;_cbaa :=src .RowStride -1;if x < 0{_effge =-x ;x =0;}else if x +src .Width > dst .Width {_cbaa -=src .Width +x -dst .Width ;};if y < 0{_gbgd =-y ;y =0;
_effge +=src .RowStride ;_cbaa +=src .RowStride ;}else if y +src .Height > dst .Height {_gbgd =src .Height +y -dst .Height ;};var (_ebcg int ;_daegg error ;);_adga :=x &0x07;_bggc :=8-_adga ;_fcdg :=src .Width &0x07;_baab :=_bggc -_fcdg ;_ffef :=_bggc &0x07!=0;
_acgd :=src .Width <=((_cbaa -_effge )<<3)+_bggc ;_agbc :=dst .GetByteIndex (x ,y );_fbca :=_gbgd +dst .Height ;if src .Height > _fbca {_ebcg =_fbca ;}else {_ebcg =src .Height ;};switch {case !_ffef :_daegg =_bcag (src ,dst ,_gbgd ,_ebcg ,_agbc ,_effge ,_cbaa ,op );
case _acgd :_daegg =_fbf (src ,dst ,_gbgd ,_ebcg ,_agbc ,_effge ,_cbaa ,_baab ,_adga ,_bggc ,op );default:_daegg =_bfbd (src ,dst ,_gbgd ,_ebcg ,_agbc ,_effge ,_cbaa ,_baab ,_adga ,_bggc ,op ,_fcdg );};return _daegg ;};type SizeComparison int ;func (_dfge *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _gdff ="\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 >=_dfge .IntSlice .Size (){return 0,_c .Errorf (_gdff ,"\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 (_dfge .XAtIndex (i )),nil ;};func TstRSymbol (t *_ag .T ,scale ...int )*Bitmap {_dega ,_dcdc :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});_b .NoError (t ,_dcdc );return TstGetScaledSymbol (t ,_dega ,scale ...);};func _ffbe (_dcaa *Bitmap ,_agg ,_bbab ,_ecefg ,_dage int ,_bcfd RasterOperator ){if _agg < 0{_ecefg +=_agg ;
_agg =0;};_addf :=_agg +_ecefg -_dcaa .Width ;if _addf > 0{_ecefg -=_addf ;};if _bbab < 0{_dage +=_bbab ;_bbab =0;};_dffee :=_bbab +_dage -_dcaa .Height ;if _dffee > 0{_dage -=_dffee ;};if _ecefg <=0||_dage <=0{return ;};if (_agg &7)==0{_adggg (_dcaa ,_agg ,_bbab ,_ecefg ,_dage ,_bcfd );
}else {_gfge (_dcaa ,_agg ,_bbab ,_ecefg ,_dage ,_bcfd );};};func (_cdeec *Bitmap )countPixels ()int {var (_edg int ;_acac uint8 ;_ead byte ;_abge int ;);_daef :=_cdeec .RowStride ;_ddaa :=uint (_cdeec .Width &0x07);if _ddaa !=0{_acac =uint8 ((0xff<<(8-_ddaa ))&0xff);
_daef --;};for _bce :=0;_bce < _cdeec .Height ;_bce ++{for _abge =0;_abge < _daef ;_abge ++{_ead =_cdeec .Data [_bce *_cdeec .RowStride +_abge ];_edg +=int (_dfd [_ead ]);};if _ddaa !=0{_edg +=int (_dfd [_cdeec .Data [_bce *_cdeec .RowStride +_abge ]&_acac ]);
};};return _edg ;};type SizeSelection int ;func (_abf *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_ceb bool ,_beg error ){const _gaac ="\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 =_cdaf ();};_gcce :=_abf .Width >>3;_daab :=_abf .Width &7;_bca :=byte (0xff<<uint (8-_daab ));var (_beae ,_cdee ,_efc ,_dgdc int ;_fdcf byte ;);for _beae =0;_beae < _abf .Height ;_beae ++{_efc =_abf .RowStride *_beae ;for _cdee =0;
_cdee < _gcce ;_cdee ++{_fdcf ,_beg =_abf .GetByte (_efc +_cdee );if _beg !=nil {return false ,_c .Wrap (_beg ,_gaac ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_dgdc +=tab8 [_fdcf ];};if _daab !=0{_fdcf ,_beg =_abf .GetByte (_efc +_cdee );if _beg !=nil {return false ,_c .Wrap (_beg ,_gaac ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");
};_fdcf &=_bca ;_dgdc +=tab8 [_fdcf ];};if _dgdc > thresh {return true ,nil ;};};return _ceb ,nil ;};func _cffe (_bdcc *Bitmap ,_acbg ...MorphProcess )(_beeg *Bitmap ,_abfb error ){const _ebbdd ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";
if _bdcc ==nil {return nil ,_c .Error (_ebbdd ,"\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 (_acbg )==0{return nil ,_c .Error (_ebbdd ,"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 _abfb =_afda (_acbg ...);
_abfb !=nil {return nil ,_c .Wrap (_abfb ,_ebbdd ,"");};var _afdd ,_abfe ,_ffdg int ;_beeg =_bdcc .Copy ();for _ ,_ffff :=range _acbg {switch _ffff .Operation {case MopDilation :_afdd ,_abfe =_ffff .getWidthHeight ();_beeg ,_abfb =DilateBrick (nil ,_beeg ,_afdd ,_abfe );
if _abfb !=nil {return nil ,_c .Wrap (_abfb ,_ebbdd ,"");};case MopErosion :_afdd ,_abfe =_ffff .getWidthHeight ();_beeg ,_abfb =_edfc (nil ,_beeg ,_afdd ,_abfe );if _abfb !=nil {return nil ,_c .Wrap (_abfb ,_ebbdd ,"");};case MopOpening :_afdd ,_abfe =_ffff .getWidthHeight ();
_beeg ,_abfb =_cadb (nil ,_beeg ,_afdd ,_abfe );if _abfb !=nil {return nil ,_c .Wrap (_abfb ,_ebbdd ,"");};case MopClosing :_afdd ,_abfe =_ffff .getWidthHeight ();_beeg ,_abfb =_dga (nil ,_beeg ,_afdd ,_abfe );if _abfb !=nil {return nil ,_c .Wrap (_abfb ,_ebbdd ,"");
};case MopRankBinaryReduction :_beeg ,_abfb =_eg (_beeg ,_ffff .Arguments ...);if _abfb !=nil {return nil ,_c .Wrap (_abfb ,_ebbdd ,"");};case MopReplicativeBinaryExpansion :_beeg ,_abfb =_gfg (_beeg ,_ffff .Arguments [0]);if _abfb !=nil {return nil ,_c .Wrap (_abfb ,_ebbdd ,"");
};case MopAddBorder :_ffdg =_ffff .Arguments [0];_beeg ,_abfb =_beeg .AddBorder (_ffdg ,0);if _abfb !=nil {return nil ,_c .Wrap (_abfb ,_ebbdd ,"");};default:return nil ,_c .Error (_ebbdd ,"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 _ffdg > 0{_beeg ,_abfb =_beeg .RemoveBorder (_ffdg );if _abfb !=nil {return nil ,_c .Wrap (_abfb ,_ebbdd ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _beeg ,nil ;};func Centroids (bms []*Bitmap )(*Points ,error ){_fgffg :=make ([]Point ,len (bms ));
_ceaa :=_gbfb ();_ecef :=_cdaf ();var _fegcfc error ;for _aega ,_bfd :=range bms {_fgffg [_aega ],_fegcfc =_bfd .centroid (_ceaa ,_ecef );if _fegcfc !=nil {return nil ,_fegcfc ;};};_agag :=Points (_fgffg );return &_agag ,nil ;};func New (width ,height int )*Bitmap {_daa :=_gdf (width ,height );
_daa .Data =make ([]byte ,height *_daa .RowStride );return _daa ;};func (_cdc *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _cdc .Copy (),nil ;};_dfc ,_ffee :=_cdc .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );
if _ffee !=nil {return nil ,_c .Wrap (_ffee ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _dfc ,nil ;};func _adggg (_eefa *Bitmap ,_gbeb ,_caeda int ,_aefa ,_cdgb int ,_edcb RasterOperator ){var (_baea int ;_cafe byte ;_adage ,_gdag int ;
_gccd int ;);_ggfd :=_aefa >>3;_acgdf :=_aefa &7;if _acgdf > 0{_cafe =_bcgeb [_acgdf ];};_baea =_eefa .RowStride *_caeda +(_gbeb >>3);switch _edcb {case PixClr :for _adage =0;_adage < _cdgb ;_adage ++{_gccd =_baea +_adage *_eefa .RowStride ;for _gdag =0;
_gdag < _ggfd ;_gdag ++{_eefa .Data [_gccd ]=0x0;_gccd ++;};if _acgdf > 0{_eefa .Data [_gccd ]=_cdbf (_eefa .Data [_gccd ],0x0,_cafe );};};case PixSet :for _adage =0;_adage < _cdgb ;_adage ++{_gccd =_baea +_adage *_eefa .RowStride ;for _gdag =0;_gdag < _ggfd ;
_gdag ++{_eefa .Data [_gccd ]=0xff;_gccd ++;};if _acgdf > 0{_eefa .Data [_gccd ]=_cdbf (_eefa .Data [_gccd ],0xff,_cafe );};};case PixNotDst :for _adage =0;_adage < _cdgb ;_adage ++{_gccd =_baea +_adage *_eefa .RowStride ;for _gdag =0;_gdag < _ggfd ;_gdag ++{_eefa .Data [_gccd ]=^_eefa .Data [_gccd ];
_gccd ++;};if _acgdf > 0{_eefa .Data [_gccd ]=_cdbf (_eefa .Data [_gccd ],^_eefa .Data [_gccd ],_cafe );};};};};const _faad =5000;