2023-04-06 19:57:40 +00:00

665 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 (_gfg "encoding/binary";_c "github.com/stretchr/testify/require";_db "github.com/unidoc/unipdf/v3/common";_be "github.com/unidoc/unipdf/v3/internal/bitwise";_gc "github.com/unidoc/unipdf/v3/internal/imageutil";_a "github.com/unidoc/unipdf/v3/internal/jbig2/basic";
_f "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_ad "image";_d "math";_fb "sort";_gf "strings";_b "testing";);func _geaf (_fccc *Bitmap ,_facg ...MorphProcess )(_eefc *Bitmap ,_cgegf error ){const _adcb ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";
if _fccc ==nil {return nil ,_f .Error (_adcb ,"\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 (_facg )==0{return nil ,_f .Error (_adcb ,"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 _cgegf =_bgeg (_facg ...);
_cgegf !=nil {return nil ,_f .Wrap (_cgegf ,_adcb ,"");};var _cfcef ,_ffce ,_abbc int ;_eefc =_fccc .Copy ();for _ ,_adacf :=range _facg {switch _adacf .Operation {case MopDilation :_cfcef ,_ffce =_adacf .getWidthHeight ();_eefc ,_cgegf =DilateBrick (nil ,_eefc ,_cfcef ,_ffce );
if _cgegf !=nil {return nil ,_f .Wrap (_cgegf ,_adcb ,"");};case MopErosion :_cfcef ,_ffce =_adacf .getWidthHeight ();_eefc ,_cgegf =_gebd (nil ,_eefc ,_cfcef ,_ffce );if _cgegf !=nil {return nil ,_f .Wrap (_cgegf ,_adcb ,"");};case MopOpening :_cfcef ,_ffce =_adacf .getWidthHeight ();
_eefc ,_cgegf =_abdb (nil ,_eefc ,_cfcef ,_ffce );if _cgegf !=nil {return nil ,_f .Wrap (_cgegf ,_adcb ,"");};case MopClosing :_cfcef ,_ffce =_adacf .getWidthHeight ();_eefc ,_cgegf =_ddaea (nil ,_eefc ,_cfcef ,_ffce );if _cgegf !=nil {return nil ,_f .Wrap (_cgegf ,_adcb ,"");
};case MopRankBinaryReduction :_eefc ,_cgegf =_eba (_eefc ,_adacf .Arguments ...);if _cgegf !=nil {return nil ,_f .Wrap (_cgegf ,_adcb ,"");};case MopReplicativeBinaryExpansion :_eefc ,_cgegf =_gefd (_eefc ,_adacf .Arguments [0]);if _cgegf !=nil {return nil ,_f .Wrap (_cgegf ,_adcb ,"");
};case MopAddBorder :_abbc =_adacf .Arguments [0];_eefc ,_cgegf =_eefc .AddBorder (_abbc ,0);if _cgegf !=nil {return nil ,_f .Wrap (_cgegf ,_adcb ,"");};default:return nil ,_f .Error (_adcb ,"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 _abbc > 0{_eefc ,_cgegf =_eefc .RemoveBorder (_abbc );if _cgegf !=nil {return nil ,_f .Wrap (_cgegf ,_adcb ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _eefc ,nil ;};func _fgag ()[]int {_fffd :=make ([]int ,256);_fffd [0]=0;
_fffd [1]=7;var _adea int ;for _adea =2;_adea < 4;_adea ++{_fffd [_adea ]=_fffd [_adea -2]+6;};for _adea =4;_adea < 8;_adea ++{_fffd [_adea ]=_fffd [_adea -4]+5;};for _adea =8;_adea < 16;_adea ++{_fffd [_adea ]=_fffd [_adea -8]+4;};for _adea =16;_adea < 32;
_adea ++{_fffd [_adea ]=_fffd [_adea -16]+3;};for _adea =32;_adea < 64;_adea ++{_fffd [_adea ]=_fffd [_adea -32]+2;};for _adea =64;_adea < 128;_adea ++{_fffd [_adea ]=_fffd [_adea -64]+1;};for _adea =128;_adea < 256;_adea ++{_fffd [_adea ]=_fffd [_adea -128];
};return _fffd ;};func (_cebbb *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _cdbed ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _cebbb ==nil {return nil ,_f .Error (_cdbed ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if s ==nil {return nil ,_f .Error (_cdbed ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_egebg :=len (_cebbb .Values );_bffff :=&Bitmaps {Values :make ([]*Bitmap ,_egebg ),Boxes :make ([]*_ad .Rectangle ,_egebg )};
var (_cgec ,_ecgg *Bitmap ;_ddce *_ad .Rectangle ;_aded error ;);for _bbdd :=0;_bbdd < _egebg ;_bbdd ++{if _cgec ,_aded =_cebbb .GetBitmap (_bbdd );_aded !=nil {return nil ,_f .Wrap (_aded ,_cdbed ,"");};if _ddce ,_aded =_cebbb .GetBox (_bbdd );_aded !=nil {return nil ,_f .Wrap (_aded ,_cdbed ,"");
};if _ecgg ,_aded =s .clipRectangle (_ddce ,nil );_aded !=nil {return nil ,_f .Wrap (_aded ,_cdbed ,"");};if _ecgg ,_aded =_ecgg .And (_cgec );_aded !=nil {return nil ,_f .Wrap (_aded ,_cdbed ,"");};_bffff .Values [_bbdd ]=_ecgg ;_bffff .Boxes [_bbdd ]=_ddce ;
};return _bffff ,nil ;};func (_daaa *Bitmap )setPadBits (_ffcb int ){_agf :=8-_daaa .Width %8;if _agf ==8{return ;};_efa :=_daaa .Width /8;_eefa :=_ebaed [_agf ];if _ffcb ==0{_eefa ^=_eefa ;};var _gbc int ;for _ddd :=0;_ddd < _daaa .Height ;_ddd ++{_gbc =_ddd *_daaa .RowStride +_efa ;
if _ffcb ==0{_daaa .Data [_gbc ]&=_eefa ;}else {_daaa .Data [_gbc ]|=_eefa ;};};};func (_ddfg *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _gadbf ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";
if _bfbg :=_ddfg .validateIntSlice ();_bfbg !=nil {return nil ,_f .Wrap (_bfbg ,_gadbf ,"");};if _ddfg .IntSlice .Size ()==0{return nil ,_f .Error (_gadbf ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");
};_ddfg .SortByY ();var (_bbef []*ClassedPoints ;_gaaf int ;);_aggb :=-1;var _afdc *ClassedPoints ;for _fbed :=0;_fbed < len (_ddfg .IntSlice );_fbed ++{_gaaf =int (_ddfg .YAtIndex (_fbed ));if _gaaf !=_aggb {_afdc =&ClassedPoints {Points :_ddfg .Points };
_aggb =_gaaf ;_bbef =append (_bbef ,_afdc );};_afdc .IntSlice =append (_afdc .IntSlice ,_ddfg .IntSlice [_fbed ]);};for _ ,_afded :=range _bbef {_afded .SortByX ();};return _bbef ,nil ;};type Boxes []*_ad .Rectangle ;func (_eagg *ClassedPoints )xSortFunction ()func (_cdff int ,_bcgcf int )bool {return func (_dadg ,_gdda int )bool {return _eagg .XAtIndex (_dadg )< _eagg .XAtIndex (_gdda )};
};func (_aebe *Bitmap )GetByte (index int )(byte ,error ){if index > len (_aebe .Data )-1||index < 0{return 0,_f .Errorf ("\u0047e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x:\u0020\u0025\u0064\u0020\u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006eg\u0065",index );
};return _aebe .Data [index ],nil ;};func (_daag *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _feaf ="\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 >=_daag .IntSlice .Size (){return 0,_f .Errorf (_feaf ,"\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 (_daag .YAtIndex (i )),nil ;};func (_dcgda *Bitmaps )AddBitmap (bm *Bitmap ){_dcgda .Values =append (_dcgda .Values ,bm )};func (_dfc *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _dfc .addBorderGeneral (left ,right ,top ,bot ,val );
};func _efe ()[]int {_fgcfe :=make ([]int ,256);for _gabge :=0;_gabge <=0xff;_gabge ++{_bgad :=byte (_gabge );_fgcfe [_bgad ]=int (_bgad &0x1)+(int (_bgad >>1)&0x1)+(int (_bgad >>2)&0x1)+(int (_bgad >>3)&0x1)+(int (_bgad >>4)&0x1)+(int (_bgad >>5)&0x1)+(int (_bgad >>6)&0x1)+(int (_bgad >>7)&0x1);
};return _fgcfe ;};var MorphBC BoundaryCondition ;func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_cddd :=_eggg (h ,w ,"");_cddd .setOrigin (cy ,cx );var _ccdb ,_fgdb int ;for _ccdb =0;_ccdb < h ;_ccdb ++{for _fgdb =0;_fgdb < w ;
_fgdb ++{_cddd .Data [_ccdb ][_fgdb ]=tp ;};};return _cddd ;};func (_cbfb *BitmapsArray )GetBox (i int )(*_ad .Rectangle ,error ){const _cefb ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _cbfb ==nil {return nil ,_f .Error (_cefb ,"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 (_cbfb .Boxes )-1{return nil ,_f .Errorf (_cefb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _cbfb .Boxes [i ],nil ;};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _adfb (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};func _fe ()(_fae [256]uint16 ){for _ag :=0;_ag < 256;_ag ++{if _ag &0x01!=0{_fae [_ag ]|=0x3;};if _ag &0x02!=0{_fae [_ag ]|=0xc;};if _ag &0x04!=0{_fae [_ag ]|=0x30;};if _ag &0x08!=0{_fae [_ag ]|=0xc0;};if _ag &0x10!=0{_fae [_ag ]|=0x300;};if _ag &0x20!=0{_fae [_ag ]|=0xc00;
};if _ag &0x40!=0{_fae [_ag ]|=0x3000;};if _ag &0x80!=0{_fae [_ag ]|=0xc000;};};return _fae ;};func init (){for _bbaf :=0;_bbaf < 256;_bbaf ++{_deac [_bbaf ]=uint8 (_bbaf &0x1)+(uint8 (_bbaf >>1)&0x1)+(uint8 (_bbaf >>2)&0x1)+(uint8 (_bbaf >>3)&0x1)+(uint8 (_bbaf >>4)&0x1)+(uint8 (_bbaf >>5)&0x1)+(uint8 (_bbaf >>6)&0x1)+(uint8 (_bbaf >>7)&0x1);
};};func (_acgfb Points )Size ()int {return len (_acgfb )};type Points []Point ;func _afc (_gccc int )int {if _gccc < 0{return -_gccc ;};return _gccc ;};func (_bgadg *Points )AddPoint (x ,y float32 ){*_bgadg =append (*_bgadg ,Point {x ,y })};func _fbc (_gcde ,_ffed *Bitmap ,_gbdff ,_cafe int )(_ecdg error ){const _bbga ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";
var (_gffb ,_geda ,_adfd ,_ecfc int ;_cefa ,_ecfcc ,_eafce ,_bdff ,_facdd ,_cfgf ,_fafg byte ;);for _gffb =0;_gffb < _gbdff ;_gffb ++{_adfd =_gffb *_gcde .RowStride ;_ecfc =_gffb *_ffed .RowStride ;for _geda =0;_geda < _cafe ;_geda ++{_cefa ,_ecdg =_gcde .GetByte (_adfd +_geda );
if _ecdg !=nil {return _f .Wrap (_ecdg ,_bbga ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_ecfcc ,_ecdg =_ffed .GetByte (_ecfc +_geda );if _ecdg !=nil {return _f .Wrap (_ecdg ,_bbga ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");
};if _gffb > 0{_eafce ,_ecdg =_gcde .GetByte (_adfd -_gcde .RowStride +_geda );if _ecdg !=nil {return _f .Wrap (_ecdg ,_bbga ,"\u0069\u0020\u003e \u0030");};_cefa |=_eafce ;};if _geda > 0{_bdff ,_ecdg =_gcde .GetByte (_adfd +_geda -1);if _ecdg !=nil {return _f .Wrap (_ecdg ,_bbga ,"\u006a\u0020\u003e \u0030");
};_cefa |=_bdff <<7;};_cefa &=_ecfcc ;if _cefa ==0||(^_cefa )==0{if _ecdg =_gcde .SetByte (_adfd +_geda ,_cefa );_ecdg !=nil {return _f .Wrap (_ecdg ,_bbga ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");
};continue ;};for {_fafg =_cefa ;_cefa =(_cefa |(_cefa >>1)|(_cefa <<1))&_ecfcc ;if (_cefa ^_fafg )==0{if _ecdg =_gcde .SetByte (_adfd +_geda ,_cefa );_ecdg !=nil {return _f .Wrap (_ecdg ,_bbga ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
};break ;};};};};for _gffb =_gbdff -1;_gffb >=0;_gffb --{_adfd =_gffb *_gcde .RowStride ;_ecfc =_gffb *_ffed .RowStride ;for _geda =_cafe -1;_geda >=0;_geda --{if _cefa ,_ecdg =_gcde .GetByte (_adfd +_geda );_ecdg !=nil {return _f .Wrap (_ecdg ,_bbga ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");
};if _ecfcc ,_ecdg =_ffed .GetByte (_ecfc +_geda );_ecdg !=nil {return _f .Wrap (_ecdg ,_bbga ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _gffb < _gbdff -1{if _facdd ,_ecdg =_gcde .GetByte (_adfd +_gcde .RowStride +_geda );
_ecdg !=nil {return _f .Wrap (_ecdg ,_bbga ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_cefa |=_facdd ;};if _geda < _cafe -1{if _cfgf ,_ecdg =_gcde .GetByte (_adfd +_geda +1);_ecdg !=nil {return _f .Wrap (_ecdg ,_bbga ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");
};_cefa |=_cfgf >>7;};_cefa &=_ecfcc ;if _cefa ==0||(^_cefa )==0{if _ecdg =_gcde .SetByte (_adfd +_geda ,_cefa );_ecdg !=nil {return _f .Wrap (_ecdg ,_bbga ,"\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 {_fafg =_cefa ;_cefa =(_cefa |(_cefa >>1)|(_cefa <<1))&_ecfcc ;if (_cefa ^_fafg )==0{if _ecdg =_gcde .SetByte (_adfd +_geda ,_cefa );_ecdg !=nil {return _f .Wrap (_ecdg ,_bbga ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
};break ;};};};};return nil ;};func (_fbb *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_dfga *Boxes ,_gaa error ){const _dga ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";
if _fbb ==nil {return nil ,_f .Error (_dga ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_fbb )==0{return _fbb ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_f .Errorf (_dga ,"\u0069\u006e\u0076al\u0069\u0064\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );
};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE :default:return nil ,_f .Errorf (_dga ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
};_fdbg :=_fbb .makeSizeIndicator (width ,height ,tp ,relation );_dbee ,_gaa :=_fbb .selectWithIndicator (_fdbg );if _gaa !=nil {return nil ,_f .Wrap (_gaa ,_dga ,"");};return _dbee ,nil ;};func (_adeb *Bitmap )GetByteIndex (x ,y int )int {return y *_adeb .RowStride +(x >>3)};
func (_eebbg *Bitmap )setEightFullBytes (_ebdgf int ,_bdee uint64 )error {if _ebdgf +7> len (_eebbg .Data )-1{return _f .Error ("\u0073\u0065\u0074\u0045\u0069\u0067\u0068\u0074\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
};_eebbg .Data [_ebdgf ]=byte ((_bdee &0xff00000000000000)>>56);_eebbg .Data [_ebdgf +1]=byte ((_bdee &0xff000000000000)>>48);_eebbg .Data [_ebdgf +2]=byte ((_bdee &0xff0000000000)>>40);_eebbg .Data [_ebdgf +3]=byte ((_bdee &0xff00000000)>>32);_eebbg .Data [_ebdgf +4]=byte ((_bdee &0xff000000)>>24);
_eebbg .Data [_ebdgf +5]=byte ((_bdee &0xff0000)>>16);_eebbg .Data [_ebdgf +6]=byte ((_bdee &0xff00)>>8);_eebbg .Data [_ebdgf +7]=byte (_bdee &0xff);return nil ;};func (_gbgd *ClassedPoints )SortByX (){_gbgd ._gcff =_gbgd .xSortFunction ();_fb .Sort (_gbgd )};
func (_bdea *Bitmap )Copy ()*Bitmap {_aef :=make ([]byte ,len (_bdea .Data ));copy (_aef ,_bdea .Data );return &Bitmap {Width :_bdea .Width ,Height :_bdea .Height ,RowStride :_bdea .RowStride ,Data :_aef ,Color :_bdea .Color ,Text :_bdea .Text ,BitmapNumber :_bdea .BitmapNumber ,Special :_bdea .Special };
};func (_cfca *Bitmaps )SortByWidth (){_bedb :=(*byWidth )(_cfca );_fb .Sort (_bedb )};func _dacg (_babbf *Bitmap ,_bcbeb *Bitmap ,_deed *Selection )(*Bitmap ,error ){var (_eeca *Bitmap ;_dcae error ;);_babbf ,_dcae =_fge (_babbf ,_bcbeb ,_deed ,&_eeca );
if _dcae !=nil {return nil ,_dcae ;};if _dcae =_babbf .clearAll ();_dcae !=nil {return nil ,_dcae ;};var _gaagf SelectionValue ;for _gdfe :=0;_gdfe < _deed .Height ;_gdfe ++{for _gadc :=0;_gadc < _deed .Width ;_gadc ++{_gaagf =_deed .Data [_gdfe ][_gadc ];
if _gaagf ==SelHit {if _dcae =_babbf .RasterOperation (_gadc -_deed .Cx ,_gdfe -_deed .Cy ,_bcbeb .Width ,_bcbeb .Height ,PixSrcOrDst ,_eeca ,0,0);_dcae !=nil {return nil ,_dcae ;};};};};return _babbf ,nil ;};func _aaaa (_bgab ,_fgde *Bitmap ,_bdgd ,_abce int )(*Bitmap ,error ){const _gbbf ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";
if _fgde ==nil {_db .Log .Debug ("\u0064\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063k\u0020\u0073\u006f\u0075\u0072\u0063\u0065 \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");return nil ,_f .Error (_gbbf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _bdgd < 1||_abce < 1{return nil ,_f .Error (_gbbf ,"\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 _bdgd ==1&&_abce ==1{_gbfc ,_bdbga :=_bbdb (_bgab ,_fgde );if _bdbga !=nil {return nil ,_f .Wrap (_bdbga ,_gbbf ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _gbfc ,nil ;};if _bdgd ==1||_abce ==1{_fgbag :=SelCreateBrick (_abce ,_bdgd ,_abce /2,_bdgd /2,SelHit );_abgd ,_gedb :=_dacg (_bgab ,_fgde ,_fgbag );if _gedb !=nil {return nil ,_f .Wrap (_gedb ,_gbbf ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _abgd ,nil ;};_geb :=SelCreateBrick (1,_bdgd ,0,_bdgd /2,SelHit );_bfff :=SelCreateBrick (_abce ,1,_abce /2,0,SelHit );_faaf ,_dgag :=_dacg (nil ,_fgde ,_geb );if _dgag !=nil {return nil ,_f .Wrap (_dgag ,_gbbf ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_bgab ,_dgag =_dacg (_bgab ,_faaf ,_bfff );if _dgag !=nil {return nil ,_f .Wrap (_dgag ,_gbbf ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _bgab ,nil ;};func (_cdfe *Bitmap )And (s *Bitmap )(_ccb *Bitmap ,_efb error ){const _adbc ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";
if _cdfe ==nil {return nil ,_f .Error (_adbc ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");};if s ==nil {return nil ,_f .Error (_adbc ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");
};if !_cdfe .SizesEqual (s ){_db .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",_adbc );
};if _ccb ,_efb =_bbdb (_ccb ,_cdfe );_efb !=nil {return nil ,_f .Wrap (_efb ,_adbc ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _efb =_ccb .RasterOperation (0,0,_ccb .Width ,_ccb .Height ,PixSrcAndDst ,s ,0,0);
_efb !=nil {return nil ,_f .Wrap (_efb ,_adbc ,"");};return _ccb ,nil ;};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _bbdb (d ,s )};func _bbdb (_bffdb ,_bbbc *Bitmap )(*Bitmap ,error ){if _bbbc ==nil {return nil ,_f .Error ("\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _bbbc ==_bffdb {return _bffdb ,nil ;};if _bffdb ==nil {_bffdb =_bbbc .createTemplate ();copy (_bffdb .Data ,_bbbc .Data );return _bffdb ,nil ;};_bdf :=_bffdb .resizeImageData (_bbbc );if _bdf !=nil {return nil ,_f .Wrap (_bdf ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
};_bffdb .Text =_bbbc .Text ;copy (_bffdb .Data ,_bbbc .Data );return _bffdb ,nil ;};func _abdb (_edba ,_ffgd *Bitmap ,_cbccf ,_bfebc int )(*Bitmap ,error ){const _ebeb ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _ffgd ==nil {return nil ,_f .Error (_ebeb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _cbccf < 1&&_bfebc < 1{return nil ,_f .Error (_ebeb ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _cbccf ==1&&_bfebc ==1{return _ffgd .Copy (),nil ;};if _cbccf ==1||_bfebc ==1{var _bcae error ;
_adbf :=SelCreateBrick (_bfebc ,_cbccf ,_bfebc /2,_cbccf /2,SelHit );_edba ,_bcae =_dbfcg (_edba ,_ffgd ,_adbf );if _bcae !=nil {return nil ,_f .Wrap (_bcae ,_ebeb ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _edba ,nil ;};_bbdba :=SelCreateBrick (1,_cbccf ,0,_cbccf /2,SelHit );_ffff :=SelCreateBrick (_bfebc ,1,_bfebc /2,0,SelHit );_fcb ,_abbf :=_fage (nil ,_ffgd ,_bbdba );if _abbf !=nil {return nil ,_f .Wrap (_abbf ,_ebeb ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_edba ,_abbf =_fage (_edba ,_fcb ,_ffff );if _abbf !=nil {return nil ,_f .Wrap (_abbf ,_ebeb ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_abbf =_dacg (_fcb ,_edba ,_bbdba );if _abbf !=nil {return nil ,_f .Wrap (_abbf ,_ebeb ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_ ,_abbf =_dacg (_edba ,_fcb ,_ffff );if _abbf !=nil {return nil ,_f .Wrap (_abbf ,_ebeb ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _edba ,nil ;};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _gdee ,_eegf int ;
_cdae :=src .RowStride -1;if x < 0{_eegf =-x ;x =0;}else if x +src .Width > dst .Width {_cdae -=src .Width +x -dst .Width ;};if y < 0{_gdee =-y ;y =0;_eegf +=src .RowStride ;_cdae +=src .RowStride ;}else if y +src .Height > dst .Height {_gdee =src .Height +y -dst .Height ;
};var (_dabc int ;_bdef error ;);_aegd :=x &0x07;_fbggg :=8-_aegd ;_bbgg :=src .Width &0x07;_ebaba :=_fbggg -_bbgg ;_ace :=_fbggg &0x07!=0;_fcgb :=src .Width <=((_cdae -_eegf )<<3)+_fbggg ;_edff :=dst .GetByteIndex (x ,y );_cebfe :=_gdee +dst .Height ;
if src .Height > _cebfe {_dabc =_cebfe ;}else {_dabc =src .Height ;};switch {case !_ace :_bdef =_dffa (src ,dst ,_gdee ,_dabc ,_edff ,_eegf ,_cdae ,op );case _fcgb :_bdef =_cged (src ,dst ,_gdee ,_dabc ,_edff ,_eegf ,_cdae ,_ebaba ,_aegd ,_fbggg ,op );
default:_bdef =_agfe (src ,dst ,_gdee ,_dabc ,_edff ,_eegf ,_cdae ,_ebaba ,_aegd ,_fbggg ,op ,_bbgg );};return _bdef ;};func (_dged *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_cacb *Bitmaps ,_edac *Boxes ,_gcee error ){const _gecb ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";
if _dged ==nil {return nil ,nil ,_f .Error (_gecb ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0042\u0069\u0074\u006da\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064\u002e");};switch components {case ComponentConn ,ComponentCharacters ,ComponentWords :default:return nil ,nil ,_f .Error (_gecb ,"\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 _dged .Zero (){_edac =&Boxes {};_cacb =&Bitmaps {};return _cacb ,_edac ,nil ;};switch components {case ComponentConn :_cacb =&Bitmaps {};if _edac ,_gcee =_dged .ConnComponents (_cacb ,8);_gcee !=nil {return nil ,nil ,_f .Wrap (_gcee ,_gecb ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};case ComponentCharacters :_fccb ,_dfcb :=MorphSequence (_dged ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _dfcb !=nil {return nil ,nil ,_f .Wrap (_dfcb ,_gecb ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _db .Log .IsLogLevel (_db .LogLevelTrace ){_db .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",_fccb .String ());
};_agbf :=&Bitmaps {};_edac ,_dfcb =_fccb .ConnComponents (_agbf ,8);if _dfcb !=nil {return nil ,nil ,_f .Wrap (_dfcb ,_gecb ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _db .Log .IsLogLevel (_db .LogLevelTrace ){_db .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",_agbf .String ());
};if _cacb ,_dfcb =_agbf .ClipToBitmap (_dged );_dfcb !=nil {return nil ,nil ,_f .Wrap (_dfcb ,_gecb ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_gdefg :=1;
var _ccde *Bitmap ;switch {case _dged .XResolution <=200:_ccde =_dged ;case _dged .XResolution <=400:_gdefg =2;_ccde ,_gcee =_eba (_dged ,1,0,0,0);if _gcee !=nil {return nil ,nil ,_f .Wrap (_gcee ,_gecb ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
};default:_gdefg =4;_ccde ,_gcee =_eba (_dged ,1,1,0,0);if _gcee !=nil {return nil ,nil ,_f .Wrap (_gcee ,_gecb ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
};};_cgeg ,_ ,_gaf :=_feda (_ccde );if _gaf !=nil {return nil ,nil ,_f .Wrap (_gaf ,_gecb ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_agcf ,_gaf :=_gefd (_cgeg ,_gdefg );if _gaf !=nil {return nil ,nil ,_f .Wrap (_gaf ,_gecb ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
};_aegf :=&Bitmaps {};if _edac ,_gaf =_agcf .ConnComponents (_aegf ,4);_gaf !=nil {return nil ,nil ,_f .Wrap (_gaf ,_gecb ,"\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 _cacb ,_gaf =_aegf .ClipToBitmap (_dged );_gaf !=nil {return nil ,nil ,_f .Wrap (_gaf ,_gecb ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_cacb ,_gcee =_cacb .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
if _gcee !=nil {return nil ,nil ,_f .Wrap (_gcee ,_gecb ,"");};_edac ,_gcee =_edac .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _gcee !=nil {return nil ,nil ,_f .Wrap (_gcee ,_gecb ,"");};return _cacb ,_edac ,nil ;};func (_bcede Points )GetIntY (i int )(int ,error ){if i >=len (_bcede ){return 0,_f .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0059","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return int (_bcede [i ].Y ),nil ;};func (_gcgf *Boxes )makeSizeIndicator (_cbec ,_dfd int ,_adgf LocationFilter ,_cffd SizeComparison )*_a .NumSlice {_fbde :=&_a .NumSlice {};var _dcef ,_bfdc ,_ddgb int ;for _ ,_gddc :=range *_gcgf {_dcef =0;_bfdc ,_ddgb =_gddc .Dx (),_gddc .Dy ();
switch _adgf {case LocSelectWidth :if (_cffd ==SizeSelectIfLT &&_bfdc < _cbec )||(_cffd ==SizeSelectIfGT &&_bfdc > _cbec )||(_cffd ==SizeSelectIfLTE &&_bfdc <=_cbec )||(_cffd ==SizeSelectIfGTE &&_bfdc >=_cbec ){_dcef =1;};case LocSelectHeight :if (_cffd ==SizeSelectIfLT &&_ddgb < _dfd )||(_cffd ==SizeSelectIfGT &&_ddgb > _dfd )||(_cffd ==SizeSelectIfLTE &&_ddgb <=_dfd )||(_cffd ==SizeSelectIfGTE &&_ddgb >=_dfd ){_dcef =1;
};case LocSelectIfEither :if (_cffd ==SizeSelectIfLT &&(_ddgb < _dfd ||_bfdc < _cbec ))||(_cffd ==SizeSelectIfGT &&(_ddgb > _dfd ||_bfdc > _cbec ))||(_cffd ==SizeSelectIfLTE &&(_ddgb <=_dfd ||_bfdc <=_cbec ))||(_cffd ==SizeSelectIfGTE &&(_ddgb >=_dfd ||_bfdc >=_cbec )){_dcef =1;
};case LocSelectIfBoth :if (_cffd ==SizeSelectIfLT &&(_ddgb < _dfd &&_bfdc < _cbec ))||(_cffd ==SizeSelectIfGT &&(_ddgb > _dfd &&_bfdc > _cbec ))||(_cffd ==SizeSelectIfLTE &&(_ddgb <=_dfd &&_bfdc <=_cbec ))||(_cffd ==SizeSelectIfGTE &&(_ddgb >=_dfd &&_bfdc >=_cbec )){_dcef =1;
};};_fbde .AddInt (_dcef );};return _fbde ;};func _fge (_bcgf *Bitmap ,_gddgb *Bitmap ,_gagac *Selection ,_fece **Bitmap )(*Bitmap ,error ){const _adaac ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";
if _gddgb ==nil {return nil ,_f .Error (_adaac ,"\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 _gagac ==nil {return nil ,_f .Error (_adaac ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");
};_eeae ,_fdba :=_gagac .Height ,_gagac .Width ;if _eeae ==0||_fdba ==0{return nil ,_f .Error (_adaac ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");};if _bcgf ==nil {_bcgf =_gddgb .createTemplate ();
*_fece =_gddgb ;return _bcgf ,nil ;};_bcgf .Width =_gddgb .Width ;_bcgf .Height =_gddgb .Height ;_bcgf .RowStride =_gddgb .RowStride ;_bcgf .Color =_gddgb .Color ;_bcgf .Data =make ([]byte ,_gddgb .RowStride *_gddgb .Height );if _bcgf ==_gddgb {*_fece =_gddgb .Copy ();
}else {*_fece =_gddgb ;};return _bcgf ,nil ;};func (_dfdec *ClassedPoints )Less (i ,j int )bool {return _dfdec ._gcff (i ,j )};type SizeComparison int ;const (Vanilla Color =iota ;Chocolate ;);func TstDSymbol (t *_b .T ,scale ...int )*Bitmap {_bfbgf ,_aece :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});
_c .NoError (t ,_aece );return TstGetScaledSymbol (t ,_bfbgf ,scale ...);};func ClipBoxToRectangle (box *_ad .Rectangle ,wi ,hi int )(_afd *_ad .Rectangle ,_affc error ){const _dcd ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,_f .Error (_dcd ,"\u0027\u0062\u006f\u0078\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if box .Min .X >=wi ||box .Min .Y >=hi ||box .Max .X <=0||box .Max .Y <=0{return nil ,_f .Error (_dcd ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");
};_abfe :=*box ;_afd =&_abfe ;if _afd .Min .X < 0{_afd .Max .X +=_afd .Min .X ;_afd .Min .X =0;};if _afd .Min .Y < 0{_afd .Max .Y +=_afd .Min .Y ;_afd .Min .Y =0;};if _afd .Max .X > wi {_afd .Max .X =wi ;};if _afd .Max .Y > hi {_afd .Max .Y =hi ;};return _afd ,nil ;
};func _cabd (_dade *Bitmap ,_eaege ,_gcad ,_aeda ,_gaec int ,_eee RasterOperator ,_gcdfe *Bitmap ,_ecg ,_dedbe int )error {var (_cfagg bool ;_ced bool ;_dcab byte ;_eaga int ;_ggfcc int ;_cfcb int ;_dfbc int ;_cgg bool ;_cbfc int ;_gdfdd int ;_abfc int ;
_degfa bool ;_gadd byte ;_cgfaa int ;_bbag int ;_aebf int ;_bgbd byte ;_bfae int ;_fcge int ;_caab uint ;_cafb uint ;_fdgc byte ;_gcfa shift ;_abcf bool ;_abbcg bool ;_bebc ,_gefc int ;);if _ecg &7!=0{_fcge =8-(_ecg &7);};if _eaege &7!=0{_ggfcc =8-(_eaege &7);
};if _fcge ==0&&_ggfcc ==0{_fdgc =_ebaed [0];}else {if _ggfcc > _fcge {_caab =uint (_ggfcc -_fcge );}else {_caab =uint (8-(_fcge -_ggfcc ));};_cafb =8-_caab ;_fdgc =_ebaed [_caab ];};if (_eaege &7)!=0{_cfagg =true ;_eaga =8-(_eaege &7);_dcab =_ebaed [_eaga ];
_cfcb =_dade .RowStride *_gcad +(_eaege >>3);_dfbc =_gcdfe .RowStride *_dedbe +(_ecg >>3);_bfae =8-(_ecg &7);if _eaga > _bfae {_gcfa =_ddcg ;if _aeda >=_fcge {_abcf =true ;};}else {_gcfa =_cdabe ;};};if _aeda < _eaga {_ced =true ;_dcab &=_ggge [8-_eaga +_aeda ];
};if !_ced {_cbfc =(_aeda -_eaga )>>3;if _cbfc !=0{_cgg =true ;_gdfdd =_dade .RowStride *_gcad +((_eaege +_ggfcc )>>3);_abfc =_gcdfe .RowStride *_dedbe +((_ecg +_ggfcc )>>3);};};_cgfaa =(_eaege +_aeda )&7;if !(_ced ||_cgfaa ==0){_degfa =true ;_gadd =_ggge [_cgfaa ];
_bbag =_dade .RowStride *_gcad +((_eaege +_ggfcc )>>3)+_cbfc ;_aebf =_gcdfe .RowStride *_dedbe +((_ecg +_ggfcc )>>3)+_cbfc ;if _cgfaa > int (_cafb ){_abbcg =true ;};};switch _eee {case PixSrc :if _cfagg {for _bebc =0;_bebc < _gaec ;_bebc ++{if _gcfa ==_ddcg {_bgbd =_gcdfe .Data [_dfbc ]<<_caab ;
if _abcf {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_dfbc +1]>>_cafb ,_fdgc );};}else {_bgbd =_gcdfe .Data [_dfbc ]>>_cafb ;};_dade .Data [_cfcb ]=_cccbe (_dade .Data [_cfcb ],_bgbd ,_dcab );_cfcb +=_dade .RowStride ;_dfbc +=_gcdfe .RowStride ;};};if _cgg {for _bebc =0;
_bebc < _gaec ;_bebc ++{for _gefc =0;_gefc < _cbfc ;_gefc ++{_bgbd =_cccbe (_gcdfe .Data [_abfc +_gefc ]<<_caab ,_gcdfe .Data [_abfc +_gefc +1]>>_cafb ,_fdgc );_dade .Data [_gdfdd +_gefc ]=_bgbd ;};_gdfdd +=_dade .RowStride ;_abfc +=_gcdfe .RowStride ;
};};if _degfa {for _bebc =0;_bebc < _gaec ;_bebc ++{_bgbd =_gcdfe .Data [_aebf ]<<_caab ;if _abbcg {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_aebf +1]>>_cafb ,_fdgc );};_dade .Data [_bbag ]=_cccbe (_dade .Data [_bbag ],_bgbd ,_gadd );_bbag +=_dade .RowStride ;
_aebf +=_gcdfe .RowStride ;};};case PixNotSrc :if _cfagg {for _bebc =0;_bebc < _gaec ;_bebc ++{if _gcfa ==_ddcg {_bgbd =_gcdfe .Data [_dfbc ]<<_caab ;if _abcf {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_dfbc +1]>>_cafb ,_fdgc );};}else {_bgbd =_gcdfe .Data [_dfbc ]>>_cafb ;
};_dade .Data [_cfcb ]=_cccbe (_dade .Data [_cfcb ],^_bgbd ,_dcab );_cfcb +=_dade .RowStride ;_dfbc +=_gcdfe .RowStride ;};};if _cgg {for _bebc =0;_bebc < _gaec ;_bebc ++{for _gefc =0;_gefc < _cbfc ;_gefc ++{_bgbd =_cccbe (_gcdfe .Data [_abfc +_gefc ]<<_caab ,_gcdfe .Data [_abfc +_gefc +1]>>_cafb ,_fdgc );
_dade .Data [_gdfdd +_gefc ]=^_bgbd ;};_gdfdd +=_dade .RowStride ;_abfc +=_gcdfe .RowStride ;};};if _degfa {for _bebc =0;_bebc < _gaec ;_bebc ++{_bgbd =_gcdfe .Data [_aebf ]<<_caab ;if _abbcg {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_aebf +1]>>_cafb ,_fdgc );
};_dade .Data [_bbag ]=_cccbe (_dade .Data [_bbag ],^_bgbd ,_gadd );_bbag +=_dade .RowStride ;_aebf +=_gcdfe .RowStride ;};};case PixSrcOrDst :if _cfagg {for _bebc =0;_bebc < _gaec ;_bebc ++{if _gcfa ==_ddcg {_bgbd =_gcdfe .Data [_dfbc ]<<_caab ;if _abcf {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_dfbc +1]>>_cafb ,_fdgc );
};}else {_bgbd =_gcdfe .Data [_dfbc ]>>_cafb ;};_dade .Data [_cfcb ]=_cccbe (_dade .Data [_cfcb ],_bgbd |_dade .Data [_cfcb ],_dcab );_cfcb +=_dade .RowStride ;_dfbc +=_gcdfe .RowStride ;};};if _cgg {for _bebc =0;_bebc < _gaec ;_bebc ++{for _gefc =0;_gefc < _cbfc ;
_gefc ++{_bgbd =_cccbe (_gcdfe .Data [_abfc +_gefc ]<<_caab ,_gcdfe .Data [_abfc +_gefc +1]>>_cafb ,_fdgc );_dade .Data [_gdfdd +_gefc ]|=_bgbd ;};_gdfdd +=_dade .RowStride ;_abfc +=_gcdfe .RowStride ;};};if _degfa {for _bebc =0;_bebc < _gaec ;_bebc ++{_bgbd =_gcdfe .Data [_aebf ]<<_caab ;
if _abbcg {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_aebf +1]>>_cafb ,_fdgc );};_dade .Data [_bbag ]=_cccbe (_dade .Data [_bbag ],_bgbd |_dade .Data [_bbag ],_gadd );_bbag +=_dade .RowStride ;_aebf +=_gcdfe .RowStride ;};};case PixSrcAndDst :if _cfagg {for _bebc =0;
_bebc < _gaec ;_bebc ++{if _gcfa ==_ddcg {_bgbd =_gcdfe .Data [_dfbc ]<<_caab ;if _abcf {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_dfbc +1]>>_cafb ,_fdgc );};}else {_bgbd =_gcdfe .Data [_dfbc ]>>_cafb ;};_dade .Data [_cfcb ]=_cccbe (_dade .Data [_cfcb ],_bgbd &_dade .Data [_cfcb ],_dcab );
_cfcb +=_dade .RowStride ;_dfbc +=_gcdfe .RowStride ;};};if _cgg {for _bebc =0;_bebc < _gaec ;_bebc ++{for _gefc =0;_gefc < _cbfc ;_gefc ++{_bgbd =_cccbe (_gcdfe .Data [_abfc +_gefc ]<<_caab ,_gcdfe .Data [_abfc +_gefc +1]>>_cafb ,_fdgc );_dade .Data [_gdfdd +_gefc ]&=_bgbd ;
};_gdfdd +=_dade .RowStride ;_abfc +=_gcdfe .RowStride ;};};if _degfa {for _bebc =0;_bebc < _gaec ;_bebc ++{_bgbd =_gcdfe .Data [_aebf ]<<_caab ;if _abbcg {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_aebf +1]>>_cafb ,_fdgc );};_dade .Data [_bbag ]=_cccbe (_dade .Data [_bbag ],_bgbd &_dade .Data [_bbag ],_gadd );
_bbag +=_dade .RowStride ;_aebf +=_gcdfe .RowStride ;};};case PixSrcXorDst :if _cfagg {for _bebc =0;_bebc < _gaec ;_bebc ++{if _gcfa ==_ddcg {_bgbd =_gcdfe .Data [_dfbc ]<<_caab ;if _abcf {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_dfbc +1]>>_cafb ,_fdgc );};
}else {_bgbd =_gcdfe .Data [_dfbc ]>>_cafb ;};_dade .Data [_cfcb ]=_cccbe (_dade .Data [_cfcb ],_bgbd ^_dade .Data [_cfcb ],_dcab );_cfcb +=_dade .RowStride ;_dfbc +=_gcdfe .RowStride ;};};if _cgg {for _bebc =0;_bebc < _gaec ;_bebc ++{for _gefc =0;_gefc < _cbfc ;
_gefc ++{_bgbd =_cccbe (_gcdfe .Data [_abfc +_gefc ]<<_caab ,_gcdfe .Data [_abfc +_gefc +1]>>_cafb ,_fdgc );_dade .Data [_gdfdd +_gefc ]^=_bgbd ;};_gdfdd +=_dade .RowStride ;_abfc +=_gcdfe .RowStride ;};};if _degfa {for _bebc =0;_bebc < _gaec ;_bebc ++{_bgbd =_gcdfe .Data [_aebf ]<<_caab ;
if _abbcg {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_aebf +1]>>_cafb ,_fdgc );};_dade .Data [_bbag ]=_cccbe (_dade .Data [_bbag ],_bgbd ^_dade .Data [_bbag ],_gadd );_bbag +=_dade .RowStride ;_aebf +=_gcdfe .RowStride ;};};case PixNotSrcOrDst :if _cfagg {for _bebc =0;
_bebc < _gaec ;_bebc ++{if _gcfa ==_ddcg {_bgbd =_gcdfe .Data [_dfbc ]<<_caab ;if _abcf {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_dfbc +1]>>_cafb ,_fdgc );};}else {_bgbd =_gcdfe .Data [_dfbc ]>>_cafb ;};_dade .Data [_cfcb ]=_cccbe (_dade .Data [_cfcb ],^_bgbd |_dade .Data [_cfcb ],_dcab );
_cfcb +=_dade .RowStride ;_dfbc +=_gcdfe .RowStride ;};};if _cgg {for _bebc =0;_bebc < _gaec ;_bebc ++{for _gefc =0;_gefc < _cbfc ;_gefc ++{_bgbd =_cccbe (_gcdfe .Data [_abfc +_gefc ]<<_caab ,_gcdfe .Data [_abfc +_gefc +1]>>_cafb ,_fdgc );_dade .Data [_gdfdd +_gefc ]|=^_bgbd ;
};_gdfdd +=_dade .RowStride ;_abfc +=_gcdfe .RowStride ;};};if _degfa {for _bebc =0;_bebc < _gaec ;_bebc ++{_bgbd =_gcdfe .Data [_aebf ]<<_caab ;if _abbcg {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_aebf +1]>>_cafb ,_fdgc );};_dade .Data [_bbag ]=_cccbe (_dade .Data [_bbag ],^_bgbd |_dade .Data [_bbag ],_gadd );
_bbag +=_dade .RowStride ;_aebf +=_gcdfe .RowStride ;};};case PixNotSrcAndDst :if _cfagg {for _bebc =0;_bebc < _gaec ;_bebc ++{if _gcfa ==_ddcg {_bgbd =_gcdfe .Data [_dfbc ]<<_caab ;if _abcf {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_dfbc +1]>>_cafb ,_fdgc );
};}else {_bgbd =_gcdfe .Data [_dfbc ]>>_cafb ;};_dade .Data [_cfcb ]=_cccbe (_dade .Data [_cfcb ],^_bgbd &_dade .Data [_cfcb ],_dcab );_cfcb +=_dade .RowStride ;_dfbc +=_gcdfe .RowStride ;};};if _cgg {for _bebc =0;_bebc < _gaec ;_bebc ++{for _gefc =0;_gefc < _cbfc ;
_gefc ++{_bgbd =_cccbe (_gcdfe .Data [_abfc +_gefc ]<<_caab ,_gcdfe .Data [_abfc +_gefc +1]>>_cafb ,_fdgc );_dade .Data [_gdfdd +_gefc ]&=^_bgbd ;};_gdfdd +=_dade .RowStride ;_abfc +=_gcdfe .RowStride ;};};if _degfa {for _bebc =0;_bebc < _gaec ;_bebc ++{_bgbd =_gcdfe .Data [_aebf ]<<_caab ;
if _abbcg {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_aebf +1]>>_cafb ,_fdgc );};_dade .Data [_bbag ]=_cccbe (_dade .Data [_bbag ],^_bgbd &_dade .Data [_bbag ],_gadd );_bbag +=_dade .RowStride ;_aebf +=_gcdfe .RowStride ;};};case PixSrcOrNotDst :if _cfagg {for _bebc =0;
_bebc < _gaec ;_bebc ++{if _gcfa ==_ddcg {_bgbd =_gcdfe .Data [_dfbc ]<<_caab ;if _abcf {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_dfbc +1]>>_cafb ,_fdgc );};}else {_bgbd =_gcdfe .Data [_dfbc ]>>_cafb ;};_dade .Data [_cfcb ]=_cccbe (_dade .Data [_cfcb ],_bgbd |^_dade .Data [_cfcb ],_dcab );
_cfcb +=_dade .RowStride ;_dfbc +=_gcdfe .RowStride ;};};if _cgg {for _bebc =0;_bebc < _gaec ;_bebc ++{for _gefc =0;_gefc < _cbfc ;_gefc ++{_bgbd =_cccbe (_gcdfe .Data [_abfc +_gefc ]<<_caab ,_gcdfe .Data [_abfc +_gefc +1]>>_cafb ,_fdgc );_dade .Data [_gdfdd +_gefc ]=_bgbd |^_dade .Data [_gdfdd +_gefc ];
};_gdfdd +=_dade .RowStride ;_abfc +=_gcdfe .RowStride ;};};if _degfa {for _bebc =0;_bebc < _gaec ;_bebc ++{_bgbd =_gcdfe .Data [_aebf ]<<_caab ;if _abbcg {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_aebf +1]>>_cafb ,_fdgc );};_dade .Data [_bbag ]=_cccbe (_dade .Data [_bbag ],_bgbd |^_dade .Data [_bbag ],_gadd );
_bbag +=_dade .RowStride ;_aebf +=_gcdfe .RowStride ;};};case PixSrcAndNotDst :if _cfagg {for _bebc =0;_bebc < _gaec ;_bebc ++{if _gcfa ==_ddcg {_bgbd =_gcdfe .Data [_dfbc ]<<_caab ;if _abcf {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_dfbc +1]>>_cafb ,_fdgc );
};}else {_bgbd =_gcdfe .Data [_dfbc ]>>_cafb ;};_dade .Data [_cfcb ]=_cccbe (_dade .Data [_cfcb ],_bgbd &^_dade .Data [_cfcb ],_dcab );_cfcb +=_dade .RowStride ;_dfbc +=_gcdfe .RowStride ;};};if _cgg {for _bebc =0;_bebc < _gaec ;_bebc ++{for _gefc =0;_gefc < _cbfc ;
_gefc ++{_bgbd =_cccbe (_gcdfe .Data [_abfc +_gefc ]<<_caab ,_gcdfe .Data [_abfc +_gefc +1]>>_cafb ,_fdgc );_dade .Data [_gdfdd +_gefc ]=_bgbd &^_dade .Data [_gdfdd +_gefc ];};_gdfdd +=_dade .RowStride ;_abfc +=_gcdfe .RowStride ;};};if _degfa {for _bebc =0;
_bebc < _gaec ;_bebc ++{_bgbd =_gcdfe .Data [_aebf ]<<_caab ;if _abbcg {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_aebf +1]>>_cafb ,_fdgc );};_dade .Data [_bbag ]=_cccbe (_dade .Data [_bbag ],_bgbd &^_dade .Data [_bbag ],_gadd );_bbag +=_dade .RowStride ;_aebf +=_gcdfe .RowStride ;
};};case PixNotPixSrcOrDst :if _cfagg {for _bebc =0;_bebc < _gaec ;_bebc ++{if _gcfa ==_ddcg {_bgbd =_gcdfe .Data [_dfbc ]<<_caab ;if _abcf {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_dfbc +1]>>_cafb ,_fdgc );};}else {_bgbd =_gcdfe .Data [_dfbc ]>>_cafb ;};_dade .Data [_cfcb ]=_cccbe (_dade .Data [_cfcb ],^(_bgbd |_dade .Data [_cfcb ]),_dcab );
_cfcb +=_dade .RowStride ;_dfbc +=_gcdfe .RowStride ;};};if _cgg {for _bebc =0;_bebc < _gaec ;_bebc ++{for _gefc =0;_gefc < _cbfc ;_gefc ++{_bgbd =_cccbe (_gcdfe .Data [_abfc +_gefc ]<<_caab ,_gcdfe .Data [_abfc +_gefc +1]>>_cafb ,_fdgc );_dade .Data [_gdfdd +_gefc ]=^(_bgbd |_dade .Data [_gdfdd +_gefc ]);
};_gdfdd +=_dade .RowStride ;_abfc +=_gcdfe .RowStride ;};};if _degfa {for _bebc =0;_bebc < _gaec ;_bebc ++{_bgbd =_gcdfe .Data [_aebf ]<<_caab ;if _abbcg {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_aebf +1]>>_cafb ,_fdgc );};_dade .Data [_bbag ]=_cccbe (_dade .Data [_bbag ],^(_bgbd |_dade .Data [_bbag ]),_gadd );
_bbag +=_dade .RowStride ;_aebf +=_gcdfe .RowStride ;};};case PixNotPixSrcAndDst :if _cfagg {for _bebc =0;_bebc < _gaec ;_bebc ++{if _gcfa ==_ddcg {_bgbd =_gcdfe .Data [_dfbc ]<<_caab ;if _abcf {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_dfbc +1]>>_cafb ,_fdgc );
};}else {_bgbd =_gcdfe .Data [_dfbc ]>>_cafb ;};_dade .Data [_cfcb ]=_cccbe (_dade .Data [_cfcb ],^(_bgbd &_dade .Data [_cfcb ]),_dcab );_cfcb +=_dade .RowStride ;_dfbc +=_gcdfe .RowStride ;};};if _cgg {for _bebc =0;_bebc < _gaec ;_bebc ++{for _gefc =0;
_gefc < _cbfc ;_gefc ++{_bgbd =_cccbe (_gcdfe .Data [_abfc +_gefc ]<<_caab ,_gcdfe .Data [_abfc +_gefc +1]>>_cafb ,_fdgc );_dade .Data [_gdfdd +_gefc ]=^(_bgbd &_dade .Data [_gdfdd +_gefc ]);};_gdfdd +=_dade .RowStride ;_abfc +=_gcdfe .RowStride ;};};if _degfa {for _bebc =0;
_bebc < _gaec ;_bebc ++{_bgbd =_gcdfe .Data [_aebf ]<<_caab ;if _abbcg {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_aebf +1]>>_cafb ,_fdgc );};_dade .Data [_bbag ]=_cccbe (_dade .Data [_bbag ],^(_bgbd &_dade .Data [_bbag ]),_gadd );_bbag +=_dade .RowStride ;_aebf +=_gcdfe .RowStride ;
};};case PixNotPixSrcXorDst :if _cfagg {for _bebc =0;_bebc < _gaec ;_bebc ++{if _gcfa ==_ddcg {_bgbd =_gcdfe .Data [_dfbc ]<<_caab ;if _abcf {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_dfbc +1]>>_cafb ,_fdgc );};}else {_bgbd =_gcdfe .Data [_dfbc ]>>_cafb ;};
_dade .Data [_cfcb ]=_cccbe (_dade .Data [_cfcb ],^(_bgbd ^_dade .Data [_cfcb ]),_dcab );_cfcb +=_dade .RowStride ;_dfbc +=_gcdfe .RowStride ;};};if _cgg {for _bebc =0;_bebc < _gaec ;_bebc ++{for _gefc =0;_gefc < _cbfc ;_gefc ++{_bgbd =_cccbe (_gcdfe .Data [_abfc +_gefc ]<<_caab ,_gcdfe .Data [_abfc +_gefc +1]>>_cafb ,_fdgc );
_dade .Data [_gdfdd +_gefc ]=^(_bgbd ^_dade .Data [_gdfdd +_gefc ]);};_gdfdd +=_dade .RowStride ;_abfc +=_gcdfe .RowStride ;};};if _degfa {for _bebc =0;_bebc < _gaec ;_bebc ++{_bgbd =_gcdfe .Data [_aebf ]<<_caab ;if _abbcg {_bgbd =_cccbe (_bgbd ,_gcdfe .Data [_aebf +1]>>_cafb ,_fdgc );
};_dade .Data [_bbag ]=_cccbe (_dade .Data [_bbag ],^(_bgbd ^_dade .Data [_bbag ]),_gadd );_bbag +=_dade .RowStride ;_aebf +=_gcdfe .RowStride ;};};default:_db .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",_eee );
return _f .Error ("\u0072a\u0073t\u0065\u0072\u004f\u0070\u0047e\u006e\u0065r\u0061\u006c\u004c\u006f\u0077","\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065r\u0061\u0074\u0069\u006f\u006e\u0020\u006eo\u0074\u0020\u0070\u0065\u0072\u006d\u0069\u0074\u0074\u0065\u0064");
};return nil ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_cafd bool ,_defbd error ){const _ggc ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
_gfed ,_ggec :=p1 .Width ,p1 .Height ;_edag ,_baaca :=p3 .Width ,p3 .Height ;if _a .Abs (_gfed -_edag )> maxDiffW {return false ,nil ;};if _a .Abs (_ggec -_baaca )> maxDiffH {return false ,nil ;};_aac :=int (float32 (area1 )*(1.0-rank )+0.5);_bcbae :=int (float32 (area3 )*(1.0-rank )+0.5);
var _geeeg ,_egacd int ;if delX >=0{_geeeg =int (delX +0.5);}else {_geeeg =int (delX -0.5);};if delY >=0{_egacd =int (delY +0.5);}else {_egacd =int (delY -0.5);};_ffgeg :=p1 .CreateTemplate ();if _defbd =_ffgeg .RasterOperation (0,0,_gfed ,_ggec ,PixSrc ,p1 ,0,0);
_defbd !=nil {return false ,_f .Wrap (_defbd ,_ggc ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _defbd =_ffgeg .RasterOperation (_geeeg ,_egacd ,_gfed ,_ggec ,PixNotSrcAndDst ,p4 ,0,0);_defbd !=nil {return false ,_f .Wrap (_defbd ,_ggc ,"\u0074 \u0026\u0020\u0021\u0070\u0034");
};_cafd ,_defbd =_ffgeg .ThresholdPixelSum (_aac ,tab8 );if _defbd !=nil {return false ,_f .Wrap (_defbd ,_ggc ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _cafd {return false ,nil ;};if _defbd =_ffgeg .RasterOperation (_geeeg ,_egacd ,_edag ,_baaca ,PixSrc ,p3 ,0,0);
_defbd !=nil {return false ,_f .Wrap (_defbd ,_ggc ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _defbd =_ffgeg .RasterOperation (0,0,_edag ,_baaca ,PixNotSrcAndDst ,p2 ,0,0);_defbd !=nil {return false ,_f .Wrap (_defbd ,_ggc ,"\u0074 \u0026\u0020\u0021\u0070\u0032");
};_cafd ,_defbd =_ffgeg .ThresholdPixelSum (_bcbae ,tab8 );if _defbd !=nil {return false ,_f .Wrap (_defbd ,_ggc ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_cafd ,nil ;};type SelectionValue int ;type SizeSelection int ;func (_agb *Bitmap )equivalent (_bga *Bitmap )bool {if _agb ==_bga {return true ;
};if !_agb .SizesEqual (_bga ){return false ;};_fggb :=_dgfa (_agb ,_bga ,CmbOpXor );_aae :=_agb .countPixels ();_feg :=int (0.25*float32 (_aae ));if _fggb .thresholdPixelSum (_feg ){return false ;};var (_cgcc [9][9]int ;_fbdf [18][9]int ;_adeg [9][18]int ;
_agc int ;_dcff int ;);_eab :=9;_eefb :=_agb .Height /_eab ;_gabb :=_agb .Width /_eab ;_bee ,_fgga :=_eefb /2,_gabb /2;if _eefb < _gabb {_bee =_gabb /2;_fgga =_eefb /2;};_ddcf :=float64 (_bee )*float64 (_fgga )*_d .Pi ;_bfac :=int (float64 (_eefb *_gabb /2)*0.9);
_dgg :=int (float64 (_gabb *_eefb /2)*0.9);for _gcaf :=0;_gcaf < _eab ;_gcaf ++{_dabb :=_gabb *_gcaf +_agc ;var _aefe int ;if _gcaf ==_eab -1{_agc =0;_aefe =_agb .Width ;}else {_aefe =_dabb +_gabb ;if ((_agb .Width -_agc )%_eab )> 0{_agc ++;_aefe ++;};
};for _eefbd :=0;_eefbd < _eab ;_eefbd ++{_acfa :=_eefb *_eefbd +_dcff ;var _bfbe int ;if _eefbd ==_eab -1{_dcff =0;_bfbe =_agb .Height ;}else {_bfbe =_acfa +_eefb ;if (_agb .Height -_dcff )%_eab > 0{_dcff ++;_bfbe ++;};};var _gcfb ,_eaeg ,_faee ,_ecf int ;
_aafb :=(_dabb +_aefe )/2;_ffag :=(_acfa +_bfbe )/2;for _aee :=_dabb ;_aee < _aefe ;_aee ++{for _efcd :=_acfa ;_efcd < _bfbe ;_efcd ++{if _fggb .GetPixel (_aee ,_efcd ){if _aee < _aafb {_gcfb ++;}else {_eaeg ++;};if _efcd < _ffag {_ecf ++;}else {_faee ++;
};};};};_cgcc [_gcaf ][_eefbd ]=_gcfb +_eaeg ;_fbdf [_gcaf *2][_eefbd ]=_gcfb ;_fbdf [_gcaf *2+1][_eefbd ]=_eaeg ;_adeg [_gcaf ][_eefbd *2]=_ecf ;_adeg [_gcaf ][_eefbd *2+1]=_faee ;};};for _cegdc :=0;_cegdc < _eab *2-1;_cegdc ++{for _ceea :=0;_ceea < (_eab -1);
_ceea ++{var _fgcfd int ;for _gccg :=0;_gccg < 2;_gccg ++{for _beef :=0;_beef < 2;_beef ++{_fgcfd +=_fbdf [_cegdc +_gccg ][_ceea +_beef ];};};if _fgcfd > _dgg {return false ;};};};for _ccdd :=0;_ccdd < (_eab -1);_ccdd ++{for _age :=0;_age < ((_eab *2)-1);
_age ++{var _cfad int ;for _dcfb :=0;_dcfb < 2;_dcfb ++{for _abab :=0;_abab < 2;_abab ++{_cfad +=_adeg [_ccdd +_dcfb ][_age +_abab ];};};if _cfad > _bfac {return false ;};};};for _dgb :=0;_dgb < (_eab -2);_dgb ++{for _ebb :=0;_ebb < (_eab -2);_ebb ++{var _aaae ,_abe int ;
for _cge :=0;_cge < 3;_cge ++{for _eabg :=0;_eabg < 3;_eabg ++{if _cge ==_eabg {_aaae +=_cgcc [_dgb +_cge ][_ebb +_eabg ];};if (2-_cge )==_eabg {_abe +=_cgcc [_dgb +_cge ][_ebb +_eabg ];};};};if _aaae > _dgg ||_abe > _dgg {return false ;};};};for _ggfc :=0;
_ggfc < (_eab -1);_ggfc ++{for _bdcf :=0;_bdcf < (_eab -1);_bdcf ++{var _eaf int ;for _dece :=0;_dece < 2;_dece ++{for _gge :=0;_gge < 2;_gge ++{_eaf +=_cgcc [_ggfc +_dece ][_bdcf +_gge ];};};if float64 (_eaf )> _ddcf {return false ;};};};return true ;
};func (_gaeg *Bitmap )Zero ()bool {_dcg :=_gaeg .Width /8;_gcg :=_gaeg .Width &7;var _ddb byte ;if _gcg !=0{_ddb =byte (0xff<<uint (8-_gcg ));};var _gbbd ,_ffd ,_bbb int ;for _ffd =0;_ffd < _gaeg .Height ;_ffd ++{_gbbd =_gaeg .RowStride *_ffd ;for _bbb =0;
_bbb < _dcg ;_bbb ,_gbbd =_bbb +1,_gbbd +1{if _gaeg .Data [_gbbd ]!=0{return false ;};};if _gcg > 0{if _gaeg .Data [_gbbd ]&_ddb !=0{return false ;};};};return true ;};func _edfg (_daeg *Bitmap ,_fcdb *_a .Stack ,_ddcgd ,_fcaga int )(_fbec *_ad .Rectangle ,_bceda error ){const _bacb ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _daeg ==nil {return nil ,_f .Error (_bacb ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _fcdb ==nil {return nil ,_f .Error (_bacb ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};_aaaeg ,_cebb :=_daeg .Width ,_daeg .Height ;_bdda :=_aaaeg -1;_cdbe :=_cebb -1;if _ddcgd < 0||_ddcgd > _bdda ||_fcaga < 0||_fcaga > _cdbe ||!_daeg .GetPixel (_ddcgd ,_fcaga ){return nil ,nil ;};var _ffba *_ad .Rectangle ;_ffba ,_bceda =Rect (100000,100000,0,0);
if _bceda !=nil {return nil ,_f .Wrap (_bceda ,_bacb ,"");};if _bceda =_cbfd (_fcdb ,_ddcgd ,_ddcgd ,_fcaga ,1,_cdbe ,_ffba );_bceda !=nil {return nil ,_f .Wrap (_bceda ,_bacb ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _bceda =_cbfd (_fcdb ,_ddcgd ,_ddcgd ,_fcaga +1,-1,_cdbe ,_ffba );
_bceda !=nil {return nil ,_f .Wrap (_bceda ,_bacb ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_ffba .Min .X ,_ffba .Max .X =_ddcgd ,_ddcgd ;_ffba .Min .Y ,_ffba .Max .Y =_fcaga ,_fcaga ;var (_fbggb *fillSegment ;
_cabe int ;);for _fcdb .Len ()> 0{if _fbggb ,_bceda =_gcbb (_fcdb );_bceda !=nil {return nil ,_f .Wrap (_bceda ,_bacb ,"");};_fcaga =_fbggb ._fbfd ;for _ddcgd =_fbggb ._acac ;_ddcgd >=0&&_daeg .GetPixel (_ddcgd ,_fcaga );_ddcgd --{if _bceda =_daeg .SetPixel (_ddcgd ,_fcaga ,0);
_bceda !=nil {return nil ,_f .Wrap (_bceda ,_bacb ,"");};};if _ddcgd >=_fbggb ._acac {for _ddcgd ++;_ddcgd <=_fbggb ._eaaee &&_ddcgd <=_bdda &&!_daeg .GetPixel (_ddcgd ,_fcaga );_ddcgd ++{};_cabe =_ddcgd ;if !(_ddcgd <=_fbggb ._eaaee &&_ddcgd <=_bdda ){continue ;
};}else {_cabe =_ddcgd +1;if _cabe < _fbggb ._acac -1{if _bceda =_cbfd (_fcdb ,_cabe ,_fbggb ._acac -1,_fbggb ._fbfd ,-_fbggb ._ccge ,_cdbe ,_ffba );_bceda !=nil {return nil ,_f .Wrap (_bceda ,_bacb ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_ddcgd =_fbggb ._acac +1;};for {for ;_ddcgd <=_bdda &&_daeg .GetPixel (_ddcgd ,_fcaga );_ddcgd ++{if _bceda =_daeg .SetPixel (_ddcgd ,_fcaga ,0);_bceda !=nil {return nil ,_f .Wrap (_bceda ,_bacb ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bceda =_cbfd (_fcdb ,_cabe ,_ddcgd -1,_fbggb ._fbfd ,_fbggb ._ccge ,_cdbe ,_ffba );
_bceda !=nil {return nil ,_f .Wrap (_bceda ,_bacb ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ddcgd > _fbggb ._eaaee +1{if _bceda =_cbfd (_fcdb ,_fbggb ._eaaee +1,_ddcgd -1,_fbggb ._fbfd ,-_fbggb ._ccge ,_cdbe ,_ffba );_bceda !=nil {return nil ,_f .Wrap (_bceda ,_bacb ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _ddcgd ++;_ddcgd <=_fbggb ._eaaee &&_ddcgd <=_bdda &&!_daeg .GetPixel (_ddcgd ,_fcaga );_ddcgd ++{};_cabe =_ddcgd ;if !(_ddcgd <=_fbggb ._eaaee &&_ddcgd <=_bdda ){break ;};};};_ffba .Max .X ++;_ffba .Max .Y ++;return _ffba ,nil ;};func (_fgdc *Bitmap )nextOnPixelLow (_efg ,_cebc ,_egcb ,_aebee ,_gcdg int )(_afe _ad .Point ,_gec bool ,_efbb error ){const _ged ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";
var (_deca int ;_cde byte ;);_cdde :=_gcdg *_egcb ;_bcea :=_cdde +(_aebee /8);if _cde ,_efbb =_fgdc .GetByte (_bcea );_efbb !=nil {return _afe ,false ,_f .Wrap (_efbb ,_ged ,"\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 _cde !=0{_bbg :=_aebee -(_aebee %8)+7;for _deca =_aebee ;_deca <=_bbg &&_deca < _efg ;_deca ++{if _fgdc .GetPixel (_deca ,_gcdg ){_afe .X =_deca ;_afe .Y =_gcdg ;return _afe ,true ,nil ;};};};_dggb :=(_aebee /8)+1;_deca =8*_dggb ;var _bfc int ;for _bcea =_cdde +_dggb ;
_deca < _efg ;_bcea ,_deca =_bcea +1,_deca +8{if _cde ,_efbb =_fgdc .GetByte (_bcea );_efbb !=nil {return _afe ,false ,_f .Wrap (_efbb ,_ged ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};if _cde ==0{continue ;
};for _bfc =0;_bfc < 8&&_deca < _efg ;_bfc ,_deca =_bfc +1,_deca +1{if _fgdc .GetPixel (_deca ,_gcdg ){_afe .X =_deca ;_afe .Y =_gcdg ;return _afe ,true ,nil ;};};};for _ecdb :=_gcdg +1;_ecdb < _cebc ;_ecdb ++{_cdde =_ecdb *_egcb ;for _bcea ,_deca =_cdde ,0;
_deca < _efg ;_bcea ,_deca =_bcea +1,_deca +8{if _cde ,_efbb =_fgdc .GetByte (_bcea );_efbb !=nil {return _afe ,false ,_f .Wrap (_efbb ,_ged ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");};if _cde ==0{continue ;};
for _bfc =0;_bfc < 8&&_deca < _efg ;_bfc ,_deca =_bfc +1,_deca +1{if _fgdc .GetPixel (_deca ,_ecdb ){_afe .X =_deca ;_afe .Y =_ecdb ;return _afe ,true ,nil ;};};};};return _afe ,false ,nil ;};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;
);func (_egeb MorphProcess )getWidthHeight ()(_babbb ,_gbbde int ){return _egeb .Arguments [0],_egeb .Arguments [1];};func TstNSymbol (t *_b .T ,scale ...int )*Bitmap {_dgca ,_ggdbb :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_c .NoError (t ,_ggdbb );
return TstGetScaledSymbol (t ,_dgca ,scale ...);};func (_bdga *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_edae *Boxes ,_efgg error ){const _deeg ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";
if _bdga ==nil {return nil ,_f .Error (_deeg ,"\u0070r\u006f\u0076\u0069\u0064e\u0064\u0020\u0065\u006d\u0070t\u0079 \u0027b\u0027\u0020\u0062\u0069\u0074\u006d\u0061p");};if connectivity !=4&&connectivity !=8{return nil ,_f .Error (_deeg ,"\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 _edae ,_efgg =_bdga .connComponentsBB (connectivity );_efgg !=nil {return nil ,_f .Wrap (_efgg ,_deeg ,"");};}else {if _edae ,_efgg =_bdga .connComponentsBitmapsBB (bms ,connectivity );_efgg !=nil {return nil ,_f .Wrap (_efgg ,_deeg ,"");
};};return _edae ,nil ;};func (_dbeb *Bitmap )countPixels ()int {var (_ecda int ;_edgd uint8 ;_acgea byte ;_feb int ;);_ggd :=_dbeb .RowStride ;_fcg :=uint (_dbeb .Width &0x07);if _fcg !=0{_edgd =uint8 ((0xff<<(8-_fcg ))&0xff);_ggd --;};for _gfd :=0;_gfd < _dbeb .Height ;
_gfd ++{for _feb =0;_feb < _ggd ;_feb ++{_acgea =_dbeb .Data [_gfd *_dbeb .RowStride +_feb ];_ecda +=int (_deac [_acgea ]);};if _fcg !=0{_ecda +=int (_deac [_dbeb .Data [_gfd *_dbeb .RowStride +_feb ]&_edgd ]);};};return _ecda ;};type MorphProcess struct{Operation MorphOperation ;
Arguments []int ;};func (_ffgeb *Bitmaps )GetBox (i int )(*_ad .Rectangle ,error ){const _adbcb ="\u0047\u0065\u0074\u0042\u006f\u0078";if _ffgeb ==nil {return nil ,_f .Error (_adbcb ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");
};if i > len (_ffgeb .Boxes )-1{return nil ,_f .Errorf (_adbcb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _ffgeb .Boxes [i ],nil ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _abbb ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
_gfgcd ,_ddab :=p1 .Width ,p1 .Height ;_faad ,_fcgd :=p3 .Width ,p3 .Height ;if _a .Abs (_gfgcd -_faad )> maxDiffW {return false ,nil ;};if _a .Abs (_ddab -_fcgd )> maxDiffH {return false ,nil ;};_aca :=int (delX +_a .Sign (delX )*0.5);_fbac :=int (delY +_a .Sign (delY )*0.5);
var _ffb error ;_ddae :=p1 .CreateTemplate ();if _ffb =_ddae .RasterOperation (0,0,_gfgcd ,_ddab ,PixSrc ,p1 ,0,0);_ffb !=nil {return false ,_f .Wrap (_ffb ,_abbb ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _ffb =_ddae .RasterOperation (_aca ,_fbac ,_gfgcd ,_ddab ,PixNotSrcAndDst ,p4 ,0,0);
_ffb !=nil {return false ,_f .Wrap (_ffb ,_abbb ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _ddae .Zero (){return false ,nil ;};if _ffb =_ddae .RasterOperation (_aca ,_fbac ,_faad ,_fcgd ,PixSrc ,p3 ,0,0);_ffb !=nil {return false ,_f .Wrap (_ffb ,_abbb ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");
};if _ffb =_ddae .RasterOperation (0,0,_faad ,_fcgd ,PixNotSrcAndDst ,p2 ,0,0);_ffb !=nil {return false ,_f .Wrap (_ffb ,_abbb ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _ddae .Zero (),nil ;};func (_afac *ClassedPoints )YAtIndex (i int )float32 {return (*_afac .Points )[_afac .IntSlice [i ]].Y };
func (_acgfa *Bitmap )SetByte (index int ,v byte )error {if index > len (_acgfa .Data )-1||index < 0{return _f .Errorf ("\u0053e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",index );
};_acgfa .Data [index ]=v ;return nil ;};func (_bae *Bitmap )GetUnpaddedData ()([]byte ,error ){_gab :=uint (_bae .Width &0x07);if _gab ==0{return _bae .Data ,nil ;};_bdbg :=_bae .Width *_bae .Height ;if _bdbg %8!=0{_bdbg >>=3;_bdbg ++;}else {_bdbg >>=3;
};_dabg :=make ([]byte ,_bdbg );_gabg :=_be .NewWriterMSB (_dabg );const _eea ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _ffe :=0;_ffe < _bae .Height ;_ffe ++{for _dgc :=0;_dgc < _bae .RowStride ;_dgc ++{_gfbc :=_bae .Data [_ffe *_bae .RowStride +_dgc ];
if _dgc !=_bae .RowStride -1{_fad :=_gabg .WriteByte (_gfbc );if _fad !=nil {return nil ,_f .Wrap (_fad ,_eea ,"");};continue ;};for _cgaa :=uint (0);_cgaa < _gab ;_cgaa ++{_ebd :=_gabg .WriteBit (int (_gfbc >>(7-_cgaa )&0x01));if _ebd !=nil {return nil ,_f .Wrap (_ebd ,_eea ,"");
};};};};return _dabg ,nil ;};func _gcf (_adb ,_bdce *Bitmap ,_cda int ,_baae []byte ,_ede int )(_fbg error ){const _gfb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";
var (_dfaf ,_baaa ,_cgf ,_fgg ,_add ,_eed ,_egb ,_def int ;_dd ,_gfeg uint32 ;_adaa ,_bbf byte ;_gdd uint16 ;);_dbgf :=make ([]byte ,4);_beg :=make ([]byte ,4);for _cgf =0;_cgf < _adb .Height -1;_cgf ,_fgg =_cgf +2,_fgg +1{_dfaf =_cgf *_adb .RowStride ;
_baaa =_fgg *_bdce .RowStride ;for _add ,_eed =0,0;_add < _ede ;_add ,_eed =_add +4,_eed +1{for _egb =0;_egb < 4;_egb ++{_def =_dfaf +_add +_egb ;if _def <=len (_adb .Data )-1&&_def < _dfaf +_adb .RowStride {_dbgf [_egb ]=_adb .Data [_def ];}else {_dbgf [_egb ]=0x00;
};_def =_dfaf +_adb .RowStride +_add +_egb ;if _def <=len (_adb .Data )-1&&_def < _dfaf +(2*_adb .RowStride ){_beg [_egb ]=_adb .Data [_def ];}else {_beg [_egb ]=0x00;};};_dd =_gfg .BigEndian .Uint32 (_dbgf );_gfeg =_gfg .BigEndian .Uint32 (_beg );_gfeg |=_dd ;
_gfeg |=_gfeg <<1;_gfeg &=0xaaaaaaaa;_dd =_gfeg |(_gfeg <<7);_adaa =byte (_dd >>24);_bbf =byte ((_dd >>8)&0xff);_def =_baaa +_eed ;if _def +1==len (_bdce .Data )-1||_def +1>=_baaa +_bdce .RowStride {_bdce .Data [_def ]=_baae [_adaa ];}else {_gdd =(uint16 (_baae [_adaa ])<<8)|uint16 (_baae [_bbf ]);
if _fbg =_bdce .setTwoBytes (_def ,_gdd );_fbg !=nil {return _f .Wrapf (_fbg ,_gfb ,"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",_def );
};_eed ++;};};};return nil ;};func _bec (_edc ,_abg *Bitmap ,_babb int ,_gfc []byte ,_cgb int )(_acf error ){const _baf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";
var (_dbb ,_bbd ,_fd ,_dab ,_defg ,_fee ,_defd ,_adbg int ;_adac ,_cgc ,_cae ,_ccd uint32 ;_edfc ,_ddf byte ;_dbf uint16 ;);_bba :=make ([]byte ,4);_eff :=make ([]byte ,4);for _fd =0;_fd < _edc .Height -1;_fd ,_dab =_fd +2,_dab +1{_dbb =_fd *_edc .RowStride ;
_bbd =_dab *_abg .RowStride ;for _defg ,_fee =0,0;_defg < _cgb ;_defg ,_fee =_defg +4,_fee +1{for _defd =0;_defd < 4;_defd ++{_adbg =_dbb +_defg +_defd ;if _adbg <=len (_edc .Data )-1&&_adbg < _dbb +_edc .RowStride {_bba [_defd ]=_edc .Data [_adbg ];}else {_bba [_defd ]=0x00;
};_adbg =_dbb +_edc .RowStride +_defg +_defd ;if _adbg <=len (_edc .Data )-1&&_adbg < _dbb +(2*_edc .RowStride ){_eff [_defd ]=_edc .Data [_adbg ];}else {_eff [_defd ]=0x00;};};_adac =_gfg .BigEndian .Uint32 (_bba );_cgc =_gfg .BigEndian .Uint32 (_eff );
_cae =_adac &_cgc ;_cae |=_cae <<1;_ccd =_adac |_cgc ;_ccd &=_ccd <<1;_cgc =_cae |_ccd ;_cgc &=0xaaaaaaaa;_adac =_cgc |(_cgc <<7);_edfc =byte (_adac >>24);_ddf =byte ((_adac >>8)&0xff);_adbg =_bbd +_fee ;if _adbg +1==len (_abg .Data )-1||_adbg +1>=_bbd +_abg .RowStride {if _acf =_abg .SetByte (_adbg ,_gfc [_edfc ]);
_acf !=nil {return _f .Wrapf (_acf ,_baf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_adbg );};}else {_dbf =(uint16 (_gfc [_edfc ])<<8)|uint16 (_gfc [_ddf ]);if _acf =_abg .setTwoBytes (_adbg ,_dbf );_acf !=nil {return _f .Wrapf (_acf ,_baf ,"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",_adbg );
};_fee ++;};};};return nil ;};func _gfge (_gbg ,_fgbf int )int {if _gbg < _fgbf {return _gbg ;};return _fgbf ;};func (_ffbf *ClassedPoints )XAtIndex (i int )float32 {return (*_ffbf .Points )[_ffbf .IntSlice [i ]].X };func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _gg ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";
_cee :=_fdb (width ,height );_cee .Data =data ;if _cfe :=((width *height )+7)>>3;len (data )< _cfe {return nil ,_f .Errorf (_gg ,"\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 ),_cfe );
};if _bcb :=_cee .addPadBits ();_bcb !=nil {return nil ,_f .Wrap (_bcb ,_gg ,"");};return _cee ,nil ;};func _cged (_defb ,_gddd *Bitmap ,_ebbd ,_eceb ,_fdgb ,_fdag ,_egda ,_ebbb ,_ebe ,_ffgg int ,_gagad CombinationOperator )error {var _fabg int ;_bade :=func (){_fabg ++;
_fdgb +=_gddd .RowStride ;_fdag +=_defb .RowStride ;_egda +=_defb .RowStride };for _fabg =_ebbd ;_fabg < _eceb ;_bade (){var _faeda uint16 ;_acec :=_fdgb ;for _feea :=_fdag ;_feea <=_egda ;_feea ++{_gega ,_ddbg :=_gddd .GetByte (_acec );if _ddbg !=nil {return _ddbg ;
};_bfba ,_ddbg :=_defb .GetByte (_feea );if _ddbg !=nil {return _ddbg ;};_faeda =(_faeda |uint16 (_bfba ))<<uint (_ffgg );_bfba =byte (_faeda >>8);if _feea ==_egda {_bfba =_eaaeb (uint (_ebbb ),_bfba );};if _ddbg =_gddd .SetByte (_acec ,_geee (_gega ,_bfba ,_gagad ));
_ddbg !=nil {return _ddbg ;};_acec ++;_faeda <<=uint (_ebe );};};return nil ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _gcab ="C\u006f\u0072\u0072\u0065\u006c\u0061t\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054h\u0072\u0065\u0073h\u006fl\u0064\u0065\u0064";
if bm1 ==nil {return false ,_f .Error (_gcab ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d1\u0020\u0069s\u0020\u006e\u0069\u006c");
};if bm2 ==nil {return false ,_f .Error (_gcab ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d2\u0020\u0069s\u0020\u006e\u0069\u006c");
};if area1 <=0||area2 <=0{return false ,_f .Error (_gcab ,"c\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006fn\u0053\u0063\u006f\u0072\u0065\u0054\u0068re\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u002d\u0020\u0061\u0072\u0065\u0061s \u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u003e\u0020\u0030");
};if downcount ==nil {return false ,_f .Error (_gcab ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u006f\u0020\u0027\u0064\u006f\u0077\u006e\u0063\u006f\u0075\u006e\u0074\u0027");};if tab ==nil {return false ,_f .Error (_gcab ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
};_ggdf ,_babd :=bm1 .Width ,bm1 .Height ;_fbag ,_eafc :=bm2 .Width ,bm2 .Height ;if _a .Abs (_ggdf -_fbag )> maxDiffW {return false ,nil ;};if _a .Abs (_babd -_eafc )> maxDiffH {return false ,nil ;};_fedb :=int (delX +_a .Sign (delX )*0.5);_dagd :=int (delY +_a .Sign (delY )*0.5);
_dcba :=int (_d .Ceil (_d .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_gfeb :=bm2 .RowStride ;_cbdb :=_baef (_dagd ,0);_ceaf :=_gfge (_eafc +_dagd ,_babd );_gdfc :=bm1 .RowStride *_cbdb ;_dca :=bm2 .RowStride *(_cbdb -_dagd );
var _gadf int ;if _ceaf <=_babd {_gadf =downcount [_ceaf -1];};_bebe :=_baef (_fedb ,0);_deae :=_gfge (_fbag +_fedb ,_ggdf );var _dfaea ,_gcfe int ;if _fedb >=8{_dfaea =_fedb >>3;_gdfc +=_dfaea ;_bebe -=_dfaea <<3;_deae -=_dfaea <<3;_fedb &=7;}else if _fedb <=-8{_gcfe =-((_fedb +7)>>3);
_dca +=_gcfe ;_gfeb -=_gcfe ;_fedb +=_gcfe <<3;};var (_afde ,_gcag ,_fabc int ;_agca ,_ddcfe ,_adgb byte ;);if _bebe >=_deae ||_cbdb >=_ceaf {return false ,nil ;};_bfec :=(_deae +7)>>3;switch {case _fedb ==0:for _gcag =_cbdb ;_gcag < _ceaf ;_gcag ,_gdfc ,_dca =_gcag +1,_gdfc +bm1 .RowStride ,_dca +bm2 .RowStride {for _fabc =0;
_fabc < _bfec ;_fabc ++{_agca =bm1 .Data [_gdfc +_fabc ]&bm2 .Data [_dca +_fabc ];_afde +=tab [_agca ];};if _afde >=_dcba {return true ,nil ;};if _eeac :=_afde +downcount [_gcag ]-_gadf ;_eeac < _dcba {return false ,nil ;};};case _fedb > 0&&_gfeb < _bfec :for _gcag =_cbdb ;
_gcag < _ceaf ;_gcag ,_gdfc ,_dca =_gcag +1,_gdfc +bm1 .RowStride ,_dca +bm2 .RowStride {_ddcfe =bm1 .Data [_gdfc ];_adgb =bm2 .Data [_dca ]>>uint (_fedb );_agca =_ddcfe &_adgb ;_afde +=tab [_agca ];for _fabc =1;_fabc < _gfeb ;_fabc ++{_ddcfe =bm1 .Data [_gdfc +_fabc ];
_adgb =bm2 .Data [_dca +_fabc ]>>uint (_fedb )|bm2 .Data [_dca +_fabc -1]<<uint (8-_fedb );_agca =_ddcfe &_adgb ;_afde +=tab [_agca ];};_ddcfe =bm1 .Data [_gdfc +_fabc ];_adgb =bm2 .Data [_dca +_fabc -1]<<uint (8-_fedb );_agca =_ddcfe &_adgb ;_afde +=tab [_agca ];
if _afde >=_dcba {return true ,nil ;}else if _afde +downcount [_gcag ]-_gadf < _dcba {return false ,nil ;};};case _fedb > 0&&_gfeb >=_bfec :for _gcag =_cbdb ;_gcag < _ceaf ;_gcag ,_gdfc ,_dca =_gcag +1,_gdfc +bm1 .RowStride ,_dca +bm2 .RowStride {_ddcfe =bm1 .Data [_gdfc ];
_adgb =bm2 .Data [_dca ]>>uint (_fedb );_agca =_ddcfe &_adgb ;_afde +=tab [_agca ];for _fabc =1;_fabc < _bfec ;_fabc ++{_ddcfe =bm1 .Data [_gdfc +_fabc ];_adgb =bm2 .Data [_dca +_fabc ]>>uint (_fedb );_adgb |=bm2 .Data [_dca +_fabc -1]<<uint (8-_fedb );
_agca =_ddcfe &_adgb ;_afde +=tab [_agca ];};if _afde >=_dcba {return true ,nil ;}else if _afde +downcount [_gcag ]-_gadf < _dcba {return false ,nil ;};};case _bfec < _gfeb :for _gcag =_cbdb ;_gcag < _ceaf ;_gcag ,_gdfc ,_dca =_gcag +1,_gdfc +bm1 .RowStride ,_dca +bm2 .RowStride {for _fabc =0;
_fabc < _bfec ;_fabc ++{_ddcfe =bm1 .Data [_gdfc +_fabc ];_adgb =bm2 .Data [_dca +_fabc ]<<uint (-_fedb );_adgb |=bm2 .Data [_dca +_fabc +1]>>uint (8+_fedb );_agca =_ddcfe &_adgb ;_afde +=tab [_agca ];};if _afde >=_dcba {return true ,nil ;}else if _bddg :=_afde +downcount [_gcag ]-_gadf ;
_bddg < _dcba {return false ,nil ;};};case _gfeb >=_bfec :for _gcag =_cbdb ;_gcag < _ceaf ;_gcag ,_gdfc ,_dca =_gcag +1,_gdfc +bm1 .RowStride ,_dca +bm2 .RowStride {for _fabc =0;_fabc < _bfec ;_fabc ++{_ddcfe =bm1 .Data [_gdfc +_fabc ];_adgb =bm2 .Data [_dca +_fabc ]<<uint (-_fedb );
_adgb |=bm2 .Data [_dca +_fabc +1]>>uint (8+_fedb );_agca =_ddcfe &_adgb ;_afde +=tab [_agca ];};_ddcfe =bm1 .Data [_gdfc +_fabc ];_adgb =bm2 .Data [_dca +_fabc ]<<uint (-_fedb );_agca =_ddcfe &_adgb ;_afde +=tab [_agca ];if _afde >=_dcba {return true ,nil ;
}else if _afde +downcount [_gcag ]-_gadf < _dcba {return false ,nil ;};};};_eged :=float32 (_afde )*float32 (_afde )/(float32 (area1 )*float32 (area2 ));if _eged >=scoreThreshold {_db .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",_afde ,_dcba ,_eged ,scoreThreshold );
};return false ,nil ;};func _ecec (_cgdf *Bitmap ,_dbaf ,_afcg ,_afgb ,_dacgc int ,_fdfg RasterOperator ,_ffcbb *Bitmap ,_abggb ,_aabd int )error {var (_aegff bool ;_fbgga bool ;_bgfb int ;_ebff int ;_gceb int ;_gbgf bool ;_eebe byte ;_dead int ;_efbf int ;
_fdaba int ;_dbfgc ,_bbcf int ;);_ffec :=8-(_dbaf &7);_ffbc :=_ebaed [_ffec ];_eefaa :=_cgdf .RowStride *_afcg +(_dbaf >>3);_abda :=_ffcbb .RowStride *_aabd +(_abggb >>3);if _afgb < _ffec {_aegff =true ;_ffbc &=_ggge [8-_ffec +_afgb ];};if !_aegff {_bgfb =(_afgb -_ffec )>>3;
if _bgfb > 0{_fbgga =true ;_ebff =_eefaa +1;_gceb =_abda +1;};};_dead =(_dbaf +_afgb )&7;if !(_aegff ||_dead ==0){_gbgf =true ;_eebe =_ggge [_dead ];_efbf =_eefaa +1+_bgfb ;_fdaba =_abda +1+_bgfb ;};switch _fdfg {case PixSrc :for _dbfgc =0;_dbfgc < _dacgc ;
_dbfgc ++{_cgdf .Data [_eefaa ]=_cccbe (_cgdf .Data [_eefaa ],_ffcbb .Data [_abda ],_ffbc );_eefaa +=_cgdf .RowStride ;_abda +=_ffcbb .RowStride ;};if _fbgga {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{for _bbcf =0;_bbcf < _bgfb ;_bbcf ++{_cgdf .Data [_ebff +_bbcf ]=_ffcbb .Data [_gceb +_bbcf ];
};_ebff +=_cgdf .RowStride ;_gceb +=_ffcbb .RowStride ;};};if _gbgf {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_efbf ]=_cccbe (_cgdf .Data [_efbf ],_ffcbb .Data [_fdaba ],_eebe );_efbf +=_cgdf .RowStride ;_fdaba +=_ffcbb .RowStride ;};};case PixNotSrc :for _dbfgc =0;
_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_eefaa ]=_cccbe (_cgdf .Data [_eefaa ],^_ffcbb .Data [_abda ],_ffbc );_eefaa +=_cgdf .RowStride ;_abda +=_ffcbb .RowStride ;};if _fbgga {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{for _bbcf =0;_bbcf < _bgfb ;_bbcf ++{_cgdf .Data [_ebff +_bbcf ]=^_ffcbb .Data [_gceb +_bbcf ];
};_ebff +=_cgdf .RowStride ;_gceb +=_ffcbb .RowStride ;};};if _gbgf {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_efbf ]=_cccbe (_cgdf .Data [_efbf ],^_ffcbb .Data [_fdaba ],_eebe );_efbf +=_cgdf .RowStride ;_fdaba +=_ffcbb .RowStride ;};};case PixSrcOrDst :for _dbfgc =0;
_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_eefaa ]=_cccbe (_cgdf .Data [_eefaa ],_ffcbb .Data [_abda ]|_cgdf .Data [_eefaa ],_ffbc );_eefaa +=_cgdf .RowStride ;_abda +=_ffcbb .RowStride ;};if _fbgga {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{for _bbcf =0;
_bbcf < _bgfb ;_bbcf ++{_cgdf .Data [_ebff +_bbcf ]|=_ffcbb .Data [_gceb +_bbcf ];};_ebff +=_cgdf .RowStride ;_gceb +=_ffcbb .RowStride ;};};if _gbgf {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_efbf ]=_cccbe (_cgdf .Data [_efbf ],_ffcbb .Data [_fdaba ]|_cgdf .Data [_efbf ],_eebe );
_efbf +=_cgdf .RowStride ;_fdaba +=_ffcbb .RowStride ;};};case PixSrcAndDst :for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_eefaa ]=_cccbe (_cgdf .Data [_eefaa ],_ffcbb .Data [_abda ]&_cgdf .Data [_eefaa ],_ffbc );_eefaa +=_cgdf .RowStride ;_abda +=_ffcbb .RowStride ;
};if _fbgga {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{for _bbcf =0;_bbcf < _bgfb ;_bbcf ++{_cgdf .Data [_ebff +_bbcf ]&=_ffcbb .Data [_gceb +_bbcf ];};_ebff +=_cgdf .RowStride ;_gceb +=_ffcbb .RowStride ;};};if _gbgf {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_efbf ]=_cccbe (_cgdf .Data [_efbf ],_ffcbb .Data [_fdaba ]&_cgdf .Data [_efbf ],_eebe );
_efbf +=_cgdf .RowStride ;_fdaba +=_ffcbb .RowStride ;};};case PixSrcXorDst :for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_eefaa ]=_cccbe (_cgdf .Data [_eefaa ],_ffcbb .Data [_abda ]^_cgdf .Data [_eefaa ],_ffbc );_eefaa +=_cgdf .RowStride ;_abda +=_ffcbb .RowStride ;
};if _fbgga {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{for _bbcf =0;_bbcf < _bgfb ;_bbcf ++{_cgdf .Data [_ebff +_bbcf ]^=_ffcbb .Data [_gceb +_bbcf ];};_ebff +=_cgdf .RowStride ;_gceb +=_ffcbb .RowStride ;};};if _gbgf {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_efbf ]=_cccbe (_cgdf .Data [_efbf ],_ffcbb .Data [_fdaba ]^_cgdf .Data [_efbf ],_eebe );
_efbf +=_cgdf .RowStride ;_fdaba +=_ffcbb .RowStride ;};};case PixNotSrcOrDst :for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_eefaa ]=_cccbe (_cgdf .Data [_eefaa ],^(_ffcbb .Data [_abda ])|_cgdf .Data [_eefaa ],_ffbc );_eefaa +=_cgdf .RowStride ;
_abda +=_ffcbb .RowStride ;};if _fbgga {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{for _bbcf =0;_bbcf < _bgfb ;_bbcf ++{_cgdf .Data [_ebff +_bbcf ]|=^(_ffcbb .Data [_gceb +_bbcf ]);};_ebff +=_cgdf .RowStride ;_gceb +=_ffcbb .RowStride ;};};if _gbgf {for _dbfgc =0;
_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_efbf ]=_cccbe (_cgdf .Data [_efbf ],^(_ffcbb .Data [_fdaba ])|_cgdf .Data [_efbf ],_eebe );_efbf +=_cgdf .RowStride ;_fdaba +=_ffcbb .RowStride ;};};case PixNotSrcAndDst :for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_eefaa ]=_cccbe (_cgdf .Data [_eefaa ],^(_ffcbb .Data [_abda ])&_cgdf .Data [_eefaa ],_ffbc );
_eefaa +=_cgdf .RowStride ;_abda +=_ffcbb .RowStride ;};if _fbgga {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{for _bbcf =0;_bbcf < _bgfb ;_bbcf ++{_cgdf .Data [_ebff +_bbcf ]&=^_ffcbb .Data [_gceb +_bbcf ];};_ebff +=_cgdf .RowStride ;_gceb +=_ffcbb .RowStride ;
};};if _gbgf {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_efbf ]=_cccbe (_cgdf .Data [_efbf ],^(_ffcbb .Data [_fdaba ])&_cgdf .Data [_efbf ],_eebe );_efbf +=_cgdf .RowStride ;_fdaba +=_ffcbb .RowStride ;};};case PixSrcOrNotDst :for _dbfgc =0;
_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_eefaa ]=_cccbe (_cgdf .Data [_eefaa ],_ffcbb .Data [_abda ]|^(_cgdf .Data [_eefaa ]),_ffbc );_eefaa +=_cgdf .RowStride ;_abda +=_ffcbb .RowStride ;};if _fbgga {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{for _bbcf =0;
_bbcf < _bgfb ;_bbcf ++{_cgdf .Data [_ebff +_bbcf ]=_ffcbb .Data [_gceb +_bbcf ]|^(_cgdf .Data [_ebff +_bbcf ]);};_ebff +=_cgdf .RowStride ;_gceb +=_ffcbb .RowStride ;};};if _gbgf {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_efbf ]=_cccbe (_cgdf .Data [_efbf ],_ffcbb .Data [_fdaba ]|^(_cgdf .Data [_efbf ]),_eebe );
_efbf +=_cgdf .RowStride ;_fdaba +=_ffcbb .RowStride ;};};case PixSrcAndNotDst :for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_eefaa ]=_cccbe (_cgdf .Data [_eefaa ],_ffcbb .Data [_abda ]&^(_cgdf .Data [_eefaa ]),_ffbc );_eefaa +=_cgdf .RowStride ;
_abda +=_ffcbb .RowStride ;};if _fbgga {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{for _bbcf =0;_bbcf < _bgfb ;_bbcf ++{_cgdf .Data [_ebff +_bbcf ]=_ffcbb .Data [_gceb +_bbcf ]&^(_cgdf .Data [_ebff +_bbcf ]);};_ebff +=_cgdf .RowStride ;_gceb +=_ffcbb .RowStride ;
};};if _gbgf {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_efbf ]=_cccbe (_cgdf .Data [_efbf ],_ffcbb .Data [_fdaba ]&^(_cgdf .Data [_efbf ]),_eebe );_efbf +=_cgdf .RowStride ;_fdaba +=_ffcbb .RowStride ;};};case PixNotPixSrcOrDst :for _dbfgc =0;
_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_eefaa ]=_cccbe (_cgdf .Data [_eefaa ],^(_ffcbb .Data [_abda ]|_cgdf .Data [_eefaa ]),_ffbc );_eefaa +=_cgdf .RowStride ;_abda +=_ffcbb .RowStride ;};if _fbgga {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{for _bbcf =0;
_bbcf < _bgfb ;_bbcf ++{_cgdf .Data [_ebff +_bbcf ]=^(_ffcbb .Data [_gceb +_bbcf ]|_cgdf .Data [_ebff +_bbcf ]);};_ebff +=_cgdf .RowStride ;_gceb +=_ffcbb .RowStride ;};};if _gbgf {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_efbf ]=_cccbe (_cgdf .Data [_efbf ],^(_ffcbb .Data [_fdaba ]|_cgdf .Data [_efbf ]),_eebe );
_efbf +=_cgdf .RowStride ;_fdaba +=_ffcbb .RowStride ;};};case PixNotPixSrcAndDst :for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_eefaa ]=_cccbe (_cgdf .Data [_eefaa ],^(_ffcbb .Data [_abda ]&_cgdf .Data [_eefaa ]),_ffbc );_eefaa +=_cgdf .RowStride ;
_abda +=_ffcbb .RowStride ;};if _fbgga {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{for _bbcf =0;_bbcf < _bgfb ;_bbcf ++{_cgdf .Data [_ebff +_bbcf ]=^(_ffcbb .Data [_gceb +_bbcf ]&_cgdf .Data [_ebff +_bbcf ]);};_ebff +=_cgdf .RowStride ;_gceb +=_ffcbb .RowStride ;
};};if _gbgf {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_efbf ]=_cccbe (_cgdf .Data [_efbf ],^(_ffcbb .Data [_fdaba ]&_cgdf .Data [_efbf ]),_eebe );_efbf +=_cgdf .RowStride ;_fdaba +=_ffcbb .RowStride ;};};case PixNotPixSrcXorDst :for _dbfgc =0;
_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_eefaa ]=_cccbe (_cgdf .Data [_eefaa ],^(_ffcbb .Data [_abda ]^_cgdf .Data [_eefaa ]),_ffbc );_eefaa +=_cgdf .RowStride ;_abda +=_ffcbb .RowStride ;};if _fbgga {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{for _bbcf =0;
_bbcf < _bgfb ;_bbcf ++{_cgdf .Data [_ebff +_bbcf ]=^(_ffcbb .Data [_gceb +_bbcf ]^_cgdf .Data [_ebff +_bbcf ]);};_ebff +=_cgdf .RowStride ;_gceb +=_ffcbb .RowStride ;};};if _gbgf {for _dbfgc =0;_dbfgc < _dacgc ;_dbfgc ++{_cgdf .Data [_efbf ]=_cccbe (_cgdf .Data [_efbf ],^(_ffcbb .Data [_fdaba ]^_cgdf .Data [_efbf ]),_eebe );
_efbf +=_cgdf .RowStride ;_fdaba +=_ffcbb .RowStride ;};};default:_db .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",_fdfg );return _f .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0056\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004c\u006f\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");
};return nil ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _geee (oldByte ,newByte ,op );};func (_gbfda *byHeight )Less (i ,j int )bool {return _gbfda .Values [i ].Height < _gbfda .Values [j ].Height };
func TstAddSymbol (t *_b .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );_eagb :=_ad .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_eagb );*x +=sym .Width +space ;};func _feda (_caca *Bitmap )(_bfcee *Bitmap ,_adcf int ,_faga error ){const _bgce ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";
if _caca ==nil {return nil ,0,_f .Errorf (_bgce ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _gecc ,_cfag *Bitmap ;if _gecc ,_faga =_bbdb (nil ,_caca );_faga !=nil {return nil ,0,_f .Wrap (_faga ,_bgce ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");
};var (_dabe [13]int ;_afcc ,_gaag int ;);_bced :=12;_dfbf :=_a .NewNumSlice (_bced +1);_cfga :=_a .NewNumSlice (_bced +1);var _ffge *Boxes ;for _dcbg :=0;_dcbg <=_bced ;_dcbg ++{if _dcbg ==0{if _cfag ,_faga =_bbdb (nil ,_gecc );_faga !=nil {return nil ,0,_f .Wrap (_faga ,_bgce ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");
};}else {if _cfag ,_faga =_geaf (_gecc ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_faga !=nil {return nil ,0,_f .Wrap (_faga ,_bgce ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _ffge ,_faga =_cfag .connComponentsBB (4);
_faga !=nil {return nil ,0,_f .Wrap (_faga ,_bgce ,"");};_dabe [_dcbg ]=len (*_ffge );_dfbf .AddInt (_dabe [_dcbg ]);switch _dcbg {case 0:_afcc =_dabe [0];default:_gaag =_dabe [_dcbg -1]-_dabe [_dcbg ];_cfga .AddInt (_gaag );};_gecc =_cfag ;};_gbgg :=true ;
_dccg :=2;var _adcg ,_badf int ;for _gddg :=1;_gddg < len (*_cfga );_gddg ++{if _adcg ,_faga =_dfbf .GetInt (_gddg );_faga !=nil {return nil ,0,_f .Wrap (_faga ,_bgce ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");
};if _gbgg &&_adcg < int (0.3*float32 (_afcc )){_dccg =_gddg +1;_gbgg =false ;};if _gaag ,_faga =_cfga .GetInt (_gddg );_faga !=nil {return nil ,0,_f .Wrap (_faga ,_bgce ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");
};if _gaag > _badf {_badf =_gaag ;};};_fdfcf :=_caca .XResolution ;if _fdfcf ==0{_fdfcf =150;};if _fdfcf > 110{_dccg ++;};if _dccg < 2{_db .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");
_dccg =2;};_adcf =_dccg +1;if _bfcee ,_faga =_dcffg (nil ,_caca ,_dccg +1,1);_faga !=nil {return nil ,0,_f .Wrap (_faga ,_bgce ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _bfcee ,_adcf ,nil ;
};func _dffa (_cefe ,_bcce *Bitmap ,_bbac ,_ggda ,_cbg ,_cgde ,_bbc int ,_dce CombinationOperator )error {var _bbeb int ;_cfadc :=func (){_bbeb ++;_cbg +=_bcce .RowStride ;_cgde +=_cefe .RowStride ;_bbc +=_cefe .RowStride };for _bbeb =_bbac ;_bbeb < _ggda ;
_cfadc (){_bafg :=_cbg ;for _dgeb :=_cgde ;_dgeb <=_bbc ;_dgeb ++{_bdgb ,_cgcg :=_bcce .GetByte (_bafg );if _cgcg !=nil {return _cgcg ;};_gbgb ,_cgcg :=_cefe .GetByte (_dgeb );if _cgcg !=nil {return _cgcg ;};if _cgcg =_bcce .SetByte (_bafg ,_geee (_bdgb ,_gbgb ,_dce ));
_cgcg !=nil {return _cgcg ;};_bafg ++;};};return nil ;};func (_fgcf *Bitmap )SizesEqual (s *Bitmap )bool {if _fgcf ==s {return true ;};if _fgcf .Width !=s .Width ||_fgcf .Height !=s .Height {return false ;};return true ;};func _agfe (_fcd ,_gfcc *Bitmap ,_egac ,_abdf ,_cfdc ,_fgf ,_bfaa ,_adegf ,_afb ,_bbbf int ,_bfe CombinationOperator ,_ceec int )error {var _ccddc int ;
_fec :=func (){_ccddc ++;_cfdc +=_gfcc .RowStride ;_fgf +=_fcd .RowStride ;_bfaa +=_fcd .RowStride };for _ccddc =_egac ;_ccddc < _abdf ;_fec (){var _dcc uint16 ;_fgca :=_cfdc ;for _bcagg :=_fgf ;_bcagg <=_bfaa ;_bcagg ++{_cfge ,_ddbd :=_gfcc .GetByte (_fgca );
if _ddbd !=nil {return _ddbd ;};_eegc ,_ddbd :=_fcd .GetByte (_bcagg );if _ddbd !=nil {return _ddbd ;};_dcc =(_dcc |(uint16 (_eegc )&0xff))<<uint (_bbbf );_eegc =byte (_dcc >>8);if _ddbd =_gfcc .SetByte (_fgca ,_geee (_cfge ,_eegc ,_bfe ));_ddbd !=nil {return _ddbd ;
};_fgca ++;_dcc <<=uint (_afb );if _bcagg ==_bfaa {_eegc =byte (_dcc >>(8-uint8 (_bbbf )));if _ceec !=0{_eegc =_eaaeb (uint (8+_adegf ),_eegc );};_cfge ,_ddbd =_gfcc .GetByte (_fgca );if _ddbd !=nil {return _ddbd ;};if _ddbd =_gfcc .SetByte (_fgca ,_geee (_cfge ,_eegc ,_bfe ));
_ddbd !=nil {return _ddbd ;};};};};return nil ;};func _ec (_fc ,_gfgd *Bitmap )(_eg error ){const _bef ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";_fac :=_gfgd .RowStride ;_gae :=_fc .RowStride ;
_ac :=_gfgd .RowStride *4-_fc .RowStride ;var (_fbf ,_bce byte ;_gcc uint32 ;_ba ,_cf ,_bd ,_ecd ,_de ,_gca ,_cegd int ;);for _bd =0;_bd < _gfgd .Height ;_bd ++{_ba =_bd *_fac ;_cf =4*_bd *_gae ;for _ecd =0;_ecd < _fac ;_ecd ++{_fbf =_gfgd .Data [_ba +_ecd ];
_gcc =_cegdf [_fbf ];_gca =_cf +_ecd *4;if _ac !=0&&(_ecd +1)*4> _fc .RowStride {for _de =_ac ;_de > 0;_de --{_bce =byte ((_gcc >>uint (_de *8))&0xff);_cegd =_gca +(_ac -_de );if _eg =_fc .SetByte (_cegd ,_bce );_eg !=nil {return _f .Wrapf (_eg ,_bef ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_de );
};};}else if _eg =_fc .setFourBytes (_gca ,_gcc );_eg !=nil {return _f .Wrap (_eg ,_bef ,"");};if _eg =_fc .setFourBytes (_cf +_ecd *4,_cegdf [_gfgd .Data [_ba +_ecd ]]);_eg !=nil {return _f .Wrap (_eg ,_bef ,"");};};for _de =1;_de < 4;_de ++{for _ecd =0;
_ecd < _gae ;_ecd ++{if _eg =_fc .SetByte (_cf +_de *_gae +_ecd ,_fc .Data [_cf +_ecd ]);_eg !=nil {return _f .Wrapf (_eg ,_bef ,"\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",_de ,_ecd );
};};};};return nil ;};func (_aecf *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _adfb (_aecf ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func _ddaea (_cege ,_acfg *Bitmap ,_ebaef ,_debe int )(*Bitmap ,error ){const _cdefc ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";
if _acfg ==nil {return nil ,_f .Error (_cdefc ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _ebaef < 1||_debe < 1{return nil ,_f .Error (_cdefc ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
};if _ebaef ==1&&_debe ==1{return _bbdb (_cege ,_acfg );};if MorphBC ==SymmetricMorphBC {_fbgf ,_bbafg :=_dcffg (_cege ,_acfg ,_ebaef ,_debe );if _bbafg !=nil {return nil ,_f .Wrap (_bbafg ,_cdefc ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");
};return _fbgf ,nil ;};_bcbf :=_baef (_ebaef /2,_debe /2);_caac :=8*((_bcbf +7)/8);_agg ,_bbfc :=_acfg .AddBorder (_caac ,0);if _bbfc !=nil {return nil ,_f .Wrapf (_bbfc ,_cdefc ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_caac );
};var _bffb ,_fdab *Bitmap ;if _ebaef ==1||_debe ==1{_bfg :=SelCreateBrick (_debe ,_ebaef ,_debe /2,_ebaef /2,SelHit );_bffb ,_bbfc =_bdcb (nil ,_agg ,_bfg );if _bbfc !=nil {return nil ,_f .Wrap (_bbfc ,_cdefc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};}else {_gegd :=SelCreateBrick (1,_ebaef ,0,_ebaef /2,SelHit );_fgaa ,_gdca :=_dacg (nil ,_agg ,_gegd );if _gdca !=nil {return nil ,_f .Wrap (_gdca ,_cdefc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");
};_bgee :=SelCreateBrick (_debe ,1,_debe /2,0,SelHit );_bffb ,_gdca =_dacg (nil ,_fgaa ,_bgee );if _gdca !=nil {return nil ,_f .Wrap (_gdca ,_cdefc ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _ ,_gdca =_fage (_fgaa ,_bffb ,_gegd );_gdca !=nil {return nil ,_f .Wrap (_gdca ,_cdefc ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_gdca =_fage (_bffb ,_fgaa ,_bgee );_gdca !=nil {return nil ,_f .Wrap (_gdca ,_cdefc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
};};if _fdab ,_bbfc =_bffb .RemoveBorder (_caac );_bbfc !=nil {return nil ,_f .Wrap (_bbfc ,_cdefc ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _cege ==nil {return _fdab ,nil ;};if _ ,_bbfc =_bbdb (_cege ,_fdab );_bbfc !=nil {return nil ,_bbfc ;};return _cege ,nil ;
};func (_eegb MorphProcess )verify (_gfff int ,_dgba ,_dffd *int )error {const _gdfa ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";switch _eegb .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_eegb .Arguments )!=2{return _f .Error (_gdfa ,"\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");
};_cbcc ,_ebgf :=_eegb .getWidthHeight ();if _cbcc <=0||_ebgf <=0{return _f .Error (_gdfa ,"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 :_cbga :=len (_eegb .Arguments );*_dgba +=_cbga ;if _cbga < 1||_cbga > 4{return _f .Error (_gdfa ,"\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 _eabd :=0;_eabd < _cbga ;_eabd ++{if _eegb .Arguments [_eabd ]< 1||_eegb .Arguments [_eabd ]> 4{return _f .Error (_gdfa ,"\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 (_eegb .Arguments )==0{return _f .Error (_gdfa ,"\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");
};_efgd :=_eegb .Arguments [0];if _efgd !=2&&_efgd !=4&&_efgd !=8{return _f .Error (_gdfa ,"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");
};*_dgba -=_fgfc [_efgd /4];case MopAddBorder :if len (_eegb .Arguments )==0{return _f .Error (_gdfa ,"\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");
};_bdae :=_eegb .Arguments [0];if _gfff > 0{return _f .Error (_gdfa ,"\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 _bdae < 1{return _f .Error (_gdfa ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_dffd =_bdae ;};return nil ;};func TstImageBitmapInverseData ()[]byte {_ccba :=_geba .Copy ();
_ccba .InverseData ();return _ccba .Data ;};func (_caf *Bitmap )inverseData (){if _dgga :=_caf .RasterOperation (0,0,_caf .Width ,_caf .Height ,PixNotDst ,nil ,0,0);_dgga !=nil {_db .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_dgga );
};if _caf .Color ==Chocolate {_caf .Color =Vanilla ;}else {_caf .Color =Chocolate ;};};func (_cfea *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _cfea .Copy (),nil ;};_bgba ,_aeba :=_cfea .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );
if _aeba !=nil {return nil ,_f .Wrap (_aeba ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _bgba ,nil ;};func (_eaaf *Bitmaps )selectByIndexes (_fcfcb []int )(*Bitmaps ,error ){_cgbe :=&Bitmaps {};for _ ,_adade :=range _fcfcb {_gfffb ,_cedba :=_eaaf .GetBitmap (_adade );
if _cedba !=nil {return nil ,_f .Wrap (_cedba ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_cgbe .AddBitmap (_gfffb );};return _cgbe ,nil ;};var (_adca =_fe ();_cegdf =_bad ();_cdef =_fgc (););func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};
func (_gff *Bitmap )addPadBits ()(_aad error ){const _cac ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_daaf :=_gff .Width %8;if _daaf ==0{return nil ;};_begb :=_gff .Width /8;_defe :=_be .NewReader (_gff .Data );
_bgc :=make ([]byte ,_gff .Height *_gff .RowStride );_gee :=_be .NewWriterMSB (_bgc );_eddc :=make ([]byte ,_begb );var (_aecc int ;_dbe uint64 ;);for _aecc =0;_aecc < _gff .Height ;_aecc ++{if _ ,_aad =_defe .Read (_eddc );_aad !=nil {return _f .Wrap (_aad ,_cac ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");
};if _ ,_aad =_gee .Write (_eddc );_aad !=nil {return _f .Wrap (_aad ,_cac ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _dbe ,_aad =_defe .ReadBits (byte (_daaf ));_aad !=nil {return _f .Wrap (_aad ,_cac ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");
};if _aad =_gee .WriteByte (byte (_dbe )<<uint (8-_daaf ));_aad !=nil {return _f .Wrap (_aad ,_cac ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");};};_gff .Data =_gee .Data ();return nil ;};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;
MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func MakePixelCentroidTab8 ()[]int {return _fgag ()};func TstImageBitmap ()*Bitmap {return _geba .Copy ()};type CombinationOperator int ;func _cccbe (_cabg ,_babe ,_fdgd byte )byte {return (_cabg &^(_fdgd ))|(_babe &_fdgd )};
func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _aaaa (d ,s ,hSize ,vSize )};func (_ebdg *Bitmap )SetDefaultPixel (){for _adgd :=range _ebdg .Data {_ebdg .Data [_adgd ]=byte (0xff);};};var _deac [256]uint8 ;func (_dee *Bitmap )removeBorderGeneral (_eebb ,_gfgf ,_deaf ,_bff int )(*Bitmap ,error ){const _bcba ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
if _eebb < 0||_gfgf < 0||_deaf < 0||_bff < 0{return nil ,_f .Error (_bcba ,"\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");};_eced ,_eag :=_dee .Width ,_dee .Height ;
_cefc :=_eced -_eebb -_gfgf ;_decg :=_eag -_deaf -_bff ;if _cefc <=0{return nil ,_f .Errorf (_bcba ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_cefc );};if _decg <=0{return nil ,_f .Errorf (_bcba ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_decg );
};_eeg :=New (_cefc ,_decg );_eeg .Color =_dee .Color ;_adde :=_eeg .RasterOperation (0,0,_cefc ,_decg ,PixSrc ,_dee ,_eebb ,_deaf );if _adde !=nil {return nil ,_f .Wrap (_adde ,_bcba ,"");};return _eeg ,nil ;};func (_aabb *Bitmaps )WidthSorter ()func (_cceg ,_debc int )bool {return func (_dbfca ,_dadb int )bool {return _aabb .Values [_dbfca ].Width < _aabb .Values [_dadb ].Width };
};type BoundaryCondition int ;func _eggg (_efef ,_daega int ,_cdda string )*Selection {_acdd :=&Selection {Height :_efef ,Width :_daega ,Name :_cdda };_acdd .Data =make ([][]SelectionValue ,_efef );for _fdbgg :=0;_fdbgg < _efef ;_fdbgg ++{_acdd .Data [_fdbgg ]=make ([]SelectionValue ,_daega );
};return _acdd ;};var (_egcbd *Bitmap ;_geba *Bitmap ;);func _bea (_df ,_cd *Bitmap )(_bab error ){const _bda ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";_cb :=_cd .RowStride ;_gaga :=_df .RowStride ;
var _ada ,_fg ,_ege ,_ff ,_aa int ;for _ege =0;_ege < _cd .Height ;_ege ++{_ada =_ege *_cb ;_fg =8*_ege *_gaga ;for _ff =0;_ff < _cb ;_ff ++{if _bab =_df .setEightBytes (_fg +_ff *8,_cdef [_cd .Data [_ada +_ff ]]);_bab !=nil {return _f .Wrap (_bab ,_bda ,"");
};};for _aa =1;_aa < 8;_aa ++{for _ff =0;_ff < _gaga ;_ff ++{if _bab =_df .SetByte (_fg +_aa *_gaga +_ff ,_df .Data [_fg +_ff ]);_bab !=nil {return _f .Wrap (_bab ,_bda ,"");};};};};return nil ;};type Color int ;func _adfb (_cec *Bitmap ,_affde ,_aadd ,_fgaea ,_babbd int ,_bedf RasterOperator ,_feee *Bitmap ,_gcfd ,_bege int )error {const _dbbd ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";
if _cec ==nil {return _f .Error (_dbbd ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _bedf ==PixDst {return nil ;};switch _bedf {case PixClr ,PixSet ,PixNotDst :_efbd (_cec ,_affde ,_aadd ,_fgaea ,_babbd ,_bedf );
return nil ;};if _feee ==nil {_db .Log .Debug ("\u0052a\u0073\u0074e\u0072\u004f\u0070\u0065r\u0061\u0074\u0069o\u006e\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020bi\u0074\u006d\u0061p\u0020\u0069s\u0020\u006e\u006f\u0074\u0020\u0064e\u0066\u0069n\u0065\u0064");
return _f .Error (_dbbd ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _cbgc :=_dgfb (_cec ,_affde ,_aadd ,_fgaea ,_babbd ,_bedf ,_feee ,_gcfd ,_bege );_cbgc !=nil {return _f .Wrap (_cbgc ,_dbbd ,"");};return nil ;
};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func TstESymbol (t *_b .T ,scale ...int )*Bitmap {_ccgc ,_dbc :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_c .NoError (t ,_dbc );return TstGetScaledSymbol (t ,_ccgc ,scale ...);
};type MorphOperation int ;func (_fgfce Points )Get (i int )(Point ,error ){if i > len (_fgfce )-1{return Point {},_f .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _fgfce [i ],nil ;};func (_gbfa *Boxes )Get (i int )(*_ad .Rectangle ,error ){const _cgedc ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _gbfa ==nil {return nil ,_f .Error (_cgedc ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if i > len (*_gbfa )-1{return nil ,_f .Errorf (_cgedc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_gbfa )[i ],nil ;};func (_eede *Boxes )selectWithIndicator (_fadf *_a .NumSlice )(_fff *Boxes ,_dgac error ){const _dfde ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _eede ==nil {return nil ,_f .Error (_dfde ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _fadf ==nil {return nil ,_f .Error (_dfde ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if len (*_fadf )!=len (*_eede ){return nil ,_f .Error (_dfde ,"\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 _dbfa ,_gegae int ;for _afbd :=0;_afbd < len (*_fadf );_afbd ++{if _dbfa ,_dgac =_fadf .GetInt (_afbd );_dgac !=nil {return nil ,_f .Wrap (_dgac ,_dfde ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _dbfa ==1{_gegae ++;
};};if _gegae ==len (*_eede ){return _eede ,nil ;};_bffe :=Boxes {};for _fabe :=0;_fabe < len (*_fadf );_fabe ++{_dbfa =int ((*_fadf )[_fabe ]);if _dbfa ==0{continue ;};_bffe =append (_bffe ,(*_eede )[_fabe ]);};_fff =&_bffe ;return _fff ,nil ;};func (_dbbc *Bitmap )clipRectangle (_gade ,_acge *_ad .Rectangle )(_adfe *Bitmap ,_degf error ){const _cfgc ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if _gade ==nil {return nil ,_f .Error (_cfgc ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_edg ,_egf :=_dbbc .Width ,_dbbc .Height ;_dbef ,_degf :=ClipBoxToRectangle (_gade ,_edg ,_egf );if _degf !=nil {_db .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",_degf );
return nil ,nil ;};_ddg ,_fcc :=_dbef .Min .X ,_dbef .Min .Y ;_fdfc ,_eec :=_dbef .Max .X -_dbef .Min .X ,_dbef .Max .Y -_dbef .Min .Y ;_adfe =New (_fdfc ,_eec );_adfe .Text =_dbbc .Text ;if _degf =_adfe .RasterOperation (0,0,_fdfc ,_eec ,PixSrc ,_dbbc ,_ddg ,_fcc );
_degf !=nil {return nil ,_f .Wrap (_degf ,_cfgc ,"");};if _acge !=nil {*_acge =*_dbef ;};return _adfe ,nil ;};func _dcffg (_dfdg ,_gbfe *Bitmap ,_fgba ,_edfcc int )(*Bitmap ,error ){const _dadae ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";
if _gbfe ==nil {return nil ,_f .Error (_dadae ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _fgba < 1||_edfcc < 1{return nil ,_f .Error (_dadae ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
};if _fgba ==1&&_edfcc ==1{return _gbfe .Copy (),nil ;};if _fgba ==1||_edfcc ==1{_afdd :=SelCreateBrick (_edfcc ,_fgba ,_edfcc /2,_fgba /2,SelHit );var _fgaf error ;_dfdg ,_fgaf =_bdcb (_dfdg ,_gbfe ,_afdd );if _fgaf !=nil {return nil ,_f .Wrap (_fgaf ,_dadae ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _dfdg ,nil ;};_daac :=SelCreateBrick (1,_fgba ,0,_fgba /2,SelHit );_facd :=SelCreateBrick (_edfcc ,1,_edfcc /2,0,SelHit );_cfff ,_fegb :=_dacg (nil ,_gbfe ,_daac );if _fegb !=nil {return nil ,_f .Wrap (_fegb ,_dadae ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _dfdg ,_fegb =_dacg (_dfdg ,_cfff ,_facd );_fegb !=nil {return nil ,_f .Wrap (_fegb ,_dadae ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_fegb =_fage (_cfff ,_dfdg ,_daac );_fegb !=nil {return nil ,_f .Wrap (_fegb ,_dadae ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};if _ ,_fegb =_fage (_dfdg ,_cfff ,_facd );_fegb !=nil {return nil ,_f .Wrap (_fegb ,_dadae ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _dfdg ,nil ;};func _dbfcg (_bgcb ,_caef *Bitmap ,_edgf *Selection )(*Bitmap ,error ){const _afga ="\u006f\u0070\u0065\u006e";
var _affg error ;_bgcb ,_affg =_gbdf (_bgcb ,_caef ,_edgf );if _affg !=nil {return nil ,_f .Wrap (_affg ,_afga ,"");};_gfgef ,_affg :=_fage (nil ,_caef ,_edgf );if _affg !=nil {return nil ,_f .Wrap (_affg ,_afga ,"");};_ ,_affg =_dacg (_bgcb ,_gfgef ,_edgf );
if _affg !=nil {return nil ,_f .Wrap (_affg ,_afga ,"");};return _bgcb ,nil ;};func _agec (_fbad *Bitmap ,_cgdc *_a .Stack ,_cfadf ,_gdgd int )(_gfda *_ad .Rectangle ,_cfgbg error ){const _egdc ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _fbad ==nil {return nil ,_f .Error (_egdc ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _cgdc ==nil {return nil ,_f .Error (_egdc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};_dffdd ,_dbfab :=_fbad .Width ,_fbad .Height ;_dddb :=_dffdd -1;_ecc :=_dbfab -1;if _cfadf < 0||_cfadf > _dddb ||_gdgd < 0||_gdgd > _ecc ||!_fbad .GetPixel (_cfadf ,_gdgd ){return nil ,nil ;};_ccgb :=_ad .Rect (100000,100000,0,0);if _cfgbg =_cbfd (_cgdc ,_cfadf ,_cfadf ,_gdgd ,1,_ecc ,&_ccgb );
_cfgbg !=nil {return nil ,_f .Wrap (_cfgbg ,_egdc ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _cfgbg =_cbfd (_cgdc ,_cfadf ,_cfadf ,_gdgd +1,-1,_ecc ,&_ccgb );_cfgbg !=nil {return nil ,_f .Wrap (_cfgbg ,_egdc ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
};_ccgb .Min .X ,_ccgb .Max .X =_cfadf ,_cfadf ;_ccgb .Min .Y ,_ccgb .Max .Y =_gdgd ,_gdgd ;var (_gagf *fillSegment ;_gcgd int ;);for _cgdc .Len ()> 0{if _gagf ,_cfgbg =_gcbb (_cgdc );_cfgbg !=nil {return nil ,_f .Wrap (_cfgbg ,_egdc ,"");};_gdgd =_gagf ._fbfd ;
for _cfadf =_gagf ._acac -1;_cfadf >=0&&_fbad .GetPixel (_cfadf ,_gdgd );_cfadf --{if _cfgbg =_fbad .SetPixel (_cfadf ,_gdgd ,0);_cfgbg !=nil {return nil ,_f .Wrap (_cfgbg ,_egdc ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _cfadf >=_gagf ._acac -1{for {for _cfadf ++;
_cfadf <=_gagf ._eaaee +1&&_cfadf <=_dddb &&!_fbad .GetPixel (_cfadf ,_gdgd );_cfadf ++{};_gcgd =_cfadf ;if !(_cfadf <=_gagf ._eaaee +1&&_cfadf <=_dddb ){break ;};for ;_cfadf <=_dddb &&_fbad .GetPixel (_cfadf ,_gdgd );_cfadf ++{if _cfgbg =_fbad .SetPixel (_cfadf ,_gdgd ,0);
_cfgbg !=nil {return nil ,_f .Wrap (_cfgbg ,_egdc ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _cfgbg =_cbfd (_cgdc ,_gcgd ,_cfadf -1,_gagf ._fbfd ,_gagf ._ccge ,_ecc ,&_ccgb );_cfgbg !=nil {return nil ,_f .Wrap (_cfgbg ,_egdc ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
};if _cfadf > _gagf ._eaaee {if _cfgbg =_cbfd (_cgdc ,_gagf ._eaaee +1,_cfadf -1,_gagf ._fbfd ,-_gagf ._ccge ,_ecc ,&_ccgb );_cfgbg !=nil {return nil ,_f .Wrap (_cfgbg ,_egdc ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};};continue ;};_gcgd =_cfadf +1;if _gcgd < _gagf ._acac {if _cfgbg =_cbfd (_cgdc ,_gcgd ,_gagf ._acac -1,_gagf ._fbfd ,-_gagf ._ccge ,_ecc ,&_ccgb );_cfgbg !=nil {return nil ,_f .Wrap (_cfgbg ,_egdc ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_cfadf =_gagf ._acac ;for {for ;_cfadf <=_dddb &&_fbad .GetPixel (_cfadf ,_gdgd );_cfadf ++{if _cfgbg =_fbad .SetPixel (_cfadf ,_gdgd ,0);_cfgbg !=nil {return nil ,_f .Wrap (_cfgbg ,_egdc ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _cfgbg =_cbfd (_cgdc ,_gcgd ,_cfadf -1,_gagf ._fbfd ,_gagf ._ccge ,_ecc ,&_ccgb );
_cfgbg !=nil {return nil ,_f .Wrap (_cfgbg ,_egdc ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _cfadf > _gagf ._eaaee {if _cfgbg =_cbfd (_cgdc ,_gagf ._eaaee +1,_cfadf -1,_gagf ._fbfd ,-_gagf ._ccge ,_ecc ,&_ccgb );_cfgbg !=nil {return nil ,_f .Wrap (_cfgbg ,_egdc ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _cfadf ++;_cfadf <=_gagf ._eaaee +1&&_cfadf <=_dddb &&!_fbad .GetPixel (_cfadf ,_gdgd );_cfadf ++{};_gcgd =_cfadf ;if !(_cfadf <=_gagf ._eaaee +1&&_cfadf <=_dddb ){break ;};};};_ccgb .Max .X ++;_ccgb .Max .Y ++;return &_ccgb ,nil ;};func (_ebgb CombinationOperator )String ()string {var _ffcd string ;
switch _ebgb {case CmbOpOr :_ffcd ="\u004f\u0052";case CmbOpAnd :_ffcd ="\u0041\u004e\u0044";case CmbOpXor :_ffcd ="\u0058\u004f\u0052";case CmbOpXNor :_ffcd ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_ffcd ="\u0052E\u0050\u004c\u0041\u0043\u0045";
case CmbOpNot :_ffcd ="\u004e\u004f\u0054";};return _ffcd ;};func (_bgg *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_bgg .Width ,Height :_bgg .Height ,RowStride :_bgg .RowStride ,Color :_bgg .Color ,Text :_bgg .Text ,BitmapNumber :_bgg .BitmapNumber ,Special :_bgg .Special ,Data :make ([]byte ,len (_bgg .Data ))};
};func (_dfae *Bitmap )ClipRectangle (box *_ad .Rectangle )(_adf *Bitmap ,_egcd *_ad .Rectangle ,_dcfe error ){const _bed ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";if box ==nil {return nil ,nil ,_f .Error (_bed ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};_ebae ,_caec :=_dfae .Width ,_dfae .Height ;_ead :=_ad .Rect (0,0,_ebae ,_caec );if !box .Overlaps (_ead ){return nil ,nil ,_f .Error (_bed ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");};_cga :=box .Intersect (_ead );
_aba ,_ccbd :=_cga .Min .X ,_cga .Min .Y ;_eadg ,_bfa :=_cga .Dx (),_cga .Dy ();_adf =New (_eadg ,_bfa );_adf .Text =_dfae .Text ;if _dcfe =_adf .RasterOperation (0,0,_eadg ,_bfa ,PixSrc ,_dfae ,_aba ,_ccbd );_dcfe !=nil {return nil ,nil ,_f .Wrap (_dcfe ,_bed ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
};_egcd =&_cga ;return _adf ,_egcd ,nil ;};func (_bcfg *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_abcc bool ,_bdd error ){const _gea ="\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 =_efe ();};_gce :=_bcfg .Width >>3;_deff :=_bcfg .Width &7;_ggfd :=byte (0xff<<uint (8-_deff ));var (_gda ,_bdg ,_gfa ,_dgf int ;_ebac byte ;);for _gda =0;_gda < _bcfg .Height ;_gda ++{_gfa =_bcfg .RowStride *_gda ;for _bdg =0;_bdg < _gce ;
_bdg ++{_ebac ,_bdd =_bcfg .GetByte (_gfa +_bdg );if _bdd !=nil {return false ,_f .Wrap (_bdd ,_gea ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_dgf +=tab8 [_ebac ];};if _deff !=0{_ebac ,_bdd =_bcfg .GetByte (_gfa +_bdg );if _bdd !=nil {return false ,_f .Wrap (_bdd ,_gea ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");
};_ebac &=_ggfd ;_dgf +=tab8 [_ebac ];};if _dgf > thresh {return true ,nil ;};};return _abcc ,nil ;};func TstImageBitmapData ()[]byte {return _geba .Data };func TstGetScaledSymbol (t *_b .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;
};if scale [0]==1{return sm ;};_efag ,_gdegg :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_c .NoError (t ,_gdegg );return _efag ;};type RasterOperator int ;func TstCSymbol (t *_b .T )*Bitmap {t .Helper ();
_aebag :=New (6,6);_c .NoError (t ,_aebag .SetPixel (1,0,1));_c .NoError (t ,_aebag .SetPixel (2,0,1));_c .NoError (t ,_aebag .SetPixel (3,0,1));_c .NoError (t ,_aebag .SetPixel (4,0,1));_c .NoError (t ,_aebag .SetPixel (0,1,1));_c .NoError (t ,_aebag .SetPixel (5,1,1));
_c .NoError (t ,_aebag .SetPixel (0,2,1));_c .NoError (t ,_aebag .SetPixel (0,3,1));_c .NoError (t ,_aebag .SetPixel (0,4,1));_c .NoError (t ,_aebag .SetPixel (5,4,1));_c .NoError (t ,_aebag .SetPixel (1,5,1));_c .NoError (t ,_aebag .SetPixel (2,5,1));
_c .NoError (t ,_aebag .SetPixel (3,5,1));_c .NoError (t ,_aebag .SetPixel (4,5,1));return _aebag ;};func _fage (_bfea ,_gbcf *Bitmap ,_ebfa *Selection )(*Bitmap ,error ){const _bceaf ="\u0065\u0072\u006fd\u0065";var (_abga error ;_becaa *Bitmap ;);_bfea ,_abga =_fge (_bfea ,_gbcf ,_ebfa ,&_becaa );
if _abga !=nil {return nil ,_f .Wrap (_abga ,_bceaf ,"");};if _abga =_bfea .setAll ();_abga !=nil {return nil ,_f .Wrap (_abga ,_bceaf ,"");};var _agea SelectionValue ;for _ebge :=0;_ebge < _ebfa .Height ;_ebge ++{for _ccf :=0;_ccf < _ebfa .Width ;_ccf ++{_agea =_ebfa .Data [_ebge ][_ccf ];
if _agea ==SelHit {_abga =_adfb (_bfea ,_ebfa .Cx -_ccf ,_ebfa .Cy -_ebge ,_gbcf .Width ,_gbcf .Height ,PixSrcAndDst ,_becaa ,0,0);if _abga !=nil {return nil ,_f .Wrap (_abga ,_bceaf ,"");};};};};if MorphBC ==SymmetricMorphBC {return _bfea ,nil ;};_aead ,_bdab ,_dgdb ,_bbgd :=_ebfa .findMaxTranslations ();
if _aead > 0{if _abga =_bfea .RasterOperation (0,0,_aead ,_gbcf .Height ,PixClr ,nil ,0,0);_abga !=nil {return nil ,_f .Wrap (_abga ,_bceaf ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _dgdb > 0{if _abga =_bfea .RasterOperation (_gbcf .Width -_dgdb ,0,_dgdb ,_gbcf .Height ,PixClr ,nil ,0,0);
_abga !=nil {return nil ,_f .Wrap (_abga ,_bceaf ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _bdab > 0{if _abga =_bfea .RasterOperation (0,0,_gbcf .Width ,_bdab ,PixClr ,nil ,0,0);_abga !=nil {return nil ,_f .Wrap (_abga ,_bceaf ,"\u0079\u0070\u0020\u003e\u0020\u0030");
};};if _bbgd > 0{if _abga =_bfea .RasterOperation (0,_gbcf .Height -_bbgd ,_gbcf .Width ,_bbgd ,PixClr ,nil ,0,0);_abga !=nil {return nil ,_f .Wrap (_abga ,_bceaf ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _bfea ,nil ;};func (_eaa *Bitmap )SetPixel (x ,y int ,pixel byte )error {_ggg :=_eaa .GetByteIndex (x ,y );
if _ggg > len (_eaa .Data )-1{return _f .Errorf ("\u0053\u0065\u0074\u0050\u0069\u0078\u0065\u006c","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",_ggg );};_abgg :=_eaa .GetBitOffset (x );
_aab :=uint (7-_abgg );_cef :=_eaa .Data [_ggg ];var _aefb byte ;if pixel ==1{_aefb =_cef |(pixel &0x01<<_aab );}else {_aefb =_cef &^(1<<_aab );};_eaa .Data [_ggg ]=_aefb ;return nil ;};func (_addg *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _bfbab ="\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 >=_addg .IntSlice .Size (){return 0,_f .Errorf (_bfbab ,"\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 (_addg .XAtIndex (i )),nil ;};func (_fbdfb *Bitmap )connComponentsBitmapsBB (_gece *Bitmaps ,_fbfc int )(_gfea *Boxes ,_cfeag error ){const _agaa ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";
if _fbfc !=4&&_fbfc !=8{return nil ,_f .Error (_agaa ,"\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 _gece ==nil {return nil ,_f .Error (_agaa ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
};if len (_gece .Values )> 0{return nil ,_f .Error (_agaa ,"\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 _fbdfb .Zero (){return &Boxes {},nil ;
};var (_fgad ,_fbeb ,_dbfg ,_gef *Bitmap ;);_fbdfb .setPadBits (0);if _fgad ,_cfeag =_bbdb (nil ,_fbdfb );_cfeag !=nil {return nil ,_f .Wrap (_cfeag ,_agaa ,"\u0062\u006d\u0031");};if _fbeb ,_cfeag =_bbdb (nil ,_fbdfb );_cfeag !=nil {return nil ,_f .Wrap (_cfeag ,_agaa ,"\u0062\u006d\u0032");
};_bebg :=&_a .Stack {};_bebg .Aux =&_a .Stack {};_gfea =&Boxes {};var (_cbfa ,_gagc int ;_ccg _ad .Point ;_daca bool ;_bcbe *_ad .Rectangle ;);for {if _ccg ,_daca ,_cfeag =_fgad .nextOnPixel (_cbfa ,_gagc );_cfeag !=nil {return nil ,_f .Wrap (_cfeag ,_agaa ,"");
};if !_daca {break ;};if _bcbe ,_cfeag =_acgd (_fgad ,_bebg ,_ccg .X ,_ccg .Y ,_fbfc );_cfeag !=nil {return nil ,_f .Wrap (_cfeag ,_agaa ,"");};if _cfeag =_gfea .Add (_bcbe );_cfeag !=nil {return nil ,_f .Wrap (_cfeag ,_agaa ,"");};if _dbfg ,_cfeag =_fgad .clipRectangle (_bcbe ,nil );
_cfeag !=nil {return nil ,_f .Wrap (_cfeag ,_agaa ,"\u0062\u006d\u0033");};if _gef ,_cfeag =_fbeb .clipRectangle (_bcbe ,nil );_cfeag !=nil {return nil ,_f .Wrap (_cfeag ,_agaa ,"\u0062\u006d\u0034");};if _ ,_cfeag =_caaa (_dbfg ,_dbfg ,_gef );_cfeag !=nil {return nil ,_f .Wrap (_cfeag ,_agaa ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");
};if _cfeag =_fbeb .RasterOperation (_bcbe .Min .X ,_bcbe .Min .Y ,_bcbe .Dx (),_bcbe .Dy (),PixSrcXorDst ,_dbfg ,0,0);_cfeag !=nil {return nil ,_f .Wrap (_cfeag ,_agaa ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");
};_gece .AddBitmap (_dbfg );_cbfa =_ccg .X ;_gagc =_ccg .Y ;};_gece .Boxes =*_gfea ;return _gfea ,nil ;};func TstWSymbol (t *_b .T ,scale ...int )*Bitmap {_abfb ,_fgada :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_c .NoError (t ,_fgada );return TstGetScaledSymbol (t ,_abfb ,scale ...);
};const (_ddcg shift =iota ;_cdabe ;);func TstTSymbol (t *_b .T ,scale ...int )*Bitmap {_fceg ,_gfcb :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_c .NoError (t ,_gfcb );return TstGetScaledSymbol (t ,_fceg ,scale ...);};func (_dfg *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _dfg .Copy (),nil ;
};_dfb ,_cbe :=_dfg .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _cbe !=nil {return nil ,_f .Wrap (_cbe ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _dfb ,nil ;};var (_ggge =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};
_ebaed =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func (_eedf *ClassedPoints )Len ()int {return _eedf .IntSlice .Size ()};const _abcca =5000;func (_fadff *Bitmaps )AddBox (box *_ad .Rectangle ){_fadff .Boxes =append (_fadff .Boxes ,box )};
func _cbfd (_gefb *_a .Stack ,_fafd ,_gadba ,_dbgd ,_faac ,_eddg int ,_aefg *_ad .Rectangle )(_gggf error ){const _aebd ="\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 _gefb ==nil {return _f .Error (_aebd ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _aefg ==nil {return _f .Error (_aebd ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
};_aefg .Min .X =_a .Min (_aefg .Min .X ,_fafd );_aefg .Max .X =_a .Max (_aefg .Max .X ,_gadba );_aefg .Min .Y =_a .Min (_aefg .Min .Y ,_dbgd );_aefg .Max .Y =_a .Max (_aefg .Max .Y ,_dbgd );if !(_dbgd +_faac >=0&&_dbgd +_faac <=_eddg ){return nil ;};if _gefb .Aux ==nil {return _f .Error (_aebd ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");
};var _gdcc *fillSegment ;_cba ,_ffggb :=_gefb .Aux .Pop ();if _ffggb {if _gdcc ,_ffggb =_cba .(*fillSegment );!_ffggb {return _f .Error (_aebd ,"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 {_gdcc =&fillSegment {};};_gdcc ._acac =_fafd ;_gdcc ._eaaee =_gadba ;_gdcc ._fbfd =_dbgd ;_gdcc ._ccge =_faac ;_gefb .Push (_gdcc );return nil ;};func _gbga (_bbee ,_cdg ,_gggd *Bitmap )(*Bitmap ,error ){const _cce ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";
if _cdg ==nil {return nil ,_f .Error (_cce ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _gggd ==nil {return nil ,_f .Error (_cce ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _caea error ;switch {case _bbee ==_cdg :if _caea =_bbee .RasterOperation (0,0,_cdg .Width ,_cdg .Height ,PixNotSrcAndDst ,_gggd ,0,0);
_caea !=nil {return nil ,_f .Wrap (_caea ,_cce ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _bbee ==_gggd :if _caea =_bbee .RasterOperation (0,0,_cdg .Width ,_cdg .Height ,PixNotSrcAndDst ,_cdg ,0,0);_caea !=nil {return nil ,_f .Wrap (_caea ,_cce ,"\u0064 \u003d\u003d\u0020\u0073\u0032");
};default:_bbee ,_caea =_bbdb (_bbee ,_cdg );if _caea !=nil {return nil ,_f .Wrap (_caea ,_cce ,"");};if _caea =_bbee .RasterOperation (0,0,_cdg .Width ,_cdg .Height ,PixNotSrcAndDst ,_gggd ,0,0);_caea !=nil {return nil ,_f .Wrap (_caea ,_cce ,"\u0064e\u0066\u0061\u0075\u006c\u0074");
};};return _bbee ,nil ;};func (_gfde *Bitmaps )CountPixels ()*_a .NumSlice {_edcg :=&_a .NumSlice {};for _ ,_gbeg :=range _gfde .Values {_edcg .AddInt (_gbeg .CountPixels ());};return _edcg ;};func (_begea *BitmapsArray )AddBox (box *_ad .Rectangle ){_begea .Boxes =append (_begea .Boxes ,box )};
func _ccc (_edd ,_fdf *Bitmap ,_fag int ,_egc []byte ,_fcf int )(_fdg error ){const _acd ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";var (_cdd ,_daa ,_bgbc ,_eac ,_gdeg ,_bde ,_fef ,_fab int ;
_ebf ,_fca ,_dcf ,_bdaf uint32 ;_dbbb ,_geg byte ;_gdef uint16 ;);_cbd :=make ([]byte ,4);_gdefe :=make ([]byte ,4);for _bgbc =0;_bgbc < _edd .Height -1;_bgbc ,_eac =_bgbc +2,_eac +1{_cdd =_bgbc *_edd .RowStride ;_daa =_eac *_fdf .RowStride ;for _gdeg ,_bde =0,0;
_gdeg < _fcf ;_gdeg ,_bde =_gdeg +4,_bde +1{for _fef =0;_fef < 4;_fef ++{_fab =_cdd +_gdeg +_fef ;if _fab <=len (_edd .Data )-1&&_fab < _cdd +_edd .RowStride {_cbd [_fef ]=_edd .Data [_fab ];}else {_cbd [_fef ]=0x00;};_fab =_cdd +_edd .RowStride +_gdeg +_fef ;
if _fab <=len (_edd .Data )-1&&_fab < _cdd +(2*_edd .RowStride ){_gdefe [_fef ]=_edd .Data [_fab ];}else {_gdefe [_fef ]=0x00;};};_ebf =_gfg .BigEndian .Uint32 (_cbd );_fca =_gfg .BigEndian .Uint32 (_gdefe );_dcf =_ebf &_fca ;_dcf |=_dcf <<1;_bdaf =_ebf |_fca ;
_bdaf &=_bdaf <<1;_fca =_dcf &_bdaf ;_fca &=0xaaaaaaaa;_ebf =_fca |(_fca <<7);_dbbb =byte (_ebf >>24);_geg =byte ((_ebf >>8)&0xff);_fab =_daa +_bde ;if _fab +1==len (_fdf .Data )-1||_fab +1>=_daa +_fdf .RowStride {if _fdg =_fdf .SetByte (_fab ,_egc [_dbbb ]);
_fdg !=nil {return _f .Wrapf (_fdg ,_acd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_fab );};}else {_gdef =(uint16 (_egc [_dbbb ])<<8)|uint16 (_egc [_geg ]);if _fdg =_fdf .setTwoBytes (_fab ,_gdef );_fdg !=nil {return _f .Wrapf (_fdg ,_acd ,"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",_fab );
};_bde ++;};};};return nil ;};func (_caa *Bitmap )SetPadBits (value int ){_caa .setPadBits (value )};type Point struct{X ,Y float32 ;};func _dgfa (_acea ,_beed *Bitmap ,_baee CombinationOperator )*Bitmap {_fgae :=New (_acea .Width ,_acea .Height );for _aga :=0;
_aga < len (_fgae .Data );_aga ++{_fgae .Data [_aga ]=_geee (_acea .Data [_aga ],_beed .Data [_aga ],_baee );};return _fgae ;};func (_cccf Points )YSorter ()func (_dfda ,_fedc int )bool {return func (_bgge ,_egg int )bool {return _cccf [_bgge ].Y < _cccf [_egg ].Y };
};func (_dbgg Points )GetGeometry (i int )(_gdg ,_aaef float32 ,_gga error ){if i > len (_dbgg )-1{return 0,0,_f .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};_dcgd :=_dbgg [i ];return _dcgd .X ,_dcgd .Y ,nil ;};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _cff ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_defc :=_fdb (width ,height );_defc .Data =data ;if len (data )< height *_defc .RowStride {return nil ,_f .Errorf (_cff ,"\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 *_defc .RowStride );
};return _defc ,nil ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_ad .Rectangle ;};func _efbd (_dedd *Bitmap ,_degfb ,_eebf ,_fgdg ,_cdfee int ,_ecdfd RasterOperator ){if _degfb < 0{_fgdg +=_degfb ;_degfb =0;};_gcebb :=_degfb +_fgdg -_dedd .Width ;
if _gcebb > 0{_fgdg -=_gcebb ;};if _eebf < 0{_cdfee +=_eebf ;_eebf =0;};_bfceec :=_eebf +_cdfee -_dedd .Height ;if _bfceec > 0{_cdfee -=_bfceec ;};if _fgdg <=0||_cdfee <=0{return ;};if (_degfb &7)==0{_ffcba (_dedd ,_degfb ,_eebf ,_fgdg ,_cdfee ,_ecdfd );
}else {_gbffc (_dedd ,_degfb ,_eebf ,_fgdg ,_cdfee ,_ecdfd );};};func (_bbdf *byWidth )Swap (i ,j int ){_bbdf .Values [i ],_bbdf .Values [j ]=_bbdf .Values [j ],_bbdf .Values [i ];if _bbdf .Boxes !=nil {_bbdf .Boxes [i ],_bbdf .Boxes [j ]=_bbdf .Boxes [j ],_bbdf .Boxes [i ];
};};func (_bcgfc *byWidth )Less (i ,j int )bool {return _bcgfc .Values [i ].Width < _bcgfc .Values [j ].Width };func (_ffcee *Selection )findMaxTranslations ()(_ffdef ,_fadfd ,_cabf ,_ddaef int ){for _dddbe :=0;_dddbe < _ffcee .Height ;_dddbe ++{for _ffggd :=0;
_ffggd < _ffcee .Width ;_ffggd ++{if _ffcee .Data [_dddbe ][_ffggd ]==SelHit {_ffdef =_baef (_ffdef ,_ffcee .Cx -_ffggd );_fadfd =_baef (_fadfd ,_ffcee .Cy -_dddbe );_cabf =_baef (_cabf ,_ffggd -_ffcee .Cx );_ddaef =_baef (_ddaef ,_dddbe -_ffcee .Cy );
};};};return _ffdef ,_fadfd ,_cabf ,_ddaef ;};func (_fddg *Bitmap )GetVanillaData ()[]byte {if _fddg .Color ==Chocolate {_fddg .inverseData ();};return _fddg .Data ;};func _eba (_dbg *Bitmap ,_ae ...int )(_ebg *Bitmap ,_agd error ){const _edf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";
if _dbg ==nil {return nil ,_f .Error (_edf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_ae )==0||len (_ae )> 4{return nil ,_f .Error (_edf ,"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 _ae [0]<=0{_db .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");_ebg ,_agd =_bbdb (nil ,_dbg );if _agd !=nil {return nil ,_f .Wrap (_agd ,_edf ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
};return _ebg ,nil ;};_bdc :=_bca ();_ebg =_dbg ;for _aea ,_eae :=range _ae {if _eae <=0{break ;};_ebg ,_agd =_baa (_ebg ,_eae ,_bdc );if _agd !=nil {return nil ,_f .Wrapf (_agd ,_edf ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_aea );
};};return _ebg ,nil ;};func (_ebce *ClassedPoints )SortByY (){_ebce ._gcff =_ebce .ySortFunction ();_fb .Sort (_ebce )};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_ad .Rectangle ;};func Rect (x ,y ,w ,h int )(*_ad .Rectangle ,error ){const _eca ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";
if x < 0{w +=x ;x =0;if w <=0{return nil ,_f .Errorf (_eca ,"x\u003a\u0027\u0025\u0064\u0027\u0020<\u0020\u0030\u0020\u0061\u006e\u0064\u0020\u0077\u003a \u0027\u0025\u0064'\u0020<\u003d\u0020\u0030",x ,w );};};if y < 0{h +=y ;y =0;if h <=0{return nil ,_f .Error (_eca ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");
};};_dggc :=_ad .Rect (x ,y ,x +w ,y +h );return &_dggc ,nil ;};func NewClassedPoints (points *Points ,classes _a .IntSlice )(*ClassedPoints ,error ){const _gdaa ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";
if points ==nil {return nil ,_f .Error (_gdaa ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_f .Error (_gdaa ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");
};_fabgc :=&ClassedPoints {Points :points ,IntSlice :classes };if _deba :=_fabgc .validateIntSlice ();_deba !=nil {return nil ,_f .Wrap (_deba ,_gdaa ,"");};return _fabgc ,nil ;};func _cfcf (_deeda *Bitmap ,_fbff *Bitmap ,_bccc int )(_beff error ){const _bcbaf ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";
_eggf :=_gfge (_deeda .Height ,_fbff .Height );_dcgdb :=_gfge (_deeda .RowStride ,_fbff .RowStride );switch _bccc {case 4:_beff =_fbc (_deeda ,_fbff ,_eggf ,_dcgdb );case 8:_beff =_aebec (_deeda ,_fbff ,_eggf ,_dcgdb );default:return _f .Errorf (_bcbaf ,"\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",_bccc );
};if _beff !=nil {return _f .Wrap (_beff ,_bcbaf ,"");};return nil ;};func _gebd (_dgdf ,_cfgcf *Bitmap ,_cdcb ,_gadeb int )(*Bitmap ,error ){const _fdaa ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";if _cfgcf ==nil {return nil ,_f .Error (_fdaa ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _cdcb < 1||_gadeb < 1{return nil ,_f .Error (_fdaa ,"\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 _cdcb ==1&&_gadeb ==1{_faf ,_ffdd :=_bbdb (_dgdf ,_cfgcf );if _ffdd !=nil {return nil ,_f .Wrap (_ffdd ,_fdaa ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _faf ,nil ;};if _cdcb ==1||_gadeb ==1{_adcc :=SelCreateBrick (_gadeb ,_cdcb ,_gadeb /2,_cdcb /2,SelHit );_aega ,_efff :=_fage (_dgdf ,_cfgcf ,_adcc );if _efff !=nil {return nil ,_f .Wrap (_efff ,_fdaa ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _aega ,nil ;};_afeg :=SelCreateBrick (1,_cdcb ,0,_cdcb /2,SelHit );_gccd :=SelCreateBrick (_gadeb ,1,_gadeb /2,0,SelHit );_eacg ,_gfgae :=_fage (nil ,_cfgcf ,_afeg );if _gfgae !=nil {return nil ,_f .Wrap (_gfgae ,_fdaa ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_dgdf ,_gfgae =_fage (_dgdf ,_eacg ,_gccd );if _gfgae !=nil {return nil ,_f .Wrap (_gfgae ,_fdaa ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _dgdf ,nil ;};func (_fbe *Bitmap )clearAll ()error {return _fbe .RasterOperation (0,0,_fbe .Width ,_fbe .Height ,PixClr ,nil ,0,0);
};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func _ffcba (_fgef *Bitmap ,_cafa ,_aeag int ,_abcb ,_ccdeb int ,_abcd RasterOperator ){var (_cbge int ;_bacg byte ;_ebbf ,_befcb int ;_dfcbc int ;);_acfb :=_abcb >>3;
_agdg :=_abcb &7;if _agdg > 0{_bacg =_ggge [_agdg ];};_cbge =_fgef .RowStride *_aeag +(_cafa >>3);switch _abcd {case PixClr :for _ebbf =0;_ebbf < _ccdeb ;_ebbf ++{_dfcbc =_cbge +_ebbf *_fgef .RowStride ;for _befcb =0;_befcb < _acfb ;_befcb ++{_fgef .Data [_dfcbc ]=0x0;
_dfcbc ++;};if _agdg > 0{_fgef .Data [_dfcbc ]=_cccbe (_fgef .Data [_dfcbc ],0x0,_bacg );};};case PixSet :for _ebbf =0;_ebbf < _ccdeb ;_ebbf ++{_dfcbc =_cbge +_ebbf *_fgef .RowStride ;for _befcb =0;_befcb < _acfb ;_befcb ++{_fgef .Data [_dfcbc ]=0xff;_dfcbc ++;
};if _agdg > 0{_fgef .Data [_dfcbc ]=_cccbe (_fgef .Data [_dfcbc ],0xff,_bacg );};};case PixNotDst :for _ebbf =0;_ebbf < _ccdeb ;_ebbf ++{_dfcbc =_cbge +_ebbf *_fgef .RowStride ;for _befcb =0;_befcb < _acfb ;_befcb ++{_fgef .Data [_dfcbc ]=^_fgef .Data [_dfcbc ];
_dfcbc ++;};if _agdg > 0{_fgef .Data [_dfcbc ]=_cccbe (_fgef .Data [_dfcbc ],^_fgef .Data [_dfcbc ],_bacg );};};};};func (_dcdd *ClassedPoints )ySortFunction ()func (_afaf int ,_ebcd int )bool {return func (_fffdg ,_cdge int )bool {return _dcdd .YAtIndex (_fffdg )< _dcdd .YAtIndex (_cdge )};
};func _bdcb (_daf ,_debg *Bitmap ,_cbdd *Selection )(*Bitmap ,error ){const _dabef ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";var _beca error ;if _daf ,_beca =_gbdf (_daf ,_debg ,_cbdd );_beca !=nil {return nil ,_beca ;};_gedc ,_beca :=_dacg (nil ,_debg ,_cbdd );
if _beca !=nil {return nil ,_f .Wrap (_beca ,_dabef ,"");};if _ ,_beca =_fage (_daf ,_gedc ,_cbdd );_beca !=nil {return nil ,_f .Wrap (_beca ,_dabef ,"");};return _daf ,nil ;};func (_afg *Bitmap )GetPixel (x ,y int )bool {_cfa :=_afg .GetByteIndex (x ,y );
_ebab :=_afg .GetBitOffset (x );_dbfc :=uint (7-_ebab );if _cfa > len (_afg .Data )-1{_db .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 ,_afg );
return false ;};if (_afg .Data [_cfa ]>>_dbfc )&0x01>=1{return true ;};return false ;};func _dgfb (_egaa *Bitmap ,_gfbcg ,_bgec int ,_gggdd ,_acdc int ,_aagf RasterOperator ,_cfgb *Bitmap ,_bfagd ,_eaab int )error {var _fgdfd ,_ggbd ,_dgdc ,_bcd int ;if _gfbcg < 0{_bfagd -=_gfbcg ;
_gggdd +=_gfbcg ;_gfbcg =0;};if _bfagd < 0{_gfbcg -=_bfagd ;_gggdd +=_bfagd ;_bfagd =0;};_fgdfd =_gfbcg +_gggdd -_egaa .Width ;if _fgdfd > 0{_gggdd -=_fgdfd ;};_ggbd =_bfagd +_gggdd -_cfgb .Width ;if _ggbd > 0{_gggdd -=_ggbd ;};if _bgec < 0{_eaab -=_bgec ;
_acdc +=_bgec ;_bgec =0;};if _eaab < 0{_bgec -=_eaab ;_acdc +=_eaab ;_eaab =0;};_dgdc =_bgec +_acdc -_egaa .Height ;if _dgdc > 0{_acdc -=_dgdc ;};_bcd =_eaab +_acdc -_cfgb .Height ;if _bcd > 0{_acdc -=_bcd ;};if _gggdd <=0||_acdc <=0{return nil ;};var _faea error ;
switch {case _gfbcg &7==0&&_bfagd &7==0:_faea =_fgcc (_egaa ,_gfbcg ,_bgec ,_gggdd ,_acdc ,_aagf ,_cfgb ,_bfagd ,_eaab );case _gfbcg &7==_bfagd &7:_faea =_ecec (_egaa ,_gfbcg ,_bgec ,_gggdd ,_acdc ,_aagf ,_cfgb ,_bfagd ,_eaab );default:_faea =_cabd (_egaa ,_gfbcg ,_bgec ,_gggdd ,_acdc ,_aagf ,_cfgb ,_bfagd ,_eaab );
};if _faea !=nil {return _f .Wrap (_faea ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func _bgeg (_edaf ...MorphProcess )(_ecb error ){const _fcag ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";
var _fce ,_eeaf int ;for _dba ,_eaeb :=range _edaf {if _ecb =_eaeb .verify (_dba ,&_fce ,&_eeaf );_ecb !=nil {return _f .Wrap (_ecb ,_fcag ,"");};};if _eeaf !=0&&_fce !=0{return _f .Error (_fcag ,"\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 ;};const (PixSrc RasterOperator =0xc;PixDst RasterOperator =0xa;PixNotSrc RasterOperator =0x3;PixNotDst RasterOperator =0x5;PixClr RasterOperator =0x0;PixSet RasterOperator =0xf;PixSrcOrDst RasterOperator =0xe;PixSrcAndDst RasterOperator =0x8;
PixSrcXorDst RasterOperator =0x6;PixNotSrcOrDst RasterOperator =0xb;PixNotSrcAndDst RasterOperator =0x2;PixSrcOrNotDst RasterOperator =0xd;PixSrcAndNotDst RasterOperator =0x4;PixNotPixSrcOrDst RasterOperator =0x1;PixNotPixSrcAndDst RasterOperator =0x7;
PixNotPixSrcXorDst RasterOperator =0x9;PixPaint =PixSrcOrDst ;PixSubtract =PixNotSrcAndDst ;PixMask =PixSrcAndDst ;);func MakePixelSumTab8 ()[]int {return _efe ()};func _bad ()(_af [256]uint32 ){for _cebf :=0;_cebf < 256;_cebf ++{if _cebf &0x01!=0{_af [_cebf ]|=0xf;
};if _cebf &0x02!=0{_af [_cebf ]|=0xf0;};if _cebf &0x04!=0{_af [_cebf ]|=0xf00;};if _cebf &0x08!=0{_af [_cebf ]|=0xf000;};if _cebf &0x10!=0{_af [_cebf ]|=0xf0000;};if _cebf &0x20!=0{_af [_cebf ]|=0xf00000;};if _cebf &0x40!=0{_af [_cebf ]|=0xf000000;};if _cebf &0x80!=0{_af [_cebf ]|=0xf0000000;
};};return _af ;};func _gfga (_gada *Bitmap ,_cca *Bitmap ,_bcf int )(_ega error ){const _dfa ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _bcf {case 2:_ega =_bc (_gada ,_cca );case 4:_ega =_ec (_gada ,_cca );
case 8:_ega =_bea (_gada ,_cca );default:return _f .Error (_dfa ,"\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 _ega !=nil {_ega =_f .Wrap (_ega ,_dfa ,"");};return _ega ;};func (_cgd *Bitmap )CreateTemplate ()*Bitmap {return _cgd .createTemplate ()};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func _fgcc (_dfaee *Bitmap ,_ceeb ,_egbf ,_ceeg ,_fdfe int ,_acbec RasterOperator ,_acef *Bitmap ,_egbe ,_cdgb int )error {var (_gdga byte ;
_bdgg int ;_eacfe int ;_cdab ,_gagd int ;_agdda ,_dfbe int ;);_cdec :=_ceeg >>3;_feafc :=_ceeg &7;if _feafc > 0{_gdga =_ggge [_feafc ];};_bdgg =_acef .RowStride *_cdgb +(_egbe >>3);_eacfe =_dfaee .RowStride *_egbf +(_ceeb >>3);switch _acbec {case PixSrc :for _agdda =0;
_agdda < _fdfe ;_agdda ++{_cdab =_bdgg +_agdda *_acef .RowStride ;_gagd =_eacfe +_agdda *_dfaee .RowStride ;for _dfbe =0;_dfbe < _cdec ;_dfbe ++{_dfaee .Data [_gagd ]=_acef .Data [_cdab ];_gagd ++;_cdab ++;};if _feafc > 0{_dfaee .Data [_gagd ]=_cccbe (_dfaee .Data [_gagd ],_acef .Data [_cdab ],_gdga );
};};case PixNotSrc :for _agdda =0;_agdda < _fdfe ;_agdda ++{_cdab =_bdgg +_agdda *_acef .RowStride ;_gagd =_eacfe +_agdda *_dfaee .RowStride ;for _dfbe =0;_dfbe < _cdec ;_dfbe ++{_dfaee .Data [_gagd ]=^(_acef .Data [_cdab ]);_gagd ++;_cdab ++;};if _feafc > 0{_dfaee .Data [_gagd ]=_cccbe (_dfaee .Data [_gagd ],^_acef .Data [_cdab ],_gdga );
};};case PixSrcOrDst :for _agdda =0;_agdda < _fdfe ;_agdda ++{_cdab =_bdgg +_agdda *_acef .RowStride ;_gagd =_eacfe +_agdda *_dfaee .RowStride ;for _dfbe =0;_dfbe < _cdec ;_dfbe ++{_dfaee .Data [_gagd ]|=_acef .Data [_cdab ];_gagd ++;_cdab ++;};if _feafc > 0{_dfaee .Data [_gagd ]=_cccbe (_dfaee .Data [_gagd ],_acef .Data [_cdab ]|_dfaee .Data [_gagd ],_gdga );
};};case PixSrcAndDst :for _agdda =0;_agdda < _fdfe ;_agdda ++{_cdab =_bdgg +_agdda *_acef .RowStride ;_gagd =_eacfe +_agdda *_dfaee .RowStride ;for _dfbe =0;_dfbe < _cdec ;_dfbe ++{_dfaee .Data [_gagd ]&=_acef .Data [_cdab ];_gagd ++;_cdab ++;};if _feafc > 0{_dfaee .Data [_gagd ]=_cccbe (_dfaee .Data [_gagd ],_acef .Data [_cdab ]&_dfaee .Data [_gagd ],_gdga );
};};case PixSrcXorDst :for _agdda =0;_agdda < _fdfe ;_agdda ++{_cdab =_bdgg +_agdda *_acef .RowStride ;_gagd =_eacfe +_agdda *_dfaee .RowStride ;for _dfbe =0;_dfbe < _cdec ;_dfbe ++{_dfaee .Data [_gagd ]^=_acef .Data [_cdab ];_gagd ++;_cdab ++;};if _feafc > 0{_dfaee .Data [_gagd ]=_cccbe (_dfaee .Data [_gagd ],_acef .Data [_cdab ]^_dfaee .Data [_gagd ],_gdga );
};};case PixNotSrcOrDst :for _agdda =0;_agdda < _fdfe ;_agdda ++{_cdab =_bdgg +_agdda *_acef .RowStride ;_gagd =_eacfe +_agdda *_dfaee .RowStride ;for _dfbe =0;_dfbe < _cdec ;_dfbe ++{_dfaee .Data [_gagd ]|=^(_acef .Data [_cdab ]);_gagd ++;_cdab ++;};if _feafc > 0{_dfaee .Data [_gagd ]=_cccbe (_dfaee .Data [_gagd ],^(_acef .Data [_cdab ])|_dfaee .Data [_gagd ],_gdga );
};};case PixNotSrcAndDst :for _agdda =0;_agdda < _fdfe ;_agdda ++{_cdab =_bdgg +_agdda *_acef .RowStride ;_gagd =_eacfe +_agdda *_dfaee .RowStride ;for _dfbe =0;_dfbe < _cdec ;_dfbe ++{_dfaee .Data [_gagd ]&=^(_acef .Data [_cdab ]);_gagd ++;_cdab ++;};
if _feafc > 0{_dfaee .Data [_gagd ]=_cccbe (_dfaee .Data [_gagd ],^(_acef .Data [_cdab ])&_dfaee .Data [_gagd ],_gdga );};};case PixSrcOrNotDst :for _agdda =0;_agdda < _fdfe ;_agdda ++{_cdab =_bdgg +_agdda *_acef .RowStride ;_gagd =_eacfe +_agdda *_dfaee .RowStride ;
for _dfbe =0;_dfbe < _cdec ;_dfbe ++{_dfaee .Data [_gagd ]=_acef .Data [_cdab ]|^(_dfaee .Data [_gagd ]);_gagd ++;_cdab ++;};if _feafc > 0{_dfaee .Data [_gagd ]=_cccbe (_dfaee .Data [_gagd ],_acef .Data [_cdab ]|^(_dfaee .Data [_gagd ]),_gdga );};};case PixSrcAndNotDst :for _agdda =0;
_agdda < _fdfe ;_agdda ++{_cdab =_bdgg +_agdda *_acef .RowStride ;_gagd =_eacfe +_agdda *_dfaee .RowStride ;for _dfbe =0;_dfbe < _cdec ;_dfbe ++{_dfaee .Data [_gagd ]=_acef .Data [_cdab ]&^(_dfaee .Data [_gagd ]);_gagd ++;_cdab ++;};if _feafc > 0{_dfaee .Data [_gagd ]=_cccbe (_dfaee .Data [_gagd ],_acef .Data [_cdab ]&^(_dfaee .Data [_gagd ]),_gdga );
};};case PixNotPixSrcOrDst :for _agdda =0;_agdda < _fdfe ;_agdda ++{_cdab =_bdgg +_agdda *_acef .RowStride ;_gagd =_eacfe +_agdda *_dfaee .RowStride ;for _dfbe =0;_dfbe < _cdec ;_dfbe ++{_dfaee .Data [_gagd ]=^(_acef .Data [_cdab ]|_dfaee .Data [_gagd ]);
_gagd ++;_cdab ++;};if _feafc > 0{_dfaee .Data [_gagd ]=_cccbe (_dfaee .Data [_gagd ],^(_acef .Data [_cdab ]|_dfaee .Data [_gagd ]),_gdga );};};case PixNotPixSrcAndDst :for _agdda =0;_agdda < _fdfe ;_agdda ++{_cdab =_bdgg +_agdda *_acef .RowStride ;_gagd =_eacfe +_agdda *_dfaee .RowStride ;
for _dfbe =0;_dfbe < _cdec ;_dfbe ++{_dfaee .Data [_gagd ]=^(_acef .Data [_cdab ]&_dfaee .Data [_gagd ]);_gagd ++;_cdab ++;};if _feafc > 0{_dfaee .Data [_gagd ]=_cccbe (_dfaee .Data [_gagd ],^(_acef .Data [_cdab ]&_dfaee .Data [_gagd ]),_gdga );};};case PixNotPixSrcXorDst :for _agdda =0;
_agdda < _fdfe ;_agdda ++{_cdab =_bdgg +_agdda *_acef .RowStride ;_gagd =_eacfe +_agdda *_dfaee .RowStride ;for _dfbe =0;_dfbe < _cdec ;_dfbe ++{_dfaee .Data [_gagd ]=^(_acef .Data [_cdab ]^_dfaee .Data [_gagd ]);_gagd ++;_cdab ++;};if _feafc > 0{_dfaee .Data [_gagd ]=_cccbe (_dfaee .Data [_gagd ],^(_acef .Data [_cdab ]^_dfaee .Data [_gagd ]),_gdga );
};};default:_db .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",_acbec );return _f .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004co\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");
};return nil ;};func (_cafba *byWidth )Len ()int {return len (_cafba .Values )};func (_fda *Bitmap )setTwoBytes (_bcg int ,_edb uint16 )error {if _bcg +1> len (_fda .Data )-1{return _f .Errorf ("s\u0065\u0074\u0054\u0077\u006f\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_bcg );
};_fda .Data [_bcg ]=byte ((_edb &0xff00)>>8);_fda .Data [_bcg +1]=byte (_edb &0xff);return nil ;};func _baef (_affd ,_dfcd int )int {if _affd > _dfcd {return _affd ;};return _dfcd ;};func (_fcfg *Bitmap )resizeImageData (_decc *Bitmap )error {if _decc ==nil {return _f .Error ("\u0072e\u0073i\u007a\u0065\u0049\u006d\u0061\u0067\u0065\u0044\u0061\u0074\u0061","\u0073r\u0063 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _fcfg .SizesEqual (_decc ){return nil ;};_fcfg .Data =make ([]byte ,len (_decc .Data ));_fcfg .Width =_decc .Width ;_fcfg .Height =_decc .Height ;_fcfg .RowStride =_decc .RowStride ;return nil ;};var _ _fb .Interface =&ClassedPoints {};type Bitmap struct{Width ,Height int ;
BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func (_bdac *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _fced ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";
if len (_bdac .Values )==0{return nil ,_f .Error (_fced ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_bbba :=&BitmapsArray {};_bdac .SortByWidth ();_gbgfa :=-1;_dfbea :=-1;for _aegfb :=0;_aegfb < len (_bdac .Values );
_aegfb ++{_bedfg :=_bdac .Values [_aegfb ].Width ;if _bedfg > _gbgfa {_gbgfa =_bedfg ;_dfbea ++;_bbba .Values =append (_bbba .Values ,&Bitmaps {});};_bbba .Values [_dfbea ].AddBitmap (_bdac .Values [_aegfb ]);};return _bbba ,nil ;};func _acgd (_cfee *Bitmap ,_ddaa *_a .Stack ,_edbe ,_dccc ,_fffc int )(_fbfb *_ad .Rectangle ,_dgcb error ){const _ggff ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _cfee ==nil {return nil ,_f .Error (_ggff ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _ddaa ==nil {return nil ,_f .Error (_ggff ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};switch _fffc {case 4:if _fbfb ,_dgcb =_edfg (_cfee ,_ddaa ,_edbe ,_dccc );_dgcb !=nil {return nil ,_f .Wrap (_dgcb ,_ggff ,"");};return _fbfb ,nil ;case 8:if _fbfb ,_dgcb =_agec (_cfee ,_ddaa ,_edbe ,_dccc );_dgcb !=nil {return nil ,_f .Wrap (_dgcb ,_ggff ,"");
};return _fbfb ,nil ;default:return nil ,_f .Errorf (_ggff ,"\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",_fffc );
};};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _dacg (d ,s ,sel )};func (_fed *Bitmap )addBorderGeneral (_aaf ,_cfg ,_edef ,_decd int ,_ded int )(*Bitmap ,error ){const _cddc ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
if _aaf < 0||_cfg < 0||_edef < 0||_decd < 0{return nil ,_f .Error (_cddc ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_bfd ,_gdf :=_fed .Width ,_fed .Height ;_ccdc :=_bfd +_aaf +_cfg ;_abb :=_gdf +_edef +_decd ;
_dfad :=New (_ccdc ,_abb );_dfad .Color =_fed .Color ;_ffg :=PixClr ;if _ded > 0{_ffg =PixSet ;};_cebd :=_dfad .RasterOperation (0,0,_aaf ,_abb ,_ffg ,nil ,0,0);if _cebd !=nil {return nil ,_f .Wrap (_cebd ,_cddc ,"\u006c\u0065\u0066\u0074");};_cebd =_dfad .RasterOperation (_ccdc -_cfg ,0,_cfg ,_abb ,_ffg ,nil ,0,0);
if _cebd !=nil {return nil ,_f .Wrap (_cebd ,_cddc ,"\u0072\u0069\u0067h\u0074");};_cebd =_dfad .RasterOperation (0,0,_ccdc ,_edef ,_ffg ,nil ,0,0);if _cebd !=nil {return nil ,_f .Wrap (_cebd ,_cddc ,"\u0074\u006f\u0070");};_cebd =_dfad .RasterOperation (0,_abb -_decd ,_ccdc ,_decd ,_ffg ,nil ,0,0);
if _cebd !=nil {return nil ,_f .Wrap (_cebd ,_cddc ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_cebd =_dfad .RasterOperation (_aaf ,_edef ,_bfd ,_gdf ,PixSrc ,_fed ,0,0);if _cebd !=nil {return nil ,_f .Wrap (_cebd ,_cddc ,"\u0063\u006f\u0070\u0079");};return _dfad ,nil ;
};func TstWriteSymbols (t *_b .T ,bms *Bitmaps ,src *Bitmap ){for _egedd :=0;_egedd < bms .Size ();_egedd ++{_cefg :=bms .Values [_egedd ];_gbegb :=bms .Boxes [_egedd ];_abgb :=src .RasterOperation (_gbegb .Min .X ,_gbegb .Min .Y ,_cefg .Width ,_cefg .Height ,PixSrc ,_cefg ,0,0);
_c .NoError (t ,_abgb );};};func _ddca (_caefc ,_ddge ,_fcca *Bitmap ,_gfbgd int )(*Bitmap ,error ){const _cgbb ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _ddge ==nil {return nil ,_f .Error (_cgbb ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _fcca ==nil {return nil ,_f .Error (_cgbb ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _gfbgd !=4&&_gfbgd !=8{return nil ,_f .Error (_cgbb ,"\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 _edaa error ;_caefc ,_edaa =_bbdb (_caefc ,_ddge );if _edaa !=nil {return nil ,_f .Wrap (_edaa ,_cgbb ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_gac :=_ddge .createTemplate ();_fcca .setPadBits (0);
for _gcb :=0;_gcb < _abcca ;_gcb ++{_gac ,_edaa =_bbdb (_gac ,_caefc );if _edaa !=nil {return nil ,_f .Wrapf (_edaa ,_cgbb ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gcb );};if _edaa =_cfcf (_caefc ,_fcca ,_gfbgd );
_edaa !=nil {return nil ,_f .Wrapf (_edaa ,_cgbb ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gcb );};if _gac .Equals (_caefc ){break ;};};return _caefc ,nil ;};func (_cdfa *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _cdfa .removeBorderGeneral (left ,right ,top ,bot );
};const (_ LocationFilter =iota ;LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_ecdf float64 ,_effc error ){const _gabc ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";
if bm1 ==nil ||bm2 ==nil {return 0,_f .Error (_gabc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_f .Error (_gabc ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
};if area1 <=0||area2 <=0{return 0,_f .Error (_gabc ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_afdf ,_bccd :=bm1 .Width ,bm1 .Height ;_adff ,_cbef :=bm2 .Width ,bm2 .Height ;
_cgedd :=_afc (_afdf -_adff );if _cgedd > maxDiffW {return 0,nil ;};_eadb :=_afc (_bccd -_cbef );if _eadb > maxDiffH {return 0,nil ;};var _gafc ,_fedf int ;if delX >=0{_gafc =int (delX +0.5);}else {_gafc =int (delX -0.5);};if delY >=0{_fedf =int (delY +0.5);
}else {_fedf =int (delY -0.5);};_ebga :=_baef (_fedf ,0);_adfa :=_gfge (_cbef +_fedf ,_bccd );_aebeec :=bm1 .RowStride *_ebga ;_dgbd :=bm2 .RowStride *(_ebga -_fedf );_afdfd :=_baef (_gafc ,0);_ggdb :=_gfge (_adff +_gafc ,_afdf );_edfd :=bm2 .RowStride ;
var _dgcd ,_fdcc int ;if _gafc >=8{_dgcd =_gafc >>3;_aebeec +=_dgcd ;_afdfd -=_dgcd <<3;_ggdb -=_dgcd <<3;_gafc &=7;}else if _gafc <=-8{_fdcc =-((_gafc +7)>>3);_dgbd +=_fdcc ;_edfd -=_fdcc ;_gafc +=_fdcc <<3;};if _afdfd >=_ggdb ||_ebga >=_adfa {return 0,nil ;
};_agbg :=(_ggdb +7)>>3;var (_ebcg ,_beeg ,_gaff byte ;_fadfa ,_deb ,_bedd int ;);switch {case _gafc ==0:for _bedd =_ebga ;_bedd < _adfa ;_bedd ,_aebeec ,_dgbd =_bedd +1,_aebeec +bm1 .RowStride ,_dgbd +bm2 .RowStride {for _deb =0;_deb < _agbg ;_deb ++{_gaff =bm1 .Data [_aebeec +_deb ]&bm2 .Data [_dgbd +_deb ];
_fadfa +=tab [_gaff ];};};case _gafc > 0:if _edfd < _agbg {for _bedd =_ebga ;_bedd < _adfa ;_bedd ,_aebeec ,_dgbd =_bedd +1,_aebeec +bm1 .RowStride ,_dgbd +bm2 .RowStride {_ebcg ,_beeg =bm1 .Data [_aebeec ],bm2 .Data [_dgbd ]>>uint (_gafc );_gaff =_ebcg &_beeg ;
_fadfa +=tab [_gaff ];for _deb =1;_deb < _edfd ;_deb ++{_ebcg ,_beeg =bm1 .Data [_aebeec +_deb ],(bm2 .Data [_dgbd +_deb ]>>uint (_gafc ))|(bm2 .Data [_dgbd +_deb -1]<<uint (8-_gafc ));_gaff =_ebcg &_beeg ;_fadfa +=tab [_gaff ];};_ebcg =bm1 .Data [_aebeec +_deb ];
_beeg =bm2 .Data [_dgbd +_deb -1]<<uint (8-_gafc );_gaff =_ebcg &_beeg ;_fadfa +=tab [_gaff ];};}else {for _bedd =_ebga ;_bedd < _adfa ;_bedd ,_aebeec ,_dgbd =_bedd +1,_aebeec +bm1 .RowStride ,_dgbd +bm2 .RowStride {_ebcg ,_beeg =bm1 .Data [_aebeec ],bm2 .Data [_dgbd ]>>uint (_gafc );
_gaff =_ebcg &_beeg ;_fadfa +=tab [_gaff ];for _deb =1;_deb < _agbg ;_deb ++{_ebcg =bm1 .Data [_aebeec +_deb ];_beeg =(bm2 .Data [_dgbd +_deb ]>>uint (_gafc ))|(bm2 .Data [_dgbd +_deb -1]<<uint (8-_gafc ));_gaff =_ebcg &_beeg ;_fadfa +=tab [_gaff ];};};
};default:if _agbg < _edfd {for _bedd =_ebga ;_bedd < _adfa ;_bedd ,_aebeec ,_dgbd =_bedd +1,_aebeec +bm1 .RowStride ,_dgbd +bm2 .RowStride {for _deb =0;_deb < _agbg ;_deb ++{_ebcg =bm1 .Data [_aebeec +_deb ];_beeg =bm2 .Data [_dgbd +_deb ]<<uint (-_gafc );
_beeg |=bm2 .Data [_dgbd +_deb +1]>>uint (8+_gafc );_gaff =_ebcg &_beeg ;_fadfa +=tab [_gaff ];};};}else {for _bedd =_ebga ;_bedd < _adfa ;_bedd ,_aebeec ,_dgbd =_bedd +1,_aebeec +bm1 .RowStride ,_dgbd +bm2 .RowStride {for _deb =0;_deb < _agbg -1;_deb ++{_ebcg =bm1 .Data [_aebeec +_deb ];
_beeg =bm2 .Data [_dgbd +_deb ]<<uint (-_gafc );_beeg |=bm2 .Data [_dgbd +_deb +1]>>uint (8+_gafc );_gaff =_ebcg &_beeg ;_fadfa +=tab [_gaff ];};_ebcg =bm1 .Data [_aebeec +_deb ];_beeg =bm2 .Data [_dgbd +_deb ]<<uint (-_gafc );_gaff =_ebcg &_beeg ;_fadfa +=tab [_gaff ];
};};};_ecdf =float64 (_fadfa )*float64 (_fadfa )/(float64 (area1 )*float64 (area2 ));return _ecdf ,nil ;};func TstASymbol (t *_b .T )*Bitmap {t .Helper ();_cgca :=New (6,6);_c .NoError (t ,_cgca .SetPixel (1,0,1));_c .NoError (t ,_cgca .SetPixel (2,0,1));
_c .NoError (t ,_cgca .SetPixel (3,0,1));_c .NoError (t ,_cgca .SetPixel (4,0,1));_c .NoError (t ,_cgca .SetPixel (5,1,1));_c .NoError (t ,_cgca .SetPixel (1,2,1));_c .NoError (t ,_cgca .SetPixel (2,2,1));_c .NoError (t ,_cgca .SetPixel (3,2,1));_c .NoError (t ,_cgca .SetPixel (4,2,1));
_c .NoError (t ,_cgca .SetPixel (5,2,1));_c .NoError (t ,_cgca .SetPixel (0,3,1));_c .NoError (t ,_cgca .SetPixel (5,3,1));_c .NoError (t ,_cgca .SetPixel (0,4,1));_c .NoError (t ,_cgca .SetPixel (5,4,1));_c .NoError (t ,_cgca .SetPixel (1,5,1));_c .NoError (t ,_cgca .SetPixel (2,5,1));
_c .NoError (t ,_cgca .SetPixel (3,5,1));_c .NoError (t ,_cgca .SetPixel (4,5,1));_c .NoError (t ,_cgca .SetPixel (5,5,1));return _cgca ;};type LocationFilter int ;type fillSegment struct{_acac int ;_eaaee int ;_fbfd int ;_ccge int ;};type shift int ;type Component int ;
func (_cedb *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _cbcg ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";if len (_cedb .Values )==0{return nil ,_f .Error (_cbcg ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
};_dbbf :=&BitmapsArray {};_cedb .SortByHeight ();_cdbf :=-1;_dddec :=-1;for _gaad :=0;_gaad < len (_cedb .Values );_gaad ++{_cded :=_cedb .Values [_gaad ].Height ;if _cded > _cdbf {_cdbf =_cded ;_dddec ++;_dbbf .Values =append (_dbbf .Values ,&Bitmaps {});
};_dbbf .Values [_dddec ].AddBitmap (_cedb .Values [_gaad ]);};return _dbbf ,nil ;};type byWidth Bitmaps ;func Centroids (bms []*Bitmap )(*Points ,error ){_cdfab :=make ([]Point ,len (bms ));_dcbe :=_fgag ();_fcaa :=_efe ();var _gcfea error ;for _cega ,_efba :=range bms {_cdfab [_cega ],_gcfea =_efba .centroid (_dcbe ,_fcaa );
if _gcfea !=nil {return nil ,_gcfea ;};};_cgfa :=Points (_cdfab );return &_cgfa ,nil ;};func (_fadg *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _bdfd ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";
if _fadg ==nil {return nil ,_f .Error (_bdfd ,"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 (_fadg .Values )-1{return nil ,_f .Errorf (_bdfd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _fadg .Values [i ],nil ;};var _fgfc =[5]int {1,2,3,0,4};const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func (_caeb *Bitmap )GetChocolateData ()[]byte {if _caeb .Color ==Vanilla {_caeb .inverseData ();};return _caeb .Data ;};func (_ggad *Selection )setOrigin (_caeg ,_gfedg int ){_ggad .Cy ,_ggad .Cx =_caeg ,_gfedg };
func _eaaeb (_bbae uint ,_cffe byte )byte {return _cffe >>_bbae <<_bbae };func _bc (_ce ,_e *Bitmap )(_bg error ){const _ga ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_gd :=_e .RowStride ;
_gag :=_ce .RowStride ;var (_bb byte ;_ee uint16 ;_bcc ,_ed ,_cc ,_fa ,_ceg int ;);for _cc =0;_cc < _e .Height ;_cc ++{_bcc =_cc *_gd ;_ed =2*_cc *_gag ;for _fa =0;_fa < _gd ;_fa ++{_bb =_e .Data [_bcc +_fa ];_ee =_adca [_bb ];_ceg =_ed +_fa *2;if _ce .RowStride !=_e .RowStride *2&&(_fa +1)*2> _ce .RowStride {_bg =_ce .SetByte (_ceg ,byte (_ee >>8));
}else {_bg =_ce .setTwoBytes (_ceg ,_ee );};if _bg !=nil {return _f .Wrap (_bg ,_ga ,"");};};for _fa =0;_fa < _gag ;_fa ++{_ceg =_ed +_gag +_fa ;_bb =_ce .Data [_ed +_fa ];if _bg =_ce .SetByte (_ceg ,_bb );_bg !=nil {return _f .Wrapf (_bg ,_ga ,"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",_ed +_fa ,_ed +_gag +_fa );
};};};return nil ;};func _bca ()(_adg []byte ){_adg =make ([]byte ,256);for _efc :=0;_efc < 256;_efc ++{_eeb :=byte (_efc );_adg [_eeb ]=(_eeb &0x01)|((_eeb &0x04)>>1)|((_eeb &0x10)>>2)|((_eeb &0x40)>>3)|((_eeb &0x02)<<3)|((_eeb &0x08)<<2)|((_eeb &0x20)<<1)|(_eeb &0x80);
};return _adg ;};func (_cgbg *Bitmap )setEightPartlyBytes (_faae ,_dcb int ,_eaee uint64 )(_ffcf error ){var (_cbf byte ;_gfbg int ;);const _bbe ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";
for _bcbb :=1;_bcbb <=_dcb ;_bcbb ++{_gfbg =64-_bcbb *8;_cbf =byte (_eaee >>uint (_gfbg )&0xff);_db .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",_cbf ,_faae ,_faae +_bcbb -1,_dcb ,_gfbg );
if _ffcf =_cgbg .SetByte (_faae +_bcbb -1,_cbf );_ffcf !=nil {return _f .Wrap (_ffcf ,_bbe ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_fbggf :=_cgbg .RowStride *8-_cgbg .Width ;if _fbggf ==0{return nil ;};_gfbg -=8;_cbf =byte (_eaee >>uint (_gfbg )&0xff)<<uint (_fbggf );
if _ffcf =_cgbg .SetByte (_faae +_dcb ,_cbf );_ffcf !=nil {return _f .Wrap (_ffcf ,_bbe ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func (_bbbb *byHeight )Len ()int {return len (_bbbb .Values )};func (_fafgf *Bitmaps )Size ()int {return len (_fafgf .Values )};
func _babf (_aaa *Bitmap ,_gde int )(*Bitmap ,error ){const _gad ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _aaa ==nil {return nil ,_f .Error (_gad ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _gde ==1{return _bbdb (nil ,_aaa );};if _gde !=2&&_gde !=4&&_gde !=8{return nil ,_f .Error (_gad ,"\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");
};_bdb :=_gde *_aaa .Width ;_gdec :=_gde *_aaa .Height ;_dg :=New (_bdb ,_gdec );var _gfe error ;switch _gde {case 2:_gfe =_bc (_dg ,_aaa );case 4:_gfe =_ec (_dg ,_aaa );case 8:_gfe =_bea (_dg ,_aaa );};if _gfe !=nil {return nil ,_f .Wrap (_gfe ,_gad ,"");
};return _dg ,nil ;};func (_dffb *Bitmap )centroid (_ccbf ,_dgd []int )(Point ,error ){_dfgc :=Point {};_dffb .setPadBits (0);if len (_ccbf )==0{_ccbf =_fgag ();};if len (_dgd )==0{_dgd =_efe ();};var _dedb ,_cfbc ,_ddabf ,_cfac ,_efaf ,_eaega int ;var _adcgc byte ;
for _efaf =0;_efaf < _dffb .Height ;_efaf ++{_cdac :=_dffb .RowStride *_efaf ;_cfac =0;for _eaega =0;_eaega < _dffb .RowStride ;_eaega ++{_adcgc =_dffb .Data [_cdac +_eaega ];if _adcgc !=0{_cfac +=_dgd [_adcgc ];_dedb +=_ccbf [_adcgc ]+_eaega *8*_dgd [_adcgc ];
};};_ddabf +=_cfac ;_cfbc +=_cfac *_efaf ;};if _ddabf !=0{_dfgc .X =float32 (_dedb )/float32 (_ddabf );_dfgc .Y =float32 (_cfbc )/float32 (_ddabf );};return _dfgc ,nil ;};func (_dbgfb *Bitmap )InverseData (){_dbgfb .inverseData ()};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_fgce float64 ,_cea error ){const _gdfd ="\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 _fgce ,_f .Error (_gdfd ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _fgce ,_f .Error (_gdfd ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if area1 ==0||area2 ==0{return _fgce ,_f .Error (_gdfd ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_dbebe ,_agdd :=bm1 .Width ,bm1 .Height ;_ebgab ,_fgbc :=bm2 .Width ,bm2 .Height ;
if _afc (_dbebe -_ebgab )> maxDiffW {return 0,nil ;};if _afc (_agdd -_fgbc )> maxDiffH {return 0,nil ;};var _dggba ,_bfab int ;if delX >=0{_dggba =int (delX +0.5);}else {_dggba =int (delX -0.5);};if delY >=0{_bfab =int (delY +0.5);}else {_bfab =int (delY -0.5);
};_ebbg :=bm1 .createTemplate ();if _cea =_ebbg .RasterOperation (_dggba ,_bfab ,_ebgab ,_fgbc ,PixSrc ,bm2 ,0,0);_cea !=nil {return _fgce ,_f .Wrap (_cea ,_gdfd ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _cea =_ebbg .RasterOperation (0,0,_dbebe ,_agdd ,PixSrcAndDst ,bm1 ,0,0);
_cea !=nil {return _fgce ,_f .Wrap (_cea ,_gdfd ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_gbbb :=_ebbg .countPixels ();_fgce =float64 (_gbbb )*float64 (_gbbb )/(float64 (area1 )*float64 (area2 ));return _fgce ,nil ;};func _baa (_gcca *Bitmap ,_gagg int ,_gbb []byte )(_acg *Bitmap ,_adc error ){const _aeb ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";
if _gcca ==nil {return nil ,_f .Error (_aeb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _gagg < 1||_gagg > 4{return nil ,_f .Error (_aeb ,"\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 _gcca .Height <=1{return nil ,_f .Errorf (_aeb ,"\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",_gcca .Height );
};_acg =New (_gcca .Width /2,_gcca .Height /2);if _gbb ==nil {_gbb =_bca ();};_cg :=_gfge (_gcca .RowStride ,2*_acg .RowStride );switch _gagg {case 1:_adc =_gcf (_gcca ,_acg ,_gagg ,_gbb ,_cg );case 2:_adc =_bec (_gcca ,_acg ,_gagg ,_gbb ,_cg );case 3:_adc =_ccc (_gcca ,_acg ,_gagg ,_gbb ,_cg );
case 4:_adc =_dea (_gcca ,_acg ,_gagg ,_gbb ,_cg );};if _adc !=nil {return nil ,_adc ;};return _acg ,nil ;};func (_aeed *byHeight )Swap (i ,j int ){_aeed .Values [i ],_aeed .Values [j ]=_aeed .Values [j ],_aeed .Values [i ];if _aeed .Boxes !=nil {_aeed .Boxes [i ],_aeed .Boxes [j ]=_aeed .Boxes [j ],_aeed .Boxes [i ];
};};func TstVSymbol (t *_b .T ,scale ...int )*Bitmap {_dfcf ,_fefbd :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_c .NoError (t ,_fefbd );return TstGetScaledSymbol (t ,_dfcf ,scale ...);};func (_ceba *Points )Add (pt *Points )error {const _efcf ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";
if _ceba ==nil {return _f .Error (_efcf ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _f .Error (_efcf ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};*_ceba =append (*_ceba ,*pt ...);return nil ;};func (_caaac *ClassedPoints )Swap (i ,j int ){_caaac .IntSlice [i ],_caaac .IntSlice [j ]=_caaac .IntSlice [j ],_caaac .IntSlice [i ];};func (_befc *Bitmap )Equals (s *Bitmap )bool {if len (_befc .Data )!=len (s .Data )||_befc .Width !=s .Width ||_befc .Height !=s .Height {return false ;
};for _gbf :=0;_gbf < _befc .Height ;_gbf ++{_egee :=_gbf *_befc .RowStride ;for _abae :=0;_abae < _befc .RowStride ;_abae ++{if _befc .Data [_egee +_abae ]!=s .Data [_egee +_abae ]{return false ;};};};return true ;};type Getter interface{GetBitmap ()*Bitmap ;
};func _gbdf (_gcfc ,_bceg *Bitmap ,_dggg *Selection )(*Bitmap ,error ){const _decdg ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _ddbc ,_aaga int ;if _bceg ==nil {return nil ,_f .Error (_decdg ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _dggg ==nil {return nil ,_f .Error (_decdg ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_ddbc =_dggg .Width ;_aaga =_dggg .Height ;if _ddbc ==0||_aaga ==0{return nil ,_f .Error (_decdg ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");
};if _gcfc ==nil {return _bceg .createTemplate (),nil ;};if _eecac :=_gcfc .resizeImageData (_bceg );_eecac !=nil {return nil ,_eecac ;};return _gcfc ,nil ;};func (_efdc *Bitmaps )selectByIndicator (_fcdce *_a .NumSlice )(_cbfdb *Bitmaps ,_agfef error ){const _dcec ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _efdc ==nil {return nil ,_f .Error (_dcec ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _fcdce ==nil {return nil ,_f .Error (_dcec ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};if len (_efdc .Values )==0{return _efdc ,nil ;};if len (*_fcdce )!=len (_efdc .Values ){return nil ,_f .Errorf (_dcec ,"\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 (*_fcdce ),len (_efdc .Values ));
};var _bfbad ,_gcdc ,_fgeg int ;for _gcdc =0;_gcdc < len (*_fcdce );_gcdc ++{if _bfbad ,_agfef =_fcdce .GetInt (_gcdc );_agfef !=nil {return nil ,_f .Wrap (_agfef ,_dcec ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _bfbad ==1{_fgeg ++;
};};if _fgeg ==len (_efdc .Values ){return _efdc ,nil ;};_cbfdb =&Bitmaps {};_gdde :=len (_efdc .Values )==len (_efdc .Boxes );for _gcdc =0;_gcdc < len (*_fcdce );_gcdc ++{if _bfbad =int ((*_fcdce )[_gcdc ]);_bfbad ==0{continue ;};_cbfdb .Values =append (_cbfdb .Values ,_efdc .Values [_gcdc ]);
if _gdde {_cbfdb .Boxes =append (_cbfdb .Boxes ,_efdc .Boxes [_gcdc ]);};};return _cbfdb ,nil ;};func (_gceee *Bitmaps )makeSizeIndicator (_cdgd ,_ddfc int ,_cgfc LocationFilter ,_cfdg SizeComparison )(_ebbga *_a .NumSlice ,_bccdb error ){const _fefb ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _gceee ==nil {return nil ,_f .Error (_fefb ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _cgfc {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_f .Errorf (_fefb ,"\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",_cgfc );
};switch _cfdg {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_f .Errorf (_fefb ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_cfdg );
};_ebbga =&_a .NumSlice {};var (_baeb ,_eacgb ,_aggd int ;_bedbb *Bitmap ;);for _ ,_bedbb =range _gceee .Values {_baeb =0;_eacgb ,_aggd =_bedbb .Width ,_bedbb .Height ;switch _cgfc {case LocSelectWidth :if (_cfdg ==SizeSelectIfLT &&_eacgb < _cdgd )||(_cfdg ==SizeSelectIfGT &&_eacgb > _cdgd )||(_cfdg ==SizeSelectIfLTE &&_eacgb <=_cdgd )||(_cfdg ==SizeSelectIfGTE &&_eacgb >=_cdgd )||(_cfdg ==SizeSelectIfEQ &&_eacgb ==_cdgd ){_baeb =1;
};case LocSelectHeight :if (_cfdg ==SizeSelectIfLT &&_aggd < _ddfc )||(_cfdg ==SizeSelectIfGT &&_aggd > _ddfc )||(_cfdg ==SizeSelectIfLTE &&_aggd <=_ddfc )||(_cfdg ==SizeSelectIfGTE &&_aggd >=_ddfc )||(_cfdg ==SizeSelectIfEQ &&_aggd ==_ddfc ){_baeb =1;
};case LocSelectIfEither :if (_cfdg ==SizeSelectIfLT &&(_eacgb < _cdgd ||_aggd < _ddfc ))||(_cfdg ==SizeSelectIfGT &&(_eacgb > _cdgd ||_aggd > _ddfc ))||(_cfdg ==SizeSelectIfLTE &&(_eacgb <=_cdgd ||_aggd <=_ddfc ))||(_cfdg ==SizeSelectIfGTE &&(_eacgb >=_cdgd ||_aggd >=_ddfc ))||(_cfdg ==SizeSelectIfEQ &&(_eacgb ==_cdgd ||_aggd ==_ddfc )){_baeb =1;
};case LocSelectIfBoth :if (_cfdg ==SizeSelectIfLT &&(_eacgb < _cdgd &&_aggd < _ddfc ))||(_cfdg ==SizeSelectIfGT &&(_eacgb > _cdgd &&_aggd > _ddfc ))||(_cfdg ==SizeSelectIfLTE &&(_eacgb <=_cdgd &&_aggd <=_ddfc ))||(_cfdg ==SizeSelectIfGTE &&(_eacgb >=_cdgd &&_aggd >=_ddfc ))||(_cfdg ==SizeSelectIfEQ &&(_eacgb ==_cdgd &&_aggd ==_ddfc )){_baeb =1;
};};_ebbga .AddInt (_baeb );};return _ebbga ,nil ;};func (_abf *Bitmap )nextOnPixel (_fbgg ,_gdaf int )(_eadd _ad .Point ,_dfef bool ,_dcffb error ){const _dge ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";_eadd ,_dfef ,_dcffb =_abf .nextOnPixelLow (_abf .Width ,_abf .Height ,_abf .RowStride ,_fbgg ,_gdaf );
if _dcffb !=nil {return _eadd ,false ,_f .Wrap (_dcffb ,_dge ,"");};return _eadd ,_dfef ,nil ;};func TstFrameBitmap ()*Bitmap {return _egcbd .Copy ()};func (_bac *Bitmap )setFourBytes (_fegc int ,_gfgc uint32 )error {if _fegc +3> len (_bac .Data )-1{return _f .Errorf ("\u0073\u0065\u0074F\u006f\u0075\u0072\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_fegc );
};_bac .Data [_fegc ]=byte ((_gfgc &0xff000000)>>24);_bac .Data [_fegc +1]=byte ((_gfgc &0xff0000)>>16);_bac .Data [_fegc +2]=byte ((_gfgc &0xff00)>>8);_bac .Data [_fegc +3]=byte (_gfgc &0xff);return nil ;};func (_bebae *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _cfgaa ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";
if _bebae ==nil {return nil ,_f .Error (_cfgaa ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_bebae .Values )-1{return nil ,_f .Errorf (_cfgaa ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _bebae .Values [i ],nil ;};func New (width ,height int )*Bitmap {_aed :=_fdb (width ,height );_aed .Data =make ([]byte ,height *_aed .RowStride );return _aed ;};func (_dgab *ClassedPoints )validateIntSlice ()error {const _gaae ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";
for _ ,_beba :=range _dgab .IntSlice {if _beba >=(_dgab .Points .Size ()){return _f .Errorf (_gaae ,"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",_beba ,_dgab .Points .Size ());
};};return nil ;};func TstOSymbol (t *_b .T ,scale ...int )*Bitmap {_egfe ,_beae :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_c .NoError (t ,_beae );return TstGetScaledSymbol (t ,_egfe ,scale ...);};const (_ SizeSelection =iota ;SizeSelectByWidth ;
SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func TstWordBitmap (t *_b .T ,scale ...int )*Bitmap {_gccac :=1;if len (scale )> 0{_gccac =scale [0];};_gagdg :=3;_fefe :=9+7+15+2*_gagdg ;_gfbd :=5+_gagdg +5;_gbed :=New (_fefe *_gccac ,_gfbd *_gccac );
_afca :=&Bitmaps {};var _gegda *int ;_gagdg *=_gccac ;_gacd :=0;_gegda =&_gacd ;_dccb :=0;_deegb :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_afca ,_deegb ,_gegda ,_dccb ,1*_gccac );_deegb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_afca ,_deegb ,_gegda ,_dccb ,_gagdg );
_deegb =TstISymbol (t ,scale ...);TstAddSymbol (t ,_afca ,_deegb ,_gegda ,_dccb ,1*_gccac );_deegb =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_afca ,_deegb ,_gegda ,_dccb ,_gagdg );_deegb =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_afca ,_deegb ,_gegda ,_dccb ,1*_gccac );
_deegb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_afca ,_deegb ,_gegda ,_dccb ,1*_gccac );_deegb =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_afca ,_deegb ,_gegda ,_dccb ,0);*_gegda =0;_dccb =5*_gccac +_gagdg ;_deegb =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_afca ,_deegb ,_gegda ,_dccb ,1*_gccac );
_deegb =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_afca ,_deegb ,_gegda ,_dccb ,_gagdg );_deegb =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_afca ,_deegb ,_gegda ,_dccb ,1*_gccac );_deegb =TstESymbol (t ,scale ...);TstAddSymbol (t ,_afca ,_deegb ,_gegda ,_dccb ,1*_gccac );
_deegb =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_afca ,_deegb ,_gegda ,_dccb ,1*_gccac );_deegb =TstESymbol (t ,scale ...);TstAddSymbol (t ,_afca ,_deegb ,_gegda ,_dccb ,1*_gccac );_deegb =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_afca ,_deegb ,_gegda ,_dccb ,0);
TstWriteSymbols (t ,_afca ,_gbed );return _gbed ;};func (_gcfac *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_aaaee *Bitmaps ,_fecc error ){const _gdfab ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";
if _gcfac ==nil {return nil ,_f .Error (_gdfab ,"\u0027\u0062\u0027 B\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_f .Errorf (_gdfab ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );
};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_f .Errorf (_gdfab ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
};_ecfca ,_fecc :=_gcfac .makeSizeIndicator (width ,height ,tp ,relation );if _fecc !=nil {return nil ,_f .Wrap (_fecc ,_gdfab ,"");};_aaaee ,_fecc =_gcfac .selectByIndicator (_ecfca );if _fecc !=nil {return nil ,_f .Wrap (_fecc ,_gdfab ,"");};return _aaaee ,nil ;
};func (_dabge *Bitmaps )String ()string {_ggcg :=_gf .Builder {};for _ ,_egff :=range _dabge .Values {_ggcg .WriteString (_egff .String ());_ggcg .WriteRune ('\n');};return _ggcg .String ();};func _geee (_eda ,_aag byte ,_adfc CombinationOperator )byte {switch _adfc {case CmbOpOr :return _aag |_eda ;
case CmbOpAnd :return _aag &_eda ;case CmbOpXor :return _aag ^_eda ;case CmbOpXNor :return ^(_aag ^_eda );case CmbOpNot :return ^(_aag );default:return _aag ;};};func (_bfbd *Bitmap )Equivalent (s *Bitmap )bool {return _bfbd .equivalent (s )};func TstISymbol (t *_b .T ,scale ...int )*Bitmap {_fbffg ,_dcbf :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});
_c .NoError (t ,_dcbf );return TstGetScaledSymbol (t ,_fbffg ,scale ...);};func TstPSymbol (t *_b .T )*Bitmap {t .Helper ();_fcaag :=New (5,8);_c .NoError (t ,_fcaag .SetPixel (0,0,1));_c .NoError (t ,_fcaag .SetPixel (1,0,1));_c .NoError (t ,_fcaag .SetPixel (2,0,1));
_c .NoError (t ,_fcaag .SetPixel (3,0,1));_c .NoError (t ,_fcaag .SetPixel (4,1,1));_c .NoError (t ,_fcaag .SetPixel (0,1,1));_c .NoError (t ,_fcaag .SetPixel (4,2,1));_c .NoError (t ,_fcaag .SetPixel (0,2,1));_c .NoError (t ,_fcaag .SetPixel (4,3,1));
_c .NoError (t ,_fcaag .SetPixel (0,3,1));_c .NoError (t ,_fcaag .SetPixel (0,4,1));_c .NoError (t ,_fcaag .SetPixel (1,4,1));_c .NoError (t ,_fcaag .SetPixel (2,4,1));_c .NoError (t ,_fcaag .SetPixel (3,4,1));_c .NoError (t ,_fcaag .SetPixel (0,5,1));
_c .NoError (t ,_fcaag .SetPixel (0,6,1));_c .NoError (t ,_fcaag .SetPixel (0,7,1));return _fcaag ;};func Extract (roi _ad .Rectangle ,src *Bitmap )(*Bitmap ,error ){_dggag :=New (roi .Dx (),roi .Dy ());_cbc :=roi .Min .X &0x07;_fgdf :=8-_cbc ;_cbb :=uint (8-_dggag .Width &0x07);
_cbfg :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_dag :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_bge :=_dggag .RowStride ==_dag +1-_cbfg ;var _adfg int ;for _bfeb :=roi .Min .Y ;_bfeb < roi .Max .Y ;_bfeb ++{_dda :=_cbfg ;_cdb :=_adfg ;switch {case _cbfg ==_dag :_deeb ,_bcgc :=src .GetByte (_dda );
if _bcgc !=nil {return nil ,_bcgc ;};_deeb <<=uint (_cbc );_bcgc =_dggag .SetByte (_cdb ,_eaaeb (_cbb ,_deeb ));if _bcgc !=nil {return nil ,_bcgc ;};case _cbc ==0:for _bcaf :=_cbfg ;_bcaf <=_dag ;_bcaf ++{_egba ,_gdac :=src .GetByte (_dda );if _gdac !=nil {return nil ,_gdac ;
};_dda ++;if _bcaf ==_dag &&_bge {_egba =_eaaeb (_cbb ,_egba );};_gdac =_dggag .SetByte (_cdb ,_egba );if _gdac !=nil {return nil ,_gdac ;};_cdb ++;};default:_abag :=_fdbe (src ,_dggag ,uint (_cbc ),uint (_fgdf ),_cbb ,_cbfg ,_dag ,_bge ,_dda ,_cdb );if _abag !=nil {return nil ,_abag ;
};};_cbfg +=src .RowStride ;_dag +=src .RowStride ;_adfg +=_dggag .RowStride ;};return _dggag ,nil ;};func (_geag *Bitmaps )HeightSorter ()func (_agbff ,_ddaee int )bool {return func (_ffcdb ,_gbbg int )bool {_gfffd :=_geag .Values [_ffcdb ].Height < _geag .Values [_gbbg ].Height ;
_db .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_geag .Values [_ffcdb ].Height ,_geag .Values [_gbbg ].Height ,_gfffd );return _gfffd ;};};func (_ffde Points )XSorter ()func (_befe ,_gbfd int )bool {return func (_effdd ,_acc int )bool {return _ffde [_effdd ].X < _ffde [_acc ].X };
};func (_eaaa *Boxes )Add (box *_ad .Rectangle )error {if _eaaa ==nil {return _f .Error ("\u0042o\u0078\u0065\u0073\u002e\u0041\u0064d","\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};*_eaaa =append (*_eaaa ,box );
return nil ;};func _gbffc (_cecg *Bitmap ,_cfacc ,_dae int ,_gfgefg ,_dacd int ,_bddd RasterOperator ){var (_cgea bool ;_eada bool ;_dacc int ;_agbfd int ;_ceegd int ;_fgaed int ;_caabe bool ;_gabd byte ;);_dabbg :=8-(_cfacc &7);_abcdd :=_ebaed [_dabbg ];
_bgfa :=_cecg .RowStride *_dae +(_cfacc >>3);if _gfgefg < _dabbg {_cgea =true ;_abcdd &=_ggge [8-_dabbg +_gfgefg ];};if !_cgea {_dacc =(_gfgefg -_dabbg )>>3;if _dacc !=0{_eada =true ;_agbfd =_bgfa +1;};};_ceegd =(_cfacc +_gfgefg )&7;if !(_cgea ||_ceegd ==0){_caabe =true ;
_gabd =_ggge [_ceegd ];_fgaed =_bgfa +1+_dacc ;};var _gbdc ,_caee int ;switch _bddd {case PixClr :for _gbdc =0;_gbdc < _dacd ;_gbdc ++{_cecg .Data [_bgfa ]=_cccbe (_cecg .Data [_bgfa ],0x0,_abcdd );_bgfa +=_cecg .RowStride ;};if _eada {for _gbdc =0;_gbdc < _dacd ;
_gbdc ++{for _caee =0;_caee < _dacc ;_caee ++{_cecg .Data [_agbfd +_caee ]=0x0;};_agbfd +=_cecg .RowStride ;};};if _caabe {for _gbdc =0;_gbdc < _dacd ;_gbdc ++{_cecg .Data [_fgaed ]=_cccbe (_cecg .Data [_fgaed ],0x0,_gabd );_fgaed +=_cecg .RowStride ;};
};case PixSet :for _gbdc =0;_gbdc < _dacd ;_gbdc ++{_cecg .Data [_bgfa ]=_cccbe (_cecg .Data [_bgfa ],0xff,_abcdd );_bgfa +=_cecg .RowStride ;};if _eada {for _gbdc =0;_gbdc < _dacd ;_gbdc ++{for _caee =0;_caee < _dacc ;_caee ++{_cecg .Data [_agbfd +_caee ]=0xff;
};_agbfd +=_cecg .RowStride ;};};if _caabe {for _gbdc =0;_gbdc < _dacd ;_gbdc ++{_cecg .Data [_fgaed ]=_cccbe (_cecg .Data [_fgaed ],0xff,_gabd );_fgaed +=_cecg .RowStride ;};};case PixNotDst :for _gbdc =0;_gbdc < _dacd ;_gbdc ++{_cecg .Data [_bgfa ]=_cccbe (_cecg .Data [_bgfa ],^_cecg .Data [_bgfa ],_abcdd );
_bgfa +=_cecg .RowStride ;};if _eada {for _gbdc =0;_gbdc < _dacd ;_gbdc ++{for _caee =0;_caee < _dacc ;_caee ++{_cecg .Data [_agbfd +_caee ]=^(_cecg .Data [_agbfd +_caee ]);};_agbfd +=_cecg .RowStride ;};};if _caabe {for _gbdc =0;_gbdc < _dacd ;_gbdc ++{_cecg .Data [_fgaed ]=_cccbe (_cecg .Data [_fgaed ],^_cecg .Data [_fgaed ],_gabd );
_fgaed +=_cecg .RowStride ;};};};};func _gcbb (_aefbb *_a .Stack )(_abfd *fillSegment ,_gcccc error ){const _gbde ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _aefbb ==nil {return nil ,_f .Error (_gbde ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
};if _aefbb .Aux ==nil {return nil ,_f .Error (_gbde ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_bbgbg ,_ggefa :=_aefbb .Pop ();if !_ggefa {return nil ,nil ;};_ecfe ,_ggefa :=_bbgbg .(*fillSegment );
if !_ggefa {return nil ,_f .Error (_gbde ,"\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");};_abfd =&fillSegment {_ecfe ._acac ,_ecfe ._eaaee ,_ecfe ._fbfd +_ecfe ._ccge ,_ecfe ._ccge };
_aefbb .Aux .Push (_ecfe );return _abfd ,nil ;};func _fdb (_aeg ,_gbe int )*Bitmap {return &Bitmap {Width :_aeg ,Height :_gbe ,RowStride :(_aeg +7)>>3};};func TstWordBitmapWithSpaces (t *_b .T ,scale ...int )*Bitmap {_eedc :=1;if len (scale )> 0{_eedc =scale [0];
};_dddg :=3;_cbbe :=9+7+15+2*_dddg +2*_dddg ;_bdbc :=5+_dddg +5+2*_dddg ;_cegf :=New (_cbbe *_eedc ,_bdbc *_eedc );_ebfb :=&Bitmaps {};var _bfgd *int ;_dddg *=_eedc ;_faeb :=_dddg ;_bfgd =&_faeb ;_eaec :=_dddg ;_aegdc :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_ebfb ,_aegdc ,_bfgd ,_eaec ,1*_eedc );
_aegdc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ebfb ,_aegdc ,_bfgd ,_eaec ,_dddg );_aegdc =TstISymbol (t ,scale ...);TstAddSymbol (t ,_ebfb ,_aegdc ,_bfgd ,_eaec ,1*_eedc );_aegdc =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_ebfb ,_aegdc ,_bfgd ,_eaec ,_dddg );
_aegdc =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_ebfb ,_aegdc ,_bfgd ,_eaec ,1*_eedc );_aegdc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ebfb ,_aegdc ,_bfgd ,_eaec ,1*_eedc );_aegdc =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_ebfb ,_aegdc ,_bfgd ,_eaec ,0);
*_bfgd =_dddg ;_eaec =5*_eedc +_dddg ;_aegdc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_ebfb ,_aegdc ,_bfgd ,_eaec ,1*_eedc );_aegdc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_ebfb ,_aegdc ,_bfgd ,_eaec ,_dddg );_aegdc =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_ebfb ,_aegdc ,_bfgd ,_eaec ,1*_eedc );
_aegdc =TstESymbol (t ,scale ...);TstAddSymbol (t ,_ebfb ,_aegdc ,_bfgd ,_eaec ,1*_eedc );_aegdc =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_ebfb ,_aegdc ,_bfgd ,_eaec ,1*_eedc );_aegdc =TstESymbol (t ,scale ...);TstAddSymbol (t ,_ebfb ,_aegdc ,_bfgd ,_eaec ,1*_eedc );
_aegdc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_ebfb ,_aegdc ,_bfgd ,_eaec ,0);TstWriteSymbols (t ,_ebfb ,_cegf );return _cegf ;};func TstRSymbol (t *_b .T ,scale ...int )*Bitmap {_adfdd ,_agcac :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});
_c .NoError (t ,_agcac );return TstGetScaledSymbol (t ,_adfdd ,scale ...);};func (_gbcd *Bitmaps )SortByHeight (){_cdaeg :=(*byHeight )(_gbcd );_fb .Sort (_cdaeg )};func (_eaae *Bitmap )setEightBytes (_dad int ,_beb uint64 )error {_fdca :=_eaae .RowStride -(_dad %_eaae .RowStride );
if _eaae .RowStride !=_eaae .Width >>3{_fdca --;};if _fdca >=8{return _eaae .setEightFullBytes (_dad ,_beb );};return _eaae .setEightPartlyBytes (_dad ,_fdca ,_beb );};func _fgc ()(_dec [256]uint64 ){for _eef :=0;_eef < 256;_eef ++{if _eef &0x01!=0{_dec [_eef ]|=0xff;
};if _eef &0x02!=0{_dec [_eef ]|=0xff00;};if _eef &0x04!=0{_dec [_eef ]|=0xff0000;};if _eef &0x08!=0{_dec [_eef ]|=0xff000000;};if _eef &0x10!=0{_dec [_eef ]|=0xff00000000;};if _eef &0x20!=0{_dec [_eef ]|=0xff0000000000;};if _eef &0x40!=0{_dec [_eef ]|=0xff000000000000;
};if _eef &0x80!=0{_dec [_eef ]|=0xff00000000000000;};};return _dec ;};func init (){const _dcffd ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_egcbd =New (50,40);var _agge error ;
_egcbd ,_agge =_egcbd .AddBorder (2,1);if _agge !=nil {panic (_f .Wrap (_agge ,_dcffd ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_geba ,_agge =NewWithData (50,22,_dagf );if _agge !=nil {panic (_f .Wrap (_agge ,_dcffd ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
};};func (_bffd *Bitmap )setAll ()error {_aaad :=_adfb (_bffd ,0,0,_bffd .Width ,_bffd .Height ,PixSet ,nil ,0,0);if _aaad !=nil {return _f .Wrap (_aaad ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func _caaa (_ggdc ,_fcfb ,_bcfe *Bitmap )(*Bitmap ,error ){const _bag ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";
if _fcfb ==nil {return nil ,_f .Error (_bag ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _bcfe ==nil {return nil ,_f .Error (_bag ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _ggdc ==_bcfe {return nil ,_f .Error (_bag ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");
};if !_fcfb .SizesEqual (_bcfe ){_db .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",_bag );
};var _fba error ;if _ggdc ,_fba =_bbdb (_ggdc ,_fcfb );_fba !=nil {return nil ,_f .Wrap (_fba ,_bag ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _fba =_ggdc .RasterOperation (0,0,_ggdc .Width ,_ggdc .Height ,PixSrcXorDst ,_bcfe ,0,0);
_fba !=nil {return nil ,_f .Wrap (_fba ,_bag ,"");};return _ggdc ,nil ;};func (_afa *Bitmap )CountPixels ()int {return _afa .countPixels ()};func _cfc (_cfb *Bitmap ,_ab ,_fbd int )(*Bitmap ,error ){const _deg ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";
if _cfb ==nil {return nil ,_f .Error (_deg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _ab <=0||_fbd <=0{return nil ,_f .Error (_deg ,"\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 _ab ==_fbd {if _ab ==1{_bf ,_ea :=_bbdb (nil ,_cfb );if _ea !=nil {return nil ,_f .Wrap (_ea ,_deg ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _bf ,nil ;};if _ab ==2||_ab ==4||_ab ==8{_ceb ,_da :=_babf (_cfb ,_ab );
if _da !=nil {return nil ,_f .Wrap (_da ,_deg ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _ceb ,nil ;};};_fgd :=_ab *_cfb .Width ;_bgd :=_fbd *_cfb .Height ;_bgb :=New (_fgd ,_bgd );_ef :=_bgb .RowStride ;
var (_cdc ,_dc ,_eb ,_ge ,_abc int ;_egd byte ;_bfb error ;);for _dc =0;_dc < _cfb .Height ;_dc ++{_cdc =_fbd *_dc *_ef ;for _eb =0;_eb < _cfb .Width ;_eb ++{if _ca :=_cfb .GetPixel (_eb ,_dc );_ca {_abc =_ab *_eb ;for _ge =0;_ge < _ab ;_ge ++{_bgb .setBit (_cdc *8+_abc +_ge );
};};};for _ge =1;_ge < _fbd ;_ge ++{_abd :=_cdc +_ge *_ef ;for _gb :=0;_gb < _ef ;_gb ++{if _egd ,_bfb =_bgb .GetByte (_cdc +_gb );_bfb !=nil {return nil ,_f .Wrapf (_bfb ,_deg ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_ge );
};if _bfb =_bgb .SetByte (_abd +_gb ,_egd );_bfb !=nil {return nil ,_f .Wrap (_bfb ,_deg ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _bgb ,nil ;};func _dea (_ddc ,_ade *Bitmap ,_bceb int ,_aff []byte ,_dbfd int )(_acgf error ){const _gcd ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";
var (_ffc ,_effd ,_dbga ,_dac ,_baac ,_bfbf ,_agdf ,_gdb int ;_fgb ,_cdf uint32 ;_dfe ,_eacf byte ;_fcfc uint16 ;);_gadb :=make ([]byte ,4);_fdd :=make ([]byte ,4);for _dbga =0;_dbga < _ddc .Height -1;_dbga ,_dac =_dbga +2,_dac +1{_ffc =_dbga *_ddc .RowStride ;
_effd =_dac *_ade .RowStride ;for _baac ,_bfbf =0,0;_baac < _dbfd ;_baac ,_bfbf =_baac +4,_bfbf +1{for _agdf =0;_agdf < 4;_agdf ++{_gdb =_ffc +_baac +_agdf ;if _gdb <=len (_ddc .Data )-1&&_gdb < _ffc +_ddc .RowStride {_gadb [_agdf ]=_ddc .Data [_gdb ];
}else {_gadb [_agdf ]=0x00;};_gdb =_ffc +_ddc .RowStride +_baac +_agdf ;if _gdb <=len (_ddc .Data )-1&&_gdb < _ffc +(2*_ddc .RowStride ){_fdd [_agdf ]=_ddc .Data [_gdb ];}else {_fdd [_agdf ]=0x00;};};_fgb =_gfg .BigEndian .Uint32 (_gadb );_cdf =_gfg .BigEndian .Uint32 (_fdd );
_cdf &=_fgb ;_cdf &=_cdf <<1;_cdf &=0xaaaaaaaa;_fgb =_cdf |(_cdf <<7);_dfe =byte (_fgb >>24);_eacf =byte ((_fgb >>8)&0xff);_gdb =_effd +_bfbf ;if _gdb +1==len (_ade .Data )-1||_gdb +1>=_effd +_ade .RowStride {_ade .Data [_gdb ]=_aff [_dfe ];if _acgf =_ade .SetByte (_gdb ,_aff [_dfe ]);
_acgf !=nil {return _f .Wrapf (_acgf ,_gcd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gdb );};}else {_fcfc =(uint16 (_aff [_dfe ])<<8)|uint16 (_aff [_eacf ]);if _acgf =_ade .setTwoBytes (_gdb ,_fcfc );_acgf !=nil {return _f .Wrapf (_acgf ,_gcd ,"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",_gdb );
};_bfbf ++;};};};return nil ;};func (_fdc *Bitmap )setBit (_ebda int ){_fdc .Data [(_ebda >>3)]|=0x80>>uint (_ebda &7)};func _gefd (_acgbe *Bitmap ,_gbd int )(*Bitmap ,error ){const _bfcc ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";
if _acgbe ==nil {return nil ,_f .Error (_bfcc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _gbd <=0{return nil ,_f .Error (_bfcc ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");
};if _gbd ==1{_efbg ,_dace :=_bbdb (nil ,_acgbe );if _dace !=nil {return nil ,_f .Wrap (_dace ,_bfcc ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _efbg ,nil ;};_ggdd ,_bfag :=_cfc (_acgbe ,_gbd ,_gbd );if _bfag !=nil {return nil ,_f .Wrap (_bfag ,_bfcc ,"");
};return _ggdd ,nil ;};func (_efd *Bitmap )thresholdPixelSum (_gged int )bool {var (_bcag int ;_ddde uint8 ;_gdba byte ;_gfca int ;);_faed :=_efd .RowStride ;_dbba :=uint (_efd .Width &0x07);if _dbba !=0{_ddde =uint8 ((0xff<<(8-_dbba ))&0xff);_faed --;
};for _dfed :=0;_dfed < _efd .Height ;_dfed ++{for _gfca =0;_gfca < _faed ;_gfca ++{_gdba =_efd .Data [_dfed *_efd .RowStride +_gfca ];_bcag +=int (_deac [_gdba ]);};if _dbba !=0{_gdba =_efd .Data [_dfed *_efd .RowStride +_gfca ]&_ddde ;_bcag +=int (_deac [_gdba ]);
};if _bcag > _gged {return true ;};};return false ;};func (_ece *Bitmap )String ()string {var _faa ="\u000a";for _gcdf :=0;_gcdf < _ece .Height ;_gcdf ++{var _fga string ;for _ffa :=0;_ffa < _ece .Width ;_ffa ++{_gbbe :=_ece .GetPixel (_ffa ,_gcdf );if _gbbe {_fga +="\u0031";
}else {_fga +="\u0030";};};_faa +=_fga +"\u000a";};return _faa ;};func _fdbe (_ggb ,_deda *Bitmap ,_dada ,_bebb ,_edca uint ,_cfce ,_gabe int ,_ffga bool ,_eadge ,_cegg int )error {for _cccb :=_cfce ;_cccb < _gabe ;_cccb ++{if _eadge +1< len (_ggb .Data ){_acgb :=_cccb +1==_gabe ;
_ddfb ,_egcc :=_ggb .GetByte (_eadge );if _egcc !=nil {return _egcc ;};_eadge ++;_ddfb <<=_dada ;_gbef ,_egcc :=_ggb .GetByte (_eadge );if _egcc !=nil {return _egcc ;};_gbef >>=_bebb ;_ecfa :=_ddfb |_gbef ;if _acgb &&!_ffga {_ecfa =_eaaeb (_edca ,_ecfa );
};_egcc =_deda .SetByte (_cegg ,_ecfa );if _egcc !=nil {return _egcc ;};_cegg ++;if _acgb &&_ffga {_dbefg ,_bfce :=_ggb .GetByte (_eadge );if _bfce !=nil {return _bfce ;};_dbefg <<=_dada ;_ecfa =_eaaeb (_edca ,_dbefg );if _bfce =_deda .SetByte (_cegg ,_ecfa );
_bfce !=nil {return _bfce ;};};continue ;};_gbff ,_dbea :=_ggb .GetByte (_eadge );if _dbea !=nil {_db .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",_eadge ,_dbea );
return _dbea ;};_gbff <<=_dada ;_eadge ++;_dbea =_deda .SetByte (_cegg ,_gbff );if _dbea !=nil {return _dbea ;};_cegg ++;};return nil ;};func (_aec *Bitmap )ToImage ()_ad .Image {_baaf ,_dff :=_gc .NewImage (_aec .Width ,_aec .Height ,1,1,_aec .Data ,nil ,nil );
if _dff !=nil {_db .Log .Error ("\u0043\u006f\u006e\u0076\u0065\u0072\u0074\u0069\u006e\u0067\u0020j\u0062\u0069\u0067\u0032\u002e\u0042\u0069\u0074m\u0061p\u0020\u0074\u006f\u0020\u0069\u006d\u0061\u0067\u0065\u0075\u0074\u0069\u006c\u002e\u0049\u006d\u0061\u0067e\u0020\u0066\u0061\u0069\u006c\u0065\u0064\u003a\u0020\u0025\u0076",_dff );
};return _baaf ;};type ClassedPoints struct{*Points ;_a .IntSlice ;_gcff func (_afcce ,_aaded int )bool ;};var _dagf =[]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 (_ggf *Bitmap )GetBitOffset (x int )int {return x &0x07};func (_gdccg *BitmapsArray )AddBitmaps (bm *Bitmaps ){_gdccg .Values =append (_gdccg .Values ,bm )};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _geaf (src ,sequence ...);
};func (_dddd *Bitmap )connComponentsBB (_gggdc int )(_facb *Boxes ,_fabgd error ){const _gdc ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";if _gggdc !=4&&_gggdc !=8{return nil ,_f .Error (_gdc ,"\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 _dddd .Zero (){return &Boxes {},nil ;};_dddd .setPadBits (0);_dgfg ,_fabgd :=_bbdb (nil ,_dddd );if _fabgd !=nil {return nil ,_f .Wrap (_fabgd ,_gdc ,"\u0062\u006d\u0031");};_baec :=&_a .Stack {};_baec .Aux =&_a .Stack {};_facb =&Boxes {};var (_cddce ,_bbgb int ;
_ccad _ad .Point ;_fea bool ;_baca *_ad .Rectangle ;);for {if _ccad ,_fea ,_fabgd =_dgfg .nextOnPixel (_bbgb ,_cddce );_fabgd !=nil {return nil ,_f .Wrap (_fabgd ,_gdc ,"");};if !_fea {break ;};if _baca ,_fabgd =_acgd (_dgfg ,_baec ,_ccad .X ,_ccad .Y ,_gggdc );
_fabgd !=nil {return nil ,_f .Wrap (_fabgd ,_gdc ,"");};if _fabgd =_facb .Add (_baca );_fabgd !=nil {return nil ,_f .Wrap (_fabgd ,_gdc ,"");};_bbgb =_ccad .X ;_cddce =_ccad .Y ;};return _facb ,nil ;};func TstFrameBitmapData ()[]byte {return _egcbd .Data };
type byHeight Bitmaps ;func (_deec Points )GetIntX (i int )(int ,error ){if i >=len (_deec ){return 0,_f .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0058","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return int (_deec [i ].X ),nil ;};func _aebec (_aaee ,_fggbg *Bitmap ,_dfeg ,_efed int )(_feag error ){const _adad ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";var (_eeacc ,_fcad ,_gbbc ,_egcf int ;_bebbc ,_agef ,_cgdfa ,_efcg ,_ggef ,_dgcc ,_dfff ,_agbd byte ;
);for _eeacc =0;_eeacc < _dfeg ;_eeacc ++{_gbbc =_eeacc *_aaee .RowStride ;_egcf =_eeacc *_fggbg .RowStride ;for _fcad =0;_fcad < _efed ;_fcad ++{if _bebbc ,_feag =_aaee .GetByte (_gbbc +_fcad );_feag !=nil {return _f .Wrap (_feag ,_adad ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _agef ,_feag =_fggbg .GetByte (_egcf +_fcad );_feag !=nil {return _f .Wrap (_feag ,_adad ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");};if _eeacc > 0{if _cgdfa ,_feag =_aaee .GetByte (_gbbc -_aaee .RowStride +_fcad );
_feag !=nil {return _f .Wrap (_feag ,_adad ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_bebbc |=_cgdfa |(_cgdfa <<1)|(_cgdfa >>1);if _fcad > 0{if _agbd ,_feag =_aaee .GetByte (_gbbc -_aaee .RowStride +_fcad -1);_feag !=nil {return _f .Wrap (_feag ,_adad ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");
};_bebbc |=_agbd <<7;};if _fcad < _efed -1{if _agbd ,_feag =_aaee .GetByte (_gbbc -_aaee .RowStride +_fcad +1);_feag !=nil {return _f .Wrap (_feag ,_adad ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_bebbc |=_agbd >>7;
};};if _fcad > 0{if _efcg ,_feag =_aaee .GetByte (_gbbc +_fcad -1);_feag !=nil {return _f .Wrap (_feag ,_adad ,"\u006a\u0020\u003e \u0030");};_bebbc |=_efcg <<7;};_bebbc &=_agef ;if _bebbc ==0||^_bebbc ==0{if _feag =_aaee .SetByte (_gbbc +_fcad ,_bebbc );
_feag !=nil {return _f .Wrap (_feag ,_adad ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");};};for {_dfff =_bebbc ;_bebbc =(_bebbc |(_bebbc >>1)|(_bebbc <<1))&_agef ;if (_bebbc ^_dfff )==0{if _feag =_aaee .SetByte (_gbbc +_fcad ,_bebbc );
_feag !=nil {return _f .Wrap (_feag ,_adad ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _eeacc =_dfeg -1;_eeacc >=0;_eeacc --{_gbbc =_eeacc *_aaee .RowStride ;_egcf =_eeacc *_fggbg .RowStride ;
for _fcad =_efed -1;_fcad >=0;_fcad --{if _bebbc ,_feag =_aaee .GetByte (_gbbc +_fcad );_feag !=nil {return _f .Wrap (_feag ,_adad ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _agef ,_feag =_fggbg .GetByte (_egcf +_fcad );_feag !=nil {return _f .Wrap (_feag ,_adad ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _eeacc < _dfeg -1{if _ggef ,_feag =_aaee .GetByte (_gbbc +_aaee .RowStride +_fcad );
_feag !=nil {return _f .Wrap (_feag ,_adad ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_bebbc |=_ggef |(_ggef <<1)|_ggef >>1;if _fcad > 0{if _agbd ,_feag =_aaee .GetByte (_gbbc +_aaee .RowStride +_fcad -1);
_feag !=nil {return _f .Wrap (_feag ,_adad ,"\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");};_bebbc |=_agbd <<7;};if _fcad < _efed -1{if _agbd ,_feag =_aaee .GetByte (_gbbc +_aaee .RowStride +_fcad +1);
_feag !=nil {return _f .Wrap (_feag ,_adad ,"\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");
};_bebbc |=_agbd >>7;};};if _fcad < _efed -1{if _dgcc ,_feag =_aaee .GetByte (_gbbc +_fcad +1);_feag !=nil {return _f .Wrap (_feag ,_adad ,"\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");
};_bebbc |=_dgcc >>7;};_bebbc &=_agef ;if _bebbc ==0||(^_bebbc )==0{if _feag =_aaee .SetByte (_gbbc +_fcad ,_bebbc );_feag !=nil {return _f .Wrap (_feag ,_adad ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_dfff =_bebbc ;
_bebbc =(_bebbc |(_bebbc >>1)|(_bebbc <<1))&_agef ;if (_bebbc ^_dfff )==0{if _feag =_aaee .SetByte (_gbbc +_fcad ,_bebbc );_feag !=nil {return _f .Wrap (_feag ,_adad ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
};break ;};};};};return nil ;};func (_bbcc *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _egab ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";
_cacd ,_fbea :=_bbcc .selectByIndexes (idx );if _fbea !=nil {return nil ,_f .Wrap (_fbea ,_egab ,"");};return _cacd ,nil ;};