2021-12-14 01:08:28 +00:00

662 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 (_c "encoding/binary";_e "github.com/stretchr/testify/require";_f "github.com/unidoc/unipdf/v3/common";_ec "github.com/unidoc/unipdf/v3/internal/bitwise";_ed "github.com/unidoc/unipdf/v3/internal/imageutil";_gf "github.com/unidoc/unipdf/v3/internal/jbig2/basic";
_g "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_bd "image";_ef "math";_ga "sort";_be "strings";_bg "testing";);type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;
};func _ebge (_edaa ,_gbf *Bitmap ,_ggbc ,_gafe ,_daecd ,_fbc ,_eed int ,_aba CombinationOperator )error {var _gddg int ;_bgf :=func (){_gddg ++;_daecd +=_gbf .RowStride ;_fbc +=_edaa .RowStride ;_eed +=_edaa .RowStride };for _gddg =_ggbc ;_gddg < _gafe ;
_bgf (){_gafa :=_daecd ;for _bcdb :=_fbc ;_bcdb <=_eed ;_bcdb ++{_ffbe ,_aecd :=_gbf .GetByte (_gafa );if _aecd !=nil {return _aecd ;};_fbfa ,_aecd :=_edaa .GetByte (_bcdb );if _aecd !=nil {return _aecd ;};if _aecd =_gbf .SetByte (_gafa ,_dbae (_ffbe ,_fbfa ,_aba ));
_aecd !=nil {return _aecd ;};_gafa ++;};};return nil ;};func _bceb (_bcadf ...MorphProcess )(_bbbg error ){const _gbdd ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";var _gbea ,_acfec int ;for _abcf ,_fdgbe :=range _bcadf {if _bbbg =_fdgbe .verify (_abcf ,&_gbea ,&_acfec );
_bbbg !=nil {return _g .Wrap (_bbbg ,_gbdd ,"");};};if _acfec !=0&&_gbea !=0{return _g .Error (_gbdd ,"\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 TstAddSymbol (t *_bg .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_ggcgb :=_bd .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_ggcgb );*x +=sym .Width +space ;};func _aabc (_cfaba ,_gdef *Bitmap ,_fgfg ,_edba ,_gdadg ,_gabb ,_faaf ,_aecc ,_ffdb ,_gecf int ,_fbee CombinationOperator ,_cfcd int )error {var _eedd int ;
_cbed :=func (){_eedd ++;_gdadg +=_gdef .RowStride ;_gabb +=_cfaba .RowStride ;_faaf +=_cfaba .RowStride };for _eedd =_fgfg ;_eedd < _edba ;_cbed (){var _dbdb uint16 ;_bede :=_gdadg ;for _geff :=_gabb ;_geff <=_faaf ;_geff ++{_bcdfe ,_gfabg :=_gdef .GetByte (_bede );
if _gfabg !=nil {return _gfabg ;};_dgab ,_gfabg :=_cfaba .GetByte (_geff );if _gfabg !=nil {return _gfabg ;};_dbdb =(_dbdb |(uint16 (_dgab )&0xff))<<uint (_gecf );_dgab =byte (_dbdb >>8);if _gfabg =_gdef .SetByte (_bede ,_dbae (_bcdfe ,_dgab ,_fbee ));
_gfabg !=nil {return _gfabg ;};_bede ++;_dbdb <<=uint (_ffdb );if _geff ==_faaf {_dgab =byte (_dbdb >>(8-uint8 (_gecf )));if _cfcd !=0{_dgab =_ccaag (uint (8+_aecc ),_dgab );};_bcdfe ,_gfabg =_gdef .GetByte (_bede );if _gfabg !=nil {return _gfabg ;};if _gfabg =_gdef .SetByte (_bede ,_dbae (_bcdfe ,_dgab ,_fbee ));
_gfabg !=nil {return _gfabg ;};};};};return nil ;};func (_gdf *Bitmap )ToImage ()_bd .Image {_bcec ,_gdfc :=_ed .NewImage (_gdf .Width ,_gdf .Height ,1,1,_gdf .Data ,nil ,nil );if _gdfc !=nil {_f .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",_gdfc );
};return _bcec ;};func _fg (_bdg ,_cca *Bitmap )(_fcb error ){const _beg ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_df :=_cca .RowStride ;_eb :=_bdg .RowStride ;_ea :=_cca .RowStride *4-_bdg .RowStride ;
var (_gac ,_gab byte ;_ca uint32 ;_cb ,_cd ,_cg ,_edb ,_dee ,_cfb ,_eg int ;);for _cg =0;_cg < _cca .Height ;_cg ++{_cb =_cg *_df ;_cd =4*_cg *_eb ;for _edb =0;_edb < _df ;_edb ++{_gac =_cca .Data [_cb +_edb ];_ca =_fggd [_gac ];_cfb =_cd +_edb *4;if _ea !=0&&(_edb +1)*4> _bdg .RowStride {for _dee =_ea ;
_dee > 0;_dee --{_gab =byte ((_ca >>uint (_dee *8))&0xff);_eg =_cfb +(_ea -_dee );if _fcb =_bdg .SetByte (_eg ,_gab );_fcb !=nil {return _g .Wrapf (_fcb ,_beg ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_dee );
};};}else if _fcb =_bdg .setFourBytes (_cfb ,_ca );_fcb !=nil {return _g .Wrap (_fcb ,_beg ,"");};if _fcb =_bdg .setFourBytes (_cd +_edb *4,_fggd [_cca .Data [_cb +_edb ]]);_fcb !=nil {return _g .Wrap (_fcb ,_beg ,"");};};for _dee =1;_dee < 4;_dee ++{for _edb =0;
_edb < _eb ;_edb ++{if _fcb =_bdg .SetByte (_cd +_dee *_eb +_edb ,_bdg .Data [_cd +_edb ]);_fcb !=nil {return _g .Wrapf (_fcb ,_beg ,"\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",_dee ,_edb );
};};};};return nil ;};func (_ddc *Bitmap )GetChocolateData ()[]byte {if _ddc .Color ==Vanilla {_ddc .inverseData ();};return _ddc .Data ;};func (_gaage *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_age bool ,_dag error ){const _bbca ="\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 =_aeef ();};_dabb :=_gaage .Width >>3;_ccae :=_gaage .Width &7;_gaaga :=byte (0xff<<uint (8-_ccae ));var (_gfcf ,_bgae ,_gfd ,_bgba int ;_ffcgd byte ;);for _gfcf =0;_gfcf < _gaage .Height ;_gfcf ++{_gfd =_gaage .RowStride *_gfcf ;for _bgae =0;
_bgae < _dabb ;_bgae ++{_ffcgd ,_dag =_gaage .GetByte (_gfd +_bgae );if _dag !=nil {return false ,_g .Wrap (_dag ,_bbca ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_bgba +=tab8 [_ffcgd ];};if _ccae !=0{_ffcgd ,_dag =_gaage .GetByte (_gfd +_bgae );
if _dag !=nil {return false ,_g .Wrap (_dag ,_bbca ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");};_ffcgd &=_gaaga ;_bgba +=tab8 [_ffcgd ];};if _bgba > thresh {return true ,nil ;};};return _age ,nil ;};func _egfc (_ege ,_gfde int )int {if _ege > _gfde {return _ege ;
};return _gfde ;};func (_deee *Boxes )selectWithIndicator (_bfdb *_gf .NumSlice )(_dcdg *Boxes ,_fgca error ){const _abba ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _deee ==nil {return nil ,_g .Error (_abba ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");
};if _bfdb ==nil {return nil ,_g .Error (_abba ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_bfdb )!=len (*_deee ){return nil ,_g .Error (_abba ,"\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 _dgbff ,_fgbe int ;for _eafg :=0;_eafg < len (*_bfdb );_eafg ++{if _dgbff ,_fgca =_bfdb .GetInt (_eafg );_fgca !=nil {return nil ,_g .Wrap (_fgca ,_abba ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _dgbff ==1{_fgbe ++;
};};if _fgbe ==len (*_deee ){return _deee ,nil ;};_gccc :=Boxes {};for _ggff :=0;_ggff < len (*_bfdb );_ggff ++{_dgbff =int ((*_bfdb )[_ggff ]);if _dgbff ==0{continue ;};_gccc =append (_gccc ,(*_deee )[_ggff ]);};_dcdg =&_gccc ;return _dcdg ,nil ;};func (_baeb Points )Size ()int {return len (_baeb )};
func _cafe (_bfad *Bitmap ,_agbbg ,_fafe ,_aacg ,_dfae int ,_eccg RasterOperator ,_bgbc *Bitmap ,_begcb ,_edae int )error {var (_gaadd bool ;_aefdg bool ;_badc int ;_afea int ;_dgff int ;_badf bool ;_fbfb byte ;_dedaf int ;_egcdc int ;_faag int ;_gdedd ,_fbfgc int ;
);_cgegf :=8-(_agbbg &7);_ccgd :=_eefe [_cgegf ];_ddef :=_bfad .RowStride *_fafe +(_agbbg >>3);_ddd :=_bgbc .RowStride *_edae +(_begcb >>3);if _aacg < _cgegf {_gaadd =true ;_ccgd &=_eecde [8-_cgegf +_aacg ];};if !_gaadd {_badc =(_aacg -_cgegf )>>3;if _badc > 0{_aefdg =true ;
_afea =_ddef +1;_dgff =_ddd +1;};};_dedaf =(_agbbg +_aacg )&7;if !(_gaadd ||_dedaf ==0){_badf =true ;_fbfb =_eecde [_dedaf ];_egcdc =_ddef +1+_badc ;_faag =_ddd +1+_badc ;};switch _eccg {case PixSrc :for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_ddef ]=_cfbad (_bfad .Data [_ddef ],_bgbc .Data [_ddd ],_ccgd );
_ddef +=_bfad .RowStride ;_ddd +=_bgbc .RowStride ;};if _aefdg {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{for _fbfgc =0;_fbfgc < _badc ;_fbfgc ++{_bfad .Data [_afea +_fbfgc ]=_bgbc .Data [_dgff +_fbfgc ];};_afea +=_bfad .RowStride ;_dgff +=_bgbc .RowStride ;
};};if _badf {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_egcdc ]=_cfbad (_bfad .Data [_egcdc ],_bgbc .Data [_faag ],_fbfb );_egcdc +=_bfad .RowStride ;_faag +=_bgbc .RowStride ;};};case PixNotSrc :for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_ddef ]=_cfbad (_bfad .Data [_ddef ],^_bgbc .Data [_ddd ],_ccgd );
_ddef +=_bfad .RowStride ;_ddd +=_bgbc .RowStride ;};if _aefdg {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{for _fbfgc =0;_fbfgc < _badc ;_fbfgc ++{_bfad .Data [_afea +_fbfgc ]=^_bgbc .Data [_dgff +_fbfgc ];};_afea +=_bfad .RowStride ;_dgff +=_bgbc .RowStride ;
};};if _badf {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_egcdc ]=_cfbad (_bfad .Data [_egcdc ],^_bgbc .Data [_faag ],_fbfb );_egcdc +=_bfad .RowStride ;_faag +=_bgbc .RowStride ;};};case PixSrcOrDst :for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_ddef ]=_cfbad (_bfad .Data [_ddef ],_bgbc .Data [_ddd ]|_bfad .Data [_ddef ],_ccgd );
_ddef +=_bfad .RowStride ;_ddd +=_bgbc .RowStride ;};if _aefdg {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{for _fbfgc =0;_fbfgc < _badc ;_fbfgc ++{_bfad .Data [_afea +_fbfgc ]|=_bgbc .Data [_dgff +_fbfgc ];};_afea +=_bfad .RowStride ;_dgff +=_bgbc .RowStride ;
};};if _badf {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_egcdc ]=_cfbad (_bfad .Data [_egcdc ],_bgbc .Data [_faag ]|_bfad .Data [_egcdc ],_fbfb );_egcdc +=_bfad .RowStride ;_faag +=_bgbc .RowStride ;};};case PixSrcAndDst :for _gdedd =0;_gdedd < _dfae ;
_gdedd ++{_bfad .Data [_ddef ]=_cfbad (_bfad .Data [_ddef ],_bgbc .Data [_ddd ]&_bfad .Data [_ddef ],_ccgd );_ddef +=_bfad .RowStride ;_ddd +=_bgbc .RowStride ;};if _aefdg {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{for _fbfgc =0;_fbfgc < _badc ;_fbfgc ++{_bfad .Data [_afea +_fbfgc ]&=_bgbc .Data [_dgff +_fbfgc ];
};_afea +=_bfad .RowStride ;_dgff +=_bgbc .RowStride ;};};if _badf {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_egcdc ]=_cfbad (_bfad .Data [_egcdc ],_bgbc .Data [_faag ]&_bfad .Data [_egcdc ],_fbfb );_egcdc +=_bfad .RowStride ;_faag +=_bgbc .RowStride ;
};};case PixSrcXorDst :for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_ddef ]=_cfbad (_bfad .Data [_ddef ],_bgbc .Data [_ddd ]^_bfad .Data [_ddef ],_ccgd );_ddef +=_bfad .RowStride ;_ddd +=_bgbc .RowStride ;};if _aefdg {for _gdedd =0;_gdedd < _dfae ;
_gdedd ++{for _fbfgc =0;_fbfgc < _badc ;_fbfgc ++{_bfad .Data [_afea +_fbfgc ]^=_bgbc .Data [_dgff +_fbfgc ];};_afea +=_bfad .RowStride ;_dgff +=_bgbc .RowStride ;};};if _badf {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_egcdc ]=_cfbad (_bfad .Data [_egcdc ],_bgbc .Data [_faag ]^_bfad .Data [_egcdc ],_fbfb );
_egcdc +=_bfad .RowStride ;_faag +=_bgbc .RowStride ;};};case PixNotSrcOrDst :for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_ddef ]=_cfbad (_bfad .Data [_ddef ],^(_bgbc .Data [_ddd ])|_bfad .Data [_ddef ],_ccgd );_ddef +=_bfad .RowStride ;_ddd +=_bgbc .RowStride ;
};if _aefdg {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{for _fbfgc =0;_fbfgc < _badc ;_fbfgc ++{_bfad .Data [_afea +_fbfgc ]|=^(_bgbc .Data [_dgff +_fbfgc ]);};_afea +=_bfad .RowStride ;_dgff +=_bgbc .RowStride ;};};if _badf {for _gdedd =0;_gdedd < _dfae ;
_gdedd ++{_bfad .Data [_egcdc ]=_cfbad (_bfad .Data [_egcdc ],^(_bgbc .Data [_faag ])|_bfad .Data [_egcdc ],_fbfb );_egcdc +=_bfad .RowStride ;_faag +=_bgbc .RowStride ;};};case PixNotSrcAndDst :for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_ddef ]=_cfbad (_bfad .Data [_ddef ],^(_bgbc .Data [_ddd ])&_bfad .Data [_ddef ],_ccgd );
_ddef +=_bfad .RowStride ;_ddd +=_bgbc .RowStride ;};if _aefdg {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{for _fbfgc =0;_fbfgc < _badc ;_fbfgc ++{_bfad .Data [_afea +_fbfgc ]&=^_bgbc .Data [_dgff +_fbfgc ];};_afea +=_bfad .RowStride ;_dgff +=_bgbc .RowStride ;
};};if _badf {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_egcdc ]=_cfbad (_bfad .Data [_egcdc ],^(_bgbc .Data [_faag ])&_bfad .Data [_egcdc ],_fbfb );_egcdc +=_bfad .RowStride ;_faag +=_bgbc .RowStride ;};};case PixSrcOrNotDst :for _gdedd =0;
_gdedd < _dfae ;_gdedd ++{_bfad .Data [_ddef ]=_cfbad (_bfad .Data [_ddef ],_bgbc .Data [_ddd ]|^(_bfad .Data [_ddef ]),_ccgd );_ddef +=_bfad .RowStride ;_ddd +=_bgbc .RowStride ;};if _aefdg {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{for _fbfgc =0;_fbfgc < _badc ;
_fbfgc ++{_bfad .Data [_afea +_fbfgc ]=_bgbc .Data [_dgff +_fbfgc ]|^(_bfad .Data [_afea +_fbfgc ]);};_afea +=_bfad .RowStride ;_dgff +=_bgbc .RowStride ;};};if _badf {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_egcdc ]=_cfbad (_bfad .Data [_egcdc ],_bgbc .Data [_faag ]|^(_bfad .Data [_egcdc ]),_fbfb );
_egcdc +=_bfad .RowStride ;_faag +=_bgbc .RowStride ;};};case PixSrcAndNotDst :for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_ddef ]=_cfbad (_bfad .Data [_ddef ],_bgbc .Data [_ddd ]&^(_bfad .Data [_ddef ]),_ccgd );_ddef +=_bfad .RowStride ;_ddd +=_bgbc .RowStride ;
};if _aefdg {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{for _fbfgc =0;_fbfgc < _badc ;_fbfgc ++{_bfad .Data [_afea +_fbfgc ]=_bgbc .Data [_dgff +_fbfgc ]&^(_bfad .Data [_afea +_fbfgc ]);};_afea +=_bfad .RowStride ;_dgff +=_bgbc .RowStride ;};};if _badf {for _gdedd =0;
_gdedd < _dfae ;_gdedd ++{_bfad .Data [_egcdc ]=_cfbad (_bfad .Data [_egcdc ],_bgbc .Data [_faag ]&^(_bfad .Data [_egcdc ]),_fbfb );_egcdc +=_bfad .RowStride ;_faag +=_bgbc .RowStride ;};};case PixNotPixSrcOrDst :for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_ddef ]=_cfbad (_bfad .Data [_ddef ],^(_bgbc .Data [_ddd ]|_bfad .Data [_ddef ]),_ccgd );
_ddef +=_bfad .RowStride ;_ddd +=_bgbc .RowStride ;};if _aefdg {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{for _fbfgc =0;_fbfgc < _badc ;_fbfgc ++{_bfad .Data [_afea +_fbfgc ]=^(_bgbc .Data [_dgff +_fbfgc ]|_bfad .Data [_afea +_fbfgc ]);};_afea +=_bfad .RowStride ;
_dgff +=_bgbc .RowStride ;};};if _badf {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_egcdc ]=_cfbad (_bfad .Data [_egcdc ],^(_bgbc .Data [_faag ]|_bfad .Data [_egcdc ]),_fbfb );_egcdc +=_bfad .RowStride ;_faag +=_bgbc .RowStride ;};};case PixNotPixSrcAndDst :for _gdedd =0;
_gdedd < _dfae ;_gdedd ++{_bfad .Data [_ddef ]=_cfbad (_bfad .Data [_ddef ],^(_bgbc .Data [_ddd ]&_bfad .Data [_ddef ]),_ccgd );_ddef +=_bfad .RowStride ;_ddd +=_bgbc .RowStride ;};if _aefdg {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{for _fbfgc =0;_fbfgc < _badc ;
_fbfgc ++{_bfad .Data [_afea +_fbfgc ]=^(_bgbc .Data [_dgff +_fbfgc ]&_bfad .Data [_afea +_fbfgc ]);};_afea +=_bfad .RowStride ;_dgff +=_bgbc .RowStride ;};};if _badf {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_egcdc ]=_cfbad (_bfad .Data [_egcdc ],^(_bgbc .Data [_faag ]&_bfad .Data [_egcdc ]),_fbfb );
_egcdc +=_bfad .RowStride ;_faag +=_bgbc .RowStride ;};};case PixNotPixSrcXorDst :for _gdedd =0;_gdedd < _dfae ;_gdedd ++{_bfad .Data [_ddef ]=_cfbad (_bfad .Data [_ddef ],^(_bgbc .Data [_ddd ]^_bfad .Data [_ddef ]),_ccgd );_ddef +=_bfad .RowStride ;_ddd +=_bgbc .RowStride ;
};if _aefdg {for _gdedd =0;_gdedd < _dfae ;_gdedd ++{for _fbfgc =0;_fbfgc < _badc ;_fbfgc ++{_bfad .Data [_afea +_fbfgc ]=^(_bgbc .Data [_dgff +_fbfgc ]^_bfad .Data [_afea +_fbfgc ]);};_afea +=_bfad .RowStride ;_dgff +=_bgbc .RowStride ;};};if _badf {for _gdedd =0;
_gdedd < _dfae ;_gdedd ++{_bfad .Data [_egcdc ]=_cfbad (_bfad .Data [_egcdc ],^(_bgbc .Data [_faag ]^_bfad .Data [_egcdc ]),_fbfb );_egcdc +=_bfad .RowStride ;_faag +=_bgbc .RowStride ;};};default:_f .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",_eccg );
return _g .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 ;};var (_beab *Bitmap ;_bafe *Bitmap ;);func (_efbe Points )GetIntX (i int )(int ,error ){if i >=len (_efbe ){return 0,_g .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 (_efbe [i ].X ),nil ;};func TstCSymbol (t *_bg .T )*Bitmap {t .Helper ();_ddcd :=New (6,6);_e .NoError (t ,_ddcd .SetPixel (1,0,1));_e .NoError (t ,_ddcd .SetPixel (2,0,1));_e .NoError (t ,_ddcd .SetPixel (3,0,1));_e .NoError (t ,_ddcd .SetPixel (4,0,1));
_e .NoError (t ,_ddcd .SetPixel (0,1,1));_e .NoError (t ,_ddcd .SetPixel (5,1,1));_e .NoError (t ,_ddcd .SetPixel (0,2,1));_e .NoError (t ,_ddcd .SetPixel (0,3,1));_e .NoError (t ,_ddcd .SetPixel (0,4,1));_e .NoError (t ,_ddcd .SetPixel (5,4,1));_e .NoError (t ,_ddcd .SetPixel (1,5,1));
_e .NoError (t ,_ddcd .SetPixel (2,5,1));_e .NoError (t ,_ddcd .SetPixel (3,5,1));_e .NoError (t ,_ddcd .SetPixel (4,5,1));return _ddcd ;};func (_egd *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _egd .removeBorderGeneral (left ,right ,top ,bot );
};func init (){for _cdcc :=0;_cdcc < 256;_cdcc ++{_bdae [_cdcc ]=uint8 (_cdcc &0x1)+(uint8 (_cdcc >>1)&0x1)+(uint8 (_cdcc >>2)&0x1)+(uint8 (_cdcc >>3)&0x1)+(uint8 (_cdcc >>4)&0x1)+(uint8 (_cdcc >>5)&0x1)+(uint8 (_cdcc >>6)&0x1)+(uint8 (_cdcc >>7)&0x1);
};};func _dge (_efe *Bitmap ,_bc *Bitmap ,_bga int )(_eee error ){const _ac ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _bga {case 2:_eee =_gg (_efe ,_bc );case 4:_eee =_fg (_efe ,_bc );
case 8:_eee =_dd (_efe ,_bc );default:return _g .Error (_ac ,"\u0065\u0078p\u0061\u006e\u0073\u0069o\u006e\u0020f\u0061\u0063\u0074\u006f\u0072\u0020\u006e\u006ft\u0020\u0069\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d\u0020r\u0061\u006e\u0067\u0065");
};if _eee !=nil {_eee =_g .Wrap (_eee ,_ac ,"");};return _eee ;};func TstWriteSymbols (t *_bg .T ,bms *Bitmaps ,src *Bitmap ){for _dgaeg :=0;_dgaeg < bms .Size ();_dgaeg ++{_gbed :=bms .Values [_dgaeg ];_affe :=bms .Boxes [_dgaeg ];_caa :=src .RasterOperation (_affe .Min .X ,_affe .Min .Y ,_gbed .Width ,_gbed .Height ,PixSrc ,_gbed ,0,0);
_e .NoError (t ,_caa );};};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _cgbb (d ,s ,sel )};type CombinationOperator int ;func _ddfb (_caef *Bitmap ,_baae ,_bfff ,_gdec ,_cafef int ,_fgcf RasterOperator ){if _baae < 0{_gdec +=_baae ;
_baae =0;};_fcdd :=_baae +_gdec -_caef .Width ;if _fcdd > 0{_gdec -=_fcdd ;};if _bfff < 0{_cafef +=_bfff ;_bfff =0;};_cbfd :=_bfff +_cafef -_caef .Height ;if _cbfd > 0{_cafef -=_cbfd ;};if _gdec <=0||_cafef <=0{return ;};if (_baae &7)==0{_cbfg (_caef ,_baae ,_bfff ,_gdec ,_cafef ,_fgcf );
}else {_gacd (_caef ,_baae ,_bfff ,_gdec ,_cafef ,_fgcf );};};func (_efde *Bitmaps )AddBox (box *_bd .Rectangle ){_efde .Boxes =append (_efde .Boxes ,box )};func _aadde (_eacc *Bitmap ,_gfdf *Bitmap ,_bfgf *Selection ,_fgae **Bitmap )(*Bitmap ,error ){const _fdae ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";
if _gfdf ==nil {return nil ,_g .Error (_fdae ,"\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 _bfgf ==nil {return nil ,_g .Error (_fdae ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");
};_bddfg ,_aebbc :=_bfgf .Height ,_bfgf .Width ;if _bddfg ==0||_aebbc ==0{return nil ,_g .Error (_fdae ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _eacc ==nil {_eacc =_gfdf .createTemplate ();
*_fgae =_gfdf ;return _eacc ,nil ;};_eacc .Width =_gfdf .Width ;_eacc .Height =_gfdf .Height ;_eacc .RowStride =_gfdf .RowStride ;_eacc .Color =_gfdf .Color ;_eacc .Data =make ([]byte ,_gfdf .RowStride *_gfdf .Height );if _eacc ==_gfdf {*_fgae =_gfdf .Copy ();
}else {*_fgae =_gfdf ;};return _eacc ,nil ;};func (_aebf *Bitmap )nextOnPixel (_cbca ,_eag int )(_gfea _bd .Point ,_cccb bool ,_eecd error ){const _aead ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_gfea ,_cccb ,_eecd =_aebf .nextOnPixelLow (_aebf .Width ,_aebf .Height ,_aebf .RowStride ,_cbca ,_eag );
if _eecd !=nil {return _gfea ,false ,_g .Wrap (_eecd ,_aead ,"");};return _gfea ,_cccb ,nil ;};func TstASymbol (t *_bg .T )*Bitmap {t .Helper ();_gaadca :=New (6,6);_e .NoError (t ,_gaadca .SetPixel (1,0,1));_e .NoError (t ,_gaadca .SetPixel (2,0,1));_e .NoError (t ,_gaadca .SetPixel (3,0,1));
_e .NoError (t ,_gaadca .SetPixel (4,0,1));_e .NoError (t ,_gaadca .SetPixel (5,1,1));_e .NoError (t ,_gaadca .SetPixel (1,2,1));_e .NoError (t ,_gaadca .SetPixel (2,2,1));_e .NoError (t ,_gaadca .SetPixel (3,2,1));_e .NoError (t ,_gaadca .SetPixel (4,2,1));
_e .NoError (t ,_gaadca .SetPixel (5,2,1));_e .NoError (t ,_gaadca .SetPixel (0,3,1));_e .NoError (t ,_gaadca .SetPixel (5,3,1));_e .NoError (t ,_gaadca .SetPixel (0,4,1));_e .NoError (t ,_gaadca .SetPixel (5,4,1));_e .NoError (t ,_gaadca .SetPixel (1,5,1));
_e .NoError (t ,_gaadca .SetPixel (2,5,1));_e .NoError (t ,_gaadca .SetPixel (3,5,1));_e .NoError (t ,_gaadca .SetPixel (4,5,1));_e .NoError (t ,_gaadca .SetPixel (5,5,1));return _gaadca ;};func TstVSymbol (t *_bg .T ,scale ...int )*Bitmap {_cfce ,_cdfd :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});
_e .NoError (t ,_cdfd );return TstGetScaledSymbol (t ,_cfce ,scale ...);};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _degfg (d ,s ,hSize ,vSize )};func (_gccg *Bitmap )setFourBytes (_effb int ,_gecg uint32 )error {if _effb +3> len (_gccg .Data )-1{return _g .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",_effb );
};_gccg .Data [_effb ]=byte ((_gecg &0xff000000)>>24);_gccg .Data [_effb +1]=byte ((_gecg &0xff0000)>>16);_gccg .Data [_effb +2]=byte ((_gecg &0xff00)>>8);_gccg .Data [_effb +3]=byte (_gecg &0xff);return nil ;};func Extract (roi _bd .Rectangle ,src *Bitmap )(*Bitmap ,error ){_fca :=New (roi .Dx (),roi .Dy ());
_egde :=roi .Min .X &0x07;_fafg :=8-_egde ;_bgbe :=uint (8-_fca .Width &0x07);_bad :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_adac :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_aabcb :=_fca .RowStride ==_adac +1-_bad ;var _def int ;for _cbd :=roi .Min .Y ;
_cbd < roi .Max .Y ;_cbd ++{_ceg :=_bad ;_dcfcf :=_def ;switch {case _bad ==_adac :_cdcf ,_gbeg :=src .GetByte (_ceg );if _gbeg !=nil {return nil ,_gbeg ;};_cdcf <<=uint (_egde );_gbeg =_fca .SetByte (_dcfcf ,_ccaag (_bgbe ,_cdcf ));if _gbeg !=nil {return nil ,_gbeg ;
};case _egde ==0:for _bfb :=_bad ;_bfb <=_adac ;_bfb ++{_ggdf ,_efcg :=src .GetByte (_ceg );if _efcg !=nil {return nil ,_efcg ;};_ceg ++;if _bfb ==_adac &&_aabcb {_ggdf =_ccaag (_bgbe ,_ggdf );};_efcg =_fca .SetByte (_dcfcf ,_ggdf );if _efcg !=nil {return nil ,_efcg ;
};_dcfcf ++;};default:_bccg :=_agb (src ,_fca ,uint (_egde ),uint (_fafg ),_bgbe ,_bad ,_adac ,_aabcb ,_ceg ,_dcfcf );if _bccg !=nil {return nil ,_bccg ;};};_bad +=src .RowStride ;_adac +=src .RowStride ;_def +=_fca .RowStride ;};return _fca ,nil ;};func (_eaef *Points )Add (pt *Points )error {const _faebc ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";
if _eaef ==nil {return _g .Error (_faebc ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _g .Error (_faebc ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};*_eaef =append (*_eaef ,*pt ...);return nil ;};func (_dfegb Points )GetGeometry (i int )(_defaf ,_bgfd float32 ,_dcfd error ){if i > len (_dfegb )-1{return 0,0,_g .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 );
};_bccgg :=_dfegb [i ];return _bccgg .X ,_bccgg .Y ,nil ;};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _dbae (oldByte ,newByte ,op );};func _cdcgc (_eaadb *Bitmap ,_beddg *_gf .Stack ,_deca ,_eeeea int )(_abaa *_bd .Rectangle ,_gabef error ){const _cgcd ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _eaadb ==nil {return nil ,_g .Error (_cgcd ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _beddg ==nil {return nil ,_g .Error (_cgcd ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};_eedb ,_faff :=_eaadb .Width ,_eaadb .Height ;_fegc :=_eedb -1;_dedgf :=_faff -1;if _deca < 0||_deca > _fegc ||_eeeea < 0||_eeeea > _dedgf ||!_eaadb .GetPixel (_deca ,_eeeea ){return nil ,nil ;};_bbgba :=_bd .Rect (100000,100000,0,0);if _gabef =_cbgb (_beddg ,_deca ,_deca ,_eeeea ,1,_dedgf ,&_bbgba );
_gabef !=nil {return nil ,_g .Wrap (_gabef ,_cgcd ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _gabef =_cbgb (_beddg ,_deca ,_deca ,_eeeea +1,-1,_dedgf ,&_bbgba );_gabef !=nil {return nil ,_g .Wrap (_gabef ,_cgcd ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
};_bbgba .Min .X ,_bbgba .Max .X =_deca ,_deca ;_bbgba .Min .Y ,_bbgba .Max .Y =_eeeea ,_eeeea ;var (_fbge *fillSegment ;_feca int ;);for _beddg .Len ()> 0{if _fbge ,_gabef =_ccbdb (_beddg );_gabef !=nil {return nil ,_g .Wrap (_gabef ,_cgcd ,"");};_eeeea =_fbge ._ggca ;
for _deca =_fbge ._dddg -1;_deca >=0&&_eaadb .GetPixel (_deca ,_eeeea );_deca --{if _gabef =_eaadb .SetPixel (_deca ,_eeeea ,0);_gabef !=nil {return nil ,_g .Wrap (_gabef ,_cgcd ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _deca >=_fbge ._dddg -1{for {for _deca ++;
_deca <=_fbge ._cdbfe +1&&_deca <=_fegc &&!_eaadb .GetPixel (_deca ,_eeeea );_deca ++{};_feca =_deca ;if !(_deca <=_fbge ._cdbfe +1&&_deca <=_fegc ){break ;};for ;_deca <=_fegc &&_eaadb .GetPixel (_deca ,_eeeea );_deca ++{if _gabef =_eaadb .SetPixel (_deca ,_eeeea ,0);
_gabef !=nil {return nil ,_g .Wrap (_gabef ,_cgcd ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _gabef =_cbgb (_beddg ,_feca ,_deca -1,_fbge ._ggca ,_fbge ._effg ,_dedgf ,&_bbgba );_gabef !=nil {return nil ,_g .Wrap (_gabef ,_cgcd ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
};if _deca > _fbge ._cdbfe {if _gabef =_cbgb (_beddg ,_fbge ._cdbfe +1,_deca -1,_fbge ._ggca ,-_fbge ._effg ,_dedgf ,&_bbgba );_gabef !=nil {return nil ,_g .Wrap (_gabef ,_cgcd ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};};continue ;};_feca =_deca +1;if _feca < _fbge ._dddg {if _gabef =_cbgb (_beddg ,_feca ,_fbge ._dddg -1,_fbge ._ggca ,-_fbge ._effg ,_dedgf ,&_bbgba );_gabef !=nil {return nil ,_g .Wrap (_gabef ,_cgcd ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_deca =_fbge ._dddg ;for {for ;_deca <=_fegc &&_eaadb .GetPixel (_deca ,_eeeea );_deca ++{if _gabef =_eaadb .SetPixel (_deca ,_eeeea ,0);_gabef !=nil {return nil ,_g .Wrap (_gabef ,_cgcd ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _gabef =_cbgb (_beddg ,_feca ,_deca -1,_fbge ._ggca ,_fbge ._effg ,_dedgf ,&_bbgba );
_gabef !=nil {return nil ,_g .Wrap (_gabef ,_cgcd ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _deca > _fbge ._cdbfe {if _gabef =_cbgb (_beddg ,_fbge ._cdbfe +1,_deca -1,_fbge ._ggca ,-_fbge ._effg ,_dedgf ,&_bbgba );_gabef !=nil {return nil ,_g .Wrap (_gabef ,_cgcd ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _deca ++;_deca <=_fbge ._cdbfe +1&&_deca <=_fegc &&!_eaadb .GetPixel (_deca ,_eeeea );_deca ++{};_feca =_deca ;if !(_deca <=_fbge ._cdbfe +1&&_deca <=_fegc ){break ;};};};_bbgba .Max .X ++;_bbgba .Max .Y ++;return &_bbgba ,nil ;};func (_bcdf *Bitmap )GetVanillaData ()[]byte {if _bcdf .Color ==Chocolate {_bcdf .inverseData ();
};return _bcdf .Data ;};func (_gdbe *Bitmaps )HeightSorter ()func (_dbfc ,_gfbd int )bool {return func (_cagc ,_dgcba int )bool {_dadad :=_gdbe .Values [_cagc ].Height < _gdbe .Values [_dgcba ].Height ;_f .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_gdbe .Values [_cagc ].Height ,_gdbe .Values [_dgcba ].Height ,_dadad );
return _dadad ;};};func (_ffdd *Bitmap )resizeImageData (_bca *Bitmap )error {if _bca ==nil {return _g .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 _ffdd .SizesEqual (_bca ){return nil ;};_ffdd .Data =make ([]byte ,len (_bca .Data ));_ffdd .Width =_bca .Width ;_ffdd .Height =_bca .Height ;_ffdd .RowStride =_bca .RowStride ;return nil ;};func _fgdc (_cegf *Bitmap ,_dgad ,_aede ,_begae ,_dbaeb int ,_bbbgf RasterOperator ,_bcef *Bitmap ,_bgfdg ,_agga int )error {var (_bfef bool ;
_eebc bool ;_cabdd byte ;_cgegc int ;_efge int ;_gdca int ;_bagg int ;_acfge bool ;_fegf int ;_bgfc int ;_fde int ;_aaac bool ;_adb byte ;_eaded int ;_bfed int ;_ggbab int ;_ggfb byte ;_aecfb int ;_dfaf int ;_cbde uint ;_eegg uint ;_dfdg byte ;_bceg shift ;
_bccgb bool ;_cegg bool ;_dgcb ,_acbed int ;);if _bgfdg &7!=0{_dfaf =8-(_bgfdg &7);};if _dgad &7!=0{_efge =8-(_dgad &7);};if _dfaf ==0&&_efge ==0{_dfdg =_eefe [0];}else {if _efge > _dfaf {_cbde =uint (_efge -_dfaf );}else {_cbde =uint (8-(_dfaf -_efge ));
};_eegg =8-_cbde ;_dfdg =_eefe [_cbde ];};if (_dgad &7)!=0{_bfef =true ;_cgegc =8-(_dgad &7);_cabdd =_eefe [_cgegc ];_gdca =_cegf .RowStride *_aede +(_dgad >>3);_bagg =_bcef .RowStride *_agga +(_bgfdg >>3);_aecfb =8-(_bgfdg &7);if _cgegc > _aecfb {_bceg =_afddg ;
if _begae >=_dfaf {_bccgb =true ;};}else {_bceg =_adcg ;};};if _begae < _cgegc {_eebc =true ;_cabdd &=_eecde [8-_cgegc +_begae ];};if !_eebc {_fegf =(_begae -_cgegc )>>3;if _fegf !=0{_acfge =true ;_bgfc =_cegf .RowStride *_aede +((_dgad +_efge )>>3);_fde =_bcef .RowStride *_agga +((_bgfdg +_efge )>>3);
};};_eaded =(_dgad +_begae )&7;if !(_eebc ||_eaded ==0){_aaac =true ;_adb =_eecde [_eaded ];_bfed =_cegf .RowStride *_aede +((_dgad +_efge )>>3)+_fegf ;_ggbab =_bcef .RowStride *_agga +((_bgfdg +_efge )>>3)+_fegf ;if _eaded > int (_eegg ){_cegg =true ;
};};switch _bbbgf {case PixSrc :if _bfef {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{if _bceg ==_afddg {_ggfb =_bcef .Data [_bagg ]<<_cbde ;if _bccgb {_ggfb =_cfbad (_ggfb ,_bcef .Data [_bagg +1]>>_eegg ,_dfdg );};}else {_ggfb =_bcef .Data [_bagg ]>>_eegg ;
};_cegf .Data [_gdca ]=_cfbad (_cegf .Data [_gdca ],_ggfb ,_cabdd );_gdca +=_cegf .RowStride ;_bagg +=_bcef .RowStride ;};};if _acfge {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{for _acbed =0;_acbed < _fegf ;_acbed ++{_ggfb =_cfbad (_bcef .Data [_fde +_acbed ]<<_cbde ,_bcef .Data [_fde +_acbed +1]>>_eegg ,_dfdg );
_cegf .Data [_bgfc +_acbed ]=_ggfb ;};_bgfc +=_cegf .RowStride ;_fde +=_bcef .RowStride ;};};if _aaac {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{_ggfb =_bcef .Data [_ggbab ]<<_cbde ;if _cegg {_ggfb =_cfbad (_ggfb ,_bcef .Data [_ggbab +1]>>_eegg ,_dfdg );};
_cegf .Data [_bfed ]=_cfbad (_cegf .Data [_bfed ],_ggfb ,_adb );_bfed +=_cegf .RowStride ;_ggbab +=_bcef .RowStride ;};};case PixNotSrc :if _bfef {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{if _bceg ==_afddg {_ggfb =_bcef .Data [_bagg ]<<_cbde ;if _bccgb {_ggfb =_cfbad (_ggfb ,_bcef .Data [_bagg +1]>>_eegg ,_dfdg );
};}else {_ggfb =_bcef .Data [_bagg ]>>_eegg ;};_cegf .Data [_gdca ]=_cfbad (_cegf .Data [_gdca ],^_ggfb ,_cabdd );_gdca +=_cegf .RowStride ;_bagg +=_bcef .RowStride ;};};if _acfge {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{for _acbed =0;_acbed < _fegf ;_acbed ++{_ggfb =_cfbad (_bcef .Data [_fde +_acbed ]<<_cbde ,_bcef .Data [_fde +_acbed +1]>>_eegg ,_dfdg );
_cegf .Data [_bgfc +_acbed ]=^_ggfb ;};_bgfc +=_cegf .RowStride ;_fde +=_bcef .RowStride ;};};if _aaac {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{_ggfb =_bcef .Data [_ggbab ]<<_cbde ;if _cegg {_ggfb =_cfbad (_ggfb ,_bcef .Data [_ggbab +1]>>_eegg ,_dfdg );};
_cegf .Data [_bfed ]=_cfbad (_cegf .Data [_bfed ],^_ggfb ,_adb );_bfed +=_cegf .RowStride ;_ggbab +=_bcef .RowStride ;};};case PixSrcOrDst :if _bfef {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{if _bceg ==_afddg {_ggfb =_bcef .Data [_bagg ]<<_cbde ;if _bccgb {_ggfb =_cfbad (_ggfb ,_bcef .Data [_bagg +1]>>_eegg ,_dfdg );
};}else {_ggfb =_bcef .Data [_bagg ]>>_eegg ;};_cegf .Data [_gdca ]=_cfbad (_cegf .Data [_gdca ],_ggfb |_cegf .Data [_gdca ],_cabdd );_gdca +=_cegf .RowStride ;_bagg +=_bcef .RowStride ;};};if _acfge {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{for _acbed =0;
_acbed < _fegf ;_acbed ++{_ggfb =_cfbad (_bcef .Data [_fde +_acbed ]<<_cbde ,_bcef .Data [_fde +_acbed +1]>>_eegg ,_dfdg );_cegf .Data [_bgfc +_acbed ]|=_ggfb ;};_bgfc +=_cegf .RowStride ;_fde +=_bcef .RowStride ;};};if _aaac {for _dgcb =0;_dgcb < _dbaeb ;
_dgcb ++{_ggfb =_bcef .Data [_ggbab ]<<_cbde ;if _cegg {_ggfb =_cfbad (_ggfb ,_bcef .Data [_ggbab +1]>>_eegg ,_dfdg );};_cegf .Data [_bfed ]=_cfbad (_cegf .Data [_bfed ],_ggfb |_cegf .Data [_bfed ],_adb );_bfed +=_cegf .RowStride ;_ggbab +=_bcef .RowStride ;
};};case PixSrcAndDst :if _bfef {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{if _bceg ==_afddg {_ggfb =_bcef .Data [_bagg ]<<_cbde ;if _bccgb {_ggfb =_cfbad (_ggfb ,_bcef .Data [_bagg +1]>>_eegg ,_dfdg );};}else {_ggfb =_bcef .Data [_bagg ]>>_eegg ;};_cegf .Data [_gdca ]=_cfbad (_cegf .Data [_gdca ],_ggfb &_cegf .Data [_gdca ],_cabdd );
_gdca +=_cegf .RowStride ;_bagg +=_bcef .RowStride ;};};if _acfge {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{for _acbed =0;_acbed < _fegf ;_acbed ++{_ggfb =_cfbad (_bcef .Data [_fde +_acbed ]<<_cbde ,_bcef .Data [_fde +_acbed +1]>>_eegg ,_dfdg );_cegf .Data [_bgfc +_acbed ]&=_ggfb ;
};_bgfc +=_cegf .RowStride ;_fde +=_bcef .RowStride ;};};if _aaac {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{_ggfb =_bcef .Data [_ggbab ]<<_cbde ;if _cegg {_ggfb =_cfbad (_ggfb ,_bcef .Data [_ggbab +1]>>_eegg ,_dfdg );};_cegf .Data [_bfed ]=_cfbad (_cegf .Data [_bfed ],_ggfb &_cegf .Data [_bfed ],_adb );
_bfed +=_cegf .RowStride ;_ggbab +=_bcef .RowStride ;};};case PixSrcXorDst :if _bfef {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{if _bceg ==_afddg {_ggfb =_bcef .Data [_bagg ]<<_cbde ;if _bccgb {_ggfb =_cfbad (_ggfb ,_bcef .Data [_bagg +1]>>_eegg ,_dfdg );};
}else {_ggfb =_bcef .Data [_bagg ]>>_eegg ;};_cegf .Data [_gdca ]=_cfbad (_cegf .Data [_gdca ],_ggfb ^_cegf .Data [_gdca ],_cabdd );_gdca +=_cegf .RowStride ;_bagg +=_bcef .RowStride ;};};if _acfge {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{for _acbed =0;_acbed < _fegf ;
_acbed ++{_ggfb =_cfbad (_bcef .Data [_fde +_acbed ]<<_cbde ,_bcef .Data [_fde +_acbed +1]>>_eegg ,_dfdg );_cegf .Data [_bgfc +_acbed ]^=_ggfb ;};_bgfc +=_cegf .RowStride ;_fde +=_bcef .RowStride ;};};if _aaac {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{_ggfb =_bcef .Data [_ggbab ]<<_cbde ;
if _cegg {_ggfb =_cfbad (_ggfb ,_bcef .Data [_ggbab +1]>>_eegg ,_dfdg );};_cegf .Data [_bfed ]=_cfbad (_cegf .Data [_bfed ],_ggfb ^_cegf .Data [_bfed ],_adb );_bfed +=_cegf .RowStride ;_ggbab +=_bcef .RowStride ;};};case PixNotSrcOrDst :if _bfef {for _dgcb =0;
_dgcb < _dbaeb ;_dgcb ++{if _bceg ==_afddg {_ggfb =_bcef .Data [_bagg ]<<_cbde ;if _bccgb {_ggfb =_cfbad (_ggfb ,_bcef .Data [_bagg +1]>>_eegg ,_dfdg );};}else {_ggfb =_bcef .Data [_bagg ]>>_eegg ;};_cegf .Data [_gdca ]=_cfbad (_cegf .Data [_gdca ],^_ggfb |_cegf .Data [_gdca ],_cabdd );
_gdca +=_cegf .RowStride ;_bagg +=_bcef .RowStride ;};};if _acfge {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{for _acbed =0;_acbed < _fegf ;_acbed ++{_ggfb =_cfbad (_bcef .Data [_fde +_acbed ]<<_cbde ,_bcef .Data [_fde +_acbed +1]>>_eegg ,_dfdg );_cegf .Data [_bgfc +_acbed ]|=^_ggfb ;
};_bgfc +=_cegf .RowStride ;_fde +=_bcef .RowStride ;};};if _aaac {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{_ggfb =_bcef .Data [_ggbab ]<<_cbde ;if _cegg {_ggfb =_cfbad (_ggfb ,_bcef .Data [_ggbab +1]>>_eegg ,_dfdg );};_cegf .Data [_bfed ]=_cfbad (_cegf .Data [_bfed ],^_ggfb |_cegf .Data [_bfed ],_adb );
_bfed +=_cegf .RowStride ;_ggbab +=_bcef .RowStride ;};};case PixNotSrcAndDst :if _bfef {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{if _bceg ==_afddg {_ggfb =_bcef .Data [_bagg ]<<_cbde ;if _bccgb {_ggfb =_cfbad (_ggfb ,_bcef .Data [_bagg +1]>>_eegg ,_dfdg );
};}else {_ggfb =_bcef .Data [_bagg ]>>_eegg ;};_cegf .Data [_gdca ]=_cfbad (_cegf .Data [_gdca ],^_ggfb &_cegf .Data [_gdca ],_cabdd );_gdca +=_cegf .RowStride ;_bagg +=_bcef .RowStride ;};};if _acfge {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{for _acbed =0;
_acbed < _fegf ;_acbed ++{_ggfb =_cfbad (_bcef .Data [_fde +_acbed ]<<_cbde ,_bcef .Data [_fde +_acbed +1]>>_eegg ,_dfdg );_cegf .Data [_bgfc +_acbed ]&=^_ggfb ;};_bgfc +=_cegf .RowStride ;_fde +=_bcef .RowStride ;};};if _aaac {for _dgcb =0;_dgcb < _dbaeb ;
_dgcb ++{_ggfb =_bcef .Data [_ggbab ]<<_cbde ;if _cegg {_ggfb =_cfbad (_ggfb ,_bcef .Data [_ggbab +1]>>_eegg ,_dfdg );};_cegf .Data [_bfed ]=_cfbad (_cegf .Data [_bfed ],^_ggfb &_cegf .Data [_bfed ],_adb );_bfed +=_cegf .RowStride ;_ggbab +=_bcef .RowStride ;
};};case PixSrcOrNotDst :if _bfef {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{if _bceg ==_afddg {_ggfb =_bcef .Data [_bagg ]<<_cbde ;if _bccgb {_ggfb =_cfbad (_ggfb ,_bcef .Data [_bagg +1]>>_eegg ,_dfdg );};}else {_ggfb =_bcef .Data [_bagg ]>>_eegg ;};_cegf .Data [_gdca ]=_cfbad (_cegf .Data [_gdca ],_ggfb |^_cegf .Data [_gdca ],_cabdd );
_gdca +=_cegf .RowStride ;_bagg +=_bcef .RowStride ;};};if _acfge {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{for _acbed =0;_acbed < _fegf ;_acbed ++{_ggfb =_cfbad (_bcef .Data [_fde +_acbed ]<<_cbde ,_bcef .Data [_fde +_acbed +1]>>_eegg ,_dfdg );_cegf .Data [_bgfc +_acbed ]=_ggfb |^_cegf .Data [_bgfc +_acbed ];
};_bgfc +=_cegf .RowStride ;_fde +=_bcef .RowStride ;};};if _aaac {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{_ggfb =_bcef .Data [_ggbab ]<<_cbde ;if _cegg {_ggfb =_cfbad (_ggfb ,_bcef .Data [_ggbab +1]>>_eegg ,_dfdg );};_cegf .Data [_bfed ]=_cfbad (_cegf .Data [_bfed ],_ggfb |^_cegf .Data [_bfed ],_adb );
_bfed +=_cegf .RowStride ;_ggbab +=_bcef .RowStride ;};};case PixSrcAndNotDst :if _bfef {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{if _bceg ==_afddg {_ggfb =_bcef .Data [_bagg ]<<_cbde ;if _bccgb {_ggfb =_cfbad (_ggfb ,_bcef .Data [_bagg +1]>>_eegg ,_dfdg );
};}else {_ggfb =_bcef .Data [_bagg ]>>_eegg ;};_cegf .Data [_gdca ]=_cfbad (_cegf .Data [_gdca ],_ggfb &^_cegf .Data [_gdca ],_cabdd );_gdca +=_cegf .RowStride ;_bagg +=_bcef .RowStride ;};};if _acfge {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{for _acbed =0;
_acbed < _fegf ;_acbed ++{_ggfb =_cfbad (_bcef .Data [_fde +_acbed ]<<_cbde ,_bcef .Data [_fde +_acbed +1]>>_eegg ,_dfdg );_cegf .Data [_bgfc +_acbed ]=_ggfb &^_cegf .Data [_bgfc +_acbed ];};_bgfc +=_cegf .RowStride ;_fde +=_bcef .RowStride ;};};if _aaac {for _dgcb =0;
_dgcb < _dbaeb ;_dgcb ++{_ggfb =_bcef .Data [_ggbab ]<<_cbde ;if _cegg {_ggfb =_cfbad (_ggfb ,_bcef .Data [_ggbab +1]>>_eegg ,_dfdg );};_cegf .Data [_bfed ]=_cfbad (_cegf .Data [_bfed ],_ggfb &^_cegf .Data [_bfed ],_adb );_bfed +=_cegf .RowStride ;_ggbab +=_bcef .RowStride ;
};};case PixNotPixSrcOrDst :if _bfef {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{if _bceg ==_afddg {_ggfb =_bcef .Data [_bagg ]<<_cbde ;if _bccgb {_ggfb =_cfbad (_ggfb ,_bcef .Data [_bagg +1]>>_eegg ,_dfdg );};}else {_ggfb =_bcef .Data [_bagg ]>>_eegg ;};_cegf .Data [_gdca ]=_cfbad (_cegf .Data [_gdca ],^(_ggfb |_cegf .Data [_gdca ]),_cabdd );
_gdca +=_cegf .RowStride ;_bagg +=_bcef .RowStride ;};};if _acfge {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{for _acbed =0;_acbed < _fegf ;_acbed ++{_ggfb =_cfbad (_bcef .Data [_fde +_acbed ]<<_cbde ,_bcef .Data [_fde +_acbed +1]>>_eegg ,_dfdg );_cegf .Data [_bgfc +_acbed ]=^(_ggfb |_cegf .Data [_bgfc +_acbed ]);
};_bgfc +=_cegf .RowStride ;_fde +=_bcef .RowStride ;};};if _aaac {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{_ggfb =_bcef .Data [_ggbab ]<<_cbde ;if _cegg {_ggfb =_cfbad (_ggfb ,_bcef .Data [_ggbab +1]>>_eegg ,_dfdg );};_cegf .Data [_bfed ]=_cfbad (_cegf .Data [_bfed ],^(_ggfb |_cegf .Data [_bfed ]),_adb );
_bfed +=_cegf .RowStride ;_ggbab +=_bcef .RowStride ;};};case PixNotPixSrcAndDst :if _bfef {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{if _bceg ==_afddg {_ggfb =_bcef .Data [_bagg ]<<_cbde ;if _bccgb {_ggfb =_cfbad (_ggfb ,_bcef .Data [_bagg +1]>>_eegg ,_dfdg );
};}else {_ggfb =_bcef .Data [_bagg ]>>_eegg ;};_cegf .Data [_gdca ]=_cfbad (_cegf .Data [_gdca ],^(_ggfb &_cegf .Data [_gdca ]),_cabdd );_gdca +=_cegf .RowStride ;_bagg +=_bcef .RowStride ;};};if _acfge {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{for _acbed =0;
_acbed < _fegf ;_acbed ++{_ggfb =_cfbad (_bcef .Data [_fde +_acbed ]<<_cbde ,_bcef .Data [_fde +_acbed +1]>>_eegg ,_dfdg );_cegf .Data [_bgfc +_acbed ]=^(_ggfb &_cegf .Data [_bgfc +_acbed ]);};_bgfc +=_cegf .RowStride ;_fde +=_bcef .RowStride ;};};if _aaac {for _dgcb =0;
_dgcb < _dbaeb ;_dgcb ++{_ggfb =_bcef .Data [_ggbab ]<<_cbde ;if _cegg {_ggfb =_cfbad (_ggfb ,_bcef .Data [_ggbab +1]>>_eegg ,_dfdg );};_cegf .Data [_bfed ]=_cfbad (_cegf .Data [_bfed ],^(_ggfb &_cegf .Data [_bfed ]),_adb );_bfed +=_cegf .RowStride ;_ggbab +=_bcef .RowStride ;
};};case PixNotPixSrcXorDst :if _bfef {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{if _bceg ==_afddg {_ggfb =_bcef .Data [_bagg ]<<_cbde ;if _bccgb {_ggfb =_cfbad (_ggfb ,_bcef .Data [_bagg +1]>>_eegg ,_dfdg );};}else {_ggfb =_bcef .Data [_bagg ]>>_eegg ;};_cegf .Data [_gdca ]=_cfbad (_cegf .Data [_gdca ],^(_ggfb ^_cegf .Data [_gdca ]),_cabdd );
_gdca +=_cegf .RowStride ;_bagg +=_bcef .RowStride ;};};if _acfge {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{for _acbed =0;_acbed < _fegf ;_acbed ++{_ggfb =_cfbad (_bcef .Data [_fde +_acbed ]<<_cbde ,_bcef .Data [_fde +_acbed +1]>>_eegg ,_dfdg );_cegf .Data [_bgfc +_acbed ]=^(_ggfb ^_cegf .Data [_bgfc +_acbed ]);
};_bgfc +=_cegf .RowStride ;_fde +=_bcef .RowStride ;};};if _aaac {for _dgcb =0;_dgcb < _dbaeb ;_dgcb ++{_ggfb =_bcef .Data [_ggbab ]<<_cbde ;if _cegg {_ggfb =_cfbad (_ggfb ,_bcef .Data [_ggbab +1]>>_eegg ,_dfdg );};_cegf .Data [_bfed ]=_cfbad (_cegf .Data [_bfed ],^(_ggfb ^_cegf .Data [_bfed ]),_adb );
_bfed +=_cegf .RowStride ;_ggbab +=_bcef .RowStride ;};};default:_f .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",_bbbgf );
return _g .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 (_gaga *byHeight )Less (i ,j int )bool {return _gaga .Values [i ].Height < _gaga .Values [j ].Height };var _cada =[5]int {1,2,3,0,4};func (_cfba MorphProcess )verify (_abbc int ,_gdbc ,_fcbd *int )error {const _cagd ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";
switch _cfba .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_cfba .Arguments )!=2{return _g .Error (_cagd ,"\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");
};_aggf ,_ggffb :=_cfba .getWidthHeight ();if _aggf <=0||_ggffb <=0{return _g .Error (_cagd ,"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 :_bea :=len (_cfba .Arguments );*_gdbc +=_bea ;if _bea < 1||_bea > 4{return _g .Error (_cagd ,"\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 _cabdg :=0;_cabdg < _bea ;_cabdg ++{if _cfba .Arguments [_cabdg ]< 1||_cfba .Arguments [_cabdg ]> 4{return _g .Error (_cagd ,"\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 (_cfba .Arguments )==0{return _g .Error (_cagd ,"\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");
};_eac :=_cfba .Arguments [0];if _eac !=2&&_eac !=4&&_eac !=8{return _g .Error (_cagd ,"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");
};*_gdbc -=_cada [_eac /4];case MopAddBorder :if len (_cfba .Arguments )==0{return _g .Error (_cagd ,"\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");
};_gfba :=_cfba .Arguments [0];if _abbc > 0{return _g .Error (_cagd ,"\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 _gfba < 1{return _g .Error (_cagd ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_fcbd =_gfba ;};return nil ;};func (_bed *Bitmap )GetBitOffset (x int )int {return x &0x07};
const (_afddg shift =iota ;_adcg ;);var MorphBC BoundaryCondition ;func (_daecf *Bitmap )String ()string {var _fee ="\u000a";for _ffd :=0;_ffd < _daecf .Height ;_ffd ++{var _bbd string ;for _fbe :=0;_fbe < _daecf .Width ;_fbe ++{_ebgb :=_daecf .GetPixel (_fbe ,_ffd );
if _ebgb {_bbd +="\u0031";}else {_bbd +="\u0030";};};_fee +=_bbd +"\u000a";};return _fee ;};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_dbede float64 ,_acd error ){const _fgfge ="\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 _dbede ,_g .Error (_fgfge ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _dbede ,_g .Error (_fgfge ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if area1 ==0||area2 ==0{return _dbede ,_g .Error (_fgfge ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_aecb ,_acfgf :=bm1 .Width ,bm1 .Height ;
_dacf ,_gddc :=bm2 .Width ,bm2 .Height ;if _dfde (_aecb -_dacf )> maxDiffW {return 0,nil ;};if _dfde (_acfgf -_gddc )> maxDiffH {return 0,nil ;};var _bged ,_cdfb int ;if delX >=0{_bged =int (delX +0.5);}else {_bged =int (delX -0.5);};if delY >=0{_cdfb =int (delY +0.5);
}else {_cdfb =int (delY -0.5);};_cgbe :=bm1 .createTemplate ();if _acd =_cgbe .RasterOperation (_bged ,_cdfb ,_dacf ,_gddc ,PixSrc ,bm2 ,0,0);_acd !=nil {return _dbede ,_g .Wrap (_acd ,_fgfge ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");
};if _acd =_cgbe .RasterOperation (0,0,_aecb ,_acfgf ,PixSrcAndDst ,bm1 ,0,0);_acd !=nil {return _dbede ,_g .Wrap (_acd ,_fgfge ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_bfgc :=_cgbe .countPixels ();_dbede =float64 (_bfgc )*float64 (_bfgc )/(float64 (area1 )*float64 (area2 ));
return _dbede ,nil ;};func (_acbc *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_gad *Bitmaps ,_bcad *Boxes ,_fed error ){const _fbbg ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";
if _acbc ==nil {return nil ,nil ,_g .Error (_fbbg ,"\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 ,_g .Error (_fbbg ,"\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 _acbc .Zero (){_bcad =&Boxes {};_gad =&Bitmaps {};return _gad ,_bcad ,nil ;};switch components {case ComponentConn :_gad =&Bitmaps {};if _bcad ,_fed =_acbc .ConnComponents (_gad ,8);_fed !=nil {return nil ,nil ,_g .Wrap (_fed ,_fbbg ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};case ComponentCharacters :_fgfc ,_gcbc :=MorphSequence (_acbc ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _gcbc !=nil {return nil ,nil ,_g .Wrap (_gcbc ,_fbbg ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _f .Log .IsLogLevel (_f .LogLevelTrace ){_f .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",_fgfc .String ());
};_abc :=&Bitmaps {};_bcad ,_gcbc =_fgfc .ConnComponents (_abc ,8);if _gcbc !=nil {return nil ,nil ,_g .Wrap (_gcbc ,_fbbg ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _f .Log .IsLogLevel (_f .LogLevelTrace ){_f .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",_abc .String ());
};if _gad ,_gcbc =_abc .ClipToBitmap (_acbc );_gcbc !=nil {return nil ,nil ,_g .Wrap (_gcbc ,_fbbg ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_dbef :=1;
var _eeag *Bitmap ;switch {case _acbc .XResolution <=200:_eeag =_acbc ;case _acbc .XResolution <=400:_dbef =2;_eeag ,_fed =_deeg (_acbc ,1,0,0,0);if _fed !=nil {return nil ,nil ,_g .Wrap (_fed ,_fbbg ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
};default:_dbef =4;_eeag ,_fed =_deeg (_acbc ,1,1,0,0);if _fed !=nil {return nil ,nil ,_g .Wrap (_fed ,_fbbg ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
};};_afb ,_ ,_edcc :=_agfg (_eeag );if _edcc !=nil {return nil ,nil ,_g .Wrap (_edcc ,_fbbg ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_fgba ,_edcc :=_gcef (_afb ,_dbef );if _edcc !=nil {return nil ,nil ,_g .Wrap (_edcc ,_fbbg ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
};_abbg :=&Bitmaps {};if _bcad ,_edcc =_fgba .ConnComponents (_abbg ,4);_edcc !=nil {return nil ,nil ,_g .Wrap (_edcc ,_fbbg ,"\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 _gad ,_edcc =_abbg .ClipToBitmap (_acbc );_edcc !=nil {return nil ,nil ,_g .Wrap (_edcc ,_fbbg ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_gad ,_fed =_gad .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
if _fed !=nil {return nil ,nil ,_g .Wrap (_fed ,_fbbg ,"");};_bcad ,_fed =_bcad .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _fed !=nil {return nil ,nil ,_g .Wrap (_fed ,_fbbg ,"");};return _gad ,_bcad ,nil ;};func _deeg (_afa *Bitmap ,_fa ...int )(_dae *Bitmap ,_adc error ){const _fag ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";
if _afa ==nil {return nil ,_g .Error (_fag ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_fa )==0||len (_fa )> 4{return nil ,_g .Error (_fag ,"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 _fa [0]<=0{_f .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");_dae ,_adc =_abf (nil ,_afa );if _adc !=nil {return nil ,_g .Wrap (_adc ,_fag ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
};return _dae ,nil ;};_dbg :=_fafb ();_dae =_afa ;for _bgb ,_gbga :=range _fa {if _gbga <=0{break ;};_dae ,_adc =_cfab (_dae ,_gbga ,_dbg );if _adc !=nil {return nil ,_g .Wrapf (_adc ,_fag ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_bgb );
};};return _dae ,nil ;};func (_bcd *Bitmap )GetPixel (x ,y int )bool {_degb :=_bcd .GetByteIndex (x ,y );_ddbb :=_bcd .GetBitOffset (x );_dgba :=uint (7-_ddbb );if _degb > len (_bcd .Data )-1{_f .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 ,_bcd );
return false ;};if (_bcd .Data [_degb ]>>_dgba )&0x01>=1{return true ;};return false ;};func _dfde (_cefa int )int {if _cefa < 0{return -_cefa ;};return _cefa ;};func (_ffca *Bitmaps )WidthSorter ()func (_ggdb ,_fafa int )bool {return func (_aaaf ,_acceb int )bool {return _ffca .Values [_aaaf ].Width < _ffca .Values [_acceb ].Width };
};func _ggd ()(_ge [256]uint16 ){for _ggf :=0;_ggf < 256;_ggf ++{if _ggf &0x01!=0{_ge [_ggf ]|=0x3;};if _ggf &0x02!=0{_ge [_ggf ]|=0xc;};if _ggf &0x04!=0{_ge [_ggf ]|=0x30;};if _ggf &0x08!=0{_ge [_ggf ]|=0xc0;};if _ggf &0x10!=0{_ge [_ggf ]|=0x300;};if _ggf &0x20!=0{_ge [_ggf ]|=0xc00;
};if _ggf &0x40!=0{_ge [_ggf ]|=0x3000;};if _ggf &0x80!=0{_ge [_ggf ]|=0xc000;};};return _ge ;};func (_feaa *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_fgaf *Boxes ,_aadd error ){const _cabe ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";
if _feaa ==nil {return nil ,_g .Error (_cabe ,"\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 ,_g .Error (_cabe ,"\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 _fgaf ,_aadd =_feaa .connComponentsBB (connectivity );_aadd !=nil {return nil ,_g .Wrap (_aadd ,_cabe ,"");};}else {if _fgaf ,_aadd =_feaa .connComponentsBitmapsBB (bms ,connectivity );_aadd !=nil {return nil ,_g .Wrap (_aadd ,_cabe ,"");
};};return _fgaf ,nil ;};func (_gcae *Bitmaps )SortByHeight (){_eeeda :=(*byHeight )(_gcae );_ga .Sort (_eeeda )};func _cbg (_eabe ,_adfe *Bitmap ,_gggb *Selection )(*Bitmap ,error ){const _dbcb ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";
var _ebfc error ;if _eabe ,_ebfc =_ggfa (_eabe ,_adfe ,_gggb );_ebfc !=nil {return nil ,_ebfc ;};_gdbd ,_ebfc :=_cgbb (nil ,_adfe ,_gggb );if _ebfc !=nil {return nil ,_g .Wrap (_ebfc ,_dbcb ,"");};if _ ,_ebfc =_dbfae (_eabe ,_gdbd ,_gggb );_ebfc !=nil {return nil ,_g .Wrap (_ebfc ,_dbcb ,"");
};return _eabe ,nil ;};func _deaf (_gag ,_adfee *Bitmap ,_ffga ,_defa int )(*Bitmap ,error ){const _bedgc ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";if _adfee ==nil {return nil ,_g .Error (_bedgc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _ffga < 1||_defa < 1{return nil ,_g .Error (_bedgc ,"\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 _ffga ==1&&_defa ==1{_bbaf ,_dggb :=_abf (_gag ,_adfee );if _dggb !=nil {return nil ,_g .Wrap (_dggb ,_bedgc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _bbaf ,nil ;};if _ffga ==1||_defa ==1{_eacd :=SelCreateBrick (_defa ,_ffga ,_defa /2,_ffga /2,SelHit );_bfdf ,_fceg :=_dbfae (_gag ,_adfee ,_eacd );if _fceg !=nil {return nil ,_g .Wrap (_fceg ,_bedgc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _bfdf ,nil ;};_eedc :=SelCreateBrick (1,_ffga ,0,_ffga /2,SelHit );_acbg :=SelCreateBrick (_defa ,1,_defa /2,0,SelHit );_dage ,_ddbg :=_dbfae (nil ,_adfee ,_eedc );if _ddbg !=nil {return nil ,_g .Wrap (_ddbg ,_bedgc ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_gag ,_ddbg =_dbfae (_gag ,_dage ,_acbg );if _ddbg !=nil {return nil ,_g .Wrap (_ddbg ,_bedgc ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _gag ,nil ;};func (_fabgf *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _beadc ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";
if len (_fabgf .Values )==0{return nil ,_g .Error (_beadc ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_ffbc :=&BitmapsArray {};_fabgf .SortByWidth ();_aeed :=-1;_edcb :=-1;for _edaab :=0;_edaab < len (_fabgf .Values );
_edaab ++{_abac :=_fabgf .Values [_edaab ].Width ;if _abac > _aeed {_aeed =_abac ;_edcb ++;_ffbc .Values =append (_ffbc .Values ,&Bitmaps {});};_ffbc .Values [_edcb ].AddBitmap (_fabgf .Values [_edaab ]);};return _ffbc ,nil ;};type SizeSelection int ;type BoundaryCondition int ;
func ClipBoxToRectangle (box *_bd .Rectangle ,wi ,hi int )(_gaad *_bd .Rectangle ,_gcaad error ){const _bgdd ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,_g .Error (_bgdd ,"\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 ,_g .Error (_bgdd ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");};_adgd :=*box ;
_gaad =&_adgd ;if _gaad .Min .X < 0{_gaad .Max .X +=_gaad .Min .X ;_gaad .Min .X =0;};if _gaad .Min .Y < 0{_gaad .Max .Y +=_gaad .Min .Y ;_gaad .Min .Y =0;};if _gaad .Max .X > wi {_gaad .Max .X =wi ;};if _gaad .Max .Y > hi {_gaad .Max .Y =hi ;};return _gaad ,nil ;
};func _bggd (_ebcg *Bitmap ,_adde ,_ggbe int ,_gcfd ,_gdce int ,_afeg RasterOperator ,_aagf *Bitmap ,_cbaaf ,_efaf int )error {var _bbbb ,_aefd ,_eecf ,_fgfcf int ;if _adde < 0{_cbaaf -=_adde ;_gcfd +=_adde ;_adde =0;};if _cbaaf < 0{_adde -=_cbaaf ;_gcfd +=_cbaaf ;
_cbaaf =0;};_bbbb =_adde +_gcfd -_ebcg .Width ;if _bbbb > 0{_gcfd -=_bbbb ;};_aefd =_cbaaf +_gcfd -_aagf .Width ;if _aefd > 0{_gcfd -=_aefd ;};if _ggbe < 0{_efaf -=_ggbe ;_gdce +=_ggbe ;_ggbe =0;};if _efaf < 0{_ggbe -=_efaf ;_gdce +=_efaf ;_efaf =0;};_eecf =_ggbe +_gdce -_ebcg .Height ;
if _eecf > 0{_gdce -=_eecf ;};_fgfcf =_efaf +_gdce -_aagf .Height ;if _fgfcf > 0{_gdce -=_fgfcf ;};if _gcfd <=0||_gdce <=0{return nil ;};var _dgcf error ;switch {case _adde &7==0&&_cbaaf &7==0:_dgcf =_dagg (_ebcg ,_adde ,_ggbe ,_gcfd ,_gdce ,_afeg ,_aagf ,_cbaaf ,_efaf );
case _adde &7==_cbaaf &7:_dgcf =_cafe (_ebcg ,_adde ,_ggbe ,_gcfd ,_gdce ,_afeg ,_aagf ,_cbaaf ,_efaf );default:_dgcf =_fgdc (_ebcg ,_adde ,_ggbe ,_gcfd ,_gdce ,_afeg ,_aagf ,_cbaaf ,_efaf );};if _dgcf !=nil {return _g .Wrap (_dgcf ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");
};return nil ;};func MakePixelCentroidTab8 ()[]int {return _afafc ()};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func (_fagg *Bitmap )thresholdPixelSum (_gbef int )bool {var (_bgeg int ;_ddfce uint8 ;
_acc byte ;_begb int ;);_dgg :=_fagg .RowStride ;_ccac :=uint (_fagg .Width &0x07);if _ccac !=0{_ddfce =uint8 ((0xff<<(8-_ccac ))&0xff);_dgg --;};for _gce :=0;_gce < _fagg .Height ;_gce ++{for _begb =0;_begb < _dgg ;_begb ++{_acc =_fagg .Data [_gce *_fagg .RowStride +_begb ];
_bgeg +=int (_bdae [_acc ]);};if _ccac !=0{_acc =_fagg .Data [_gce *_fagg .RowStride +_begb ]&_ddfce ;_bgeg +=int (_bdae [_acc ]);};if _bgeg > _gbef {return true ;};};return false ;};func (_gegb *Bitmap )setEightBytes (_gabd int ,_gbcb uint64 )error {_acfg :=_gegb .RowStride -(_gabd %_gegb .RowStride );
if _gegb .RowStride !=_gegb .Width >>3{_acfg --;};if _acfg >=8{return _gegb .setEightFullBytes (_gabd ,_gbcb );};return _gegb .setEightPartlyBytes (_gabd ,_acfg ,_gbcb );};func (_fac *Bitmap )Equivalent (s *Bitmap )bool {return _fac .equivalent (s )};func _bbee (_affag *Bitmap ,_bbda *_gf .Stack ,_cgag ,_efgf ,_cfad int )(_bdbc *_bd .Rectangle ,_efgag error ){const _dgfa ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _affag ==nil {return nil ,_g .Error (_dgfa ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _bbda ==nil {return nil ,_g .Error (_dgfa ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};switch _cfad {case 4:if _bdbc ,_efgag =_ecac (_affag ,_bbda ,_cgag ,_efgf );_efgag !=nil {return nil ,_g .Wrap (_efgag ,_dgfa ,"");};return _bdbc ,nil ;case 8:if _bdbc ,_efgag =_cdcgc (_affag ,_bbda ,_cgag ,_efgf );_efgag !=nil {return nil ,_g .Wrap (_efgag ,_dgfa ,"");
};return _bdbc ,nil ;default:return nil ,_g .Errorf (_dgfa ,"\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",_cfad );
};};func TstWordBitmapWithSpaces (t *_bg .T ,scale ...int )*Bitmap {_egbdd :=1;if len (scale )> 0{_egbdd =scale [0];};_acbge :=3;_ccgc :=9+7+15+2*_acbge +2*_acbge ;_fbcd :=5+_acbge +5+2*_acbge ;_ecad :=New (_ccgc *_egbdd ,_fbcd *_egbdd );_cfade :=&Bitmaps {};
var _gfcc *int ;_acbge *=_egbdd ;_dgdg :=_acbge ;_gfcc =&_dgdg ;_bcee :=_acbge ;_ceggd :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_cfade ,_ceggd ,_gfcc ,_bcee ,1*_egbdd );_ceggd =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_cfade ,_ceggd ,_gfcc ,_bcee ,_acbge );
_ceggd =TstISymbol (t ,scale ...);TstAddSymbol (t ,_cfade ,_ceggd ,_gfcc ,_bcee ,1*_egbdd );_ceggd =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_cfade ,_ceggd ,_gfcc ,_bcee ,_acbge );_ceggd =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_cfade ,_ceggd ,_gfcc ,_bcee ,1*_egbdd );
_ceggd =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_cfade ,_ceggd ,_gfcc ,_bcee ,1*_egbdd );_ceggd =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_cfade ,_ceggd ,_gfcc ,_bcee ,0);*_gfcc =_acbge ;_bcee =5*_egbdd +_acbge ;_ceggd =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_cfade ,_ceggd ,_gfcc ,_bcee ,1*_egbdd );
_ceggd =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_cfade ,_ceggd ,_gfcc ,_bcee ,_acbge );_ceggd =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_cfade ,_ceggd ,_gfcc ,_bcee ,1*_egbdd );_ceggd =TstESymbol (t ,scale ...);TstAddSymbol (t ,_cfade ,_ceggd ,_gfcc ,_bcee ,1*_egbdd );
_ceggd =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_cfade ,_ceggd ,_gfcc ,_bcee ,1*_egbdd );_ceggd =TstESymbol (t ,scale ...);TstAddSymbol (t ,_cfade ,_ceggd ,_gfcc ,_bcee ,1*_egbdd );_ceggd =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_cfade ,_ceggd ,_gfcc ,_bcee ,0);
TstWriteSymbols (t ,_cfade ,_ecad );return _ecad ;};func (_dcee *Bitmaps )selectByIndicator (_egbc *_gf .NumSlice )(_dgcfg *Bitmaps ,_aebeb error ){const _dcbe ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _dcee ==nil {return nil ,_g .Error (_dcbe ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _egbc ==nil {return nil ,_g .Error (_dcbe ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};if len (_dcee .Values )==0{return _dcee ,nil ;};if len (*_egbc )!=len (_dcee .Values ){return nil ,_g .Errorf (_dcbe ,"\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 (*_egbc ),len (_dcee .Values ));
};var _daeg ,_ecdd ,_fgbb int ;for _ecdd =0;_ecdd < len (*_egbc );_ecdd ++{if _daeg ,_aebeb =_egbc .GetInt (_ecdd );_aebeb !=nil {return nil ,_g .Wrap (_aebeb ,_dcbe ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _daeg ==1{_fgbb ++;
};};if _fgbb ==len (_dcee .Values ){return _dcee ,nil ;};_dgcfg =&Bitmaps {};_gbcfd :=len (_dcee .Values )==len (_dcee .Boxes );for _ecdd =0;_ecdd < len (*_egbc );_ecdd ++{if _daeg =int ((*_egbc )[_ecdd ]);_daeg ==0{continue ;};_dgcfg .Values =append (_dgcfg .Values ,_dcee .Values [_ecdd ]);
if _gbcfd {_dgcfg .Boxes =append (_dgcfg .Boxes ,_dcee .Boxes [_ecdd ]);};};return _dgcfg ,nil ;};func _cfdeg (_aaaa ,_gga *Bitmap ,_cdae *Selection )(*Bitmap ,error ){const _ddeb ="\u006f\u0070\u0065\u006e";var _cdbc error ;_aaaa ,_cdbc =_ggfa (_aaaa ,_gga ,_cdae );
if _cdbc !=nil {return nil ,_g .Wrap (_cdbc ,_ddeb ,"");};_gdgb ,_cdbc :=_dbfae (nil ,_gga ,_cdae );if _cdbc !=nil {return nil ,_g .Wrap (_cdbc ,_ddeb ,"");};_ ,_cdbc =_cgbb (_aaaa ,_gdgb ,_cdae );if _cdbc !=nil {return nil ,_g .Wrap (_cdbc ,_ddeb ,"");
};return _aaaa ,nil ;};func _ecac (_agbfc *Bitmap ,_adee *_gf .Stack ,_dedgc ,_bbacd int )(_deegf *_bd .Rectangle ,_bfbd error ){const _eaccc ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _agbfc ==nil {return nil ,_g .Error (_eaccc ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
};if _adee ==nil {return nil ,_g .Error (_eaccc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_ccacg ,_affb :=_agbfc .Width ,_agbfc .Height ;_fcda :=_ccacg -1;_cagf :=_affb -1;if _dedgc < 0||_dedgc > _fcda ||_bbacd < 0||_bbacd > _cagf ||!_agbfc .GetPixel (_dedgc ,_bbacd ){return nil ,nil ;
};var _beef *_bd .Rectangle ;_beef ,_bfbd =Rect (100000,100000,0,0);if _bfbd !=nil {return nil ,_g .Wrap (_bfbd ,_eaccc ,"");};if _bfbd =_cbgb (_adee ,_dedgc ,_dedgc ,_bbacd ,1,_cagf ,_beef );_bfbd !=nil {return nil ,_g .Wrap (_bfbd ,_eaccc ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
};if _bfbd =_cbgb (_adee ,_dedgc ,_dedgc ,_bbacd +1,-1,_cagf ,_beef );_bfbd !=nil {return nil ,_g .Wrap (_bfbd ,_eaccc ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_beef .Min .X ,_beef .Max .X =_dedgc ,_dedgc ;
_beef .Min .Y ,_beef .Max .Y =_bbacd ,_bbacd ;var (_baggf *fillSegment ;_fagee int ;);for _adee .Len ()> 0{if _baggf ,_bfbd =_ccbdb (_adee );_bfbd !=nil {return nil ,_g .Wrap (_bfbd ,_eaccc ,"");};_bbacd =_baggf ._ggca ;for _dedgc =_baggf ._dddg ;_dedgc >=0&&_agbfc .GetPixel (_dedgc ,_bbacd );
_dedgc --{if _bfbd =_agbfc .SetPixel (_dedgc ,_bbacd ,0);_bfbd !=nil {return nil ,_g .Wrap (_bfbd ,_eaccc ,"");};};if _dedgc >=_baggf ._dddg {for _dedgc ++;_dedgc <=_baggf ._cdbfe &&_dedgc <=_fcda &&!_agbfc .GetPixel (_dedgc ,_bbacd );_dedgc ++{};_fagee =_dedgc ;
if !(_dedgc <=_baggf ._cdbfe &&_dedgc <=_fcda ){continue ;};}else {_fagee =_dedgc +1;if _fagee < _baggf ._dddg -1{if _bfbd =_cbgb (_adee ,_fagee ,_baggf ._dddg -1,_baggf ._ggca ,-_baggf ._effg ,_cagf ,_beef );_bfbd !=nil {return nil ,_g .Wrap (_bfbd ,_eaccc ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_dedgc =_baggf ._dddg +1;};for {for ;_dedgc <=_fcda &&_agbfc .GetPixel (_dedgc ,_bbacd );_dedgc ++{if _bfbd =_agbfc .SetPixel (_dedgc ,_bbacd ,0);_bfbd !=nil {return nil ,_g .Wrap (_bfbd ,_eaccc ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bfbd =_cbgb (_adee ,_fagee ,_dedgc -1,_baggf ._ggca ,_baggf ._effg ,_cagf ,_beef );
_bfbd !=nil {return nil ,_g .Wrap (_bfbd ,_eaccc ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _dedgc > _baggf ._cdbfe +1{if _bfbd =_cbgb (_adee ,_baggf ._cdbfe +1,_dedgc -1,_baggf ._ggca ,-_baggf ._effg ,_cagf ,_beef );_bfbd !=nil {return nil ,_g .Wrap (_bfbd ,_eaccc ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _dedgc ++;_dedgc <=_baggf ._cdbfe &&_dedgc <=_fcda &&!_agbfc .GetPixel (_dedgc ,_bbacd );_dedgc ++{};_fagee =_dedgc ;if !(_dedgc <=_baggf ._cdbfe &&_dedgc <=_fcda ){break ;};};};_beef .Max .X ++;_beef .Max .Y ++;return _beef ,nil ;};type SizeComparison int ;
func (_adcc *Bitmap )GetUnpaddedData ()([]byte ,error ){_dace :=uint (_adcc .Width &0x07);if _dace ==0{return _adcc .Data ,nil ;};_dece :=_adcc .Width *_adcc .Height ;if _dece %8!=0{_dece >>=3;_dece ++;}else {_dece >>=3;};_degg :=make ([]byte ,_dece );
_ebgf :=_ec .NewWriterMSB (_degg );const _dgbf ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _efef :=0;_efef < _adcc .Height ;_efef ++{for _afc :=0;_afc < _adcc .RowStride ;_afc ++{_aad :=_adcc .Data [_efef *_adcc .RowStride +_afc ];
if _afc !=_adcc .RowStride -1{_gea :=_ebgf .WriteByte (_aad );if _gea !=nil {return nil ,_g .Wrap (_gea ,_dgbf ,"");};continue ;};for _gcaa :=uint (0);_gcaa < _dace ;_gcaa ++{_gccf :=_ebgf .WriteBit (int (_aad >>(7-_gcaa )&0x01));if _gccf !=nil {return nil ,_g .Wrap (_gccf ,_dgbf ,"");
};};};};return _degg ,nil ;};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func (_ecc *Bitmap )equivalent (_dedc *Bitmap )bool {if _ecc ==_dedc {return true ;};if !_ecc .SizesEqual (_dedc ){return false ;
};_ffcb :=_efdg (_ecc ,_dedc ,CmbOpXor );_aabe :=_ecc .countPixels ();_cbaa :=int (0.25*float32 (_aabe ));if _ffcb .thresholdPixelSum (_cbaa ){return false ;};var (_edeb [9][9]int ;_dbc [18][9]int ;_gabe [9][18]int ;_dabf int ;_egg int ;);_dfd :=9;_ebbg :=_ecc .Height /_dfd ;
_bfag :=_ecc .Width /_dfd ;_baea ,_adaa :=_ebbg /2,_bfag /2;if _ebbg < _bfag {_baea =_bfag /2;_adaa =_ebbg /2;};_dcgf :=float64 (_baea )*float64 (_adaa )*_ef .Pi ;_eff :=int (float64 (_ebbg *_bfag /2)*0.9);_dde :=int (float64 (_bfag *_ebbg /2)*0.9);for _adag :=0;
_adag < _dfd ;_adag ++{_efdc :=_bfag *_adag +_dabf ;var _fcf int ;if _adag ==_dfd -1{_dabf =0;_fcf =_ecc .Width ;}else {_fcf =_efdc +_bfag ;if ((_ecc .Width -_dabf )%_dfd )> 0{_dabf ++;_fcf ++;};};for _cgad :=0;_cgad < _dfd ;_cgad ++{_cef :=_ebbg *_cgad +_egg ;
var _geg int ;if _cgad ==_dfd -1{_egg =0;_geg =_ecc .Height ;}else {_geg =_cef +_ebbg ;if (_ecc .Height -_egg )%_dfd > 0{_egg ++;_geg ++;};};var _gaff ,_aef ,_cfg ,_fcc int ;_cee :=(_efdc +_fcf )/2;_gcb :=(_cef +_geg )/2;for _edad :=_efdc ;_edad < _fcf ;
_edad ++{for _bgeb :=_cef ;_bgeb < _geg ;_bgeb ++{if _ffcb .GetPixel (_edad ,_bgeb ){if _edad < _cee {_gaff ++;}else {_aef ++;};if _bgeb < _gcb {_fcc ++;}else {_cfg ++;};};};};_edeb [_adag ][_cgad ]=_gaff +_aef ;_dbc [_adag *2][_cgad ]=_gaff ;_dbc [_adag *2+1][_cgad ]=_aef ;
_gabe [_adag ][_cgad *2]=_fcc ;_gabe [_adag ][_cgad *2+1]=_cfg ;};};for _adg :=0;_adg < _dfd *2-1;_adg ++{for _gbgea :=0;_gbgea < (_dfd -1);_gbgea ++{var _gfda int ;for _eca :=0;_eca < 2;_eca ++{for _bdgd :=0;_bdgd < 2;_bdgd ++{_gfda +=_dbc [_adg +_eca ][_gbgea +_bdgd ];
};};if _gfda > _dde {return false ;};};};for _aff :=0;_aff < (_dfd -1);_aff ++{for _ffb :=0;_ffb < ((_dfd *2)-1);_ffb ++{var _egb int ;for _bef :=0;_bef < 2;_bef ++{for _cad :=0;_cad < 2;_cad ++{_egb +=_gabe [_aff +_bef ][_ffb +_cad ];};};if _egb > _eff {return false ;
};};};for _cdcce :=0;_cdcce < (_dfd -2);_cdcce ++{for _bgbb :=0;_bgbb < (_dfd -2);_bgbb ++{var _bbge ,_beda int ;for _edbf :=0;_edbf < 3;_edbf ++{for _faee :=0;_faee < 3;_faee ++{if _edbf ==_faee {_bbge +=_edeb [_cdcce +_edbf ][_bgbb +_faee ];};if (2-_edbf )==_faee {_beda +=_edeb [_cdcce +_edbf ][_bgbb +_faee ];
};};};if _bbge > _dde ||_beda > _dde {return false ;};};};for _cda :=0;_cda < (_dfd -1);_cda ++{for _dbde :=0;_dbde < (_dfd -1);_dbde ++{var _cged int ;for _cbf :=0;_cbf < 2;_cbf ++{for _bab :=0;_bab < 2;_bab ++{_cged +=_edeb [_cda +_cbf ][_dbde +_bab ];
};};if float64 (_cged )> _dcgf {return false ;};};};return true ;};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 ;);const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func (_abae *Bitmap )connComponentsBB (_cdce int )(_degf *Boxes ,_eeda error ){const _ggdfe ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";
if _cdce !=4&&_cdce !=8{return nil ,_g .Error (_ggdfe ,"\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 _abae .Zero (){return &Boxes {},nil ;
};_abae .setPadBits (0);_bddg ,_eeda :=_abf (nil ,_abae );if _eeda !=nil {return nil ,_g .Wrap (_eeda ,_ggdfe ,"\u0062\u006d\u0031");};_fbfg :=&_gf .Stack {};_fbfg .Aux =&_gf .Stack {};_degf =&Boxes {};var (_aebb ,_fgaaa int ;_ffcc _bd .Point ;_gdae bool ;
_ggba *_bd .Rectangle ;);for {if _ffcc ,_gdae ,_eeda =_bddg .nextOnPixel (_fgaaa ,_aebb );_eeda !=nil {return nil ,_g .Wrap (_eeda ,_ggdfe ,"");};if !_gdae {break ;};if _ggba ,_eeda =_bbee (_bddg ,_fbfg ,_ffcc .X ,_ffcc .Y ,_cdce );_eeda !=nil {return nil ,_g .Wrap (_eeda ,_ggdfe ,"");
};if _eeda =_degf .Add (_ggba );_eeda !=nil {return nil ,_g .Wrap (_eeda ,_ggdfe ,"");};_fgaaa =_ffcc .X ;_aebb =_ffcc .Y ;};return _degf ,nil ;};func _dgf (_ccfa *Bitmap ,_ceca ,_efaa ,_beaa ,_fbbc int ,_dgbc RasterOperator ,_cbabb *Bitmap ,_gffb ,_ffgg int )error {const _ecdea ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";
if _ccfa ==nil {return _g .Error (_ecdea ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _dgbc ==PixDst {return nil ;};switch _dgbc {case PixClr ,PixSet ,PixNotDst :_ddfb (_ccfa ,_ceca ,_efaa ,_beaa ,_fbbc ,_dgbc );
return nil ;};if _cbabb ==nil {_f .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 _g .Error (_ecdea ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _baeg :=_bggd (_ccfa ,_ceca ,_efaa ,_beaa ,_fbbc ,_dgbc ,_cbabb ,_gffb ,_ffgg );_baeg !=nil {return _g .Wrap (_baeg ,_ecdea ,"");};
return nil ;};func (_egfe *byHeight )Swap (i ,j int ){_egfe .Values [i ],_egfe .Values [j ]=_egfe .Values [j ],_egfe .Values [i ];if _egfe .Boxes !=nil {_egfe .Boxes [i ],_egfe .Boxes [j ]=_egfe .Boxes [j ],_egfe .Boxes [i ];};};func (_aaf *Bitmap )ClipRectangle (box *_bd .Rectangle )(_aaa *Bitmap ,_ggg *_bd .Rectangle ,_cff error ){const _gcc ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,nil ,_g .Error (_gcc ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_ecda ,_aedd :=_aaf .Width ,_aaf .Height ;_cfc :=_bd .Rect (0,0,_ecda ,_aedd );if !box .Overlaps (_cfc ){return nil ,nil ,_g .Error (_gcc ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");
};_aab :=box .Intersect (_cfc );_faad ,_fgd :=_aab .Min .X ,_aab .Min .Y ;_egf ,_dbed :=_aab .Dx (),_aab .Dy ();_aaa =New (_egf ,_dbed );_aaa .Text =_aaf .Text ;if _cff =_aaa .RasterOperation (0,0,_egf ,_dbed ,PixSrc ,_aaf ,_faad ,_fgd );_cff !=nil {return nil ,nil ,_g .Wrap (_cff ,_gcc ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
};_ggg =&_aab ;return _aaa ,_ggg ,nil ;};func _acf (_cab ,_fce *Bitmap ,_dab int ,_fgef []byte ,_fbb int )(_aa error ){const _gfa ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";
var (_bdf ,_cbcc ,_aeda ,_bce ,_cdb ,_bda ,_ace ,_dda int ;_bdbb ,_aag ,_bbg ,_eaf uint32 ;_fgeg ,_cde byte ;_ecg uint16 ;);_dcb :=make ([]byte ,4);_gdd :=make ([]byte ,4);for _aeda =0;_aeda < _cab .Height -1;_aeda ,_bce =_aeda +2,_bce +1{_bdf =_aeda *_cab .RowStride ;
_cbcc =_bce *_fce .RowStride ;for _cdb ,_bda =0,0;_cdb < _fbb ;_cdb ,_bda =_cdb +4,_bda +1{for _ace =0;_ace < 4;_ace ++{_dda =_bdf +_cdb +_ace ;if _dda <=len (_cab .Data )-1&&_dda < _bdf +_cab .RowStride {_dcb [_ace ]=_cab .Data [_dda ];}else {_dcb [_ace ]=0x00;
};_dda =_bdf +_cab .RowStride +_cdb +_ace ;if _dda <=len (_cab .Data )-1&&_dda < _bdf +(2*_cab .RowStride ){_gdd [_ace ]=_cab .Data [_dda ];}else {_gdd [_ace ]=0x00;};};_bdbb =_c .BigEndian .Uint32 (_dcb );_aag =_c .BigEndian .Uint32 (_gdd );_bbg =_bdbb &_aag ;
_bbg |=_bbg <<1;_eaf =_bdbb |_aag ;_eaf &=_eaf <<1;_aag =_bbg &_eaf ;_aag &=0xaaaaaaaa;_bdbb =_aag |(_aag <<7);_fgeg =byte (_bdbb >>24);_cde =byte ((_bdbb >>8)&0xff);_dda =_cbcc +_bda ;if _dda +1==len (_fce .Data )-1||_dda +1>=_cbcc +_fce .RowStride {if _aa =_fce .SetByte (_dda ,_fgef [_fgeg ]);
_aa !=nil {return _g .Wrapf (_aa ,_gfa ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_dda );};}else {_ecg =(uint16 (_fgef [_fgeg ])<<8)|uint16 (_fgef [_cde ]);if _aa =_fce .setTwoBytes (_dda ,_ecg );_aa !=nil {return _g .Wrapf (_aa ,_gfa ,"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",_dda );
};_bda ++;};};};return nil ;};func (_decd *Bitmap )inverseData (){if _gebb :=_decd .RasterOperation (0,0,_decd .Width ,_decd .Height ,PixNotDst ,nil ,0,0);_gebb !=nil {_f .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_gebb );
};if _decd .Color ==Chocolate {_decd .Color =Vanilla ;}else {_decd .Color =Chocolate ;};};type fillSegment struct{_dddg int ;_cdbfe int ;_ggca int ;_effg int ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _abf (d ,s )};type byWidth Bitmaps ;func _ccfc (_edcg ,_cdba *Bitmap ,_fcbdg ,_fdbb int )(*Bitmap ,error ){const _cccd ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";
if _cdba ==nil {return nil ,_g .Error (_cccd ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _fcbdg < 1||_fdbb < 1{return nil ,_g .Error (_cccd ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
};if _fcbdg ==1&&_fdbb ==1{return _abf (_edcg ,_cdba );};if MorphBC ==SymmetricMorphBC {_caece ,_egbd :=_cbbe (_edcg ,_cdba ,_fcbdg ,_fdbb );if _egbd !=nil {return nil ,_g .Wrap (_egbd ,_cccd ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");
};return _caece ,nil ;};_gdc :=_egfc (_fcbdg /2,_fdbb /2);_abg :=8*((_gdc +7)/8);_ecdfe ,_cffg :=_cdba .AddBorder (_abg ,0);if _cffg !=nil {return nil ,_g .Wrapf (_cffg ,_cccd ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_abg );
};var _ggec ,_dadbc *Bitmap ;if _fcbdg ==1||_fdbb ==1{_dagd :=SelCreateBrick (_fdbb ,_fcbdg ,_fdbb /2,_fcbdg /2,SelHit );_ggec ,_cffg =_cbg (nil ,_ecdfe ,_dagd );if _cffg !=nil {return nil ,_g .Wrap (_cffg ,_cccd ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};}else {_bfe :=SelCreateBrick (1,_fcbdg ,0,_fcbdg /2,SelHit );_aeae ,_cdfg :=_cgbb (nil ,_ecdfe ,_bfe );if _cdfg !=nil {return nil ,_g .Wrap (_cdfg ,_cccd ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");
};_afbd :=SelCreateBrick (_fdbb ,1,_fdbb /2,0,SelHit );_ggec ,_cdfg =_cgbb (nil ,_aeae ,_afbd );if _cdfg !=nil {return nil ,_g .Wrap (_cdfg ,_cccd ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _ ,_cdfg =_dbfae (_aeae ,_ggec ,_bfe );_cdfg !=nil {return nil ,_g .Wrap (_cdfg ,_cccd ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_cdfg =_dbfae (_ggec ,_aeae ,_afbd );_cdfg !=nil {return nil ,_g .Wrap (_cdfg ,_cccd ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
};};if _dadbc ,_cffg =_ggec .RemoveBorder (_abg );_cffg !=nil {return nil ,_g .Wrap (_cffg ,_cccd ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _edcg ==nil {return _dadbc ,nil ;};if _ ,_cffg =_abf (_edcg ,_dadbc );_cffg !=nil {return nil ,_cffg ;};return _edcg ,nil ;
};func (_dada *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _dada .addBorderGeneral (left ,right ,top ,bot ,val );};type LocationFilter int ;func TstImageBitmapInverseData ()[]byte {_defec :=_bafe .Copy ();_defec .InverseData ();
return _defec .Data ;};var (_eecde =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_eefe =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};type byHeight Bitmaps ;func (_ebba *Bitmap )CreateTemplate ()*Bitmap {return _ebba .createTemplate ()};
func (_cfabaa *ClassedPoints )ySortFunction ()func (_baba int ,_gcfg int )bool {return func (_ddgc ,_defe int )bool {return _cfabaa .YAtIndex (_ddgc )< _cfabaa .YAtIndex (_defe )};};func _degfg (_ffde ,_ffe *Bitmap ,_gacbc ,_eefa int )(*Bitmap ,error ){const _gcda ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";
if _ffe ==nil {_f .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 ,_g .Error (_gcda ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _gacbc < 1||_eefa < 1{return nil ,_g .Error (_gcda ,"\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 _gacbc ==1&&_eefa ==1{_dceb ,_befgd :=_abf (_ffde ,_ffe );if _befgd !=nil {return nil ,_g .Wrap (_befgd ,_gcda ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _dceb ,nil ;};if _gacbc ==1||_eefa ==1{_ddcg :=SelCreateBrick (_eefa ,_gacbc ,_eefa /2,_gacbc /2,SelHit );_agab ,_bgaa :=_cgbb (_ffde ,_ffe ,_ddcg );if _bgaa !=nil {return nil ,_g .Wrap (_bgaa ,_gcda ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _agab ,nil ;};_ddac :=SelCreateBrick (1,_gacbc ,0,_gacbc /2,SelHit );_cbgd :=SelCreateBrick (_eefa ,1,_eefa /2,0,SelHit );_effd ,_cece :=_cgbb (nil ,_ffe ,_ddac );if _cece !=nil {return nil ,_g .Wrap (_cece ,_gcda ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_ffde ,_cece =_cgbb (_ffde ,_effd ,_cbgd );if _cece !=nil {return nil ,_g .Wrap (_cece ,_gcda ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _ffde ,nil ;};func (_dfee *Bitmap )Equals (s *Bitmap )bool {if len (_dfee .Data )!=len (s .Data )||_dfee .Width !=s .Width ||_dfee .Height !=s .Height {return false ;
};for _efc :=0;_efc < _dfee .Height ;_efc ++{_dbee :=_efc *_dfee .RowStride ;for _edeg :=0;_edeg < _dfee .RowStride ;_edeg ++{if _dfee .Data [_dbee +_edeg ]!=s .Data [_dbee +_edeg ]{return false ;};};};return true ;};func (_ggcg *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _dgf (_ggcg ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _bdaee (src ,sequence ...);};func _gg (_gd ,_ggc *Bitmap )(_a error ){const _bdb ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";
_fc :=_ggc .RowStride ;_d :=_gd .RowStride ;var (_cc byte ;_dg uint16 ;_de ,_cf ,_db ,_ded ,_gaa int ;);for _db =0;_db < _ggc .Height ;_db ++{_de =_db *_fc ;_cf =2*_db *_d ;for _ded =0;_ded < _fc ;_ded ++{_cc =_ggc .Data [_de +_ded ];_dg =_fcag [_cc ];
_gaa =_cf +_ded *2;if _gd .RowStride !=_ggc .RowStride *2&&(_ded +1)*2> _gd .RowStride {_a =_gd .SetByte (_gaa ,byte (_dg >>8));}else {_a =_gd .setTwoBytes (_gaa ,_dg );};if _a !=nil {return _g .Wrap (_a ,_bdb ,"");};};for _ded =0;_ded < _d ;_ded ++{_gaa =_cf +_d +_ded ;
_cc =_gd .Data [_cf +_ded ];if _a =_gd .SetByte (_gaa ,_cc );_a !=nil {return _g .Wrapf (_a ,_bdb ,"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",_cf +_ded ,_cf +_d +_ded );
};};};return nil ;};func MakePixelSumTab8 ()[]int {return _aeef ()};func (_faadg *Bitmap )SetPixel (x ,y int ,pixel byte )error {_efb :=_faadg .GetByteIndex (x ,y );if _efb > len (_faadg .Data )-1{return _g .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",_efb );
};_fd :=_faadg .GetBitOffset (x );_cdg :=uint (7-_fd );_ecfa :=_faadg .Data [_efb ];var _fdb byte ;if pixel ==1{_fdb =_ecfa |(pixel &0x01<<_cdg );}else {_fdb =_ecfa &^(1<<_cdg );};_faadg .Data [_efb ]=_fdb ;return nil ;};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _bdcc ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";
_fgab :=_dacd (width ,height );_fgab .Data =data ;if len (data )< height *_fgab .RowStride {return nil ,_g .Errorf (_bdcc ,"\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 *_fgab .RowStride );
};return _fgab ,nil ;};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _abd ,_cbac int ;_gbec :=src .RowStride -1;if x < 0{_cbac =-x ;x =0;}else if x +src .Width > dst .Width {_gbec -=src .Width +x -dst .Width ;};if y < 0{_abd =-y ;
y =0;_cbac +=src .RowStride ;_gbec +=src .RowStride ;}else if y +src .Height > dst .Height {_abd =src .Height +y -dst .Height ;};var (_eecbc int ;_fgaa error ;);_bffa :=x &0x07;_abfg :=8-_bffa ;_ebgfe :=src .Width &0x07;_aeg :=_abfg -_ebgfe ;_bbbf :=_abfg &0x07!=0;
_dbfb :=src .Width <=((_gbec -_cbac )<<3)+_abfg ;_facdf :=dst .GetByteIndex (x ,y );_bcff :=_abd +dst .Height ;if src .Height > _bcff {_eecbc =_bcff ;}else {_eecbc =src .Height ;};switch {case !_bbbf :_fgaa =_ebge (src ,dst ,_abd ,_eecbc ,_facdf ,_cbac ,_gbec ,op );
case _dbfb :_fgaa =_aaeg (src ,dst ,_abd ,_eecbc ,_facdf ,_cbac ,_gbec ,_aeg ,_bffa ,_abfg ,op );default:_fgaa =_aabc (src ,dst ,_abd ,_eecbc ,_facdf ,_cbac ,_gbec ,_aeg ,_bffa ,_abfg ,op ,_ebgfe );};return _fgaa ;};func (_abdf *ClassedPoints )YAtIndex (i int )float32 {return (*_abdf .Points )[_abdf .IntSlice [i ]].Y };
func (_eggd *Bitmap )nextOnPixelLow (_dgbg ,_dbgf ,_efdd ,_gebc ,_eeee int )(_bebf _bd .Point ,_gegc bool ,_dfce error ){const _dfdd ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";var (_gcba int ;
_fgec byte ;);_dfg :=_eeee *_efdd ;_cae :=_dfg +(_gebc /8);if _fgec ,_dfce =_eggd .GetByte (_cae );_dfce !=nil {return _bebf ,false ,_g .Wrap (_dfce ,_dfdd ,"\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 _fgec !=0{_baa :=_gebc -(_gebc %8)+7;for _gcba =_gebc ;_gcba <=_baa &&_gcba < _dgbg ;_gcba ++{if _eggd .GetPixel (_gcba ,_eeee ){_bebf .X =_gcba ;_bebf .Y =_eeee ;return _bebf ,true ,nil ;};};};_cce :=(_gebc /8)+1;_gcba =8*_cce ;var _bgg int ;for _cae =_dfg +_cce ;
_gcba < _dgbg ;_cae ,_gcba =_cae +1,_gcba +8{if _fgec ,_dfce =_eggd .GetByte (_cae );_dfce !=nil {return _bebf ,false ,_g .Wrap (_dfce ,_dfdd ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _fgec ==0{continue ;
};for _bgg =0;_bgg < 8&&_gcba < _dgbg ;_bgg ,_gcba =_bgg +1,_gcba +1{if _eggd .GetPixel (_gcba ,_eeee ){_bebf .X =_gcba ;_bebf .Y =_eeee ;return _bebf ,true ,nil ;};};};for _cgf :=_eeee +1;_cgf < _dbgf ;_cgf ++{_dfg =_cgf *_efdd ;for _cae ,_gcba =_dfg ,0;
_gcba < _dgbg ;_cae ,_gcba =_cae +1,_gcba +8{if _fgec ,_dfce =_eggd .GetByte (_cae );_dfce !=nil {return _bebf ,false ,_g .Wrap (_dfce ,_dfdd ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _fgec ==0{continue ;
};for _bgg =0;_bgg < 8&&_gcba < _dgbg ;_bgg ,_gcba =_bgg +1,_gcba +1{if _eggd .GetPixel (_gcba ,_cgf ){_bebf .X =_gcba ;_bebf .Y =_cgf ;return _bebf ,true ,nil ;};};};};return _bebf ,false ,nil ;};func (_ecec Points )YSorter ()func (_egcdg ,_gbcd int )bool {return func (_fgcd ,_gcdc int )bool {return _ecec [_fgcd ].Y < _ecec [_gcdc ].Y };
};func _cbgb (_fdag *_gf .Stack ,_beadg ,_bgde ,_eedcd ,_fcbf ,_dfgd int ,_gbac *_bd .Rectangle )(_eaaa error ){const _faga ="\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 _fdag ==nil {return _g .Error (_faga ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _gbac ==nil {return _g .Error (_faga ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
};_gbac .Min .X =_gf .Min (_gbac .Min .X ,_beadg );_gbac .Max .X =_gf .Max (_gbac .Max .X ,_bgde );_gbac .Min .Y =_gf .Min (_gbac .Min .Y ,_eedcd );_gbac .Max .Y =_gf .Max (_gbac .Max .Y ,_eedcd );if !(_eedcd +_fcbf >=0&&_eedcd +_fcbf <=_dfgd ){return nil ;
};if _fdag .Aux ==nil {return _g .Error (_faga ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _gcdg *fillSegment ;_fadb ,_ddea :=_fdag .Aux .Pop ();if _ddea {if _gcdg ,_ddea =_fadb .(*fillSegment );
!_ddea {return _g .Error (_faga ,"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 {_gcdg =&fillSegment {};
};_gcdg ._dddg =_beadg ;_gcdg ._cdbfe =_bgde ;_gcdg ._ggca =_eedcd ;_gcdg ._effg =_fcbf ;_fdag .Push (_gcdg );return nil ;};func (_begc *Bitmap )clipRectangle (_fadc ,_cbe *_bd .Rectangle )(_bbgb *Bitmap ,_gded error ){const _ebf ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if _fadc ==nil {return nil ,_g .Error (_ebf ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_ggbb ,_gace :=_begc .Width ,_begc .Height ;_dfeg ,_gded :=ClipBoxToRectangle (_fadc ,_ggbb ,_gace );if _gded !=nil {_f .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",_gded );
return nil ,nil ;};_agf ,_bgbg :=_dfeg .Min .X ,_dfeg .Min .Y ;_dcge ,_bcf :=_dfeg .Max .X -_dfeg .Min .X ,_dfeg .Max .Y -_dfeg .Min .Y ;_bbgb =New (_dcge ,_bcf );_bbgb .Text =_begc .Text ;if _gded =_bbgb .RasterOperation (0,0,_dcge ,_bcf ,PixSrc ,_begc ,_agf ,_bgbg );
_gded !=nil {return nil ,_g .Wrap (_gded ,_ebf ,"");};if _cbe !=nil {*_cbe =*_dfeg ;};return _bbgb ,nil ;};func _cbfg (_cgeb *Bitmap ,_daee ,_eabf int ,_ebbc ,_bace int ,_bbaa RasterOperator ){var (_cadaa int ;_cgdb byte ;_dafd ,_cebbb int ;_fafge int ;
);_gbb :=_ebbc >>3;_bacc :=_ebbc &7;if _bacc > 0{_cgdb =_eecde [_bacc ];};_cadaa =_cgeb .RowStride *_eabf +(_daee >>3);switch _bbaa {case PixClr :for _dafd =0;_dafd < _bace ;_dafd ++{_fafge =_cadaa +_dafd *_cgeb .RowStride ;for _cebbb =0;_cebbb < _gbb ;
_cebbb ++{_cgeb .Data [_fafge ]=0x0;_fafge ++;};if _bacc > 0{_cgeb .Data [_fafge ]=_cfbad (_cgeb .Data [_fafge ],0x0,_cgdb );};};case PixSet :for _dafd =0;_dafd < _bace ;_dafd ++{_fafge =_cadaa +_dafd *_cgeb .RowStride ;for _cebbb =0;_cebbb < _gbb ;_cebbb ++{_cgeb .Data [_fafge ]=0xff;
_fafge ++;};if _bacc > 0{_cgeb .Data [_fafge ]=_cfbad (_cgeb .Data [_fafge ],0xff,_cgdb );};};case PixNotDst :for _dafd =0;_dafd < _bace ;_dafd ++{_fafge =_cadaa +_dafd *_cgeb .RowStride ;for _cebbb =0;_cebbb < _gbb ;_cebbb ++{_cgeb .Data [_fafge ]=^_cgeb .Data [_fafge ];
_fafge ++;};if _bacc > 0{_cgeb .Data [_fafge ]=_cfbad (_cgeb .Data [_fafge ],^_cgeb .Data [_fafge ],_cgdb );};};};};func (_dgae *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _dfge ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";
if _dgae ==nil {return nil ,_g .Error (_dfge ,"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 (_dgae .Values )-1{return nil ,_g .Errorf (_dfge ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _dgae .Values [i ],nil ;};func (_ffcg *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _ffcg .Copy (),nil ;};_geb ,_ab :=_ffcg .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _ab !=nil {return nil ,_g .Wrap (_ab ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");
};return _geb ,nil ;};func _dbae (_fadca ,_bebfb byte ,_dbfa CombinationOperator )byte {switch _dbfa {case CmbOpOr :return _bebfb |_fadca ;case CmbOpAnd :return _bebfb &_fadca ;case CmbOpXor :return _bebfb ^_fadca ;case CmbOpXNor :return ^(_bebfb ^_fadca );
case CmbOpNot :return ^(_bebfb );default:return _bebfb ;};};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _dgf (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func (_cdccg *Bitmap )centroid (_gbeb ,_ddaf []int )(Point ,error ){_fdfc :=Point {};
_cdccg .setPadBits (0);if len (_gbeb )==0{_gbeb =_afafc ();};if len (_ddaf )==0{_ddaf =_aeef ();};var _ecca ,_fcae ,_fgea ,_ccaae ,_dfed ,_ceff int ;var _abbf byte ;for _dfed =0;_dfed < _cdccg .Height ;_dfed ++{_ccd :=_cdccg .RowStride *_dfed ;_ccaae =0;
for _ceff =0;_ceff < _cdccg .RowStride ;_ceff ++{_abbf =_cdccg .Data [_ccd +_ceff ];if _abbf !=0{_ccaae +=_ddaf [_abbf ];_ecca +=_gbeb [_abbf ]+_ceff *8*_ddaf [_abbf ];};};_fgea +=_ccaae ;_fcae +=_ccaae *_dfed ;};if _fgea !=0{_fdfc .X =float32 (_ecca )/float32 (_fgea );
_fdfc .Y =float32 (_fcae )/float32 (_fgea );};return _fdfc ,nil ;};type Point struct{X ,Y float32 ;};type MorphOperation int ;func NewClassedPoints (points *Points ,classes _gf .IntSlice )(*ClassedPoints ,error ){const _ccfb ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";
if points ==nil {return nil ,_g .Error (_ccfb ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_g .Error (_ccfb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");
};_fecd :=&ClassedPoints {Points :points ,IntSlice :classes };if _cceg :=_fecd .validateIntSlice ();_cceg !=nil {return nil ,_g .Wrap (_cceg ,_ccfb ,"");};return _fecd ,nil ;};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func TstWordBitmap (t *_bg .T ,scale ...int )*Bitmap {_acga :=1;
if len (scale )> 0{_acga =scale [0];};_agffe :=3;_aega :=9+7+15+2*_agffe ;_ddag :=5+_agffe +5;_cacg :=New (_aega *_acga ,_ddag *_acga );_abfc :=&Bitmaps {};var _bcdd *int ;_agffe *=_acga ;_aebfd :=0;_bcdd =&_aebfd ;_ceeg :=0;_gdgg :=TstDSymbol (t ,scale ...);
TstAddSymbol (t ,_abfc ,_gdgg ,_bcdd ,_ceeg ,1*_acga );_gdgg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_abfc ,_gdgg ,_bcdd ,_ceeg ,_agffe );_gdgg =TstISymbol (t ,scale ...);TstAddSymbol (t ,_abfc ,_gdgg ,_bcdd ,_ceeg ,1*_acga );_gdgg =TstTSymbol (t ,scale ...);
TstAddSymbol (t ,_abfc ,_gdgg ,_bcdd ,_ceeg ,_agffe );_gdgg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_abfc ,_gdgg ,_bcdd ,_ceeg ,1*_acga );_gdgg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_abfc ,_gdgg ,_bcdd ,_ceeg ,1*_acga );_gdgg =TstWSymbol (t ,scale ...);
TstAddSymbol (t ,_abfc ,_gdgg ,_bcdd ,_ceeg ,0);*_bcdd =0;_ceeg =5*_acga +_agffe ;_gdgg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_abfc ,_gdgg ,_bcdd ,_ceeg ,1*_acga );_gdgg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_abfc ,_gdgg ,_bcdd ,_ceeg ,_agffe );
_gdgg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_abfc ,_gdgg ,_bcdd ,_ceeg ,1*_acga );_gdgg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_abfc ,_gdgg ,_bcdd ,_ceeg ,1*_acga );_gdgg =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_abfc ,_gdgg ,_bcdd ,_ceeg ,1*_acga );
_gdgg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_abfc ,_gdgg ,_bcdd ,_ceeg ,1*_acga );_gdgg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_abfc ,_gdgg ,_bcdd ,_ceeg ,0);TstWriteSymbols (t ,_abfc ,_cacg );return _cacg ;};func _geea (_cgge ,_bbcd ,_edbef *Bitmap ,_acdc int )(*Bitmap ,error ){const _cbdd ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";
if _bbcd ==nil {return nil ,_g .Error (_cbdd ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _edbef ==nil {return nil ,_g .Error (_cbdd ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _acdc !=4&&_acdc !=8{return nil ,_g .Error (_cbdd ,"\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 _ebfcf error ;_cgge ,_ebfcf =_abf (_cgge ,_bbcd );
if _ebfcf !=nil {return nil ,_g .Wrap (_ebfcf ,_cbdd ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_faeef :=_bbcd .createTemplate ();_edbef .setPadBits (0);for _gefc :=0;_gefc < _ggab ;_gefc ++{_faeef ,_ebfcf =_abf (_faeef ,_cgge );
if _ebfcf !=nil {return nil ,_g .Wrapf (_ebfcf ,_cbdd ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gefc );};if _ebfcf =_bddb (_cgge ,_edbef ,_acdc );_ebfcf !=nil {return nil ,_g .Wrapf (_ebfcf ,_cbdd ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gefc );
};if _faeef .Equals (_cgge ){break ;};};return _cgge ,nil ;};func (_dggf *Points )AddPoint (x ,y float32 ){*_dggf =append (*_dggf ,Point {x ,y })};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _bgcf ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
_beb :=_dacd (width ,height );_beb .Data =data ;if _cec :=((width *height )+7)>>3;len (data )< _cec {return nil ,_g .Errorf (_bgcf ,"\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 ),_cec );
};if _gcd :=_beb .addPadBits ();_gcd !=nil {return nil ,_g .Wrap (_gcd ,_bgcf ,"");};return _beb ,nil ;};type RasterOperator int ;func TstDSymbol (t *_bg .T ,scale ...int )*Bitmap {_bdag ,_fffa :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_e .NoError (t ,_fffa );
return TstGetScaledSymbol (t ,_bdag ,scale ...);};func (_ddfd *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _aecbf ="\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 >=_ddfd .IntSlice .Size (){return 0,_g .Errorf (_aecbf ,"\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 (_ddfd .YAtIndex (i )),nil ;};func (_cba *Bitmap )SetPadBits (value int ){_cba .setPadBits (value )};func _gdad (_cgff ,_abb int )int {if _cgff < _abb {return _cgff ;};return _abb ;};func (_ddfc *Bitmap )setAll ()error {_aac :=_dgf (_ddfc ,0,0,_ddfc .Width ,_ddfc .Height ,PixSet ,nil ,0,0);
if _aac !=nil {return _g .Wrap (_aac ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func _abf (_ccb ,_bccd *Bitmap )(*Bitmap ,error ){if _bccd ==nil {return nil ,_g .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 _bccd ==_ccb {return _ccb ,nil ;};if _ccb ==nil {_ccb =_bccd .createTemplate ();copy (_ccb .Data ,_bccd .Data );return _ccb ,nil ;};_bffc :=_ccb .resizeImageData (_bccd );if _bffc !=nil {return nil ,_g .Wrap (_bffc ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
};_ccb .Text =_bccd .Text ;copy (_ccb .Data ,_bccd .Data );return _ccb ,nil ;};func (_deea *ClassedPoints )Less (i ,j int )bool {return _deea ._egec (i ,j )};func _dacd (_bff ,_ddf int )*Bitmap {return &Bitmap {Width :_bff ,Height :_ddf ,RowStride :(_bff +7)>>3};
};func (_becf *byWidth )Swap (i ,j int ){_becf .Values [i ],_becf .Values [j ]=_becf .Values [j ],_becf .Values [i ];if _becf .Boxes !=nil {_becf .Boxes [i ],_becf .Boxes [j ]=_becf .Boxes [j ],_becf .Boxes [i ];};};func TstGetScaledSymbol (t *_bg .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;
};if scale [0]==1{return sm ;};_edce ,_dbfac :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_e .NoError (t ,_dbfac );return _edce ;};const _ggab =5000;func (_bacd *Bitmap )setPadBits (_cfde int ){_cgedg :=8-_bacd .Width %8;
if _cgedg ==8{return ;};_eade :=_bacd .Width /8;_aecf :=_eefe [_cgedg ];if _cfde ==0{_aecf ^=_aecf ;};var _bdaf int ;for _efca :=0;_efca < _bacd .Height ;_efca ++{_bdaf =_efca *_bacd .RowStride +_eade ;if _cfde ==0{_bacd .Data [_bdaf ]&=_aecf ;}else {_bacd .Data [_bdaf ]|=_aecf ;
};};};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_gadg :=_ceceg (h ,w ,"");_gadg .setOrigin (cy ,cx );var _afgc ,_dadgg int ;for _afgc =0;_afgc < h ;_afgc ++{for _dadgg =0;_dadgg < w ;_dadgg ++{_gadg .Data [_afgc ][_dadgg ]=tp ;
};};return _gadg ;};func TstOSymbol (t *_bg .T ,scale ...int )*Bitmap {_beed ,_gcff :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_e .NoError (t ,_gcff );return TstGetScaledSymbol (t ,_beed ,scale ...);};func (_edda *ClassedPoints )validateIntSlice ()error {const _ecfed ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";
for _ ,_ffgc :=range _edda .IntSlice {if _ffgc >=(_edda .Points .Size ()){return _g .Errorf (_ecfed ,"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",_ffgc ,_edda .Points .Size ());
};};return nil ;};func (_dgaf *Bitmap )setBit (_ffbf int ){_dgaf .Data [(_ffbf >>3)]|=0x80>>uint (_ffbf &7)};func _dc (_ecd *Bitmap ,_gba ,_ebg int )(*Bitmap ,error ){const _dfe ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";
if _ecd ==nil {return nil ,_g .Error (_dfe ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _gba <=0||_ebg <=0{return nil ,_g .Error (_dfe ,"\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 _gba ==_ebg {if _gba ==1{_gfe ,_dad :=_abf (nil ,_ecd );if _dad !=nil {return nil ,_g .Wrap (_dad ,_dfe ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _gfe ,nil ;};if _gba ==2||_gba ==4||_gba ==8{_ccg ,_efg :=_ba (_ecd ,_gba );
if _efg !=nil {return nil ,_g .Wrap (_efg ,_dfe ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _ccg ,nil ;};};_ebb :=_gba *_ecd .Width ;_ag :=_ebg *_ecd .Height ;_ddb :=New (_ebb ,_ag );_gaag :=_ddb .RowStride ;
var (_gfb ,_gbg ,_cbc ,_fge ,_cgc int ;_gff byte ;_eaa error ;);for _gbg =0;_gbg < _ecd .Height ;_gbg ++{_gfb =_ebg *_gbg *_gaag ;for _cbc =0;_cbc < _ecd .Width ;_cbc ++{if _bdc :=_ecd .GetPixel (_cbc ,_gbg );_bdc {_cgc =_gba *_cbc ;for _fge =0;_fge < _gba ;
_fge ++{_ddb .setBit (_gfb *8+_cgc +_fge );};};};for _fge =1;_fge < _ebg ;_fge ++{_gbge :=_gfb +_fge *_gaag ;for _ada :=0;_ada < _gaag ;_ada ++{if _gff ,_eaa =_ddb .GetByte (_gfb +_ada );_eaa !=nil {return nil ,_g .Wrapf (_eaa ,_dfe ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_fge );
};if _eaa =_ddb .SetByte (_gbge +_ada ,_gff );_eaa !=nil {return nil ,_g .Wrap (_eaa ,_dfe ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _ddb ,nil ;};func _afafc ()[]int {_feb :=make ([]int ,256);
_feb [0]=0;_feb [1]=7;var _bgaf int ;for _bgaf =2;_bgaf < 4;_bgaf ++{_feb [_bgaf ]=_feb [_bgaf -2]+6;};for _bgaf =4;_bgaf < 8;_bgaf ++{_feb [_bgaf ]=_feb [_bgaf -4]+5;};for _bgaf =8;_bgaf < 16;_bgaf ++{_feb [_bgaf ]=_feb [_bgaf -8]+4;};for _bgaf =16;_bgaf < 32;
_bgaf ++{_feb [_bgaf ]=_feb [_bgaf -16]+3;};for _bgaf =32;_bgaf < 64;_bgaf ++{_feb [_bgaf ]=_feb [_bgaf -32]+2;};for _bgaf =64;_bgaf < 128;_bgaf ++{_feb [_bgaf ]=_feb [_bgaf -64]+1;};for _bgaf =128;_bgaf < 256;_bgaf ++{_feb [_bgaf ]=_feb [_bgaf -128];};
return _feb ;};func TstNSymbol (t *_bg .T ,scale ...int )*Bitmap {_agdf ,_cdeg :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_e .NoError (t ,_cdeg );return TstGetScaledSymbol (t ,_agdf ,scale ...);};func _aeef ()[]int {_defac :=make ([]int ,256);
for _fgcb :=0;_fgcb <=0xff;_fgcb ++{_dadbg :=byte (_fgcb );_defac [_dadbg ]=int (_dadbg &0x1)+(int (_dadbg >>1)&0x1)+(int (_dadbg >>2)&0x1)+(int (_dadbg >>3)&0x1)+(int (_dadbg >>4)&0x1)+(int (_dadbg >>5)&0x1)+(int (_dadbg >>6)&0x1)+(int (_dadbg >>7)&0x1);
};return _defac ;};func _ebgd (_begag ,_gfdfe *Bitmap ,_dccc ,_ecaa int )(_faca error ){const _ceed ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_gfcb ,_cdgc ,_dfbb ,_ebfac int ;_bacdd ,_fcbg ,_bfaga ,_cbdf ,_cfffc ,_fcfa ,_adaab ,_eeca byte ;
);for _gfcb =0;_gfcb < _dccc ;_gfcb ++{_dfbb =_gfcb *_begag .RowStride ;_ebfac =_gfcb *_gfdfe .RowStride ;for _cdgc =0;_cdgc < _ecaa ;_cdgc ++{if _bacdd ,_faca =_begag .GetByte (_dfbb +_cdgc );_faca !=nil {return _g .Wrap (_faca ,_ceed ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _fcbg ,_faca =_gfdfe .GetByte (_ebfac +_cdgc );_faca !=nil {return _g .Wrap (_faca ,_ceed ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _gfcb > 0{if _bfaga ,_faca =_begag .GetByte (_dfbb -_begag .RowStride +_cdgc );
_faca !=nil {return _g .Wrap (_faca ,_ceed ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_bacdd |=_bfaga |(_bfaga <<1)|(_bfaga >>1);if _cdgc > 0{if _eeca ,_faca =_begag .GetByte (_dfbb -_begag .RowStride +_cdgc -1);_faca !=nil {return _g .Wrap (_faca ,_ceed ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");
};_bacdd |=_eeca <<7;};if _cdgc < _ecaa -1{if _eeca ,_faca =_begag .GetByte (_dfbb -_begag .RowStride +_cdgc +1);_faca !=nil {return _g .Wrap (_faca ,_ceed ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_bacdd |=_eeca >>7;
};};if _cdgc > 0{if _cbdf ,_faca =_begag .GetByte (_dfbb +_cdgc -1);_faca !=nil {return _g .Wrap (_faca ,_ceed ,"\u006a\u0020\u003e \u0030");};_bacdd |=_cbdf <<7;};_bacdd &=_fcbg ;if _bacdd ==0||^_bacdd ==0{if _faca =_begag .SetByte (_dfbb +_cdgc ,_bacdd );
_faca !=nil {return _g .Wrap (_faca ,_ceed ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_adaab =_bacdd ;_bacdd =(_bacdd |(_bacdd >>1)|(_bacdd <<1))&_fcbg ;if (_bacdd ^_adaab )==0{if _faca =_begag .SetByte (_dfbb +_cdgc ,_bacdd );
_faca !=nil {return _g .Wrap (_faca ,_ceed ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _gfcb =_dccc -1;_gfcb >=0;_gfcb --{_dfbb =_gfcb *_begag .RowStride ;_ebfac =_gfcb *_gfdfe .RowStride ;
for _cdgc =_ecaa -1;_cdgc >=0;_cdgc --{if _bacdd ,_faca =_begag .GetByte (_dfbb +_cdgc );_faca !=nil {return _g .Wrap (_faca ,_ceed ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _fcbg ,_faca =_gfdfe .GetByte (_ebfac +_cdgc );_faca !=nil {return _g .Wrap (_faca ,_ceed ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _gfcb < _dccc -1{if _cfffc ,_faca =_begag .GetByte (_dfbb +_begag .RowStride +_cdgc );
_faca !=nil {return _g .Wrap (_faca ,_ceed ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_bacdd |=_cfffc |(_cfffc <<1)|_cfffc >>1;if _cdgc > 0{if _eeca ,_faca =_begag .GetByte (_dfbb +_begag .RowStride +_cdgc -1);
_faca !=nil {return _g .Wrap (_faca ,_ceed ,"\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");};_bacdd |=_eeca <<7;};if _cdgc < _ecaa -1{if _eeca ,_faca =_begag .GetByte (_dfbb +_begag .RowStride +_cdgc +1);
_faca !=nil {return _g .Wrap (_faca ,_ceed ,"\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");
};_bacdd |=_eeca >>7;};};if _cdgc < _ecaa -1{if _fcfa ,_faca =_begag .GetByte (_dfbb +_cdgc +1);_faca !=nil {return _g .Wrap (_faca ,_ceed ,"\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");
};_bacdd |=_fcfa >>7;};_bacdd &=_fcbg ;if _bacdd ==0||(^_bacdd )==0{if _faca =_begag .SetByte (_dfbb +_cdgc ,_bacdd );_faca !=nil {return _g .Wrap (_faca ,_ceed ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_adaab =_bacdd ;
_bacdd =(_bacdd |(_bacdd >>1)|(_bacdd <<1))&_fcbg ;if (_bacdd ^_adaab )==0{if _faca =_begag .SetByte (_dfbb +_cdgc ,_bacdd );_faca !=nil {return _g .Wrap (_faca ,_ceed ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
};break ;};};};};return nil ;};func (_facdd *Boxes )Add (box *_bd .Rectangle )error {if _facdd ==nil {return _g .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");
};*_facdd =append (*_facdd ,box );return nil ;};func (_ccga *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _acg ="\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 >=_ccga .IntSlice .Size (){return 0,_g .Errorf (_acg ,"\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 (_ccga .XAtIndex (i )),nil ;};func (_fbef *Bitmaps )AddBitmap (bm *Bitmap ){_fbef .Values =append (_fbef .Values ,bm )};func TstTSymbol (t *_bg .T ,scale ...int )*Bitmap {_cfbe ,_gbad :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_e .NoError (t ,_gbad );
return TstGetScaledSymbol (t ,_cfbe ,scale ...);};type SelectionValue int ;func (_egdea *Selection )setOrigin (_afce ,_cbba int ){_egdea .Cy ,_egdea .Cx =_afce ,_cbba };const (Vanilla Color =iota ;Chocolate ;);func _ccbdb (_cgea *_gf .Stack )(_gdcf *fillSegment ,_fgbce error ){const _dbaed ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";
if _cgea ==nil {return nil ,_g .Error (_dbaed ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _cgea .Aux ==nil {return nil ,_g .Error (_dbaed ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");
};_edfe ,_bcbg :=_cgea .Pop ();if !_bcbg {return nil ,nil ;};_bedeb ,_bcbg :=_edfe .(*fillSegment );if !_bcbg {return nil ,_g .Error (_dbaed ,"\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");
};_gdcf =&fillSegment {_bedeb ._dddg ,_bedeb ._cdbfe ,_bedeb ._ggca +_bedeb ._effg ,_bedeb ._effg };_cgea .Aux .Push (_bedeb );return _gdcf ,nil ;};func TstFrameBitmap ()*Bitmap {return _beab .Copy ()};type Color int ;func (_fgbc *ClassedPoints )Swap (i ,j int ){_fgbc .IntSlice [i ],_fgbc .IntSlice [j ]=_fgbc .IntSlice [j ],_fgbc .IntSlice [i ];
};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};func (_ged *Bitmap )InverseData (){_ged .inverseData ()};func (_cbag *Bitmap )removeBorderGeneral (_ebgff ,_aefe ,_edbg ,_gfcg int )(*Bitmap ,error ){const _eaad ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
if _ebgff < 0||_aefe < 0||_edbg < 0||_gfcg < 0{return nil ,_g .Error (_eaad ,"\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");};_agag ,_bbec :=_cbag .Width ,_cbag .Height ;
_dcgfd :=_agag -_ebgff -_aefe ;_ffdg :=_bbec -_edbg -_gfcg ;if _dcgfd <=0{return nil ,_g .Errorf (_eaad ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_dcgfd );};if _ffdg <=0{return nil ,_g .Errorf (_eaad ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_ffdg );
};_eabb :=New (_dcgfd ,_ffdg );_eabb .Color =_cbag .Color ;_egff :=_eabb .RasterOperation (0,0,_dcgfd ,_ffdg ,PixSrc ,_cbag ,_ebgff ,_edbg );if _egff !=nil {return nil ,_g .Wrap (_egff ,_eaad ,"");};return _eabb ,nil ;};var _ _ga .Interface =&ClassedPoints {};
func (_deed *Bitmap )SetByte (index int ,v byte )error {if index > len (_deed .Data )-1||index < 0{return _g .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 );
};_deed .Data [index ]=v ;return nil ;};func (_bba *Bitmap )SetDefaultPixel (){for _cccg :=range _bba .Data {_bba .Data [_cccg ]=byte (0xff);};};func _fafb ()(_cdca []byte ){_cdca =make ([]byte ,256);for _eaff :=0;_eaff < 256;_eaff ++{_gaf :=byte (_eaff );
_cdca [_gaf ]=(_gaf &0x01)|((_gaf &0x04)>>1)|((_gaf &0x10)>>2)|((_gaf &0x40)>>3)|((_gaf &0x02)<<3)|((_gaf &0x08)<<2)|((_gaf &0x20)<<1)|(_gaf &0x80);};return _cdca ;};func (_eggg *Bitmaps )String ()string {_fcbda :=_be .Builder {};for _ ,_fgcade :=range _eggg .Values {_fcbda .WriteString (_fgcade .String ());
_fcbda .WriteRune ('\n');};return _fcbda .String ();};func _cfbad (_eaeff ,_gcgg ,_fdbbb byte )byte {return (_eaeff &^(_fdbbb ))|(_gcgg &_fdbbb )};func (_ceb *Bitmap )setEightFullBytes (_bbf int ,_cgb uint64 )error {if _bbf +7> len (_ceb .Data )-1{return _g .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");
};_ceb .Data [_bbf ]=byte ((_cgb &0xff00000000000000)>>56);_ceb .Data [_bbf +1]=byte ((_cgb &0xff000000000000)>>48);_ceb .Data [_bbf +2]=byte ((_cgb &0xff0000000000)>>40);_ceb .Data [_bbf +3]=byte ((_cgb &0xff00000000)>>32);_ceb .Data [_bbf +4]=byte ((_cgb &0xff000000)>>24);
_ceb .Data [_bbf +5]=byte ((_cgb &0xff0000)>>16);_ceb .Data [_bbf +6]=byte ((_cgb &0xff00)>>8);_ceb .Data [_bbf +7]=byte (_cgb &0xff);return nil ;};func (_bacb *Bitmap )SizesEqual (s *Bitmap )bool {if _bacb ==s {return true ;};if _bacb .Width !=s .Width ||_bacb .Height !=s .Height {return false ;
};return true ;};func (_bbbgg *byHeight )Len ()int {return len (_bbbgg .Values )};func (_cbb *Bitmap )addPadBits ()(_gbe error ){const _gaafd ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_dbf :=_cbb .Width %8;
if _dbf ==0{return nil ;};_agd :=_cbb .Width /8;_bfc :=_ec .NewReader (_cbb .Data );_egac :=make ([]byte ,_cbb .Height *_cbb .RowStride );_bcc :=_ec .NewWriterMSB (_egac );_bcg :=make ([]byte ,_agd );var (_bae int ;_gdg uint64 ;);for _bae =0;_bae < _cbb .Height ;
_bae ++{if _ ,_gbe =_bfc .Read (_bcg );_gbe !=nil {return _g .Wrap (_gbe ,_gaafd ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_gbe =_bcc .Write (_bcg );_gbe !=nil {return _g .Wrap (_gbe ,_gaafd ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");
};if _gdg ,_gbe =_bfc .ReadBits (byte (_dbf ));_gbe !=nil {return _g .Wrap (_gbe ,_gaafd ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _gbe =_bcc .WriteByte (byte (_gdg )<<uint (8-_dbf ));_gbe !=nil {return _g .Wrap (_gbe ,_gaafd ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");
};};_cbb .Data =_bcc .Data ();return nil ;};func _ccaag (_ageg uint ,_ggbg byte )byte {return _ggbg >>_ageg <<_ageg };func (_eaae *Boxes )Get (i int )(*_bd .Rectangle ,error ){const _baf ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _eaae ==nil {return nil ,_g .Error (_baf ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if i > len (*_eaae )-1{return nil ,_g .Errorf (_baf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_eaae )[i ],nil ;};func _bdaee (_beee *Bitmap ,_ecgg ...MorphProcess )(_ebde *Bitmap ,_babc error ){const _aedda ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";
if _beee ==nil {return nil ,_g .Error (_aedda ,"\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 (_ecgg )==0{return nil ,_g .Error (_aedda ,"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 _babc =_bceb (_ecgg ...);
_babc !=nil {return nil ,_g .Wrap (_babc ,_aedda ,"");};var _egga ,_cddf ,_ccee int ;_ebde =_beee .Copy ();for _ ,_adfg :=range _ecgg {switch _adfg .Operation {case MopDilation :_egga ,_cddf =_adfg .getWidthHeight ();_ebde ,_babc =DilateBrick (nil ,_ebde ,_egga ,_cddf );
if _babc !=nil {return nil ,_g .Wrap (_babc ,_aedda ,"");};case MopErosion :_egga ,_cddf =_adfg .getWidthHeight ();_ebde ,_babc =_deaf (nil ,_ebde ,_egga ,_cddf );if _babc !=nil {return nil ,_g .Wrap (_babc ,_aedda ,"");};case MopOpening :_egga ,_cddf =_adfg .getWidthHeight ();
_ebde ,_babc =_agdd (nil ,_ebde ,_egga ,_cddf );if _babc !=nil {return nil ,_g .Wrap (_babc ,_aedda ,"");};case MopClosing :_egga ,_cddf =_adfg .getWidthHeight ();_ebde ,_babc =_ccfc (nil ,_ebde ,_egga ,_cddf );if _babc !=nil {return nil ,_g .Wrap (_babc ,_aedda ,"");
};case MopRankBinaryReduction :_ebde ,_babc =_deeg (_ebde ,_adfg .Arguments ...);if _babc !=nil {return nil ,_g .Wrap (_babc ,_aedda ,"");};case MopReplicativeBinaryExpansion :_ebde ,_babc =_gcef (_ebde ,_adfg .Arguments [0]);if _babc !=nil {return nil ,_g .Wrap (_babc ,_aedda ,"");
};case MopAddBorder :_ccee =_adfg .Arguments [0];_ebde ,_babc =_ebde .AddBorder (_ccee ,0);if _babc !=nil {return nil ,_g .Wrap (_babc ,_aedda ,"");};default:return nil ,_g .Error (_aedda ,"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 _ccee > 0{_ebde ,_babc =_ebde .RemoveBorder (_ccee );if _babc !=nil {return nil ,_g .Wrap (_babc ,_aedda ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _ebde ,nil ;};func _agb (_begg ,_ffg *Bitmap ,_dfca ,_dadd ,_ebd uint ,_accf ,_egbf int ,_affa bool ,_fage ,_bdd int )error {for _dcfca :=_accf ;
_dcfca < _egbf ;_dcfca ++{if _fage +1< len (_begg .Data ){_gfef :=_dcfca +1==_egbf ;_acfe ,_befg :=_begg .GetByte (_fage );if _befg !=nil {return _befg ;};_fage ++;_acfe <<=_dfca ;_adga ,_befg :=_begg .GetByte (_fage );if _befg !=nil {return _befg ;};_adga >>=_dadd ;
_eagb :=_acfe |_adga ;if _gfef &&!_affa {_eagb =_ccaag (_ebd ,_eagb );};_befg =_ffg .SetByte (_bdd ,_eagb );if _befg !=nil {return _befg ;};_bdd ++;if _gfef &&_affa {_fec ,_cgce :=_begg .GetByte (_fage );if _cgce !=nil {return _cgce ;};_fec <<=_dfca ;_eagb =_ccaag (_ebd ,_fec );
if _cgce =_ffg .SetByte (_bdd ,_eagb );_cgce !=nil {return _cgce ;};};continue ;};_gae ,_efcb :=_begg .GetByte (_fage );if _efcb !=nil {_f .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",_fage ,_efcb );
return _efcb ;};_gae <<=_dfca ;_fage ++;_efcb =_ffg .SetByte (_bdd ,_gae );if _efcb !=nil {return _efcb ;};_bdd ++;};return nil ;};func (_dgag *Bitmap )GetByte (index int )(byte ,error ){if index > len (_dgag .Data )-1||index < 0{return 0,_g .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 _dgag .Data [index ],nil ;};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func (_bag CombinationOperator )String ()string {var _agbf string ;
switch _bag {case CmbOpOr :_agbf ="\u004f\u0052";case CmbOpAnd :_agbf ="\u0041\u004e\u0044";case CmbOpXor :_agbf ="\u0058\u004f\u0052";case CmbOpXNor :_agbf ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_agbf ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_agbf ="\u004e\u004f\u0054";
};return _agbf ;};func (_afdg *Bitmap )GetByteIndex (x ,y int )int {return y *_afdg .RowStride +(x >>3)};func _cbbe (_ced ,_gafc *Bitmap ,_dbga ,_efgd int )(*Bitmap ,error ){const _ddgg ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _gafc ==nil {return nil ,_g .Error (_ddgg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _dbga < 1||_efgd < 1{return nil ,_g .Error (_ddgg ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _dbga ==1&&_efgd ==1{return _gafc .Copy (),nil ;};if _dbga ==1||_efgd ==1{_fbde :=SelCreateBrick (_efgd ,_dbga ,_efgd /2,_dbga /2,SelHit );
var _dffa error ;_ced ,_dffa =_cbg (_ced ,_gafc ,_fbde );if _dffa !=nil {return nil ,_g .Wrap (_dffa ,_ddgg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};return _ced ,nil ;
};_ceac :=SelCreateBrick (1,_dbga ,0,_dbga /2,SelHit );_dcbg :=SelCreateBrick (_efgd ,1,_efgd /2,0,SelHit );_agff ,_bcag :=_cgbb (nil ,_gafc ,_ceac );if _bcag !=nil {return nil ,_g .Wrap (_bcag ,_ddgg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _ced ,_bcag =_cgbb (_ced ,_agff ,_dcbg );_bcag !=nil {return nil ,_g .Wrap (_bcag ,_ddgg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_bcag =_dbfae (_agff ,_ced ,_ceac );_bcag !=nil {return nil ,_g .Wrap (_bcag ,_ddgg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};if _ ,_bcag =_dbfae (_ced ,_agff ,_dcbg );_bcag !=nil {return nil ,_g .Wrap (_bcag ,_ddgg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _ced ,nil ;};func _dgb ()(_eec [256]uint64 ){for _dce :=0;_dce < 256;_dce ++{if _dce &0x01!=0{_eec [_dce ]|=0xff;
};if _dce &0x02!=0{_eec [_dce ]|=0xff00;};if _dce &0x04!=0{_eec [_dce ]|=0xff0000;};if _dce &0x08!=0{_eec [_dce ]|=0xff000000;};if _dce &0x10!=0{_eec [_dce ]|=0xff00000000;};if _dce &0x20!=0{_eec [_dce ]|=0xff0000000000;};if _dce &0x40!=0{_eec [_dce ]|=0xff000000000000;
};if _dce &0x80!=0{_eec [_dce ]|=0xff00000000000000;};};return _eec ;};type ClassedPoints struct{*Points ;_gf .IntSlice ;_egec func (_fgaba ,_ddfg int )bool ;};func _dd (_ad ,_ee *Bitmap )(_ce error ){const _efd ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";
_cfa :=_ee .RowStride ;_dga :=_ad .RowStride ;var _da ,_bb ,_ae ,_cea ,_dbe int ;for _ae =0;_ae < _ee .Height ;_ae ++{_da =_ae *_cfa ;_bb =8*_ae *_dga ;for _cea =0;_cea < _cfa ;_cea ++{if _ce =_ad .setEightBytes (_bb +_cea *8,_gdea [_ee .Data [_da +_cea ]]);
_ce !=nil {return _g .Wrap (_ce ,_efd ,"");};};for _dbe =1;_dbe < 8;_dbe ++{for _cea =0;_cea < _dga ;_cea ++{if _ce =_ad .SetByte (_bb +_dbe *_dga +_cea ,_ad .Data [_bb +_cea ]);_ce !=nil {return _g .Wrap (_ce ,_efd ,"");};};};};return nil ;};func (_adda *Bitmap )clearAll ()error {return _adda .RasterOperation (0,0,_adda .Width ,_adda .Height ,PixClr ,nil ,0,0);
};func (_cgdbf *Bitmaps )GetBox (i int )(*_bd .Rectangle ,error ){const _cgffa ="\u0047\u0065\u0074\u0042\u006f\u0078";if _cgdbf ==nil {return nil ,_g .Error (_cgffa ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");
};if i > len (_cgdbf .Boxes )-1{return nil ,_g .Errorf (_cgffa ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _cgdbf .Boxes [i ],nil ;};func _agge (_eddcc ,_ccfce *Bitmap ,_aaaag ,_bedd int )(_agec error ){const _ddfbd ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";
var (_agcd ,_cdab ,_ccbab ,_bggc int ;_fdbbbc ,_acbdd ,_dccf ,_fgcc ,_ddce ,_ecaf ,_acff byte ;);for _agcd =0;_agcd < _aaaag ;_agcd ++{_ccbab =_agcd *_eddcc .RowStride ;_bggc =_agcd *_ccfce .RowStride ;for _cdab =0;_cdab < _bedd ;_cdab ++{_fdbbbc ,_agec =_eddcc .GetByte (_ccbab +_cdab );
if _agec !=nil {return _g .Wrap (_agec ,_ddfbd ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_acbdd ,_agec =_ccfce .GetByte (_bggc +_cdab );if _agec !=nil {return _g .Wrap (_agec ,_ddfbd ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");
};if _agcd > 0{_dccf ,_agec =_eddcc .GetByte (_ccbab -_eddcc .RowStride +_cdab );if _agec !=nil {return _g .Wrap (_agec ,_ddfbd ,"\u0069\u0020\u003e \u0030");};_fdbbbc |=_dccf ;};if _cdab > 0{_fgcc ,_agec =_eddcc .GetByte (_ccbab +_cdab -1);if _agec !=nil {return _g .Wrap (_agec ,_ddfbd ,"\u006a\u0020\u003e \u0030");
};_fdbbbc |=_fgcc <<7;};_fdbbbc &=_acbdd ;if _fdbbbc ==0||(^_fdbbbc )==0{if _agec =_eddcc .SetByte (_ccbab +_cdab ,_fdbbbc );_agec !=nil {return _g .Wrap (_agec ,_ddfbd ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");
};continue ;};for {_acff =_fdbbbc ;_fdbbbc =(_fdbbbc |(_fdbbbc >>1)|(_fdbbbc <<1))&_acbdd ;if (_fdbbbc ^_acff )==0{if _agec =_eddcc .SetByte (_ccbab +_cdab ,_fdbbbc );_agec !=nil {return _g .Wrap (_agec ,_ddfbd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
};break ;};};};};for _agcd =_aaaag -1;_agcd >=0;_agcd --{_ccbab =_agcd *_eddcc .RowStride ;_bggc =_agcd *_ccfce .RowStride ;for _cdab =_bedd -1;_cdab >=0;_cdab --{if _fdbbbc ,_agec =_eddcc .GetByte (_ccbab +_cdab );_agec !=nil {return _g .Wrap (_agec ,_ddfbd ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");
};if _acbdd ,_agec =_ccfce .GetByte (_bggc +_cdab );_agec !=nil {return _g .Wrap (_agec ,_ddfbd ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _agcd < _aaaag -1{if _ddce ,_agec =_eddcc .GetByte (_ccbab +_eddcc .RowStride +_cdab );
_agec !=nil {return _g .Wrap (_agec ,_ddfbd ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_fdbbbc |=_ddce ;};if _cdab < _bedd -1{if _ecaf ,_agec =_eddcc .GetByte (_ccbab +_cdab +1);_agec !=nil {return _g .Wrap (_agec ,_ddfbd ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");
};_fdbbbc |=_ecaf >>7;};_fdbbbc &=_acbdd ;if _fdbbbc ==0||(^_fdbbbc )==0{if _agec =_eddcc .SetByte (_ccbab +_cdab ,_fdbbbc );_agec !=nil {return _g .Wrap (_agec ,_ddfbd ,"\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 {_acff =_fdbbbc ;_fdbbbc =(_fdbbbc |(_fdbbbc >>1)|(_fdbbbc <<1))&_acbdd ;if (_fdbbbc ^_acff )==0{if _agec =_eddcc .SetByte (_ccbab +_cdab ,_fdbbbc );_agec !=nil {return _g .Wrap (_agec ,_ddfbd ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
};break ;};};};};return nil ;};func (_fbed MorphProcess )getWidthHeight ()(_cfbb ,_cebb int ){return _fbed .Arguments [0],_fbed .Arguments [1];};func _gfc (_dec ,_fab *Bitmap ,_dcd int ,_ecb []byte ,_aea int )(_cbcf error ){const _fgf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";
var (_gbcc ,_fea ,_dcf ,_bec ,_efea ,_daec ,_ffce ,_bfd int ;_afd ,_bgc uint32 ;_ccc ,_ede byte ;_eea uint16 ;);_adfa :=make ([]byte ,4);_fad :=make ([]byte ,4);for _dcf =0;_dcf < _dec .Height -1;_dcf ,_bec =_dcf +2,_bec +1{_gbcc =_dcf *_dec .RowStride ;
_fea =_bec *_fab .RowStride ;for _efea ,_daec =0,0;_efea < _aea ;_efea ,_daec =_efea +4,_daec +1{for _ffce =0;_ffce < 4;_ffce ++{_bfd =_gbcc +_efea +_ffce ;if _bfd <=len (_dec .Data )-1&&_bfd < _gbcc +_dec .RowStride {_adfa [_ffce ]=_dec .Data [_bfd ];
}else {_adfa [_ffce ]=0x00;};_bfd =_gbcc +_dec .RowStride +_efea +_ffce ;if _bfd <=len (_dec .Data )-1&&_bfd < _gbcc +(2*_dec .RowStride ){_fad [_ffce ]=_dec .Data [_bfd ];}else {_fad [_ffce ]=0x00;};};_afd =_c .BigEndian .Uint32 (_adfa );_bgc =_c .BigEndian .Uint32 (_fad );
_bgc &=_afd ;_bgc &=_bgc <<1;_bgc &=0xaaaaaaaa;_afd =_bgc |(_bgc <<7);_ccc =byte (_afd >>24);_ede =byte ((_afd >>8)&0xff);_bfd =_fea +_daec ;if _bfd +1==len (_fab .Data )-1||_bfd +1>=_fea +_fab .RowStride {_fab .Data [_bfd ]=_ecb [_ccc ];if _cbcf =_fab .SetByte (_bfd ,_ecb [_ccc ]);
_cbcf !=nil {return _g .Wrapf (_cbcf ,_fgf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_bfd );};}else {_eea =(uint16 (_ecb [_ccc ])<<8)|uint16 (_ecb [_ede ]);if _cbcf =_fab .setTwoBytes (_bfd ,_eea );_cbcf !=nil {return _g .Wrapf (_cbcf ,_fgf ,"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",_bfd );
};_daec ++;};};};return nil ;};func _bffcf (_cadd ,_ccbe ,_befbf *Bitmap )(*Bitmap ,error ){const _efee ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _ccbe ==nil {return nil ,_g .Error (_efee ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
};if _befbf ==nil {return nil ,_g .Error (_efee ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _aaee error ;switch {case _cadd ==_ccbe :if _aaee =_cadd .RasterOperation (0,0,_ccbe .Width ,_ccbe .Height ,PixNotSrcAndDst ,_befbf ,0,0);
_aaee !=nil {return nil ,_g .Wrap (_aaee ,_efee ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _cadd ==_befbf :if _aaee =_cadd .RasterOperation (0,0,_ccbe .Width ,_ccbe .Height ,PixNotSrcAndDst ,_ccbe ,0,0);_aaee !=nil {return nil ,_g .Wrap (_aaee ,_efee ,"\u0064 \u003d\u003d\u0020\u0073\u0032");
};default:_cadd ,_aaee =_abf (_cadd ,_ccbe );if _aaee !=nil {return nil ,_g .Wrap (_aaee ,_efee ,"");};if _aaee =_cadd .RasterOperation (0,0,_ccbe .Width ,_ccbe .Height ,PixNotSrcAndDst ,_befbf ,0,0);_aaee !=nil {return nil ,_g .Wrap (_aaee ,_efee ,"\u0064e\u0066\u0061\u0075\u006c\u0074");
};};return _cadd ,nil ;};func (_egfd *Boxes )makeSizeIndicator (_fgg ,_bcdc int ,_aaegd LocationFilter ,_egfa SizeComparison )*_gf .NumSlice {_gfdc :=&_gf .NumSlice {};var _egfaa ,_ebfg ,_fabb int ;for _ ,_fdc :=range *_egfd {_egfaa =0;_ebfg ,_fabb =_fdc .Dx (),_fdc .Dy ();
switch _aaegd {case LocSelectWidth :if (_egfa ==SizeSelectIfLT &&_ebfg < _fgg )||(_egfa ==SizeSelectIfGT &&_ebfg > _fgg )||(_egfa ==SizeSelectIfLTE &&_ebfg <=_fgg )||(_egfa ==SizeSelectIfGTE &&_ebfg >=_fgg ){_egfaa =1;};case LocSelectHeight :if (_egfa ==SizeSelectIfLT &&_fabb < _bcdc )||(_egfa ==SizeSelectIfGT &&_fabb > _bcdc )||(_egfa ==SizeSelectIfLTE &&_fabb <=_bcdc )||(_egfa ==SizeSelectIfGTE &&_fabb >=_bcdc ){_egfaa =1;
};case LocSelectIfEither :if (_egfa ==SizeSelectIfLT &&(_fabb < _bcdc ||_ebfg < _fgg ))||(_egfa ==SizeSelectIfGT &&(_fabb > _bcdc ||_ebfg > _fgg ))||(_egfa ==SizeSelectIfLTE &&(_fabb <=_bcdc ||_ebfg <=_fgg ))||(_egfa ==SizeSelectIfGTE &&(_fabb >=_bcdc ||_ebfg >=_fgg )){_egfaa =1;
};case LocSelectIfBoth :if (_egfa ==SizeSelectIfLT &&(_fabb < _bcdc &&_ebfg < _fgg ))||(_egfa ==SizeSelectIfGT &&(_fabb > _bcdc &&_ebfg > _fgg ))||(_egfa ==SizeSelectIfLTE &&(_fabb <=_bcdc &&_ebfg <=_fgg ))||(_egfa ==SizeSelectIfGTE &&(_fabb >=_bcdc &&_ebfg >=_fgg )){_egfaa =1;
};};_gfdc .AddInt (_egfaa );};return _gfdc ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _feg ="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 ,_g .Error (_feg ,"\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 ,_g .Error (_feg ,"\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 ,_g .Error (_feg ,"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 ,_g .Error (_feg ,"\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 ,_g .Error (_feg ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
};_fagb ,_fggf :=bm1 .Width ,bm1 .Height ;_bfaa ,_ggda :=bm2 .Width ,bm2 .Height ;if _gf .Abs (_fagb -_bfaa )> maxDiffW {return false ,nil ;};if _gf .Abs (_fggf -_ggda )> maxDiffH {return false ,nil ;};_gfbc :=int (delX +_gf .Sign (delX )*0.5);_fcg :=int (delY +_gf .Sign (delY )*0.5);
_eeae :=int (_ef .Ceil (_ef .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_abcd :=bm2 .RowStride ;_agbg :=_egfc (_fcg ,0);_ccge :=_gdad (_ggda +_fcg ,_fggf );_gcg :=bm1 .RowStride *_agbg ;_gbde :=bm2 .RowStride *(_agbg -_fcg );var _ceee int ;
if _ccge <=_fggf {_ceee =downcount [_ccge -1];};_cgegb :=_egfc (_gfbc ,0);_dadg :=_gdad (_bfaa +_gfbc ,_fagb );var _acaf ,_gcf int ;if _gfbc >=8{_acaf =_gfbc >>3;_gcg +=_acaf ;_cgegb -=_acaf <<3;_dadg -=_acaf <<3;_gfbc &=7;}else if _gfbc <=-8{_gcf =-((_gfbc +7)>>3);
_gbde +=_gcf ;_abcd -=_gcf ;_gfbc +=_gcf <<3;};var (_ccba ,_bebfa ,_gbcbb int ;_gacb ,_ddbf ,_aggb byte ;);if _cgegb >=_dadg ||_agbg >=_ccge {return false ,nil ;};_edfb :=(_dadg +7)>>3;switch {case _gfbc ==0:for _bebfa =_agbg ;_bebfa < _ccge ;_bebfa ,_gcg ,_gbde =_bebfa +1,_gcg +bm1 .RowStride ,_gbde +bm2 .RowStride {for _gbcbb =0;
_gbcbb < _edfb ;_gbcbb ++{_gacb =bm1 .Data [_gcg +_gbcbb ]&bm2 .Data [_gbde +_gbcbb ];_ccba +=tab [_gacb ];};if _ccba >=_eeae {return true ,nil ;};if _cfac :=_ccba +downcount [_bebfa ]-_ceee ;_cfac < _eeae {return false ,nil ;};};case _gfbc > 0&&_abcd < _edfb :for _bebfa =_agbg ;
_bebfa < _ccge ;_bebfa ,_gcg ,_gbde =_bebfa +1,_gcg +bm1 .RowStride ,_gbde +bm2 .RowStride {_ddbf =bm1 .Data [_gcg ];_aggb =bm2 .Data [_gbde ]>>uint (_gfbc );_gacb =_ddbf &_aggb ;_ccba +=tab [_gacb ];for _gbcbb =1;_gbcbb < _abcd ;_gbcbb ++{_ddbf =bm1 .Data [_gcg +_gbcbb ];
_aggb =bm2 .Data [_gbde +_gbcbb ]>>uint (_gfbc )|bm2 .Data [_gbde +_gbcbb -1]<<uint (8-_gfbc );_gacb =_ddbf &_aggb ;_ccba +=tab [_gacb ];};_ddbf =bm1 .Data [_gcg +_gbcbb ];_aggb =bm2 .Data [_gbde +_gbcbb -1]<<uint (8-_gfbc );_gacb =_ddbf &_aggb ;_ccba +=tab [_gacb ];
if _ccba >=_eeae {return true ,nil ;}else if _ccba +downcount [_bebfa ]-_ceee < _eeae {return false ,nil ;};};case _gfbc > 0&&_abcd >=_edfb :for _bebfa =_agbg ;_bebfa < _ccge ;_bebfa ,_gcg ,_gbde =_bebfa +1,_gcg +bm1 .RowStride ,_gbde +bm2 .RowStride {_ddbf =bm1 .Data [_gcg ];
_aggb =bm2 .Data [_gbde ]>>uint (_gfbc );_gacb =_ddbf &_aggb ;_ccba +=tab [_gacb ];for _gbcbb =1;_gbcbb < _edfb ;_gbcbb ++{_ddbf =bm1 .Data [_gcg +_gbcbb ];_aggb =bm2 .Data [_gbde +_gbcbb ]>>uint (_gfbc );_aggb |=bm2 .Data [_gbde +_gbcbb -1]<<uint (8-_gfbc );
_gacb =_ddbf &_aggb ;_ccba +=tab [_gacb ];};if _ccba >=_eeae {return true ,nil ;}else if _ccba +downcount [_bebfa ]-_ceee < _eeae {return false ,nil ;};};case _edfb < _abcd :for _bebfa =_agbg ;_bebfa < _ccge ;_bebfa ,_gcg ,_gbde =_bebfa +1,_gcg +bm1 .RowStride ,_gbde +bm2 .RowStride {for _gbcbb =0;
_gbcbb < _edfb ;_gbcbb ++{_ddbf =bm1 .Data [_gcg +_gbcbb ];_aggb =bm2 .Data [_gbde +_gbcbb ]<<uint (-_gfbc );_aggb |=bm2 .Data [_gbde +_gbcbb +1]>>uint (8+_gfbc );_gacb =_ddbf &_aggb ;_ccba +=tab [_gacb ];};if _ccba >=_eeae {return true ,nil ;}else if _fdg :=_ccba +downcount [_bebfa ]-_ceee ;
_fdg < _eeae {return false ,nil ;};};case _abcd >=_edfb :for _bebfa =_agbg ;_bebfa < _ccge ;_bebfa ,_gcg ,_gbde =_bebfa +1,_gcg +bm1 .RowStride ,_gbde +bm2 .RowStride {for _gbcbb =0;_gbcbb < _edfb ;_gbcbb ++{_ddbf =bm1 .Data [_gcg +_gbcbb ];_aggb =bm2 .Data [_gbde +_gbcbb ]<<uint (-_gfbc );
_aggb |=bm2 .Data [_gbde +_gbcbb +1]>>uint (8+_gfbc );_gacb =_ddbf &_aggb ;_ccba +=tab [_gacb ];};_ddbf =bm1 .Data [_gcg +_gbcbb ];_aggb =bm2 .Data [_gbde +_gbcbb ]<<uint (-_gfbc );_gacb =_ddbf &_aggb ;_ccba +=tab [_gacb ];if _ccba >=_eeae {return true ,nil ;
}else if _ccba +downcount [_bebfa ]-_ceee < _eeae {return false ,nil ;};};};_dfcb :=float32 (_ccba )*float32 (_ccba )/(float32 (area1 )*float32 (area2 ));if _dfcb >=scoreThreshold {_f .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",_ccba ,_eeae ,_dfcb ,scoreThreshold );
};return false ,nil ;};var _bdae [256]uint8 ;var (_fcag =_ggd ();_fggd =_ddg ();_gdea =_dgb (););func TstImageBitmapData ()[]byte {return _bafe .Data };func (_bbe *Bitmap )CountPixels ()int {return _bbe .countPixels ()};func (_gede *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _gdgbd ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";
_aabb ,_dfad :=_gede .selectByIndexes (idx );if _dfad !=nil {return nil ,_g .Wrap (_dfad ,_gdgbd ,"");};return _aabb ,nil ;};func (_aafc Points )XSorter ()func (_daa ,_eced int )bool {return func (_cbgdg ,_bbecf int )bool {return _aafc [_cbgdg ].X < _aafc [_bbecf ].X };
};func (_bbecd *ClassedPoints )SortByY (){_bbecd ._egec =_bbecd .ySortFunction ();_ga .Sort (_bbecd )};func (_gaba *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_gfcff *Boxes ,_bcaa error ){const _dedcc ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";
if _gaba ==nil {return nil ,_g .Error (_dedcc ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_gaba )==0{return _gaba ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_g .Errorf (_dedcc ,"\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 ,_g .Errorf (_dedcc ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
};_bacg :=_gaba .makeSizeIndicator (width ,height ,tp ,relation );_baag ,_bcaa :=_gaba .selectWithIndicator (_bacg );if _bcaa !=nil {return nil ,_g .Wrap (_bcaa ,_dedcc ,"");};return _baag ,nil ;};func _efdg (_bfg ,_egcd *Bitmap ,_afdda CombinationOperator )*Bitmap {_dfbd :=New (_bfg .Width ,_bfg .Height );
for _cbbb :=0;_cbbb < len (_dfbd .Data );_cbbb ++{_dfbd .Data [_cbbb ]=_dbae (_bfg .Data [_cbbb ],_egcd .Data [_cbbb ],_afdda );};return _dfbd ;};func _gbcf (_fcdc ,_dedg *Bitmap ,_ffc int ,_ebc []byte ,_faa int )(_dcg error ){const _cge ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";
var (_bge ,_cgeg ,_faf ,_caf ,_gec ,_dba ,_fga ,_aed int ;_gef ,_edd ,_ggb ,_gee uint32 ;_adf ,_fbf byte ;_eda uint16 ;);_ega :=make ([]byte ,4);_gca :=make ([]byte ,4);for _faf =0;_faf < _fcdc .Height -1;_faf ,_caf =_faf +2,_caf +1{_bge =_faf *_fcdc .RowStride ;
_cgeg =_caf *_dedg .RowStride ;for _gec ,_dba =0,0;_gec < _faa ;_gec ,_dba =_gec +4,_dba +1{for _fga =0;_fga < 4;_fga ++{_aed =_bge +_gec +_fga ;if _aed <=len (_fcdc .Data )-1&&_aed < _bge +_fcdc .RowStride {_ega [_fga ]=_fcdc .Data [_aed ];}else {_ega [_fga ]=0x00;
};_aed =_bge +_fcdc .RowStride +_gec +_fga ;if _aed <=len (_fcdc .Data )-1&&_aed < _bge +(2*_fcdc .RowStride ){_gca [_fga ]=_fcdc .Data [_aed ];}else {_gca [_fga ]=0x00;};};_gef =_c .BigEndian .Uint32 (_ega );_edd =_c .BigEndian .Uint32 (_gca );_ggb =_gef &_edd ;
_ggb |=_ggb <<1;_gee =_gef |_edd ;_gee &=_gee <<1;_edd =_ggb |_gee ;_edd &=0xaaaaaaaa;_gef =_edd |(_edd <<7);_adf =byte (_gef >>24);_fbf =byte ((_gef >>8)&0xff);_aed =_cgeg +_dba ;if _aed +1==len (_dedg .Data )-1||_aed +1>=_cgeg +_dedg .RowStride {if _dcg =_dedg .SetByte (_aed ,_ebc [_adf ]);
_dcg !=nil {return _g .Wrapf (_dcg ,_cge ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_aed );};}else {_eda =(uint16 (_ebc [_adf ])<<8)|uint16 (_ebc [_fbf ]);if _dcg =_dedg .setTwoBytes (_aed ,_eda );_dcg !=nil {return _g .Wrapf (_dcg ,_cge ,"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",_aed );
};_dba ++;};};};return nil ;};func (_caed *byWidth )Less (i ,j int )bool {return _caed .Values [i ].Width < _caed .Values [j ].Width };func _dbfae (_egag ,_debd *Bitmap ,_fgcad *Selection )(*Bitmap ,error ){const _ccged ="\u0065\u0072\u006fd\u0065";var (_gacf error ;
_ebe *Bitmap ;);_egag ,_gacf =_aadde (_egag ,_debd ,_fgcad ,&_ebe );if _gacf !=nil {return nil ,_g .Wrap (_gacf ,_ccged ,"");};if _gacf =_egag .setAll ();_gacf !=nil {return nil ,_g .Wrap (_gacf ,_ccged ,"");};var _agc SelectionValue ;for _fece :=0;_fece < _fgcad .Height ;
_fece ++{for _aedaf :=0;_aedaf < _fgcad .Width ;_aedaf ++{_agc =_fgcad .Data [_fece ][_aedaf ];if _agc ==SelHit {_gacf =_dgf (_egag ,_fgcad .Cx -_aedaf ,_fgcad .Cy -_fece ,_debd .Width ,_debd .Height ,PixSrcAndDst ,_ebe ,0,0);if _gacf !=nil {return nil ,_g .Wrap (_gacf ,_ccged ,"");
};};};};if MorphBC ==SymmetricMorphBC {return _egag ,nil ;};_fcfd ,_babg ,_fbec ,_bebc :=_fgcad .findMaxTranslations ();if _fcfd > 0{if _gacf =_egag .RasterOperation (0,0,_fcfd ,_debd .Height ,PixClr ,nil ,0,0);_gacf !=nil {return nil ,_g .Wrap (_gacf ,_ccged ,"\u0078\u0070\u0020\u003e\u0020\u0030");
};};if _fbec > 0{if _gacf =_egag .RasterOperation (_debd .Width -_fbec ,0,_fbec ,_debd .Height ,PixClr ,nil ,0,0);_gacf !=nil {return nil ,_g .Wrap (_gacf ,_ccged ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _babg > 0{if _gacf =_egag .RasterOperation (0,0,_debd .Width ,_babg ,PixClr ,nil ,0,0);
_gacf !=nil {return nil ,_g .Wrap (_gacf ,_ccged ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _bebc > 0{if _gacf =_egag .RasterOperation (0,_debd .Height -_bebc ,_debd .Width ,_bebc ,PixClr ,nil ,0,0);_gacf !=nil {return nil ,_g .Wrap (_gacf ,_ccged ,"\u0079\u006e\u0020\u003e\u0020\u0030");
};};return _egag ,nil ;};func TstImageBitmap ()*Bitmap {return _bafe .Copy ()};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func _ceceg (_gffe ,_gcea int ,_afcf string )*Selection {_fdac :=&Selection {Height :_gffe ,Width :_gcea ,Name :_afcf };
_fdac .Data =make ([][]SelectionValue ,_gffe );for _fcdf :=0;_fcdf < _gffe ;_fcdf ++{_fdac .Data [_fcdf ]=make ([]SelectionValue ,_gcea );};return _fdac ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _gdaa ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
_fbaf ,_caec :=p1 .Width ,p1 .Height ;_cag ,_acca :=p3 .Width ,p3 .Height ;if _gf .Abs (_fbaf -_cag )> maxDiffW {return false ,nil ;};if _gf .Abs (_caec -_acca )> maxDiffH {return false ,nil ;};_ggcd :=int (delX +_gf .Sign (delX )*0.5);_bedfb :=int (delY +_gf .Sign (delY )*0.5);
var _eef error ;_edcce :=p1 .CreateTemplate ();if _eef =_edcce .RasterOperation (0,0,_fbaf ,_caec ,PixSrc ,p1 ,0,0);_eef !=nil {return false ,_g .Wrap (_eef ,_gdaa ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _eef =_edcce .RasterOperation (_ggcd ,_bedfb ,_fbaf ,_caec ,PixNotSrcAndDst ,p4 ,0,0);
_eef !=nil {return false ,_g .Wrap (_eef ,_gdaa ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _edcce .Zero (){return false ,nil ;};if _eef =_edcce .RasterOperation (_ggcd ,_bedfb ,_cag ,_acca ,PixSrc ,p3 ,0,0);_eef !=nil {return false ,_g .Wrap (_eef ,_gdaa ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");
};if _eef =_edcce .RasterOperation (0,0,_cag ,_acca ,PixNotSrcAndDst ,p2 ,0,0);_eef !=nil {return false ,_g .Wrap (_eef ,_gdaa ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _edcce .Zero (),nil ;};func TstESymbol (t *_bg .T ,scale ...int )*Bitmap {_ccef ,_ccbc :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});
_e .NoError (t ,_ccbc );return TstGetScaledSymbol (t ,_ccef ,scale ...);};func _agdd (_ffbd ,_bfcd *Bitmap ,_aeff ,_ceda int )(*Bitmap ,error ){const _daga ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _bfcd ==nil {return nil ,_g .Error (_daga ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _aeff < 1&&_ceda < 1{return nil ,_g .Error (_daga ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _aeff ==1&&_ceda ==1{return _bfcd .Copy (),nil ;};if _aeff ==1||_ceda ==1{var _gbdc error ;
_bbac :=SelCreateBrick (_ceda ,_aeff ,_ceda /2,_aeff /2,SelHit );_ffbd ,_gbdc =_cfdeg (_ffbd ,_bfcd ,_bbac );if _gbdc !=nil {return nil ,_g .Wrap (_gbdc ,_daga ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _ffbd ,nil ;};_egbe :=SelCreateBrick (1,_aeff ,0,_aeff /2,SelHit );_eeff :=SelCreateBrick (_ceda ,1,_ceda /2,0,SelHit );_gaeb ,_fddg :=_dbfae (nil ,_bfcd ,_egbe );if _fddg !=nil {return nil ,_g .Wrap (_fddg ,_daga ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_ffbd ,_fddg =_dbfae (_ffbd ,_gaeb ,_eeff );if _fddg !=nil {return nil ,_g .Wrap (_fddg ,_daga ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_fddg =_cgbb (_gaeb ,_ffbd ,_egbe );if _fddg !=nil {return nil ,_g .Wrap (_fddg ,_daga ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_ ,_fddg =_cgbb (_ffbd ,_gaeb ,_eeff );if _fddg !=nil {return nil ,_g .Wrap (_fddg ,_daga ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _ffbd ,nil ;};func _ba (_fe *Bitmap ,_gc int )(*Bitmap ,error ){const _fgc ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";
if _fe ==nil {return nil ,_g .Error (_fgc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _gc ==1{return _abf (nil ,_fe );};if _gc !=2&&_gc !=4&&_gc !=8{return nil ,_g .Error (_fgc ,"\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");
};_gb :=_gc *_fe .Width ;_deda :=_gc *_fe .Height ;_gaaf :=New (_gb ,_deda );var _cfd error ;switch _gc {case 2:_cfd =_gg (_gaaf ,_fe );case 4:_cfd =_fg (_gaaf ,_fe );case 8:_cfd =_dd (_gaaf ,_fe );};if _cfd !=nil {return nil ,_g .Wrap (_cfd ,_fgc ,"");
};return _gaaf ,nil ;};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_bd .Rectangle ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_efa bool ,_gaec error ){const _ceec ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
_deaa ,_cac :=p1 .Width ,p1 .Height ;_gabae ,_acbd :=p3 .Width ,p3 .Height ;if _gf .Abs (_deaa -_gabae )> maxDiffW {return false ,nil ;};if _gf .Abs (_cac -_acbd )> maxDiffH {return false ,nil ;};_egce :=int (float32 (area1 )*(1.0-rank )+0.5);_gaadc :=int (float32 (area3 )*(1.0-rank )+0.5);
var _feea ,_bedb int ;if delX >=0{_feea =int (delX +0.5);}else {_feea =int (delX -0.5);};if delY >=0{_bedb =int (delY +0.5);}else {_bedb =int (delY -0.5);};_dadc :=p1 .CreateTemplate ();if _gaec =_dadc .RasterOperation (0,0,_deaa ,_cac ,PixSrc ,p1 ,0,0);
_gaec !=nil {return false ,_g .Wrap (_gaec ,_ceec ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _gaec =_dadc .RasterOperation (_feea ,_bedb ,_deaa ,_cac ,PixNotSrcAndDst ,p4 ,0,0);_gaec !=nil {return false ,_g .Wrap (_gaec ,_ceec ,"\u0074 \u0026\u0020\u0021\u0070\u0034");
};_efa ,_gaec =_dadc .ThresholdPixelSum (_egce ,tab8 );if _gaec !=nil {return false ,_g .Wrap (_gaec ,_ceec ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _efa {return false ,nil ;};if _gaec =_dadc .RasterOperation (_feea ,_bedb ,_gabae ,_acbd ,PixSrc ,p3 ,0,0);
_gaec !=nil {return false ,_g .Wrap (_gaec ,_ceec ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _gaec =_dadc .RasterOperation (0,0,_gabae ,_acbd ,PixNotSrcAndDst ,p2 ,0,0);_gaec !=nil {return false ,_g .Wrap (_gaec ,_ceec ,"\u0074 \u0026\u0020\u0021\u0070\u0032");
};_efa ,_gaec =_dadc .ThresholdPixelSum (_gaadc ,tab8 );if _gaec !=nil {return false ,_g .Wrap (_gaec ,_ceec ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_efa ,nil ;};func TstRSymbol (t *_bg .T ,scale ...int )*Bitmap {_fagab ,_bgfdb :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});
_e .NoError (t ,_bgfdb );return TstGetScaledSymbol (t ,_fagab ,scale ...);};func _bffca (_facd ,_gfdb ,_gbd *Bitmap )(*Bitmap ,error ){const _egdd ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _gfdb ==nil {return nil ,_g .Error (_egdd ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
};if _gbd ==nil {return nil ,_g .Error (_egdd ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _facd ==_gbd {return nil ,_g .Error (_egdd ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_gfdb .SizesEqual (_gbd ){_f .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",_egdd );
};var _fcea error ;if _facd ,_fcea =_abf (_facd ,_gfdb );_fcea !=nil {return nil ,_g .Wrap (_fcea ,_egdd ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _fcea =_facd .RasterOperation (0,0,_facd .Width ,_facd .Height ,PixSrcXorDst ,_gbd ,0,0);
_fcea !=nil {return nil ,_g .Wrap (_fcea ,_egdd ,"");};return _facd ,nil ;};func (_bffd *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _bdba ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";
if _bffd ==nil {return nil ,_g .Error (_bdba ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_g .Error (_bdba ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};_ebfe :=len (_bffd .Values );_bgeac :=&Bitmaps {Values :make ([]*Bitmap ,_ebfe ),Boxes :make ([]*_bd .Rectangle ,_ebfe )};var (_afaa ,_ffea *Bitmap ;_dffc *_bd .Rectangle ;_gbecg error ;);for _fgfgg :=0;_fgfgg < _ebfe ;_fgfgg ++{if _afaa ,_gbecg =_bffd .GetBitmap (_fgfgg );
_gbecg !=nil {return nil ,_g .Wrap (_gbecg ,_bdba ,"");};if _dffc ,_gbecg =_bffd .GetBox (_fgfgg );_gbecg !=nil {return nil ,_g .Wrap (_gbecg ,_bdba ,"");};if _ffea ,_gbecg =s .clipRectangle (_dffc ,nil );_gbecg !=nil {return nil ,_g .Wrap (_gbecg ,_bdba ,"");
};if _ffea ,_gbecg =_ffea .And (_afaa );_gbecg !=nil {return nil ,_g .Wrap (_gbecg ,_bdba ,"");};_bgeac .Values [_fgfgg ]=_ffea ;_bgeac .Boxes [_fgfgg ]=_dffc ;};return _bgeac ,nil ;};type shift int ;func (_aedaa *Bitmaps )makeSizeIndicator (_ebaa ,_dfcag int ,_dacdc LocationFilter ,_ccacgb SizeComparison )(_beddb *_gf .NumSlice ,_fdbf error ){const _cabeg ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _aedaa ==nil {return nil ,_g .Error (_cabeg ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _dacdc {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_g .Errorf (_cabeg ,"\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",_dacdc );
};switch _ccacgb {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_g .Errorf (_cabeg ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_ccacgb );
};_beddb =&_gf .NumSlice {};var (_fagd ,_begac ,_ddad int ;_dcddb *Bitmap ;);for _ ,_dcddb =range _aedaa .Values {_fagd =0;_begac ,_ddad =_dcddb .Width ,_dcddb .Height ;switch _dacdc {case LocSelectWidth :if (_ccacgb ==SizeSelectIfLT &&_begac < _ebaa )||(_ccacgb ==SizeSelectIfGT &&_begac > _ebaa )||(_ccacgb ==SizeSelectIfLTE &&_begac <=_ebaa )||(_ccacgb ==SizeSelectIfGTE &&_begac >=_ebaa )||(_ccacgb ==SizeSelectIfEQ &&_begac ==_ebaa ){_fagd =1;
};case LocSelectHeight :if (_ccacgb ==SizeSelectIfLT &&_ddad < _dfcag )||(_ccacgb ==SizeSelectIfGT &&_ddad > _dfcag )||(_ccacgb ==SizeSelectIfLTE &&_ddad <=_dfcag )||(_ccacgb ==SizeSelectIfGTE &&_ddad >=_dfcag )||(_ccacgb ==SizeSelectIfEQ &&_ddad ==_dfcag ){_fagd =1;
};case LocSelectIfEither :if (_ccacgb ==SizeSelectIfLT &&(_begac < _ebaa ||_ddad < _dfcag ))||(_ccacgb ==SizeSelectIfGT &&(_begac > _ebaa ||_ddad > _dfcag ))||(_ccacgb ==SizeSelectIfLTE &&(_begac <=_ebaa ||_ddad <=_dfcag ))||(_ccacgb ==SizeSelectIfGTE &&(_begac >=_ebaa ||_ddad >=_dfcag ))||(_ccacgb ==SizeSelectIfEQ &&(_begac ==_ebaa ||_ddad ==_dfcag )){_fagd =1;
};case LocSelectIfBoth :if (_ccacgb ==SizeSelectIfLT &&(_begac < _ebaa &&_ddad < _dfcag ))||(_ccacgb ==SizeSelectIfGT &&(_begac > _ebaa &&_ddad > _dfcag ))||(_ccacgb ==SizeSelectIfLTE &&(_begac <=_ebaa &&_ddad <=_dfcag ))||(_ccacgb ==SizeSelectIfGTE &&(_begac >=_ebaa &&_ddad >=_dfcag ))||(_ccacgb ==SizeSelectIfEQ &&(_begac ==_ebaa &&_ddad ==_dfcag )){_fagd =1;
};};_beddb .AddInt (_fagd );};return _beddb ,nil ;};func _dagg (_ccff *Bitmap ,_ecag ,_bead ,_bfagg ,_gdbg int ,_ecgd RasterOperator ,_bgag *Bitmap ,_agbb ,_baed int )error {var (_bgfb byte ;_efcbe int ;_eafd int ;_edg ,_daddg int ;_fdde ,_eecc int ;);
_adgg :=_bfagg >>3;_gcgb :=_bfagg &7;if _gcgb > 0{_bgfb =_eecde [_gcgb ];};_efcbe =_bgag .RowStride *_baed +(_agbb >>3);_eafd =_ccff .RowStride *_bead +(_ecag >>3);switch _ecgd {case PixSrc :for _fdde =0;_fdde < _gdbg ;_fdde ++{_edg =_efcbe +_fdde *_bgag .RowStride ;
_daddg =_eafd +_fdde *_ccff .RowStride ;for _eecc =0;_eecc < _adgg ;_eecc ++{_ccff .Data [_daddg ]=_bgag .Data [_edg ];_daddg ++;_edg ++;};if _gcgb > 0{_ccff .Data [_daddg ]=_cfbad (_ccff .Data [_daddg ],_bgag .Data [_edg ],_bgfb );};};case PixNotSrc :for _fdde =0;
_fdde < _gdbg ;_fdde ++{_edg =_efcbe +_fdde *_bgag .RowStride ;_daddg =_eafd +_fdde *_ccff .RowStride ;for _eecc =0;_eecc < _adgg ;_eecc ++{_ccff .Data [_daddg ]=^(_bgag .Data [_edg ]);_daddg ++;_edg ++;};if _gcgb > 0{_ccff .Data [_daddg ]=_cfbad (_ccff .Data [_daddg ],^_bgag .Data [_edg ],_bgfb );
};};case PixSrcOrDst :for _fdde =0;_fdde < _gdbg ;_fdde ++{_edg =_efcbe +_fdde *_bgag .RowStride ;_daddg =_eafd +_fdde *_ccff .RowStride ;for _eecc =0;_eecc < _adgg ;_eecc ++{_ccff .Data [_daddg ]|=_bgag .Data [_edg ];_daddg ++;_edg ++;};if _gcgb > 0{_ccff .Data [_daddg ]=_cfbad (_ccff .Data [_daddg ],_bgag .Data [_edg ]|_ccff .Data [_daddg ],_bgfb );
};};case PixSrcAndDst :for _fdde =0;_fdde < _gdbg ;_fdde ++{_edg =_efcbe +_fdde *_bgag .RowStride ;_daddg =_eafd +_fdde *_ccff .RowStride ;for _eecc =0;_eecc < _adgg ;_eecc ++{_ccff .Data [_daddg ]&=_bgag .Data [_edg ];_daddg ++;_edg ++;};if _gcgb > 0{_ccff .Data [_daddg ]=_cfbad (_ccff .Data [_daddg ],_bgag .Data [_edg ]&_ccff .Data [_daddg ],_bgfb );
};};case PixSrcXorDst :for _fdde =0;_fdde < _gdbg ;_fdde ++{_edg =_efcbe +_fdde *_bgag .RowStride ;_daddg =_eafd +_fdde *_ccff .RowStride ;for _eecc =0;_eecc < _adgg ;_eecc ++{_ccff .Data [_daddg ]^=_bgag .Data [_edg ];_daddg ++;_edg ++;};if _gcgb > 0{_ccff .Data [_daddg ]=_cfbad (_ccff .Data [_daddg ],_bgag .Data [_edg ]^_ccff .Data [_daddg ],_bgfb );
};};case PixNotSrcOrDst :for _fdde =0;_fdde < _gdbg ;_fdde ++{_edg =_efcbe +_fdde *_bgag .RowStride ;_daddg =_eafd +_fdde *_ccff .RowStride ;for _eecc =0;_eecc < _adgg ;_eecc ++{_ccff .Data [_daddg ]|=^(_bgag .Data [_edg ]);_daddg ++;_edg ++;};if _gcgb > 0{_ccff .Data [_daddg ]=_cfbad (_ccff .Data [_daddg ],^(_bgag .Data [_edg ])|_ccff .Data [_daddg ],_bgfb );
};};case PixNotSrcAndDst :for _fdde =0;_fdde < _gdbg ;_fdde ++{_edg =_efcbe +_fdde *_bgag .RowStride ;_daddg =_eafd +_fdde *_ccff .RowStride ;for _eecc =0;_eecc < _adgg ;_eecc ++{_ccff .Data [_daddg ]&=^(_bgag .Data [_edg ]);_daddg ++;_edg ++;};if _gcgb > 0{_ccff .Data [_daddg ]=_cfbad (_ccff .Data [_daddg ],^(_bgag .Data [_edg ])&_ccff .Data [_daddg ],_bgfb );
};};case PixSrcOrNotDst :for _fdde =0;_fdde < _gdbg ;_fdde ++{_edg =_efcbe +_fdde *_bgag .RowStride ;_daddg =_eafd +_fdde *_ccff .RowStride ;for _eecc =0;_eecc < _adgg ;_eecc ++{_ccff .Data [_daddg ]=_bgag .Data [_edg ]|^(_ccff .Data [_daddg ]);_daddg ++;
_edg ++;};if _gcgb > 0{_ccff .Data [_daddg ]=_cfbad (_ccff .Data [_daddg ],_bgag .Data [_edg ]|^(_ccff .Data [_daddg ]),_bgfb );};};case PixSrcAndNotDst :for _fdde =0;_fdde < _gdbg ;_fdde ++{_edg =_efcbe +_fdde *_bgag .RowStride ;_daddg =_eafd +_fdde *_ccff .RowStride ;
for _eecc =0;_eecc < _adgg ;_eecc ++{_ccff .Data [_daddg ]=_bgag .Data [_edg ]&^(_ccff .Data [_daddg ]);_daddg ++;_edg ++;};if _gcgb > 0{_ccff .Data [_daddg ]=_cfbad (_ccff .Data [_daddg ],_bgag .Data [_edg ]&^(_ccff .Data [_daddg ]),_bgfb );};};case PixNotPixSrcOrDst :for _fdde =0;
_fdde < _gdbg ;_fdde ++{_edg =_efcbe +_fdde *_bgag .RowStride ;_daddg =_eafd +_fdde *_ccff .RowStride ;for _eecc =0;_eecc < _adgg ;_eecc ++{_ccff .Data [_daddg ]=^(_bgag .Data [_edg ]|_ccff .Data [_daddg ]);_daddg ++;_edg ++;};if _gcgb > 0{_ccff .Data [_daddg ]=_cfbad (_ccff .Data [_daddg ],^(_bgag .Data [_edg ]|_ccff .Data [_daddg ]),_bgfb );
};};case PixNotPixSrcAndDst :for _fdde =0;_fdde < _gdbg ;_fdde ++{_edg =_efcbe +_fdde *_bgag .RowStride ;_daddg =_eafd +_fdde *_ccff .RowStride ;for _eecc =0;_eecc < _adgg ;_eecc ++{_ccff .Data [_daddg ]=^(_bgag .Data [_edg ]&_ccff .Data [_daddg ]);_daddg ++;
_edg ++;};if _gcgb > 0{_ccff .Data [_daddg ]=_cfbad (_ccff .Data [_daddg ],^(_bgag .Data [_edg ]&_ccff .Data [_daddg ]),_bgfb );};};case PixNotPixSrcXorDst :for _fdde =0;_fdde < _gdbg ;_fdde ++{_edg =_efcbe +_fdde *_bgag .RowStride ;_daddg =_eafd +_fdde *_ccff .RowStride ;
for _eecc =0;_eecc < _adgg ;_eecc ++{_ccff .Data [_daddg ]=^(_bgag .Data [_edg ]^_ccff .Data [_daddg ]);_daddg ++;_edg ++;};if _gcgb > 0{_ccff .Data [_daddg ]=_cfbad (_ccff .Data [_daddg ],^(_bgag .Data [_edg ]^_ccff .Data [_daddg ]),_bgfb );};};default:_f .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",_ecgd );
return _g .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 (_fff *Bitmap )setEightPartlyBytes (_ggcb ,_bgd int ,_befb uint64 )(_cgcg error ){var (_gdab byte ;_edf int ;);const _ccaa ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";
for _efcf :=1;_efcf <=_bgd ;_efcf ++{_edf =64-_efcf *8;_gdab =byte (_befb >>uint (_edf )&0xff);_f .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",_gdab ,_ggcb ,_ggcb +_efcf -1,_bgd ,_edf );
if _cgcg =_fff .SetByte (_ggcb +_efcf -1,_gdab );_cgcg !=nil {return _g .Wrap (_cgcg ,_ccaa ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_ade :=_fff .RowStride *8-_fff .Width ;if _ade ==0{return nil ;};_edf -=8;_gdab =byte (_befb >>uint (_edf )&0xff)<<uint (_ade );
if _cgcg =_fff .SetByte (_ggcb +_bgd ,_gdab );_cgcg !=nil {return _g .Wrap (_cgcg ,_ccaa ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func (_adgdd *byWidth )Len ()int {return len (_adgdd .Values )};func Centroids (bms []*Bitmap )(*Points ,error ){_daed :=make ([]Point ,len (bms ));
_dcec :=_afafc ();_abaga :=_aeef ();var _egee error ;for _eeb ,_cgac :=range bms {_daed [_eeb ],_egee =_cgac .centroid (_dcec ,_abaga );if _egee !=nil {return nil ,_egee ;};};_fdd :=Points (_daed );return &_fdd ,nil ;};type Getter interface{GetBitmap ()*Bitmap ;
};func (_egc *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _egc .Copy (),nil ;};_ead ,_ecff :=_egc .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _ecff !=nil {return nil ,_g .Wrap (_ecff ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");
};return _ead ,nil ;};func (_fcaa *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _abad ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";if len (_fcaa .Values )==0{return nil ,_g .Error (_abad ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
};_gefgf :=&BitmapsArray {};_fcaa .SortByHeight ();_afff :=-1;_ggece :=-1;for _dcgd :=0;_dcgd < len (_fcaa .Values );_dcgd ++{_fcfag :=_fcaa .Values [_dcgd ].Height ;if _fcfag > _afff {_afff =_fcfag ;_ggece ++;_gefgf .Values =append (_gefgf .Values ,&Bitmaps {});
};_gefgf .Values [_ggece ].AddBitmap (_fcaa .Values [_dcgd ]);};return _gefgf ,nil ;};func (_faeefa *BitmapsArray )GetBox (i int )(*_bd .Rectangle ,error ){const _caeda ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";
if _faeefa ==nil {return nil ,_g .Error (_caeda ,"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 (_faeefa .Boxes )-1{return nil ,_g .Errorf (_caeda ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _faeefa .Boxes [i ],nil ;};func (_gefg *ClassedPoints )XAtIndex (i int )float32 {return (*_gefg .Points )[_gefg .IntSlice [i ]].X };type Component int ;func (_fdfb *ClassedPoints )Len ()int {return _fdfb .IntSlice .Size ()};type Boxes []*_bd .Rectangle ;
func (_acbe *Bitmap )And (s *Bitmap )(_gda *Bitmap ,_dege error ){const _ceaf ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _acbe ==nil {return nil ,_g .Error (_ceaf ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");
};if s ==nil {return nil ,_g .Error (_ceaf ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_acbe .SizesEqual (s ){_f .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",_ceaf );
};if _gda ,_dege =_abf (_gda ,_acbe );_dege !=nil {return nil ,_g .Wrap (_dege ,_ceaf ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _dege =_gda .RasterOperation (0,0,_gda .Width ,_gda .Height ,PixSrcAndDst ,s ,0,0);
_dege !=nil {return nil ,_g .Wrap (_dege ,_ceaf ,"");};return _gda ,nil ;};func (_cbbf *Selection )findMaxTranslations ()(_feef ,_dedad ,_ebcd ,_fdbe int ){for _gegf :=0;_gegf < _cbbf .Height ;_gegf ++{for _fagbf :=0;_fagbf < _cbbf .Width ;_fagbf ++{if _cbbf .Data [_gegf ][_fagbf ]==SelHit {_feef =_egfc (_feef ,_cbbf .Cx -_fagbf );
_dedad =_egfc (_dedad ,_cbbf .Cy -_gegf );_ebcd =_egfc (_ebcd ,_fagbf -_cbbf .Cx );_fdbe =_egfc (_fdbe ,_gegf -_cbbf .Cy );};};};return _feef ,_dedad ,_ebcd ,_fdbe ;};func TstPSymbol (t *_bg .T )*Bitmap {t .Helper ();_gbfe :=New (5,8);_e .NoError (t ,_gbfe .SetPixel (0,0,1));
_e .NoError (t ,_gbfe .SetPixel (1,0,1));_e .NoError (t ,_gbfe .SetPixel (2,0,1));_e .NoError (t ,_gbfe .SetPixel (3,0,1));_e .NoError (t ,_gbfe .SetPixel (4,1,1));_e .NoError (t ,_gbfe .SetPixel (0,1,1));_e .NoError (t ,_gbfe .SetPixel (4,2,1));_e .NoError (t ,_gbfe .SetPixel (0,2,1));
_e .NoError (t ,_gbfe .SetPixel (4,3,1));_e .NoError (t ,_gbfe .SetPixel (0,3,1));_e .NoError (t ,_gbfe .SetPixel (0,4,1));_e .NoError (t ,_gbfe .SetPixel (1,4,1));_e .NoError (t ,_gbfe .SetPixel (2,4,1));_e .NoError (t ,_gbfe .SetPixel (3,4,1));_e .NoError (t ,_gbfe .SetPixel (0,5,1));
_e .NoError (t ,_gbfe .SetPixel (0,6,1));_e .NoError (t ,_gbfe .SetPixel (0,7,1));return _gbfe ;};func (_gfab *Bitmap )countPixels ()int {var (_efga int ;_gggf uint8 ;_dcfc byte ;_fbd int ;);_eeed :=_gfab .RowStride ;_edbe :=uint (_gfab .Width &0x07);if _edbe !=0{_gggf =uint8 ((0xff<<(8-_edbe ))&0xff);
_eeed --;};for _eae :=0;_eae < _gfab .Height ;_eae ++{for _fbd =0;_fbd < _eeed ;_fbd ++{_dcfc =_gfab .Data [_eae *_gfab .RowStride +_fbd ];_efga +=int (_bdae [_dcfc ]);};if _edbe !=0{_efga +=int (_bdae [_gfab .Data [_eae *_gfab .RowStride +_fbd ]&_gggf ]);
};};return _efga ;};func _aaeg (_cbbg ,_deac *Bitmap ,_daf ,_beea ,_cfff ,_dcdd ,_cbab ,_eedf ,_bbfg ,_fba int ,_eddc CombinationOperator )error {var _ebbaa int ;_ebgc :=func (){_ebbaa ++;_cfff +=_deac .RowStride ;_dcdd +=_cbbg .RowStride ;_cbab +=_cbbg .RowStride };
for _ebbaa =_daf ;_ebbaa < _beea ;_ebgc (){var _fgbg uint16 ;_aeade :=_cfff ;for _fccg :=_dcdd ;_fccg <=_cbab ;_fccg ++{_afdd ,_dbgfa :=_deac .GetByte (_aeade );if _dbgfa !=nil {return _dbgfa ;};_bdca ,_dbgfa :=_cbbg .GetByte (_fccg );if _dbgfa !=nil {return _dbgfa ;
};_fgbg =(_fgbg |uint16 (_bdca ))<<uint (_fba );_bdca =byte (_fgbg >>8);if _fccg ==_cbab {_bdca =_ccaag (uint (_eedf ),_bdca );};if _dbgfa =_deac .SetByte (_aeade ,_dbae (_afdd ,_bdca ,_eddc ));_dbgfa !=nil {return _dbgfa ;};_aeade ++;_fgbg <<=uint (_bbfg );
};};return nil ;};func TstFrameBitmapData ()[]byte {return _beab .Data };func (_cfaeg *BitmapsArray )AddBox (box *_bd .Rectangle ){_cfaeg .Boxes =append (_cfaeg .Boxes ,box )};func (_adea *BitmapsArray )AddBitmaps (bm *Bitmaps ){_adea .Values =append (_adea .Values ,bm )};
func _ccf (_fae ,_fcd *Bitmap ,_aec int ,_cga []byte ,_fef int )(_bfa error ){const _aee ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";var (_afe ,_add ,_bac ,_fb ,_gdb ,_ecdf ,_eece ,_acb int ;
_bbb ,_dac uint32 ;_gbc ,_aeb byte ;_ff uint16 ;);_bee :=make ([]byte ,4);_gde :=make ([]byte ,4);for _bac =0;_bac < _fae .Height -1;_bac ,_fb =_bac +2,_fb +1{_afe =_bac *_fae .RowStride ;_add =_fb *_fcd .RowStride ;for _gdb ,_ecdf =0,0;_gdb < _fef ;_gdb ,_ecdf =_gdb +4,_ecdf +1{for _eece =0;
_eece < 4;_eece ++{_acb =_afe +_gdb +_eece ;if _acb <=len (_fae .Data )-1&&_acb < _afe +_fae .RowStride {_bee [_eece ]=_fae .Data [_acb ];}else {_bee [_eece ]=0x00;};_acb =_afe +_fae .RowStride +_gdb +_eece ;if _acb <=len (_fae .Data )-1&&_acb < _afe +(2*_fae .RowStride ){_gde [_eece ]=_fae .Data [_acb ];
}else {_gde [_eece ]=0x00;};};_bbb =_c .BigEndian .Uint32 (_bee );_dac =_c .BigEndian .Uint32 (_gde );_dac |=_bbb ;_dac |=_dac <<1;_dac &=0xaaaaaaaa;_bbb =_dac |(_dac <<7);_gbc =byte (_bbb >>24);_aeb =byte ((_bbb >>8)&0xff);_acb =_add +_ecdf ;if _acb +1==len (_fcd .Data )-1||_acb +1>=_add +_fcd .RowStride {_fcd .Data [_acb ]=_cga [_gbc ];
}else {_ff =(uint16 (_cga [_gbc ])<<8)|uint16 (_cga [_aeb ]);if _bfa =_fcd .setTwoBytes (_acb ,_ff );_bfa !=nil {return _g .Wrapf (_bfa ,_aee ,"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",_acb );
};_ecdf ++;};};};return nil ;};func (_eadec *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _fdbbc ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";if _baca :=_eadec .validateIntSlice ();
_baca !=nil {return nil ,_g .Wrap (_baca ,_fdbbc ,"");};if _eadec .IntSlice .Size ()==0{return nil ,_g .Error (_fdbbc ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");};_eadec .SortByY ();var (_ffec []*ClassedPoints ;
_bgce int ;);_gfee :=-1;var _cfdf *ClassedPoints ;for _bfaac :=0;_bfaac < len (_eadec .IntSlice );_bfaac ++{_bgce =int (_eadec .YAtIndex (_bfaac ));if _bgce !=_gfee {_cfdf =&ClassedPoints {Points :_eadec .Points };_gfee =_bgce ;_ffec =append (_ffec ,_cfdf );
};_cfdf .IntSlice =append (_cfdf .IntSlice ,_eadec .IntSlice [_bfaac ]);};for _ ,_ccbd :=range _ffec {_ccbd .SortByX ();};return _ffec ,nil ;};func (_efag *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_feaf *Bitmaps ,_fggbg error ){const _cbabbf ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";
if _efag ==nil {return nil ,_g .Error (_cbabbf ,"\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 ,_g .Errorf (_cbabbf ,"\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 ,_g .Errorf (_cbabbf ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
};_ebgbg ,_fggbg :=_efag .makeSizeIndicator (width ,height ,tp ,relation );if _fggbg !=nil {return nil ,_g .Wrap (_fggbg ,_cbabbf ,"");};_feaf ,_fggbg =_efag .selectByIndicator (_ebgbg );if _fggbg !=nil {return nil ,_g .Wrap (_fggbg ,_cbabbf ,"");};return _feaf ,nil ;
};func (_egdf *ClassedPoints )xSortFunction ()func (_aggbb int ,_fddb int )bool {return func (_dgbd ,_afg int )bool {return _egdf .XAtIndex (_dgbd )< _egdf .XAtIndex (_afg )};};func (_eeffc Points )Get (i int )(Point ,error ){if i > len (_eeffc )-1{return Point {},_g .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 _eeffc [i ],nil ;};func (_aada *ClassedPoints )SortByX (){_aada ._egec =_aada .xSortFunction ();_ga .Sort (_aada )};func (_fbea *Bitmaps )Size ()int {return len (_fbea .Values )};func _cfab (_eecb *Bitmap ,_fgb int ,_cdc []byte )(_gaac *Bitmap ,_ecf error ){const _bf ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";
if _eecb ==nil {return nil ,_g .Error (_bf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _fgb < 1||_fgb > 4{return nil ,_g .Error (_bf ,"\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 _eecb .Height <=1{return nil ,_g .Errorf (_bf ,"\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",_eecb .Height );
};_gaac =New (_eecb .Width /2,_eecb .Height /2);if _cdc ==nil {_cdc =_fafb ();};_dgc :=_gdad (_eecb .RowStride ,2*_gaac .RowStride );switch _fgb {case 1:_ecf =_ccf (_eecb ,_gaac ,_fgb ,_cdc ,_dgc );case 2:_ecf =_gbcf (_eecb ,_gaac ,_fgb ,_cdc ,_dgc );case 3:_ecf =_acf (_eecb ,_gaac ,_fgb ,_cdc ,_dgc );
case 4:_ecf =_gfc (_eecb ,_gaac ,_fgb ,_cdc ,_dgc );};if _ecf !=nil {return nil ,_ecf ;};return _gaac ,nil ;};func (_dagf Points )GetIntY (i int )(int ,error ){if i >=len (_dagf ){return 0,_g .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 (_dagf [i ].Y ),nil ;};func Rect (x ,y ,w ,h int )(*_bd .Rectangle ,error ){const _abe ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";if x < 0{w +=x ;x =0;if w <=0{return nil ,_g .Errorf (_abe ,"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 ,_g .Error (_abe ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_cdf :=_bd .Rect (x ,y ,x +w ,y +h );return &_cdf ,nil ;
};func (_cfae *Bitmaps )CountPixels ()*_gf .NumSlice {_gcbf :=&_gf .NumSlice {};for _ ,_gcdb :=range _cfae .Values {_gcbf .AddInt (_gcdb .CountPixels ());};return _gcbf ;};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;
SizeSelectByArea ;SizeSelectByPerimeter ;);func (_dfc *Bitmap )addBorderGeneral (_dfb ,_cdbf ,_dea ,_gafd int ,_dfa int )(*Bitmap ,error ){const _cdea ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _dfb < 0||_cdbf < 0||_dea < 0||_gafd < 0{return nil ,_g .Error (_cdea ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");
};_aca ,_eab :=_dfc .Width ,_dfc .Height ;_gdeb :=_aca +_dfb +_cdbf ;_eeaa :=_eab +_dea +_gafd ;_fgag :=New (_gdeb ,_eeaa );_fgag .Color =_dfc .Color ;_dbdf :=PixClr ;if _dfa > 0{_dbdf =PixSet ;};_gdda :=_fgag .RasterOperation (0,0,_dfb ,_eeaa ,_dbdf ,nil ,0,0);
if _gdda !=nil {return nil ,_g .Wrap (_gdda ,_cdea ,"\u006c\u0065\u0066\u0074");};_gdda =_fgag .RasterOperation (_gdeb -_cdbf ,0,_cdbf ,_eeaa ,_dbdf ,nil ,0,0);if _gdda !=nil {return nil ,_g .Wrap (_gdda ,_cdea ,"\u0072\u0069\u0067h\u0074");};_gdda =_fgag .RasterOperation (0,0,_gdeb ,_dea ,_dbdf ,nil ,0,0);
if _gdda !=nil {return nil ,_g .Wrap (_gdda ,_cdea ,"\u0074\u006f\u0070");};_gdda =_fgag .RasterOperation (0,_eeaa -_gafd ,_gdeb ,_gafd ,_dbdf ,nil ,0,0);if _gdda !=nil {return nil ,_g .Wrap (_gdda ,_cdea ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_gdda =_fgag .RasterOperation (_dfb ,_dea ,_aca ,_eab ,PixSrc ,_dfc ,0,0);
if _gdda !=nil {return nil ,_g .Wrap (_gdda ,_cdea ,"\u0063\u006f\u0070\u0079");};return _fgag ,nil ;};func _gacd (_gebca *Bitmap ,_aaga ,_ffbec int ,_baedd ,_cbbd int ,_bagb RasterOperator ){var (_dbdc bool ;_ebdb bool ;_feff int ;_agdg int ;_afef int ;
_dcgfe int ;_aabea bool ;_cbae byte ;);_ecfeb :=8-(_aaga &7);_bcb :=_eefe [_ecfeb ];_caee :=_gebca .RowStride *_ffbec +(_aaga >>3);if _baedd < _ecfeb {_dbdc =true ;_bcb &=_eecde [8-_ecfeb +_baedd ];};if !_dbdc {_feff =(_baedd -_ecfeb )>>3;if _feff !=0{_ebdb =true ;
_agdg =_caee +1;};};_afef =(_aaga +_baedd )&7;if !(_dbdc ||_afef ==0){_aabea =true ;_cbae =_eecde [_afef ];_dcgfe =_caee +1+_feff ;};var _cgfc ,_bcab int ;switch _bagb {case PixClr :for _cgfc =0;_cgfc < _cbbd ;_cgfc ++{_gebca .Data [_caee ]=_cfbad (_gebca .Data [_caee ],0x0,_bcb );
_caee +=_gebca .RowStride ;};if _ebdb {for _cgfc =0;_cgfc < _cbbd ;_cgfc ++{for _bcab =0;_bcab < _feff ;_bcab ++{_gebca .Data [_agdg +_bcab ]=0x0;};_agdg +=_gebca .RowStride ;};};if _aabea {for _cgfc =0;_cgfc < _cbbd ;_cgfc ++{_gebca .Data [_dcgfe ]=_cfbad (_gebca .Data [_dcgfe ],0x0,_cbae );
_dcgfe +=_gebca .RowStride ;};};case PixSet :for _cgfc =0;_cgfc < _cbbd ;_cgfc ++{_gebca .Data [_caee ]=_cfbad (_gebca .Data [_caee ],0xff,_bcb );_caee +=_gebca .RowStride ;};if _ebdb {for _cgfc =0;_cgfc < _cbbd ;_cgfc ++{for _bcab =0;_bcab < _feff ;_bcab ++{_gebca .Data [_agdg +_bcab ]=0xff;
};_agdg +=_gebca .RowStride ;};};if _aabea {for _cgfc =0;_cgfc < _cbbd ;_cgfc ++{_gebca .Data [_dcgfe ]=_cfbad (_gebca .Data [_dcgfe ],0xff,_cbae );_dcgfe +=_gebca .RowStride ;};};case PixNotDst :for _cgfc =0;_cgfc < _cbbd ;_cgfc ++{_gebca .Data [_caee ]=_cfbad (_gebca .Data [_caee ],^_gebca .Data [_caee ],_bcb );
_caee +=_gebca .RowStride ;};if _ebdb {for _cgfc =0;_cgfc < _cbbd ;_cgfc ++{for _bcab =0;_bcab < _feff ;_bcab ++{_gebca .Data [_agdg +_bcab ]=^(_gebca .Data [_agdg +_bcab ]);};_agdg +=_gebca .RowStride ;};};if _aabea {for _cgfc =0;_cgfc < _cbbd ;_cgfc ++{_gebca .Data [_dcgfe ]=_cfbad (_gebca .Data [_dcgfe ],^_gebca .Data [_dcgfe ],_cbae );
_dcgfe +=_gebca .RowStride ;};};};};func init (){const _fagdg ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_beab =New (50,40);var _bdbe error ;_beab ,_bdbe =_beab .AddBorder (2,1);
if _bdbe !=nil {panic (_g .Wrap (_bdbe ,_fagdg ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_bafe ,_bdbe =NewWithData (50,22,_aegf );if _bdbe !=nil {panic (_g .Wrap (_bdbe ,_fagdg ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
};};func New (width ,height int )*Bitmap {_deg :=_dacd (width ,height );_deg .Data =make ([]byte ,height *_deg .RowStride );return _deg ;};func TstWSymbol (t *_bg .T ,scale ...int )*Bitmap {_bdac ,_afab :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});
_e .NoError (t ,_afab );return TstGetScaledSymbol (t ,_bdac ,scale ...);};type Points []Point ;func _agfg (_abag *Bitmap )(_bade *Bitmap ,_acfc int ,_beba error ){const _aeee ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";
if _abag ==nil {return nil ,0,_g .Errorf (_aeee ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _eada ,_bgbga *Bitmap ;if _eada ,_beba =_abf (nil ,_abag );_beba !=nil {return nil ,0,_g .Wrap (_beba ,_aeee ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");
};var (_gfcgd [13]int ;_aebe ,_bdbd int ;);_cgg :=12;_abfe :=_gf .NewNumSlice (_cgg +1);_dfeb :=_gf .NewNumSlice (_cgg +1);var _cbec *Boxes ;for _egfdd :=0;_egfdd <=_cgg ;_egfdd ++{if _egfdd ==0{if _bgbga ,_beba =_abf (nil ,_eada );_beba !=nil {return nil ,0,_g .Wrap (_beba ,_aeee ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");
};}else {if _bgbga ,_beba =_bdaee (_eada ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_beba !=nil {return nil ,0,_g .Wrap (_beba ,_aeee ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _cbec ,_beba =_bgbga .connComponentsBB (4);
_beba !=nil {return nil ,0,_g .Wrap (_beba ,_aeee ,"");};_gfcgd [_egfdd ]=len (*_cbec );_abfe .AddInt (_gfcgd [_egfdd ]);switch _egfdd {case 0:_aebe =_gfcgd [0];default:_bdbd =_gfcgd [_egfdd -1]-_gfcgd [_egfdd ];_dfeb .AddInt (_bdbd );};_eada =_bgbga ;
};_egea :=true ;_gfdd :=2;var _bfcf ,_ece int ;for _abfef :=1;_abfef < len (*_dfeb );_abfef ++{if _bfcf ,_beba =_abfe .GetInt (_abfef );_beba !=nil {return nil ,0,_g .Wrap (_beba ,_aeee ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");
};if _egea &&_bfcf < int (0.3*float32 (_aebe )){_gfdd =_abfef +1;_egea =false ;};if _bdbd ,_beba =_dfeb .GetInt (_abfef );_beba !=nil {return nil ,0,_g .Wrap (_beba ,_aeee ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");
};if _bdbd > _ece {_ece =_bdbd ;};};_agdc :=_abag .XResolution ;if _agdc ==0{_agdc =150;};if _agdc > 110{_gfdd ++;};if _gfdd < 2{_f .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");
_gfdd =2;};_acfc =_gfdd +1;if _bade ,_beba =_cbbe (nil ,_abag ,_gfdd +1,1);_beba !=nil {return nil ,0,_g .Wrap (_beba ,_aeee ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _bade ,_acfc ,nil ;
};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_dadb float64 ,_dfcf error ){const _ebab ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";
if bm1 ==nil ||bm2 ==nil {return 0,_g .Error (_ebab ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_g .Error (_ebab ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
};if area1 <=0||area2 <=0{return 0,_g .Error (_ebab ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_abea ,_gfeb :=bm1 .Width ,bm1 .Height ;_dff ,_gge :=bm2 .Width ,bm2 .Height ;
_cgd :=_dfde (_abea -_dff );if _cgd > maxDiffW {return 0,nil ;};_bedf :=_dfde (_gfeb -_gge );if _bedf > maxDiffH {return 0,nil ;};var _dffg ,_ffa int ;if delX >=0{_dffg =int (delX +0.5);}else {_dffg =int (delX -0.5);};if delY >=0{_ffa =int (delY +0.5);
}else {_ffa =int (delY -0.5);};_acag :=_egfc (_ffa ,0);_bcgf :=_gdad (_gge +_ffa ,_gfeb );_bgea :=bm1 .RowStride *_acag ;_fafbf :=bm2 .RowStride *(_acag -_ffa );_eadaf :=_egfc (_dffg ,0);_faeb :=_gdad (_dff +_dffg ,_abea );_dfeed :=bm2 .RowStride ;var _daecfd ,_bggg int ;
if _dffg >=8{_daecfd =_dffg >>3;_bgea +=_daecfd ;_eadaf -=_daecfd <<3;_faeb -=_daecfd <<3;_dffg &=7;}else if _dffg <=-8{_bggg =-((_dffg +7)>>3);_fafbf +=_bggg ;_dfeed -=_bggg ;_dffg +=_bggg <<3;};if _eadaf >=_faeb ||_acag >=_bcgf {return 0,nil ;};_dcfb :=(_faeb +7)>>3;
var (_adef ,_eecg ,_bfbe byte ;_dcc ,_ecde ,_bedg int ;);switch {case _dffg ==0:for _bedg =_acag ;_bedg < _bcgf ;_bedg ,_bgea ,_fafbf =_bedg +1,_bgea +bm1 .RowStride ,_fafbf +bm2 .RowStride {for _ecde =0;_ecde < _dcfb ;_ecde ++{_bfbe =bm1 .Data [_bgea +_ecde ]&bm2 .Data [_fafbf +_ecde ];
_dcc +=tab [_bfbe ];};};case _dffg > 0:if _dfeed < _dcfb {for _bedg =_acag ;_bedg < _bcgf ;_bedg ,_bgea ,_fafbf =_bedg +1,_bgea +bm1 .RowStride ,_fafbf +bm2 .RowStride {_adef ,_eecg =bm1 .Data [_bgea ],bm2 .Data [_fafbf ]>>uint (_dffg );_bfbe =_adef &_eecg ;
_dcc +=tab [_bfbe ];for _ecde =1;_ecde < _dfeed ;_ecde ++{_adef ,_eecg =bm1 .Data [_bgea +_ecde ],(bm2 .Data [_fafbf +_ecde ]>>uint (_dffg ))|(bm2 .Data [_fafbf +_ecde -1]<<uint (8-_dffg ));_bfbe =_adef &_eecg ;_dcc +=tab [_bfbe ];};_adef =bm1 .Data [_bgea +_ecde ];
_eecg =bm2 .Data [_fafbf +_ecde -1]<<uint (8-_dffg );_bfbe =_adef &_eecg ;_dcc +=tab [_bfbe ];};}else {for _bedg =_acag ;_bedg < _bcgf ;_bedg ,_bgea ,_fafbf =_bedg +1,_bgea +bm1 .RowStride ,_fafbf +bm2 .RowStride {_adef ,_eecg =bm1 .Data [_bgea ],bm2 .Data [_fafbf ]>>uint (_dffg );
_bfbe =_adef &_eecg ;_dcc +=tab [_bfbe ];for _ecde =1;_ecde < _dcfb ;_ecde ++{_adef =bm1 .Data [_bgea +_ecde ];_eecg =(bm2 .Data [_fafbf +_ecde ]>>uint (_dffg ))|(bm2 .Data [_fafbf +_ecde -1]<<uint (8-_dffg ));_bfbe =_adef &_eecg ;_dcc +=tab [_bfbe ];};
};};default:if _dcfb < _dfeed {for _bedg =_acag ;_bedg < _bcgf ;_bedg ,_bgea ,_fafbf =_bedg +1,_bgea +bm1 .RowStride ,_fafbf +bm2 .RowStride {for _ecde =0;_ecde < _dcfb ;_ecde ++{_adef =bm1 .Data [_bgea +_ecde ];_eecg =bm2 .Data [_fafbf +_ecde ]<<uint (-_dffg );
_eecg |=bm2 .Data [_fafbf +_ecde +1]>>uint (8+_dffg );_bfbe =_adef &_eecg ;_dcc +=tab [_bfbe ];};};}else {for _bedg =_acag ;_bedg < _bcgf ;_bedg ,_bgea ,_fafbf =_bedg +1,_bgea +bm1 .RowStride ,_fafbf +bm2 .RowStride {for _ecde =0;_ecde < _dcfb -1;_ecde ++{_adef =bm1 .Data [_bgea +_ecde ];
_eecg =bm2 .Data [_fafbf +_ecde ]<<uint (-_dffg );_eecg |=bm2 .Data [_fafbf +_ecde +1]>>uint (8+_dffg );_bfbe =_adef &_eecg ;_dcc +=tab [_bfbe ];};_adef =bm1 .Data [_bgea +_ecde ];_eecg =bm2 .Data [_fafbf +_ecde ]<<uint (-_dffg );_bfbe =_adef &_eecg ;_dcc +=tab [_bfbe ];
};};};_dadb =float64 (_dcc )*float64 (_dcc )/(float64 (area1 )*float64 (area2 ));return _dadb ,nil ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_bd .Rectangle ;};func _ddg ()(_dbd [256]uint32 ){for _af :=0;_af < 256;_af ++{if _af &0x01!=0{_dbd [_af ]|=0xf;
};if _af &0x02!=0{_dbd [_af ]|=0xf0;};if _af &0x04!=0{_dbd [_af ]|=0xf00;};if _af &0x08!=0{_dbd [_af ]|=0xf000;};if _af &0x10!=0{_dbd [_af ]|=0xf0000;};if _af &0x20!=0{_dbd [_af ]|=0xf00000;};if _af &0x40!=0{_dbd [_af ]|=0xf000000;};if _af &0x80!=0{_dbd [_af ]|=0xf0000000;
};};return _dbd ;};var _aegf =[]byte {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x78,0x27,0xC2,0x27,0x91,0x00,0x22,0x48,0x21,0x03,0x24,0x91,0x00,0x22,0x48,0x21,0x02,0xA4,0x95,0x00,0x22,0x48,0x21,0x02,0x64,0x9B,0x00,0x3C,0x78,0x21,0x02,0x27,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x15,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
func (_fggb *Bitmap )connComponentsBitmapsBB (_egffd *Bitmaps ,_fdf int )(_dedd *Boxes ,_beeg error ){const _gbgd ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";if _fdf !=4&&_fdf !=8{return nil ,_g .Error (_gbgd ,"\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 _egffd ==nil {return nil ,_g .Error (_gbgd ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if len (_egffd .Values )> 0{return nil ,_g .Error (_gbgd ,"\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 _fggb .Zero (){return &Boxes {},nil ;};var (_ecfe ,_fda ,_afaf ,_addf *Bitmap ;);_fggb .setPadBits (0);if _ecfe ,_beeg =_abf (nil ,_fggb );_beeg !=nil {return nil ,_g .Wrap (_beeg ,_gbgd ,"\u0062\u006d\u0031");};if _fda ,_beeg =_abf (nil ,_fggb );
_beeg !=nil {return nil ,_g .Wrap (_beeg ,_gbgd ,"\u0062\u006d\u0032");};_fgdf :=&_gf .Stack {};_fgdf .Aux =&_gf .Stack {};_dedd =&Boxes {};var (_agg ,_cfdc int ;_ebfa _bd .Point ;_dbedg bool ;_acbef *_bd .Rectangle ;);for {if _ebfa ,_dbedg ,_beeg =_ecfe .nextOnPixel (_agg ,_cfdc );
_beeg !=nil {return nil ,_g .Wrap (_beeg ,_gbgd ,"");};if !_dbedg {break ;};if _acbef ,_beeg =_bbee (_ecfe ,_fgdf ,_ebfa .X ,_ebfa .Y ,_fdf );_beeg !=nil {return nil ,_g .Wrap (_beeg ,_gbgd ,"");};if _beeg =_dedd .Add (_acbef );_beeg !=nil {return nil ,_g .Wrap (_beeg ,_gbgd ,"");
};if _afaf ,_beeg =_ecfe .clipRectangle (_acbef ,nil );_beeg !=nil {return nil ,_g .Wrap (_beeg ,_gbgd ,"\u0062\u006d\u0033");};if _addf ,_beeg =_fda .clipRectangle (_acbef ,nil );_beeg !=nil {return nil ,_g .Wrap (_beeg ,_gbgd ,"\u0062\u006d\u0034");};
if _ ,_beeg =_bffca (_afaf ,_afaf ,_addf );_beeg !=nil {return nil ,_g .Wrap (_beeg ,_gbgd ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");};if _beeg =_fda .RasterOperation (_acbef .Min .X ,_acbef .Min .Y ,_acbef .Dx (),_acbef .Dy (),PixSrcXorDst ,_afaf ,0,0);
_beeg !=nil {return nil ,_g .Wrap (_beeg ,_gbgd ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_egffd .AddBitmap (_afaf );_agg =_ebfa .X ;_cfdc =_ebfa .Y ;};_egffd .Boxes =*_dedd ;return _dedd ,nil ;};func (_bbae *Bitmaps )selectByIndexes (_gbce []int )(*Bitmaps ,error ){_dfbdd :=&Bitmaps {};
for _ ,_effc :=range _gbce {_ecggc ,_dgcbe :=_bbae .GetBitmap (_effc );if _dgcbe !=nil {return nil ,_g .Wrap (_dgcbe ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_dfbdd .AddBitmap (_ecggc );};return _dfbdd ,nil ;
};func _bddb (_ddae *Bitmap ,_dagff *Bitmap ,_eefg int )(_dgd error ){const _fecg ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_gceg :=_gdad (_ddae .Height ,_dagff .Height );_fgdcb :=_gdad (_ddae .RowStride ,_dagff .RowStride );
switch _eefg {case 4:_dgd =_agge (_ddae ,_dagff ,_gceg ,_fgdcb );case 8:_dgd =_ebgd (_ddae ,_dagff ,_gceg ,_fgdcb );default:return _g .Errorf (_fecg ,"\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",_eefg );
};if _dgd !=nil {return _g .Wrap (_dgd ,_fecg ,"");};return nil ;};func _cgbb (_cdd *Bitmap ,_aeadf *Bitmap ,_eaaf *Selection )(*Bitmap ,error ){var (_cfbg *Bitmap ;_fdgb error ;);_cdd ,_fdgb =_aadde (_cdd ,_aeadf ,_eaaf ,&_cfbg );if _fdgb !=nil {return nil ,_fdgb ;
};if _fdgb =_cdd .clearAll ();_fdgb !=nil {return nil ,_fdgb ;};var _aggg SelectionValue ;for _fgfgb :=0;_fgfgb < _eaaf .Height ;_fgfgb ++{for _caca :=0;_caca < _eaaf .Width ;_caca ++{_aggg =_eaaf .Data [_fgfgb ][_caca ];if _aggg ==SelHit {if _fdgb =_cdd .RasterOperation (_caca -_eaaf .Cx ,_fgfgb -_eaaf .Cy ,_aeadf .Width ,_aeadf .Height ,PixSrcOrDst ,_cfbg ,0,0);
_fdgb !=nil {return nil ,_fdgb ;};};};};return _cdd ,nil ;};func (_bgbae *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_bgbae .Width ,Height :_bgbae .Height ,RowStride :_bgbae .RowStride ,Color :_bgbae .Color ,Text :_bgbae .Text ,BitmapNumber :_bgbae .BitmapNumber ,Special :_bgbae .Special ,Data :make ([]byte ,len (_bgbae .Data ))};
};func (_dbgb *Bitmap )setTwoBytes (_affg int ,_adge uint16 )error {if _affg +1> len (_dbgb .Data )-1{return _g .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",_affg );
};_dbgb .Data [_affg ]=byte ((_adge &0xff00)>>8);_dbgb .Data [_affg +1]=byte (_adge &0xff);return nil ;};func (_deag *Bitmaps )SortByWidth (){_eace :=(*byWidth )(_deag );_ga .Sort (_eace )};func (_bebe *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _cffb ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";
if _bebe ==nil {return nil ,_g .Error (_cffb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_bebe .Values )-1{return nil ,_g .Errorf (_cffb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _bebe .Values [i ],nil ;};func TstISymbol (t *_bg .T ,scale ...int )*Bitmap {_feba ,_ceeed :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_e .NoError (t ,_ceeed );return TstGetScaledSymbol (t ,_feba ,scale ...);};func (_bdcf *Bitmap )Copy ()*Bitmap {_cabd :=make ([]byte ,len (_bdcf .Data ));
copy (_cabd ,_bdcf .Data );return &Bitmap {Width :_bdcf .Width ,Height :_bdcf .Height ,RowStride :_bdcf .RowStride ,Data :_cabd ,Color :_bdcf .Color ,Text :_bdcf .Text ,BitmapNumber :_bdcf .BitmapNumber ,Special :_bdcf .Special };};func _gcef (_cecc *Bitmap ,_dbfbe int )(*Bitmap ,error ){const _bde ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";
if _cecc ==nil {return nil ,_g .Error (_bde ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _dbfbe <=0{return nil ,_g .Error (_bde ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");
};if _dbfbe ==1{_adca ,_ccdb :=_abf (nil ,_cecc );if _ccdb !=nil {return nil ,_g .Wrap (_ccdb ,_bde ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _adca ,nil ;};_gcga ,_agbgd :=_dc (_cecc ,_dbfbe ,_dbfbe );if _agbgd !=nil {return nil ,_g .Wrap (_agbgd ,_bde ,"");
};return _gcga ,nil ;};func _ggfa (_cgcgf ,_dgaa *Bitmap ,_dedb *Selection )(*Bitmap ,error ){const _dgcc ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _cfcf ,_gfbg int ;if _dgaa ==nil {return nil ,_g .Error (_dgcc ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _dedb ==nil {return nil ,_g .Error (_dgcc ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_cfcf =_dedb .Width ;_gfbg =_dedb .Height ;if _cfcf ==0||_gfbg ==0{return nil ,_g .Error (_dgcc ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");
};if _cgcgf ==nil {return _dgaa .createTemplate (),nil ;};if _eaeg :=_cgcgf .resizeImageData (_dgaa );_eaeg !=nil {return nil ,_eaeg ;};return _cgcgf ,nil ;};func (_fbg *Bitmap )Zero ()bool {_geda :=_fbg .Width /8;_ggbd :=_fbg .Width &7;var _aafd byte ;
if _ggbd !=0{_aafd =byte (0xff<<uint (8-_ggbd ));};var _aga ,_cgab ,_edc int ;for _cgab =0;_cgab < _fbg .Height ;_cgab ++{_aga =_fbg .RowStride *_cgab ;for _edc =0;_edc < _geda ;_edc ,_aga =_edc +1,_aga +1{if _fbg .Data [_aga ]!=0{return false ;};};if _ggbd > 0{if _fbg .Data [_aga ]&_aafd !=0{return false ;
};};};return true ;};