// // 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 (_f "encoding/binary";_ce "github.com/stretchr/testify/require";_ag "github.com/unidoc/unipdf/v3/common";_a "github.com/unidoc/unipdf/v3/internal/bitwise";_ceg "github.com/unidoc/unipdf/v3/internal/imageutil";_bc "github.com/unidoc/unipdf/v3/internal/jbig2/basic"; _c "github.com/unidoc/unipdf/v3/internal/jbig2/errors";_gg "image";_eb "math";_e "sort";_b "strings";_g "testing";);func _fbdd (_gacg *Bitmap ,_aba int ,_bf []byte )(_dge *Bitmap ,_fg error ){const _cea ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032"; if _gacg ==nil {return nil ,_c .Error (_cea ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _aba < 1||_aba > 4{return nil ,_c .Error (_cea ,"\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 _gacg .Height <=1{return nil ,_c .Errorf (_cea ,"\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",_gacg .Height ); };_dge =New (_gacg .Width /2,_gacg .Height /2);if _bf ==nil {_bf =_fad ();};_de :=_gece (_gacg .RowStride ,2*_dge .RowStride );switch _aba {case 1:_fg =_ggd (_gacg ,_dge ,_aba ,_bf ,_de );case 2:_fg =_aea (_gacg ,_dge ,_aba ,_bf ,_de );case 3:_fg =_ead (_gacg ,_dge ,_aba ,_bf ,_de ); case 4:_fg =_bgf (_gacg ,_dge ,_aba ,_bf ,_de );};if _fg !=nil {return nil ,_fg ;};return _dge ,nil ;};var _cgdc [256]uint8 ;func (_fgcf *Bitmap )Copy ()*Bitmap {_bdb :=make ([]byte ,len (_fgcf .Data ));copy (_bdb ,_fgcf .Data );return &Bitmap {Width :_fgcf .Width ,Height :_fgcf .Height ,RowStride :_fgcf .RowStride ,Data :_bdb ,Color :_fgcf .Color ,Text :_fgcf .Text ,BitmapNumber :_fgcf .BitmapNumber ,Special :_fgcf .Special }; };func (_fea *Boxes )Add (box *_gg .Rectangle )error {if _fea ==nil {return _c .Error ("\u0042o\u0078\u0065\u0073\u002e\u0041\u0064d","\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};*_fea =append (*_fea ,box ); return nil ;};func TstWordBitmapWithSpaces (t *_g .T ,scale ...int )*Bitmap {_aecdd :=1;if len (scale )> 0{_aecdd =scale [0];};_caee :=3;_cadg :=9+7+15+2*_caee +2*_caee ;_cbgc :=5+_caee +5+2*_caee ;_aggd :=New (_cadg *_aecdd ,_cbgc *_aecdd );_gaec :=&Bitmaps {}; var _cdad *int ;_caee *=_aecdd ;_abee :=_caee ;_cdad =&_abee ;_agbb :=_caee ;_eeceg :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_gaec ,_eeceg ,_cdad ,_agbb ,1*_aecdd );_eeceg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gaec ,_eeceg ,_cdad ,_agbb ,_caee ); _eeceg =TstISymbol (t ,scale ...);TstAddSymbol (t ,_gaec ,_eeceg ,_cdad ,_agbb ,1*_aecdd );_eeceg =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_gaec ,_eeceg ,_cdad ,_agbb ,_caee );_eeceg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_gaec ,_eeceg ,_cdad ,_agbb ,1*_aecdd ); _eeceg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gaec ,_eeceg ,_cdad ,_agbb ,1*_aecdd );_eeceg =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_gaec ,_eeceg ,_cdad ,_agbb ,0);*_cdad =_caee ;_agbb =5*_aecdd +_caee ;_eeceg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_gaec ,_eeceg ,_cdad ,_agbb ,1*_aecdd ); _eeceg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_gaec ,_eeceg ,_cdad ,_agbb ,_caee );_eeceg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_gaec ,_eeceg ,_cdad ,_agbb ,1*_aecdd );_eeceg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_gaec ,_eeceg ,_cdad ,_agbb ,1*_aecdd ); _eeceg =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_gaec ,_eeceg ,_cdad ,_agbb ,1*_aecdd );_eeceg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_gaec ,_eeceg ,_cdad ,_agbb ,1*_aecdd );_eeceg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_gaec ,_eeceg ,_cdad ,_agbb ,0); TstWriteSymbols (t ,_gaec ,_aggd );return _aggd ;};func (_ecea *Bitmap )connComponentsBitmapsBB (_cadc *Bitmaps ,_aefda int )(_fdb *Boxes ,_fdf error ){const _fegg ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042"; if _aefda !=4&&_aefda !=8{return nil ,_c .Error (_fegg ,"\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 _cadc ==nil {return nil ,_c .Error (_fegg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073"); };if len (_cadc .Values )> 0{return nil ,_c .Error (_fegg ,"\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 _ecea .Zero (){return &Boxes {},nil ;}; var (_abcg ,_fgaa ,_bab ,_deba *Bitmap ;);_ecea .setPadBits (0);if _abcg ,_fdf =_eaaf (nil ,_ecea );_fdf !=nil {return nil ,_c .Wrap (_fdf ,_fegg ,"\u0062\u006d\u0031");};if _fgaa ,_fdf =_eaaf (nil ,_ecea );_fdf !=nil {return nil ,_c .Wrap (_fdf ,_fegg ,"\u0062\u006d\u0032"); };_gafg :=&_bc .Stack {};_gafg .Aux =&_bc .Stack {};_fdb =&Boxes {};var (_cfgb ,_efbd int ;_bbgbd _gg .Point ;_gfce bool ;_bbef *_gg .Rectangle ;);for {if _bbgbd ,_gfce ,_fdf =_abcg .nextOnPixel (_cfgb ,_efbd );_fdf !=nil {return nil ,_c .Wrap (_fdf ,_fegg ,""); };if !_gfce {break ;};if _bbef ,_fdf =_bgga (_abcg ,_gafg ,_bbgbd .X ,_bbgbd .Y ,_aefda );_fdf !=nil {return nil ,_c .Wrap (_fdf ,_fegg ,"");};if _fdf =_fdb .Add (_bbef );_fdf !=nil {return nil ,_c .Wrap (_fdf ,_fegg ,"");};if _bab ,_fdf =_abcg .clipRectangle (_bbef ,nil ); _fdf !=nil {return nil ,_c .Wrap (_fdf ,_fegg ,"\u0062\u006d\u0033");};if _deba ,_fdf =_fgaa .clipRectangle (_bbef ,nil );_fdf !=nil {return nil ,_c .Wrap (_fdf ,_fegg ,"\u0062\u006d\u0034");};if _ ,_fdf =_ddc (_bab ,_bab ,_deba );_fdf !=nil {return nil ,_c .Wrap (_fdf ,_fegg ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4"); };if _fdf =_fgaa .RasterOperation (_bbef .Min .X ,_bbef .Min .Y ,_bbef .Dx (),_bbef .Dy (),PixSrcXorDst ,_bab ,0,0);_fdf !=nil {return nil ,_c .Wrap (_fdf ,_fegg ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_cadc .AddBitmap (_bab ); _cfgb =_bbgbd .X ;_efbd =_bbgbd .Y ;};_cadc .Boxes =*_fdb ;return _fdb ,nil ;};func _cabc (_ecfa *Bitmap ,_agcg ,_dfff int ,_beea ,_gacce int ,_dbdeg RasterOperator ,_adegf *Bitmap ,_cgdcb ,_bfcg int )error {var _ceeg ,_cdea ,_dfeb ,_fdge int ;if _agcg < 0{_cgdcb -=_agcg ; _beea +=_agcg ;_agcg =0;};if _cgdcb < 0{_agcg -=_cgdcb ;_beea +=_cgdcb ;_cgdcb =0;};_ceeg =_agcg +_beea -_ecfa .Width ;if _ceeg > 0{_beea -=_ceeg ;};_cdea =_cgdcb +_beea -_adegf .Width ;if _cdea > 0{_beea -=_cdea ;};if _dfff < 0{_bfcg -=_dfff ;_gacce +=_dfff ; _dfff =0;};if _bfcg < 0{_dfff -=_bfcg ;_gacce +=_bfcg ;_bfcg =0;};_dfeb =_dfff +_gacce -_ecfa .Height ;if _dfeb > 0{_gacce -=_dfeb ;};_fdge =_bfcg +_gacce -_adegf .Height ;if _fdge > 0{_gacce -=_fdge ;};if _beea <=0||_gacce <=0{return nil ;};var _egde error ; switch {case _agcg &7==0&&_cgdcb &7==0:_egde =_ddcc (_ecfa ,_agcg ,_dfff ,_beea ,_gacce ,_dbdeg ,_adegf ,_cgdcb ,_bfcg );case _agcg &7==_cgdcb &7:_egde =_fecf (_ecfa ,_agcg ,_dfff ,_beea ,_gacce ,_dbdeg ,_adegf ,_cgdcb ,_bfcg );default:_egde =_gbee (_ecfa ,_agcg ,_dfff ,_beea ,_gacce ,_dbdeg ,_adegf ,_cgdcb ,_bfcg ); };if _egde !=nil {return _c .Wrap (_egde ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_badf bool ,_cfcf error ){const _bfca ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074"; _eebg ,_bbae :=p1 .Width ,p1 .Height ;_dfafb ,_edgd :=p3 .Width ,p3 .Height ;if _bc .Abs (_eebg -_dfafb )> maxDiffW {return false ,nil ;};if _bc .Abs (_bbae -_edgd )> maxDiffH {return false ,nil ;};_gba :=int (float32 (area1 )*(1.0-rank )+0.5);_gccd :=int (float32 (area3 )*(1.0-rank )+0.5); var _gddcb ,_ccfa int ;if delX >=0{_gddcb =int (delX +0.5);}else {_gddcb =int (delX -0.5);};if delY >=0{_ccfa =int (delY +0.5);}else {_ccfa =int (delY -0.5);};_ffec :=p1 .CreateTemplate ();if _cfcf =_ffec .RasterOperation (0,0,_eebg ,_bbae ,PixSrc ,p1 ,0,0); _cfcf !=nil {return false ,_c .Wrap (_cfcf ,_bfca ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _cfcf =_ffec .RasterOperation (_gddcb ,_ccfa ,_eebg ,_bbae ,PixNotSrcAndDst ,p4 ,0,0);_cfcf !=nil {return false ,_c .Wrap (_cfcf ,_bfca ,"\u0074 \u0026\u0020\u0021\u0070\u0034"); };_badf ,_cfcf =_ffec .ThresholdPixelSum (_gba ,tab8 );if _cfcf !=nil {return false ,_c .Wrap (_cfcf ,_bfca ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _badf {return false ,nil ;};if _cfcf =_ffec .RasterOperation (_gddcb ,_ccfa ,_dfafb ,_edgd ,PixSrc ,p3 ,0,0); _cfcf !=nil {return false ,_c .Wrap (_cfcf ,_bfca ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _cfcf =_ffec .RasterOperation (0,0,_dfafb ,_edgd ,PixNotSrcAndDst ,p2 ,0,0);_cfcf !=nil {return false ,_c .Wrap (_cfcf ,_bfca ,"\u0074 \u0026\u0020\u0021\u0070\u0032"); };_badf ,_cfcf =_ffec .ThresholdPixelSum (_gccd ,tab8 );if _cfcf !=nil {return false ,_c .Wrap (_cfcf ,_bfca ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_badf ,nil ;};func TstWriteSymbols (t *_g .T ,bms *Bitmaps ,src *Bitmap ){for _afbee :=0; _afbee < bms .Size ();_afbee ++{_dbfg :=bms .Values [_afbee ];_edaae :=bms .Boxes [_afbee ];_agcd :=src .RasterOperation (_edaae .Min .X ,_edaae .Min .Y ,_dbfg .Width ,_dbfg .Height ,PixSrc ,_dbfg ,0,0);_ce .NoError (t ,_agcd );};};func _aea (_eab ,_ecef *Bitmap ,_fbf int ,_eae []byte ,_bcb int )(_eca error ){const _acge ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032"; var (_dgc ,_ggg ,_gf ,_dca ,_egg ,_abe ,_fgg ,_bcc int ;_gaga ,_dbbg ,_gbe ,_aag uint32 ;_dgd ,_fbcd byte ;_bbf uint16 ;);_fce :=make ([]byte ,4);_dabg :=make ([]byte ,4);for _gf =0;_gf < _eab .Height -1;_gf ,_dca =_gf +2,_dca +1{_dgc =_gf *_eab .RowStride ; _ggg =_dca *_ecef .RowStride ;for _egg ,_abe =0,0;_egg < _bcb ;_egg ,_abe =_egg +4,_abe +1{for _fgg =0;_fgg < 4;_fgg ++{_bcc =_dgc +_egg +_fgg ;if _bcc <=len (_eab .Data )-1&&_bcc < _dgc +_eab .RowStride {_fce [_fgg ]=_eab .Data [_bcc ];}else {_fce [_fgg ]=0x00; };_bcc =_dgc +_eab .RowStride +_egg +_fgg ;if _bcc <=len (_eab .Data )-1&&_bcc < _dgc +(2*_eab .RowStride ){_dabg [_fgg ]=_eab .Data [_bcc ];}else {_dabg [_fgg ]=0x00;};};_gaga =_f .BigEndian .Uint32 (_fce );_dbbg =_f .BigEndian .Uint32 (_dabg );_gbe =_gaga &_dbbg ; _gbe |=_gbe <<1;_aag =_gaga |_dbbg ;_aag &=_aag <<1;_dbbg =_gbe |_aag ;_dbbg &=0xaaaaaaaa;_gaga =_dbbg |(_dbbg <<7);_dgd =byte (_gaga >>24);_fbcd =byte ((_gaga >>8)&0xff);_bcc =_ggg +_abe ;if _bcc +1==len (_ecef .Data )-1||_bcc +1>=_ggg +_ecef .RowStride {if _eca =_ecef .SetByte (_bcc ,_eae [_dgd ]); _eca !=nil {return _c .Wrapf (_eca ,_acge ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_bcc );};}else {_bbf =(uint16 (_eae [_dgd ])<<8)|uint16 (_eae [_fbcd ]);if _eca =_ecef .setTwoBytes (_bcc ,_bbf );_eca !=nil {return _c .Wrapf (_eca ,_acge ,"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",_bcc ); };_abe ++;};};};return nil ;};func _eabfc (_fabbf *Bitmap ,_gbac *_bc .Stack ,_eecea ,_bbecbc int )(_deca *_gg .Rectangle ,_aebf error ){const _bgge ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _fabbf ==nil {return nil ,_c .Error (_bgge ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070"); };if _gbac ==nil {return nil ,_c .Error (_bgge ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_bbbba ,_eeeed :=_fabbf .Width ,_fabbf .Height ;_bege :=_bbbba -1;_ddcac :=_eeeed -1;if _eecea < 0||_eecea > _bege ||_bbecbc < 0||_bbecbc > _ddcac ||!_fabbf .GetPixel (_eecea ,_bbecbc ){return nil ,nil ; };var _fggf *_gg .Rectangle ;_fggf ,_aebf =Rect (100000,100000,0,0);if _aebf !=nil {return nil ,_c .Wrap (_aebf ,_bgge ,"");};if _aebf =_bcge (_gbac ,_eecea ,_eecea ,_bbecbc ,1,_ddcac ,_fggf );_aebf !=nil {return nil ,_c .Wrap (_aebf ,_bgge ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068"); };if _aebf =_bcge (_gbac ,_eecea ,_eecea ,_bbecbc +1,-1,_ddcac ,_fggf );_aebf !=nil {return nil ,_c .Wrap (_aebf ,_bgge ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_fggf .Min .X ,_fggf .Max .X =_eecea ,_eecea ; _fggf .Min .Y ,_fggf .Max .Y =_bbecbc ,_bbecbc ;var (_cfdg *fillSegment ;_bbgg int ;);for _gbac .Len ()> 0{if _cfdg ,_aebf =_effg (_gbac );_aebf !=nil {return nil ,_c .Wrap (_aebf ,_bgge ,"");};_bbecbc =_cfdg ._edacf ;for _eecea =_cfdg ._ffac ;_eecea >=0&&_fabbf .GetPixel (_eecea ,_bbecbc ); _eecea --{if _aebf =_fabbf .SetPixel (_eecea ,_bbecbc ,0);_aebf !=nil {return nil ,_c .Wrap (_aebf ,_bgge ,"");};};if _eecea >=_cfdg ._ffac {for _eecea ++;_eecea <=_cfdg ._egace &&_eecea <=_bege &&!_fabbf .GetPixel (_eecea ,_bbecbc );_eecea ++{};_bbgg =_eecea ; if !(_eecea <=_cfdg ._egace &&_eecea <=_bege ){continue ;};}else {_bbgg =_eecea +1;if _bbgg < _cfdg ._ffac -1{if _aebf =_bcge (_gbac ,_bbgg ,_cfdg ._ffac -1,_cfdg ._edacf ,-_cfdg ._ageg ,_ddcac ,_fggf );_aebf !=nil {return nil ,_c .Wrap (_aebf ,_bgge ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065"); };};_eecea =_cfdg ._ffac +1;};for {for ;_eecea <=_bege &&_fabbf .GetPixel (_eecea ,_bbecbc );_eecea ++{if _aebf =_fabbf .SetPixel (_eecea ,_bbecbc ,0);_aebf !=nil {return nil ,_c .Wrap (_aebf ,_bgge ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _aebf =_bcge (_gbac ,_bbgg ,_eecea -1,_cfdg ._edacf ,_cfdg ._ageg ,_ddcac ,_fggf ); _aebf !=nil {return nil ,_c .Wrap (_aebf ,_bgge ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _eecea > _cfdg ._egace +1{if _aebf =_bcge (_gbac ,_cfdg ._egace +1,_eecea -1,_cfdg ._edacf ,-_cfdg ._ageg ,_ddcac ,_fggf );_aebf !=nil {return nil ,_c .Wrap (_aebf ,_bgge ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065"); };};for _eecea ++;_eecea <=_cfdg ._egace &&_eecea <=_bege &&!_fabbf .GetPixel (_eecea ,_bbecbc );_eecea ++{};_bbgg =_eecea ;if !(_eecea <=_cfdg ._egace &&_eecea <=_bege ){break ;};};};_fggf .Max .X ++;_fggf .Max .Y ++;return _fggf ,nil ;};func (_gedb *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _gedb .Copy (),nil ; };_ccc ,_ebe :=_gedb .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );if _ebe !=nil {return nil ,_c .Wrap (_ebe ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _ccc ,nil ;};type Component int ;func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _dcaa (d ,s ,hSize ,vSize )}; type Getter interface{GetBitmap ()*Bitmap ;};func (_cga *Bitmap )InverseData (){_cga .inverseData ()};func init (){for _agd :=0;_agd < 256;_agd ++{_cgdc [_agd ]=uint8 (_agd &0x1)+(uint8 (_agd >>1)&0x1)+(uint8 (_agd >>2)&0x1)+(uint8 (_agd >>3)&0x1)+(uint8 (_agd >>4)&0x1)+(uint8 (_agd >>5)&0x1)+(uint8 (_agd >>6)&0x1)+(uint8 (_agd >>7)&0x1); };};func (_eedf *Bitmap )setFourBytes (_dfbd int ,_eccb uint32 )error {if _dfbd +3> len (_eedf .Data )-1{return _c .Errorf ("\u0073\u0065\u0074F\u006f\u0075\u0072\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_dfbd ); };_eedf .Data [_dfbd ]=byte ((_eccb &0xff000000)>>24);_eedf .Data [_dfbd +1]=byte ((_eccb &0xff0000)>>16);_eedf .Data [_dfbd +2]=byte ((_eccb &0xff00)>>8);_eedf .Data [_dfbd +3]=byte (_eccb &0xff);return nil ;};func _bgf (_gafb ,_gbb *Bitmap ,_fbdf int ,_abba []byte ,_afed int )(_cbb error ){const _daa ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034"; var (_cfca ,_bbcc ,_efe ,_cda ,_ecab ,_ceb ,_ccb ,_gbc int ;_cdc ,_dabf uint32 ;_eefe ,_dbbb byte ;_bcbf uint16 ;);_bgfd :=make ([]byte ,4);_bbcb :=make ([]byte ,4);for _efe =0;_efe < _gafb .Height -1;_efe ,_cda =_efe +2,_cda +1{_cfca =_efe *_gafb .RowStride ; _bbcc =_cda *_gbb .RowStride ;for _ecab ,_ceb =0,0;_ecab < _afed ;_ecab ,_ceb =_ecab +4,_ceb +1{for _ccb =0;_ccb < 4;_ccb ++{_gbc =_cfca +_ecab +_ccb ;if _gbc <=len (_gafb .Data )-1&&_gbc < _cfca +_gafb .RowStride {_bgfd [_ccb ]=_gafb .Data [_gbc ];}else {_bgfd [_ccb ]=0x00; };_gbc =_cfca +_gafb .RowStride +_ecab +_ccb ;if _gbc <=len (_gafb .Data )-1&&_gbc < _cfca +(2*_gafb .RowStride ){_bbcb [_ccb ]=_gafb .Data [_gbc ];}else {_bbcb [_ccb ]=0x00;};};_cdc =_f .BigEndian .Uint32 (_bgfd );_dabf =_f .BigEndian .Uint32 (_bbcb ); _dabf &=_cdc ;_dabf &=_dabf <<1;_dabf &=0xaaaaaaaa;_cdc =_dabf |(_dabf <<7);_eefe =byte (_cdc >>24);_dbbb =byte ((_cdc >>8)&0xff);_gbc =_bbcc +_ceb ;if _gbc +1==len (_gbb .Data )-1||_gbc +1>=_bbcc +_gbb .RowStride {_gbb .Data [_gbc ]=_abba [_eefe ];if _cbb =_gbb .SetByte (_gbc ,_abba [_eefe ]); _cbb !=nil {return _c .Wrapf (_cbb ,_daa ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gbc );};}else {_bcbf =(uint16 (_abba [_eefe ])<<8)|uint16 (_abba [_dbbb ]);if _cbb =_gbb .setTwoBytes (_gbc ,_bcbf );_cbb !=nil {return _c .Wrapf (_cbb ,_daa ,"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",_gbc ); };_ceb ++;};};};return nil ;};func (_eefg *Bitmap )ToImage ()_gg .Image {_bfa ,_gfd :=_ceg .NewImage (_eefg .Width ,_eefg .Height ,1,1,_eefg .Data ,nil ,nil );if _gfd !=nil {_ag .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",_gfd ); };return _bfa ;};func (_ccdg *Bitmap )centroid (_ceec ,_aabac []int )(Point ,error ){_ggeg :=Point {};_ccdg .setPadBits (0);if len (_ceec )==0{_ceec =_fadf ();};if len (_aabac )==0{_aabac =_baag ();};var _dgac ,_aeea ,_aaec ,_abfd ,_bbcfb ,_cgcd int ;var _ebdb byte ; for _bbcfb =0;_bbcfb < _ccdg .Height ;_bbcfb ++{_gefa :=_ccdg .RowStride *_bbcfb ;_abfd =0;for _cgcd =0;_cgcd < _ccdg .RowStride ;_cgcd ++{_ebdb =_ccdg .Data [_gefa +_cgcd ];if _ebdb !=0{_abfd +=_aabac [_ebdb ];_dgac +=_ceec [_ebdb ]+_cgcd *8*_aabac [_ebdb ]; };};_aaec +=_abfd ;_aeea +=_abfd *_bbcfb ;};if _aaec !=0{_ggeg .X =float32 (_dgac )/float32 (_aaec );_ggeg .Y =float32 (_aeea )/float32 (_aaec );};return _ggeg ,nil ;};type Point struct{X ,Y float32 ;};func (_cgfb Points )GetIntY (i int )(int ,error ){if i >=len (_cgfb ){return 0,_c .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0059","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i ); };return int (_cgfb [i ].Y ),nil ;};func _gcgf (_ffcf ,_acgg *Bitmap ,_adgg *Selection )(*Bitmap ,error ){const _aeaf ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _ccaae ,_adfde int ;if _acgg ==nil {return nil ,_c .Error (_aeaf ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c"); };if _adgg ==nil {return nil ,_c .Error (_aeaf ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_ccaae =_adgg .Width ;_adfde =_adgg .Height ;if _ccaae ==0||_adfde ==0{return nil ,_c .Error (_aeaf ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030"); };if _ffcf ==nil {return _acgg .createTemplate (),nil ;};if _gce :=_ffcf .resizeImageData (_acgg );_gce !=nil {return nil ,_gce ;};return _ffcf ,nil ;};func (_bfab *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_cbcdd *Bitmaps ,_abae error ){const _faac ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065"; if _bfab ==nil {return nil ,_c .Error (_faac ,"\u0027\u0062\u0027 B\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_faac ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp ); };switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_c .Errorf (_faac ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation ); };_caffa ,_abae :=_bfab .makeSizeIndicator (width ,height ,tp ,relation );if _abae !=nil {return nil ,_c .Wrap (_abae ,_faac ,"");};_cbcdd ,_abae =_bfab .selectByIndicator (_caffa );if _abae !=nil {return nil ,_c .Wrap (_abae ,_faac ,"");};return _cbcdd ,nil ; };func (_gffec MorphProcess )getWidthHeight ()(_cfec ,_eaeb int ){return _gffec .Arguments [0],_gffec .Arguments [1];};func (_cebb *Bitmap )clearAll ()error {return _cebb .RasterOperation (0,0,_cebb .Width ,_cebb .Height ,PixClr ,nil ,0,0);};func (_bbdb *ClassedPoints )SortByX (){_bbdb ._aacb =_bbdb .xSortFunction (); _e .Sort (_bbdb )};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_ebbg float64 ,_egad error ){const _cdgf ="\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 _ebbg ,_c .Error (_cdgf ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _ebbg ,_c .Error (_cdgf ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); };if area1 ==0||area2 ==0{return _ebbg ,_c .Error (_cdgf ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_gcc ,_fdad :=bm1 .Width ,bm1 .Height ;_eebb ,_efceg :=bm2 .Width ,bm2 .Height ; if _cada (_gcc -_eebb )> maxDiffW {return 0,nil ;};if _cada (_fdad -_efceg )> maxDiffH {return 0,nil ;};var _gcgd ,_cdbf int ;if delX >=0{_gcgd =int (delX +0.5);}else {_gcgd =int (delX -0.5);};if delY >=0{_cdbf =int (delY +0.5);}else {_cdbf =int (delY -0.5); };_gacd :=bm1 .createTemplate ();if _egad =_gacd .RasterOperation (_gcgd ,_cdbf ,_eebb ,_efceg ,PixSrc ,bm2 ,0,0);_egad !=nil {return _ebbg ,_c .Wrap (_egad ,_cdgf ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _egad =_gacd .RasterOperation (0,0,_gcc ,_fdad ,PixSrcAndDst ,bm1 ,0,0); _egad !=nil {return _ebbg ,_c .Wrap (_egad ,_cdgf ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_geag :=_gacd .countPixels ();_ebbg =float64 (_geag )*float64 (_geag )/(float64 (area1 )*float64 (area2 ));return _ebbg ,nil ;};func _gaed (_aaba ,_cffa *Bitmap ,_dgcg ,_aabbe ,_dbf ,_dfbg ,_bbec int ,_ddac CombinationOperator )error {var _bace int ; _ccdfe :=func (){_bace ++;_dbf +=_cffa .RowStride ;_dfbg +=_aaba .RowStride ;_bbec +=_aaba .RowStride };for _bace =_dgcg ;_bace < _aabbe ;_ccdfe (){_dcgg :=_dbf ;for _ceda :=_dfbg ;_ceda <=_bbec ;_ceda ++{_ffga ,_fcff :=_cffa .GetByte (_dcgg );if _fcff !=nil {return _fcff ; };_efb ,_fcff :=_aaba .GetByte (_ceda );if _fcff !=nil {return _fcff ;};if _fcff =_cffa .SetByte (_dcgg ,_caf (_ffga ,_efb ,_ddac ));_fcff !=nil {return _fcff ;};_dcgg ++;};};return nil ;};func _dad (_baga ,_fgba *Bitmap ,_adbc ,_bcda ,_dfaf ,_fcgb ,_agea ,_ffgb ,_dcca ,_dgdc int ,_ceed CombinationOperator ,_gfee int )error {var _fgca int ; _ebadd :=func (){_fgca ++;_dfaf +=_fgba .RowStride ;_fcgb +=_baga .RowStride ;_agea +=_baga .RowStride };for _fgca =_adbc ;_fgca < _bcda ;_ebadd (){var _dcggd uint16 ;_fgbd :=_dfaf ;for _ddga :=_fcgb ;_ddga <=_agea ;_ddga ++{_fbae ,_bdbgd :=_fgba .GetByte (_fgbd ); if _bdbgd !=nil {return _bdbgd ;};_fed ,_bdbgd :=_baga .GetByte (_ddga );if _bdbgd !=nil {return _bdbgd ;};_dcggd =(_dcggd |(uint16 (_fed )&0xff))<>8);if _bdbgd =_fgba .SetByte (_fgbd ,_caf (_fbae ,_fed ,_ceed ));_bdbgd !=nil {return _bdbgd ; };_fgbd ++;_dcggd <<=uint (_dcca );if _ddga ==_agea {_fed =byte (_dcggd >>(8-uint8 (_dgdc )));if _gfee !=0{_fed =_gfba (uint (8+_ffgb ),_fed );};_fbae ,_bdbgd =_fgba .GetByte (_fgbd );if _bdbgd !=nil {return _bdbgd ;};if _bdbgd =_fgba .SetByte (_fgbd ,_caf (_fbae ,_fed ,_ceed )); _bdbgd !=nil {return _bdbgd ;};};};};return nil ;};func (_acec *Boxes )Get (i int )(*_gg .Rectangle ,error ){const _ccba ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _acec ==nil {return nil ,_c .Error (_ccba ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); };if i > len (*_acec )-1{return nil ,_c .Errorf (_ccba ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_acec )[i ],nil ;};func (_gca *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_gca .Width ,Height :_gca .Height ,RowStride :_gca .RowStride ,Color :_gca .Color ,Text :_gca .Text ,BitmapNumber :_gca .BitmapNumber ,Special :_gca .Special ,Data :make ([]byte ,len (_gca .Data ))}; };func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _cfe ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_fafe :=_dee (width ,height );_fafe .Data =data ;if _ddee :=((width *height )+7)>>3; len (data )< _ddee {return nil ,_c .Errorf (_cfe ,"\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 ),_ddee ); };if _adbe :=_fafe .addPadBits ();_adbe !=nil {return nil ,_c .Wrap (_adbe ,_cfe ,"");};return _fafe ,nil ;};const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ; );func TstCSymbol (t *_g .T )*Bitmap {t .Helper ();_cbeg :=New (6,6);_ce .NoError (t ,_cbeg .SetPixel (1,0,1));_ce .NoError (t ,_cbeg .SetPixel (2,0,1));_ce .NoError (t ,_cbeg .SetPixel (3,0,1));_ce .NoError (t ,_cbeg .SetPixel (4,0,1));_ce .NoError (t ,_cbeg .SetPixel (0,1,1)); _ce .NoError (t ,_cbeg .SetPixel (5,1,1));_ce .NoError (t ,_cbeg .SetPixel (0,2,1));_ce .NoError (t ,_cbeg .SetPixel (0,3,1));_ce .NoError (t ,_cbeg .SetPixel (0,4,1));_ce .NoError (t ,_cbeg .SetPixel (5,4,1));_ce .NoError (t ,_cbeg .SetPixel (1,5,1)); _ce .NoError (t ,_cbeg .SetPixel (2,5,1));_ce .NoError (t ,_cbeg .SetPixel (3,5,1));_ce .NoError (t ,_cbeg .SetPixel (4,5,1));return _cbeg ;};func _cada (_eadc int )int {if _eadc < 0{return -_eadc ;};return _eadc ;};func (_ffag *Bitmap )setPadBits (_cff int ){_gad :=8-_ffag .Width %8; if _gad ==8{return ;};_gff :=_ffag .Width /8;_cbg :=_gda [_gad ];if _cff ==0{_cbg ^=_cbg ;};var _cef int ;for _cfb :=0;_cfb < _ffag .Height ;_cfb ++{_cef =_cfb *_ffag .RowStride +_gff ;if _cff ==0{_ffag .Data [_cef ]&=_cbg ;}else {_ffag .Data [_cef ]|=_cbg ; };};};func _eaaf (_dfbdc ,_cab *Bitmap )(*Bitmap ,error ){if _cab ==nil {return nil ,_c .Error ("\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");}; if _cab ==_dfbdc {return _dfbdc ,nil ;};if _dfbdc ==nil {_dfbdc =_cab .createTemplate ();copy (_dfbdc .Data ,_cab .Data );return _dfbdc ,nil ;};_dbg :=_dfbdc .resizeImageData (_cab );if _dbg !=nil {return nil ,_c .Wrap (_dbg ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070",""); };_dfbdc .Text =_cab .Text ;copy (_dfbdc .Data ,_cab .Data );return _dfbdc ,nil ;};func _badd (_ccaf ,_bcae ,_egea *Bitmap ,_bdbda int )(*Bitmap ,error ){const _egcd ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _bcae ==nil {return nil ,_c .Error (_egcd ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c"); };if _egea ==nil {return nil ,_c .Error (_egcd ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _bdbda !=4&&_bdbda !=8{return nil ,_c .Error (_egcd ,"\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 _gdbf error ;_ccaf ,_gdbf =_eaaf (_ccaf ,_bcae );if _gdbf !=nil {return nil ,_c .Wrap (_gdbf ,_egcd ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_ecfd :=_bcae .createTemplate ();_egea .setPadBits (0); for _aggg :=0;_aggg < _fegbb ;_aggg ++{_ecfd ,_gdbf =_eaaf (_ecfd ,_ccaf );if _gdbf !=nil {return nil ,_c .Wrapf (_gdbf ,_egcd ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_aggg );};if _gdbf =_edcg (_ccaf ,_egea ,_bdbda ); _gdbf !=nil {return nil ,_c .Wrapf (_gdbf ,_egcd ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_aggg );};if _ecfd .Equals (_ccaf ){break ;};};return _ccaf ,nil ;};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )}; type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_gg .Rectangle ;};type MorphOperation int ;func (_adeaa *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _faec ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070"; if _adeaa ==nil {return nil ,_c .Error (_faec ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if s ==nil {return nil ,_c .Error (_faec ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d"); };_gdge :=len (_adeaa .Values );_gbgc :=&Bitmaps {Values :make ([]*Bitmap ,_gdge ),Boxes :make ([]*_gg .Rectangle ,_gdge )};var (_egcdf ,_fdagg *Bitmap ;_cbgf *_gg .Rectangle ;_cccd error ;);for _ebcf :=0;_ebcf < _gdge ;_ebcf ++{if _egcdf ,_cccd =_adeaa .GetBitmap (_ebcf ); _cccd !=nil {return nil ,_c .Wrap (_cccd ,_faec ,"");};if _cbgf ,_cccd =_adeaa .GetBox (_ebcf );_cccd !=nil {return nil ,_c .Wrap (_cccd ,_faec ,"");};if _fdagg ,_cccd =s .clipRectangle (_cbgf ,nil );_cccd !=nil {return nil ,_c .Wrap (_cccd ,_faec ,""); };if _fdagg ,_cccd =_fdagg .And (_egcdf );_cccd !=nil {return nil ,_c .Wrap (_cccd ,_faec ,"");};_gbgc .Values [_ebcf ]=_fdagg ;_gbgc .Boxes [_ebcf ]=_cbgf ;};return _gbgc ,nil ;};const (_ SizeSelection =iota ;SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ; SizeSelectByArea ;SizeSelectByPerimeter ;);func _ccfc (_bagb ,_debb int )int {if _bagb > _debb {return _bagb ;};return _debb ;};func (_gdb *Bitmap )setEightBytes (_dagf int ,_ddfa uint64 )error {_ecgc :=_gdb .RowStride -(_dagf %_gdb .RowStride );if _gdb .RowStride !=_gdb .Width >>3{_ecgc --; };if _ecgc >=8{return _gdb .setEightFullBytes (_dagf ,_ddfa );};return _gdb .setEightPartlyBytes (_dagf ,_ecgc ,_ddfa );};var _egfg =[5]int {1,2,3,0,4};func (_fbcb *byHeight )Less (i ,j int )bool {return _fbcb .Values [i ].Height < _fbcb .Values [j ].Height }; func (_cacc *BitmapsArray )GetBox (i int )(*_gg .Rectangle ,error ){const _ggga ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _cacc ==nil {return nil ,_c .Error (_ggga ,"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 (_cacc .Boxes )-1{return nil ,_c .Errorf (_ggga ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _cacc .Boxes [i ],nil ;};func (_fbde *Bitmap )GetVanillaData ()[]byte {if _fbde .Color ==Chocolate {_fbde .inverseData (); };return _fbde .Data ;};func MakePixelSumTab8 ()[]int {return _baag ()};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _gcde ="C\u006f\u0072\u0072\u0065\u006c\u0061t\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054h\u0072\u0065\u0073h\u006fl\u0064\u0065\u0064"; if bm1 ==nil {return false ,_c .Error (_gcde ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d1\u0020\u0069s\u0020\u006e\u0069\u006c"); };if bm2 ==nil {return false ,_c .Error (_gcde ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d2\u0020\u0069s\u0020\u006e\u0069\u006c"); };if area1 <=0||area2 <=0{return false ,_c .Error (_gcde ,"c\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006fn\u0053\u0063\u006f\u0072\u0065\u0054\u0068re\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u002d\u0020\u0061\u0072\u0065\u0061s \u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u003e\u0020\u0030"); };if downcount ==nil {return false ,_c .Error (_gcde ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u006f\u0020\u0027\u0064\u006f\u0077\u006e\u0063\u006f\u0075\u006e\u0074\u0027");};if tab ==nil {return false ,_c .Error (_gcde ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027"); };_fcdd ,_afg :=bm1 .Width ,bm1 .Height ;_fceb ,_cfff :=bm2 .Width ,bm2 .Height ;if _bc .Abs (_fcdd -_fceb )> maxDiffW {return false ,nil ;};if _bc .Abs (_afg -_cfff )> maxDiffH {return false ,nil ;};_ddca :=int (delX +_bc .Sign (delX )*0.5);_dccae :=int (delY +_bc .Sign (delY )*0.5); _bacc :=int (_eb .Ceil (_eb .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_bggc :=bm2 .RowStride ;_fbef :=_ccfc (_dccae ,0);_fcgbb :=_gece (_cfff +_dccae ,_afg );_bdcb :=bm1 .RowStride *_fbef ;_ebbff :=bm2 .RowStride *(_fbef -_dccae ); var _dbde int ;if _fcgbb <=_afg {_dbde =downcount [_fcgbb -1];};_befb :=_ccfc (_ddca ,0);_beac :=_gece (_fceb +_ddca ,_fcdd );var _cbgg ,_efgf int ;if _ddca >=8{_cbgg =_ddca >>3;_bdcb +=_cbgg ;_befb -=_cbgg <<3;_beac -=_cbgg <<3;_ddca &=7;}else if _ddca <=-8{_efgf =-((_ddca +7)>>3); _ebbff +=_efgf ;_bggc -=_efgf ;_ddca +=_efgf <<3;};var (_bfac ,_afgd ,_aeag int ;_agdb ,_dacf ,_ecbbbb byte ;);if _befb >=_beac ||_fbef >=_fcgbb {return false ,nil ;};_decg :=(_beac +7)>>3;switch {case _ddca ==0:for _afgd =_fbef ;_afgd < _fcgbb ;_afgd ,_bdcb ,_ebbff =_afgd +1,_bdcb +bm1 .RowStride ,_ebbff +bm2 .RowStride {for _aeag =0; _aeag < _decg ;_aeag ++{_agdb =bm1 .Data [_bdcb +_aeag ]&bm2 .Data [_ebbff +_aeag ];_bfac +=tab [_agdb ];};if _bfac >=_bacc {return true ,nil ;};if _ebfa :=_bfac +downcount [_afgd ]-_dbde ;_ebfa < _bacc {return false ,nil ;};};case _ddca > 0&&_bggc < _decg :for _afgd =_fbef ; _afgd < _fcgbb ;_afgd ,_bdcb ,_ebbff =_afgd +1,_bdcb +bm1 .RowStride ,_ebbff +bm2 .RowStride {_dacf =bm1 .Data [_bdcb ];_ecbbbb =bm2 .Data [_ebbff ]>>uint (_ddca );_agdb =_dacf &_ecbbbb ;_bfac +=tab [_agdb ];for _aeag =1;_aeag < _bggc ;_aeag ++{_dacf =bm1 .Data [_bdcb +_aeag ]; _ecbbbb =bm2 .Data [_ebbff +_aeag ]>>uint (_ddca )|bm2 .Data [_ebbff +_aeag -1]<=_bacc {return true ,nil ;}else if _bfac +downcount [_afgd ]-_dbde < _bacc {return false ,nil ;};};case _ddca > 0&&_bggc >=_decg :for _afgd =_fbef ;_afgd < _fcgbb ;_afgd ,_bdcb ,_ebbff =_afgd +1,_bdcb +bm1 .RowStride ,_ebbff +bm2 .RowStride {_dacf =bm1 .Data [_bdcb ]; _ecbbbb =bm2 .Data [_ebbff ]>>uint (_ddca );_agdb =_dacf &_ecbbbb ;_bfac +=tab [_agdb ];for _aeag =1;_aeag < _decg ;_aeag ++{_dacf =bm1 .Data [_bdcb +_aeag ];_ecbbbb =bm2 .Data [_ebbff +_aeag ]>>uint (_ddca );_ecbbbb |=bm2 .Data [_ebbff +_aeag -1]<=_bacc {return true ,nil ;}else if _bfac +downcount [_afgd ]-_dbde < _bacc {return false ,nil ;};};case _decg < _bggc :for _afgd =_fbef ;_afgd < _fcgbb ;_afgd ,_bdcb ,_ebbff =_afgd +1,_bdcb +bm1 .RowStride ,_ebbff +bm2 .RowStride {for _aeag =0; _aeag < _decg ;_aeag ++{_dacf =bm1 .Data [_bdcb +_aeag ];_ecbbbb =bm2 .Data [_ebbff +_aeag ]<>uint (8+_ddca );_agdb =_dacf &_ecbbbb ;_bfac +=tab [_agdb ];};if _bfac >=_bacc {return true ,nil ;}else if _gfdb :=_bfac +downcount [_afgd ]-_dbde ; _gfdb < _bacc {return false ,nil ;};};case _bggc >=_decg :for _afgd =_fbef ;_afgd < _fcgbb ;_afgd ,_bdcb ,_ebbff =_afgd +1,_bdcb +bm1 .RowStride ,_ebbff +bm2 .RowStride {for _aeag =0;_aeag < _decg ;_aeag ++{_dacf =bm1 .Data [_bdcb +_aeag ];_ecbbbb =bm2 .Data [_ebbff +_aeag ]<>uint (8+_ddca );_agdb =_dacf &_ecbbbb ;_bfac +=tab [_agdb ];};_dacf =bm1 .Data [_bdcb +_aeag ];_ecbbbb =bm2 .Data [_ebbff +_aeag ]<=_bacc {return true ,nil ; }else if _bfac +downcount [_afgd ]-_dbde < _bacc {return false ,nil ;};};};_fcca :=float32 (_bfac )*float32 (_bfac )/(float32 (area1 )*float32 (area2 ));if _fcca >=scoreThreshold {_ag .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",_bfac ,_bacc ,_fcca ,scoreThreshold ); };return false ,nil ;};type ClassedPoints struct{*Points ;_bc .IntSlice ;_aacb func (_eadf ,_cbcf int )bool ;};func (_gge *Bitmap )SetPadBits (value int ){_gge .setPadBits (value )};type Bitmaps struct{Values []*Bitmap ;Boxes []*_gg .Rectangle ;};func (_fgbgg *byWidth )Less (i ,j int )bool {return _fgbgg .Values [i ].Width < _fgbgg .Values [j ].Width }; func (_ebda *Bitmap )setTwoBytes (_efgc int ,_dega uint16 )error {if _efgc +1> len (_ebda .Data )-1{return _c .Errorf ("s\u0065\u0074\u0054\u0077\u006f\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_efgc ); };_ebda .Data [_efgc ]=byte ((_dega &0xff00)>>8);_ebda .Data [_efgc +1]=byte (_dega &0xff);return nil ;};type fillSegment struct{_ffac int ;_egace int ;_edacf int ;_ageg int ;};func (_faea Points )Get (i int )(Point ,error ){if i > len (_faea )-1{return Point {},_c .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i ); };return _faea [i ],nil ;};func TstASymbol (t *_g .T )*Bitmap {t .Helper ();_bbag :=New (6,6);_ce .NoError (t ,_bbag .SetPixel (1,0,1));_ce .NoError (t ,_bbag .SetPixel (2,0,1));_ce .NoError (t ,_bbag .SetPixel (3,0,1));_ce .NoError (t ,_bbag .SetPixel (4,0,1)); _ce .NoError (t ,_bbag .SetPixel (5,1,1));_ce .NoError (t ,_bbag .SetPixel (1,2,1));_ce .NoError (t ,_bbag .SetPixel (2,2,1));_ce .NoError (t ,_bbag .SetPixel (3,2,1));_ce .NoError (t ,_bbag .SetPixel (4,2,1));_ce .NoError (t ,_bbag .SetPixel (5,2,1)); _ce .NoError (t ,_bbag .SetPixel (0,3,1));_ce .NoError (t ,_bbag .SetPixel (5,3,1));_ce .NoError (t ,_bbag .SetPixel (0,4,1));_ce .NoError (t ,_bbag .SetPixel (5,4,1));_ce .NoError (t ,_bbag .SetPixel (1,5,1));_ce .NoError (t ,_bbag .SetPixel (2,5,1)); _ce .NoError (t ,_bbag .SetPixel (3,5,1));_ce .NoError (t ,_bbag .SetPixel (4,5,1));_ce .NoError (t ,_bbag .SetPixel (5,5,1));return _bbag ;};func _edda (_ggb ,_fbgb *Bitmap ,_gga ,_dbcba int )(*Bitmap ,error ){const _agef ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b"; if _fbgb ==nil {return nil ,_c .Error (_agef ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _gga < 1||_dbcba < 1{return nil ,_c .Error (_agef ,"\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 _gga ==1&&_dbcba ==1{_dabd ,_accf :=_eaaf (_ggb ,_fbgb );if _accf !=nil {return nil ,_c .Wrap (_accf ,_agef ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _dabd ,nil ;};if _gga ==1||_dbcba ==1{_gedg :=SelCreateBrick (_dbcba ,_gga ,_dbcba /2,_gga /2,SelHit );_dgce ,_ggce :=_bbed (_ggb ,_fbgb ,_gedg );if _ggce !=nil {return nil ,_c .Wrap (_ggce ,_agef ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _dgce ,nil ;};_face :=SelCreateBrick (1,_gga ,0,_gga /2,SelHit );_deee :=SelCreateBrick (_dbcba ,1,_dbcba /2,0,SelHit );_agb ,_adfg :=_bbed (nil ,_fbgb ,_face );if _adfg !=nil {return nil ,_c .Wrap (_adfg ,_agef ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e"); };_ggb ,_adfg =_bbed (_ggb ,_agb ,_deee );if _adfg !=nil {return nil ,_c .Wrap (_adfg ,_agef ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _ggb ,nil ;};func (_dff *Bitmap )And (s *Bitmap )(_bbg *Bitmap ,_aefd error ){const _edfa ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064"; if _dff ==nil {return nil ,_c .Error (_edfa ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");};if s ==nil {return nil ,_c .Error (_edfa ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c"); };if !_dff .SizesEqual (s ){_ag .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",_edfa ); };if _bbg ,_aefd =_eaaf (_bbg ,_dff );_aefd !=nil {return nil ,_c .Wrap (_aefd ,_edfa ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _aefd =_bbg .RasterOperation (0,0,_bbg .Width ,_bbg .Height ,PixSrcAndDst ,s ,0,0); _aefd !=nil {return nil ,_c .Wrap (_aefd ,_edfa ,"");};return _bbg ,nil ;};func TstImageBitmapData ()[]byte {return _dffgf .Data };func (_ced *Bitmap )GetUnpaddedData ()([]byte ,error ){_age :=uint (_ced .Width &0x07);if _age ==0{return _ced .Data ,nil ; };_efeg :=_ced .Width *_ced .Height ;if _efeg %8!=0{_efeg >>=3;_efeg ++;}else {_efeg >>=3;};_bdfa :=make ([]byte ,_efeg );_efda :=_a .NewWriterMSB (_bdfa );const _gbf ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _adge :=0; _adge < _ced .Height ;_adge ++{for _aeg :=0;_aeg < _ced .RowStride ;_aeg ++{_ggcb :=_ced .Data [_adge *_ced .RowStride +_aeg ];if _aeg !=_ced .RowStride -1{_bba :=_efda .WriteByte (_ggcb );if _bba !=nil {return nil ,_c .Wrap (_bba ,_gbf ,"");};continue ; };for _eeb :=uint (0);_eeb < _age ;_eeb ++{_ada :=_efda .WriteBit (int (_ggcb >>(7-_eeb )&0x01));if _ada !=nil {return nil ,_c .Wrap (_ada ,_gbf ,"");};};};};return _bdfa ,nil ;};func (_cffcg *Bitmaps )AddBox (box *_gg .Rectangle ){_cffcg .Boxes =append (_cffcg .Boxes ,box )}; func TstNSymbol (t *_g .T ,scale ...int )*Bitmap {_dcde ,_aebb :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});_ce .NoError (t ,_aebb );return TstGetScaledSymbol (t ,_dcde ,scale ...);};func _agac (_afbg ,_ddag *Bitmap ,_gegd ,_dgff int )(_daec error ){const _bga ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038"; var (_acgf ,_gffb ,_dbcg ,_acbbe int ;_egdcf ,_bda ,_dcf ,_dgdcg ,_cfdea ,_edaa ,_cgdf ,_ddfda byte ;);for _acgf =0;_acgf < _gegd ;_acgf ++{_dbcg =_acgf *_afbg .RowStride ;_acbbe =_acgf *_ddag .RowStride ;for _gffb =0;_gffb < _dgff ;_gffb ++{if _egdcf ,_daec =_afbg .GetByte (_dbcg +_gffb ); _daec !=nil {return _c .Wrap (_daec ,_bga ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _bda ,_daec =_ddag .GetByte (_acbbe +_gffb );_daec !=nil {return _c .Wrap (_daec ,_bga ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065"); };if _acgf > 0{if _dcf ,_daec =_afbg .GetByte (_dbcg -_afbg .RowStride +_gffb );_daec !=nil {return _c .Wrap (_daec ,_bga ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_egdcf |=_dcf |(_dcf <<1)|(_dcf >>1);if _gffb > 0{if _ddfda ,_daec =_afbg .GetByte (_dbcg -_afbg .RowStride +_gffb -1); _daec !=nil {return _c .Wrap (_daec ,_bga ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_egdcf |=_ddfda <<7;};if _gffb < _dgff -1{if _ddfda ,_daec =_afbg .GetByte (_dbcg -_afbg .RowStride +_gffb +1); _daec !=nil {return _c .Wrap (_daec ,_bga ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_egdcf |=_ddfda >>7;};};if _gffb > 0{if _dgdcg ,_daec =_afbg .GetByte (_dbcg +_gffb -1);_daec !=nil {return _c .Wrap (_daec ,_bga ,"\u006a\u0020\u003e \u0030"); };_egdcf |=_dgdcg <<7;};_egdcf &=_bda ;if _egdcf ==0||^_egdcf ==0{if _daec =_afbg .SetByte (_dbcg +_gffb ,_egdcf );_daec !=nil {return _c .Wrap (_daec ,_bga ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");}; };for {_cgdf =_egdcf ;_egdcf =(_egdcf |(_egdcf >>1)|(_egdcf <<1))&_bda ;if (_egdcf ^_cgdf )==0{if _daec =_afbg .SetByte (_dbcg +_gffb ,_egdcf );_daec !=nil {return _c .Wrap (_daec ,_bga ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065"); };break ;};};};};for _acgf =_gegd -1;_acgf >=0;_acgf --{_dbcg =_acgf *_afbg .RowStride ;_acbbe =_acgf *_ddag .RowStride ;for _gffb =_dgff -1;_gffb >=0;_gffb --{if _egdcf ,_daec =_afbg .GetByte (_dbcg +_gffb );_daec !=nil {return _c .Wrap (_daec ,_bga ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065"); };if _bda ,_daec =_ddag .GetByte (_acbbe +_gffb );_daec !=nil {return _c .Wrap (_daec ,_bga ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _acgf < _gegd -1{if _cfdea ,_daec =_afbg .GetByte (_dbcg +_afbg .RowStride +_gffb ); _daec !=nil {return _c .Wrap (_daec ,_bga ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_egdcf |=_cfdea |(_cfdea <<1)|_cfdea >>1;if _gffb > 0{if _ddfda ,_daec =_afbg .GetByte (_dbcg +_afbg .RowStride +_gffb -1); _daec !=nil {return _c .Wrap (_daec ,_bga ,"\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");};_egdcf |=_ddfda <<7;};if _gffb < _dgff -1{if _ddfda ,_daec =_afbg .GetByte (_dbcg +_afbg .RowStride +_gffb +1); _daec !=nil {return _c .Wrap (_daec ,_bga ,"\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"); };_egdcf |=_ddfda >>7;};};if _gffb < _dgff -1{if _edaa ,_daec =_afbg .GetByte (_dbcg +_gffb +1);_daec !=nil {return _c .Wrap (_daec ,_bga ,"\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"); };_egdcf |=_edaa >>7;};_egdcf &=_bda ;if _egdcf ==0||(^_egdcf )==0{if _daec =_afbg .SetByte (_dbcg +_gffb ,_egdcf );_daec !=nil {return _c .Wrap (_daec ,_bga ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");};};for {_cgdf =_egdcf ; _egdcf =(_egdcf |(_egdcf >>1)|(_egdcf <<1))&_bda ;if (_egdcf ^_cgdf )==0{if _daec =_afbg .SetByte (_dbcg +_gffb ,_egdcf );_daec !=nil {return _c .Wrap (_daec ,_bga ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065"); };break ;};};};};return nil ;};func _bgb (_dcbf ,_fcae *Bitmap ,_adeff CombinationOperator )*Bitmap {_cgc :=New (_dcbf .Width ,_dcbf .Height );for _gbce :=0;_gbce < len (_cgc .Data );_gbce ++{_cgc .Data [_gbce ]=_caf (_dcbf .Data [_gbce ],_fcae .Data [_gbce ],_adeff ); };return _cgc ;};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 ;);type byHeight Bitmaps ;func (_bfec *Bitmap )inverseData (){if _cad :=_bfec .RasterOperation (0,0,_bfec .Width ,_bfec .Height ,PixNotDst ,nil ,0,0); _cad !=nil {_ag .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_cad );};if _bfec .Color ==Chocolate {_bfec .Color =Vanilla ;}else {_bfec .Color =Chocolate ;};};func (_gcd *Bitmap )GetByte (index int )(byte ,error ){if index > len (_gcd .Data )-1||index < 0{return 0,_c .Errorf ("\u0047e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x:\u0020\u0025\u0064\u0020\u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006eg\u0065",index ); };return _gcd .Data [index ],nil ;};func TstWSymbol (t *_g .T ,scale ...int )*Bitmap {_gfcf ,_cfgg :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});_ce .NoError (t ,_cfgg );return TstGetScaledSymbol (t ,_gfcf ,scale ...);};func _ae (_af ,_ga *Bitmap )(_ebb error ){const _adb ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034"; _bad :=_ga .RowStride ;_ede :=_af .RowStride ;_bdf :=_ga .RowStride *4-_af .RowStride ;var (_cdd ,_cf byte ;_cb uint32 ;_cc ,_baa ,_bg ,_aef ,_ee ,_dde ,_ccg int ;);for _bg =0;_bg < _ga .Height ;_bg ++{_cc =_bg *_bad ;_baa =4*_bg *_ede ;for _aef =0;_aef < _bad ; _aef ++{_cdd =_ga .Data [_cc +_aef ];_cb =_gafd [_cdd ];_dde =_baa +_aef *4;if _bdf !=0&&(_aef +1)*4> _af .RowStride {for _ee =_bdf ;_ee > 0;_ee --{_cf =byte ((_cb >>uint (_ee *8))&0xff);_ccg =_dde +(_bdf -_ee );if _ebb =_af .SetByte (_ccg ,_cf );_ebb !=nil {return _c .Wrapf (_ebb ,_adb ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_ee ); };};}else if _ebb =_af .setFourBytes (_dde ,_cb );_ebb !=nil {return _c .Wrap (_ebb ,_adb ,"");};if _ebb =_af .setFourBytes (_baa +_aef *4,_gafd [_ga .Data [_cc +_aef ]]);_ebb !=nil {return _c .Wrap (_ebb ,_adb ,"");};};for _ee =1;_ee < 4;_ee ++{for _aef =0; _aef < _ede ;_aef ++{if _ebb =_af .SetByte (_baa +_ee *_ede +_aef ,_af .Data [_baa +_aef ]);_ebb !=nil {return _c .Wrapf (_ebb ,_adb ,"\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",_ee ,_aef ); };};};};return nil ;};func _fadf ()[]int {_abbc :=make ([]int ,256);_abbc [0]=0;_abbc [1]=7;var _ebgd int ;for _ebgd =2;_ebgd < 4;_ebgd ++{_abbc [_ebgd ]=_abbc [_ebgd -2]+6;};for _ebgd =4;_ebgd < 8;_ebgd ++{_abbc [_ebgd ]=_abbc [_ebgd -4]+5;};for _ebgd =8; _ebgd < 16;_ebgd ++{_abbc [_ebgd ]=_abbc [_ebgd -8]+4;};for _ebgd =16;_ebgd < 32;_ebgd ++{_abbc [_ebgd ]=_abbc [_ebgd -16]+3;};for _ebgd =32;_ebgd < 64;_ebgd ++{_abbc [_ebgd ]=_abbc [_ebgd -32]+2;};for _ebgd =64;_ebgd < 128;_ebgd ++{_abbc [_ebgd ]=_abbc [_ebgd -64]+1; };for _ebgd =128;_ebgd < 256;_ebgd ++{_abbc [_ebgd ]=_abbc [_ebgd -128];};return _abbc ;};var _cdaf =[]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}; const (Vanilla Color =iota ;Chocolate ;);func (_eggc *Bitmap )GetPixel (x ,y int )bool {_efefe :=_eggc .GetByteIndex (x ,y );_dbe :=_eggc .GetBitOffset (x );_dggd :=uint (7-_dbe );if _efefe > len (_eggc .Data )-1{_ag .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 ,_eggc ); return false ;};if (_eggc .Data [_efefe ]>>_dggd )&0x01>=1{return true ;};return false ;};var (_deda =_fag ();_gafd =_eba ();_dbbgb =_fbdb (););func _ccad (_cccea ...MorphProcess )(_dbgfb error ){const _dbdf ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073"; var _gbcbg ,_gfdg int ;for _feac ,_bfg :=range _cccea {if _dbgfb =_bfg .verify (_feac ,&_gbcbg ,&_gfdg );_dbgfb !=nil {return _c .Wrap (_dbgfb ,_dbdf ,"");};};if _gfdg !=0&&_gbcbg !=0{return _c .Error (_dbdf ,"\u004d\u006f\u0072\u0070\u0068\u0020\u0073\u0065\u0071\u0075\u0065n\u0063\u0065\u0020\u002d\u0020\u0062\u006f\u0072d\u0065r\u0020\u0061\u0064\u0064\u0065\u0064\u0020\u0062\u0075\u0074\u0020\u006e\u0065\u0074\u0020\u0072\u0065\u0064u\u0063\u0074\u0069\u006f\u006e\u0020\u006e\u006f\u0074\u0020\u0030"); };return nil ;};func (_fdfc *Bitmaps )CountPixels ()*_bc .NumSlice {_aced :=&_bc .NumSlice {};for _ ,_bbeb :=range _fdfc .Values {_aced .AddInt (_bbeb .CountPixels ());};return _aced ;};func (_fda *Bitmap )SetPixel (x ,y int ,pixel byte )error {_bgg :=_fda .GetByteIndex (x ,y ); if _bgg > len (_fda .Data )-1{return _c .Errorf ("\u0053\u0065\u0074\u0050\u0069\u0078\u0065\u006c","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",_bgg );};_afc :=_fda .GetBitOffset (x ); _ega :=uint (7-_afc );_addc :=_fda .Data [_bgg ];var _gec byte ;if pixel ==1{_gec =_addc |(pixel &0x01<<_ega );}else {_gec =_addc &^(1<<_ega );};_fda .Data [_bgg ]=_gec ;return nil ;};func (_efgb *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _fbcc ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068"; if len (_efgb .Values )==0{return nil ,_c .Error (_fbcc ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_dgde :=&BitmapsArray {};_efgb .SortByWidth ();_ddaa :=-1;_ffbf :=-1;for _acdc :=0;_acdc < len (_efgb .Values ); _acdc ++{_baafe :=_efgb .Values [_acdc ].Width ;if _baafe > _ddaa {_ddaa =_baafe ;_ffbf ++;_dgde .Values =append (_dgde .Values ,&Bitmaps {});};_dgde .Values [_ffbf ].AddBitmap (_efgb .Values [_acdc ]);};return _dgde ,nil ;};var _ _e .Interface =&ClassedPoints {}; func (_eefga *Boxes )makeSizeIndicator (_ddfag ,_fged int ,_fccf LocationFilter ,_fddd SizeComparison )*_bc .NumSlice {_beff :=&_bc .NumSlice {};var _edcc ,_fbbg ,_eabf int ;for _ ,_abad :=range *_eefga {_edcc =0;_fbbg ,_eabf =_abad .Dx (),_abad .Dy (); switch _fccf {case LocSelectWidth :if (_fddd ==SizeSelectIfLT &&_fbbg < _ddfag )||(_fddd ==SizeSelectIfGT &&_fbbg > _ddfag )||(_fddd ==SizeSelectIfLTE &&_fbbg <=_ddfag )||(_fddd ==SizeSelectIfGTE &&_fbbg >=_ddfag ){_edcc =1;};case LocSelectHeight :if (_fddd ==SizeSelectIfLT &&_eabf < _fged )||(_fddd ==SizeSelectIfGT &&_eabf > _fged )||(_fddd ==SizeSelectIfLTE &&_eabf <=_fged )||(_fddd ==SizeSelectIfGTE &&_eabf >=_fged ){_edcc =1; };case LocSelectIfEither :if (_fddd ==SizeSelectIfLT &&(_eabf < _fged ||_fbbg < _ddfag ))||(_fddd ==SizeSelectIfGT &&(_eabf > _fged ||_fbbg > _ddfag ))||(_fddd ==SizeSelectIfLTE &&(_eabf <=_fged ||_fbbg <=_ddfag ))||(_fddd ==SizeSelectIfGTE &&(_eabf >=_fged ||_fbbg >=_ddfag )){_edcc =1; };case LocSelectIfBoth :if (_fddd ==SizeSelectIfLT &&(_eabf < _fged &&_fbbg < _ddfag ))||(_fddd ==SizeSelectIfGT &&(_eabf > _fged &&_fbbg > _ddfag ))||(_fddd ==SizeSelectIfLTE &&(_eabf <=_fged &&_fbbg <=_ddfag ))||(_fddd ==SizeSelectIfGTE &&(_eabf >=_fged &&_fbbg >=_ddfag )){_edcc =1; };};_beff .AddInt (_edcc );};return _beff ;};func _facf (_gadf ,_eabaf *Bitmap ,_bcgd *Selection )(*Bitmap ,error ){const _cedb ="\u006f\u0070\u0065\u006e";var _gbaaa error ;_gadf ,_gbaaa =_gcgf (_gadf ,_eabaf ,_bcgd );if _gbaaa !=nil {return nil ,_c .Wrap (_gbaaa ,_cedb ,""); };_addg ,_gbaaa :=_bbed (nil ,_eabaf ,_bcgd );if _gbaaa !=nil {return nil ,_c .Wrap (_gbaaa ,_cedb ,"");};_ ,_gbaaa =_eccce (_gadf ,_addg ,_bcgd );if _gbaaa !=nil {return nil ,_c .Wrap (_gbaaa ,_cedb ,"");};return _gadf ,nil ;};func (_cbcb *Bitmap )setEightPartlyBytes (_fgd ,_bbcf int ,_bdbb uint64 )(_cfbc error ){var (_gffe byte ; _eegda int ;);const _ceab ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _ddgb :=1;_ddgb <=_bbcf ;_ddgb ++{_eegda =64-_ddgb *8;_gffe =byte (_bdbb >>uint (_eegda )&0xff);_ag .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",_gffe ,_fgd ,_fgd +_ddgb -1,_bbcf ,_eegda ); if _cfbc =_cbcb .SetByte (_fgd +_ddgb -1,_gffe );_cfbc !=nil {return _c .Wrap (_cfbc ,_ceab ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_fec :=_cbcb .RowStride *8-_cbcb .Width ;if _fec ==0{return nil ;};_eegda -=8;_gffe =byte (_bdbb >>uint (_eegda )&0xff)< len (_dbfd .Values )-1{return nil ,_c .Errorf (_ffbd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i ); };return _dbfd .Values [i ],nil ;};func TstOSymbol (t *_g .T ,scale ...int )*Bitmap {_gbdc ,_eegb :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});_ce .NoError (t ,_eegb );return TstGetScaledSymbol (t ,_gbdc ,scale ...);};func _daga (_abef *Bitmap ,_cfbg ,_fcaf int ,_effe ,_cabe int ,_eeaec RasterOperator ){var (_fffdf int ; _cebg byte ;_degf ,_gfcgg int ;_dbge int ;);_ecga :=_effe >>3;_fabe :=_effe &7;if _fabe > 0{_cebg =_ffcfc [_fabe ];};_fffdf =_abef .RowStride *_fcaf +(_cfbg >>3);switch _eeaec {case PixClr :for _degf =0;_degf < _cabe ;_degf ++{_dbge =_fffdf +_degf *_abef .RowStride ; for _gfcgg =0;_gfcgg < _ecga ;_gfcgg ++{_abef .Data [_dbge ]=0x0;_dbge ++;};if _fabe > 0{_abef .Data [_dbge ]=_bebd (_abef .Data [_dbge ],0x0,_cebg );};};case PixSet :for _degf =0;_degf < _cabe ;_degf ++{_dbge =_fffdf +_degf *_abef .RowStride ;for _gfcgg =0; _gfcgg < _ecga ;_gfcgg ++{_abef .Data [_dbge ]=0xff;_dbge ++;};if _fabe > 0{_abef .Data [_dbge ]=_bebd (_abef .Data [_dbge ],0xff,_cebg );};};case PixNotDst :for _degf =0;_degf < _cabe ;_degf ++{_dbge =_fffdf +_degf *_abef .RowStride ;for _gfcgg =0;_gfcgg < _ecga ; _gfcgg ++{_abef .Data [_dbge ]=^_abef .Data [_dbge ];_dbge ++;};if _fabe > 0{_abef .Data [_dbge ]=_bebd (_abef .Data [_dbge ],^_abef .Data [_dbge ],_cebg );};};};};func (_abge *Bitmap )GetChocolateData ()[]byte {if _abge .Color ==Vanilla {_abge .inverseData (); };return _abge .Data ;};type SizeComparison int ;func (_cbe *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_acgb *Bitmaps ,_bgfca *Boxes ,_abf error ){const _agcb ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073"; if _cbe ==nil {return nil ,nil ,_c .Error (_agcb ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0042\u0069\u0074\u006da\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064\u002e");};switch components {case ComponentConn ,ComponentCharacters ,ComponentWords :default:return nil ,nil ,_c .Error (_agcb ,"\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 _cbe .Zero (){_bgfca =&Boxes {};_acgb =&Bitmaps {};return _acgb ,_bgfca ,nil ;};switch components {case ComponentConn :_acgb =&Bitmaps {};if _bgfca ,_abf =_cbe .ConnComponents (_acgb ,8);_abf !=nil {return nil ,nil ,_c .Wrap (_abf ,_agcb ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067"); };case ComponentCharacters :_cdce ,_bfde :=MorphSequence (_cbe ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _bfde !=nil {return nil ,nil ,_c .Wrap (_bfde ,_agcb ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067"); };if _ag .Log .IsLogLevel (_ag .LogLevelTrace ){_ag .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",_cdce .String ()); };_bgff :=&Bitmaps {};_bgfca ,_bfde =_cdce .ConnComponents (_bgff ,8);if _bfde !=nil {return nil ,nil ,_c .Wrap (_bfde ,_agcb ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067"); };if _ag .Log .IsLogLevel (_ag .LogLevelTrace ){_ag .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",_bgff .String ()); };if _acgb ,_bfde =_bgff .ClipToBitmap (_cbe );_bfde !=nil {return nil ,nil ,_c .Wrap (_bfde ,_agcb ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_affd :=1; var _cgfd *Bitmap ;switch {case _cbe .XResolution <=200:_cgfd =_cbe ;case _cbe .XResolution <=400:_affd =2;_cgfd ,_abf =_ac (_cbe ,1,0,0,0);if _abf !=nil {return nil ,nil ,_c .Wrap (_abf ,_agcb ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030"); };default:_affd =4;_cgfd ,_abf =_ac (_cbe ,1,1,0,0);if _abf !=nil {return nil ,nil ,_c .Wrap (_abf ,_agcb ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030"); };};_eade ,_ ,_ecbbb :=_aaaab (_cgfd );if _ecbbb !=nil {return nil ,nil ,_c .Wrap (_ecbbb ,_agcb ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_ddcg ,_ecbbb :=_edcb (_eade ,_affd );if _ecbbb !=nil {return nil ,nil ,_c .Wrap (_ecbbb ,_agcb ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073"); };_cedd :=&Bitmaps {};if _bgfca ,_ecbbb =_ddcg .ConnComponents (_cedd ,4);_ecbbb !=nil {return nil ,nil ,_c .Wrap (_ecbbb ,_agcb ,"\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 _acgb ,_ecbbb =_cedd .ClipToBitmap (_cbe );_ecbbb !=nil {return nil ,nil ,_c .Wrap (_ecbbb ,_agcb ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_acgb ,_abf =_acgb .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE ); if _abf !=nil {return nil ,nil ,_c .Wrap (_abf ,_agcb ,"");};_bgfca ,_abf =_bgfca .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _abf !=nil {return nil ,nil ,_c .Wrap (_abf ,_agcb ,"");};return _acgb ,_bgfca ,nil ;};func _fdeg (_bdgcc *Bitmap ,_beb ,_ffda int ,_gcgeb ,_babb int ,_gagdb RasterOperator ){var (_ccgc bool ; _gfca bool ;_fgged int ;_dfdb int ;_gegf int ;_bcaf int ;_eaac bool ;_decc byte ;);_daeae :=8-(_beb &7);_cdbb :=_gda [_daeae ];_daebe :=_bdgcc .RowStride *_ffda +(_beb >>3);if _gcgeb < _daeae {_ccgc =true ;_cdbb &=_ffcfc [8-_daeae +_gcgeb ];};if !_ccgc {_fgged =(_gcgeb -_daeae )>>3; if _fgged !=0{_gfca =true ;_dfdb =_daebe +1;};};_gegf =(_beb +_gcgeb )&7;if !(_ccgc ||_gegf ==0){_eaac =true ;_decc =_ffcfc [_gegf ];_bcaf =_daebe +1+_fgged ;};var _bfge ,_gfag int ;switch _gagdb {case PixClr :for _bfge =0;_bfge < _babb ;_bfge ++{_bdgcc .Data [_daebe ]=_bebd (_bdgcc .Data [_daebe ],0x0,_cdbb ); _daebe +=_bdgcc .RowStride ;};if _gfca {for _bfge =0;_bfge < _babb ;_bfge ++{for _gfag =0;_gfag < _fgged ;_gfag ++{_bdgcc .Data [_dfdb +_gfag ]=0x0;};_dfdb +=_bdgcc .RowStride ;};};if _eaac {for _bfge =0;_bfge < _babb ;_bfge ++{_bdgcc .Data [_bcaf ]=_bebd (_bdgcc .Data [_bcaf ],0x0,_decc ); _bcaf +=_bdgcc .RowStride ;};};case PixSet :for _bfge =0;_bfge < _babb ;_bfge ++{_bdgcc .Data [_daebe ]=_bebd (_bdgcc .Data [_daebe ],0xff,_cdbb );_daebe +=_bdgcc .RowStride ;};if _gfca {for _bfge =0;_bfge < _babb ;_bfge ++{for _gfag =0;_gfag < _fgged ; _gfag ++{_bdgcc .Data [_dfdb +_gfag ]=0xff;};_dfdb +=_bdgcc .RowStride ;};};if _eaac {for _bfge =0;_bfge < _babb ;_bfge ++{_bdgcc .Data [_bcaf ]=_bebd (_bdgcc .Data [_bcaf ],0xff,_decc );_bcaf +=_bdgcc .RowStride ;};};case PixNotDst :for _bfge =0;_bfge < _babb ; _bfge ++{_bdgcc .Data [_daebe ]=_bebd (_bdgcc .Data [_daebe ],^_bdgcc .Data [_daebe ],_cdbb );_daebe +=_bdgcc .RowStride ;};if _gfca {for _bfge =0;_bfge < _babb ;_bfge ++{for _gfag =0;_gfag < _fgged ;_gfag ++{_bdgcc .Data [_dfdb +_gfag ]=^(_bdgcc .Data [_dfdb +_gfag ]); };_dfdb +=_bdgcc .RowStride ;};};if _eaac {for _bfge =0;_bfge < _babb ;_bfge ++{_bdgcc .Data [_bcaf ]=_bebd (_bdgcc .Data [_bcaf ],^_bdgcc .Data [_bcaf ],_decc );_bcaf +=_bdgcc .RowStride ;};};};};type SelectionValue int ;type Bitmap struct{Width ,Height int ; BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func _gbee (_edbb *Bitmap ,_bedb ,_egdd ,_cbbb ,_ecee int ,_afbe RasterOperator ,_cffee *Bitmap ,_facb ,_fdee int )error {var (_feba bool ; _baba bool ;_dcab byte ;_eafdb int ;_ebga int ;_bdcdd int ;_eafc int ;_ffgfd bool ;_fadd int ;_cfcgc int ;_cbbbf int ;_cafg bool ;_feff byte ;_eff int ;_afaeg int ;_cgae int ;_bdedb byte ;_baceb int ;_begd int ;_acbf uint ;_bcfa uint ;_cfed byte ;_adcc shift ; _cabf bool ;_dea bool ;_ddfd ,_efcae int ;);if _facb &7!=0{_begd =8-(_facb &7);};if _bedb &7!=0{_ebga =8-(_bedb &7);};if _begd ==0&&_ebga ==0{_cfed =_gda [0];}else {if _ebga > _begd {_acbf =uint (_ebga -_begd );}else {_acbf =uint (8-(_begd -_ebga ));}; _bcfa =8-_acbf ;_cfed =_gda [_acbf ];};if (_bedb &7)!=0{_feba =true ;_eafdb =8-(_bedb &7);_dcab =_gda [_eafdb ];_bdcdd =_edbb .RowStride *_egdd +(_bedb >>3);_eafc =_cffee .RowStride *_fdee +(_facb >>3);_baceb =8-(_facb &7);if _eafdb > _baceb {_adcc =_dffgc ; if _cbbb >=_begd {_cabf =true ;};}else {_adcc =_bbecb ;};};if _cbbb < _eafdb {_baba =true ;_dcab &=_ffcfc [8-_eafdb +_cbbb ];};if !_baba {_fadd =(_cbbb -_eafdb )>>3;if _fadd !=0{_ffgfd =true ;_cfcgc =_edbb .RowStride *_egdd +((_bedb +_ebga )>>3);_cbbbf =_cffee .RowStride *_fdee +((_facb +_ebga )>>3); };};_eff =(_bedb +_cbbb )&7;if !(_baba ||_eff ==0){_cafg =true ;_feff =_ffcfc [_eff ];_afaeg =_edbb .RowStride *_egdd +((_bedb +_ebga )>>3)+_fadd ;_cgae =_cffee .RowStride *_fdee +((_facb +_ebga )>>3)+_fadd ;if _eff > int (_bcfa ){_dea =true ;};};switch _afbe {case PixSrc :if _feba {for _ddfd =0; _ddfd < _ecee ;_ddfd ++{if _adcc ==_dffgc {_bdedb =_cffee .Data [_eafc ]<<_acbf ;if _cabf {_bdedb =_bebd (_bdedb ,_cffee .Data [_eafc +1]>>_bcfa ,_cfed );};}else {_bdedb =_cffee .Data [_eafc ]>>_bcfa ;};_edbb .Data [_bdcdd ]=_bebd (_edbb .Data [_bdcdd ],_bdedb ,_dcab ); _bdcdd +=_edbb .RowStride ;_eafc +=_cffee .RowStride ;};};if _ffgfd {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{for _efcae =0;_efcae < _fadd ;_efcae ++{_bdedb =_bebd (_cffee .Data [_cbbbf +_efcae ]<<_acbf ,_cffee .Data [_cbbbf +_efcae +1]>>_bcfa ,_cfed );_edbb .Data [_cfcgc +_efcae ]=_bdedb ; };_cfcgc +=_edbb .RowStride ;_cbbbf +=_cffee .RowStride ;};};if _cafg {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{_bdedb =_cffee .Data [_cgae ]<<_acbf ;if _dea {_bdedb =_bebd (_bdedb ,_cffee .Data [_cgae +1]>>_bcfa ,_cfed );};_edbb .Data [_afaeg ]=_bebd (_edbb .Data [_afaeg ],_bdedb ,_feff ); _afaeg +=_edbb .RowStride ;_cgae +=_cffee .RowStride ;};};case PixNotSrc :if _feba {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{if _adcc ==_dffgc {_bdedb =_cffee .Data [_eafc ]<<_acbf ;if _cabf {_bdedb =_bebd (_bdedb ,_cffee .Data [_eafc +1]>>_bcfa ,_cfed );}; }else {_bdedb =_cffee .Data [_eafc ]>>_bcfa ;};_edbb .Data [_bdcdd ]=_bebd (_edbb .Data [_bdcdd ],^_bdedb ,_dcab );_bdcdd +=_edbb .RowStride ;_eafc +=_cffee .RowStride ;};};if _ffgfd {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{for _efcae =0;_efcae < _fadd ;_efcae ++{_bdedb =_bebd (_cffee .Data [_cbbbf +_efcae ]<<_acbf ,_cffee .Data [_cbbbf +_efcae +1]>>_bcfa ,_cfed ); _edbb .Data [_cfcgc +_efcae ]=^_bdedb ;};_cfcgc +=_edbb .RowStride ;_cbbbf +=_cffee .RowStride ;};};if _cafg {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{_bdedb =_cffee .Data [_cgae ]<<_acbf ;if _dea {_bdedb =_bebd (_bdedb ,_cffee .Data [_cgae +1]>>_bcfa ,_cfed ); };_edbb .Data [_afaeg ]=_bebd (_edbb .Data [_afaeg ],^_bdedb ,_feff );_afaeg +=_edbb .RowStride ;_cgae +=_cffee .RowStride ;};};case PixSrcOrDst :if _feba {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{if _adcc ==_dffgc {_bdedb =_cffee .Data [_eafc ]<<_acbf ;if _cabf {_bdedb =_bebd (_bdedb ,_cffee .Data [_eafc +1]>>_bcfa ,_cfed ); };}else {_bdedb =_cffee .Data [_eafc ]>>_bcfa ;};_edbb .Data [_bdcdd ]=_bebd (_edbb .Data [_bdcdd ],_bdedb |_edbb .Data [_bdcdd ],_dcab );_bdcdd +=_edbb .RowStride ;_eafc +=_cffee .RowStride ;};};if _ffgfd {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{for _efcae =0; _efcae < _fadd ;_efcae ++{_bdedb =_bebd (_cffee .Data [_cbbbf +_efcae ]<<_acbf ,_cffee .Data [_cbbbf +_efcae +1]>>_bcfa ,_cfed );_edbb .Data [_cfcgc +_efcae ]|=_bdedb ;};_cfcgc +=_edbb .RowStride ;_cbbbf +=_cffee .RowStride ;};};if _cafg {for _ddfd =0; _ddfd < _ecee ;_ddfd ++{_bdedb =_cffee .Data [_cgae ]<<_acbf ;if _dea {_bdedb =_bebd (_bdedb ,_cffee .Data [_cgae +1]>>_bcfa ,_cfed );};_edbb .Data [_afaeg ]=_bebd (_edbb .Data [_afaeg ],_bdedb |_edbb .Data [_afaeg ],_feff );_afaeg +=_edbb .RowStride ; _cgae +=_cffee .RowStride ;};};case PixSrcAndDst :if _feba {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{if _adcc ==_dffgc {_bdedb =_cffee .Data [_eafc ]<<_acbf ;if _cabf {_bdedb =_bebd (_bdedb ,_cffee .Data [_eafc +1]>>_bcfa ,_cfed );};}else {_bdedb =_cffee .Data [_eafc ]>>_bcfa ; };_edbb .Data [_bdcdd ]=_bebd (_edbb .Data [_bdcdd ],_bdedb &_edbb .Data [_bdcdd ],_dcab );_bdcdd +=_edbb .RowStride ;_eafc +=_cffee .RowStride ;};};if _ffgfd {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{for _efcae =0;_efcae < _fadd ;_efcae ++{_bdedb =_bebd (_cffee .Data [_cbbbf +_efcae ]<<_acbf ,_cffee .Data [_cbbbf +_efcae +1]>>_bcfa ,_cfed ); _edbb .Data [_cfcgc +_efcae ]&=_bdedb ;};_cfcgc +=_edbb .RowStride ;_cbbbf +=_cffee .RowStride ;};};if _cafg {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{_bdedb =_cffee .Data [_cgae ]<<_acbf ;if _dea {_bdedb =_bebd (_bdedb ,_cffee .Data [_cgae +1]>>_bcfa ,_cfed ); };_edbb .Data [_afaeg ]=_bebd (_edbb .Data [_afaeg ],_bdedb &_edbb .Data [_afaeg ],_feff );_afaeg +=_edbb .RowStride ;_cgae +=_cffee .RowStride ;};};case PixSrcXorDst :if _feba {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{if _adcc ==_dffgc {_bdedb =_cffee .Data [_eafc ]<<_acbf ; if _cabf {_bdedb =_bebd (_bdedb ,_cffee .Data [_eafc +1]>>_bcfa ,_cfed );};}else {_bdedb =_cffee .Data [_eafc ]>>_bcfa ;};_edbb .Data [_bdcdd ]=_bebd (_edbb .Data [_bdcdd ],_bdedb ^_edbb .Data [_bdcdd ],_dcab );_bdcdd +=_edbb .RowStride ;_eafc +=_cffee .RowStride ; };};if _ffgfd {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{for _efcae =0;_efcae < _fadd ;_efcae ++{_bdedb =_bebd (_cffee .Data [_cbbbf +_efcae ]<<_acbf ,_cffee .Data [_cbbbf +_efcae +1]>>_bcfa ,_cfed );_edbb .Data [_cfcgc +_efcae ]^=_bdedb ;};_cfcgc +=_edbb .RowStride ; _cbbbf +=_cffee .RowStride ;};};if _cafg {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{_bdedb =_cffee .Data [_cgae ]<<_acbf ;if _dea {_bdedb =_bebd (_bdedb ,_cffee .Data [_cgae +1]>>_bcfa ,_cfed );};_edbb .Data [_afaeg ]=_bebd (_edbb .Data [_afaeg ],_bdedb ^_edbb .Data [_afaeg ],_feff ); _afaeg +=_edbb .RowStride ;_cgae +=_cffee .RowStride ;};};case PixNotSrcOrDst :if _feba {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{if _adcc ==_dffgc {_bdedb =_cffee .Data [_eafc ]<<_acbf ;if _cabf {_bdedb =_bebd (_bdedb ,_cffee .Data [_eafc +1]>>_bcfa ,_cfed ); };}else {_bdedb =_cffee .Data [_eafc ]>>_bcfa ;};_edbb .Data [_bdcdd ]=_bebd (_edbb .Data [_bdcdd ],^_bdedb |_edbb .Data [_bdcdd ],_dcab );_bdcdd +=_edbb .RowStride ;_eafc +=_cffee .RowStride ;};};if _ffgfd {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{for _efcae =0; _efcae < _fadd ;_efcae ++{_bdedb =_bebd (_cffee .Data [_cbbbf +_efcae ]<<_acbf ,_cffee .Data [_cbbbf +_efcae +1]>>_bcfa ,_cfed );_edbb .Data [_cfcgc +_efcae ]|=^_bdedb ;};_cfcgc +=_edbb .RowStride ;_cbbbf +=_cffee .RowStride ;};};if _cafg {for _ddfd =0; _ddfd < _ecee ;_ddfd ++{_bdedb =_cffee .Data [_cgae ]<<_acbf ;if _dea {_bdedb =_bebd (_bdedb ,_cffee .Data [_cgae +1]>>_bcfa ,_cfed );};_edbb .Data [_afaeg ]=_bebd (_edbb .Data [_afaeg ],^_bdedb |_edbb .Data [_afaeg ],_feff );_afaeg +=_edbb .RowStride ; _cgae +=_cffee .RowStride ;};};case PixNotSrcAndDst :if _feba {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{if _adcc ==_dffgc {_bdedb =_cffee .Data [_eafc ]<<_acbf ;if _cabf {_bdedb =_bebd (_bdedb ,_cffee .Data [_eafc +1]>>_bcfa ,_cfed );};}else {_bdedb =_cffee .Data [_eafc ]>>_bcfa ; };_edbb .Data [_bdcdd ]=_bebd (_edbb .Data [_bdcdd ],^_bdedb &_edbb .Data [_bdcdd ],_dcab );_bdcdd +=_edbb .RowStride ;_eafc +=_cffee .RowStride ;};};if _ffgfd {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{for _efcae =0;_efcae < _fadd ;_efcae ++{_bdedb =_bebd (_cffee .Data [_cbbbf +_efcae ]<<_acbf ,_cffee .Data [_cbbbf +_efcae +1]>>_bcfa ,_cfed ); _edbb .Data [_cfcgc +_efcae ]&=^_bdedb ;};_cfcgc +=_edbb .RowStride ;_cbbbf +=_cffee .RowStride ;};};if _cafg {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{_bdedb =_cffee .Data [_cgae ]<<_acbf ;if _dea {_bdedb =_bebd (_bdedb ,_cffee .Data [_cgae +1]>>_bcfa ,_cfed ); };_edbb .Data [_afaeg ]=_bebd (_edbb .Data [_afaeg ],^_bdedb &_edbb .Data [_afaeg ],_feff );_afaeg +=_edbb .RowStride ;_cgae +=_cffee .RowStride ;};};case PixSrcOrNotDst :if _feba {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{if _adcc ==_dffgc {_bdedb =_cffee .Data [_eafc ]<<_acbf ; if _cabf {_bdedb =_bebd (_bdedb ,_cffee .Data [_eafc +1]>>_bcfa ,_cfed );};}else {_bdedb =_cffee .Data [_eafc ]>>_bcfa ;};_edbb .Data [_bdcdd ]=_bebd (_edbb .Data [_bdcdd ],_bdedb |^_edbb .Data [_bdcdd ],_dcab );_bdcdd +=_edbb .RowStride ;_eafc +=_cffee .RowStride ; };};if _ffgfd {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{for _efcae =0;_efcae < _fadd ;_efcae ++{_bdedb =_bebd (_cffee .Data [_cbbbf +_efcae ]<<_acbf ,_cffee .Data [_cbbbf +_efcae +1]>>_bcfa ,_cfed );_edbb .Data [_cfcgc +_efcae ]=_bdedb |^_edbb .Data [_cfcgc +_efcae ]; };_cfcgc +=_edbb .RowStride ;_cbbbf +=_cffee .RowStride ;};};if _cafg {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{_bdedb =_cffee .Data [_cgae ]<<_acbf ;if _dea {_bdedb =_bebd (_bdedb ,_cffee .Data [_cgae +1]>>_bcfa ,_cfed );};_edbb .Data [_afaeg ]=_bebd (_edbb .Data [_afaeg ],_bdedb |^_edbb .Data [_afaeg ],_feff ); _afaeg +=_edbb .RowStride ;_cgae +=_cffee .RowStride ;};};case PixSrcAndNotDst :if _feba {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{if _adcc ==_dffgc {_bdedb =_cffee .Data [_eafc ]<<_acbf ;if _cabf {_bdedb =_bebd (_bdedb ,_cffee .Data [_eafc +1]>>_bcfa ,_cfed ); };}else {_bdedb =_cffee .Data [_eafc ]>>_bcfa ;};_edbb .Data [_bdcdd ]=_bebd (_edbb .Data [_bdcdd ],_bdedb &^_edbb .Data [_bdcdd ],_dcab );_bdcdd +=_edbb .RowStride ;_eafc +=_cffee .RowStride ;};};if _ffgfd {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{for _efcae =0; _efcae < _fadd ;_efcae ++{_bdedb =_bebd (_cffee .Data [_cbbbf +_efcae ]<<_acbf ,_cffee .Data [_cbbbf +_efcae +1]>>_bcfa ,_cfed );_edbb .Data [_cfcgc +_efcae ]=_bdedb &^_edbb .Data [_cfcgc +_efcae ];};_cfcgc +=_edbb .RowStride ;_cbbbf +=_cffee .RowStride ; };};if _cafg {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{_bdedb =_cffee .Data [_cgae ]<<_acbf ;if _dea {_bdedb =_bebd (_bdedb ,_cffee .Data [_cgae +1]>>_bcfa ,_cfed );};_edbb .Data [_afaeg ]=_bebd (_edbb .Data [_afaeg ],_bdedb &^_edbb .Data [_afaeg ],_feff ); _afaeg +=_edbb .RowStride ;_cgae +=_cffee .RowStride ;};};case PixNotPixSrcOrDst :if _feba {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{if _adcc ==_dffgc {_bdedb =_cffee .Data [_eafc ]<<_acbf ;if _cabf {_bdedb =_bebd (_bdedb ,_cffee .Data [_eafc +1]>>_bcfa ,_cfed ); };}else {_bdedb =_cffee .Data [_eafc ]>>_bcfa ;};_edbb .Data [_bdcdd ]=_bebd (_edbb .Data [_bdcdd ],^(_bdedb |_edbb .Data [_bdcdd ]),_dcab );_bdcdd +=_edbb .RowStride ;_eafc +=_cffee .RowStride ;};};if _ffgfd {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{for _efcae =0; _efcae < _fadd ;_efcae ++{_bdedb =_bebd (_cffee .Data [_cbbbf +_efcae ]<<_acbf ,_cffee .Data [_cbbbf +_efcae +1]>>_bcfa ,_cfed );_edbb .Data [_cfcgc +_efcae ]=^(_bdedb |_edbb .Data [_cfcgc +_efcae ]);};_cfcgc +=_edbb .RowStride ;_cbbbf +=_cffee .RowStride ; };};if _cafg {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{_bdedb =_cffee .Data [_cgae ]<<_acbf ;if _dea {_bdedb =_bebd (_bdedb ,_cffee .Data [_cgae +1]>>_bcfa ,_cfed );};_edbb .Data [_afaeg ]=_bebd (_edbb .Data [_afaeg ],^(_bdedb |_edbb .Data [_afaeg ]),_feff ); _afaeg +=_edbb .RowStride ;_cgae +=_cffee .RowStride ;};};case PixNotPixSrcAndDst :if _feba {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{if _adcc ==_dffgc {_bdedb =_cffee .Data [_eafc ]<<_acbf ;if _cabf {_bdedb =_bebd (_bdedb ,_cffee .Data [_eafc +1]>>_bcfa ,_cfed ); };}else {_bdedb =_cffee .Data [_eafc ]>>_bcfa ;};_edbb .Data [_bdcdd ]=_bebd (_edbb .Data [_bdcdd ],^(_bdedb &_edbb .Data [_bdcdd ]),_dcab );_bdcdd +=_edbb .RowStride ;_eafc +=_cffee .RowStride ;};};if _ffgfd {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{for _efcae =0; _efcae < _fadd ;_efcae ++{_bdedb =_bebd (_cffee .Data [_cbbbf +_efcae ]<<_acbf ,_cffee .Data [_cbbbf +_efcae +1]>>_bcfa ,_cfed );_edbb .Data [_cfcgc +_efcae ]=^(_bdedb &_edbb .Data [_cfcgc +_efcae ]);};_cfcgc +=_edbb .RowStride ;_cbbbf +=_cffee .RowStride ; };};if _cafg {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{_bdedb =_cffee .Data [_cgae ]<<_acbf ;if _dea {_bdedb =_bebd (_bdedb ,_cffee .Data [_cgae +1]>>_bcfa ,_cfed );};_edbb .Data [_afaeg ]=_bebd (_edbb .Data [_afaeg ],^(_bdedb &_edbb .Data [_afaeg ]),_feff ); _afaeg +=_edbb .RowStride ;_cgae +=_cffee .RowStride ;};};case PixNotPixSrcXorDst :if _feba {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{if _adcc ==_dffgc {_bdedb =_cffee .Data [_eafc ]<<_acbf ;if _cabf {_bdedb =_bebd (_bdedb ,_cffee .Data [_eafc +1]>>_bcfa ,_cfed ); };}else {_bdedb =_cffee .Data [_eafc ]>>_bcfa ;};_edbb .Data [_bdcdd ]=_bebd (_edbb .Data [_bdcdd ],^(_bdedb ^_edbb .Data [_bdcdd ]),_dcab );_bdcdd +=_edbb .RowStride ;_eafc +=_cffee .RowStride ;};};if _ffgfd {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{for _efcae =0; _efcae < _fadd ;_efcae ++{_bdedb =_bebd (_cffee .Data [_cbbbf +_efcae ]<<_acbf ,_cffee .Data [_cbbbf +_efcae +1]>>_bcfa ,_cfed );_edbb .Data [_cfcgc +_efcae ]=^(_bdedb ^_edbb .Data [_cfcgc +_efcae ]);};_cfcgc +=_edbb .RowStride ;_cbbbf +=_cffee .RowStride ; };};if _cafg {for _ddfd =0;_ddfd < _ecee ;_ddfd ++{_bdedb =_cffee .Data [_cgae ]<<_acbf ;if _dea {_bdedb =_bebd (_bdedb ,_cffee .Data [_cgae +1]>>_bcfa ,_cfed );};_edbb .Data [_afaeg ]=_bebd (_edbb .Data [_afaeg ],^(_bdedb ^_edbb .Data [_afaeg ]),_feff ); _afaeg +=_edbb .RowStride ;_cgae +=_cffee .RowStride ;};};default:_ag .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",_afbe ); return _c .Error ("\u0072a\u0073t\u0065\u0072\u004f\u0070\u0047e\u006e\u0065r\u0061\u006c\u004c\u006f\u0077","\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065r\u0061\u0074\u0069\u006f\u006e\u0020\u006eo\u0074\u0020\u0070\u0065\u0072\u006d\u0069\u0074\u0074\u0065\u0064"); };return nil ;};func (_cfbcb *ClassedPoints )Len ()int {return _cfbcb .IntSlice .Size ()};func (_ffaf *Points )AddPoint (x ,y float32 ){*_ffaf =append (*_ffaf ,Point {x ,y })};func (_feea *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _ddad ="\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 >=_feea .IntSlice .Size (){return 0,_c .Errorf (_ddad ,"\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 (_feea .XAtIndex (i )),nil ;};func _add (_ef *Bitmap ,_ca int )(*Bitmap ,error ){const _eaa ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _ef ==nil {return nil ,_c .Error (_eaa ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064"); };if _ca ==1{return _eaaf (nil ,_ef );};if _ca !=2&&_ca !=4&&_ca !=8{return nil ,_c .Error (_eaa ,"\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"); };_eec :=_ca *_ef .Width ;_cfa :=_ca *_ef .Height ;_dc :=New (_eec ,_cfa );var _aga error ;switch _ca {case 2:_aga =_dd (_dc ,_ef );case 4:_aga =_ae (_dc ,_ef );case 8:_aga =_cde (_dc ,_ef );};if _aga !=nil {return nil ,_c .Wrap (_aga ,_eaa ,"");};return _dc ,nil ; };func _ddcc (_bagg *Bitmap ,_bdbd ,_eeef ,_dacfc ,_bcce int ,_ffegg RasterOperator ,_bced *Bitmap ,_fafeg ,_bfbgg int )error {var (_acbca byte ;_cdgb int ;_dfde int ;_fgfe ,_bgfcf int ;_cffc ,_baaf int ;);_cgca :=_dacfc >>3;_adgge :=_dacfc &7;if _adgge > 0{_acbca =_ffcfc [_adgge ]; };_cdgb =_bced .RowStride *_bfbgg +(_fafeg >>3);_dfde =_bagg .RowStride *_eeef +(_bdbd >>3);switch _ffegg {case PixSrc :for _cffc =0;_cffc < _bcce ;_cffc ++{_fgfe =_cdgb +_cffc *_bced .RowStride ;_bgfcf =_dfde +_cffc *_bagg .RowStride ;for _baaf =0;_baaf < _cgca ; _baaf ++{_bagg .Data [_bgfcf ]=_bced .Data [_fgfe ];_bgfcf ++;_fgfe ++;};if _adgge > 0{_bagg .Data [_bgfcf ]=_bebd (_bagg .Data [_bgfcf ],_bced .Data [_fgfe ],_acbca );};};case PixNotSrc :for _cffc =0;_cffc < _bcce ;_cffc ++{_fgfe =_cdgb +_cffc *_bced .RowStride ; _bgfcf =_dfde +_cffc *_bagg .RowStride ;for _baaf =0;_baaf < _cgca ;_baaf ++{_bagg .Data [_bgfcf ]=^(_bced .Data [_fgfe ]);_bgfcf ++;_fgfe ++;};if _adgge > 0{_bagg .Data [_bgfcf ]=_bebd (_bagg .Data [_bgfcf ],^_bced .Data [_fgfe ],_acbca );};};case PixSrcOrDst :for _cffc =0; _cffc < _bcce ;_cffc ++{_fgfe =_cdgb +_cffc *_bced .RowStride ;_bgfcf =_dfde +_cffc *_bagg .RowStride ;for _baaf =0;_baaf < _cgca ;_baaf ++{_bagg .Data [_bgfcf ]|=_bced .Data [_fgfe ];_bgfcf ++;_fgfe ++;};if _adgge > 0{_bagg .Data [_bgfcf ]=_bebd (_bagg .Data [_bgfcf ],_bced .Data [_fgfe ]|_bagg .Data [_bgfcf ],_acbca ); };};case PixSrcAndDst :for _cffc =0;_cffc < _bcce ;_cffc ++{_fgfe =_cdgb +_cffc *_bced .RowStride ;_bgfcf =_dfde +_cffc *_bagg .RowStride ;for _baaf =0;_baaf < _cgca ;_baaf ++{_bagg .Data [_bgfcf ]&=_bced .Data [_fgfe ];_bgfcf ++;_fgfe ++;};if _adgge > 0{_bagg .Data [_bgfcf ]=_bebd (_bagg .Data [_bgfcf ],_bced .Data [_fgfe ]&_bagg .Data [_bgfcf ],_acbca ); };};case PixSrcXorDst :for _cffc =0;_cffc < _bcce ;_cffc ++{_fgfe =_cdgb +_cffc *_bced .RowStride ;_bgfcf =_dfde +_cffc *_bagg .RowStride ;for _baaf =0;_baaf < _cgca ;_baaf ++{_bagg .Data [_bgfcf ]^=_bced .Data [_fgfe ];_bgfcf ++;_fgfe ++;};if _adgge > 0{_bagg .Data [_bgfcf ]=_bebd (_bagg .Data [_bgfcf ],_bced .Data [_fgfe ]^_bagg .Data [_bgfcf ],_acbca ); };};case PixNotSrcOrDst :for _cffc =0;_cffc < _bcce ;_cffc ++{_fgfe =_cdgb +_cffc *_bced .RowStride ;_bgfcf =_dfde +_cffc *_bagg .RowStride ;for _baaf =0;_baaf < _cgca ;_baaf ++{_bagg .Data [_bgfcf ]|=^(_bced .Data [_fgfe ]);_bgfcf ++;_fgfe ++;};if _adgge > 0{_bagg .Data [_bgfcf ]=_bebd (_bagg .Data [_bgfcf ],^(_bced .Data [_fgfe ])|_bagg .Data [_bgfcf ],_acbca ); };};case PixNotSrcAndDst :for _cffc =0;_cffc < _bcce ;_cffc ++{_fgfe =_cdgb +_cffc *_bced .RowStride ;_bgfcf =_dfde +_cffc *_bagg .RowStride ;for _baaf =0;_baaf < _cgca ;_baaf ++{_bagg .Data [_bgfcf ]&=^(_bced .Data [_fgfe ]);_bgfcf ++;_fgfe ++;};if _adgge > 0{_bagg .Data [_bgfcf ]=_bebd (_bagg .Data [_bgfcf ],^(_bced .Data [_fgfe ])&_bagg .Data [_bgfcf ],_acbca ); };};case PixSrcOrNotDst :for _cffc =0;_cffc < _bcce ;_cffc ++{_fgfe =_cdgb +_cffc *_bced .RowStride ;_bgfcf =_dfde +_cffc *_bagg .RowStride ;for _baaf =0;_baaf < _cgca ;_baaf ++{_bagg .Data [_bgfcf ]=_bced .Data [_fgfe ]|^(_bagg .Data [_bgfcf ]);_bgfcf ++; _fgfe ++;};if _adgge > 0{_bagg .Data [_bgfcf ]=_bebd (_bagg .Data [_bgfcf ],_bced .Data [_fgfe ]|^(_bagg .Data [_bgfcf ]),_acbca );};};case PixSrcAndNotDst :for _cffc =0;_cffc < _bcce ;_cffc ++{_fgfe =_cdgb +_cffc *_bced .RowStride ;_bgfcf =_dfde +_cffc *_bagg .RowStride ; for _baaf =0;_baaf < _cgca ;_baaf ++{_bagg .Data [_bgfcf ]=_bced .Data [_fgfe ]&^(_bagg .Data [_bgfcf ]);_bgfcf ++;_fgfe ++;};if _adgge > 0{_bagg .Data [_bgfcf ]=_bebd (_bagg .Data [_bgfcf ],_bced .Data [_fgfe ]&^(_bagg .Data [_bgfcf ]),_acbca );};};case PixNotPixSrcOrDst :for _cffc =0; _cffc < _bcce ;_cffc ++{_fgfe =_cdgb +_cffc *_bced .RowStride ;_bgfcf =_dfde +_cffc *_bagg .RowStride ;for _baaf =0;_baaf < _cgca ;_baaf ++{_bagg .Data [_bgfcf ]=^(_bced .Data [_fgfe ]|_bagg .Data [_bgfcf ]);_bgfcf ++;_fgfe ++;};if _adgge > 0{_bagg .Data [_bgfcf ]=_bebd (_bagg .Data [_bgfcf ],^(_bced .Data [_fgfe ]|_bagg .Data [_bgfcf ]),_acbca ); };};case PixNotPixSrcAndDst :for _cffc =0;_cffc < _bcce ;_cffc ++{_fgfe =_cdgb +_cffc *_bced .RowStride ;_bgfcf =_dfde +_cffc *_bagg .RowStride ;for _baaf =0;_baaf < _cgca ;_baaf ++{_bagg .Data [_bgfcf ]=^(_bced .Data [_fgfe ]&_bagg .Data [_bgfcf ]);_bgfcf ++; _fgfe ++;};if _adgge > 0{_bagg .Data [_bgfcf ]=_bebd (_bagg .Data [_bgfcf ],^(_bced .Data [_fgfe ]&_bagg .Data [_bgfcf ]),_acbca );};};case PixNotPixSrcXorDst :for _cffc =0;_cffc < _bcce ;_cffc ++{_fgfe =_cdgb +_cffc *_bced .RowStride ;_bgfcf =_dfde +_cffc *_bagg .RowStride ; for _baaf =0;_baaf < _cgca ;_baaf ++{_bagg .Data [_bgfcf ]=^(_bced .Data [_fgfe ]^_bagg .Data [_bgfcf ]);_bgfcf ++;_fgfe ++;};if _adgge > 0{_bagg .Data [_bgfcf ]=_bebd (_bagg .Data [_bgfcf ],^(_bced .Data [_fgfe ]^_bagg .Data [_bgfcf ]),_acbca );};};default:_ag .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",_ffegg ); return _c .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004co\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072"); };return nil ;};func (_ecedg *ClassedPoints )YAtIndex (i int )float32 {return (*_ecedg .Points )[_ecedg .IntSlice [i ]].Y };type Boxes []*_gg .Rectangle ;func TstImageBitmapInverseData ()[]byte {_bgbcc :=_dffgf .Copy ();_bgbcc .InverseData ();return _bgbcc .Data ; };func _edcg (_bafc *Bitmap ,_fcde *Bitmap ,_eafe int )(_dded error ){const _fbabc ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_ebdf :=_gece (_bafc .Height ,_fcde .Height );_daf :=_gece (_bafc .RowStride ,_fcde .RowStride ); switch _eafe {case 4:_dded =_ecacb (_bafc ,_fcde ,_ebdf ,_daf );case 8:_dded =_agac (_bafc ,_fcde ,_ebdf ,_daf );default:return _c .Errorf (_fbabc ,"\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",_eafe ); };if _dded !=nil {return _c .Wrap (_dded ,_fbabc ,"");};return nil ;};func Centroids (bms []*Bitmap )(*Points ,error ){_baccb :=make ([]Point ,len (bms ));_ccaa :=_fadf ();_agdcf :=_baag ();var _cfab error ;for _gecf ,_efcea :=range bms {_baccb [_gecf ],_cfab =_efcea .centroid (_ccaa ,_agdcf ); if _cfab !=nil {return nil ,_cfab ;};};_bggb :=Points (_baccb );return &_bggb ,nil ;};func _dcaa (_eece ,_aecc *Bitmap ,_adea ,_bdfab int )(*Bitmap ,error ){const _egfb ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";if _aecc ==nil {_ag .Log .Debug ("\u0064\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063k\u0020\u0073\u006f\u0075\u0072\u0063\u0065 \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064"); return nil ,_c .Error (_egfb ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _adea < 1||_bdfab < 1{return nil ,_c .Error (_egfb ,"\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 _adea ==1&&_bdfab ==1{_feca ,_bbca :=_eaaf (_eece ,_aecc );if _bbca !=nil {return nil ,_c .Wrap (_bbca ,_egfb ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _feca ,nil ;};if _adea ==1||_bdfab ==1{_cgba :=SelCreateBrick (_bdfab ,_adea ,_bdfab /2,_adea /2,SelHit );_acad ,_ggda :=_eccce (_eece ,_aecc ,_cgba );if _ggda !=nil {return nil ,_c .Wrap (_ggda ,_egfb ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _acad ,nil ;};_dceg :=SelCreateBrick (1,_adea ,0,_adea /2,SelHit );_becc :=SelCreateBrick (_bdfab ,1,_bdfab /2,0,SelHit );_deec ,_cfbe :=_eccce (nil ,_aecc ,_dceg );if _cfbe !=nil {return nil ,_c .Wrap (_cfbe ,_egfb ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065"); };_eece ,_cfbe =_eccce (_eece ,_deec ,_becc );if _cfbe !=nil {return nil ,_c .Wrap (_cfbe ,_egfb ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _eece ,nil ;};func TstImageBitmap ()*Bitmap {return _dffgf .Copy ()};func (_gbff *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _fdgdb ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074"; _decag ,_eggcfe :=_gbff .selectByIndexes (idx );if _eggcfe !=nil {return nil ,_c .Wrap (_eggcfe ,_fdgdb ,"");};return _decag ,nil ;};func (_cca *Bitmap )thresholdPixelSum (_cbfc int )bool {var (_gfg int ;_acf uint8 ;_fecd byte ;_eeag int ;);_geab :=_cca .RowStride ; _adegb :=uint (_cca .Width &0x07);if _adegb !=0{_acf =uint8 ((0xff<<(8-_adegb ))&0xff);_geab --;};for _fbab :=0;_fbab < _cca .Height ;_fbab ++{for _eeag =0;_eeag < _geab ;_eeag ++{_fecd =_cca .Data [_fbab *_cca .RowStride +_eeag ];_gfg +=int (_cgdc [_fecd ]); };if _adegb !=0{_fecd =_cca .Data [_fbab *_cca .RowStride +_eeag ]&_acf ;_gfg +=int (_cgdc [_fecd ]);};if _gfg > _cbfc {return true ;};};return false ;};func (_daee *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _daee .removeBorderGeneral (left ,right ,top ,bot ); };func (_eccba *Bitmaps )SortByHeight (){_caaa :=(*byHeight )(_eccba );_e .Sort (_caaa )};const _fegbb =5000;func (_aafcd *Bitmaps )AddBitmap (bm *Bitmap ){_aafcd .Values =append (_aafcd .Values ,bm )};func _gaad (_ffcbe ,_aggc *Bitmap ,_fade ,_faeb int )(*Bitmap ,error ){const _cdfc ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b"; if _aggc ==nil {return nil ,_c .Error (_cdfc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _fade < 1||_faeb < 1{return nil ,_c .Error (_cdfc ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031"); };if _fade ==1&&_faeb ==1{return _aggc .Copy (),nil ;};if _fade ==1||_faeb ==1{_eecc :=SelCreateBrick (_faeb ,_fade ,_faeb /2,_fade /2,SelHit );var _bbgf error ;_ffcbe ,_bbgf =_egaad (_ffcbe ,_aggc ,_eecc );if _bbgf !=nil {return nil ,_c .Wrap (_bbgf ,_cdfc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _ffcbe ,nil ;};_ebfg :=SelCreateBrick (1,_fade ,0,_fade /2,SelHit );_fgef :=SelCreateBrick (_faeb ,1,_faeb /2,0,SelHit );_bada ,_bgcb :=_eccce (nil ,_aggc ,_ebfg );if _bgcb !=nil {return nil ,_c .Wrap (_bgcb ,_cdfc ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065"); };if _ffcbe ,_bgcb =_eccce (_ffcbe ,_bada ,_fgef );_bgcb !=nil {return nil ,_c .Wrap (_bgcb ,_cdfc ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_bgcb =_bbed (_bada ,_ffcbe ,_ebfg );_bgcb !=nil {return nil ,_c .Wrap (_bgcb ,_cdfc ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e"); };if _ ,_bgcb =_bbed (_ffcbe ,_bada ,_fgef );_bgcb !=nil {return nil ,_c .Wrap (_bgcb ,_cdfc ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _ffcbe ,nil ;};func (_dffg *Bitmap )CountPixels ()int {return _dffg .countPixels ()};const (_ LocationFilter =iota ; LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);type Color int ;func (_gfb *Bitmap )SizesEqual (s *Bitmap )bool {if _gfb ==s {return true ;};if _gfb .Width !=s .Width ||_gfb .Height !=s .Height {return false ; };return true ;};func _dd (_ba ,_fb *Bitmap )(_fc error ){const _bb ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";_ad :=_fb .RowStride ;_ed :=_ba .RowStride ;var (_aa byte ;_ebg uint16 ;_bd ,_bbe ,_df ,_cd ,_fa int ; );for _df =0;_df < _fb .Height ;_df ++{_bd =_df *_ad ;_bbe =2*_df *_ed ;for _cd =0;_cd < _ad ;_cd ++{_aa =_fb .Data [_bd +_cd ];_ebg =_deda [_aa ];_fa =_bbe +_cd *2;if _ba .RowStride !=_fb .RowStride *2&&(_cd +1)*2> _ba .RowStride {_fc =_ba .SetByte (_fa ,byte (_ebg >>8)); }else {_fc =_ba .setTwoBytes (_fa ,_ebg );};if _fc !=nil {return _c .Wrap (_fc ,_bb ,"");};};for _cd =0;_cd < _ed ;_cd ++{_fa =_bbe +_ed +_cd ;_aa =_ba .Data [_bbe +_cd ];if _fc =_ba .SetByte (_fa ,_aa );_fc !=nil {return _c .Wrapf (_fc ,_bb ,"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",_bbe +_cd ,_bbe +_ed +_cd ); };};};return nil ;};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func _bcge (_fcce *_bc .Stack ,_aedc ,_abgd ,_cabfg ,_cdde ,_bffa int ,_cedfd *_gg .Rectangle )(_cfdd error ){const _edae ="\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 _fcce ==nil {return _c .Error (_edae ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _cedfd ==nil {return _c .Error (_edae ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065"); };_cedfd .Min .X =_bc .Min (_cedfd .Min .X ,_aedc );_cedfd .Max .X =_bc .Max (_cedfd .Max .X ,_abgd );_cedfd .Min .Y =_bc .Min (_cedfd .Min .Y ,_cabfg );_cedfd .Max .Y =_bc .Max (_cedfd .Max .Y ,_cabfg );if !(_cabfg +_cdde >=0&&_cabfg +_cdde <=_bffa ){return nil ; };if _fcce .Aux ==nil {return _c .Error (_edae ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _agae *fillSegment ;_egbe ,_efgd :=_fcce .Aux .Pop ();if _efgd {if _agae ,_efgd =_egbe .(*fillSegment ); !_efgd {return _c .Error (_edae ,"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 {_agae =&fillSegment {}; };_agae ._ffac =_aedc ;_agae ._egace =_abgd ;_agae ._edacf =_cabfg ;_agae ._ageg =_cdde ;_fcce .Push (_agae );return nil ;};func _caf (_affg ,_fab byte ,_dffa CombinationOperator )byte {switch _dffa {case CmbOpOr :return _fab |_affg ;case CmbOpAnd :return _fab &_affg ; case CmbOpXor :return _fab ^_affg ;case CmbOpXNor :return ^(_fab ^_affg );case CmbOpNot :return ^(_fab );default:return _fab ;};};func (_fbdg *Bitmaps )Size ()int {return len (_fbdg .Values )};func _bfbg (_cfde *Bitmap ,_ggdd ,_aebe ,_dgda ,_fdff int ,_bgba RasterOperator ,_bbfd *Bitmap ,_ffca ,_bfaf int )error {const _adgeg ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e"; if _cfde ==nil {return _c .Error (_adgeg ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _bgba ==PixDst {return nil ;};switch _bgba {case PixClr ,PixSet ,PixNotDst :_abfa (_cfde ,_ggdd ,_aebe ,_dgda ,_fdff ,_bgba ); return nil ;};if _bbfd ==nil {_ag .Log .Debug ("\u0052a\u0073\u0074e\u0072\u004f\u0070\u0065r\u0061\u0074\u0069o\u006e\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020bi\u0074\u006d\u0061p\u0020\u0069s\u0020\u006e\u006f\u0074\u0020\u0064e\u0066\u0069n\u0065\u0064"); return _c .Error (_adgeg ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ffb :=_cabc (_cfde ,_ggdd ,_aebe ,_dgda ,_fdff ,_bgba ,_bbfd ,_ffca ,_bfaf );_ffb !=nil {return _c .Wrap (_ffb ,_adgeg ,"");};return nil ; };func _eba ()(_dg [256]uint32 ){for _gbg :=0;_gbg < 256;_gbg ++{if _gbg &0x01!=0{_dg [_gbg ]|=0xf;};if _gbg &0x02!=0{_dg [_gbg ]|=0xf0;};if _gbg &0x04!=0{_dg [_gbg ]|=0xf00;};if _gbg &0x08!=0{_dg [_gbg ]|=0xf000;};if _gbg &0x10!=0{_dg [_gbg ]|=0xf0000; };if _gbg &0x20!=0{_dg [_gbg ]|=0xf00000;};if _gbg &0x40!=0{_dg [_gbg ]|=0xf000000;};if _gbg &0x80!=0{_dg [_gbg ]|=0xf0000000;};};return _dg ;};func TstPSymbol (t *_g .T )*Bitmap {t .Helper ();_cdfb :=New (5,8);_ce .NoError (t ,_cdfb .SetPixel (0,0,1)); _ce .NoError (t ,_cdfb .SetPixel (1,0,1));_ce .NoError (t ,_cdfb .SetPixel (2,0,1));_ce .NoError (t ,_cdfb .SetPixel (3,0,1));_ce .NoError (t ,_cdfb .SetPixel (4,1,1));_ce .NoError (t ,_cdfb .SetPixel (0,1,1));_ce .NoError (t ,_cdfb .SetPixel (4,2,1)); _ce .NoError (t ,_cdfb .SetPixel (0,2,1));_ce .NoError (t ,_cdfb .SetPixel (4,3,1));_ce .NoError (t ,_cdfb .SetPixel (0,3,1));_ce .NoError (t ,_cdfb .SetPixel (0,4,1));_ce .NoError (t ,_cdfb .SetPixel (1,4,1));_ce .NoError (t ,_cdfb .SetPixel (2,4,1)); _ce .NoError (t ,_cdfb .SetPixel (3,4,1));_ce .NoError (t ,_cdfb .SetPixel (0,5,1));_ce .NoError (t ,_cdfb .SetPixel (0,6,1));_ce .NoError (t ,_cdfb .SetPixel (0,7,1));return _cdfb ;};func (_deed CombinationOperator )String ()string {var _adacd string ; switch _deed {case CmbOpOr :_adacd ="\u004f\u0052";case CmbOpAnd :_adacd ="\u0041\u004e\u0044";case CmbOpXor :_adacd ="\u0058\u004f\u0052";case CmbOpXNor :_adacd ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_adacd ="\u0052E\u0050\u004c\u0041\u0043\u0045"; case CmbOpNot :_adacd ="\u004e\u004f\u0054";};return _adacd ;};func _fddf (_eegg ,_eegdg *Bitmap ,_ecbb ,_afae ,_gede ,_cdaa ,_bdgg ,_edc ,_fcb ,_cfd int ,_gebe CombinationOperator )error {var _aaaf int ;_addb :=func (){_aaaf ++;_gede +=_eegdg .RowStride ; _cdaa +=_eegg .RowStride ;_bdgg +=_eegg .RowStride };for _aaaf =_ecbb ;_aaaf < _afae ;_addb (){var _aecb uint16 ;_gedeg :=_gede ;for _eeaa :=_cdaa ;_eeaa <=_bdgg ;_eeaa ++{_ggcbb ,_dfbdg :=_eegdg .GetByte (_gedeg );if _dfbdg !=nil {return _dfbdg ;};_eccc ,_dfbdg :=_eegg .GetByte (_eeaa ); if _dfbdg !=nil {return _dfbdg ;};_aecb =(_aecb |uint16 (_eccc ))<>8);if _eeaa ==_bdgg {_eccc =_gfba (uint (_edc ),_eccc );};if _dfbdg =_eegdg .SetByte (_gedeg ,_caf (_ggcbb ,_eccc ,_gebe ));_dfbdg !=nil {return _dfbdg ; };_gedeg ++;_aecb <<=uint (_fcb );};};return nil ;};func _bbed (_efdgd ,_dgae *Bitmap ,_ebcb *Selection )(*Bitmap ,error ){const _dbgf ="\u0065\u0072\u006fd\u0065";var (_cfae error ;_ebfc *Bitmap ;);_efdgd ,_cfae =_ggdag (_efdgd ,_dgae ,_ebcb ,&_ebfc ); if _cfae !=nil {return nil ,_c .Wrap (_cfae ,_dbgf ,"");};if _cfae =_efdgd .setAll ();_cfae !=nil {return nil ,_c .Wrap (_cfae ,_dbgf ,"");};var _baab SelectionValue ;for _ggdab :=0;_ggdab < _ebcb .Height ;_ggdab ++{for _dba :=0;_dba < _ebcb .Width ;_dba ++{_baab =_ebcb .Data [_ggdab ][_dba ]; if _baab ==SelHit {_cfae =_bfbg (_efdgd ,_ebcb .Cx -_dba ,_ebcb .Cy -_ggdab ,_dgae .Width ,_dgae .Height ,PixSrcAndDst ,_ebfc ,0,0);if _cfae !=nil {return nil ,_c .Wrap (_cfae ,_dbgf ,"");};};};};if MorphBC ==SymmetricMorphBC {return _efdgd ,nil ;};_acfb ,_ccgf ,_cbff ,_adcae :=_ebcb .findMaxTranslations (); if _acfb > 0{if _cfae =_efdgd .RasterOperation (0,0,_acfb ,_dgae .Height ,PixClr ,nil ,0,0);_cfae !=nil {return nil ,_c .Wrap (_cfae ,_dbgf ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _cbff > 0{if _cfae =_efdgd .RasterOperation (_dgae .Width -_cbff ,0,_cbff ,_dgae .Height ,PixClr ,nil ,0,0); _cfae !=nil {return nil ,_c .Wrap (_cfae ,_dbgf ,"\u0078\u006e\u0020\u003e\u0020\u0030");};};if _ccgf > 0{if _cfae =_efdgd .RasterOperation (0,0,_dgae .Width ,_ccgf ,PixClr ,nil ,0,0);_cfae !=nil {return nil ,_c .Wrap (_cfae ,_dbgf ,"\u0079\u0070\u0020\u003e\u0020\u0030"); };};if _adcae > 0{if _cfae =_efdgd .RasterOperation (0,_dgae .Height -_adcae ,_dgae .Width ,_adcae ,PixClr ,nil ,0,0);_cfae !=nil {return nil ,_c .Wrap (_cfae ,_dbgf ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _efdgd ,nil ;};func (_ddf *Bitmap )setBit (_afaf int ){_ddf .Data [(_afaf >>3)]|=0x80>>uint (_afaf &7)}; func (_cgdb Points )GetGeometry (i int )(_fffb ,_dcbb float32 ,_acdg error ){if i > len (_cgdb )-1{return 0,0,_c .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i ); };_bbba :=_cgdb [i ];return _bbba .X ,_bbba .Y ,nil ;};func TstDSymbol (t *_g .T ,scale ...int )*Bitmap {_gggg ,_bebc :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_ce .NoError (t ,_bebc );return TstGetScaledSymbol (t ,_gggg ,scale ...);};func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _eaaf (d ,s )}; func (_eabff *ClassedPoints )XAtIndex (i int )float32 {return (*_eabff .Points )[_eabff .IntSlice [i ]].X };func TstFrameBitmap ()*Bitmap {return _abbb .Copy ()};func (_bgdg *ClassedPoints )Less (i ,j int )bool {return _bgdg ._aacb (i ,j )};func (_aabc Points )XSorter ()func (_bgd ,_beg int )bool {return func (_eaad ,_bcea int )bool {return _aabc [_eaad ].X < _aabc [_bcea ].X }; };func (_bbecd *ClassedPoints )xSortFunction ()func (_caga int ,_gbfb int )bool {return func (_dcef ,_afcd int )bool {return _bbecd .XAtIndex (_dcef )< _bbecd .XAtIndex (_afcd )};};func TstAddSymbol (t *_g .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym ); _baff :=_gg .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_baff );*x +=sym .Width +space ;};func _gece (_ccbd ,_cbbe int )int {if _ccbd < _cbbe {return _ccbd ;};return _cbbe ;};func (_ddcgc *ClassedPoints )validateIntSlice ()error {const _egac ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065"; for _ ,_gabd :=range _ddcgc .IntSlice {if _gabd >=(_ddcgc .Points .Size ()){return _c .Errorf (_egac ,"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",_gabd ,_ddcgc .Points .Size ()); };};return nil ;};func (_dfba *Bitmap )SetDefaultPixel (){for _bef :=range _dfba .Data {_dfba .Data [_bef ]=byte (0xff);};};func (_ffd *Bitmap )CreateTemplate ()*Bitmap {return _ffd .createTemplate ()};type BoundaryCondition int ;func New (width ,height int )*Bitmap {_fcg :=_dee (width ,height ); _fcg .Data =make ([]byte ,height *_fcg .RowStride );return _fcg ;};func TstTSymbol (t *_g .T ,scale ...int )*Bitmap {_bcdbg ,_ccbg :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});_ce .NoError (t ,_ccbg );return TstGetScaledSymbol (t ,_bcdbg ,scale ...); };func (_cbd *ClassedPoints )Swap (i ,j int ){_cbd .IntSlice [i ],_cbd .IntSlice [j ]=_cbd .IntSlice [j ],_cbd .IntSlice [i ];};type RasterOperator int ;func _ggd (_cfc ,_ebad *Bitmap ,_eef int ,_gd []byte ,_dfa int )(_eedb error ){const _bfb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031"; var (_dbb ,_dgg ,_fafd ,_fbc ,_gae ,_dab ,_ccd ,_ace int ;_acg ,_aab uint32 ;_ece ,_abb byte ;_dda uint16 ;);_bbb :=make ([]byte ,4);_bbc :=make ([]byte ,4);for _fafd =0;_fafd < _cfc .Height -1;_fafd ,_fbc =_fafd +2,_fbc +1{_dbb =_fafd *_cfc .RowStride ; _dgg =_fbc *_ebad .RowStride ;for _gae ,_dab =0,0;_gae < _dfa ;_gae ,_dab =_gae +4,_dab +1{for _ccd =0;_ccd < 4;_ccd ++{_ace =_dbb +_gae +_ccd ;if _ace <=len (_cfc .Data )-1&&_ace < _dbb +_cfc .RowStride {_bbb [_ccd ]=_cfc .Data [_ace ];}else {_bbb [_ccd ]=0x00; };_ace =_dbb +_cfc .RowStride +_gae +_ccd ;if _ace <=len (_cfc .Data )-1&&_ace < _dbb +(2*_cfc .RowStride ){_bbc [_ccd ]=_cfc .Data [_ace ];}else {_bbc [_ccd ]=0x00;};};_acg =_f .BigEndian .Uint32 (_bbb );_aab =_f .BigEndian .Uint32 (_bbc );_aab |=_acg ; _aab |=_aab <<1;_aab &=0xaaaaaaaa;_acg =_aab |(_aab <<7);_ece =byte (_acg >>24);_abb =byte ((_acg >>8)&0xff);_ace =_dgg +_dab ;if _ace +1==len (_ebad .Data )-1||_ace +1>=_dgg +_ebad .RowStride {_ebad .Data [_ace ]=_gd [_ece ];}else {_dda =(uint16 (_gd [_ece ])<<8)|uint16 (_gd [_abb ]); if _eedb =_ebad .setTwoBytes (_ace ,_dda );_eedb !=nil {return _c .Wrapf (_eedb ,_bfb ,"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",_ace ); };_dab ++;};};};return nil ;};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func (_edb *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_gcage *Boxes ,_ecf error ){const _gfc ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065"; if _edb ==nil {return nil ,_c .Error (_gfc ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_edb )==0{return _edb ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_gfc ,"\u0069\u006e\u0076al\u0069\u0064\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp ); };switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE :default:return nil ,_c .Errorf (_gfc ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp ); };_ceedb :=_edb .makeSizeIndicator (width ,height ,tp ,relation );_abde ,_ecf :=_edb .selectWithIndicator (_ceedb );if _ecf !=nil {return nil ,_c .Wrap (_ecf ,_gfc ,"");};return _abde ,nil ;};func (_fbccb *byHeight )Swap (i ,j int ){_fbccb .Values [i ],_fbccb .Values [j ]=_fbccb .Values [j ],_fbccb .Values [i ]; if _fbccb .Boxes !=nil {_fbccb .Boxes [i ],_fbccb .Boxes [j ]=_fbccb .Boxes [j ],_fbccb .Boxes [i ];};};func TstFrameBitmapData ()[]byte {return _abbb .Data };func TstGetScaledSymbol (t *_g .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ; };if scale [0]==1{return sm ;};_fced ,_ecfdd :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_ce .NoError (t ,_ecfdd );return _fced ;};func (_dac *Bitmap )removeBorderGeneral (_eedg ,_ceaf ,_cacd ,_dggda int )(*Bitmap ,error ){const _dga ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c"; if _eedg < 0||_ceaf < 0||_cacd < 0||_dggda < 0{return nil ,_c .Error (_dga ,"\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");};_adfc ,_dcb :=_dac .Width ,_dac .Height ; _fgbg :=_adfc -_eedg -_ceaf ;_gebb :=_dcb -_cacd -_dggda ;if _fgbg <=0{return nil ,_c .Errorf (_dga ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_fgbg );};if _gebb <=0{return nil ,_c .Errorf (_dga ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_gebb ); };_acbe :=New (_fgbg ,_gebb );_acbe .Color =_dac .Color ;_gfa :=_acbe .RasterOperation (0,0,_fgbg ,_gebb ,PixSrc ,_dac ,_eedg ,_cacd );if _gfa !=nil {return nil ,_c .Wrap (_gfa ,_dga ,"");};return _acbe ,nil ;};const (SelDontCare SelectionValue =iota ; SelHit ;SelMiss ;);func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _eccce (d ,s ,sel )};type shift int ;func _ddc (_cfebb ,_dfbab ,_abdc *Bitmap )(*Bitmap ,error ){const _aee ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072"; if _dfbab ==nil {return nil ,_c .Error (_aee ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _abdc ==nil {return nil ,_c .Error (_aee ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _cfebb ==_abdc {return nil ,_c .Error (_aee ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027"); };if !_dfbab .SizesEqual (_abdc ){_ag .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",_aee ); };var _gbga error ;if _cfebb ,_gbga =_eaaf (_cfebb ,_dfbab );_gbga !=nil {return nil ,_c .Wrap (_gbga ,_aee ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _gbga =_cfebb .RasterOperation (0,0,_cfebb .Width ,_cfebb .Height ,PixSrcXorDst ,_abdc ,0,0); _gbga !=nil {return nil ,_c .Wrap (_gbga ,_aee ,"");};return _cfebb ,nil ;};func (_edac Points )Size ()int {return len (_edac )};func (_dace *Bitmaps )GetBox (i int )(*_gg .Rectangle ,error ){const _ffcbea ="\u0047\u0065\u0074\u0042\u006f\u0078";if _dace ==nil {return nil ,_c .Error (_ffcbea ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027"); };if i > len (_dace .Boxes )-1{return nil ,_c .Errorf (_ffcbea ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _dace .Boxes [i ],nil ;};func (_eabeb *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_gbdd *Boxes ,_gee error ){const _ggee ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073"; if _eabeb ==nil {return nil ,_c .Error (_ggee ,"\u0070r\u006f\u0076\u0069\u0064e\u0064\u0020\u0065\u006d\u0070t\u0079 \u0027b\u0027\u0020\u0062\u0069\u0074\u006d\u0061p");};if connectivity !=4&&connectivity !=8{return nil ,_c .Error (_ggee ,"\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 _gbdd ,_gee =_eabeb .connComponentsBB (connectivity );_gee !=nil {return nil ,_c .Wrap (_gee ,_ggee ,"");};}else {if _gbdd ,_gee =_eabeb .connComponentsBitmapsBB (bms ,connectivity );_gee !=nil {return nil ,_c .Wrap (_gee ,_ggee ,""); };};return _gbdd ,nil ;};func (_cefg *BitmapsArray )AddBitmaps (bm *Bitmaps ){_cefg .Values =append (_cefg .Values ,bm )};func (_eegd *Bitmap )nextOnPixel (_fdgg ,_egaa int )(_dbce _gg .Point ,_feg bool ,_ebd error ){const _bfcb ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c"; _dbce ,_feg ,_ebd =_eegd .nextOnPixelLow (_eegd .Width ,_eegd .Height ,_eegd .RowStride ,_fdgg ,_egaa );if _ebd !=nil {return _dbce ,false ,_c .Wrap (_ebd ,_bfcb ,"");};return _dbce ,_feg ,nil ;};func ClipBoxToRectangle (box *_gg .Rectangle ,wi ,hi int )(_bbcg *_gg .Rectangle ,_acgc error ){const _ceedc ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065"; if box ==nil {return nil ,_c .Error (_ceedc ,"\u0027\u0062\u006f\u0078\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if box .Min .X >=wi ||box .Min .Y >=hi ||box .Max .X <=0||box .Max .Y <=0{return nil ,_c .Error (_ceedc ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065"); };_febe :=*box ;_bbcg =&_febe ;if _bbcg .Min .X < 0{_bbcg .Max .X +=_bbcg .Min .X ;_bbcg .Min .X =0;};if _bbcg .Min .Y < 0{_bbcg .Max .Y +=_bbcg .Min .Y ;_bbcg .Min .Y =0;};if _bbcg .Max .X > wi {_bbcg .Max .X =wi ;};if _bbcg .Max .Y > hi {_bbcg .Max .Y =hi ; };return _bbcg ,nil ;};func (_cfcaa *Bitmap )resizeImageData (_bbfb *Bitmap )error {if _bbfb ==nil {return _c .Error ("\u0072e\u0073i\u007a\u0065\u0049\u006d\u0061\u0067\u0065\u0044\u0061\u0074\u0061","\u0073r\u0063 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064"); };if _cfcaa .SizesEqual (_bbfb ){return nil ;};_cfcaa .Data =make ([]byte ,len (_bbfb .Data ));_cfcaa .Width =_bbfb .Width ;_cfcaa .Height =_bbfb .Height ;_cfcaa .RowStride =_bbfb .RowStride ;return nil ;};func (_eeaga *byWidth )Swap (i ,j int ){_eeaga .Values [i ],_eeaga .Values [j ]=_eeaga .Values [j ],_eeaga .Values [i ]; if _eeaga .Boxes !=nil {_eeaga .Boxes [i ],_eeaga .Boxes [j ]=_eeaga .Boxes [j ],_eeaga .Boxes [i ];};};func (_cfdc *ClassedPoints )ySortFunction ()func (_cbfd int ,_feaf int )bool {return func (_fabg ,_bdfd int )bool {return _cfdc .YAtIndex (_fabg )< _cfdc .YAtIndex (_bdfd )}; };type byWidth Bitmaps ;func TstWordBitmap (t *_g .T ,scale ...int )*Bitmap {_bbcag :=1;if len (scale )> 0{_bbcag =scale [0];};_fcdb :=3;_abca :=9+7+15+2*_fcdb ;_gdgee :=5+_fcdb +5;_aadc :=New (_abca *_bbcag ,_gdgee *_bbcag );_egaag :=&Bitmaps {};var _edfcc *int ; _fcdb *=_bbcag ;_geed :=0;_edfcc =&_geed ;_cgdaf :=0;_ggge :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_egaag ,_ggge ,_edfcc ,_cgdaf ,1*_bbcag );_ggge =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_egaag ,_ggge ,_edfcc ,_cgdaf ,_fcdb );_ggge =TstISymbol (t ,scale ...); TstAddSymbol (t ,_egaag ,_ggge ,_edfcc ,_cgdaf ,1*_bbcag );_ggge =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_egaag ,_ggge ,_edfcc ,_cgdaf ,_fcdb );_ggge =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_egaag ,_ggge ,_edfcc ,_cgdaf ,1*_bbcag );_ggge =TstOSymbol (t ,scale ...); TstAddSymbol (t ,_egaag ,_ggge ,_edfcc ,_cgdaf ,1*_bbcag );_ggge =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_egaag ,_ggge ,_edfcc ,_cgdaf ,0);*_edfcc =0;_cgdaf =5*_bbcag +_fcdb ;_ggge =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_egaag ,_ggge ,_edfcc ,_cgdaf ,1*_bbcag ); _ggge =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_egaag ,_ggge ,_edfcc ,_cgdaf ,_fcdb );_ggge =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_egaag ,_ggge ,_edfcc ,_cgdaf ,1*_bbcag );_ggge =TstESymbol (t ,scale ...);TstAddSymbol (t ,_egaag ,_ggge ,_edfcc ,_cgdaf ,1*_bbcag ); _ggge =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_egaag ,_ggge ,_edfcc ,_cgdaf ,1*_bbcag );_ggge =TstESymbol (t ,scale ...);TstAddSymbol (t ,_egaag ,_ggge ,_edfcc ,_cgdaf ,1*_bbcag );_ggge =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_egaag ,_ggge ,_edfcc ,_cgdaf ,0); TstWriteSymbols (t ,_egaag ,_aadc );return _aadc ;};func _fad ()(_bdc []byte ){_bdc =make ([]byte ,256);for _cbbg :=0;_cbbg < 256;_cbbg ++{_gea :=byte (_cbbg );_bdc [_gea ]=(_gea &0x01)|((_gea &0x04)>>1)|((_gea &0x10)>>2)|((_gea &0x40)>>3)|((_gea &0x02)<<3)|((_gea &0x08)<<2)|((_gea &0x20)<<1)|(_gea &0x80); };return _bdc ;};func (_egc *Bitmap )addBorderGeneral (_dedf ,_efg ,_bdbg ,_dgf int ,_dce int )(*Bitmap ,error ){const _ebba ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _dedf < 0||_efg < 0||_bdbg < 0||_dgf < 0{return nil ,_c .Error (_ebba ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064"); };_cae ,_cddb :=_egc .Width ,_egc .Height ;_edg :=_cae +_dedf +_efg ;_dfc :=_cddb +_bdbg +_dgf ;_gbfe :=New (_edg ,_dfc );_gbfe .Color =_egc .Color ;_daegg :=PixClr ;if _dce > 0{_daegg =PixSet ;};_ebee :=_gbfe .RasterOperation (0,0,_dedf ,_dfc ,_daegg ,nil ,0,0); if _ebee !=nil {return nil ,_c .Wrap (_ebee ,_ebba ,"\u006c\u0065\u0066\u0074");};_ebee =_gbfe .RasterOperation (_edg -_efg ,0,_efg ,_dfc ,_daegg ,nil ,0,0);if _ebee !=nil {return nil ,_c .Wrap (_ebee ,_ebba ,"\u0072\u0069\u0067h\u0074");};_ebee =_gbfe .RasterOperation (0,0,_edg ,_bdbg ,_daegg ,nil ,0,0); if _ebee !=nil {return nil ,_c .Wrap (_ebee ,_ebba ,"\u0074\u006f\u0070");};_ebee =_gbfe .RasterOperation (0,_dfc -_dgf ,_edg ,_dgf ,_daegg ,nil ,0,0);if _ebee !=nil {return nil ,_c .Wrap (_ebee ,_ebba ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_ebee =_gbfe .RasterOperation (_dedf ,_bdbg ,_cae ,_cddb ,PixSrc ,_egc ,0,0); if _ebee !=nil {return nil ,_c .Wrap (_ebee ,_ebba ,"\u0063\u006f\u0070\u0079");};return _gbfe ,nil ;};func (_gbfff *byWidth )Len ()int {return len (_gbfff .Values )};func (_ebca *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _gabg ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p"; if _ebca ==nil {return nil ,_c .Error (_gabg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");};if i > len (_ebca .Values )-1{return nil ,_c .Errorf (_gabg ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i ); };return _ebca .Values [i ],nil ;};func _fbdb ()(_adff [256]uint64 ){for _ec :=0;_ec < 256;_ec ++{if _ec &0x01!=0{_adff [_ec ]|=0xff;};if _ec &0x02!=0{_adff [_ec ]|=0xff00;};if _ec &0x04!=0{_adff [_ec ]|=0xff0000;};if _ec &0x08!=0{_adff [_ec ]|=0xff000000; };if _ec &0x10!=0{_adff [_ec ]|=0xff00000000;};if _ec &0x20!=0{_adff [_ec ]|=0xff0000000000;};if _ec &0x40!=0{_adff [_ec ]|=0xff000000000000;};if _ec &0x80!=0{_adff [_ec ]|=0xff00000000000000;};};return _adff ;};func (_adc *Bitmap )SetByte (index int ,v byte )error {if index > len (_adc .Data )-1||index < 0{return _c .Errorf ("\u0053e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",index ); };_adc .Data [index ]=v ;return nil ;};type CombinationOperator int ;func (_egbg *Bitmaps )selectByIndexes (_cedgd []int )(*Bitmaps ,error ){_ffacd :=&Bitmaps {};for _ ,_badab :=range _cedgd {_eecg ,_dccb :=_egbg .GetBitmap (_badab );if _dccb !=nil {return nil ,_c .Wrap (_dccb ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073",""); };_ffacd .AddBitmap (_eecg );};return _ffacd ,nil ;};func (_cdgg *BitmapsArray )AddBox (box *_gg .Rectangle ){_cdgg .Boxes =append (_cdgg .Boxes ,box )};func (_cdef *Bitmaps )makeSizeIndicator (_dbff ,_dgdeb int ,_dcfa LocationFilter ,_gadg SizeComparison )(_babe *_bc .NumSlice ,_fcfe error ){const _egee ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr"; if _cdef ==nil {return nil ,_c .Error (_egee ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _dcfa {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_c .Errorf (_egee ,"\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",_dcfa ); };switch _gadg {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_c .Errorf (_egee ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_gadg ); };_babe =&_bc .NumSlice {};var (_bgae ,_deada ,_beec int ;_bgaf *Bitmap ;);for _ ,_bgaf =range _cdef .Values {_bgae =0;_deada ,_beec =_bgaf .Width ,_bgaf .Height ;switch _dcfa {case LocSelectWidth :if (_gadg ==SizeSelectIfLT &&_deada < _dbff )||(_gadg ==SizeSelectIfGT &&_deada > _dbff )||(_gadg ==SizeSelectIfLTE &&_deada <=_dbff )||(_gadg ==SizeSelectIfGTE &&_deada >=_dbff )||(_gadg ==SizeSelectIfEQ &&_deada ==_dbff ){_bgae =1; };case LocSelectHeight :if (_gadg ==SizeSelectIfLT &&_beec < _dgdeb )||(_gadg ==SizeSelectIfGT &&_beec > _dgdeb )||(_gadg ==SizeSelectIfLTE &&_beec <=_dgdeb )||(_gadg ==SizeSelectIfGTE &&_beec >=_dgdeb )||(_gadg ==SizeSelectIfEQ &&_beec ==_dgdeb ){_bgae =1; };case LocSelectIfEither :if (_gadg ==SizeSelectIfLT &&(_deada < _dbff ||_beec < _dgdeb ))||(_gadg ==SizeSelectIfGT &&(_deada > _dbff ||_beec > _dgdeb ))||(_gadg ==SizeSelectIfLTE &&(_deada <=_dbff ||_beec <=_dgdeb ))||(_gadg ==SizeSelectIfGTE &&(_deada >=_dbff ||_beec >=_dgdeb ))||(_gadg ==SizeSelectIfEQ &&(_deada ==_dbff ||_beec ==_dgdeb )){_bgae =1; };case LocSelectIfBoth :if (_gadg ==SizeSelectIfLT &&(_deada < _dbff &&_beec < _dgdeb ))||(_gadg ==SizeSelectIfGT &&(_deada > _dbff &&_beec > _dgdeb ))||(_gadg ==SizeSelectIfLTE &&(_deada <=_dbff &&_beec <=_dgdeb ))||(_gadg ==SizeSelectIfGTE &&(_deada >=_dbff &&_beec >=_dgdeb ))||(_gadg ==SizeSelectIfEQ &&(_deada ==_dbff &&_beec ==_dgdeb )){_bgae =1; };};_babe .AddInt (_bgae );};return _babe ,nil ;};func (_bceg *Bitmap )setEightFullBytes (_fegb int ,_dfga uint64 )error {if _fegb +7> len (_bceg .Data )-1{return _c .Error ("\u0073\u0065\u0074\u0045\u0069\u0067\u0068\u0074\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065"); };_bceg .Data [_fegb ]=byte ((_dfga &0xff00000000000000)>>56);_bceg .Data [_fegb +1]=byte ((_dfga &0xff000000000000)>>48);_bceg .Data [_fegb +2]=byte ((_dfga &0xff0000000000)>>40);_bceg .Data [_fegb +3]=byte ((_dfga &0xff00000000)>>32);_bceg .Data [_fegb +4]=byte ((_dfga &0xff000000)>>24); _bceg .Data [_fegb +5]=byte ((_dfga &0xff0000)>>16);_bceg .Data [_fegb +6]=byte ((_dfga &0xff00)>>8);_bceg .Data [_fegb +7]=byte (_dfga &0xff);return nil ;};type LocationFilter int ;func (_fgge *Bitmap )ClipRectangle (box *_gg .Rectangle )(_deb *Bitmap ,_ggc *_gg .Rectangle ,_adg error ){const _gbcb ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065"; if box ==nil {return nil ,nil ,_c .Error (_gbcb ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_cbc ,_fd :=_fgge .Width ,_fgge .Height ;_bbccf :=_gg .Rect (0,0,_cbc ,_fd );if !box .Overlaps (_bbccf ){return nil ,nil ,_c .Error (_gbcb ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062"); };_dfb :=box .Intersect (_bbccf );_agg ,_fdd :=_dfb .Min .X ,_dfb .Min .Y ;_fffa ,_geb :=_dfb .Dx (),_dfb .Dy ();_deb =New (_fffa ,_geb );_deb .Text =_fgge .Text ;if _adg =_deb .RasterOperation (0,0,_fffa ,_geb ,PixSrc ,_fgge ,_agg ,_fdd );_adg !=nil {return nil ,nil ,_c .Wrap (_adg ,_gbcb ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064"); };_ggc =&_dfb ;return _deb ,_ggc ,nil ;};func _gfba (_fgda uint ,_eebf byte )byte {return _eebf >>_fgda <<_fgda };func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_caffe float64 ,_bbga error ){const _bcbc ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065"; if bm1 ==nil ||bm2 ==nil {return 0,_c .Error (_bcbc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_c .Error (_bcbc ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064"); };if area1 <=0||area2 <=0{return 0,_c .Error (_bcbc ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_cgeg ,_gaac :=bm1 .Width ,bm1 .Height ;_ebeb ,_cafd :=bm2 .Width ,bm2 .Height ; _ecd :=_cada (_cgeg -_ebeb );if _ecd > maxDiffW {return 0,nil ;};_ecgb :=_cada (_gaac -_cafd );if _ecgb > maxDiffH {return 0,nil ;};var _efdgb ,_cecb int ;if delX >=0{_efdgb =int (delX +0.5);}else {_efdgb =int (delX -0.5);};if delY >=0{_cecb =int (delY +0.5); }else {_cecb =int (delY -0.5);};_gdgc :=_ccfc (_cecb ,0);_cebc :=_gece (_cafd +_cecb ,_gaac );_gagd :=bm1 .RowStride *_gdgc ;_fefg :=bm2 .RowStride *(_gdgc -_cecb );_gddc :=_ccfc (_efdgb ,0);_edd :=_gece (_ebeb +_efdgb ,_cgeg );_gbcba :=bm2 .RowStride ; var _abed ,_ffcb int ;if _efdgb >=8{_abed =_efdgb >>3;_gagd +=_abed ;_gddc -=_abed <<3;_edd -=_abed <<3;_efdgb &=7;}else if _efdgb <=-8{_ffcb =-((_efdgb +7)>>3);_fefg +=_ffcb ;_gbcba -=_ffcb ;_efdgb +=_ffcb <<3;};if _gddc >=_edd ||_gdgc >=_cebc {return 0,nil ; };_bcdb :=(_edd +7)>>3;var (_aega ,_afcg ,_fgf byte ;_bgbe ,_egb ,_cgad int ;);switch {case _efdgb ==0:for _cgad =_gdgc ;_cgad < _cebc ;_cgad ,_gagd ,_fefg =_cgad +1,_gagd +bm1 .RowStride ,_fefg +bm2 .RowStride {for _egb =0;_egb < _bcdb ;_egb ++{_fgf =bm1 .Data [_gagd +_egb ]&bm2 .Data [_fefg +_egb ]; _bgbe +=tab [_fgf ];};};case _efdgb > 0:if _gbcba < _bcdb {for _cgad =_gdgc ;_cgad < _cebc ;_cgad ,_gagd ,_fefg =_cgad +1,_gagd +bm1 .RowStride ,_fefg +bm2 .RowStride {_aega ,_afcg =bm1 .Data [_gagd ],bm2 .Data [_fefg ]>>uint (_efdgb );_fgf =_aega &_afcg ; _bgbe +=tab [_fgf ];for _egb =1;_egb < _gbcba ;_egb ++{_aega ,_afcg =bm1 .Data [_gagd +_egb ],(bm2 .Data [_fefg +_egb ]>>uint (_efdgb ))|(bm2 .Data [_fefg +_egb -1]<>uint (_efdgb ); _fgf =_aega &_afcg ;_bgbe +=tab [_fgf ];for _egb =1;_egb < _bcdb ;_egb ++{_aega =bm1 .Data [_gagd +_egb ];_afcg =(bm2 .Data [_fefg +_egb ]>>uint (_efdgb ))|(bm2 .Data [_fefg +_egb -1]<>uint (8+_efdgb ); _fgf =_aega &_afcg ;_bgbe +=tab [_fgf ];};};}else {for _cgad =_gdgc ;_cgad < _cebc ;_cgad ,_gagd ,_fefg =_cgad +1,_gagd +bm1 .RowStride ,_fefg +bm2 .RowStride {for _egb =0;_egb < _bcdb -1;_egb ++{_aega =bm1 .Data [_gagd +_egb ];_afcg =bm2 .Data [_fefg +_egb ]<>uint (8+_efdgb );_fgf =_aega &_afcg ;_bgbe +=tab [_fgf ];};_aega =bm1 .Data [_gagd +_egb ];_afcg =bm2 .Data [_fefg +_egb ]<>=_aeab ; _afec :=_adca |_fgcd ;if _fgga &&!_fegf {_afec =_gfba (_ddb ,_afec );};_gbd =_caff .SetByte (_caeb ,_afec );if _gbd !=nil {return _gbd ;};_caeb ++;if _fgga &&_fegf {_dbba ,_afb :=_daaf .GetByte (_faeg );if _afb !=nil {return _afb ;};_dbba <<=_cfg ;_afec =_gfba (_ddb ,_dbba ); if _afb =_caff .SetByte (_caeb ,_afec );_afb !=nil {return _afb ;};};continue ;};_dgfg ,_bed :=_daaf .GetByte (_faeg );if _bed !=nil {_ag .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",_faeg ,_bed ); return _bed ;};_dgfg <<=_cfg ;_faeg ++;_bed =_caff .SetByte (_caeb ,_dgfg );if _bed !=nil {return _bed ;};_caeb ++;};return nil ;};func (_bfef *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _fcbf ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059"; if _fcfg :=_bfef .validateIntSlice ();_fcfg !=nil {return nil ,_c .Wrap (_fcfg ,_fcbf ,"");};if _bfef .IntSlice .Size ()==0{return nil ,_c .Error (_fcbf ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064"); };_bfef .SortByY ();var (_fbabg []*ClassedPoints ;_ecfe int ;);_ddacd :=-1;var _ceae *ClassedPoints ;for _gfeedd :=0;_gfeedd < len (_bfef .IntSlice );_gfeedd ++{_ecfe =int (_bfef .YAtIndex (_gfeedd ));if _ecfe !=_ddacd {_ceae =&ClassedPoints {Points :_bfef .Points }; _ddacd =_ecfe ;_fbabg =append (_fbabg ,_ceae );};_ceae .IntSlice =append (_ceae .IntSlice ,_bfef .IntSlice [_gfeedd ]);};for _ ,_cedaf :=range _fbabg {_cedaf .SortByX ();};return _fbabg ,nil ;};func _gfab (_gdgf ,_cfbad *Bitmap ,_aeac ,_caef int )(*Bitmap ,error ){const _ccce ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k"; if _cfbad ==nil {return nil ,_c .Error (_ccce ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _aeac < 1&&_caef < 1{return nil ,_c .Error (_ccce ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031"); };if _aeac ==1&&_caef ==1{return _cfbad .Copy (),nil ;};if _aeac ==1||_caef ==1{var _fbcf error ;_efca :=SelCreateBrick (_caef ,_aeac ,_caef /2,_aeac /2,SelHit );_gdgf ,_fbcf =_facf (_gdgf ,_cfbad ,_efca );if _fbcf !=nil {return nil ,_c .Wrap (_fbcf ,_ccce ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031"); };return _gdgf ,nil ;};_ddbf :=SelCreateBrick (1,_aeac ,0,_aeac /2,SelHit );_geea :=SelCreateBrick (_caef ,1,_caef /2,0,SelHit );_cdcec ,_dfac :=_bbed (nil ,_cfbad ,_ddbf );if _dfac !=nil {return nil ,_c .Wrap (_dfac ,_ccce ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e"); };_gdgf ,_dfac =_bbed (_gdgf ,_cdcec ,_geea );if _dfac !=nil {return nil ,_c .Wrap (_dfac ,_ccce ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_dfac =_eccce (_cdcec ,_gdgf ,_ddbf );if _dfac !=nil {return nil ,_c .Wrap (_dfac ,_ccce ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065"); };_ ,_dfac =_eccce (_gdgf ,_cdcec ,_geea );if _dfac !=nil {return nil ,_c .Wrap (_dfac ,_ccce ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _gdgf ,nil ;};var (_abbb *Bitmap ;_dffgf *Bitmap ;);func (_gdc *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _gdc .addBorderGeneral (left ,right ,top ,bot ,val ); };func (_bgbc *Points )Add (pt *Points )error {const _aecd ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";if _bgbc ==nil {return _c .Error (_aecd ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064"); };if pt ==nil {return _c .Error (_aecd ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");};*_bgbc =append (*_bgbc ,*pt ...);return nil ;};func (_aca *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_dec bool ,_acag error ){const _acd ="\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 =_baag ();};_dbc :=_aca .Width >>3;_eda :=_aca .Width &7;_dag :=byte (0xff< thresh {return true ,nil ;};};return _dec ,nil ;};func (_dedb *Selection )setOrigin (_cgffg ,_fecc int ){_dedb .Cy ,_dedb .Cx =_cgffg ,_fecc };func TstVSymbol (t *_g .T ,scale ...int )*Bitmap {_cbdc ,_befdf :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20}); _ce .NoError (t ,_befdf );return TstGetScaledSymbol (t ,_cbdc ,scale ...);};func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _caf (oldByte ,newByte ,op );};func (_caac *Selection )findMaxTranslations ()(_adefc ,_febad ,_fdgd ,_agcf int ){for _aafc :=0; _aafc < _caac .Height ;_aafc ++{for _cecc :=0;_cecc < _caac .Width ;_cecc ++{if _caac .Data [_aafc ][_cecc ]==SelHit {_adefc =_ccfc (_adefc ,_caac .Cx -_cecc );_febad =_ccfc (_febad ,_caac .Cy -_aafc );_fdgd =_ccfc (_fdgd ,_cecc -_caac .Cx );_agcf =_ccfc (_agcf ,_aafc -_caac .Cy ); };};};return _adefc ,_febad ,_fdgd ,_agcf ;};func (_efc *Bitmap )GetBitOffset (x int )int {return x &0x07};func _gb (_be *Bitmap ,_cdf ,_adf int )(*Bitmap ,error ){const _bge ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065"; if _be ==nil {return nil ,_c .Error (_bge ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cdf <=0||_adf <=0{return nil ,_c .Error (_bge ,"\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 _cdf ==_adf {if _cdf ==1{_cee ,_ff :=_eaaf (nil ,_be );if _ff !=nil {return nil ,_c .Wrap (_ff ,_bge ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _cee ,nil ;};if _cdf ==2||_cdf ==4||_cdf ==8{_abd ,_dcg :=_add (_be ,_cdf ); if _dcg !=nil {return nil ,_c .Wrap (_dcg ,_bge ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _abd ,nil ;};};_faf :=_cdf *_be .Width ;_cgd :=_adf *_be .Height ;_bac :=New (_faf ,_cgd );_afe :=_bac .RowStride ; var (_ffg ,_gaba ,_cge ,_bbd ,_ebf int ;_eed byte ;_efd error ;);for _gaba =0;_gaba < _be .Height ;_gaba ++{_ffg =_adf *_gaba *_afe ;for _cge =0;_cge < _be .Width ;_cge ++{if _ged :=_be .GetPixel (_cge ,_gaba );_ged {_ebf =_cdf *_cge ;for _bbd =0;_bbd < _cdf ; _bbd ++{_bac .setBit (_ffg *8+_ebf +_bbd );};};};for _bbd =1;_bbd < _adf ;_bbd ++{_fbd :=_ffg +_bbd *_afe ;for _abg :=0;_abg < _afe ;_abg ++{if _eed ,_efd =_bac .GetByte (_ffg +_abg );_efd !=nil {return nil ,_c .Wrapf (_efd ,_bge ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_bbd ); };if _efd =_bac .SetByte (_fbd +_abg ,_eed );_efd !=nil {return nil ,_c .Wrap (_efd ,_bge ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _bac ,nil ;};func MakePixelCentroidTab8 ()[]int {return _fadf ()}; func (_faa *Bitmap )String ()string {var _beae ="\u000a";for _ebbf :=0;_ebbf < _faa .Height ;_ebbf ++{var _gedc string ;for _dbbc :=0;_dbbc < _faa .Width ;_dbbc ++{_gbbf :=_faa .GetPixel (_dbbc ,_ebbf );if _gbbf {_gedc +="\u0031";}else {_gedc +="\u0030"; };};_beae +=_gedc +"\u000a";};return _beae ;};func _dbfb (_dcba *Bitmap ,_degg ...MorphProcess )(_bbaa *Bitmap ,_gcf error ){const _ddea ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _dcba ==nil {return nil ,_c .Error (_ddea ,"\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 (_degg )==0{return nil ,_c .Error (_ddea ,"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 _gcf =_ccad (_degg ...); _gcf !=nil {return nil ,_c .Wrap (_gcf ,_ddea ,"");};var _acdb ,_aead ,_gcaf int ;_bbaa =_dcba .Copy ();for _ ,_efcee :=range _degg {switch _efcee .Operation {case MopDilation :_acdb ,_aead =_efcee .getWidthHeight ();_bbaa ,_gcf =DilateBrick (nil ,_bbaa ,_acdb ,_aead ); if _gcf !=nil {return nil ,_c .Wrap (_gcf ,_ddea ,"");};case MopErosion :_acdb ,_aead =_efcee .getWidthHeight ();_bbaa ,_gcf =_edda (nil ,_bbaa ,_acdb ,_aead );if _gcf !=nil {return nil ,_c .Wrap (_gcf ,_ddea ,"");};case MopOpening :_acdb ,_aead =_efcee .getWidthHeight (); _bbaa ,_gcf =_gfab (nil ,_bbaa ,_acdb ,_aead );if _gcf !=nil {return nil ,_c .Wrap (_gcf ,_ddea ,"");};case MopClosing :_acdb ,_aead =_efcee .getWidthHeight ();_bbaa ,_gcf =_gfdec (nil ,_bbaa ,_acdb ,_aead );if _gcf !=nil {return nil ,_c .Wrap (_gcf ,_ddea ,""); };case MopRankBinaryReduction :_bbaa ,_gcf =_ac (_bbaa ,_efcee .Arguments ...);if _gcf !=nil {return nil ,_c .Wrap (_gcf ,_ddea ,"");};case MopReplicativeBinaryExpansion :_bbaa ,_gcf =_edcb (_bbaa ,_efcee .Arguments [0]);if _gcf !=nil {return nil ,_c .Wrap (_gcf ,_ddea ,""); };case MopAddBorder :_gcaf =_efcee .Arguments [0];_bbaa ,_gcf =_bbaa .AddBorder (_gcaf ,0);if _gcf !=nil {return nil ,_c .Wrap (_gcf ,_ddea ,"");};default:return nil ,_c .Error (_ddea ,"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 _gcaf > 0{_bbaa ,_gcf =_bbaa .RemoveBorder (_gcaf );if _gcf !=nil {return nil ,_c .Wrap (_gcf ,_ddea ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _bbaa ,nil ;};func _ecacb (_abfde ,_dffd *Bitmap ,_cggde ,_dbae int )(_cedg error ){const _abfc ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034"; var (_bcfb ,_adgd ,_gdae ,_dbcc int ;_ffgcb ,_faddg ,_adcg ,_cbgb ,_fgbaa ,_bfbc ,_fdeb byte ;);for _bcfb =0;_bcfb < _cggde ;_bcfb ++{_gdae =_bcfb *_abfde .RowStride ;_dbcc =_bcfb *_dffd .RowStride ;for _adgd =0;_adgd < _dbae ;_adgd ++{_ffgcb ,_cedg =_abfde .GetByte (_gdae +_adgd ); if _cedg !=nil {return _c .Wrap (_cedg ,_abfc ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");};_faddg ,_cedg =_dffd .GetByte (_dbcc +_adgd );if _cedg !=nil {return _c .Wrap (_cedg ,_abfc ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074"); };if _bcfb > 0{_adcg ,_cedg =_abfde .GetByte (_gdae -_abfde .RowStride +_adgd );if _cedg !=nil {return _c .Wrap (_cedg ,_abfc ,"\u0069\u0020\u003e \u0030");};_ffgcb |=_adcg ;};if _adgd > 0{_cbgb ,_cedg =_abfde .GetByte (_gdae +_adgd -1);if _cedg !=nil {return _c .Wrap (_cedg ,_abfc ,"\u006a\u0020\u003e \u0030"); };_ffgcb |=_cbgb <<7;};_ffgcb &=_faddg ;if _ffgcb ==0||(^_ffgcb )==0{if _cedg =_abfde .SetByte (_gdae +_adgd ,_ffgcb );_cedg !=nil {return _c .Wrap (_cedg ,_abfc ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030"); };continue ;};for {_fdeb =_ffgcb ;_ffgcb =(_ffgcb |(_ffgcb >>1)|(_ffgcb <<1))&_faddg ;if (_ffgcb ^_fdeb )==0{if _cedg =_abfde .SetByte (_gdae +_adgd ,_ffgcb );_cedg !=nil {return _c .Wrap (_cedg ,_abfc ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065"); };break ;};};};};for _bcfb =_cggde -1;_bcfb >=0;_bcfb --{_gdae =_bcfb *_abfde .RowStride ;_dbcc =_bcfb *_dffd .RowStride ;for _adgd =_dbae -1;_adgd >=0;_adgd --{if _ffgcb ,_cedg =_abfde .GetByte (_gdae +_adgd );_cedg !=nil {return _c .Wrap (_cedg ,_abfc ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074"); };if _faddg ,_cedg =_dffd .GetByte (_dbcc +_adgd );_cedg !=nil {return _c .Wrap (_cedg ,_abfc ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _bcfb < _cggde -1{if _fgbaa ,_cedg =_abfde .GetByte (_gdae +_abfde .RowStride +_adgd ); _cedg !=nil {return _c .Wrap (_cedg ,_abfc ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");};_ffgcb |=_fgbaa ;};if _adgd < _dbae -1{if _bfbc ,_cedg =_abfde .GetByte (_gdae +_adgd +1);_cedg !=nil {return _c .Wrap (_cedg ,_abfc ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031"); };_ffgcb |=_bfbc >>7;};_ffgcb &=_faddg ;if _ffgcb ==0||(^_ffgcb )==0{if _cedg =_abfde .SetByte (_gdae +_adgd ,_ffgcb );_cedg !=nil {return _c .Wrap (_cedg ,_abfc ,"\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 {_fdeb =_ffgcb ;_ffgcb =(_ffgcb |(_ffgcb >>1)|(_ffgcb <<1))&_faddg ;if (_ffgcb ^_fdeb )==0{if _cedg =_abfde .SetByte (_gdae +_adgd ,_ffgcb );_cedg !=nil {return _c .Wrap (_cedg ,_abfc ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e"); };break ;};};};};return nil ;};func (_afce Points )YSorter ()func (_gcdb ,_dgad int )bool {return func (_fgdg ,_dcegg int )bool {return _afce [_fgdg ].Y < _afce [_dcegg ].Y };};func (_bec *Bitmap )nextOnPixelLow (_ecc ,_dcd ,_cdg ,_eedc ,_cfeb int )(_fbg _gg .Point ,_fca bool ,_fccd error ){const _agge ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077"; var (_acccb int ;_bece byte ;);_cdda :=_cfeb *_cdg ;_ceaa :=_cdda +(_eedc /8);if _bece ,_fccd =_bec .GetByte (_ceaa );_fccd !=nil {return _fbg ,false ,_c .Wrap (_fccd ,_agge ,"\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 _bece !=0{_ebefa :=_eedc -(_eedc %8)+7;for _acccb =_eedc ;_acccb <=_ebefa &&_acccb < _ecc ;_acccb ++{if _bec .GetPixel (_acccb ,_cfeb ){_fbg .X =_acccb ;_fbg .Y =_cfeb ;return _fbg ,true ,nil ;};};};_bdff :=(_eedc /8)+1;_acccb =8*_bdff ;var _ffa int ; for _ceaa =_cdda +_bdff ;_acccb < _ecc ;_ceaa ,_acccb =_ceaa +1,_acccb +8{if _bece ,_fccd =_bec .GetByte (_ceaa );_fccd !=nil {return _fbg ,false ,_c .Wrap (_fccd ,_agge ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065"); };if _bece ==0{continue ;};for _ffa =0;_ffa < 8&&_acccb < _ecc ;_ffa ,_acccb =_ffa +1,_acccb +1{if _bec .GetPixel (_acccb ,_cfeb ){_fbg .X =_acccb ;_fbg .Y =_cfeb ;return _fbg ,true ,nil ;};};};for _adef :=_cfeb +1;_adef < _dcd ;_adef ++{_cdda =_adef *_cdg ; for _ceaa ,_acccb =_cdda ,0;_acccb < _ecc ;_ceaa ,_acccb =_ceaa +1,_acccb +8{if _bece ,_fccd =_bec .GetByte (_ceaa );_fccd !=nil {return _fbg ,false ,_c .Wrap (_fccd ,_agge ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073"); };if _bece ==0{continue ;};for _ffa =0;_ffa < 8&&_acccb < _ecc ;_ffa ,_acccb =_ffa +1,_acccb +1{if _bec .GetPixel (_acccb ,_adef ){_fbg .X =_acccb ;_fbg .Y =_adef ;return _fbg ,true ,nil ;};};};};return _fbg ,false ,nil ;};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _dbfb (src ,sequence ...); };func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_fdga :=_decb (h ,w ,"");_fdga .setOrigin (cy ,cx );var _ggcf ,_eag int ;for _ggcf =0;_ggcf < h ;_ggcf ++{for _eag =0;_eag < w ;_eag ++{_fdga .Data [_ggcf ][_eag ]=tp ;};};return _fdga ; };func _adbb (_db *Bitmap ,_da *Bitmap ,_cg int )(_baad error ){const _gab ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _cg {case 2:_baad =_dd (_db ,_da );case 4:_baad =_ae (_db ,_da ); case 8:_baad =_cde (_db ,_da );default:return _c .Error (_gab ,"\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 _baad !=nil {_baad =_c .Wrap (_baad ,_gab ,"");};return _baad ;};func _edcb (_cdff *Bitmap ,_efdab int )(*Bitmap ,error ){const _cggef ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";if _cdff ==nil {return nil ,_c .Error (_cggef ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064"); };if _efdab <=0{return nil ,_c .Error (_cggef ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");};if _efdab ==1{_cggd ,_gfbf :=_eaaf (nil ,_cdff );if _gfbf !=nil {return nil ,_c .Wrap (_gfbf ,_cggef ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031"); };return _cggd ,nil ;};_gbaa ,_fgfb :=_gb (_cdff ,_efdab ,_efdab );if _fgfb !=nil {return nil ,_c .Wrap (_fgfb ,_cggef ,"");};return _gbaa ,nil ;};func (_bgc *Bitmap )addPadBits ()(_adeg error ){const _dggc ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073"; _ffe :=_bgc .Width %8;if _ffe ==0{return nil ;};_aaga :=_bgc .Width /8;_bcba :=_a .NewReader (_bgc .Data );_deef :=make ([]byte ,_bgc .Height *_bgc .RowStride );_eea :=_a .NewWriterMSB (_deef );_dgeb :=make ([]byte ,_aaga );var (_deg int ;_afcb uint64 ; );for _deg =0;_deg < _bgc .Height ;_deg ++{if _ ,_adeg =_bcba .Read (_dgeb );_adeg !=nil {return _c .Wrap (_adeg ,_dggc ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_adeg =_eea .Write (_dgeb );_adeg !=nil {return _c .Wrap (_adeg ,_dggc ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073"); };if _afcb ,_adeg =_bcba .ReadBits (byte (_ffe ));_adeg !=nil {return _c .Wrap (_adeg ,_dggc ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _adeg =_eea .WriteByte (byte (_afcb )<>3)};const (_dffgc shift =iota ;_bbecb ;);func (_aabb *Bitmap )Equals (s *Bitmap )bool {if len (_aabb .Data )!=len (s .Data )||_aabb .Width !=s .Width ||_aabb .Height !=s .Height {return false ; };for _bbee :=0;_bbee < _aabb .Height ;_bbee ++{_afab :=_bbee *_aabb .RowStride ;for _bgfc :=0;_bgfc < _aabb .RowStride ;_bgfc ++{if _aabb .Data [_afab +_bgfc ]!=s .Data [_afab +_bgfc ]{return false ;};};};return true ;};func (_dcdb *Bitmaps )String ()string {_cdca :=_b .Builder {}; for _ ,_cafb :=range _dcdb .Values {_cdca .WriteString (_cafb .String ());_cdca .WriteRune ('\n');};return _cdca .String ();};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _fceg ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074"; _gfeed ,_ddeb :=p1 .Width ,p1 .Height ;_cfcg ,_gfac :=p3 .Width ,p3 .Height ;if _bc .Abs (_gfeed -_cfcg )> maxDiffW {return false ,nil ;};if _bc .Abs (_ddeb -_gfac )> maxDiffH {return false ,nil ;};_ebbgd :=int (delX +_bc .Sign (delX )*0.5);_adfd :=int (delY +_bc .Sign (delY )*0.5); var _bcdf error ;_dcbfc :=p1 .CreateTemplate ();if _bcdf =_dcbfc .RasterOperation (0,0,_gfeed ,_ddeb ,PixSrc ,p1 ,0,0);_bcdf !=nil {return false ,_c .Wrap (_bcdf ,_fceg ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _bcdf =_dcbfc .RasterOperation (_ebbgd ,_adfd ,_gfeed ,_ddeb ,PixNotSrcAndDst ,p4 ,0,0); _bcdf !=nil {return false ,_c .Wrap (_bcdf ,_fceg ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _dcbfc .Zero (){return false ,nil ;};if _bcdf =_dcbfc .RasterOperation (_ebbgd ,_adfd ,_cfcg ,_gfac ,PixSrc ,p3 ,0,0);_bcdf !=nil {return false ,_c .Wrap (_bcdf ,_fceg ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074"); };if _bcdf =_dcbfc .RasterOperation (0,0,_cfcg ,_gfac ,PixNotSrcAndDst ,p2 ,0,0);_bcdf !=nil {return false ,_c .Wrap (_bcdf ,_fceg ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _dcbfc .Zero (),nil ;};func _eccce (_acbb *Bitmap ,_fgcfc *Bitmap ,_dfee *Selection )(*Bitmap ,error ){var (_ccfag *Bitmap ; _fece error ;);_acbb ,_fece =_ggdag (_acbb ,_fgcfc ,_dfee ,&_ccfag );if _fece !=nil {return nil ,_fece ;};if _fece =_acbb .clearAll ();_fece !=nil {return nil ,_fece ;};var _eeee SelectionValue ;for _aeca :=0;_aeca < _dfee .Height ;_aeca ++{for _edfb :=0; _edfb < _dfee .Width ;_edfb ++{_eeee =_dfee .Data [_aeca ][_edfb ];if _eeee ==SelHit {if _fece =_acbb .RasterOperation (_edfb -_dfee .Cx ,_aeca -_dfee .Cy ,_fgcfc .Width ,_fgcfc .Height ,PixSrcOrDst ,_ccfag ,0,0);_fece !=nil {return nil ,_fece ;};};};}; return _acbb ,nil ;};func (_cbeb *Bitmap )connComponentsBB (_fgeda int )(_ddgab *Boxes ,_gcdg error ){const _eeae ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";if _fgeda !=4&&_fgeda !=8{return nil ,_c .Error (_eeae ,"\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 _cbeb .Zero (){return &Boxes {},nil ;};_cbeb .setPadBits (0);_adefa ,_gcdg :=_eaaf (nil ,_cbeb );if _gcdg !=nil {return nil ,_c .Wrap (_gcdg ,_eeae ,"\u0062\u006d\u0031");};_efdg :=&_bc .Stack {};_efdg .Aux =&_bc .Stack {};_ddgab =&Boxes {};var (_egge ,_geaf int ; _defe _gg .Point ;_geg bool ;_edcf *_gg .Rectangle ;);for {if _defe ,_geg ,_gcdg =_adefa .nextOnPixel (_geaf ,_egge );_gcdg !=nil {return nil ,_c .Wrap (_gcdg ,_eeae ,"");};if !_geg {break ;};if _edcf ,_gcdg =_bgga (_adefa ,_efdg ,_defe .X ,_defe .Y ,_fgeda ); _gcdg !=nil {return nil ,_c .Wrap (_gcdg ,_eeae ,"");};if _gcdg =_ddgab .Add (_edcf );_gcdg !=nil {return nil ,_c .Wrap (_gcdg ,_eeae ,"");};_geaf =_defe .X ;_egge =_defe .Y ;};return _ddgab ,nil ;};func _fecf (_aed *Bitmap ,_edgb ,_fdba ,_egdc ,_dcefe int ,_bffc RasterOperator ,_gbef *Bitmap ,_bbea ,_aaf int )error {var (_fegbd bool ; _daeb bool ;_cbcd int ;_bfdea int ;_edfbd int ;_bdcd bool ;_fbaf byte ;_ecac int ;_egdcb int ;_ggf int ;_bded ,_cabce int ;);_dfaa :=8-(_edgb &7);_cbca :=_gda [_dfaa ];_ebff :=_aed .RowStride *_fdba +(_edgb >>3);_aeae :=_gbef .RowStride *_aaf +(_bbea >>3); if _egdc < _dfaa {_fegbd =true ;_cbca &=_ffcfc [8-_dfaa +_egdc ];};if !_fegbd {_cbcd =(_egdc -_dfaa )>>3;if _cbcd > 0{_daeb =true ;_bfdea =_ebff +1;_edfbd =_aeae +1;};};_ecac =(_edgb +_egdc )&7;if !(_fegbd ||_ecac ==0){_bdcd =true ;_fbaf =_ffcfc [_ecac ]; _egdcb =_ebff +1+_cbcd ;_ggf =_aeae +1+_cbcd ;};switch _bffc {case PixSrc :for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_ebff ]=_bebd (_aed .Data [_ebff ],_gbef .Data [_aeae ],_cbca );_ebff +=_aed .RowStride ;_aeae +=_gbef .RowStride ;};if _daeb {for _bded =0; _bded < _dcefe ;_bded ++{for _cabce =0;_cabce < _cbcd ;_cabce ++{_aed .Data [_bfdea +_cabce ]=_gbef .Data [_edfbd +_cabce ];};_bfdea +=_aed .RowStride ;_edfbd +=_gbef .RowStride ;};};if _bdcd {for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_egdcb ]=_bebd (_aed .Data [_egdcb ],_gbef .Data [_ggf ],_fbaf ); _egdcb +=_aed .RowStride ;_ggf +=_gbef .RowStride ;};};case PixNotSrc :for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_ebff ]=_bebd (_aed .Data [_ebff ],^_gbef .Data [_aeae ],_cbca );_ebff +=_aed .RowStride ;_aeae +=_gbef .RowStride ;};if _daeb {for _bded =0; _bded < _dcefe ;_bded ++{for _cabce =0;_cabce < _cbcd ;_cabce ++{_aed .Data [_bfdea +_cabce ]=^_gbef .Data [_edfbd +_cabce ];};_bfdea +=_aed .RowStride ;_edfbd +=_gbef .RowStride ;};};if _bdcd {for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_egdcb ]=_bebd (_aed .Data [_egdcb ],^_gbef .Data [_ggf ],_fbaf ); _egdcb +=_aed .RowStride ;_ggf +=_gbef .RowStride ;};};case PixSrcOrDst :for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_ebff ]=_bebd (_aed .Data [_ebff ],_gbef .Data [_aeae ]|_aed .Data [_ebff ],_cbca );_ebff +=_aed .RowStride ;_aeae +=_gbef .RowStride ; };if _daeb {for _bded =0;_bded < _dcefe ;_bded ++{for _cabce =0;_cabce < _cbcd ;_cabce ++{_aed .Data [_bfdea +_cabce ]|=_gbef .Data [_edfbd +_cabce ];};_bfdea +=_aed .RowStride ;_edfbd +=_gbef .RowStride ;};};if _bdcd {for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_egdcb ]=_bebd (_aed .Data [_egdcb ],_gbef .Data [_ggf ]|_aed .Data [_egdcb ],_fbaf ); _egdcb +=_aed .RowStride ;_ggf +=_gbef .RowStride ;};};case PixSrcAndDst :for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_ebff ]=_bebd (_aed .Data [_ebff ],_gbef .Data [_aeae ]&_aed .Data [_ebff ],_cbca );_ebff +=_aed .RowStride ;_aeae +=_gbef .RowStride ; };if _daeb {for _bded =0;_bded < _dcefe ;_bded ++{for _cabce =0;_cabce < _cbcd ;_cabce ++{_aed .Data [_bfdea +_cabce ]&=_gbef .Data [_edfbd +_cabce ];};_bfdea +=_aed .RowStride ;_edfbd +=_gbef .RowStride ;};};if _bdcd {for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_egdcb ]=_bebd (_aed .Data [_egdcb ],_gbef .Data [_ggf ]&_aed .Data [_egdcb ],_fbaf ); _egdcb +=_aed .RowStride ;_ggf +=_gbef .RowStride ;};};case PixSrcXorDst :for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_ebff ]=_bebd (_aed .Data [_ebff ],_gbef .Data [_aeae ]^_aed .Data [_ebff ],_cbca );_ebff +=_aed .RowStride ;_aeae +=_gbef .RowStride ; };if _daeb {for _bded =0;_bded < _dcefe ;_bded ++{for _cabce =0;_cabce < _cbcd ;_cabce ++{_aed .Data [_bfdea +_cabce ]^=_gbef .Data [_edfbd +_cabce ];};_bfdea +=_aed .RowStride ;_edfbd +=_gbef .RowStride ;};};if _bdcd {for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_egdcb ]=_bebd (_aed .Data [_egdcb ],_gbef .Data [_ggf ]^_aed .Data [_egdcb ],_fbaf ); _egdcb +=_aed .RowStride ;_ggf +=_gbef .RowStride ;};};case PixNotSrcOrDst :for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_ebff ]=_bebd (_aed .Data [_ebff ],^(_gbef .Data [_aeae ])|_aed .Data [_ebff ],_cbca );_ebff +=_aed .RowStride ;_aeae +=_gbef .RowStride ; };if _daeb {for _bded =0;_bded < _dcefe ;_bded ++{for _cabce =0;_cabce < _cbcd ;_cabce ++{_aed .Data [_bfdea +_cabce ]|=^(_gbef .Data [_edfbd +_cabce ]);};_bfdea +=_aed .RowStride ;_edfbd +=_gbef .RowStride ;};};if _bdcd {for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_egdcb ]=_bebd (_aed .Data [_egdcb ],^(_gbef .Data [_ggf ])|_aed .Data [_egdcb ],_fbaf ); _egdcb +=_aed .RowStride ;_ggf +=_gbef .RowStride ;};};case PixNotSrcAndDst :for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_ebff ]=_bebd (_aed .Data [_ebff ],^(_gbef .Data [_aeae ])&_aed .Data [_ebff ],_cbca );_ebff +=_aed .RowStride ;_aeae +=_gbef .RowStride ; };if _daeb {for _bded =0;_bded < _dcefe ;_bded ++{for _cabce =0;_cabce < _cbcd ;_cabce ++{_aed .Data [_bfdea +_cabce ]&=^_gbef .Data [_edfbd +_cabce ];};_bfdea +=_aed .RowStride ;_edfbd +=_gbef .RowStride ;};};if _bdcd {for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_egdcb ]=_bebd (_aed .Data [_egdcb ],^(_gbef .Data [_ggf ])&_aed .Data [_egdcb ],_fbaf ); _egdcb +=_aed .RowStride ;_ggf +=_gbef .RowStride ;};};case PixSrcOrNotDst :for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_ebff ]=_bebd (_aed .Data [_ebff ],_gbef .Data [_aeae ]|^(_aed .Data [_ebff ]),_cbca );_ebff +=_aed .RowStride ;_aeae +=_gbef .RowStride ; };if _daeb {for _bded =0;_bded < _dcefe ;_bded ++{for _cabce =0;_cabce < _cbcd ;_cabce ++{_aed .Data [_bfdea +_cabce ]=_gbef .Data [_edfbd +_cabce ]|^(_aed .Data [_bfdea +_cabce ]);};_bfdea +=_aed .RowStride ;_edfbd +=_gbef .RowStride ;};};if _bdcd {for _bded =0; _bded < _dcefe ;_bded ++{_aed .Data [_egdcb ]=_bebd (_aed .Data [_egdcb ],_gbef .Data [_ggf ]|^(_aed .Data [_egdcb ]),_fbaf );_egdcb +=_aed .RowStride ;_ggf +=_gbef .RowStride ;};};case PixSrcAndNotDst :for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_ebff ]=_bebd (_aed .Data [_ebff ],_gbef .Data [_aeae ]&^(_aed .Data [_ebff ]),_cbca ); _ebff +=_aed .RowStride ;_aeae +=_gbef .RowStride ;};if _daeb {for _bded =0;_bded < _dcefe ;_bded ++{for _cabce =0;_cabce < _cbcd ;_cabce ++{_aed .Data [_bfdea +_cabce ]=_gbef .Data [_edfbd +_cabce ]&^(_aed .Data [_bfdea +_cabce ]);};_bfdea +=_aed .RowStride ; _edfbd +=_gbef .RowStride ;};};if _bdcd {for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_egdcb ]=_bebd (_aed .Data [_egdcb ],_gbef .Data [_ggf ]&^(_aed .Data [_egdcb ]),_fbaf );_egdcb +=_aed .RowStride ;_ggf +=_gbef .RowStride ;};};case PixNotPixSrcOrDst :for _bded =0; _bded < _dcefe ;_bded ++{_aed .Data [_ebff ]=_bebd (_aed .Data [_ebff ],^(_gbef .Data [_aeae ]|_aed .Data [_ebff ]),_cbca );_ebff +=_aed .RowStride ;_aeae +=_gbef .RowStride ;};if _daeb {for _bded =0;_bded < _dcefe ;_bded ++{for _cabce =0;_cabce < _cbcd ; _cabce ++{_aed .Data [_bfdea +_cabce ]=^(_gbef .Data [_edfbd +_cabce ]|_aed .Data [_bfdea +_cabce ]);};_bfdea +=_aed .RowStride ;_edfbd +=_gbef .RowStride ;};};if _bdcd {for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_egdcb ]=_bebd (_aed .Data [_egdcb ],^(_gbef .Data [_ggf ]|_aed .Data [_egdcb ]),_fbaf ); _egdcb +=_aed .RowStride ;_ggf +=_gbef .RowStride ;};};case PixNotPixSrcAndDst :for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_ebff ]=_bebd (_aed .Data [_ebff ],^(_gbef .Data [_aeae ]&_aed .Data [_ebff ]),_cbca );_ebff +=_aed .RowStride ;_aeae +=_gbef .RowStride ; };if _daeb {for _bded =0;_bded < _dcefe ;_bded ++{for _cabce =0;_cabce < _cbcd ;_cabce ++{_aed .Data [_bfdea +_cabce ]=^(_gbef .Data [_edfbd +_cabce ]&_aed .Data [_bfdea +_cabce ]);};_bfdea +=_aed .RowStride ;_edfbd +=_gbef .RowStride ;};};if _bdcd {for _bded =0; _bded < _dcefe ;_bded ++{_aed .Data [_egdcb ]=_bebd (_aed .Data [_egdcb ],^(_gbef .Data [_ggf ]&_aed .Data [_egdcb ]),_fbaf );_egdcb +=_aed .RowStride ;_ggf +=_gbef .RowStride ;};};case PixNotPixSrcXorDst :for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_ebff ]=_bebd (_aed .Data [_ebff ],^(_gbef .Data [_aeae ]^_aed .Data [_ebff ]),_cbca ); _ebff +=_aed .RowStride ;_aeae +=_gbef .RowStride ;};if _daeb {for _bded =0;_bded < _dcefe ;_bded ++{for _cabce =0;_cabce < _cbcd ;_cabce ++{_aed .Data [_bfdea +_cabce ]=^(_gbef .Data [_edfbd +_cabce ]^_aed .Data [_bfdea +_cabce ]);};_bfdea +=_aed .RowStride ; _edfbd +=_gbef .RowStride ;};};if _bdcd {for _bded =0;_bded < _dcefe ;_bded ++{_aed .Data [_egdcb ]=_bebd (_aed .Data [_egdcb ],^(_gbef .Data [_ggf ]^_aed .Data [_egdcb ]),_fbaf );_egdcb +=_aed .RowStride ;_ggf +=_gbef .RowStride ;};};default:_ag .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",_bffc ); return _c .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0056\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004c\u006f\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072"); };return nil ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;);func _bdgc (_gcab ,_cgef ,_geaa *Bitmap )(*Bitmap ,error ){const _ebeg ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074"; if _cgef ==nil {return nil ,_c .Error (_ebeg ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _geaa ==nil {return nil ,_c .Error (_ebeg ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _gcb error ;switch {case _gcab ==_cgef :if _gcb =_gcab .RasterOperation (0,0,_cgef .Width ,_cgef .Height ,PixNotSrcAndDst ,_geaa ,0,0); _gcb !=nil {return nil ,_c .Wrap (_gcb ,_ebeg ,"\u0064 \u003d\u003d\u0020\u0073\u0031");};case _gcab ==_geaa :if _gcb =_gcab .RasterOperation (0,0,_cgef .Width ,_cgef .Height ,PixNotSrcAndDst ,_cgef ,0,0);_gcb !=nil {return nil ,_c .Wrap (_gcb ,_ebeg ,"\u0064 \u003d\u003d\u0020\u0073\u0032"); };default:_gcab ,_gcb =_eaaf (_gcab ,_cgef );if _gcb !=nil {return nil ,_c .Wrap (_gcb ,_ebeg ,"");};if _gcb =_gcab .RasterOperation (0,0,_cgef .Width ,_cgef .Height ,PixNotSrcAndDst ,_geaa ,0,0);_gcb !=nil {return nil ,_c .Wrap (_gcb ,_ebeg ,"\u0064e\u0066\u0061\u0075\u006c\u0074"); };};return _gcab ,nil ;};func (_aged *Bitmaps )selectByIndicator (_abdd *_bc .NumSlice )(_bae *Bitmaps ,_gggb error ){const _adga ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr"; if _aged ==nil {return nil ,_c .Error (_adga ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _abdd ==nil {return nil ,_c .Error (_adga ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064"); };if len (_aged .Values )==0{return _aged ,nil ;};if len (*_abdd )!=len (_aged .Values ){return nil ,_c .Errorf (_adga ,"\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 (*_abdd ),len (_aged .Values )); };var _gebd ,_cafc ,_edga int ;for _cafc =0;_cafc < len (*_abdd );_cafc ++{if _gebd ,_gggb =_abdd .GetInt (_cafc );_gggb !=nil {return nil ,_c .Wrap (_gggb ,_adga ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _gebd ==1{_edga ++; };};if _edga ==len (_aged .Values ){return _aged ,nil ;};_bae =&Bitmaps {};_egfd :=len (_aged .Values )==len (_aged .Boxes );for _cafc =0;_cafc < len (*_abdd );_cafc ++{if _gebd =int ((*_abdd )[_cafc ]);_gebd ==0{continue ;};_bae .Values =append (_bae .Values ,_aged .Values [_cafc ]); if _egfd {_bae .Boxes =append (_bae .Boxes ,_aged .Boxes [_cafc ]);};};return _bae ,nil ;};func _baag ()[]int {_efege :=make ([]int ,256);for _cgff :=0;_cgff <=0xff;_cgff ++{_egdb :=byte (_cgff );_efege [_egdb ]=int (_egdb &0x1)+(int (_egdb >>1)&0x1)+(int (_egdb >>2)&0x1)+(int (_egdb >>3)&0x1)+(int (_egdb >>4)&0x1)+(int (_egdb >>5)&0x1)+(int (_egdb >>6)&0x1)+(int (_egdb >>7)&0x1); };return _efege ;};func _gfdec (_ecaf ,_cfee *Bitmap ,_fecg ,_eafd int )(*Bitmap ,error ){const _ecfc ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";if _cfee ==nil {return nil ,_c .Error (_ecfc ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c"); };if _fecg < 1||_eafd < 1{return nil ,_c .Error (_ecfc ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _fecg ==1&&_eafd ==1{return _eaaf (_ecaf ,_cfee );};if MorphBC ==SymmetricMorphBC {_eeaee ,_cag :=_gaad (_ecaf ,_cfee ,_fecg ,_eafd ); if _cag !=nil {return nil ,_c .Wrap (_cag ,_ecfc ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");};return _eeaee ,nil ;};_ecdc :=_ccfc (_fecg /2,_eafd /2);_gfcg :=8*((_ecdc +7)/8);_gdda ,_aecf :=_cfee .AddBorder (_gfcg ,0); if _aecf !=nil {return nil ,_c .Wrapf (_aecf ,_ecfc ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_gfcg );};var _ecabb ,_cefb *Bitmap ;if _fecg ==1||_eafd ==1{_dbca :=SelCreateBrick (_eafd ,_fecg ,_eafd /2,_fecg /2,SelHit ); _ecabb ,_aecf =_egaad (nil ,_gdda ,_dbca );if _aecf !=nil {return nil ,_c .Wrap (_aecf ,_ecfc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};}else {_eeff :=SelCreateBrick (1,_fecg ,0,_fecg /2,SelHit ); _ffeg ,_ceafd :=_eccce (nil ,_gdda ,_eeff );if _ceafd !=nil {return nil ,_c .Wrap (_ceafd ,_ecfc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");};_defg :=SelCreateBrick (_eafd ,1,_eafd /2,0,SelHit ); _ecabb ,_ceafd =_eccce (nil ,_ffeg ,_defg );if _ceafd !=nil {return nil ,_c .Wrap (_ceafd ,_ecfc ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_ceafd =_bbed (_ffeg ,_ecabb ,_eeff ); _ceafd !=nil {return nil ,_c .Wrap (_ceafd ,_ecfc ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_ceafd =_bbed (_ecabb ,_ffeg ,_defg );_ceafd !=nil {return nil ,_c .Wrap (_ceafd ,_ecfc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065"); };};if _cefb ,_aecf =_ecabb .RemoveBorder (_gfcg );_aecf !=nil {return nil ,_c .Wrap (_aecf ,_ecfc ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _ecaf ==nil {return _cefb ,nil ;};if _ ,_aecf =_eaaf (_ecaf ,_cefb );_aecf !=nil {return nil ,_aecf ;};return _ecaf ,nil ; };func (_agc *Bitmap )countPixels ()int {var (_ecg int ;_bfc uint8 ;_gfe byte ;_bdd int ;);_fcf :=_agc .RowStride ;_fac :=uint (_agc .Width &0x07);if _fac !=0{_bfc =uint8 ((0xff<<(8-_fac ))&0xff);_fcf --;};for _edee :=0;_edee < _agc .Height ;_edee ++{for _bdd =0; _bdd < _fcf ;_bdd ++{_gfe =_agc .Data [_edee *_agc .RowStride +_bdd ];_ecg +=int (_cgdc [_gfe ]);};if _fac !=0{_ecg +=int (_cgdc [_agc .Data [_edee *_agc .RowStride +_bdd ]&_bfc ]);};};return _ecg ;};func _egaad (_adbg ,_cgb *Bitmap ,_dfge *Selection )(*Bitmap ,error ){const _ddab ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070"; var _eee error ;if _adbg ,_eee =_gcgf (_adbg ,_cgb ,_dfge );_eee !=nil {return nil ,_eee ;};_eeca ,_eee :=_eccce (nil ,_cgb ,_dfge );if _eee !=nil {return nil ,_c .Wrap (_eee ,_ddab ,"");};if _ ,_eee =_bbed (_adbg ,_eeca ,_dfge );_eee !=nil {return nil ,_c .Wrap (_eee ,_ddab ,""); };return _adbg ,nil ;};type SizeSelection int ;func (_gacc *Bitmap )Equivalent (s *Bitmap )bool {return _gacc .equivalent (s )};func _dee (_cdbg ,_ffc int )*Bitmap {return &Bitmap {Width :_cdbg ,Height :_ffc ,RowStride :(_cdbg +7)>>3};};func (_feb *Bitmap )equivalent (_fae *Bitmap )bool {if _feb ==_fae {return true ; };if !_feb .SizesEqual (_fae ){return false ;};_dbbe :=_bgb (_feb ,_fae ,CmbOpXor );_bee :=_feb .countPixels ();_ccf :=int (0.25*float32 (_bee ));if _dbbe .thresholdPixelSum (_ccf ){return false ;};var (_dbcb [9][9]int ;_dfgb [18][9]int ;_bcg [9][18]int ; _caa int ;_gbfd int ;);_fffd :=9;_ddg :=_feb .Height /_fffd ;_fcec :=_feb .Width /_fffd ;_dged ,_accc :=_ddg /2,_fcec /2;if _ddg < _fcec {_dged =_fcec /2;_accc =_ddg /2;};_bcfc :=float64 (_dged )*float64 (_accc )*_eb .Pi ;_bbbb :=int (float64 (_ddg *_fcec /2)*0.9); _cdac :=int (float64 (_fcec *_ddg /2)*0.9);for _efdb :=0;_efdb < _fffd ;_efdb ++{_cgge :=_fcec *_efdb +_caa ;var _ebef int ;if _efdb ==_fffd -1{_caa =0;_ebef =_feb .Width ;}else {_ebef =_cgge +_fcec ;if ((_feb .Width -_caa )%_fffd )> 0{_caa ++;_ebef ++; };};for _gdg :=0;_gdg < _fffd ;_gdg ++{_fcc :=_ddg *_gdg +_gbfd ;var _cce int ;if _gdg ==_fffd -1{_gbfd =0;_cce =_feb .Height ;}else {_cce =_fcc +_ddg ;if (_feb .Height -_gbfd )%_fffd > 0{_gbfd ++;_cce ++;};};var _fccg ,_aaeb ,_dfe ,_fcfc int ;_eede :=(_cgge +_ebef )/2; _efcb :=(_fcc +_cce )/2;for _cac :=_cgge ;_cac < _ebef ;_cac ++{for _dbd :=_fcc ;_dbd < _cce ;_dbd ++{if _dbbe .GetPixel (_cac ,_dbd ){if _cac < _eede {_fccg ++;}else {_aaeb ++;};if _dbd < _efcb {_fcfc ++;}else {_dfe ++;};};};};_dbcb [_efdb ][_gdg ]=_fccg +_aaeb ; _dfgb [_efdb *2][_gdg ]=_fccg ;_dfgb [_efdb *2+1][_gdg ]=_aaeb ;_bcg [_efdb ][_gdg *2]=_fcfc ;_bcg [_efdb ][_gdg *2+1]=_dfe ;};};for _bdg :=0;_bdg < _fffd *2-1;_bdg ++{for _egef :=0;_egef < (_fffd -1);_egef ++{var _ecb int ;for _fdg :=0;_fdg < 2;_fdg ++{for _acacg :=0; _acacg < 2;_acacg ++{_ecb +=_dfgb [_bdg +_fdg ][_egef +_acacg ];};};if _ecb > _cdac {return false ;};};};for _acee :=0;_acee < (_fffd -1);_acee ++{for _fba :=0;_fba < ((_fffd *2)-1);_fba ++{var _eeg int ;for _fga :=0;_fga < 2;_fga ++{for _edef :=0;_edef < 2; _edef ++{_eeg +=_bcg [_acee +_fga ][_fba +_edef ];};};if _eeg > _bbbb {return false ;};};};for _baf :=0;_baf < (_fffd -2);_baf ++{for _dbcf :=0;_dbcf < (_fffd -2);_dbcf ++{var _agf ,_bbbf int ;for _fgb :=0;_fgb < 3;_fgb ++{for _cegb :=0;_cegb < 3;_cegb ++{if _fgb ==_cegb {_agf +=_dbcb [_baf +_fgb ][_dbcf +_cegb ]; };if (2-_fgb )==_cegb {_bbbf +=_dbcb [_baf +_fgb ][_dbcf +_cegb ];};};};if _agf > _cdac ||_bbbf > _cdac {return false ;};};};for _dfbe :=0;_dfbe < (_fffd -1);_dfbe ++{for _bbeec :=0;_bbeec < (_fffd -1);_bbeec ++{var _gaca int ;for _afeab :=0;_afeab < 2; _afeab ++{for _aaaa :=0;_aaaa < 2;_aaaa ++{_gaca +=_dbcb [_dfbe +_afeab ][_bbeec +_aaaa ];};};if float64 (_gaca )> _bcfc {return false ;};};};return true ;};func (_gbbg *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _gbbg .Copy (),nil ; };_abag ,_cgg :=_gbbg .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _cgg !=nil {return nil ,_c .Wrap (_cgg ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _abag ,nil ;};func (_aaca *Bitmaps )SortByWidth (){_faddf :=(*byWidth )(_aaca ); _e .Sort (_faddf )};func _abfa (_gebc *Bitmap ,_gdcb ,_fbgc ,_gace ,_fadb int ,_aggb RasterOperator ){if _gdcb < 0{_gace +=_gdcb ;_gdcb =0;};_affc :=_gdcb +_gace -_gebc .Width ;if _affc > 0{_gace -=_affc ;};if _fbgc < 0{_fadb +=_fbgc ;_fbgc =0;};_ggcc :=_fbgc +_fadb -_gebc .Height ; if _ggcc > 0{_fadb -=_ggcc ;};if _gace <=0||_fadb <=0{return ;};if (_gdcb &7)==0{_daga (_gebc ,_gdcb ,_fbgc ,_gace ,_fadb ,_aggb );}else {_fdeg (_gebc ,_gdcb ,_fbgc ,_gace ,_fadb ,_aggb );};};func (_afea *Bitmap )clipRectangle (_daea ,_bce *_gg .Rectangle )(_ffeb *Bitmap ,_efce error ){const _fdag ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065"; if _daea ==nil {return nil ,_c .Error (_fdag ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_gfde ,_acb :=_afea .Width ,_afea .Height ;_bfe ,_efce :=ClipBoxToRectangle (_daea ,_gfde ,_acb );if _efce !=nil {_ag .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",_efce ); return nil ,nil ;};_bcf ,_cgf :=_bfe .Min .X ,_bfe .Min .Y ;_bfd ,_egd :=_bfe .Max .X -_bfe .Min .X ,_bfe .Max .Y -_bfe .Min .Y ;_ffeb =New (_bfd ,_egd );_ffeb .Text =_afea .Text ;if _efce =_ffeb .RasterOperation (0,0,_bfd ,_egd ,PixSrc ,_afea ,_bcf ,_cgf ); _efce !=nil {return nil ,_c .Wrap (_efce ,_fdag ,"");};if _bce !=nil {*_bce =*_bfe ;};return _ffeb ,nil ;};func _ead (_ded ,_acc *Bitmap ,_ccdf int ,_gc []byte ,_def int )(_adfa error ){const _ccdb ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033"; var (_gdf ,_fff ,_bdfe ,_ade ,_fgc ,_bea ,_afa ,_beab int ;_aec ,_dfd ,_fbe ,_cdb uint32 ;_fbb ,_ddd byte ;_fe uint16 ;);_cbf :=make ([]byte ,4);_eaf :=make ([]byte ,4);for _bdfe =0;_bdfe < _ded .Height -1;_bdfe ,_ade =_bdfe +2,_ade +1{_gdf =_bdfe *_ded .RowStride ; _fff =_ade *_acc .RowStride ;for _fgc ,_bea =0,0;_fgc < _def ;_fgc ,_bea =_fgc +4,_bea +1{for _afa =0;_afa < 4;_afa ++{_beab =_gdf +_fgc +_afa ;if _beab <=len (_ded .Data )-1&&_beab < _gdf +_ded .RowStride {_cbf [_afa ]=_ded .Data [_beab ];}else {_cbf [_afa ]=0x00; };_beab =_gdf +_ded .RowStride +_fgc +_afa ;if _beab <=len (_ded .Data )-1&&_beab < _gdf +(2*_ded .RowStride ){_eaf [_afa ]=_ded .Data [_beab ];}else {_eaf [_afa ]=0x00;};};_aec =_f .BigEndian .Uint32 (_cbf );_dfd =_f .BigEndian .Uint32 (_eaf );_fbe =_aec &_dfd ; _fbe |=_fbe <<1;_cdb =_aec |_dfd ;_cdb &=_cdb <<1;_dfd =_fbe &_cdb ;_dfd &=0xaaaaaaaa;_aec =_dfd |(_dfd <<7);_fbb =byte (_aec >>24);_ddd =byte ((_aec >>8)&0xff);_beab =_fff +_bea ;if _beab +1==len (_acc .Data )-1||_beab +1>=_fff +_acc .RowStride {if _adfa =_acc .SetByte (_beab ,_gc [_fbb ]); _adfa !=nil {return _c .Wrapf (_adfa ,_ccdb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_beab );};}else {_fe =(uint16 (_gc [_fbb ])<<8)|uint16 (_gc [_ddd ]);if _adfa =_acc .setTwoBytes (_beab ,_fe );_adfa !=nil {return _c .Wrapf (_adfa ,_ccdb ,"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",_beab ); };_bea ++;};};};return nil ;};func NewClassedPoints (points *Points ,classes _bc .IntSlice )(*ClassedPoints ,error ){const _edefg ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";if points ==nil {return nil ,_c .Error (_edefg ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073"); };if classes ==nil {return nil ,_c .Error (_edefg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");};_fdec :=&ClassedPoints {Points :points ,IntSlice :classes };if _bgbd :=_fdec .validateIntSlice ();_bgbd !=nil {return nil ,_c .Wrap (_bgbd ,_edefg ,""); };return _fdec ,nil ;};func (_dcaaa Points )GetIntX (i int )(int ,error ){if i >=len (_dcaaa ){return 0,_c .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0058","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i ); };return int (_dcaaa [i ].X ),nil ;};func (_cba *Bitmaps )HeightSorter ()func (_aeedd ,_bdae int )bool {return func (_abfg ,_effa int )bool {_cggg :=_cba .Values [_abfg ].Height < _cba .Values [_effa ].Height ;_ag .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_cba .Values [_abfg ].Height ,_cba .Values [_effa ].Height ,_cggg ); return _cggg ;};};func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _bfbg (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func _ac (_abdb *Bitmap ,_dae ...int )(_agab *Bitmap ,_aaa error ){const _ege ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065"; if _abdb ==nil {return nil ,_c .Error (_ege ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if len (_dae )==0||len (_dae )> 4{return nil ,_c .Error (_ege ,"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 _dae [0]<=0{_ag .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");_agab ,_aaa =_eaaf (nil ,_abdb );if _aaa !=nil {return nil ,_c .Wrap (_aaa ,_ege ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030"); };return _agab ,nil ;};_dfg :=_fad ();_agab =_abdb ;for _cec ,_bag :=range _dae {if _bag <=0{break ;};_agab ,_aaa =_fbdd (_agab ,_bag ,_dfg );if _aaa !=nil {return nil ,_c .Wrapf (_aaa ,_ege ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_cec ); };};return _agab ,nil ;};func Rect (x ,y ,w ,h int )(*_gg .Rectangle ,error ){const _bbcge ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";if x < 0{w +=x ;x =0;if w <=0{return nil ,_c .Errorf (_bbcge ,"x\u003a\u0027\u0025\u0064\u0027\u0020<\u0020\u0030\u0020\u0061\u006e\u0064\u0020\u0077\u003a \u0027\u0025\u0064'\u0020<\u003d\u0020\u0030",x ,w ); };};if y < 0{h +=y ;y =0;if h <=0{return nil ,_c .Error (_bbcge ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");};};_ddeg :=_gg .Rect (x ,y ,x +w ,y +h );return &_ddeg ,nil ; };func init (){const _feggc ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";_abbb =New (50,40);var _bdede error ;_abbb ,_bdede =_abbb .AddBorder (2,1);if _bdede !=nil {panic (_c .Wrap (_bdede ,_feggc ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070")); };_dffgf ,_bdede =NewWithData (50,22,_cdaf );if _bdede !=nil {panic (_c .Wrap (_bdede ,_feggc ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};};func Extract (roi _gg .Rectangle ,src *Bitmap )(*Bitmap ,error ){_afeb :=New (roi .Dx (),roi .Dy ()); _fgea :=roi .Min .X &0x07;_dgb :=8-_fgea ;_gef :=uint (8-_afeb .Width &0x07);_cbbeb :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_deefg :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );_debf :=_afeb .RowStride ==_deefg +1-_cbbeb ;var _bff int ;for _dbdd :=roi .Min .Y ; _dbdd < roi .Max .Y ;_dbdd ++{_gcdc :=_cbbeb ;_bfdc :=_bff ;switch {case _cbbeb ==_deefg :_fde ,_fcee :=src .GetByte (_gcdc );if _fcee !=nil {return nil ,_fcee ;};_fde <<=uint (_fgea );_fcee =_afeb .SetByte (_bfdc ,_gfba (_gef ,_fde ));if _fcee !=nil {return nil ,_fcee ; };case _fgea ==0:for _eggcf :=_cbbeb ;_eggcf <=_deefg ;_eggcf ++{_eced ,_bde :=src .GetByte (_gcdc );if _bde !=nil {return nil ,_bde ;};_gcdc ++;if _eggcf ==_deefg &&_debf {_eced =_gfba (_gef ,_eced );};_bde =_afeb .SetByte (_bfdc ,_eced );if _bde !=nil {return nil ,_bde ; };_bfdc ++;};default:_ccae :=_acce (src ,_afeb ,uint (_fgea ),uint (_dgb ),_gef ,_cbbeb ,_deefg ,_debf ,_gcdc ,_bfdc );if _ccae !=nil {return nil ,_ccae ;};};_cbbeb +=src .RowStride ;_deefg +=src .RowStride ;_bff +=_afeb .RowStride ;};return _afeb ,nil ; };func (_aeb *Boxes )selectWithIndicator (_aggf *_bc .NumSlice )(_ebc *Boxes ,_gacf error ){const _ccgg ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";if _aeb ==nil {return nil ,_c .Error (_ccgg ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064"); };if _aggf ==nil {return nil ,_c .Error (_ccgg ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_aggf )!=len (*_aeb ){return nil ,_c .Error (_ccgg ,"\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 _agfc ,_bbgb int ;for _ffae :=0;_ffae < len (*_aggf );_ffae ++{if _agfc ,_gacf =_aggf .GetInt (_ffae );_gacf !=nil {return nil ,_c .Wrap (_gacf ,_ccgg ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _agfc ==1{_bbgb ++; };};if _bbgb ==len (*_aeb ){return _aeb ,nil ;};_gacaf :=Boxes {};for _ffgf :=0;_ffgf < len (*_aggf );_ffgf ++{_agfc =int ((*_aggf )[_ffgf ]);if _agfc ==0{continue ;};_gacaf =append (_gacaf ,(*_aeb )[_ffgf ]);};_ebc =&_gacaf ;return _ebc ,nil ;};var MorphBC BoundaryCondition ; func _bgga (_bagbd *Bitmap ,_fabb *_bc .Stack ,_deeg ,_fada ,_edge int )(_cgee *_gg .Rectangle ,_cdgd error ){const _dcdc ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _bagbd ==nil {return nil ,_c .Error (_dcdc ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070"); };if _fabb ==nil {return nil ,_c .Error (_dcdc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};switch _edge {case 4:if _cgee ,_cdgd =_eabfc (_bagbd ,_fabb ,_deeg ,_fada );_cdgd !=nil {return nil ,_c .Wrap (_cdgd ,_dcdc ,""); };return _cgee ,nil ;case 8:if _cgee ,_cdgd =_daeag (_bagbd ,_fabb ,_deeg ,_fada );_cdgd !=nil {return nil ,_c .Wrap (_cdgd ,_dcdc ,"");};return _cgee ,nil ;default:return nil ,_c .Errorf (_dcdc ,"\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",_edge ); };};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};func _decb (_dcgga ,_egec int ,_cbed string )*Selection {_gdfb :=&Selection {Height :_dcgga ,Width :_egec ,Name :_cbed };_gdfb .Data =make ([][]SelectionValue ,_dcgga );for _ffacf :=0; _ffacf < _dcgga ;_ffacf ++{_gdfb .Data [_ffacf ]=make ([]SelectionValue ,_egec );};return _gdfb ;};func TstESymbol (t *_g .T ,scale ...int )*Bitmap {_eagc ,_aebc :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});_ce .NoError (t ,_aebc );return TstGetScaledSymbol (t ,_eagc ,scale ...); };func _daeag (_bdcg *Bitmap ,_agacf *_bc .Stack ,_begc ,_efdba int )(_bedc *_gg .Rectangle ,_ebgb error ){const _cdgc ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _bdcg ==nil {return nil ,_c .Error (_cdgc ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070"); };if _agacf ==nil {return nil ,_c .Error (_cdgc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_gcfb ,_cefbg :=_bdcg .Width ,_bdcg .Height ;_gcbb :=_gcfb -1;_eeaea :=_cefbg -1;if _begc < 0||_begc > _gcbb ||_efdba < 0||_efdba > _eeaea ||!_bdcg .GetPixel (_begc ,_efdba ){return nil ,nil ; };_ddacc :=_gg .Rect (100000,100000,0,0);if _ebgb =_bcge (_agacf ,_begc ,_begc ,_efdba ,1,_eeaea ,&_ddacc );_ebgb !=nil {return nil ,_c .Wrap (_ebgb ,_cdgc ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _ebgb =_bcge (_agacf ,_begc ,_begc ,_efdba +1,-1,_eeaea ,&_ddacc ); _ebgb !=nil {return nil ,_c .Wrap (_ebgb ,_cdgc ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_ddacc .Min .X ,_ddacc .Max .X =_begc ,_begc ;_ddacc .Min .Y ,_ddacc .Max .Y =_efdba ,_efdba ;var (_gddd *fillSegment ; _bbcbd int ;);for _agacf .Len ()> 0{if _gddd ,_ebgb =_effg (_agacf );_ebgb !=nil {return nil ,_c .Wrap (_ebgb ,_cdgc ,"");};_efdba =_gddd ._edacf ;for _begc =_gddd ._ffac -1;_begc >=0&&_bdcg .GetPixel (_begc ,_efdba );_begc --{if _ebgb =_bdcg .SetPixel (_begc ,_efdba ,0); _ebgb !=nil {return nil ,_c .Wrap (_ebgb ,_cdgc ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _begc >=_gddd ._ffac -1{for {for _begc ++;_begc <=_gddd ._egace +1&&_begc <=_gcbb &&!_bdcg .GetPixel (_begc ,_efdba );_begc ++{};_bbcbd =_begc ;if !(_begc <=_gddd ._egace +1&&_begc <=_gcbb ){break ; };for ;_begc <=_gcbb &&_bdcg .GetPixel (_begc ,_efdba );_begc ++{if _ebgb =_bdcg .SetPixel (_begc ,_efdba ,0);_ebgb !=nil {return nil ,_c .Wrap (_ebgb ,_cdgc ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _ebgb =_bcge (_agacf ,_bbcbd ,_begc -1,_gddd ._edacf ,_gddd ._ageg ,_eeaea ,&_ddacc ); _ebgb !=nil {return nil ,_c .Wrap (_ebgb ,_cdgc ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _begc > _gddd ._egace {if _ebgb =_bcge (_agacf ,_gddd ._egace +1,_begc -1,_gddd ._edacf ,-_gddd ._ageg ,_eeaea ,&_ddacc );_ebgb !=nil {return nil ,_c .Wrap (_ebgb ,_cdgc ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065"); };};};continue ;};_bbcbd =_begc +1;if _bbcbd < _gddd ._ffac {if _ebgb =_bcge (_agacf ,_bbcbd ,_gddd ._ffac -1,_gddd ._edacf ,-_gddd ._ageg ,_eeaea ,&_ddacc );_ebgb !=nil {return nil ,_c .Wrap (_ebgb ,_cdgc ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065"); };};_begc =_gddd ._ffac ;for {for ;_begc <=_gcbb &&_bdcg .GetPixel (_begc ,_efdba );_begc ++{if _ebgb =_bdcg .SetPixel (_begc ,_efdba ,0);_ebgb !=nil {return nil ,_c .Wrap (_ebgb ,_cdgc ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _ebgb =_bcge (_agacf ,_bbcbd ,_begc -1,_gddd ._edacf ,_gddd ._ageg ,_eeaea ,&_ddacc ); _ebgb !=nil {return nil ,_c .Wrap (_ebgb ,_cdgc ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _begc > _gddd ._egace {if _ebgb =_bcge (_agacf ,_gddd ._egace +1,_begc -1,_gddd ._edacf ,-_gddd ._ageg ,_eeaea ,&_ddacc );_ebgb !=nil {return nil ,_c .Wrap (_ebgb ,_cdgc ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065"); };};for _begc ++;_begc <=_gddd ._egace +1&&_begc <=_gcbb &&!_bdcg .GetPixel (_begc ,_efdba );_begc ++{};_bbcbd =_begc ;if !(_begc <=_gddd ._egace +1&&_begc <=_gcbb ){break ;};};};_ddacc .Max .X ++;_ddacc .Max .Y ++;return &_ddacc ,nil ;};func TstISymbol (t *_g .T ,scale ...int )*Bitmap {_gdba ,_aeefg :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80}); _ce .NoError (t ,_aeefg );return TstGetScaledSymbol (t ,_gdba ,scale ...);};var (_ffcfc =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_gda =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func (_edfc *Bitmap )Zero ()bool {_bcbg :=_edfc .Width /8; _bbeef :=_edfc .Width &7;var _agad byte ;if _bbeef !=0{_agad =byte (0xff< 0{if _edfc .Data [_dcc ]&_agad !=0{return false ;};};};return true ;};func (_bbaee MorphProcess )verify (_facc int ,_cffe ,_bca *int )error {const _agec ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079"; switch _bbaee .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_bbaee .Arguments )!=2{return _c .Error (_agec ,"\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"); };_afebc ,_gacfg :=_bbaee .getWidthHeight ();if _afebc <=0||_gacfg <=0{return _c .Error (_agec ,"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 :_fdae :=len (_bbaee .Arguments );*_cffe +=_fdae ;if _fdae < 1||_fdae > 4{return _c .Error (_agec ,"\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 _fgee :=0;_fgee < _fdae ;_fgee ++{if _bbaee .Arguments [_fgee ]< 1||_bbaee .Arguments [_fgee ]> 4{return _c .Error (_agec ,"\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 (_bbaee .Arguments )==0{return _c .Error (_agec ,"\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"); };_aabe :=_bbaee .Arguments [0];if _aabe !=2&&_aabe !=4&&_aabe !=8{return _c .Error (_agec ,"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"); };*_cffe -=_egfg [_aabe /4];case MopAddBorder :if len (_bbaee .Arguments )==0{return _c .Error (_agec ,"\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"); };_egfa :=_bbaee .Arguments [0];if _facc > 0{return _c .Error (_agec ,"\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 _egfa < 1{return _c .Error (_agec ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_bca =_egfa ;};return nil ;};func (_bgee *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _ggbg ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074"; if len (_bgee .Values )==0{return nil ,_c .Error (_ggbg ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_ecdf :=&BitmapsArray {};_bgee .SortByHeight ();_dead :=-1;_aeed :=-1;for _egfe :=0;_egfe < len (_bgee .Values ); _egfe ++{_ggdf :=_bgee .Values [_egfe ].Height ;if _ggdf > _dead {_dead =_ggdf ;_aeed ++;_ecdf .Values =append (_ecdf .Values ,&Bitmaps {});};_ecdf .Values [_aeed ].AddBitmap (_bgee .Values [_egfe ]);};return _ecdf ,nil ;};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _efgca ,_befd int ; _aceg :=src .RowStride -1;if x < 0{_befd =-x ;x =0;}else if x +src .Width > dst .Width {_aceg -=src .Width +x -dst .Width ;};if y < 0{_efgca =-y ;y =0;_befd +=src .RowStride ;_aceg +=src .RowStride ;}else if y +src .Height > dst .Height {_efgca =src .Height +y -dst .Height ; };var (_cfcce int ;_cgda error ;);_eabe :=x &0x07;_gcag :=8-_eabe ;_bfbf :=src .Width &0x07;_fagf :=_gcag -_bfbf ;_bddg :=_gcag &0x07!=0;_aaae :=src .Width <=((_aceg -_befd )<<3)+_gcag ;_bcd :=dst .GetByteIndex (x ,y );_dbcea :=_efgca +dst .Height ;if src .Height > _dbcea {_cfcce =_dbcea ; }else {_cfcce =src .Height ;};switch {case !_bddg :_cgda =_gaed (src ,dst ,_efgca ,_cfcce ,_bcd ,_befd ,_aceg ,op );case _aaae :_cgda =_fddf (src ,dst ,_efgca ,_cfcce ,_bcd ,_befd ,_aceg ,_fagf ,_eabe ,_gcag ,op );default:_cgda =_dad (src ,dst ,_efgca ,_cfcce ,_bcd ,_befd ,_aceg ,_fagf ,_eabe ,_gcag ,op ,_bfbf ); };return _cgda ;};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _fge ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_efef :=_dee (width ,height );_efef .Data =data ;if len (data )< height *_efef .RowStride {return nil ,_c .Errorf (_fge ,"\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 *_efef .RowStride ); };return _efef ,nil ;};func _effg (_afbf *_bc .Stack )(_bagge *fillSegment ,_fbgf error ){const _ffbe ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _afbf ==nil {return nil ,_c .Error (_ffbe ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064"); };if _afbf .Aux ==nil {return nil ,_c .Error (_ffbe ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_bgfa ,_abbg :=_afbf .Pop ();if !_abbg {return nil ,nil ;};_ddcb ,_abbg :=_bgfa .(*fillSegment );if !_abbg {return nil ,_c .Error (_ffbe ,"\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"); };_bagge =&fillSegment {_ddcb ._ffac ,_ddcb ._egace ,_ddcb ._edacf +_ddcb ._ageg ,_ddcb ._ageg };_afbf .Aux .Push (_ddcb );return _bagge ,nil ;};func (_gcba *Bitmaps )WidthSorter ()func (_feeg ,_ceca int )bool {return func (_gbaaad ,_gege int )bool {return _gcba .Values [_gbaaad ].Width < _gcba .Values [_gege ].Width }; };func _aaaab (_cedf *Bitmap )(_bedg *Bitmap ,_gcg int ,_aeef error ){const _gcdd ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";if _cedf ==nil {return nil ,0,_c .Errorf (_gcdd ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064"); };var _fgcad ,_aefb *Bitmap ;if _fgcad ,_aeef =_eaaf (nil ,_cedf );_aeef !=nil {return nil ,0,_c .Wrap (_aeef ,_gcdd ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");};var (_fee [13]int ;_bbccc ,_aac int ;);_gggf :=12;_ebbb :=_bc .NewNumSlice (_gggf +1); _agdc :=_bc .NewNumSlice (_gggf +1);var _bgcf *Boxes ;for _baaa :=0;_baaa <=_gggf ;_baaa ++{if _baaa ==0{if _aefb ,_aeef =_eaaf (nil ,_fgcad );_aeef !=nil {return nil ,0,_c .Wrap (_aeef ,_gcdd ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");};}else {if _aefb ,_aeef =_dbfb (_fgcad ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}}); _aeef !=nil {return nil ,0,_c .Wrap (_aeef ,_gcdd ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _bgcf ,_aeef =_aefb .connComponentsBB (4);_aeef !=nil {return nil ,0,_c .Wrap (_aeef ,_gcdd ,"");};_fee [_baaa ]=len (*_bgcf ); _ebbb .AddInt (_fee [_baaa ]);switch _baaa {case 0:_bbccc =_fee [0];default:_aac =_fee [_baaa -1]-_fee [_baaa ];_agdc .AddInt (_aac );};_fgcad =_aefb ;};_dbfe :=true ;_adac :=2;var _dgaf ,_dacc int ;for _ecca :=1;_ecca < len (*_agdc );_ecca ++{if _dgaf ,_aeef =_ebbb .GetInt (_ecca ); _aeef !=nil {return nil ,0,_c .Wrap (_aeef ,_gcdd ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");};if _dbfe &&_dgaf < int (0.3*float32 (_bbccc )){_adac =_ecca +1;_dbfe =false ;}; if _aac ,_aeef =_agdc .GetInt (_ecca );_aeef !=nil {return nil ,0,_c .Wrap (_aeef ,_gcdd ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");};if _aac > _dacc {_dacc =_aac ;};};_egf :=_cedf .XResolution ;if _egf ==0{_egf =150; };if _egf > 110{_adac ++;};if _adac < 2{_ag .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"); _adac =2;};_gcg =_adac +1;if _bedg ,_aeef =_gaad (nil ,_cedf ,_adac +1,1);_aeef !=nil {return nil ,0,_c .Wrap (_aeef ,_gcdd ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _bedg ,_gcg ,nil ; };func (_cfag *Bitmap )setAll ()error {_eaba :=_bfbg (_cfag ,0,0,_cfag .Width ,_cfag .Height ,PixSet ,nil ,0,0);if _eaba !=nil {return _c .Wrap (_eaba ,"\u0073\u0065\u0074\u0041\u006c\u006c","");};return nil ;};func (_fagg *byHeight )Len ()int {return len (_fagg .Values )}; func (_dgbf *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _geec ="\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 >=_dgbf .IntSlice .Size (){return 0,_c .Errorf (_geec ,"\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 (_dgbf .YAtIndex (i )),nil ;};func _bebd (_afebf ,_egeg ,_aegaa byte )byte {return (_afebf &^(_aegaa ))|(_egeg &_aegaa )};