1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
|
//
// 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 (_ge "encoding/binary";_e "github.com/stretchr/testify/require";_de "github.com/unidoc/unipdf/v4/common";_dc "github.com/unidoc/unipdf/v4/internal/bitwise";_cg "github.com/unidoc/unipdf/v4/internal/imageutil";_db "github.com/unidoc/unipdf/v4/internal/jbig2/basic";
_g "github.com/unidoc/unipdf/v4/internal/jbig2/errors";_b "image";_gf "math";_dd "sort";_d "strings";_f "testing";);func (_cabf *Bitmaps )SelectByIndexes (idx []int )(*Bitmaps ,error ){const _fga ="B\u0069\u0074\u006d\u0061\u0070\u0073.\u0053\u006f\u0072\u0074\u0049\u006e\u0064\u0065\u0078e\u0073\u0042\u0079H\u0065i\u0067\u0068\u0074";
_caec ,_dcac :=_cabf .selectByIndexes (idx );if _dcac !=nil {return nil ,_g .Wrap (_dcac ,_fga ,"");};return _caec ,nil ;};func _bgef ()(_ecdf [256]uint16 ){for _bfe :=0;_bfe < 256;_bfe ++{if _bfe &0x01!=0{_ecdf [_bfe ]|=0x3;};if _bfe &0x02!=0{_ecdf [_bfe ]|=0xc;
};if _bfe &0x04!=0{_ecdf [_bfe ]|=0x30;};if _bfe &0x08!=0{_ecdf [_bfe ]|=0xc0;};if _bfe &0x10!=0{_ecdf [_bfe ]|=0x300;};if _bfe &0x20!=0{_ecdf [_bfe ]|=0xc00;};if _bfe &0x40!=0{_ecdf [_bfe ]|=0x3000;};if _bfe &0x80!=0{_ecdf [_bfe ]|=0xc000;};};return _ecdf ;
};func _cfca (_cdaae *Bitmap ,_debf *Bitmap ,_dbbaa *Selection ,_daac **Bitmap )(*Bitmap ,error ){const _eceeg ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0031";if _debf ==nil {return nil ,_g .Error (_eceeg ,"\u004d\u006f\u0072\u0070\u0068\u0041\u0072\u0067\u0073\u0031\u0020'\u0073\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066i\u006e\u0065\u0064");
};if _dbbaa ==nil {return nil ,_g .Error (_eceeg ,"\u004d\u006f\u0072\u0068p\u0041\u0072\u0067\u0073\u0031\u0020\u0027\u0073\u0065\u006c'\u0020n\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064");};_ffff ,_cbcff :=_dbbaa .Height ,_dbbaa .Width ;if _ffff ==0||_cbcff ==0{return nil ,_g .Error (_eceeg ,"\u0073\u0065\u006c\u0065ct\u0069\u006f\u006e\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");
};if _cdaae ==nil {_cdaae =_debf .createTemplate ();*_daac =_debf ;return _cdaae ,nil ;};_cdaae .Width =_debf .Width ;_cdaae .Height =_debf .Height ;_cdaae .RowStride =_debf .RowStride ;_cdaae .Color =_debf .Color ;_cdaae .Data =make ([]byte ,_debf .RowStride *_debf .Height );
if _cdaae ==_debf {*_daac =_debf .Copy ();}else {*_daac =_debf ;};return _cdaae ,nil ;};func HausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH int )(bool ,error ){const _gecd ="\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";_gbea ,_ebcae :=p1 .Width ,p1 .Height ;
_fbbd ,_gfdf :=p3 .Width ,p3 .Height ;if _db .Abs (_gbea -_fbbd )> maxDiffW {return false ,nil ;};if _db .Abs (_ebcae -_gfdf )> maxDiffH {return false ,nil ;};_afcd :=int (delX +_db .Sign (delX )*0.5);_gdfd :=int (delY +_db .Sign (delY )*0.5);var _febf error ;
_geef :=p1 .CreateTemplate ();if _febf =_geef .RasterOperation (0,0,_gbea ,_ebcae ,PixSrc ,p1 ,0,0);_febf !=nil {return false ,_g .Wrap (_febf ,_gecd ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _febf =_geef .RasterOperation (_afcd ,_gdfd ,_gbea ,_ebcae ,PixNotSrcAndDst ,p4 ,0,0);
_febf !=nil {return false ,_g .Wrap (_febf ,_gecd ,"\u0021p\u0034\u0020\u0026\u0020\u0074");};if _geef .Zero (){return false ,nil ;};if _febf =_geef .RasterOperation (_afcd ,_gdfd ,_fbbd ,_gfdf ,PixSrc ,p3 ,0,0);_febf !=nil {return false ,_g .Wrap (_febf ,_gecd ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");
};if _febf =_geef .RasterOperation (0,0,_fbbd ,_gfdf ,PixNotSrcAndDst ,p2 ,0,0);_febf !=nil {return false ,_g .Wrap (_febf ,_gecd ,"\u0021p\u0032\u0020\u0026\u0020\u0074");};return _geef .Zero (),nil ;};func _dbfb (_caca ...MorphProcess )(_eace error ){const _bbfeb ="v\u0065r\u0069\u0066\u0079\u004d\u006f\u0072\u0070\u0068P\u0072\u006f\u0063\u0065ss\u0065\u0073";
var _cegf ,_fddc int ;for _effd ,_eagc :=range _caca {if _eace =_eagc .verify (_effd ,&_cegf ,&_fddc );_eace !=nil {return _g .Wrap (_eace ,_bbfeb ,"");};};if _fddc !=0&&_cegf !=0{return _g .Error (_bbfeb ,"\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 _fcac (_cdgc ,_aefg ,_ddgbg byte )byte {return (_cdgc &^(_ddgbg ))|(_aefg &_ddgbg )};func _gebg (_bgea *_db .Stack ,_cagf ,_aaea ,_dadb ,_bccd ,_bfgeb int ,_fgefa *_b .Rectangle )(_ggcd error ){const _acec ="\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 _bgea ==nil {return _g .Error (_acec ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};if _fgefa ==nil {return _g .Error (_acec ,"\u0070\u0072\u006f\u0076i\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0069\u006da\u0067e\u002e\u0052\u0065\u0063\u0074\u0061\u006eg\u006c\u0065");
};_fgefa .Min .X =_db .Min (_fgefa .Min .X ,_cagf );_fgefa .Max .X =_db .Max (_fgefa .Max .X ,_aaea );_fgefa .Min .Y =_db .Min (_fgefa .Min .Y ,_dadb );_fgefa .Max .Y =_db .Max (_fgefa .Max .Y ,_dadb );if _dadb +_bccd < 0||_dadb +_bccd > _bfgeb {return nil ;
};if _bgea .Aux ==nil {return _g .Error (_acec ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};var _bcce *fillSegment ;_ggadg ,_bebd :=_bgea .Aux .Pop ();if _bebd {if _bcce ,_bebd =_ggadg .(*fillSegment );
!_bebd {return _g .Error (_acec ,"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 {_bcce =&fillSegment {};
};_bcce ._fgeg =_cagf ;_bcce ._efcee =_aaea ;_bcce ._gdda =_dadb ;_bcce ._gfff =_bccd ;_bgea .Push (_bcce );return nil ;};func Rect (x ,y ,w ,h int )(*_b .Rectangle ,error ){const _fdbad ="b\u0069\u0074\u006d\u0061\u0070\u002e\u0052\u0065\u0063\u0074";
if x < 0{w +=x ;x =0;if w <=0{return nil ,_g .Errorf (_fdbad ,"x\u003a\u0027\u0025\u0064\u0027\u0020<\u0020\u0030\u0020\u0061\u006e\u0064\u0020\u0077\u003a \u0027\u0025\u0064'\u0020<\u003d\u0020\u0030",x ,w );};};if y < 0{h +=y ;y =0;if h <=0{return nil ,_g .Error (_fdbad ,"\u0079\u0020\u003c 0\u0020\u0061\u006e\u0064\u0020\u0062\u006f\u0078\u0020\u006f\u0066\u0066\u0020\u002b\u0071\u0075\u0061\u0064");
};};_cdee :=_b .Rect (x ,y ,x +w ,y +h );return &_cdee ,nil ;};func Centroid (bm *Bitmap ,centTab ,sumTab []int )(Point ,error ){return bm .centroid (centTab ,sumTab )};type Getter interface{GetBitmap ()*Bitmap ;};func (_dgccc *ClassedPoints )SortByX (){_dgccc ._bdde =_dgccc .xSortFunction ();
_dd .Sort (_dgccc )};func _afdf (_edf ,_gbab ,_ddfd *Bitmap )(*Bitmap ,error ){const _dacd ="\u0073\u0075\u0062\u0074\u0072\u0061\u0063\u0074";if _gbab ==nil {return nil ,_g .Error (_dacd ,"'\u0073\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
};if _ddfd ==nil {return nil ,_g .Error (_dacd ,"'\u0073\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};var _efa error ;switch _edf {case _gbab :if _efa =_edf .RasterOperation (0,0,_gbab .Width ,_gbab .Height ,PixNotSrcAndDst ,_ddfd ,0,0);_efa !=nil {return nil ,_g .Wrap (_efa ,_dacd ,"\u0064 \u003d\u003d\u0020\u0073\u0031");
};case _ddfd :if _efa =_edf .RasterOperation (0,0,_gbab .Width ,_gbab .Height ,PixNotSrcAndDst ,_gbab ,0,0);_efa !=nil {return nil ,_g .Wrap (_efa ,_dacd ,"\u0064 \u003d\u003d\u0020\u0073\u0032");};default:_edf ,_efa =_bgff (_edf ,_gbab );if _efa !=nil {return nil ,_g .Wrap (_efa ,_dacd ,"");
};if _efa =_edf .RasterOperation (0,0,_gbab .Width ,_gbab .Height ,PixNotSrcAndDst ,_ddfd ,0,0);_efa !=nil {return nil ,_g .Wrap (_efa ,_dacd ,"\u0064e\u0066\u0061\u0075\u006c\u0074");};};return _edf ,nil ;};func (_fege *ClassedPoints )xSortFunction ()func (_eebc int ,_efcc int )bool {return func (_agbc ,_dcef int )bool {return _fege .XAtIndex (_agbc )< _fege .XAtIndex (_dcef )};
};type Bitmap struct{Width ,Height int ;BitmapNumber int ;RowStride int ;Data []byte ;Color Color ;Special int ;Text string ;XResolution ,YResolution int ;};func (_agc *Bitmap )GetUnpaddedData ()([]byte ,error ){_dec :=uint (_agc .Width &0x07);if _dec ==0{return _agc .Data ,nil ;
};_fec :=_agc .Width *_agc .Height ;if _fec %8!=0{_fec >>=3;_fec ++;}else {_fec >>=3;};_bgab :=make ([]byte ,_fec );_cdc :=_dc .NewWriterMSB (_bgab );const _afebb ="\u0047e\u0074U\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";for _gfc :=0;
_gfc < _agc .Height ;_gfc ++{for _eead :=0;_eead < _agc .RowStride ;_eead ++{_beca :=_agc .Data [_gfc *_agc .RowStride +_eead ];if _eead !=_agc .RowStride -1{_bed :=_cdc .WriteByte (_beca );if _bed !=nil {return nil ,_g .Wrap (_bed ,_afebb ,"");};continue ;
};for _add :=uint (0);_add < _dec ;_add ++{_cge :=_cdc .WriteBit (int (_beca >>(7-_add )&0x01));if _cge !=nil {return nil ,_g .Wrap (_cge ,_afebb ,"");};};};};return _bgab ,nil ;};func (_gacb *Bitmap )setTwoBytes (_aedg int ,_abbd uint16 )error {if _aedg +1> len (_gacb .Data )-1{return _g .Errorf ("s\u0065\u0074\u0054\u0077\u006f\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_aedg );
};_gacb .Data [_aedg ]=byte ((_abbd &0xff00)>>8);_gacb .Data [_aedg +1]=byte (_abbd &0xff);return nil ;};func (_gefbc *ClassedPoints )ySortFunction ()func (_ecac int ,_eddd int )bool {return func (_dddd ,_dgca int )bool {return _gefbc .YAtIndex (_dddd )< _gefbc .YAtIndex (_dgca )};
};func init (){for _ddea :=0;_ddea < 256;_ddea ++{_fee [_ddea ]=uint8 (_ddea &0x1)+(uint8 (_ddea >>1)&0x1)+(uint8 (_ddea >>2)&0x1)+(uint8 (_ddea >>3)&0x1)+(uint8 (_ddea >>4)&0x1)+(uint8 (_ddea >>5)&0x1)+(uint8 (_ddea >>6)&0x1)+(uint8 (_ddea >>7)&0x1);};
};func TstImageBitmapInverseData ()[]byte {_eaad :=_cfdf .Copy ();_eaad .InverseData ();return _eaad .Data ;};const (_geaaa shift =iota ;_fbegg ;);func TstASymbol (t *_f .T )*Bitmap {t .Helper ();_ebbac :=New (6,6);_e .NoError (t ,_ebbac .SetPixel (1,0,1));
_e .NoError (t ,_ebbac .SetPixel (2,0,1));_e .NoError (t ,_ebbac .SetPixel (3,0,1));_e .NoError (t ,_ebbac .SetPixel (4,0,1));_e .NoError (t ,_ebbac .SetPixel (5,1,1));_e .NoError (t ,_ebbac .SetPixel (1,2,1));_e .NoError (t ,_ebbac .SetPixel (2,2,1));
_e .NoError (t ,_ebbac .SetPixel (3,2,1));_e .NoError (t ,_ebbac .SetPixel (4,2,1));_e .NoError (t ,_ebbac .SetPixel (5,2,1));_e .NoError (t ,_ebbac .SetPixel (0,3,1));_e .NoError (t ,_ebbac .SetPixel (5,3,1));_e .NoError (t ,_ebbac .SetPixel (0,4,1));
_e .NoError (t ,_ebbac .SetPixel (5,4,1));_e .NoError (t ,_ebbac .SetPixel (1,5,1));_e .NoError (t ,_ebbac .SetPixel (2,5,1));_e .NoError (t ,_ebbac .SetPixel (3,5,1));_e .NoError (t ,_ebbac .SetPixel (4,5,1));_e .NoError (t ,_ebbac .SetPixel (5,5,1));
return _ebbac ;};func MakePixelSumTab8 ()[]int {return _eadbd ()};type byHeight Bitmaps ;func New (width ,height int )*Bitmap {_efc :=_cff (width ,height );_efc .Data =make ([]byte ,height *_efc .RowStride );return _efc ;};func (_gfba *ClassedPoints )Swap (i ,j int ){_gfba .IntSlice [i ],_gfba .IntSlice [j ]=_gfba .IntSlice [j ],_gfba .IntSlice [i ];
};func _bfae (_edgf ,_edgfe *Bitmap ,_dfac ,_befe ,_bgefc uint ,_defb ,_cfaf int ,_aeea bool ,_fbde ,_cbbd int )error {for _dcee :=_defb ;_dcee < _cfaf ;_dcee ++{if _fbde +1< len (_edgf .Data ){_edd :=_dcee +1==_cfaf ;_ddfg ,_cggd :=_edgf .GetByte (_fbde );
if _cggd !=nil {return _cggd ;};_fbde ++;_ddfg <<=_dfac ;_afbb ,_cggd :=_edgf .GetByte (_fbde );if _cggd !=nil {return _cggd ;};_afbb >>=_befe ;_bgc :=_ddfg |_afbb ;if _edd &&!_aeea {_bgc =_agaf (_bgefc ,_bgc );};_cggd =_edgfe .SetByte (_cbbd ,_bgc );if _cggd !=nil {return _cggd ;
};_cbbd ++;if _edd &&_aeea {_acfb ,_gaga :=_edgf .GetByte (_fbde );if _gaga !=nil {return _gaga ;};_acfb <<=_dfac ;_bgc =_agaf (_bgefc ,_acfb );if _gaga =_edgfe .SetByte (_cbbd ,_bgc );_gaga !=nil {return _gaga ;};};continue ;};_ffaf ,_bgdb :=_edgf .GetByte (_fbde );
if _bgdb !=nil {_de .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",_fbde ,_bgdb );return _bgdb ;};
_ffaf <<=_dfac ;_fbde ++;_bgdb =_edgfe .SetByte (_cbbd ,_ffaf );if _bgdb !=nil {return _bgdb ;};_cbbd ++;};return nil ;};func TstGetScaledSymbol (t *_f .T ,sm *Bitmap ,scale ...int )*Bitmap {if len (scale )==0{return sm ;};if scale [0]==1{return sm ;};
_ggefa ,_afge :=MorphSequence (sm ,MorphProcess {Operation :MopReplicativeBinaryExpansion ,Arguments :scale });_e .NoError (t ,_afge );return _ggefa ;};func (_adafe *Points )AddPoint (x ,y float32 ){*_adafe =append (*_adafe ,Point {x ,y })};func _efb (_ceac ,_ebaf *Bitmap ,_ int ,_cce []byte ,_aabb int )(_cfg error ){const _fag ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0031";
var (_cd ,_aagb ,_dea ,_cbc ,_eab ,_gfb ,_ag ,_eea int ;_dcg ,_bca uint32 ;_afeb ,_dded byte ;_bac uint16 ;);_cec :=make ([]byte ,4);_faf :=make ([]byte ,4);for _dea =0;_dea < _ceac .Height -1;_dea ,_cbc =_dea +2,_cbc +1{_cd =_dea *_ceac .RowStride ;_aagb =_cbc *_ebaf .RowStride ;
for _eab ,_gfb =0,0;_eab < _aabb ;_eab ,_gfb =_eab +4,_gfb +1{for _ag =0;_ag < 4;_ag ++{_eea =_cd +_eab +_ag ;if _eea <=len (_ceac .Data )-1&&_eea < _cd +_ceac .RowStride {_cec [_ag ]=_ceac .Data [_eea ];}else {_cec [_ag ]=0x00;};_eea =_cd +_ceac .RowStride +_eab +_ag ;
if _eea <=len (_ceac .Data )-1&&_eea < _cd +(2*_ceac .RowStride ){_faf [_ag ]=_ceac .Data [_eea ];}else {_faf [_ag ]=0x00;};};_dcg =_ge .BigEndian .Uint32 (_cec );_bca =_ge .BigEndian .Uint32 (_faf );_bca |=_dcg ;_bca |=_bca <<1;_bca &=0xaaaaaaaa;_dcg =_bca |(_bca <<7);
_afeb =byte (_dcg >>24);_dded =byte ((_dcg >>8)&0xff);_eea =_aagb +_gfb ;if _eea +1==len (_ebaf .Data )-1||_eea +1>=_aagb +_ebaf .RowStride {_ebaf .Data [_eea ]=_cce [_afeb ];}else {_bac =(uint16 (_cce [_afeb ])<<8)|uint16 (_cce [_dded ]);if _cfg =_ebaf .setTwoBytes (_eea ,_bac );
_cfg !=nil {return _g .Wrapf (_cfg ,_fag ,"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",_eea );};_gfb ++;};};};
return nil ;};func (_gdcf Points )GetGeometry (i int )(_acba ,_dcca float32 ,_dcbgf error ){if i > len (_gdcf )-1{return 0,0,_g .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};_ggfa :=_gdcf [i ];return _ggfa .X ,_ggfa .Y ,nil ;};func _gbee (_gbbf *Bitmap ,_gbdafb ,_cbfee ,_cbce ,_fefd int ,_fcdg RasterOperator ,_eagg *Bitmap ,_afda ,_bbab int )error {const _dcbee ="\u0072a\u0073t\u0065\u0072\u004f\u0070\u0065\u0072\u0061\u0074\u0069\u006f\u006e";
if _gbbf ==nil {return _g .Error (_dcbee ,"\u006e\u0069\u006c\u0020\u0027\u0064\u0065\u0073\u0074\u0027\u0020\u0042i\u0074\u006d\u0061\u0070");};if _fcdg ==PixDst {return nil ;};switch _fcdg {case PixClr ,PixSet ,PixNotDst :_aefd (_gbbf ,_gbdafb ,_cbfee ,_cbce ,_fefd ,_fcdg );
return nil ;};if _eagg ==nil {_de .Log .Debug ("\u0052a\u0073\u0074e\u0072\u004f\u0070\u0065r\u0061\u0074\u0069o\u006e\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020bi\u0074\u006d\u0061p\u0020\u0069s\u0020\u006e\u006f\u0074\u0020\u0064e\u0066\u0069n\u0065\u0064");
return _g .Error (_dcbee ,"\u006e\u0069l\u0020\u0027\u0073r\u0063\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _ggfb :=_acca (_gbbf ,_gbdafb ,_cbfee ,_cbce ,_fefd ,_fcdg ,_eagg ,_afda ,_bbab );_ggfb !=nil {return _g .Wrap (_ggfb ,_dcbee ,"");
};return nil ;};func TstFrameBitmapData ()[]byte {return _efdb .Data };const (MopDilation MorphOperation =iota ;MopErosion ;MopOpening ;MopClosing ;MopRankBinaryReduction ;MopReplicativeBinaryExpansion ;MopAddBorder ;);func (_cddd *Bitmap )nextOnPixel (_cfd ,_bgfg int )(_ffd _b .Point ,_dbda bool ,_fdgb error ){const _gecg ="n\u0065\u0078\u0074\u004f\u006e\u0050\u0069\u0078\u0065\u006c";
_ffd ,_dbda ,_fdgb =_cddd .nextOnPixelLow (_cddd .Width ,_cddd .Height ,_cddd .RowStride ,_cfd ,_bgfg );if _fdgb !=nil {return _ffd ,false ,_g .Wrap (_fdgb ,_gecg ,"");};return _ffd ,_dbda ,nil ;};func (_abbe *Bitmaps )selectByIndexes (_abae []int )(*Bitmaps ,error ){_dcbfa :=&Bitmaps {};
for _ ,_geeef :=range _abae {_gbeec ,_cgbfa :=_abbe .GetBitmap (_geeef );if _cgbfa !=nil {return nil ,_g .Wrap (_cgbfa ,"\u0073e\u006ce\u0063\u0074\u0042\u0079\u0049\u006e\u0064\u0065\u0078\u0065\u0073","");};_dcbfa .AddBitmap (_gbeec );};return _dcbfa ,nil ;
};func _agaf (_feg uint ,_cdfd byte )byte {return _cdfd >>_feg <<_feg };func _dgdee (_fdcf *_db .Stack )(_fcebf *fillSegment ,_daacf error ){const _gced ="\u0070\u006f\u0070\u0046\u0069\u006c\u006c\u0053\u0065g\u006d\u0065\u006e\u0074";if _fdcf ==nil {return nil ,_g .Error (_gced ,"\u006ei\u006c \u0073\u0074\u0061\u0063\u006b \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");
};if _fdcf .Aux ==nil {return nil ,_g .Error (_gced ,"a\u0075x\u0053\u0074\u0061\u0063\u006b\u0020\u006e\u006ft\u0020\u0064\u0065\u0066in\u0065\u0064");};_fegf ,_bfec :=_fdcf .Pop ();if !_bfec {return nil ,nil ;};_gbdc ,_bfec :=_fegf .(*fillSegment );if !_bfec {return nil ,_g .Error (_gced ,"\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");
};_fcebf =&fillSegment {_gbdc ._fgeg ,_gbdc ._efcee ,_gbdc ._gdda +_gbdc ._gfff ,_gbdc ._gfff };_fdcf .Aux .Push (_gbdc );return _fcebf ,nil ;};func (_effc *Bitmap )InverseData (){_effc .inverseData ()};func (_cabga *byHeight )Len ()int {return len (_cabga .Values )};
func (_agg *Bitmap )GetPixel (x ,y int )bool {_ecb :=_agg .GetByteIndex (x ,y );_cfc :=_agg .GetBitOffset (x );_eef :=uint (7-_cfc );if _ecb > len (_agg .Data )-1{_de .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 ,_agg );
return false ;};if (_agg .Data [_ecb ]>>_eef )&0x01>=1{return true ;};return false ;};func _gdef (_dfaf ,_agf int )int {if _dfaf < _agf {return _dfaf ;};return _agf ;};func (_cbaed *BitmapsArray )AddBitmaps (bm *Bitmaps ){_cbaed .Values =append (_cbaed .Values ,bm )};
var (_efdb *Bitmap ;_cfdf *Bitmap ;);func _ebca (_ffgf int )int {if _ffgf < 0{return -_ffgf ;};return _ffgf ;};func (_debe *Bitmap )setBit (_dbbg int ){_debe .Data [(_dbbg >>3)]|=0x80>>uint (_dbbg &7)};func (_gdd *Bitmap )ConnComponents (bms *Bitmaps ,connectivity int )(_fcag *Boxes ,_gbda error ){const _cee ="B\u0069\u0074\u006d\u0061p.\u0043o\u006e\u006e\u0043\u006f\u006dp\u006f\u006e\u0065\u006e\u0074\u0073";
if _gdd ==nil {return nil ,_g .Error (_cee ,"\u0070r\u006f\u0076\u0069\u0064e\u0064\u0020\u0065\u006d\u0070t\u0079 \u0027b\u0027\u0020\u0062\u0069\u0074\u006d\u0061p");};if connectivity !=4&&connectivity !=8{return nil ,_g .Error (_cee ,"\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 _fcag ,_gbda =_gdd .connComponentsBB (connectivity );_gbda !=nil {return nil ,_g .Wrap (_gbda ,_cee ,"");};}else {if _fcag ,_gbda =_gdd .connComponentsBitmapsBB (bms ,connectivity );_gbda !=nil {return nil ,_g .Wrap (_gbda ,_cee ,"");
};};return _fcag ,nil ;};func CorrelationScoreSimple (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_gdf float64 ,_eacgc error ){const _cfgf ="\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 _gdf ,_g .Error (_cfgf ,"n\u0069l\u0020\u0062\u0069\u0074\u006d\u0061\u0070\u0073 \u0070\u0072\u006f\u0076id\u0065\u0064");};if tab ==nil {return _gdf ,_g .Error (_cfgf ,"\u0074\u0061\u0062\u0020\u0075\u006e\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if area1 ==0||area2 ==0{return _gdf ,_g .Error (_cfgf ,"\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064\u0020\u0061\u0072e\u0061\u0073\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065 \u003e\u0020\u0030");};_fbdc ,_eag :=bm1 .Width ,bm1 .Height ;_bcbc ,_dgaf :=bm2 .Width ,bm2 .Height ;
if _ebca (_fbdc -_bcbc )> maxDiffW {return 0,nil ;};if _ebca (_eag -_dgaf )> maxDiffH {return 0,nil ;};var _fcfd ,_gagb int ;if delX >=0{_fcfd =int (delX +0.5);}else {_fcfd =int (delX -0.5);};if delY >=0{_gagb =int (delY +0.5);}else {_gagb =int (delY -0.5);
};_fac :=bm1 .createTemplate ();if _eacgc =_fac .RasterOperation (_fcfd ,_gagb ,_bcbc ,_dgaf ,PixSrc ,bm2 ,0,0);_eacgc !=nil {return _gdf ,_g .Wrap (_eacgc ,_cfgf ,"\u0062m\u0032 \u0074\u006f\u0020\u0054\u0065\u006d\u0070\u006c\u0061\u0074\u0065");};if _eacgc =_fac .RasterOperation (0,0,_fbdc ,_eag ,PixSrcAndDst ,bm1 ,0,0);
_eacgc !=nil {return _gdf ,_g .Wrap (_eacgc ,_cfgf ,"b\u006d\u0031\u0020\u0061\u006e\u0064\u0020\u0062\u006d\u0054");};_bgfb :=_fac .countPixels ();_gdf =float64 (_bgfb )*float64 (_bgfb )/(float64 (area1 )*float64 (area2 ));return _gdf ,nil ;};func _bgff (_geaa ,_afg *Bitmap )(*Bitmap ,error ){if _afg ==nil {return nil ,_g .Error ("\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _afg ==_geaa {return _geaa ,nil ;};if _geaa ==nil {_geaa =_afg .createTemplate ();copy (_geaa .Data ,_afg .Data );return _geaa ,nil ;};_aeeg :=_geaa .resizeImageData (_afg );if _aeeg !=nil {return nil ,_g .Wrap (_aeeg ,"\u0063\u006f\u0070\u0079\u0042\u0069\u0074\u006d\u0061\u0070","");
};_geaa .Text =_afg .Text ;copy (_geaa .Data ,_afg .Data );return _geaa ,nil ;};func (_gfabg *byHeight )Swap (i ,j int ){_gfabg .Values [i ],_gfabg .Values [j ]=_gfabg .Values [j ],_gfabg .Values [i ];if _gfabg .Boxes !=nil {_gfabg .Boxes [i ],_gfabg .Boxes [j ]=_gfabg .Boxes [j ],_gfabg .Boxes [i ];
};};func _aaf (_bec ,_feb *Bitmap ,_dab int ,_ddaf []byte ,_bbd int )(_bdb error ){const _eac ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0033";var (_ae ,_aad ,_gga ,_gaae ,_bgg ,_dce ,_fdb ,_gb int ;
_eee ,_bab ,_eff ,_cbcc uint32 ;_ggc ,_ccg byte ;_ega uint16 ;);_bdg :=make ([]byte ,4);_cae :=make ([]byte ,4);for _gga =0;_gga < _bec .Height -1;_gga ,_gaae =_gga +2,_gaae +1{_ae =_gga *_bec .RowStride ;_aad =_gaae *_feb .RowStride ;for _bgg ,_dce =0,0;
_bgg < _bbd ;_bgg ,_dce =_bgg +4,_dce +1{for _fdb =0;_fdb < 4;_fdb ++{_gb =_ae +_bgg +_fdb ;if _gb <=len (_bec .Data )-1&&_gb < _ae +_bec .RowStride {_bdg [_fdb ]=_bec .Data [_gb ];}else {_bdg [_fdb ]=0x00;};_gb =_ae +_bec .RowStride +_bgg +_fdb ;if _gb <=len (_bec .Data )-1&&_gb < _ae +(2*_bec .RowStride ){_cae [_fdb ]=_bec .Data [_gb ];
}else {_cae [_fdb ]=0x00;};};_eee =_ge .BigEndian .Uint32 (_bdg );_bab =_ge .BigEndian .Uint32 (_cae );_eff =_eee &_bab ;_eff |=_eff <<1;_cbcc =_eee |_bab ;_cbcc &=_cbcc <<1;_bab =_eff &_cbcc ;_bab &=0xaaaaaaaa;_eee =_bab |(_bab <<7);_ggc =byte (_eee >>24);
_ccg =byte ((_eee >>8)&0xff);_gb =_aad +_dce ;if _gb +1==len (_feb .Data )-1||_gb +1>=_aad +_feb .RowStride {if _bdb =_feb .SetByte (_gb ,_ddaf [_ggc ]);_bdb !=nil {return _g .Wrapf (_bdb ,_eac ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_gb );};}else {_ega =(uint16 (_ddaf [_ggc ])<<8)|uint16 (_ddaf [_ccg ]);
if _bdb =_feb .setTwoBytes (_gb ,_ega );_bdb !=nil {return _g .Wrapf (_bdb ,_eac ,"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",_gb );
};_dce ++;};};};return nil ;};func (_ceec *Bitmaps )AddBox (box *_b .Rectangle ){_ceec .Boxes =append (_ceec .Boxes ,box )};func (_gcda *Bitmap )Equivalent (s *Bitmap )bool {return _gcda .equivalent (s )};func (_bade *Bitmaps )makeSizeIndicator (_cbde ,_fdgbd int ,_aedfc LocationFilter ,_eafeg SizeComparison )(_egbb *_db .NumSlice ,_caccg error ){const _eaed ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u006d\u0061\u006b\u0065S\u0069z\u0065I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _bade ==nil {return nil ,_g .Error (_eaed ,"\u0062\u0069\u0074ma\u0070\u0073\u0020\u0027\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch _aedfc {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_g .Errorf (_eaed ,"\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",_aedfc );
};switch _eafeg {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_g .Errorf (_eaed ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",_eafeg );
};_egbb =&_db .NumSlice {};var (_agddf ,_cbgbe ,_bgfe int ;_abcd *Bitmap ;);for _ ,_abcd =range _bade .Values {_agddf =0;_cbgbe ,_bgfe =_abcd .Width ,_abcd .Height ;switch _aedfc {case LocSelectWidth :if (_eafeg ==SizeSelectIfLT &&_cbgbe < _cbde )||(_eafeg ==SizeSelectIfGT &&_cbgbe > _cbde )||(_eafeg ==SizeSelectIfLTE &&_cbgbe <=_cbde )||(_eafeg ==SizeSelectIfGTE &&_cbgbe >=_cbde )||(_eafeg ==SizeSelectIfEQ &&_cbgbe ==_cbde ){_agddf =1;
};case LocSelectHeight :if (_eafeg ==SizeSelectIfLT &&_bgfe < _fdgbd )||(_eafeg ==SizeSelectIfGT &&_bgfe > _fdgbd )||(_eafeg ==SizeSelectIfLTE &&_bgfe <=_fdgbd )||(_eafeg ==SizeSelectIfGTE &&_bgfe >=_fdgbd )||(_eafeg ==SizeSelectIfEQ &&_bgfe ==_fdgbd ){_agddf =1;
};case LocSelectIfEither :if (_eafeg ==SizeSelectIfLT &&(_cbgbe < _cbde ||_bgfe < _fdgbd ))||(_eafeg ==SizeSelectIfGT &&(_cbgbe > _cbde ||_bgfe > _fdgbd ))||(_eafeg ==SizeSelectIfLTE &&(_cbgbe <=_cbde ||_bgfe <=_fdgbd ))||(_eafeg ==SizeSelectIfGTE &&(_cbgbe >=_cbde ||_bgfe >=_fdgbd ))||(_eafeg ==SizeSelectIfEQ &&(_cbgbe ==_cbde ||_bgfe ==_fdgbd )){_agddf =1;
};case LocSelectIfBoth :if (_eafeg ==SizeSelectIfLT &&(_cbgbe < _cbde &&_bgfe < _fdgbd ))||(_eafeg ==SizeSelectIfGT &&(_cbgbe > _cbde &&_bgfe > _fdgbd ))||(_eafeg ==SizeSelectIfLTE &&(_cbgbe <=_cbde &&_bgfe <=_fdgbd ))||(_eafeg ==SizeSelectIfGTE &&(_cbgbe >=_cbde &&_bgfe >=_fdgbd ))||(_eafeg ==SizeSelectIfEQ &&(_cbgbe ==_cbde &&_bgfe ==_fdgbd )){_agddf =1;
};};_egbb .AddInt (_agddf );};return _egbb ,nil ;};var (_bged =_bgef ();_cgab =_dfe ();_aebe =_bcb (););var _daadf =[]byte {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x78,0x27,0xC2,0x27,0x91,0x00,0x22,0x48,0x21,0x03,0x24,0x91,0x00,0x22,0x48,0x21,0x02,0xA4,0x95,0x00,0x22,0x48,0x21,0x02,0x64,0x9B,0x00,0x3C,0x78,0x21,0x02,0x27,0x91,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x63,0x18,0x00,0x00,0x00,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x15,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
func (_cbgb *Boxes )Add (box *_b .Rectangle )error {if _cbgb ==nil {return _g .Error ("\u0042o\u0078\u0065\u0073\u002e\u0041\u0064d","\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};*_cbgb =append (*_cbgb ,box );
return nil ;};func (_bfdg *Bitmap )Copy ()*Bitmap {_eggg :=make ([]byte ,len (_bfdg .Data ));copy (_eggg ,_bfdg .Data );return &Bitmap {Width :_bfdg .Width ,Height :_bfdg .Height ,RowStride :_bfdg .RowStride ,Data :_eggg ,Color :_bfdg .Color ,Text :_bfdg .Text ,BitmapNumber :_bfdg .BitmapNumber ,Special :_bfdg .Special };
};type MorphOperation int ;func _eadbd ()[]int {_bead :=make ([]int ,256);for _cdef :=0;_cdef <=0xff;_cdef ++{_ebf :=byte (_cdef );_bead [_ebf ]=int (_ebf &0x1)+(int (_ebf >>1)&0x1)+(int (_ebf >>2)&0x1)+(int (_ebf >>3)&0x1)+(int (_ebf >>4)&0x1)+(int (_ebf >>5)&0x1)+(int (_ebf >>6)&0x1)+(int (_ebf >>7)&0x1);
};return _bead ;};const _facgc =5000;func _adg (_dbd *Bitmap ,_gec *Bitmap ,_bb int )(_afe error ){const _fdf ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0050\u006fw\u0065\u0072\u0032\u004c\u006f\u0077";switch _bb {case 2:_afe =_fc (_dbd ,_gec );
case 4:_afe =_af (_dbd ,_gec );case 8:_afe =_dff (_dbd ,_gec );default:return _g .Error (_fdf ,"\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 _afe !=nil {_afe =_g .Wrap (_afe ,_fdf ,"");};return _afe ;};func (_abaf *ClassedPoints )Len ()int {return _abaf .IntSlice .Size ()};type Component int ;func (_gfg *Bitmap )GetComponents (components Component ,maxWidth ,maxHeight int )(_cfge *Bitmaps ,_acge *Boxes ,_ade error ){const _ecaa ="B\u0069t\u006d\u0061\u0070\u002e\u0047\u0065\u0074\u0043o\u006d\u0070\u006f\u006een\u0074\u0073";
if _gfg ==nil {return nil ,nil ,_g .Error (_ecaa ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0042\u0069\u0074\u006da\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069n\u0065\u0064\u002e");};switch components {case ComponentConn ,ComponentCharacters ,ComponentWords :default:return nil ,nil ,_g .Error (_ecaa ,"\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 _gfg .Zero (){_acge =&Boxes {};_cfge =&Bitmaps {};return _cfge ,_acge ,nil ;};switch components {case ComponentConn :_cfge =&Bitmaps {};if _acge ,_ade =_gfg .ConnComponents (_cfge ,8);_ade !=nil {return nil ,nil ,_g .Wrap (_ade ,_ecaa ,"\u006e\u006f \u0070\u0072\u0065p\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};case ComponentCharacters :_geba ,_bgfgd :=MorphSequence (_gfg ,MorphProcess {Operation :MopClosing ,Arguments :[]int {1,6}});if _bgfgd !=nil {return nil ,nil ,_g .Wrap (_bgfgd ,_ecaa ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _de .Log .IsLogLevel (_de .LogLevelTrace ){_de .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",_geba .String ());
};_gafb :=&Bitmaps {};_acge ,_bgfgd =_geba .ConnComponents (_gafb ,8);if _bgfgd !=nil {return nil ,nil ,_g .Wrap (_bgfgd ,_ecaa ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");
};if _de .Log .IsLogLevel (_de .LogLevelTrace ){_de .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",_gafb .String ());
};if _cfge ,_bgfgd =_gafb .ClipToBitmap (_gfg );_bgfgd !=nil {return nil ,nil ,_g .Wrap (_bgfgd ,_ecaa ,"\u0063h\u0061\u0072\u0061\u0063\u0074\u0065\u0072\u0073\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0069\u006e\u0067");};case ComponentWords :_dad :=1;
var _gfaea *Bitmap ;switch {case _gfg .XResolution <=200:_gfaea =_gfg ;case _gfg .XResolution <=400:_dad =2;_gfaea ,_ade =_fgd (_gfg ,1,0,0,0);if _ade !=nil {return nil ,nil ,_g .Wrap (_ade ,_ecaa ,"w\u006f\u0072\u0064\u0020\u0070\u0072e\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u0020\u002d \u0078\u0072\u0065s\u003c=\u0034\u0030\u0030");
};default:_dad =4;_gfaea ,_ade =_fgd (_gfg ,1,1,0,0);if _ade !=nil {return nil ,nil ,_g .Wrap (_ade ,_ecaa ,"\u0077\u006f\u0072\u0064 \u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073 \u002d \u0078\u0072\u0065\u0073\u0020\u003e\u00204\u0030\u0030");
};};_cgd ,_ ,_fcee :=_edfd (_gfaea );if _fcee !=nil {return nil ,nil ,_g .Wrap (_fcee ,_ecaa ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};_eebe ,_fcee :=_efbcc (_cgd ,_dad );if _fcee !=nil {return nil ,nil ,_g .Wrap (_fcee ,_ecaa ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");
};_gbed :=&Bitmaps {};if _acge ,_fcee =_eebe .ConnComponents (_gbed ,4);_fcee !=nil {return nil ,nil ,_g .Wrap (_fcee ,_ecaa ,"\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 _cfge ,_fcee =_gbed .ClipToBitmap (_gfg );_fcee !=nil {return nil ,nil ,_g .Wrap (_fcee ,_ecaa ,"\u0077o\u0072d\u0020\u0070\u0072\u0065\u0070\u0072\u006f\u0063\u0065\u0073\u0073");};};_cfge ,_ade =_cfge .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );
if _ade !=nil {return nil ,nil ,_g .Wrap (_ade ,_ecaa ,"");};_acge ,_ade =_acge .SelectBySize (maxWidth ,maxHeight ,LocSelectIfBoth ,SizeSelectIfLTE );if _ade !=nil {return nil ,nil ,_g .Wrap (_ade ,_ecaa ,"");};return _cfge ,_acge ,nil ;};func ClipBoxToRectangle (box *_b .Rectangle ,wi ,hi int )(_fcae *_b .Rectangle ,_cdcg error ){const _bfed ="\u0043l\u0069p\u0042\u006f\u0078\u0054\u006fR\u0065\u0063t\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,_g .Error (_bfed ,"\u0027\u0062\u006f\u0078\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");};if box .Min .X >=wi ||box .Min .Y >=hi ||box .Max .X <=0||box .Max .Y <=0{return nil ,_g .Error (_bfed ,"\u0027\u0062\u006fx'\u0020\u006f\u0075\u0074\u0073\u0069\u0064\u0065\u0020\u0072\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065");
};_bedd :=*box ;_fcae =&_bedd ;if _fcae .Min .X < 0{_fcae .Max .X +=_fcae .Min .X ;_fcae .Min .X =0;};if _fcae .Min .Y < 0{_fcae .Max .Y +=_fcae .Min .Y ;_fcae .Min .Y =0;};if _fcae .Max .X > wi {_fcae .Max .X =wi ;};if _fcae .Max .Y > hi {_fcae .Max .Y =hi ;
};return _fcae ,nil ;};func (_acdd *Bitmap )inverseData (){if _bcaf :=_acdd .RasterOperation (0,0,_acdd .Width ,_acdd .Height ,PixNotDst ,nil ,0,0);_bcaf !=nil {_de .Log .Debug ("\u0049n\u0076\u0065\u0072\u0073e\u0020\u0064\u0061\u0074\u0061 \u0066a\u0069l\u0065\u0064\u003a\u0020\u0027\u0025\u0076'",_bcaf );
};if _acdd .Color ==Chocolate {_acdd .Color =Vanilla ;}else {_acdd .Color =Chocolate ;};};func TstFrameBitmap ()*Bitmap {return _efdb .Copy ()};func MakePixelCentroidTab8 ()[]int {return _cddb ()};func TstTSymbol (t *_f .T ,scale ...int )*Bitmap {_gbbdd ,_gffcf :=NewWithData (5,5,[]byte {0xF8,0x20,0x20,0x20,0x20});
_e .NoError (t ,_gffcf );return TstGetScaledSymbol (t ,_gbbdd ,scale ...);};type Selection struct{Height ,Width int ;Cx ,Cy int ;Name string ;Data [][]SelectionValue ;};func _egbe (_aeca *Bitmap ,_egag ,_aafc ,_dfea ,_fdee int ,_befd RasterOperator ,_egbg *Bitmap ,_fcagd ,_fbdd int )error {var (_aggc bool ;
_ddgf bool ;_aagec int ;_efgb int ;_cgagd int ;_fcaf bool ;_fgca byte ;_ccec int ;_adac int ;_bbfcg int ;_ccgb ,_dgff int ;);_gegf :=8-(_egag &7);_dgga :=_eebb [_gegf ];_gfec :=_aeca .RowStride *_aafc +(_egag >>3);_gccg :=_egbg .RowStride *_fbdd +(_fcagd >>3);
if _dfea < _gegf {_aggc =true ;_dgga &=_gebag [8-_gegf +_dfea ];};if !_aggc {_aagec =(_dfea -_gegf )>>3;if _aagec > 0{_ddgf =true ;_efgb =_gfec +1;_cgagd =_gccg +1;};};_ccec =(_egag +_dfea )&7;if !_aggc &&_ccec !=0{_fcaf =true ;_fgca =_gebag [_ccec ];_adac =_gfec +1+_aagec ;
_bbfcg =_gccg +1+_aagec ;};switch _befd {case PixSrc :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],_egbg .Data [_gccg ],_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;};if _ddgf {for _ccgb =0;_ccgb < _fdee ;
_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]=_egbg .Data [_cgagd +_dgff ];};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],_egbg .Data [_bbfcg ],_fgca );
_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixNotSrc :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],^_egbg .Data [_gccg ],_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;};if _ddgf {for _ccgb =0;
_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]=^_egbg .Data [_cgagd +_dgff ];};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],^_egbg .Data [_bbfcg ],_fgca );
_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixSrcOrDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],_egbg .Data [_gccg ]|_aeca .Data [_gfec ],_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;
};if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]|=_egbg .Data [_cgagd +_dgff ];};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],_egbg .Data [_bbfcg ]|_aeca .Data [_adac ],_fgca );
_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixSrcAndDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],_egbg .Data [_gccg ]&_aeca .Data [_gfec ],_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;
};if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]&=_egbg .Data [_cgagd +_dgff ];};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],_egbg .Data [_bbfcg ]&_aeca .Data [_adac ],_fgca );
_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixSrcXorDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],_egbg .Data [_gccg ]^_aeca .Data [_gfec ],_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;
};if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]^=_egbg .Data [_cgagd +_dgff ];};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],_egbg .Data [_bbfcg ]^_aeca .Data [_adac ],_fgca );
_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixNotSrcOrDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],^(_egbg .Data [_gccg ])|_aeca .Data [_gfec ],_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;
};if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]|=^(_egbg .Data [_cgagd +_dgff ]);};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],^(_egbg .Data [_bbfcg ])|_aeca .Data [_adac ],_fgca );
_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixNotSrcAndDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],^(_egbg .Data [_gccg ])&_aeca .Data [_gfec ],_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;
};if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]&=^_egbg .Data [_cgagd +_dgff ];};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],^(_egbg .Data [_bbfcg ])&_aeca .Data [_adac ],_fgca );
_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixSrcOrNotDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],_egbg .Data [_gccg ]|^(_aeca .Data [_gfec ]),_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;
};if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]=_egbg .Data [_cgagd +_dgff ]|^(_aeca .Data [_efgb +_dgff ]);};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;
_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],_egbg .Data [_bbfcg ]|^(_aeca .Data [_adac ]),_fgca );_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixSrcAndNotDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],_egbg .Data [_gccg ]&^(_aeca .Data [_gfec ]),_dgga );
_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;};if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]=_egbg .Data [_cgagd +_dgff ]&^(_aeca .Data [_efgb +_dgff ]);};_efgb +=_aeca .RowStride ;
_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],_egbg .Data [_bbfcg ]&^(_aeca .Data [_adac ]),_fgca );_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixNotPixSrcOrDst :for _ccgb =0;
_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],^(_egbg .Data [_gccg ]|_aeca .Data [_gfec ]),_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;};if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;
_dgff ++{_aeca .Data [_efgb +_dgff ]=^(_egbg .Data [_cgagd +_dgff ]|_aeca .Data [_efgb +_dgff ]);};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],^(_egbg .Data [_bbfcg ]|_aeca .Data [_adac ]),_fgca );
_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixNotPixSrcAndDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],^(_egbg .Data [_gccg ]&_aeca .Data [_gfec ]),_dgga );_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;
};if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]=^(_egbg .Data [_cgagd +_dgff ]&_aeca .Data [_efgb +_dgff ]);};_efgb +=_aeca .RowStride ;_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;
_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],^(_egbg .Data [_bbfcg ]&_aeca .Data [_adac ]),_fgca );_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};case PixNotPixSrcXorDst :for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_gfec ]=_fcac (_aeca .Data [_gfec ],^(_egbg .Data [_gccg ]^_aeca .Data [_gfec ]),_dgga );
_gfec +=_aeca .RowStride ;_gccg +=_egbg .RowStride ;};if _ddgf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{for _dgff =0;_dgff < _aagec ;_dgff ++{_aeca .Data [_efgb +_dgff ]=^(_egbg .Data [_cgagd +_dgff ]^_aeca .Data [_efgb +_dgff ]);};_efgb +=_aeca .RowStride ;
_cgagd +=_egbg .RowStride ;};};if _fcaf {for _ccgb =0;_ccgb < _fdee ;_ccgb ++{_aeca .Data [_adac ]=_fcac (_aeca .Data [_adac ],^(_egbg .Data [_bbfcg ]^_aeca .Data [_adac ]),_fgca );_adac +=_aeca .RowStride ;_bbfcg +=_egbg .RowStride ;};};default:_de .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",_befd );
return _g .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0056\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004c\u006f\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");
};return nil ;};func (_edbc *byWidth )Len ()int {return len (_edbc .Values )};func (_dfbf *Bitmap )RemoveBorder (borderSize int )(*Bitmap ,error ){if borderSize ==0{return _dfbf .Copy (),nil ;};_bbfa ,_cffg :=_dfbf .removeBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize );
if _cffg !=nil {return nil ,_g .Wrap (_cffg ,"\u0052\u0065\u006do\u0076\u0065\u0042\u006f\u0072\u0064\u0065\u0072","");};return _bbfa ,nil ;};const (_ SizeComparison =iota ;SizeSelectIfLT ;SizeSelectIfGT ;SizeSelectIfLTE ;SizeSelectIfGTE ;SizeSelectIfEQ ;
);type SelectionValue int ;func _dfe ()(_ddf [256]uint32 ){for _cfe :=0;_cfe < 256;_cfe ++{if _cfe &0x01!=0{_ddf [_cfe ]|=0xf;};if _cfe &0x02!=0{_ddf [_cfe ]|=0xf0;};if _cfe &0x04!=0{_ddf [_cfe ]|=0xf00;};if _cfe &0x08!=0{_ddf [_cfe ]|=0xf000;};if _cfe &0x10!=0{_ddf [_cfe ]|=0xf0000;
};if _cfe &0x20!=0{_ddf [_cfe ]|=0xf00000;};if _cfe &0x40!=0{_ddf [_cfe ]|=0xf000000;};if _cfe &0x80!=0{_ddf [_cfe ]|=0xf0000000;};};return _ddf ;};func Dilate (d *Bitmap ,s *Bitmap ,sel *Selection )(*Bitmap ,error ){return _gdc (d ,s ,sel )};type LocationFilter int ;
var _edge =[5]int {1,2,3,0,4};func (_fadf *Boxes )makeSizeIndicator (_bdbg ,_cceae int ,_efbc LocationFilter ,_gcadd SizeComparison )*_db .NumSlice {_bfac :=&_db .NumSlice {};var _dacgg ,_fafg ,_gafgf int ;for _ ,_dcbg :=range *_fadf {_dacgg =0;_fafg ,_gafgf =_dcbg .Dx (),_dcbg .Dy ();
switch _efbc {case LocSelectWidth :if (_gcadd ==SizeSelectIfLT &&_fafg < _bdbg )||(_gcadd ==SizeSelectIfGT &&_fafg > _bdbg )||(_gcadd ==SizeSelectIfLTE &&_fafg <=_bdbg )||(_gcadd ==SizeSelectIfGTE &&_fafg >=_bdbg ){_dacgg =1;};case LocSelectHeight :if (_gcadd ==SizeSelectIfLT &&_gafgf < _cceae )||(_gcadd ==SizeSelectIfGT &&_gafgf > _cceae )||(_gcadd ==SizeSelectIfLTE &&_gafgf <=_cceae )||(_gcadd ==SizeSelectIfGTE &&_gafgf >=_cceae ){_dacgg =1;
};case LocSelectIfEither :if (_gcadd ==SizeSelectIfLT &&(_gafgf < _cceae ||_fafg < _bdbg ))||(_gcadd ==SizeSelectIfGT &&(_gafgf > _cceae ||_fafg > _bdbg ))||(_gcadd ==SizeSelectIfLTE &&(_gafgf <=_cceae ||_fafg <=_bdbg ))||(_gcadd ==SizeSelectIfGTE &&(_gafgf >=_cceae ||_fafg >=_bdbg )){_dacgg =1;
};case LocSelectIfBoth :if (_gcadd ==SizeSelectIfLT &&(_gafgf < _cceae &&_fafg < _bdbg ))||(_gcadd ==SizeSelectIfGT &&(_gafgf > _cceae &&_fafg > _bdbg ))||(_gcadd ==SizeSelectIfLTE &&(_gafgf <=_cceae &&_fafg <=_bdbg ))||(_gcadd ==SizeSelectIfGTE &&(_gafgf >=_cceae &&_fafg >=_bdbg )){_dacgg =1;
};};_bfac .AddInt (_dacgg );};return _bfac ;};func TstImageBitmap ()*Bitmap {return _cfdf .Copy ()};func _acca (_gccb *Bitmap ,_abde ,_cdag int ,_eafd ,_addf int ,_gfdc RasterOperator ,_fded *Bitmap ,_efaa ,_dbdb int )error {var _ecbdg ,_gdge ,_bcfb ,_fdgag int ;
if _abde < 0{_efaa -=_abde ;_eafd +=_abde ;_abde =0;};if _efaa < 0{_abde -=_efaa ;_eafd +=_efaa ;_efaa =0;};_ecbdg =_abde +_eafd -_gccb .Width ;if _ecbdg > 0{_eafd -=_ecbdg ;};_gdge =_efaa +_eafd -_fded .Width ;if _gdge > 0{_eafd -=_gdge ;};if _cdag < 0{_dbdb -=_cdag ;
_addf +=_cdag ;_cdag =0;};if _dbdb < 0{_cdag -=_dbdb ;_addf +=_dbdb ;_dbdb =0;};_bcfb =_cdag +_addf -_gccb .Height ;if _bcfb > 0{_addf -=_bcfb ;};_fdgag =_dbdb +_addf -_fded .Height ;if _fdgag > 0{_addf -=_fdgag ;};if _eafd <=0||_addf <=0{return nil ;};
var _cccb error ;switch {case _abde &7==0&&_efaa &7==0:_cccb =_dfdg (_gccb ,_abde ,_cdag ,_eafd ,_addf ,_gfdc ,_fded ,_efaa ,_dbdb );case _abde &7==_efaa &7:_cccb =_egbe (_gccb ,_abde ,_cdag ,_eafd ,_addf ,_gfdc ,_fded ,_efaa ,_dbdb );default:_cccb =_bfabg (_gccb ,_abde ,_cdag ,_eafd ,_addf ,_gfdc ,_fded ,_efaa ,_dbdb );
};if _cccb !=nil {return _g .Wrap (_cccb ,"r\u0061\u0073\u0074\u0065\u0072\u004f\u0070\u004c\u006f\u0077","");};return nil ;};func _bggf ()(_ggd []byte ){_ggd =make ([]byte ,256);for _gcad :=0;_gcad < 256;_gcad ++{_dae :=byte (_gcad );_ggd [_dae ]=(_dae &0x01)|((_dae &0x04)>>1)|((_dae &0x10)>>2)|((_dae &0x40)>>3)|((_dae &0x02)<<3)|((_dae &0x08)<<2)|((_dae &0x20)<<1)|(_dae &0x80);
};return _ggd ;};func _bccf (_ecgc ,_befad ,_gacc *Bitmap ,_gbeea int )(*Bitmap ,error ){const _edbac ="\u0073\u0065\u0065\u0064\u0046\u0069\u006c\u006c\u0042i\u006e\u0061\u0072\u0079";if _befad ==nil {return nil ,_g .Error (_edbac ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _gacc ==nil {return nil ,_g .Error (_edbac ,"'\u006da\u0073\u006b\u0027\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");};if _gbeea !=4&&_gbeea !=8{return nil ,_g .Error (_edbac ,"\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 _cbceb error ;_ecgc ,_cbceb =_bgff (_ecgc ,_befad );if _cbceb !=nil {return nil ,_g .Wrap (_cbceb ,_edbac ,"\u0063o\u0070y\u0020\u0073\u006f\u0075\u0072c\u0065\u0020t\u006f\u0020\u0027\u0064\u0027");};_gbff :=_befad .createTemplate ();_gacc .setPadBits (0);
for _gedb :=0;_gedb < _facgc ;_gedb ++{_gbff ,_cbceb =_bgff (_gbff ,_ecgc );if _cbceb !=nil {return nil ,_g .Wrapf (_cbceb ,_edbac ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gedb );};if _cbceb =_eaac (_ecgc ,_gacc ,_gbeea );
_cbceb !=nil {return nil ,_g .Wrapf (_cbceb ,_edbac ,"\u0069\u0074\u0065\u0072\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0025\u0064",_gedb );};if _gbff .Equals (_ecgc ){break ;};};return _ecgc ,nil ;};func _edfd (_dbfg *Bitmap )(_cccg *Bitmap ,_eege int ,_eedg error ){const _fcf ="\u0042i\u0074\u006d\u0061\u0070.\u0077\u006f\u0072\u0064\u004da\u0073k\u0042y\u0044\u0069\u006c\u0061\u0074\u0069\u006fn";
if _dbfg ==nil {return nil ,0,_g .Errorf (_fcf ,"\u0027\u0073\u0027\u0020bi\u0074\u006d\u0061\u0070\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006ee\u0064");};var _dfag ,_gefe *Bitmap ;if _dfag ,_eedg =_bgff (nil ,_dbfg );_eedg !=nil {return nil ,0,_g .Wrap (_eedg ,_fcf ,"\u0063\u006f\u0070\u0079\u0020\u0027\u0073\u0027");
};var (_bbae [13]int ;_bbde ,_aegf int ;);_afea :=12;_geeb :=_db .NewNumSlice (_afea +1);_adb :=_db .NewNumSlice (_afea +1);var _fdfc *Boxes ;for _cecd :=0;_cecd <=_afea ;_cecd ++{if _cecd ==0{if _gefe ,_eedg =_bgff (nil ,_dfag );_eedg !=nil {return nil ,0,_g .Wrap (_eedg ,_fcf ,"\u0066i\u0072\u0073\u0074\u0020\u0062\u006d2");
};}else {if _gefe ,_eedg =_ceb (_dfag ,MorphProcess {Operation :MopDilation ,Arguments :[]int {2,1}});_eedg !=nil {return nil ,0,_g .Wrap (_eedg ,_fcf ,"\u0064\u0069\u006ca\u0074\u0069\u006f\u006e\u0020\u0062\u006d\u0032");};};if _fdfc ,_eedg =_gefe .connComponentsBB (4);
_eedg !=nil {return nil ,0,_g .Wrap (_eedg ,_fcf ,"");};_bbae [_cecd ]=len (*_fdfc );_geeb .AddInt (_bbae [_cecd ]);switch _cecd {case 0:_bbde =_bbae [0];default:_aegf =_bbae [_cecd -1]-_bbae [_cecd ];_adb .AddInt (_aegf );};_dfag =_gefe ;};_agcef :=true ;
_edace :=2;var _edeec ,_bcba int ;for _cffd :=1;_cffd < len (*_adb );_cffd ++{if _edeec ,_eedg =_geeb .GetInt (_cffd );_eedg !=nil {return nil ,0,_g .Wrap (_eedg ,_fcf ,"\u0043\u0068\u0065\u0063ki\u006e\u0067\u0020\u0062\u0065\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0069o\u006e");
};if _agcef &&_edeec < int (0.3*float32 (_bbde )){_edace =_cffd +1;_agcef =false ;};if _aegf ,_eedg =_adb .GetInt (_cffd );_eedg !=nil {return nil ,0,_g .Wrap (_eedg ,_fcf ,"\u0067\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u006ea\u0044\u0069\u0066\u0066");
};if _aegf > _bcba {_bcba =_aegf ;};};_bfgfb :=_dbfg .XResolution ;if _bfgfb ==0{_bfgfb =150;};if _bfgfb > 110{_edace ++;};if _edace < 2{_de .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");
_edace =2;};_eege =_edace +1;if _cccg ,_eedg =_becd (nil ,_dbfg ,_edace +1,1);_eedg !=nil {return nil ,0,_g .Wrap (_eedg ,_fcf ,"\u0067\u0065\u0074\u0074in\u0067\u0020\u006d\u0061\u0073\u006b\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};return _cccg ,_eege ,nil ;
};func Centroids (bms []*Bitmap )(*Points ,error ){_ddga :=make ([]Point ,len (bms ));_deed :=_cddb ();_fabg :=_eadbd ();var _fecgc error ;for _fefa ,_fafgd :=range bms {_ddga [_fefa ],_fecgc =_fafgd .centroid (_deed ,_fabg );if _fecgc !=nil {return nil ,_fecgc ;
};};_cgag :=Points (_ddga );return &_cgag ,nil ;};func _dag (_edba *Bitmap ,_ccca ,_ddce int ,_gaff ,_fgde int ,_dedf RasterOperator ){var (_ffbd int ;_gbcec byte ;_fcagc ,_ebd int ;_dbece int ;);_gabb :=_gaff >>3;_fafb :=_gaff &7;if _fafb > 0{_gbcec =_gebag [_fafb ];
};_ffbd =_edba .RowStride *_ddce +(_ccca >>3);switch _dedf {case PixClr :for _fcagc =0;_fcagc < _fgde ;_fcagc ++{_dbece =_ffbd +_fcagc *_edba .RowStride ;for _ebd =0;_ebd < _gabb ;_ebd ++{_edba .Data [_dbece ]=0x0;_dbece ++;};if _fafb > 0{_edba .Data [_dbece ]=_fcac (_edba .Data [_dbece ],0x0,_gbcec );
};};case PixSet :for _fcagc =0;_fcagc < _fgde ;_fcagc ++{_dbece =_ffbd +_fcagc *_edba .RowStride ;for _ebd =0;_ebd < _gabb ;_ebd ++{_edba .Data [_dbece ]=0xff;_dbece ++;};if _fafb > 0{_edba .Data [_dbece ]=_fcac (_edba .Data [_dbece ],0xff,_gbcec );};};
case PixNotDst :for _fcagc =0;_fcagc < _fgde ;_fcagc ++{_dbece =_ffbd +_fcagc *_edba .RowStride ;for _ebd =0;_ebd < _gabb ;_ebd ++{_edba .Data [_dbece ]=^_edba .Data [_dbece ];_dbece ++;};if _fafb > 0{_edba .Data [_dbece ]=_fcac (_edba .Data [_dbece ],^_edba .Data [_dbece ],_gbcec );
};};};};const (Vanilla Color =iota ;Chocolate ;);func (_fdae *Bitmap )connComponentsBitmapsBB (_cgc *Bitmaps ,_bbge int )(_cgbb *Boxes ,_beed error ){const _dcbe ="\u0063\u006f\u006enC\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0069\u0074\u006d\u0061\u0070\u0073\u0042\u0042";
if _bbge !=4&&_bbge !=8{return nil ,_g .Error (_dcbe ,"\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 _cgc ==nil {return nil ,_g .Error (_dcbe ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
};if len (_cgc .Values )> 0{return nil ,_g .Error (_dcbe ,"\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 _fdae .Zero (){return &Boxes {},nil ;};
var (_fbca ,_bfge ,_gaada ,_ggad *Bitmap ;);_fdae .setPadBits (0);if _fbca ,_beed =_bgff (nil ,_fdae );_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"\u0062\u006d\u0031");};if _bfge ,_beed =_bgff (nil ,_fdae );_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"\u0062\u006d\u0032");
};_dbabb :=&_db .Stack {};_dbabb .Aux =&_db .Stack {};_cgbb =&Boxes {};var (_fecg ,_fba int ;_gfabb _b .Point ;_befc bool ;_fdc *_b .Rectangle ;);for {if _gfabb ,_befc ,_beed =_fbca .nextOnPixel (_fecg ,_fba );_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"");
};if !_befc {break ;};if _fdc ,_beed =_adbc (_fbca ,_dbabb ,_gfabb .X ,_gfabb .Y ,_bbge );_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"");};if _beed =_cgbb .Add (_fdc );_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"");};if _gaada ,_beed =_fbca .clipRectangle (_fdc ,nil );
_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"\u0062\u006d\u0033");};if _ggad ,_beed =_bfge .clipRectangle (_fdc ,nil );_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"\u0062\u006d\u0034");};if _ ,_beed =_acaf (_gaada ,_gaada ,_ggad );_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"\u0062m\u0033\u0020\u005e\u0020\u0062\u006d4");
};if _beed =_bfge .RasterOperation (_fdc .Min .X ,_fdc .Min .Y ,_fdc .Dx (),_fdc .Dy (),PixSrcXorDst ,_gaada ,0,0);_beed !=nil {return nil ,_g .Wrap (_beed ,_dcbe ,"\u0062\u006d\u0032\u0020\u002d\u0058\u004f\u0052\u002d>\u0020\u0062\u006d\u0033");};_cgc .AddBitmap (_gaada );
_fecg =_gfabb .X ;_fba =_gfabb .Y ;};_cgc .Boxes =*_cgbb ;return _cgbb ,nil ;};func (_dbab *Bitmap )CountPixels ()int {return _dbab .countPixels ()};func (_cbec *Bitmap )thresholdPixelSum (_cbb int )bool {var (_bdae int ;_dbc uint8 ;_ebc byte ;_cgbd int ;
);_gcag :=_cbec .RowStride ;_ddeeg :=uint (_cbec .Width &0x07);if _ddeeg !=0{_dbc =uint8 ((0xff<<(8-_ddeeg ))&0xff);_gcag --;};for _cceb :=0;_cceb < _cbec .Height ;_cceb ++{for _cgbd =0;_cgbd < _gcag ;_cgbd ++{_ebc =_cbec .Data [_cceb *_cbec .RowStride +_cgbd ];
_bdae +=int (_fee [_ebc ]);};if _ddeeg !=0{_ebc =_cbec .Data [_cceb *_cbec .RowStride +_cgbd ]&_dbc ;_bdae +=int (_fee [_ebc ]);};if _bdae > _cbb {return true ;};};return false ;};func _efbcc (_adafg *Bitmap ,_eefb int )(*Bitmap ,error ){const _ceacc ="\u0065x\u0070a\u006e\u0064\u0052\u0065\u0070\u006c\u0069\u0063\u0061\u0074\u0065";
if _adafg ==nil {return nil ,_g .Error (_ceacc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _eefb <=0{return nil ,_g .Error (_ceacc ,"i\u006e\u0076\u0061\u006cid\u0020f\u0061\u0063\u0074\u006f\u0072 \u002d\u0020\u003c\u003d\u0020\u0030");
};if _eefb ==1{_gggce ,_eedcd :=_bgff (nil ,_adafg );if _eedcd !=nil {return nil ,_g .Wrap (_eedcd ,_ceacc ,"\u0066\u0061\u0063\u0074\u006f\u0072\u0020\u003d\u0020\u0031");};return _gggce ,nil ;};_ddgc ,_gcc :=_acbb (_adafg ,_eefb ,_eefb );if _gcc !=nil {return nil ,_g .Wrap (_gcc ,_ceacc ,"");
};return _ddgc ,nil ;};func _edgg (_fgcgd *Bitmap ,_gffad *_db .Stack ,_fbbc ,_facga int )(_dedd *_b .Rectangle ,_cdbe error ){const _eegc ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";if _fgcgd ==nil {return nil ,_g .Error (_eegc ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");
};if _gffad ==nil {return nil ,_g .Error (_eegc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");};_gaef ,_eeebf :=_fgcgd .Width ,_fgcgd .Height ;_beddf :=_gaef -1;_fbaef :=_eeebf -1;if _fbbc < 0||_fbbc > _beddf ||_facga < 0||_facga > _fbaef ||!_fgcgd .GetPixel (_fbbc ,_facga ){return nil ,nil ;
};var _cgac *_b .Rectangle ;_cgac ,_cdbe =Rect (100000,100000,0,0);if _cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"");};if _cdbe =_gebg (_gffad ,_fbbc ,_fbbc ,_facga ,1,_fbaef ,_cgac );_cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
};if _cdbe =_gebg (_gffad ,_fbbc ,_fbbc ,_facga +1,-1,_fbaef ,_cgac );_cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};_cgac .Min .X ,_cgac .Max .X =_fbbc ,_fbbc ;
_cgac .Min .Y ,_cgac .Max .Y =_facga ,_facga ;var (_dffb *fillSegment ;_cfad int ;);for _gffad .Len ()> 0{if _dffb ,_cdbe =_dgdee (_gffad );_cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"");};_facga =_dffb ._gdda ;for _fbbc =_dffb ._fgeg ;_fbbc >=0&&_fgcgd .GetPixel (_fbbc ,_facga );
_fbbc --{if _cdbe =_fgcgd .SetPixel (_fbbc ,_facga ,0);_cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"");};};if _fbbc >=_dffb ._fgeg {for _fbbc ++;_fbbc <=_dffb ._efcee &&_fbbc <=_beddf &&!_fgcgd .GetPixel (_fbbc ,_facga );_fbbc ++{};_cfad =_fbbc ;if _fbbc > _dffb ._efcee ||_fbbc > _beddf {continue ;
};}else {_cfad =_fbbc +1;if _cfad < _dffb ._fgeg -1{if _cdbe =_gebg (_gffad ,_cfad ,_dffb ._fgeg -1,_dffb ._gdda ,-_dffb ._gfff ,_fbaef ,_cgac );_cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_fbbc =_dffb ._fgeg +1;};for {for ;_fbbc <=_beddf &&_fgcgd .GetPixel (_fbbc ,_facga );_fbbc ++{if _cdbe =_fgcgd .SetPixel (_fbbc ,_facga ,0);_cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _cdbe =_gebg (_gffad ,_cfad ,_fbbc -1,_dffb ._gdda ,_dffb ._gfff ,_fbaef ,_cgac );
_cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _fbbc > _dffb ._efcee +1{if _cdbe =_gebg (_gffad ,_dffb ._efcee +1,_fbbc -1,_dffb ._gdda ,-_dffb ._gfff ,_fbaef ,_cgac );_cdbe !=nil {return nil ,_g .Wrap (_cdbe ,_eegc ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _fbbc ++;_fbbc <=_dffb ._efcee &&_fbbc <=_beddf &&!_fgcgd .GetPixel (_fbbc ,_facga );_fbbc ++{};_cfad =_fbbc ;if _fbbc > _dffb ._efcee ||_fbbc > _beddf {break ;};};};_cgac .Max .X ++;_cgac .Max .Y ++;return _cgac ,nil ;};func _fda (_ebafb ,_faa *Bitmap ,_ int ,_dga []byte ,_fbd int )(_cdd error ){const _ccf ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0032";
var (_def ,_fccd ,_cga ,_cdb ,_gag ,_da ,_agb ,_dba int ;_abd ,_aae ,_dda ,_cfa uint32 ;_fgf ,_aca byte ;_ged uint16 ;);_bfd :=make ([]byte ,4);_ece :=make ([]byte ,4);for _cga =0;_cga < _ebafb .Height -1;_cga ,_cdb =_cga +2,_cdb +1{_def =_cga *_ebafb .RowStride ;
_fccd =_cdb *_faa .RowStride ;for _gag ,_da =0,0;_gag < _fbd ;_gag ,_da =_gag +4,_da +1{for _agb =0;_agb < 4;_agb ++{_dba =_def +_gag +_agb ;if _dba <=len (_ebafb .Data )-1&&_dba < _def +_ebafb .RowStride {_bfd [_agb ]=_ebafb .Data [_dba ];}else {_bfd [_agb ]=0x00;
};_dba =_def +_ebafb .RowStride +_gag +_agb ;if _dba <=len (_ebafb .Data )-1&&_dba < _def +(2*_ebafb .RowStride ){_ece [_agb ]=_ebafb .Data [_dba ];}else {_ece [_agb ]=0x00;};};_abd =_ge .BigEndian .Uint32 (_bfd );_aae =_ge .BigEndian .Uint32 (_ece );_dda =_abd &_aae ;
_dda |=_dda <<1;_cfa =_abd |_aae ;_cfa &=_cfa <<1;_aae =_dda |_cfa ;_aae &=0xaaaaaaaa;_abd =_aae |(_aae <<7);_fgf =byte (_abd >>24);_aca =byte ((_abd >>8)&0xff);_dba =_fccd +_da ;if _dba +1==len (_faa .Data )-1||_dba +1>=_fccd +_faa .RowStride {if _cdd =_faa .SetByte (_dba ,_dga [_fgf ]);
_cdd !=nil {return _g .Wrapf (_cdd ,_ccf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_dba );};}else {_ged =(uint16 (_dga [_fgf ])<<8)|uint16 (_dga [_aca ]);if _cdd =_faa .setTwoBytes (_dba ,_ged );_cdd !=nil {return _g .Wrapf (_cdd ,_ccf ,"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",_dba );
};_da ++;};};};return nil ;};var _ _dd .Interface =&ClassedPoints {};func (_egbd *Bitmaps )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_efcf *Bitmaps ,_ffgd error ){const _eebg ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0053\u0065\u006ce\u0063\u0074\u0042\u0079Si\u007a\u0065";
if _egbd ==nil {return nil ,_g .Error (_eebg ,"\u0027\u0062\u0027 B\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_g .Errorf (_eebg ,"\u0070\u0072\u006f\u0076\u0069d\u0065\u0064\u0020\u0069\u006e\u0076\u0061\u006c\u0069\u0064\u0020\u006c\u006fc\u0061\u0074\u0069\u006f\u006e\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );
};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE ,SizeSelectIfEQ :default:return nil ,_g .Errorf (_eebg ,"\u0069\u006e\u0076\u0061li\u0064\u0020\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u003a\u0020\u0027\u0025d\u0027",relation );
};_dccc ,_ffgd :=_egbd .makeSizeIndicator (width ,height ,tp ,relation );if _ffgd !=nil {return nil ,_g .Wrap (_ffgd ,_eebg ,"");};_efcf ,_ffgd =_egbd .selectByIndicator (_dccc );if _ffgd !=nil {return nil ,_g .Wrap (_ffgd ,_eebg ,"");};return _efcf ,nil ;
};func _cff (_dbb ,_gfe int )*Bitmap {return &Bitmap {Width :_dbb ,Height :_gfe ,RowStride :(_dbb +7)>>3};};func TstWordBitmap (t *_f .T ,scale ...int )*Bitmap {_acef :=1;if len (scale )> 0{_acef =scale [0];};_afca :=3;_cbeg :=9+7+15+2*_afca ;_bfcae :=5+_afca +5;
_ggcde :=New (_cbeg *_acef ,_bfcae *_acef );_beddd :=&Bitmaps {};var _dfbfd *int ;_afca *=_acef ;_gdefb :=0;_dfbfd =&_gdefb ;_bebe :=0;_aagg :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );_aagg =TstOSymbol (t ,scale ...);
TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,_afca );_aagg =TstISymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );_aagg =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,_afca );_aagg =TstNSymbol (t ,scale ...);
TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );_aagg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );_aagg =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,0);*_dfbfd =0;_bebe =5*_acef +_afca ;
_aagg =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );_aagg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,_afca );_aagg =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );
_aagg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );_aagg =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );_aagg =TstESymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,1*_acef );
_aagg =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_beddd ,_aagg ,_dfbfd ,_bebe ,0);TstWriteSymbols (t ,_beddd ,_ggcde );return _ggcde ;};func _gcee (_ggbf ,_fdfe int )int {if _ggbf > _fdfe {return _ggbf ;};return _fdfe ;};func TstImageBitmapData ()[]byte {return _cfdf .Data };
func (_acd *Bitmap )GetBitOffset (x int )int {return x &0x07};func (_fade Points )YSorter ()func (_cafb ,_egca int )bool {return func (_fdfb ,_egb int )bool {return _fade [_fdfb ].Y < _fade [_egb ].Y };};func _bccb (_gdbf ,_cdcf *Bitmap ,_cdda *Selection )(*Bitmap ,error ){const _ecbd ="c\u006c\u006f\u0073\u0065\u0042\u0069\u0074\u006d\u0061\u0070";
var _aafb error ;if _gdbf ,_aafb =_aaa (_gdbf ,_cdcf ,_cdda );_aafb !=nil {return nil ,_aafb ;};_ceea ,_aafb :=_gdc (nil ,_cdcf ,_cdda );if _aafb !=nil {return nil ,_g .Wrap (_aafb ,_ecbd ,"");};if _ ,_aafb =_adbe (_gdbf ,_ceea ,_cdda );_aafb !=nil {return nil ,_g .Wrap (_aafb ,_ecbd ,"");
};return _gdbf ,nil ;};func (_gcfac *Bitmaps )ClipToBitmap (s *Bitmap )(*Bitmaps ,error ){const _gfbg ="B\u0069t\u006d\u0061\u0070\u0073\u002e\u0043\u006c\u0069p\u0054\u006f\u0042\u0069tm\u0061\u0070";if _gcfac ==nil {return nil ,_g .Error (_gfbg ,"\u0042\u0069\u0074\u006dap\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if s ==nil {return nil ,_g .Error (_gfbg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};_cgef :=len (_gcfac .Values );_bgdf :=&Bitmaps {Values :make ([]*Bitmap ,_cgef ),Boxes :make ([]*_b .Rectangle ,_cgef )};
var (_ddab ,_ddbg *Bitmap ;_adea *_b .Rectangle ;_facbf error ;);for _dbbf :=0;_dbbf < _cgef ;_dbbf ++{if _ddab ,_facbf =_gcfac .GetBitmap (_dbbf );_facbf !=nil {return nil ,_g .Wrap (_facbf ,_gfbg ,"");};if _adea ,_facbf =_gcfac .GetBox (_dbbf );_facbf !=nil {return nil ,_g .Wrap (_facbf ,_gfbg ,"");
};if _ddbg ,_facbf =s .clipRectangle (_adea ,nil );_facbf !=nil {return nil ,_g .Wrap (_facbf ,_gfbg ,"");};if _ddbg ,_facbf =_ddbg .And (_ddab );_facbf !=nil {return nil ,_g .Wrap (_facbf ,_gfbg ,"");};_bgdf .Values [_dbbf ]=_ddbg ;_bgdf .Boxes [_dbbf ]=_adea ;
};return _bgdf ,nil ;};func (_aaec *Bitmap )setPadBits (_gcfad int ){_egcd :=8-_aaec .Width %8;if _egcd ==8{return ;};_cfbc :=_aaec .Width /8;_gbgd :=_eebb [_egcd ];if _gcfad ==0{_gbgd ^=_gbgd ;};var _cddg int ;for _cgbee :=0;_cgbee < _aaec .Height ;_cgbee ++{_cddg =_cgbee *_aaec .RowStride +_cfbc ;
if _gcfad ==0{_aaec .Data [_cddg ]&=_gbgd ;}else {_aaec .Data [_cddg ]|=_gbgd ;};};};const (AsymmetricMorphBC BoundaryCondition =iota ;SymmetricMorphBC ;);func _fc (_ef ,_fg *Bitmap )(_ed error ){const _cc ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0032";
_ec :=_fg .RowStride ;_fd :=_ef .RowStride ;var (_a byte ;_fgg uint16 ;_ecd ,_aa ,_ac ,_dca ,_gg int ;);for _ac =0;_ac < _fg .Height ;_ac ++{_ecd =_ac *_ec ;_aa =2*_ac *_fd ;for _dca =0;_dca < _ec ;_dca ++{_a =_fg .Data [_ecd +_dca ];_fgg =_bged [_a ];
_gg =_aa +_dca *2;if _ef .RowStride !=_fg .RowStride *2&&(_dca +1)*2> _ef .RowStride {_ed =_ef .SetByte (_gg ,byte (_fgg >>8));}else {_ed =_ef .setTwoBytes (_gg ,_fgg );};if _ed !=nil {return _g .Wrap (_ed ,_cc ,"");};};for _dca =0;_dca < _fd ;_dca ++{_gg =_aa +_fd +_dca ;
_a =_ef .Data [_aa +_dca ];if _ed =_ef .SetByte (_gg ,_a );_ed !=nil {return _g .Wrapf (_ed ,_cc ,"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",_aa +_dca ,_aa +_fd +_dca );
};};};return nil ;};func (_dddc *Bitmaps )SortByHeight (){_cgfe :=(*byHeight )(_dddc );_dd .Sort (_cgfe )};func (_bdbf *Boxes )Get (i int )(*_b .Rectangle ,error ){const _aabc ="\u0042o\u0078\u0065\u0073\u002e\u0047\u0065t";if _bdbf ==nil {return nil ,_g .Error (_aabc ,"\u0027\u0042\u006f\u0078es\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if i > len (*_bdbf )-1{return nil ,_g .Errorf (_aabc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return (*_bdbf )[i ],nil ;};func (_daa *Bitmap )addBorderGeneral (_bcf ,_agce ,_eeee ,_decg int ,_gbeb int )(*Bitmap ,error ){const _acc ="\u0061\u0064d\u0042\u006f\u0072d\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";
if _bcf < 0||_agce < 0||_eeee < 0||_decg < 0{return nil ,_g .Error (_acc ,"n\u0065\u0067\u0061\u0074iv\u0065 \u0062\u006f\u0072\u0064\u0065r\u0020\u0061\u0064\u0064\u0065\u0064");};_ada ,_aee :=_daa .Width ,_daa .Height ;_ecab :=_ada +_bcf +_agce ;_acbe :=_aee +_eeee +_decg ;
_faag :=New (_ecab ,_acbe );_faag .Color =_daa .Color ;_baf :=PixClr ;if _gbeb > 0{_baf =PixSet ;};_gbgg :=_faag .RasterOperation (0,0,_bcf ,_acbe ,_baf ,nil ,0,0);if _gbgg !=nil {return nil ,_g .Wrap (_gbgg ,_acc ,"\u006c\u0065\u0066\u0074");};_gbgg =_faag .RasterOperation (_ecab -_agce ,0,_agce ,_acbe ,_baf ,nil ,0,0);
if _gbgg !=nil {return nil ,_g .Wrap (_gbgg ,_acc ,"\u0072\u0069\u0067h\u0074");};_gbgg =_faag .RasterOperation (0,0,_ecab ,_eeee ,_baf ,nil ,0,0);if _gbgg !=nil {return nil ,_g .Wrap (_gbgg ,_acc ,"\u0074\u006f\u0070");};_gbgg =_faag .RasterOperation (0,_acbe -_decg ,_ecab ,_decg ,_baf ,nil ,0,0);
if _gbgg !=nil {return nil ,_g .Wrap (_gbgg ,_acc ,"\u0062\u006f\u0074\u0074\u006f\u006d");};_gbgg =_faag .RasterOperation (_bcf ,_eeee ,_ada ,_aee ,PixSrc ,_daa ,0,0);if _gbgg !=nil {return nil ,_g .Wrap (_gbgg ,_acc ,"\u0063\u006f\u0070\u0079");};return _faag ,nil ;
};var MorphBC BoundaryCondition ;func _becd (_ccgg ,_fcbg *Bitmap ,_aced ,_febc int )(*Bitmap ,error ){const _cafg ="\u0063\u006c\u006f\u0073\u0065\u0042\u0072\u0069\u0063\u006b";if _fcbg ==nil {return nil ,_g .Error (_cafg ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _aced < 1||_febc < 1{return nil ,_g .Error (_cafg ,"\u0068S\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0053\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");};if _aced ==1&&_febc ==1{return _fcbg .Copy (),nil ;};if _aced ==1||_febc ==1{_eabca :=SelCreateBrick (_febc ,_aced ,_febc /2,_aced /2,SelHit );
var _dbfe error ;_ccgg ,_dbfe =_bccb (_ccgg ,_fcbg ,_eabca );if _dbfe !=nil {return nil ,_g .Wrap (_dbfe ,_cafg ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};
return _ccgg ,nil ;};_cafd :=SelCreateBrick (1,_aced ,0,_aced /2,SelHit );_abed :=SelCreateBrick (_febc ,1,_febc /2,0,SelHit );_cbae ,_acde :=_gdc (nil ,_fcbg ,_cafd );if _acde !=nil {return nil ,_g .Wrap (_acde ,_cafg ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _ccgg ,_acde =_gdc (_ccgg ,_cbae ,_abed );_acde !=nil {return nil ,_g .Wrap (_acde ,_cafg ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};if _ ,_acde =_adbe (_cbae ,_ccgg ,_cafd );_acde !=nil {return nil ,_g .Wrap (_acde ,_cafg ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};if _ ,_acde =_adbe (_ccgg ,_cbae ,_abed );_acde !=nil {return nil ,_g .Wrap (_acde ,_cafg ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _ccgg ,nil ;};type Points []Point ;func (_cdf *Bitmap )equivalent (_bbfc *Bitmap )bool {if _cdf ==_bbfc {return true ;
};if !_cdf .SizesEqual (_bbfc ){return false ;};_gcfa :=_cfegd (_cdf ,_bbfc ,CmbOpXor );_degd :=_cdf .countPixels ();_caeg :=int (0.25*float32 (_degd ));if _gcfa .thresholdPixelSum (_caeg ){return false ;};var (_fea [9][9]int ;_bbc [18][9]int ;_adaf [9][18]int ;
_aff int ;_ggg int ;);_eedaf :=9;_gba :=_cdf .Height /_eedaf ;_fgb :=_cdf .Width /_eedaf ;_cab ,_fcd :=_gba /2,_fgb /2;if _gba < _fgb {_cab =_fgb /2;_fcd =_gba /2;};_ebe :=float64 (_cab )*float64 (_fcd )*_gf .Pi ;_agdbd :=int (float64 (_gba *_fgb /2)*0.9);
_gfacc :=int (float64 (_fgb *_gba /2)*0.9);for _caae :=0;_caae < _eedaf ;_caae ++{_fcgd :=_fgb *_caae +_aff ;var _fgcg int ;if _caae ==_eedaf -1{_aff =0;_fgcg =_cdf .Width ;}else {_fgcg =_fcgd +_fgb ;if ((_cdf .Width -_aff )%_eedaf )> 0{_aff ++;_fgcg ++;
};};for _gfd :=0;_gfd < _eedaf ;_gfd ++{_fde :=_gba *_gfd +_ggg ;var _cef int ;if _gfd ==_eedaf -1{_ggg =0;_cef =_cdf .Height ;}else {_cef =_fde +_gba ;if (_cdf .Height -_ggg )%_eedaf > 0{_ggg ++;_cef ++;};};var _ffef ,_feca ,_dffg ,_dbfd int ;_ddee :=(_fcgd +_fgcg )/2;
_dcaa :=(_fde +_cef )/2;for _cdff :=_fcgd ;_cdff < _fgcg ;_cdff ++{for _cgf :=_fde ;_cgf < _cef ;_cgf ++{if _gcfa .GetPixel (_cdff ,_cgf ){if _cdff < _ddee {_ffef ++;}else {_feca ++;};if _cgf < _dcaa {_dbfd ++;}else {_dffg ++;};};};};_fea [_caae ][_gfd ]=_ffef +_feca ;
_bbc [_caae *2][_gfd ]=_ffef ;_bbc [_caae *2+1][_gfd ]=_feca ;_adaf [_caae ][_gfd *2]=_dbfd ;_adaf [_caae ][_gfd *2+1]=_dffg ;};};for _agbf :=0;_agbf < _eedaf *2-1;_agbf ++{for _dgb :=0;_dgb < (_eedaf -1);_dgb ++{var _abc int ;for _ddeg :=0;_ddeg < 2;_ddeg ++{for _dbbc :=0;
_dbbc < 2;_dbbc ++{_abc +=_bbc [_agbf +_ddeg ][_dgb +_dbbc ];};};if _abc > _gfacc {return false ;};};};for _affa :=0;_affa < (_eedaf -1);_affa ++{for _bfab :=0;_bfab < ((_eedaf *2)-1);_bfab ++{var _gacf int ;for _bag :=0;_bag < 2;_bag ++{for _bgabg :=0;
_bgabg < 2;_bgabg ++{_gacf +=_adaf [_affa +_bag ][_bfab +_bgabg ];};};if _gacf > _agdbd {return false ;};};};for _ddd :=0;_ddd < (_eedaf -2);_ddd ++{for _afd :=0;_afd < (_eedaf -2);_afd ++{var _edec ,_fgcc int ;for _fccg :=0;_fccg < 3;_fccg ++{for _ccd :=0;
_ccd < 3;_ccd ++{if _fccg ==_ccd {_edec +=_fea [_ddd +_fccg ][_afd +_ccd ];};if (2-_fccg )==_ccd {_fgcc +=_fea [_ddd +_fccg ][_afd +_ccd ];};};};if _edec > _gfacc ||_fgcc > _gfacc {return false ;};};};for _faac :=0;_faac < (_eedaf -1);_faac ++{for _cbge :=0;
_cbge < (_eedaf -1);_cbge ++{var _fcdb int ;for _dbfdf :=0;_dbfdf < 2;_dbfdf ++{for _dabc :=0;_dabc < 2;_dabc ++{_fcdb +=_fea [_faac +_dbfdf ][_cbge +_dabc ];};};if float64 (_fcdb )> _ebe {return false ;};};};return true ;};func TstESymbol (t *_f .T ,scale ...int )*Bitmap {_efbbg ,_bgbdg :=NewWithData (4,5,[]byte {0xF0,0x80,0xE0,0x80,0xF0});
_e .NoError (t ,_bgbdg );return TstGetScaledSymbol (t ,_efbbg ,scale ...);};type BitmapsArray struct{Values []*Bitmaps ;Boxes []*_b .Rectangle ;};func TstNSymbol (t *_f .T ,scale ...int )*Bitmap {_bfff ,_abdgd :=NewWithData (4,5,[]byte {0x90,0xD0,0xB0,0x90,0x90});
_e .NoError (t ,_abdgd );return TstGetScaledSymbol (t ,_bfff ,scale ...);};func (_bdgd *Bitmap )GetByte (index int )(byte ,error ){if index > len (_bdgd .Data )-1||index < 0{return 0,_g .Errorf ("\u0047e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x:\u0020\u0025\u0064\u0020\u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006eg\u0065",index );
};return _bdgd .Data [index ],nil ;};var (_gebag =[]byte {0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF};_eebb =[]byte {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};);func (_dggb *ClassedPoints )GroupByY ()([]*ClassedPoints ,error ){const _aaae ="\u0043\u006c\u0061\u0073se\u0064\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0072\u006f\u0075\u0070\u0042y\u0059";
if _cdac :=_dggb .validateIntSlice ();_cdac !=nil {return nil ,_g .Wrap (_cdac ,_aaae ,"");};if _dggb .IntSlice .Size ()==0{return nil ,_g .Error (_aaae ,"\u004e\u006f\u0020\u0063la\u0073\u0073\u0065\u0073\u0020\u0070\u0072\u006f\u0076\u0069\u0064\u0065\u0064");
};_dggb .SortByY ();var (_ecdg []*ClassedPoints ;_gggg int ;);_degc :=-1;var _acdc *ClassedPoints ;for _fagd :=0;_fagd < len (_dggb .IntSlice );_fagd ++{_gggg =int (_dggb .YAtIndex (_fagd ));if _gggg !=_degc {_acdc =&ClassedPoints {Points :_dggb .Points };
_degc =_gggg ;_ecdg =append (_ecdg ,_acdc );};_acdc .IntSlice =append (_acdc .IntSlice ,_dggb .IntSlice [_fagd ]);};for _ ,_egf :=range _ecdg {_egf .SortByX ();};return _ecdg ,nil ;};type ClassedPoints struct{*Points ;_db .IntSlice ;_bdde func (_dcgba ,_gcfb int )bool ;
};type CombinationOperator int ;func (_gfab *Bitmap )GetByteIndex (x ,y int )int {return y *_gfab .RowStride +(x >>3)};func (_edcg *Bitmap )ClipRectangle (box *_b .Rectangle )(_egc *Bitmap ,_dffa *_b .Rectangle ,_ggb error ){const _gfac ="\u0043\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if box ==nil {return nil ,nil ,_g .Error (_gfac ,"\u0062o\u0078 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};_gbe ,_fbe :=_edcg .Width ,_edcg .Height ;_fdba :=_b .Rect (0,0,_gbe ,_fbe );if !box .Overlaps (_fdba ){return nil ,nil ,_g .Error (_gfac ,"b\u006f\u0078\u0020\u0064oe\u0073n\u0027\u0074\u0020\u006f\u0076e\u0072\u006c\u0061\u0070\u0020\u0062");
};_bace :=box .Intersect (_fdba );_ddb ,_gcg :=_bace .Min .X ,_bace .Min .Y ;_cac ,_fcgb :=_bace .Dx (),_bace .Dy ();_egc =New (_cac ,_fcgb );_egc .Text =_edcg .Text ;if _ggb =_egc .RasterOperation (0,0,_cac ,_fcgb ,PixSrc ,_edcg ,_ddb ,_gcg );_ggb !=nil {return nil ,nil ,_g .Wrap (_ggb ,_gfac ,"\u0050\u0069\u0078\u0053\u0072\u0063\u0020\u0074\u006f\u0020\u0063\u006ci\u0070\u0070\u0065\u0064");
};_dffa =&_bace ;return _egc ,_dffa ,nil ;};func _eaac (_ddfb *Bitmap ,_cagb *Bitmap ,_cgdd int )(_fcec error ){const _agfb ="\u0073\u0065\u0065\u0064\u0066\u0069\u006c\u006c\u0042\u0069\u006e\u0061r\u0079\u004c\u006f\u0077";_feec :=_gdef (_ddfb .Height ,_cagb .Height );
_agceg :=_gdef (_ddfb .RowStride ,_cagb .RowStride );switch _cgdd {case 4:_fcec =_bced (_ddfb ,_cagb ,_feec ,_agceg );case 8:_fcec =_gffca (_ddfb ,_cagb ,_feec ,_agceg );default:return _g .Errorf (_agfb ,"\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",_cgdd );
};if _fcec !=nil {return _g .Wrap (_fcec ,_agfb ,"");};return nil ;};func TstVSymbol (t *_f .T ,scale ...int )*Bitmap {_afdg ,_bacef :=NewWithData (5,5,[]byte {0x88,0x88,0x88,0x50,0x20});_e .NoError (t ,_bacef );return TstGetScaledSymbol (t ,_afdg ,scale ...);
};func (_cafa *Bitmap )resizeImageData (_efbg *Bitmap )error {if _efbg ==nil {return _g .Error ("\u0072e\u0073i\u007a\u0065\u0049\u006d\u0061\u0067\u0065\u0044\u0061\u0074\u0061","\u0073r\u0063 \u0069\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _cafa .SizesEqual (_efbg ){return nil ;};_cafa .Data =make ([]byte ,len (_efbg .Data ));_cafa .Width =_efbg .Width ;_cafa .Height =_efbg .Height ;_cafa .RowStride =_efbg .RowStride ;return nil ;};func (_aggge *byWidth )Swap (i ,j int ){_aggge .Values [i ],_aggge .Values [j ]=_aggge .Values [j ],_aggge .Values [i ];
if _aggge .Boxes !=nil {_aggge .Boxes [i ],_aggge .Boxes [j ]=_aggge .Boxes [j ],_aggge .Boxes [i ];};};func NewWithData (width ,height int ,data []byte )(*Bitmap ,error ){const _gac ="N\u0065\u0077\u0057\u0069\u0074\u0068\u0044\u0061\u0074\u0061";_ffe :=_cff (width ,height );
_ffe .Data =data ;if len (data )< height *_ffe .RowStride {return nil ,_g .Errorf (_gac ,"\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 *_ffe .RowStride );
};return _ffe ,nil ;};func (_acag *Bitmaps )CountPixels ()*_db .NumSlice {_dbag :=&_db .NumSlice {};for _ ,_gaffe :=range _acag .Values {_dbag .AddInt (_gaffe .CountPixels ());};return _dbag ;};func _dfdg (_bcafg *Bitmap ,_abg ,_dbcf ,_facg ,_eeeb int ,_aedfg RasterOperator ,_dcfe *Bitmap ,_agabe ,_dfce int )error {var (_gegg byte ;
_bbfae int ;_gfag int ;_efd ,_egcg int ;_gdad ,_cacg int ;);_fafd :=_facg >>3;_eggae :=_facg &7;if _eggae > 0{_gegg =_gebag [_eggae ];};_bbfae =_dcfe .RowStride *_dfce +(_agabe >>3);_gfag =_bcafg .RowStride *_dbcf +(_abg >>3);switch _aedfg {case PixSrc :for _gdad =0;
_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]=_dcfe .Data [_efd ];_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],_dcfe .Data [_efd ],_gegg );
};};case PixNotSrc :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]=^(_dcfe .Data [_efd ]);_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],^_dcfe .Data [_efd ],_gegg );
};};case PixSrcOrDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]|=_dcfe .Data [_efd ];_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],_dcfe .Data [_efd ]|_bcafg .Data [_egcg ],_gegg );
};};case PixSrcAndDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]&=_dcfe .Data [_efd ];_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],_dcfe .Data [_efd ]&_bcafg .Data [_egcg ],_gegg );
};};case PixSrcXorDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]^=_dcfe .Data [_efd ];_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],_dcfe .Data [_efd ]^_bcafg .Data [_egcg ],_gegg );
};};case PixNotSrcOrDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]|=^(_dcfe .Data [_efd ]);_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],^(_dcfe .Data [_efd ])|_bcafg .Data [_egcg ],_gegg );
};};case PixNotSrcAndDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]&=^(_dcfe .Data [_efd ]);_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],^(_dcfe .Data [_efd ])&_bcafg .Data [_egcg ],_gegg );
};};case PixSrcOrNotDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]=_dcfe .Data [_efd ]|^(_bcafg .Data [_egcg ]);_egcg ++;
_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],_dcfe .Data [_efd ]|^(_bcafg .Data [_egcg ]),_gegg );};};case PixSrcAndNotDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;
for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]=_dcfe .Data [_efd ]&^(_bcafg .Data [_egcg ]);_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],_dcfe .Data [_efd ]&^(_bcafg .Data [_egcg ]),_gegg );};};case PixNotPixSrcOrDst :for _gdad =0;
_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]=^(_dcfe .Data [_efd ]|_bcafg .Data [_egcg ]);_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],^(_dcfe .Data [_efd ]|_bcafg .Data [_egcg ]),_gegg );
};};case PixNotPixSrcAndDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]=^(_dcfe .Data [_efd ]&_bcafg .Data [_egcg ]);_egcg ++;
_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],^(_dcfe .Data [_efd ]&_bcafg .Data [_egcg ]),_gegg );};};case PixNotPixSrcXorDst :for _gdad =0;_gdad < _eeeb ;_gdad ++{_efd =_bbfae +_gdad *_dcfe .RowStride ;_egcg =_gfag +_gdad *_bcafg .RowStride ;
for _cacg =0;_cacg < _fafd ;_cacg ++{_bcafg .Data [_egcg ]=^(_dcfe .Data [_efd ]^_bcafg .Data [_egcg ]);_egcg ++;_efd ++;};if _eggae > 0{_bcafg .Data [_egcg ]=_fcac (_bcafg .Data [_egcg ],^(_dcfe .Data [_efd ]^_bcafg .Data [_egcg ]),_gegg );};};default:_de .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",_aedfg );
return _g .Error ("\u0072\u0061\u0073\u0074er\u004f\u0070\u0042\u0079\u0074\u0065\u0041\u006c\u0069\u0067\u006e\u0065\u0064\u004co\u0077","\u0069\u006e\u0076al\u0069\u0064\u0020\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065\u0072\u0061\u0074\u006f\u0072");
};return nil ;};func _gdc (_aaedb *Bitmap ,_baabb *Bitmap ,_ababf *Selection )(*Bitmap ,error ){var (_eeba *Bitmap ;_dgdd error ;);_aaedb ,_dgdd =_cfca (_aaedb ,_baabb ,_ababf ,&_eeba );if _dgdd !=nil {return nil ,_dgdd ;};if _dgdd =_aaedb .clearAll ();
_dgdd !=nil {return nil ,_dgdd ;};var _agca SelectionValue ;for _gdg :=0;_gdg < _ababf .Height ;_gdg ++{for _gcdf :=0;_gcdf < _ababf .Width ;_gcdf ++{_agca =_ababf .Data [_gdg ][_gcdf ];if _agca ==SelHit {if _dgdd =_aaedb .RasterOperation (_gcdf -_ababf .Cx ,_gdg -_ababf .Cy ,_baabb .Width ,_baabb .Height ,PixSrcOrDst ,_eeba ,0,0);
_dgdd !=nil {return nil ,_dgdd ;};};};};return _aaedb ,nil ;};func _ceb (_cfcc *Bitmap ,_bdff ...MorphProcess )(_ecaac *Bitmap ,_gagaf error ){const _fbae ="\u006d\u006f\u0072\u0070\u0068\u0053\u0065\u0071\u0075\u0065\u006e\u0063\u0065";if _cfcc ==nil {return nil ,_g .Error (_fbae ,"\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 (_bdff )==0{return nil ,_g .Error (_fbae ,"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 _gagaf =_dbfb (_bdff ...);
_gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"");};var _bfcd ,_befa ,_bdd int ;_ecaac =_cfcc .Copy ();for _ ,_dgeba :=range _bdff {switch _dgeba .Operation {case MopDilation :_bfcd ,_befa =_dgeba .getWidthHeight ();_ecaac ,_gagaf =DilateBrick (nil ,_ecaac ,_bfcd ,_befa );
if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"");};case MopErosion :_bfcd ,_befa =_dgeba .getWidthHeight ();_ecaac ,_gagaf =_ebba (nil ,_ecaac ,_bfcd ,_befa );if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"");};case MopOpening :_bfcd ,_befa =_dgeba .getWidthHeight ();
_ecaac ,_gagaf =_cegb (nil ,_ecaac ,_bfcd ,_befa );if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"");};case MopClosing :_bfcd ,_befa =_dgeba .getWidthHeight ();_ecaac ,_gagaf =_cddge (nil ,_ecaac ,_bfcd ,_befa );if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"");
};case MopRankBinaryReduction :_ecaac ,_gagaf =_fgd (_ecaac ,_dgeba .Arguments ...);if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"");};case MopReplicativeBinaryExpansion :_ecaac ,_gagaf =_efbcc (_ecaac ,_dgeba .Arguments [0]);if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"");
};case MopAddBorder :_bdd =_dgeba .Arguments [0];_ecaac ,_gagaf =_ecaac .AddBorder (_bdd ,0);if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"");};default:return nil ,_g .Error (_fbae ,"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 _bdd > 0{_ecaac ,_gagaf =_ecaac .RemoveBorder (_bdd );if _gagaf !=nil {return nil ,_g .Wrap (_gagaf ,_fbae ,"\u0062\u006f\u0072\u0064\u0065\u0072\u0020\u003e\u0020\u0030");};};return _ecaac ,nil ;};func (_ddfe *Bitmap )ThresholdPixelSum (thresh int ,tab8 []int )(_dbf bool ,_gafa error ){const _daf ="\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 =_eadbd ();};_fafe :=_ddfe .Width >>3;_bgf :=_ddfe .Width &7;_afee :=byte (0xff<<uint (8-_bgf ));var (_agcb ,_bda ,_aac ,_dgf int ;_eeda byte ;);for _agcb =0;_agcb < _ddfe .Height ;_agcb ++{_aac =_ddfe .RowStride *_agcb ;for _bda =0;
_bda < _fafe ;_bda ++{_eeda ,_gafa =_ddfe .GetByte (_aac +_bda );if _gafa !=nil {return false ,_g .Wrap (_gafa ,_daf ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};_dgf +=tab8 [_eeda ];};if _bgf !=0{_eeda ,_gafa =_ddfe .GetByte (_aac +_bda );if _gafa !=nil {return false ,_g .Wrap (_gafa ,_daf ,"p\u0061\u0072\u0074\u0069\u0061\u006c\u0042\u0079\u0074\u0065");
};_eeda &=_afee ;_dgf +=tab8 [_eeda ];};if _dgf > thresh {return true ,nil ;};};return _dbf ,nil ;};type Color int ;type fillSegment struct{_fgeg int ;_efcee int ;_gdda int ;_gfff int ;};func (_dcbgg *byHeight )Less (i ,j int )bool {return _dcbgg .Values [i ].Height < _dcbgg .Values [j ].Height };
func Copy (d ,s *Bitmap )(*Bitmap ,error ){return _bgff (d ,s )};func (_gea *Bitmap )SizesEqual (s *Bitmap )bool {if _gea ==s {return true ;};if _gea .Width !=s .Width ||_gea .Height !=s .Height {return false ;};return true ;};func _adbe (_begb ,_bagbb *Bitmap ,_agdd *Selection )(*Bitmap ,error ){const _gefa ="\u0065\u0072\u006fd\u0065";
var (_adgb error ;_ebcb *Bitmap ;);_begb ,_adgb =_cfca (_begb ,_bagbb ,_agdd ,&_ebcb );if _adgb !=nil {return nil ,_g .Wrap (_adgb ,_gefa ,"");};if _adgb =_begb .setAll ();_adgb !=nil {return nil ,_g .Wrap (_adgb ,_gefa ,"");};var _agfa SelectionValue ;
for _cafc :=0;_cafc < _agdd .Height ;_cafc ++{for _accfb :=0;_accfb < _agdd .Width ;_accfb ++{_agfa =_agdd .Data [_cafc ][_accfb ];if _agfa ==SelHit {_adgb =_gbee (_begb ,_agdd .Cx -_accfb ,_agdd .Cy -_cafc ,_bagbb .Width ,_bagbb .Height ,PixSrcAndDst ,_ebcb ,0,0);
if _adgb !=nil {return nil ,_g .Wrap (_adgb ,_gefa ,"");};};};};if MorphBC ==SymmetricMorphBC {return _begb ,nil ;};_ebgd ,_gbbg ,_fbfbg ,_aecb :=_agdd .findMaxTranslations ();if _ebgd > 0{if _adgb =_begb .RasterOperation (0,0,_ebgd ,_bagbb .Height ,PixClr ,nil ,0,0);
_adgb !=nil {return nil ,_g .Wrap (_adgb ,_gefa ,"\u0078\u0070\u0020\u003e\u0020\u0030");};};if _fbfbg > 0{if _adgb =_begb .RasterOperation (_bagbb .Width -_fbfbg ,0,_fbfbg ,_bagbb .Height ,PixClr ,nil ,0,0);_adgb !=nil {return nil ,_g .Wrap (_adgb ,_gefa ,"\u0078\u006e\u0020\u003e\u0020\u0030");
};};if _gbbg > 0{if _adgb =_begb .RasterOperation (0,0,_bagbb .Width ,_gbbg ,PixClr ,nil ,0,0);_adgb !=nil {return nil ,_g .Wrap (_adgb ,_gefa ,"\u0079\u0070\u0020\u003e\u0020\u0030");};};if _aecb > 0{if _adgb =_begb .RasterOperation (0,_bagbb .Height -_aecb ,_bagbb .Width ,_aecb ,PixClr ,nil ,0,0);
_adgb !=nil {return nil ,_g .Wrap (_adgb ,_gefa ,"\u0079\u006e\u0020\u003e\u0020\u0030");};};return _begb ,nil ;};func (_gdefg *Bitmaps )WidthSorter ()func (_cfff ,_dfgd int )bool {return func (_ccdb ,_adbdb int )bool {return _gdefg .Values [_ccdb ].Width < _gdefg .Values [_adbdb ].Width };
};const (SelDontCare SelectionValue =iota ;SelHit ;SelMiss ;);func (_afff *BitmapsArray )GetBitmaps (i int )(*Bitmaps ,error ){const _bbdgb ="\u0042\u0069\u0074ma\u0070\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u0069\u0074\u006d\u0061\u0070\u0073";
if _afff ==nil {return nil ,_g .Error (_bbdgb ,"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 (_afff .Values )-1{return nil ,_g .Errorf (_bbdgb ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _afff .Values [i ],nil ;};func (_dceaf *Bitmap )centroid (_afbg ,_ffcb []int )(Point ,error ){_gefb :=Point {};_dceaf .setPadBits (0);if len (_afbg )==0{_afbg =_cddb ();};if len (_ffcb )==0{_ffcb =_eadbd ();};var _aebg ,_bdab ,_egcf ,_gagad ,_bcc ,_cgfa int ;
var _bccg byte ;for _bcc =0;_bcc < _dceaf .Height ;_bcc ++{_dcgb :=_dceaf .RowStride *_bcc ;_gagad =0;for _cgfa =0;_cgfa < _dceaf .RowStride ;_cgfa ++{_bccg =_dceaf .Data [_dcgb +_cgfa ];if _bccg !=0{_gagad +=_ffcb [_bccg ];_aebg +=_afbg [_bccg ]+_cgfa *8*_ffcb [_bccg ];
};};_egcf +=_gagad ;_bdab +=_gagad *_bcc ;};if _egcf !=0{_gefb .X =float32 (_aebg )/float32 (_egcf );_gefb .Y =float32 (_bdab )/float32 (_egcf );};return _gefb ,nil ;};func TstOSymbol (t *_f .T ,scale ...int )*Bitmap {_aaga ,_abac :=NewWithData (4,5,[]byte {0xF0,0x90,0x90,0x90,0xF0});
_e .NoError (t ,_abac );return TstGetScaledSymbol (t ,_aaga ,scale ...);};func (_dgad *Bitmap )And (s *Bitmap )(_fef *Bitmap ,_aba error ){const _gcd ="\u0042\u0069\u0074\u006d\u0061\u0070\u002e\u0041\u006e\u0064";if _dgad ==nil {return nil ,_g .Error (_gcd ,"\u0027b\u0069t\u006d\u0061\u0070\u0020\u0027b\u0027\u0020i\u0073\u0020\u006e\u0069\u006c");
};if s ==nil {return nil ,_g .Error (_gcd ,"\u0062\u0069\u0074\u006d\u0061\u0070\u0020\u0027\u0073\u0027\u0020\u0069s\u0020\u006e\u0069\u006c");};if !_dgad .SizesEqual (s ){_de .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",_gcd );
};if _fef ,_aba =_bgff (_fef ,_dgad );_aba !=nil {return nil ,_g .Wrap (_aba ,_gcd ,"\u0063\u0061\u006e't\u0020\u0063\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027\u0020\u0062\u0069\u0074\u006d\u0061\u0070");};if _aba =_fef .RasterOperation (0,0,_fef .Width ,_fef .Height ,PixSrcAndDst ,s ,0,0);
_aba !=nil {return nil ,_g .Wrap (_aba ,_gcd ,"");};return _fef ,nil ;};func _ggdg (_eaa ,_fbbb *Bitmap ,_cbfe ,_gef ,_ggbb ,_ffdc ,_cbcf ,_gecb ,_eeag ,_ffda int ,_gbd CombinationOperator )error {var _fdde int ;_eafgd :=func (){_fdde ++;_ggbb +=_fbbb .RowStride ;
_ffdc +=_eaa .RowStride ;_cbcf +=_eaa .RowStride };for _fdde =_cbfe ;_fdde < _gef ;_eafgd (){var _dceg uint16 ;_gfae :=_ggbb ;for _dgcc :=_ffdc ;_dgcc <=_cbcf ;_dgcc ++{_bee ,_abdd :=_fbbb .GetByte (_gfae );if _abdd !=nil {return _abdd ;};_cegd ,_abdd :=_eaa .GetByte (_dgcc );
if _abdd !=nil {return _abdd ;};_dceg =(_dceg |uint16 (_cegd ))<<uint (_ffda );_cegd =byte (_dceg >>8);if _dgcc ==_cbcf {_cegd =_agaf (uint (_gecb ),_cegd );};if _abdd =_fbbb .SetByte (_gfae ,_bagb (_bee ,_cegd ,_gbd ));_abdd !=nil {return _abdd ;};_gfae ++;
_dceg <<=uint (_eeag );};};return nil ;};const (CmbOpOr CombinationOperator =iota ;CmbOpAnd ;CmbOpXor ;CmbOpXNor ;CmbOpReplace ;CmbOpNot ;);func _aefd (_fcaea *Bitmap ,_eebf ,_fafc ,_afbbac ,_cabd int ,_fbgf RasterOperator ){if _eebf < 0{_afbbac +=_eebf ;
_eebf =0;};_ecgg :=_eebf +_afbbac -_fcaea .Width ;if _ecgg > 0{_afbbac -=_ecgg ;};if _fafc < 0{_cabd +=_fafc ;_fafc =0;};_bdfe :=_fafc +_cabd -_fcaea .Height ;if _bdfe > 0{_cabd -=_bdfe ;};if _afbbac <=0||_cabd <=0{return ;};if (_eebf &7)==0{_dag (_fcaea ,_eebf ,_fafc ,_afbbac ,_cabd ,_fbgf );
}else {_gbcc (_fcaea ,_eebf ,_fafc ,_afbbac ,_cabd ,_fbgf );};};func (_fggc *Bitmap )SetByte (index int ,v byte )error {if index > len (_fggc .Data )-1||index < 0{return _g .Errorf ("\u0053e\u0074\u0042\u0079\u0074\u0065","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",index );
};_fggc .Data [index ]=v ;return nil ;};func (_bdbc *Boxes )SelectBySize (width ,height int ,tp LocationFilter ,relation SizeComparison )(_bff *Boxes ,_gge error ){const _cbgc ="\u0042o\u0078e\u0073\u002e\u0053\u0065\u006ce\u0063\u0074B\u0079\u0053\u0069\u007a\u0065";
if _bdbc ==nil {return nil ,_g .Error (_cbgc ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if len (*_bdbc )==0{return _bdbc ,nil ;};switch tp {case LocSelectWidth ,LocSelectHeight ,LocSelectIfEither ,LocSelectIfBoth :default:return nil ,_g .Errorf (_cbgc ,"\u0069\u006e\u0076al\u0069\u0064\u0020\u0066\u0069\u006c\u0074\u0065\u0072\u0020\u0074\u0079\u0070\u0065\u003a\u0020\u0025\u0064",tp );
};switch relation {case SizeSelectIfLT ,SizeSelectIfGT ,SizeSelectIfLTE ,SizeSelectIfGTE :default:return nil ,_g .Errorf (_cbgc ,"i\u006e\u0076\u0061\u006c\u0069\u0064 \u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0020t\u0079\u0070\u0065:\u0020'\u0025\u0064\u0027",tp );
};_faacd :=_bdbc .makeSizeIndicator (width ,height ,tp ,relation );_dfbb ,_gge :=_bdbc .selectWithIndicator (_faacd );if _gge !=nil {return nil ,_g .Wrap (_gge ,_cbgc ,"");};return _dfbb ,nil ;};func (_becg *ClassedPoints )GetIntXByClass (i int )(int ,error ){const _bfdd ="\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 >=_becg .IntSlice .Size (){return 0,_g .Errorf (_bfdd ,"\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 (_becg .XAtIndex (i )),nil ;};func (_aaba Points )GetIntX (i int )(int ,error ){if i >=len (_aaba ){return 0,_g .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0058","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return int (_aaba [i ].X ),nil ;};func (_gdb *Bitmap )SetPadBits (value int ){_gdb .setPadBits (value )};func (_badf *byWidth )Less (i ,j int )bool {return _badf .Values [i ].Width < _badf .Values [j ].Width };func _cage (_eecf ,_abfb *Bitmap ,_bfca ,_eaga int )(*Bitmap ,error ){const _ccbcf ="d\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063\u006b";
if _abfb ==nil {_de .Log .Debug ("\u0064\u0069\u006c\u0061\u0074\u0065\u0042\u0072\u0069\u0063k\u0020\u0073\u006f\u0075\u0072\u0063\u0065 \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");return nil ,_g .Error (_ccbcf ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _bfca < 1||_eaga < 1{return nil ,_g .Error (_ccbcf ,"\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 _bfca ==1&&_eaga ==1{_agcc ,_adc :=_bgff (_eecf ,_abfb );if _adc !=nil {return nil ,_g .Wrap (_adc ,_ccbcf ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");};
return _agcc ,nil ;};if _bfca ==1||_eaga ==1{_geee :=SelCreateBrick (_eaga ,_bfca ,_eaga /2,_bfca /2,SelHit );_fdea ,_befb :=_gdc (_eecf ,_abfb ,_geee );if _befb !=nil {return nil ,_g .Wrap (_befb ,_ccbcf ,"\u0068s\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _fdea ,nil ;};_cefda :=SelCreateBrick (1,_bfca ,0,_bfca /2,SelHit );_ddgg :=SelCreateBrick (_eaga ,1,_eaga /2,0,SelHit );_fbcc ,_eae :=_gdc (nil ,_abfb ,_cefda );if _eae !=nil {return nil ,_g .Wrap (_eae ,_ccbcf ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_eecf ,_eae =_gdc (_eecf ,_fbcc ,_ddgg );if _eae !=nil {return nil ,_g .Wrap (_eae ,_ccbcf ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _eecf ,nil ;};func DilateBrick (d ,s *Bitmap ,hSize ,vSize int )(*Bitmap ,error ){return _cage (d ,s ,hSize ,vSize )};
func (_fgff *Bitmaps )Size ()int {return len (_fgff .Values )};func (_dfdb *Bitmaps )HeightSorter ()func (_cbad ,_degb int )bool {return func (_ecaf ,_ffeb int )bool {_daae :=_dfdb .Values [_ecaf ].Height < _dfdb .Values [_ffeb ].Height ;_de .Log .Debug ("H\u0065i\u0067\u0068\u0074\u003a\u0020\u0025\u0076\u0020<\u0020\u0025\u0076\u0020= \u0025\u0076",_dfdb .Values [_ecaf ].Height ,_dfdb .Values [_ffeb ].Height ,_daae );
return _daae ;};};func (_cffb *Bitmap )addPadBits ()(_agge error ){const _ecee ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0061\u0064\u0064\u0050\u0061d\u0042\u0069\u0074\u0073";_gab :=_cffb .Width %8;if _gab ==0{return nil ;};_dcb :=_cffb .Width /8;
_gbf :=_dc .NewReader (_cffb .Data );_aed :=make ([]byte ,_cffb .Height *_cffb .RowStride );_dfc :=_dc .NewWriterMSB (_aed );_cfag :=make ([]byte ,_dcb );var (_cbed int ;_gagf uint64 ;);for _cbed =0;_cbed < _cffb .Height ;_cbed ++{if _ ,_agge =_gbf .Read (_cfag );
_agge !=nil {return _g .Wrap (_agge ,_ecee ,"\u0066u\u006c\u006c\u0020\u0062\u0079\u0074e");};if _ ,_agge =_dfc .Write (_cfag );_agge !=nil {return _g .Wrap (_agge ,_ecee ,"\u0066\u0075\u006c\u006c\u0020\u0062\u0079\u0074\u0065\u0073");};if _gagf ,_agge =_gbf .ReadBits (byte (_gab ));
_agge !=nil {return _g .Wrap (_agge ,_ecee ,"\u0073\u006b\u0069\u0070\u0070\u0069\u006e\u0067\u0020\u0062\u0069\u0074\u0073");};if _agge =_dfc .WriteByte (byte (_gagf )<<uint (8-_gab ));_agge !=nil {return _g .Wrap (_agge ,_ecee ,"\u006ca\u0073\u0074\u0020\u0062\u0079\u0074e");
};};_cffb .Data =_dfc .Data ();return nil ;};func (_eedc *Bitmap )setEightBytes (_fbeg int ,_gff uint64 )error {_bfef :=_eedc .RowStride -(_fbeg %_eedc .RowStride );if _eedc .RowStride !=_eedc .Width >>3{_bfef --;};if _bfef >=8{return _eedc .setEightFullBytes (_fbeg ,_gff );
};return _eedc .setEightPartlyBytes (_fbeg ,_bfef ,_gff );};func SelCreateBrick (h ,w int ,cy ,cx int ,tp SelectionValue )*Selection {_aecf :=_ffeeg (h ,w ,"");_aecf .setOrigin (cy ,cx );var _daab ,_cgcd int ;for _daab =0;_daab < h ;_daab ++{for _cgcd =0;
_cgcd < w ;_cgcd ++{_aecf .Data [_daab ][_cgcd ]=tp ;};};return _aecf ;};func (_bfaed Points )GetIntY (i int )(int ,error ){if i >=len (_bfaed ){return 0,_g .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065t\u0049\u006e\u0074\u0059","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return int (_bfaed [i ].Y ),nil ;};func (_gde *Bitmap )setFourBytes (_dacc int ,_ceg uint32 )error {if _dacc +3> len (_gde .Data )-1{return _g .Errorf ("\u0073\u0065\u0074F\u006f\u0075\u0072\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",_dacc );
};_gde .Data [_dacc ]=byte ((_ceg &0xff000000)>>24);_gde .Data [_dacc +1]=byte ((_ceg &0xff0000)>>16);_gde .Data [_dacc +2]=byte ((_ceg &0xff00)>>8);_gde .Data [_dacc +3]=byte (_ceg &0xff);return nil ;};func _af (_eb ,_bd *Bitmap )(_ad error ){const _fce ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0034";
_gfa :=_bd .RowStride ;_aag :=_eb .RowStride ;_dde :=_bd .RowStride *4-_eb .RowStride ;var (_bc ,_ba byte ;_be uint32 ;_bg ,_fcc ,_cf ,_ce ,_cb ,_fe ,_df int ;);for _cf =0;_cf < _bd .Height ;_cf ++{_bg =_cf *_gfa ;_fcc =4*_cf *_aag ;for _ce =0;_ce < _gfa ;
_ce ++{_bc =_bd .Data [_bg +_ce ];_be =_cgab [_bc ];_fe =_fcc +_ce *4;if _dde !=0&&(_ce +1)*4> _eb .RowStride {for _cb =_dde ;_cb > 0;_cb --{_ba =byte ((_be >>uint (_cb *8))&0xff);_df =_fe +(_dde -_cb );if _ad =_eb .SetByte (_df ,_ba );_ad !=nil {return _g .Wrapf (_ad ,_fce ,"D\u0069\u0066\u0066\u0065\u0072\u0065n\u0074\u0020\u0072\u006f\u0077\u0073\u0074\u0072\u0069d\u0065\u0073\u002e \u004b:\u0020\u0025\u0064",_cb );
};};}else if _ad =_eb .setFourBytes (_fe ,_be );_ad !=nil {return _g .Wrap (_ad ,_fce ,"");};if _ad =_eb .setFourBytes (_fcc +_ce *4,_cgab [_bd .Data [_bg +_ce ]]);_ad !=nil {return _g .Wrap (_ad ,_fce ,"");};};for _cb =1;_cb < 4;_cb ++{for _ce =0;_ce < _aag ;
_ce ++{if _ad =_eb .SetByte (_fcc +_cb *_aag +_ce ,_eb .Data [_fcc +_ce ]);_ad !=nil {return _g .Wrapf (_ad ,_fce ,"\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",_cb ,_ce );
};};};};return nil ;};type SizeSelection int ;func _gca (_bfg ,_caef *Bitmap ,_aaff int ,_bba []byte ,_egg int )(_fggf error ){const _fgc ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0032\u004c\u0065\u0076\u0065\u006c\u0034";
var (_aage ,_fbg ,_gfbd ,_acaa ,_aga ,_ecf ,_gbc ,_bfba int ;_cdbc ,_dgd uint32 ;_fcea ,_bbb byte ;_bga uint16 ;);_ede :=make ([]byte ,4);_gbg :=make ([]byte ,4);for _gfbd =0;_gfbd < _bfg .Height -1;_gfbd ,_acaa =_gfbd +2,_acaa +1{_aage =_gfbd *_bfg .RowStride ;
_fbg =_acaa *_caef .RowStride ;for _aga ,_ecf =0,0;_aga < _egg ;_aga ,_ecf =_aga +4,_ecf +1{for _gbc =0;_gbc < 4;_gbc ++{_bfba =_aage +_aga +_gbc ;if _bfba <=len (_bfg .Data )-1&&_bfba < _aage +_bfg .RowStride {_ede [_gbc ]=_bfg .Data [_bfba ];}else {_ede [_gbc ]=0x00;
};_bfba =_aage +_bfg .RowStride +_aga +_gbc ;if _bfba <=len (_bfg .Data )-1&&_bfba < _aage +(2*_bfg .RowStride ){_gbg [_gbc ]=_bfg .Data [_bfba ];}else {_gbg [_gbc ]=0x00;};};_cdbc =_ge .BigEndian .Uint32 (_ede );_dgd =_ge .BigEndian .Uint32 (_gbg );_dgd &=_cdbc ;
_dgd &=_dgd <<1;_dgd &=0xaaaaaaaa;_cdbc =_dgd |(_dgd <<7);_fcea =byte (_cdbc >>24);_bbb =byte ((_cdbc >>8)&0xff);_bfba =_fbg +_ecf ;if _bfba +1==len (_caef .Data )-1||_bfba +1>=_fbg +_caef .RowStride {_caef .Data [_bfba ]=_bba [_fcea ];if _fggf =_caef .SetByte (_bfba ,_bba [_fcea ]);
_fggf !=nil {return _g .Wrapf (_fggf ,_fgc ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0025d",_bfba );};}else {_bga =(uint16 (_bba [_fcea ])<<8)|uint16 (_bba [_bbb ]);if _fggf =_caef .setTwoBytes (_bfba ,_bga );_fggf !=nil {return _g .Wrapf (_fggf ,_fgc ,"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",_bfba );
};_ecf ++;};};};return nil ;};var _fee [256]uint8 ;func (_bfgc *Bitmap )AddBorderGeneral (left ,right ,top ,bot int ,val int )(*Bitmap ,error ){return _bfgc .addBorderGeneral (left ,right ,top ,bot ,val );};func _fbf (_edc *Bitmap ,_caa int ,_eaf []byte )(_cba *Bitmap ,_eba error ){const _fgge ="\u0072\u0065\u0064\u0075\u0063\u0065\u0052\u0061\u006e\u006b\u0042\u0069n\u0061\u0072\u0079\u0032";
if _edc ==nil {return nil ,_g .Error (_fgge ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");};if _caa < 1||_caa > 4{return nil ,_g .Error (_fgge ,"\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 _edc .Height <=1{return nil ,_g .Errorf (_fgge ,"\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",_edc .Height );
};_cba =New (_edc .Width /2,_edc .Height /2);if _eaf ==nil {_eaf =_bggf ();};_egd :=_gdef (_edc .RowStride ,2*_cba .RowStride );switch _caa {case 1:_eba =_efb (_edc ,_cba ,_caa ,_eaf ,_egd );case 2:_eba =_fda (_edc ,_cba ,_caa ,_eaf ,_egd );case 3:_eba =_aaf (_edc ,_cba ,_caa ,_eaf ,_egd );
case 4:_eba =_gca (_edc ,_cba ,_caa ,_eaf ,_egd );};if _eba !=nil {return nil ,_eba ;};return _cba ,nil ;};func (_efcd MorphProcess )verify (_ded int ,_egcdf ,_aceg *int )error {const _faeg ="\u004d\u006f\u0072\u0070hP\u0072\u006f\u0063\u0065\u0073\u0073\u002e\u0076\u0065\u0072\u0069\u0066\u0079";
switch _efcd .Operation {case MopDilation ,MopErosion ,MopOpening ,MopClosing :if len (_efcd .Arguments )!=2{return _g .Error (_faeg ,"\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");
};_beb ,_dbaa :=_efcd .getWidthHeight ();if _beb <=0||_dbaa <=0{return _g .Error (_faeg ,"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 :_ced :=len (_efcd .Arguments );*_egcdf +=_ced ;if _ced < 1||_ced > 4{return _g .Error (_faeg ,"\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 _gbdg :=0;_gbdg < _ced ;_gbdg ++{if _efcd .Arguments [_gbdg ]< 1||_efcd .Arguments [_gbdg ]> 4{return _g .Error (_faeg ,"\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 (_efcd .Arguments )==0{return _g .Error (_faeg ,"\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");
};_fcb :=_efcd .Arguments [0];if _fcb !=2&&_fcb !=4&&_fcb !=8{return _g .Error (_faeg ,"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");
};*_egcdf -=_edge [_fcb /4];case MopAddBorder :if len (_efcd .Arguments )==0{return _g .Error (_faeg ,"\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");
};_abfe :=_efcd .Arguments [0];if _ded > 0{return _g .Error (_faeg ,"\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 _abfe < 1{return _g .Error (_faeg ,"\u0041\u0064\u0064\u0042o\u0072\u0064\u0065\u0072\u0020\u0076\u0061\u006c\u0075\u0065 \u006co\u0077\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};*_aceg =_abfe ;};return nil ;};func NewClassedPoints (points *Points ,classes _db .IntSlice )(*ClassedPoints ,error ){const _aedf ="\u004e\u0065w\u0043\u006c\u0061s\u0073\u0065\u0064\u0050\u006f\u0069\u006e\u0074\u0073";
if points ==nil {return nil ,_g .Error (_aedf ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0070\u006f\u0069\u006e\u0074\u0073");};if classes ==nil {return nil ,_g .Error (_aedf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0063\u006c\u0061ss\u0065\u0073");
};_cega :=&ClassedPoints {Points :points ,IntSlice :classes };if _eegee :=_cega .validateIntSlice ();_eegee !=nil {return nil ,_g .Wrap (_eegee ,_aedf ,"");};return _cega ,nil ;};func _cddb ()[]int {_acac :=make ([]int ,256);_acac [0]=0;_acac [1]=7;var _beaad int ;
for _beaad =2;_beaad < 4;_beaad ++{_acac [_beaad ]=_acac [_beaad -2]+6;};for _beaad =4;_beaad < 8;_beaad ++{_acac [_beaad ]=_acac [_beaad -4]+5;};for _beaad =8;_beaad < 16;_beaad ++{_acac [_beaad ]=_acac [_beaad -8]+4;};for _beaad =16;_beaad < 32;_beaad ++{_acac [_beaad ]=_acac [_beaad -16]+3;
};for _beaad =32;_beaad < 64;_beaad ++{_acac [_beaad ]=_acac [_beaad -32]+2;};for _beaad =64;_beaad < 128;_beaad ++{_acac [_beaad ]=_acac [_beaad -64]+1;};for _beaad =128;_beaad < 256;_beaad ++{_acac [_beaad ]=_acac [_beaad -128];};return _acac ;};func _bagb (_ggfg ,_dgadd byte ,_efce CombinationOperator )byte {switch _efce {case CmbOpOr :return _dgadd |_ggfg ;
case CmbOpAnd :return _dgadd &_ggfg ;case CmbOpXor :return _dgadd ^_ggfg ;case CmbOpXNor :return ^(_dgadd ^_ggfg );case CmbOpNot :return ^(_dgadd );default:return _dgadd ;};};func TstWSymbol (t *_f .T ,scale ...int )*Bitmap {_cegbb ,_gfca :=NewWithData (5,5,[]byte {0x88,0x88,0xA8,0xD8,0x88});
_e .NoError (t ,_gfca );return TstGetScaledSymbol (t ,_cegbb ,scale ...);};func Blit (src *Bitmap ,dst *Bitmap ,x ,y int ,op CombinationOperator )error {var _decf ,_cdbcf int ;_fgdd :=src .RowStride -1;if x < 0{_cdbcf =-x ;x =0;}else if x +src .Width > dst .Width {_fgdd -=src .Width +x -dst .Width ;
};if y < 0{_decf =-y ;y =0;_cdbcf +=src .RowStride ;_fgdd +=src .RowStride ;}else if y +src .Height > dst .Height {_decf =src .Height +y -dst .Height ;};var (_bbfe int ;_dbdge error ;);_cfef :=x &0x07;_dacg :=8-_cfef ;_egggd :=src .Width &0x07;_cfeg :=_dacg -_egggd ;
_ccbc :=_dacg &0x07!=0;_dbec :=src .Width <=((_fgdd -_cdbcf )<<3)+_dacg ;_fge :=dst .GetByteIndex (x ,y );_beaa :=_decf +dst .Height ;if src .Height > _beaa {_bbfe =_beaa ;}else {_bbfe =src .Height ;};switch {case !_ccbc :_dbdge =_ccea (src ,dst ,_decf ,_bbfe ,_fge ,_cdbcf ,_fgdd ,op );
case _dbec :_dbdge =_ggdg (src ,dst ,_decf ,_bbfe ,_fge ,_cdbcf ,_fgdd ,_cfeg ,_cfef ,_dacg ,op );default:_dbdge =_ccgc (src ,dst ,_decf ,_bbfe ,_fge ,_cdbcf ,_fgdd ,_cfeg ,_cfef ,_dacg ,op ,_egggd );};return _dbdge ;};func (_gcge *Bitmap )nextOnPixelLow (_acf ,_cde ,_aef ,_bfcf ,_gcgf int )(_deca _b .Point ,_abf bool ,_gafg error ){const _gaad ="B\u0069\u0074\u006d\u0061p.\u006ee\u0078\u0074\u004f\u006e\u0050i\u0078\u0065\u006c\u004c\u006f\u0077";
var (_abab int ;_abba byte ;);_gcae :=_gcgf *_aef ;_gfeb :=_gcae +(_bfcf /8);if _abba ,_gafg =_gcge .GetByte (_gfeb );_gafg !=nil {return _deca ,false ,_g .Wrap (_gafg ,_gaad ,"\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 _abba !=0{_bgb :=_bfcf -(_bfcf %8)+7;for _abab =_bfcf ;_abab <=_bgb &&_abab < _acf ;_abab ++{if _gcge .GetPixel (_abab ,_gcgf ){_deca .X =_abab ;_deca .Y =_gcgf ;return _deca ,true ,nil ;};};};_cdba :=(_bfcf /8)+1;_abab =8*_cdba ;var _fab int ;for _gfeb =_gcae +_cdba ;
_abab < _acf ;_gfeb ,_abab =_gfeb +1,_abab +8{if _abba ,_gafg =_gcge .GetByte (_gfeb );_gafg !=nil {return _deca ,false ,_g .Wrap (_gafg ,_gaad ,"r\u0065\u0073\u0074\u0020of\u0020t\u0068\u0065\u0020\u006c\u0069n\u0065\u0020\u0062\u0079\u0074\u0065");};
if _abba ==0{continue ;};for _fab =0;_fab < 8&&_abab < _acf ;_fab ,_abab =_fab +1,_abab +1{if _gcge .GetPixel (_abab ,_gcgf ){_deca .X =_abab ;_deca .Y =_gcgf ;return _deca ,true ,nil ;};};};for _ecec :=_gcgf +1;_ecec < _cde ;_ecec ++{_gcae =_ecec *_aef ;
for _gfeb ,_abab =_gcae ,0;_abab < _acf ;_gfeb ,_abab =_gfeb +1,_abab +8{if _abba ,_gafg =_gcge .GetByte (_gfeb );_gafg !=nil {return _deca ,false ,_g .Wrap (_gafg ,_gaad ,"\u0066o\u006cl\u006f\u0077\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u0073");
};if _abba ==0{continue ;};for _fab =0;_fab < 8&&_abab < _acf ;_fab ,_abab =_fab +1,_abab +1{if _gcge .GetPixel (_abab ,_ecec ){_deca .X =_abab ;_deca .Y =_ecec ;return _deca ,true ,nil ;};};};};return _deca ,false ,nil ;};func _gffca (_gage ,_cbbbg *Bitmap ,_edbg ,_aabd int )(_efcdd error ){const _bgbd ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0038";
var (_cecb ,_eddef ,_faege ,_fggd int ;_deffd ,_dcegc ,_gaed ,_edacb ,_dbfc ,_ceffc ,_fgef ,_eceb byte ;);for _cecb =0;_cecb < _edbg ;_cecb ++{_faege =_cecb *_gage .RowStride ;_fggd =_cecb *_cbbbg .RowStride ;for _eddef =0;_eddef < _aabd ;_eddef ++{if _deffd ,_efcdd =_gage .GetByte (_faege +_eddef );
_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0067e\u0074 \u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");};if _dcegc ,_efcdd =_cbbbg .GetByte (_fggd +_eddef );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0067\u0065\u0074\u0020\u006d\u0061\u0073\u006b\u0020\u0062\u0079\u0074\u0065");
};if _cecb > 0{if _gaed ,_efcdd =_gage .GetByte (_faege -_gage .RowStride +_eddef );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0069\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_deffd |=_gaed |(_gaed <<1)|(_gaed >>1);if _eddef > 0{if _eceb ,_efcdd =_gage .GetByte (_faege -_gage .RowStride +_eddef -1);
_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0069\u0020\u003e\u00200 \u0026\u0026\u0020\u006a\u0020\u003e\u0020\u0030\u0020\u0062\u0079\u0074\u0065");};_deffd |=_eceb <<7;};if _eddef < _aabd -1{if _eceb ,_efcdd =_gage .GetByte (_faege -_gage .RowStride +_eddef +1);
_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u006a\u0020<\u0020\u0077\u0070l\u0020\u002d\u0020\u0031\u0020\u0062\u0079\u0074\u0065");};_deffd |=_eceb >>7;};};if _eddef > 0{if _edacb ,_efcdd =_gage .GetByte (_faege +_eddef -1);_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u006a\u0020\u003e \u0030");
};_deffd |=_edacb <<7;};_deffd &=_dcegc ;if _deffd ==0||^_deffd ==0{if _efcdd =_gage .SetByte (_faege +_eddef ,_deffd );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0073e\u0074t\u0069\u006e\u0067\u0020\u0065m\u0070\u0074y\u0020\u0062\u0079\u0074\u0065");
};};for {_fgef =_deffd ;_deffd =(_deffd |(_deffd >>1)|(_deffd <<1))&_dcegc ;if (_deffd ^_fgef )==0{if _efcdd =_gage .SetByte (_faege +_eddef ,_deffd );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");
};break ;};};};};for _cecb =_edbg -1;_cecb >=0;_cecb --{_faege =_cecb *_gage .RowStride ;_fggd =_cecb *_cbbbg .RowStride ;for _eddef =_aabd -1;_eddef >=0;_eddef --{if _deffd ,_efcdd =_gage .GetByte (_faege +_eddef );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0072\u0065\u0076er\u0073\u0065\u0020\u0067\u0065\u0074\u0020\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0062\u0079\u0074\u0065");
};if _dcegc ,_efcdd =_cbbbg .GetByte (_fggd +_eddef );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _cecb < _edbg -1{if _dbfc ,_efcdd =_gage .GetByte (_faege +_gage .RowStride +_eddef );
_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0069\u0020\u003c\u0020h\u0020\u002d\u0020\u0031\u0020\u002d\u003e\u0020\u0067\u0065t\u0020s\u006f\u0075\u0072\u0063\u0065\u0020\u0062y\u0074\u0065");};_deffd |=_dbfc |(_dbfc <<1)|_dbfc >>1;if _eddef > 0{if _eceb ,_efcdd =_gage .GetByte (_faege +_gage .RowStride +_eddef -1);
_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\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");};_deffd |=_eceb <<7;};if _eddef < _aabd -1{if _eceb ,_efcdd =_gage .GetByte (_faege +_gage .RowStride +_eddef +1);
_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\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");
};_deffd |=_eceb >>7;};};if _eddef < _aabd -1{if _ceffc ,_efcdd =_gage .GetByte (_faege +_eddef +1);_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\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");
};_deffd |=_ceffc >>7;};_deffd &=_dcegc ;if _deffd ==0||(^_deffd )==0{if _efcdd =_gage .SetByte (_faege +_eddef ,_deffd );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"\u0073e\u0074 \u006d\u0061\u0073\u006b\u0065\u0064\u0020\u0062\u0079\u0074\u0065");
};};for {_fgef =_deffd ;_deffd =(_deffd |(_deffd >>1)|(_deffd <<1))&_dcegc ;if (_deffd ^_fgef )==0{if _efcdd =_gage .SetByte (_faege +_eddef ,_deffd );_efcdd !=nil {return _g .Wrap (_efcdd ,_bgbd ,"r\u0065\u0076\u0065\u0072se\u0020s\u0065\u0074\u0020\u0070\u0072e\u0076\u0020\u0062\u0079\u0074\u0065");
};break ;};};};};return nil ;};func _aaa (_gaaf ,_adbd *Bitmap ,_fcdd *Selection )(*Bitmap ,error ){const _adfe ="\u0070\u0072\u006f\u0063\u0065\u0073\u0073\u004d\u006f\u0072\u0070\u0068A\u0072\u0067\u0073\u0032";var _cece ,_fegb int ;if _adbd ==nil {return nil ,_g .Error (_adfe ,"s\u006fu\u0072\u0063\u0065\u0020\u0062\u0069\u0074\u006da\u0070\u0020\u0069\u0073 n\u0069\u006c");
};if _fcdd ==nil {return nil ,_g .Error (_adfe ,"\u0073e\u006c \u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};_cece =_fcdd .Width ;_fegb =_fcdd .Height ;if _cece ==0||_fegb ==0{return nil ,_g .Error (_adfe ,"\u0073\u0065\u006c\u0020\u006f\u0066\u0020\u0073\u0069\u007a\u0065\u0020\u0030");
};if _gaaf ==nil {return _adbd .createTemplate (),nil ;};if _degdg :=_gaaf .resizeImageData (_adbd );_degdg !=nil {return nil ,_degdg ;};return _gaaf ,nil ;};func _cfegd (_gcaae ,_gffa *Bitmap ,_abaa CombinationOperator )*Bitmap {_ddad :=New (_gcaae .Width ,_gcaae .Height );
for _dbbd :=0;_dbbd < len (_ddad .Data );_dbbd ++{_ddad .Data [_dbbd ]=_bagb (_gcaae .Data [_dbbd ],_gffa .Data [_dbbd ],_abaa );};return _ddad ;};type Bitmaps struct{Values []*Bitmap ;Boxes []*_b .Rectangle ;};func CorrelationScoreThresholded (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab ,downcount []int ,scoreThreshold float32 )(bool ,error ){const _fed ="C\u006f\u0072\u0072\u0065\u006c\u0061t\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054h\u0072\u0065\u0073h\u006fl\u0064\u0065\u0064";
if bm1 ==nil {return false ,_g .Error (_fed ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d1\u0020\u0069s\u0020\u006e\u0069\u006c");
};if bm2 ==nil {return false ,_g .Error (_fed ,"\u0063\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065\u0054\u0068\u0072\u0065\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u0062\u006d2\u0020\u0069s\u0020\u006e\u0069\u006c");
};if area1 <=0||area2 <=0{return false ,_g .Error (_fed ,"c\u006f\u0072\u0072\u0065\u006c\u0061\u0074\u0069\u006fn\u0053\u0063\u006f\u0072\u0065\u0054\u0068re\u0073\u0068\u006f\u006cd\u0065\u0064\u0020\u002d\u0020\u0061\u0072\u0065\u0061s \u006d\u0075s\u0074\u0020\u0062\u0065\u0020\u003e\u0020\u0030");
};if downcount ==nil {return false ,_g .Error (_fed ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u006f\u0020\u0027\u0064\u006f\u0077\u006e\u0063\u006f\u0075\u006e\u0074\u0027");};if tab ==nil {return false ,_g .Error (_fed ,"p\u0072\u006f\u0076\u0069de\u0064 \u006e\u0069\u006c\u0020\u0027s\u0075\u006d\u0074\u0061\u0062\u0027");
};_cdg ,_dgcd :=bm1 .Width ,bm1 .Height ;_abcg ,_feeg :=bm2 .Width ,bm2 .Height ;if _db .Abs (_cdg -_abcg )> maxDiffW {return false ,nil ;};if _db .Abs (_dgcd -_feeg )> maxDiffH {return false ,nil ;};_baab :=int (delX +_db .Sign (delX )*0.5);_eadd :=int (delY +_db .Sign (delY )*0.5);
_abfg :=int (_gf .Ceil (_gf .Sqrt (float64 (scoreThreshold )*float64 (area1 )*float64 (area2 ))));_cffbf :=bm2 .RowStride ;_eage :=_gcee (_eadd ,0);_fbfb :=_gdef (_feeg +_eadd ,_dgcd );_gfad :=bm1 .RowStride *_eage ;_gbb :=bm2 .RowStride *(_eage -_eadd );
var _cbda int ;if _fbfb <=_dgcd {_cbda =downcount [_fbfb -1];};_efeg :=_gcee (_baab ,0);_cbfea :=_gdef (_abcg +_baab ,_cdg );var _cdaa ,_ggag int ;if _baab >=8{_cdaa =_baab >>3;_gfad +=_cdaa ;_efeg -=_cdaa <<3;_cbfea -=_cdaa <<3;_baab &=7;}else if _baab <=-8{_ggag =-((_baab +7)>>3);
_gbb +=_ggag ;_cffbf -=_ggag ;_baab +=_ggag <<3;};var (_egga ,_ceaa ,_effg int ;_cafac ,_ebb ,_egae byte ;);if _efeg >=_cbfea ||_eage >=_fbfb {return false ,nil ;};_gcdb :=(_cbfea +7)>>3;switch {case _baab ==0:for _ceaa =_eage ;_ceaa < _fbfb ;_ceaa ,_gfad ,_gbb =_ceaa +1,_gfad +bm1 .RowStride ,_gbb +bm2 .RowStride {for _effg =0;
_effg < _gcdb ;_effg ++{_cafac =bm1 .Data [_gfad +_effg ]&bm2 .Data [_gbb +_effg ];_egga +=tab [_cafac ];};if _egga >=_abfg {return true ,nil ;};if _gbfd :=_egga +downcount [_ceaa ]-_cbda ;_gbfd < _abfg {return false ,nil ;};};case _baab > 0&&_cffbf < _gcdb :for _ceaa =_eage ;
_ceaa < _fbfb ;_ceaa ,_gfad ,_gbb =_ceaa +1,_gfad +bm1 .RowStride ,_gbb +bm2 .RowStride {_ebb =bm1 .Data [_gfad ];_egae =bm2 .Data [_gbb ]>>uint (_baab );_cafac =_ebb &_egae ;_egga +=tab [_cafac ];for _effg =1;_effg < _cffbf ;_effg ++{_ebb =bm1 .Data [_gfad +_effg ];
_egae =bm2 .Data [_gbb +_effg ]>>uint (_baab )|bm2 .Data [_gbb +_effg -1]<<uint (8-_baab );_cafac =_ebb &_egae ;_egga +=tab [_cafac ];};_ebb =bm1 .Data [_gfad +_effg ];_egae =bm2 .Data [_gbb +_effg -1]<<uint (8-_baab );_cafac =_ebb &_egae ;_egga +=tab [_cafac ];
if _egga >=_abfg {return true ,nil ;}else if _egga +downcount [_ceaa ]-_cbda < _abfg {return false ,nil ;};};case _baab > 0&&_cffbf >=_gcdb :for _ceaa =_eage ;_ceaa < _fbfb ;_ceaa ,_gfad ,_gbb =_ceaa +1,_gfad +bm1 .RowStride ,_gbb +bm2 .RowStride {_ebb =bm1 .Data [_gfad ];
_egae =bm2 .Data [_gbb ]>>uint (_baab );_cafac =_ebb &_egae ;_egga +=tab [_cafac ];for _effg =1;_effg < _gcdb ;_effg ++{_ebb =bm1 .Data [_gfad +_effg ];_egae =bm2 .Data [_gbb +_effg ]>>uint (_baab );_egae |=bm2 .Data [_gbb +_effg -1]<<uint (8-_baab );_cafac =_ebb &_egae ;
_egga +=tab [_cafac ];};if _egga >=_abfg {return true ,nil ;}else if _egga +downcount [_ceaa ]-_cbda < _abfg {return false ,nil ;};};case _gcdb < _cffbf :for _ceaa =_eage ;_ceaa < _fbfb ;_ceaa ,_gfad ,_gbb =_ceaa +1,_gfad +bm1 .RowStride ,_gbb +bm2 .RowStride {for _effg =0;
_effg < _gcdb ;_effg ++{_ebb =bm1 .Data [_gfad +_effg ];_egae =bm2 .Data [_gbb +_effg ]<<uint (-_baab );_egae |=bm2 .Data [_gbb +_effg +1]>>uint (8+_baab );_cafac =_ebb &_egae ;_egga +=tab [_cafac ];};if _egga >=_abfg {return true ,nil ;}else if _geae :=_egga +downcount [_ceaa ]-_cbda ;
_geae < _abfg {return false ,nil ;};};case _cffbf >=_gcdb :for _ceaa =_eage ;_ceaa < _fbfb ;_ceaa ,_gfad ,_gbb =_ceaa +1,_gfad +bm1 .RowStride ,_gbb +bm2 .RowStride {for _effg =0;_effg < _gcdb ;_effg ++{_ebb =bm1 .Data [_gfad +_effg ];_egae =bm2 .Data [_gbb +_effg ]<<uint (-_baab );
_egae |=bm2 .Data [_gbb +_effg +1]>>uint (8+_baab );_cafac =_ebb &_egae ;_egga +=tab [_cafac ];};_ebb =bm1 .Data [_gfad +_effg ];_egae =bm2 .Data [_gbb +_effg ]<<uint (-_baab );_cafac =_ebb &_egae ;_egga +=tab [_cafac ];if _egga >=_abfg {return true ,nil ;
}else if _egga +downcount [_ceaa ]-_cbda < _abfg {return false ,nil ;};};};_caag :=float32 (_egga )*float32 (_egga )/(float32 (area1 )*float32 (area2 ));if _caag >=scoreThreshold {_de .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",_egga ,_abfg ,_caag ,scoreThreshold );
};return false ,nil ;};func MorphSequence (src *Bitmap ,sequence ...MorphProcess )(*Bitmap ,error ){return _ceb (src ,sequence ...);};func TstRSymbol (t *_f .T ,scale ...int )*Bitmap {_cbba ,_bfffg :=NewWithData (4,5,[]byte {0xF0,0x90,0xF0,0xA0,0x90});
_e .NoError (t ,_bfffg );return TstGetScaledSymbol (t ,_cbba ,scale ...);};func (_ddadc *Bitmaps )GetBox (i int )(*_b .Rectangle ,error ){const _dcda ="\u0047\u0065\u0074\u0042\u006f\u0078";if _ddadc ==nil {return nil ,_g .Error (_dcda ,"\u0070\u0072\u006f\u0076id\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0042\u0069\u0074\u006d\u0061\u0070s\u0027");
};if i > len (_ddadc .Boxes )-1{return nil ,_g .Errorf (_dcda ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _ddadc .Boxes [i ],nil ;};type BoundaryCondition int ;
func (_cda *Bitmap )setEightPartlyBytes (_bcff ,_dgde int ,_dcbf uint64 )(_fad error ){var (_ccgf byte ;_fbb int ;);const _fbc ="\u0073\u0065\u0074\u0045ig\u0068\u0074\u0050\u0061\u0072\u0074\u006c\u0079\u0042\u0079\u0074\u0065\u0073";for _gedd :=1;_gedd <=_dgde ;
_gedd ++{_fbb =64-_gedd *8;_ccgf =byte (_dcbf >>uint (_fbb )&0xff);_de .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",_ccgf ,_bcff ,_bcff +_gedd -1,_dgde ,_fbb );
if _fad =_cda .SetByte (_bcff +_gedd -1,_ccgf );_fad !=nil {return _g .Wrap (_fad ,_fbc ,"\u0066\u0075\u006c\u006c\u0042\u0079\u0074\u0065");};};_adgf :=_cda .RowStride *8-_cda .Width ;if _adgf ==0{return nil ;};_fbb -=8;_ccgf =byte (_dcbf >>uint (_fbb )&0xff)<<uint (_adgf );
if _fad =_cda .SetByte (_bcff +_dgde ,_ccgf );_fad !=nil {return _g .Wrap (_fad ,_fbc ,"\u0070\u0061\u0064\u0064\u0065\u0064");};return nil ;};func (_gcaag *ClassedPoints )XAtIndex (i int )float32 {return (*_gcaag .Points )[_gcaag .IntSlice [i ]].X };func CorrelationScore (bm1 ,bm2 *Bitmap ,area1 ,area2 int ,delX ,delY float32 ,maxDiffW ,maxDiffH int ,tab []int )(_gbfe float64 ,_fceb error ){const _cgfc ="\u0063\u006fr\u0072\u0065\u006ca\u0074\u0069\u006f\u006e\u0053\u0063\u006f\u0072\u0065";
if bm1 ==nil ||bm2 ==nil {return 0,_g .Error (_cgfc ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0062\u0069\u0074ma\u0070\u0073");};if tab ==nil {return 0,_g .Error (_cgfc ,"\u0027\u0074\u0061\u0062\u0027\u0020\u006e\u006f\u0074\u0020\u0064\u0065f\u0069\u006e\u0065\u0064");
};if area1 <=0||area2 <=0{return 0,_g .Error (_cgfc ,"\u0061\u0072\u0065\u0061s\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u0067r\u0065a\u0074\u0065\u0072\u0020\u0074\u0068\u0061n\u0020\u0030");};_eafee ,_cefd :=bm1 .Width ,bm1 .Height ;_gaee ,_efbb :=bm2 .Width ,bm2 .Height ;
_bcd :=_ebca (_eafee -_gaee );if _bcd > maxDiffW {return 0,nil ;};_dbba :=_ebca (_cefd -_efbb );if _dbba > maxDiffH {return 0,nil ;};var _adba ,_dabg int ;if delX >=0{_adba =int (delX +0.5);}else {_adba =int (delX -0.5);};if delY >=0{_dabg =int (delY +0.5);
}else {_dabg =int (delY -0.5);};_defbg :=_gcee (_dabg ,0);_gggc :=_gdef (_efbb +_dabg ,_cefd );_acff :=bm1 .RowStride *_defbg ;_cceba :=bm2 .RowStride *(_defbg -_dabg );_agab :=_gcee (_adba ,0);_eadg :=_gdef (_gaee +_adba ,_eafee );_dbg :=bm2 .RowStride ;
var _fff ,_ebg int ;if _adba >=8{_fff =_adba >>3;_acff +=_fff ;_agab -=_fff <<3;_eadg -=_fff <<3;_adba &=7;}else if _adba <=-8{_ebg =-((_adba +7)>>3);_cceba +=_ebg ;_dbg -=_ebg ;_adba +=_ebg <<3;};if _agab >=_eadg ||_defbg >=_gggc {return 0,nil ;};_ffc :=(_eadg +7)>>3;
var (_fbff ,_geag ,_befg byte ;_gbgde ,_dbca ,_ddgb int ;);switch {case _adba ==0:for _ddgb =_defbg ;_ddgb < _gggc ;_ddgb ,_acff ,_cceba =_ddgb +1,_acff +bm1 .RowStride ,_cceba +bm2 .RowStride {for _dbca =0;_dbca < _ffc ;_dbca ++{_befg =bm1 .Data [_acff +_dbca ]&bm2 .Data [_cceba +_dbca ];
_gbgde +=tab [_befg ];};};case _adba > 0:if _dbg < _ffc {for _ddgb =_defbg ;_ddgb < _gggc ;_ddgb ,_acff ,_cceba =_ddgb +1,_acff +bm1 .RowStride ,_cceba +bm2 .RowStride {_fbff ,_geag =bm1 .Data [_acff ],bm2 .Data [_cceba ]>>uint (_adba );_befg =_fbff &_geag ;
_gbgde +=tab [_befg ];for _dbca =1;_dbca < _dbg ;_dbca ++{_fbff ,_geag =bm1 .Data [_acff +_dbca ],(bm2 .Data [_cceba +_dbca ]>>uint (_adba ))|(bm2 .Data [_cceba +_dbca -1]<<uint (8-_adba ));_befg =_fbff &_geag ;_gbgde +=tab [_befg ];};_fbff =bm1 .Data [_acff +_dbca ];
_geag =bm2 .Data [_cceba +_dbca -1]<<uint (8-_adba );_befg =_fbff &_geag ;_gbgde +=tab [_befg ];};}else {for _ddgb =_defbg ;_ddgb < _gggc ;_ddgb ,_acff ,_cceba =_ddgb +1,_acff +bm1 .RowStride ,_cceba +bm2 .RowStride {_fbff ,_geag =bm1 .Data [_acff ],bm2 .Data [_cceba ]>>uint (_adba );
_befg =_fbff &_geag ;_gbgde +=tab [_befg ];for _dbca =1;_dbca < _ffc ;_dbca ++{_fbff =bm1 .Data [_acff +_dbca ];_geag =(bm2 .Data [_cceba +_dbca ]>>uint (_adba ))|(bm2 .Data [_cceba +_dbca -1]<<uint (8-_adba ));_befg =_fbff &_geag ;_gbgde +=tab [_befg ];
};};};default:if _ffc < _dbg {for _ddgb =_defbg ;_ddgb < _gggc ;_ddgb ,_acff ,_cceba =_ddgb +1,_acff +bm1 .RowStride ,_cceba +bm2 .RowStride {for _dbca =0;_dbca < _ffc ;_dbca ++{_fbff =bm1 .Data [_acff +_dbca ];_geag =bm2 .Data [_cceba +_dbca ]<<uint (-_adba );
_geag |=bm2 .Data [_cceba +_dbca +1]>>uint (8+_adba );_befg =_fbff &_geag ;_gbgde +=tab [_befg ];};};}else {for _ddgb =_defbg ;_ddgb < _gggc ;_ddgb ,_acff ,_cceba =_ddgb +1,_acff +bm1 .RowStride ,_cceba +bm2 .RowStride {for _dbca =0;_dbca < _ffc -1;_dbca ++{_fbff =bm1 .Data [_acff +_dbca ];
_geag =bm2 .Data [_cceba +_dbca ]<<uint (-_adba );_geag |=bm2 .Data [_cceba +_dbca +1]>>uint (8+_adba );_befg =_fbff &_geag ;_gbgde +=tab [_befg ];};_fbff =bm1 .Data [_acff +_dbca ];_geag =bm2 .Data [_cceba +_dbca ]<<uint (-_adba );_befg =_fbff &_geag ;
_gbgde +=tab [_befg ];};};};_gbfe =float64 (_gbgde )*float64 (_gbgde )/(float64 (area1 )*float64 (area2 ));return _gbfe ,nil ;};func (_agdgf *Bitmaps )GroupByHeight ()(*BitmapsArray ,error ){const _bcbb ="\u0047\u0072\u006f\u0075\u0070\u0042\u0079\u0048\u0065\u0069\u0067\u0068\u0074";
if len (_agdgf .Values )==0{return nil ,_g .Error (_bcbb ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_gccc :=&BitmapsArray {};_agdgf .SortByHeight ();_efad :=-1;_ffab :=-1;for _cacf :=0;_cacf < len (_agdgf .Values );
_cacf ++{_ccag :=_agdgf .Values [_cacf ].Height ;if _ccag > _efad {_efad =_ccag ;_ffab ++;_gccc .Values =append (_gccc .Values ,&Bitmaps {});};_gccc .Values [_ffab ].AddBitmap (_agdgf .Values [_cacf ]);};return _gccc ,nil ;};func _bfabg (_cbca *Bitmap ,_bdcc ,_facf ,_fbed ,_ebfc int ,_cgdf RasterOperator ,_cegdf *Bitmap ,_adcd ,_afbba int )error {var (_aaca bool ;
_decfd bool ;_aefe byte ;_edgfef int ;_eabce int ;_cafe int ;_aecd int ;_cefa bool ;_efff int ;_dacce int ;_ggaf int ;_gafbd bool ;_fefb byte ;_bad int ;_ebac int ;_gdff int ;_ebbd byte ;_fggfb int ;_bfgba int ;_gcagb uint ;_agdbg uint ;_dada byte ;_cfeff shift ;
_fdbd bool ;_bcbg bool ;_ceba ,_bdfca int ;);if _adcd &7!=0{_bfgba =8-(_adcd &7);};if _bdcc &7!=0{_eabce =8-(_bdcc &7);};if _bfgba ==0&&_eabce ==0{_dada =_eebb [0];}else {if _eabce > _bfgba {_gcagb =uint (_eabce -_bfgba );}else {_gcagb =uint (8-(_bfgba -_eabce ));
};_agdbg =8-_gcagb ;_dada =_eebb [_gcagb ];};if (_bdcc &7)!=0{_aaca =true ;_edgfef =8-(_bdcc &7);_aefe =_eebb [_edgfef ];_cafe =_cbca .RowStride *_facf +(_bdcc >>3);_aecd =_cegdf .RowStride *_afbba +(_adcd >>3);_fggfb =8-(_adcd &7);if _edgfef > _fggfb {_cfeff =_geaaa ;
if _fbed >=_bfgba {_fdbd =true ;};}else {_cfeff =_fbegg ;};};if _fbed < _edgfef {_decfd =true ;_aefe &=_gebag [8-_edgfef +_fbed ];};if !_decfd {_efff =(_fbed -_edgfef )>>3;if _efff !=0{_cefa =true ;_dacce =_cbca .RowStride *_facf +((_bdcc +_eabce )>>3);
_ggaf =_cegdf .RowStride *_afbba +((_adcd +_eabce )>>3);};};_bad =(_bdcc +_fbed )&7;if !_decfd &&_bad !=0{_gafbd =true ;_fefb =_gebag [_bad ];_ebac =_cbca .RowStride *_facf +((_bdcc +_eabce )>>3)+_efff ;_gdff =_cegdf .RowStride *_afbba +((_adcd +_eabce )>>3)+_efff ;
if _bad > int (_agdbg ){_bcbg =true ;};};switch _cgdf {case PixSrc :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;
};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],_ebbd ,_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );
_cbca .Data [_dacce +_bdfca ]=_ebbd ;};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );
};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],_ebbd ,_fefb );_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};case PixNotSrc :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );
};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],^_ebbd ,_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );
_cbca .Data [_dacce +_bdfca ]=^_ebbd ;};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );
};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],^_ebbd ,_fefb );_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};case PixSrcOrDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );
};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],_ebbd |_cbca .Data [_cafe ],_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;
_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]|=_ebbd ;};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;
_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],_ebbd |_cbca .Data [_ebac ],_fefb );_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;
};};case PixSrcAndDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],_ebbd &_cbca .Data [_cafe ],_aefe );
_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]&=_ebbd ;
};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],_ebbd &_cbca .Data [_ebac ],_fefb );
_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};case PixSrcXorDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );
};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],_ebbd ^_cbca .Data [_cafe ],_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;
_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]^=_ebbd ;};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;
_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],_ebbd ^_cbca .Data [_ebac ],_fefb );_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;
};};case PixNotSrcOrDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],^_ebbd |_cbca .Data [_cafe ],_aefe );
_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]|=^_ebbd ;
};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],^_ebbd |_cbca .Data [_ebac ],_fefb );
_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};case PixNotSrcAndDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );
};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],^_ebbd &_cbca .Data [_cafe ],_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;
_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]&=^_ebbd ;};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;
_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],^_ebbd &_cbca .Data [_ebac ],_fefb );_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;
};};case PixSrcOrNotDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],_ebbd |^_cbca .Data [_cafe ],_aefe );
_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]=_ebbd |^_cbca .Data [_dacce +_bdfca ];
};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],_ebbd |^_cbca .Data [_ebac ],_fefb );
_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};case PixSrcAndNotDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );
};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],_ebbd &^_cbca .Data [_cafe ],_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;
_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]=_ebbd &^_cbca .Data [_dacce +_bdfca ];};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;
};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],_ebbd &^_cbca .Data [_ebac ],_fefb );_ebac +=_cbca .RowStride ;
_gdff +=_cegdf .RowStride ;};};case PixNotPixSrcOrDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;
};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],^(_ebbd |_cbca .Data [_cafe ]),_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );
_cbca .Data [_dacce +_bdfca ]=^(_ebbd |_cbca .Data [_dacce +_bdfca ]);};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );
};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],^(_ebbd |_cbca .Data [_ebac ]),_fefb );_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};case PixNotPixSrcAndDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;
if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],^(_ebbd &_cbca .Data [_cafe ]),_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;
};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]=^(_ebbd &_cbca .Data [_dacce +_bdfca ]);
};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],^(_ebbd &_cbca .Data [_ebac ]),_fefb );
_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};case PixNotPixSrcXorDst :if _aaca {for _ceba =0;_ceba < _ebfc ;_ceba ++{if _cfeff ==_geaaa {_ebbd =_cegdf .Data [_aecd ]<<_gcagb ;if _fdbd {_ebbd =_fcac (_ebbd ,_cegdf .Data [_aecd +1]>>_agdbg ,_dada );
};}else {_ebbd =_cegdf .Data [_aecd ]>>_agdbg ;};_cbca .Data [_cafe ]=_fcac (_cbca .Data [_cafe ],^(_ebbd ^_cbca .Data [_cafe ]),_aefe );_cafe +=_cbca .RowStride ;_aecd +=_cegdf .RowStride ;};};if _cefa {for _ceba =0;_ceba < _ebfc ;_ceba ++{for _bdfca =0;
_bdfca < _efff ;_bdfca ++{_ebbd =_fcac (_cegdf .Data [_ggaf +_bdfca ]<<_gcagb ,_cegdf .Data [_ggaf +_bdfca +1]>>_agdbg ,_dada );_cbca .Data [_dacce +_bdfca ]=^(_ebbd ^_cbca .Data [_dacce +_bdfca ]);};_dacce +=_cbca .RowStride ;_ggaf +=_cegdf .RowStride ;
};};if _gafbd {for _ceba =0;_ceba < _ebfc ;_ceba ++{_ebbd =_cegdf .Data [_gdff ]<<_gcagb ;if _bcbg {_ebbd =_fcac (_ebbd ,_cegdf .Data [_gdff +1]>>_agdbg ,_dada );};_cbca .Data [_ebac ]=_fcac (_cbca .Data [_ebac ],^(_ebbd ^_cbca .Data [_ebac ]),_fefb );
_ebac +=_cbca .RowStride ;_gdff +=_cegdf .RowStride ;};};default:_de .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",_cgdf );
return _g .Error ("\u0072a\u0073t\u0065\u0072\u004f\u0070\u0047e\u006e\u0065r\u0061\u006c\u004c\u006f\u0077","\u0072\u0061\u0073\u0074\u0065\u0072\u0020\u006f\u0070\u0065r\u0061\u0074\u0069\u006f\u006e\u0020\u006eo\u0074\u0020\u0070\u0065\u0072\u006d\u0069\u0074\u0074\u0065\u0064");
};return nil ;};func _ffeeg (_fcfb ,_dgdf int ,_daea string )*Selection {_cfcb :=&Selection {Height :_fcfb ,Width :_dgdf ,Name :_daea };_cfcb .Data =make ([][]SelectionValue ,_fcfb );for _dfed :=0;_dfed < _fcfb ;_dfed ++{_cfcb .Data [_dfed ]=make ([]SelectionValue ,_dgdf );
};return _cfcb ;};func TstWriteSymbols (t *_f .T ,bms *Bitmaps ,src *Bitmap ){for _egcad :=0;_egcad < bms .Size ();_egcad ++{_fgegc :=bms .Values [_egcad ];_eafc :=bms .Boxes [_egcad ];_ceead :=src .RasterOperation (_eafc .Min .X ,_eafc .Min .Y ,_fgegc .Width ,_fgegc .Height ,PixSrc ,_fgegc ,0,0);
_e .NoError (t ,_ceead );};};func (_dabe *Bitmap )removeBorderGeneral (_ccbg ,_eeeef ,_dcfc ,_bggc int )(*Bitmap ,error ){const _acbf ="\u0072\u0065\u006d\u006fve\u0042\u006f\u0072\u0064\u0065\u0072\u0047\u0065\u006e\u0065\u0072\u0061\u006c";if _ccbg < 0||_eeeef < 0||_dcfc < 0||_bggc < 0{return nil ,_g .Error (_acbf ,"\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");
};_fca ,_eaba :=_dabe .Width ,_dabe .Height ;_edee :=_fca -_ccbg -_eeeef ;_cfb :=_eaba -_dcfc -_bggc ;if _edee <=0{return nil ,_g .Errorf (_acbf ,"w\u0069\u0064\u0074\u0068: \u0025d\u0020\u006d\u0075\u0073\u0074 \u0062\u0065\u0020\u003e\u0020\u0030",_edee );
};if _cfb <=0{return nil ,_g .Errorf (_acbf ,"\u0068\u0065\u0069\u0067ht\u003a\u0020\u0025\u0064\u0020\u006d\u0075\u0073\u0074\u0020\u0062\u0065\u0020\u003e \u0030",_cfb );};_abdf :=New (_edee ,_cfb );_abdf .Color =_dabe .Color ;_deb :=_abdf .RasterOperation (0,0,_edee ,_cfb ,PixSrc ,_dabe ,_ccbg ,_dcfc );
if _deb !=nil {return nil ,_g .Wrap (_deb ,_acbf ,"");};return _abdf ,nil ;};func (_ggcfa *Bitmap )setAll ()error {_cceg :=_gbee (_ggcfa ,0,0,_ggcfa .Width ,_ggcfa .Height ,PixSet ,nil ,0,0);if _cceg !=nil {return _g .Wrap (_cceg ,"\u0073\u0065\u0074\u0041\u006c\u006c","");
};return nil ;};func (_agd *Bitmap )String ()string {var _becaf ="\u000a";for _bdgc :=0;_bdgc < _agd .Height ;_bdgc ++{var _ccga string ;for _eeg :=0;_eeg < _agd .Width ;_eeg ++{_ecc :=_agd .GetPixel (_eeg ,_bdgc );if _ecc {_ccga +="\u0031";}else {_ccga +="\u0030";
};};_becaf +=_ccga +"\u000a";};return _becaf ;};func _cegb (_ege ,_dgdg *Bitmap ,_ggcfe ,_dedg int )(*Bitmap ,error ){const _dbce ="\u006fp\u0065\u006e\u0042\u0072\u0069\u0063k";if _dgdg ==nil {return nil ,_g .Error (_dbce ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if _ggcfe < 1&&_dedg < 1{return nil ,_g .Error (_dbce ,"\u0068\u0053\u0069\u007ae \u003c\u0020\u0031\u0020\u0026\u0026\u0020\u0076\u0053\u0069\u007a\u0065\u0020\u003c \u0031");};if _ggcfe ==1&&_dedg ==1{return _dgdg .Copy (),nil ;};if _ggcfe ==1||_dedg ==1{var _bafd error ;
_cfdc :=SelCreateBrick (_dedg ,_ggcfe ,_dedg /2,_ggcfe /2,SelHit );_ege ,_bafd =_fgfd (_ege ,_dgdg ,_cfdc );if _bafd !=nil {return nil ,_g .Wrap (_bafd ,_dbce ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _ege ,nil ;};_adga :=SelCreateBrick (1,_ggcfe ,0,_ggcfe /2,SelHit );_gdab :=SelCreateBrick (_dedg ,1,_dedg /2,0,SelHit );_cca ,_bbce :=_adbe (nil ,_dgdg ,_adga );if _bbce !=nil {return nil ,_g .Wrap (_bbce ,_dbce ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_ege ,_bbce =_adbe (_ege ,_cca ,_gdab );if _bbce !=nil {return nil ,_g .Wrap (_bbce ,_dbce ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};_ ,_bbce =_gdc (_cca ,_ege ,_adga );if _bbce !=nil {return nil ,_g .Wrap (_bbce ,_dbce ,"\u0031\u0073\u0074\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};_ ,_bbce =_gdc (_ege ,_cca ,_gdab );if _bbce !=nil {return nil ,_g .Wrap (_bbce ,_dbce ,"\u0032\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");};return _ege ,nil ;};func (_aea *Bitmap )clipRectangle (_gad ,_cgge *_b .Rectangle )(_geb *Bitmap ,_ffa error ){const _cad ="\u0063\u006c\u0069\u0070\u0052\u0065\u0063\u0074\u0061\u006e\u0067\u006c\u0065";
if _gad ==nil {return nil ,_g .Error (_cad ,"\u0070r\u006fv\u0069\u0064\u0065\u0064\u0020n\u0069\u006c \u0027\u0062\u006f\u0078\u0027");};_abb ,_agdb :=_aea .Width ,_aea .Height ;_cbf ,_ffa :=ClipBoxToRectangle (_gad ,_abb ,_agdb );if _ffa !=nil {_de .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",_ffa );
return nil ,nil ;};_fcef ,_gce :=_cbf .Min .X ,_cbf .Min .Y ;_cadc ,_adab :=_cbf .Max .X -_cbf .Min .X ,_cbf .Max .Y -_cbf .Min .Y ;_geb =New (_cadc ,_adab );_geb .Text =_aea .Text ;if _ffa =_geb .RasterOperation (0,0,_cadc ,_adab ,PixSrc ,_aea ,_fcef ,_gce );
_ffa !=nil {return nil ,_g .Wrap (_ffa ,_cad ,"");};if _cgge !=nil {*_cgge =*_cbf ;};return _geb ,nil ;};func (_bbbff CombinationOperator )String ()string {var _eefg string ;switch _bbbff {case CmbOpOr :_eefg ="\u004f\u0052";case CmbOpAnd :_eefg ="\u0041\u004e\u0044";
case CmbOpXor :_eefg ="\u0058\u004f\u0052";case CmbOpXNor :_eefg ="\u0058\u004e\u004f\u0052";case CmbOpReplace :_eefg ="\u0052E\u0050\u004c\u0041\u0043\u0045";case CmbOpNot :_eefg ="\u004e\u004f\u0054";};return _eefg ;};func (_gabf *Bitmap )createTemplate ()*Bitmap {return &Bitmap {Width :_gabf .Width ,Height :_gabf .Height ,RowStride :_gabf .RowStride ,Color :_gabf .Color ,Text :_gabf .Text ,BitmapNumber :_gabf .BitmapNumber ,Special :_gabf .Special ,Data :make ([]byte ,len (_gabf .Data ))};
};func (_febcd *BitmapsArray )GetBox (i int )(*_b .Rectangle ,error ){const _egdf ="\u0042\u0069\u0074\u006dap\u0073\u0041\u0072\u0072\u0061\u0079\u002e\u0047\u0065\u0074\u0042\u006f\u0078";if _febcd ==nil {return nil ,_g .Error (_egdf ,"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 (_febcd .Boxes )-1{return nil ,_g .Errorf (_egdf ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _febcd .Boxes [i ],nil ;};func _ccea (_fged ,_ggba *Bitmap ,_ceae ,_ecea ,_ffbcg ,_gda ,_dcea int ,_cbab CombinationOperator )error {var _fgfa int ;
_edg :=func (){_fgfa ++;_ffbcg +=_ggba .RowStride ;_gda +=_fged .RowStride ;_dcea +=_fged .RowStride };for _fgfa =_ceae ;_fgfa < _ecea ;_edg (){_addd :=_ffbcg ;for _gcfe :=_gda ;_gcfe <=_dcea ;_gcfe ++{_gacfe ,_ggf :=_ggba .GetByte (_addd );if _ggf !=nil {return _ggf ;
};_bfdb ,_ggf :=_fged .GetByte (_gcfe );if _ggf !=nil {return _ggf ;};if _ggf =_ggba .SetByte (_addd ,_bagb (_gacfe ,_bfdb ,_cbab ));_ggf !=nil {return _ggf ;};_addd ++;};};return nil ;};func _ddgd (_ccfaf *Bitmap ,_ccebc *_db .Stack ,_febfc ,_fgead int )(_bddeg *_b .Rectangle ,_bcee error ){const _cddaf ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _ccfaf ==nil {return nil ,_g .Error (_cddaf ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _ccebc ==nil {return nil ,_g .Error (_cddaf ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};_edcc ,_efag :=_ccfaf .Width ,_ccfaf .Height ;_egccd :=_edcc -1;_cbfb :=_efag -1;if _febfc < 0||_febfc > _egccd ||_fgead < 0||_fgead > _cbfb ||!_ccfaf .GetPixel (_febfc ,_fgead ){return nil ,nil ;};_efcdg :=_b .Rect (100000,100000,0,0);if _bcee =_gebg (_ccebc ,_febfc ,_febfc ,_fgead ,1,_cbfb ,&_efcdg );
_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u0069\u006e\u0069t\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _bcee =_gebg (_ccebc ,_febfc ,_febfc ,_fgead +1,-1,_cbfb ,&_efcdg );_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u0032\u006ed\u0020\u0069\u006ei\u0074\u0069\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
};_efcdg .Min .X ,_efcdg .Max .X =_febfc ,_febfc ;_efcdg .Min .Y ,_efcdg .Max .Y =_fgead ,_fgead ;var (_agbb *fillSegment ;_bdga int ;);for _ccebc .Len ()> 0{if _agbb ,_bcee =_dgdee (_ccebc );_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"");};_fgead =_agbb ._gdda ;
for _febfc =_agbb ._fgeg -1;_febfc >=0&&_ccfaf .GetPixel (_febfc ,_fgead );_febfc --{if _bcee =_ccfaf .SetPixel (_febfc ,_fgead ,0);_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u0031s\u0074\u0020\u0073\u0065\u0074");};};if _febfc >=_agbb ._fgeg -1{for {for _febfc ++;
_febfc <=_agbb ._efcee +1&&_febfc <=_egccd &&!_ccfaf .GetPixel (_febfc ,_fgead );_febfc ++{};_bdga =_febfc ;if _febfc > _agbb ._efcee +1||_febfc > _egccd {break ;};for ;_febfc <=_egccd &&_ccfaf .GetPixel (_febfc ,_fgead );_febfc ++{if _bcee =_ccfaf .SetPixel (_febfc ,_fgead ,0);
_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bcee =_gebg (_ccebc ,_bdga ,_febfc -1,_agbb ._gdda ,_agbb ._gfff ,_cbfb ,&_efcdg );_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");
};if _febfc > _agbb ._efcee {if _bcee =_gebg (_ccebc ,_agbb ._efcee +1,_febfc -1,_agbb ._gdda ,-_agbb ._gfff ,_cbfb ,&_efcdg );_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};};continue ;};_bdga =_febfc +1;if _bdga < _agbb ._fgeg {if _bcee =_gebg (_ccebc ,_bdga ,_agbb ._fgeg -1,_agbb ._gdda ,-_agbb ._gfff ,_cbfb ,&_efcdg );_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u006c\u0065\u0061\u006b\u0020\u006f\u006e\u0020\u006c\u0065\u0066\u0074 \u0073\u0069\u0064\u0065");
};};_febfc =_agbb ._fgeg ;for {for ;_febfc <=_egccd &&_ccfaf .GetPixel (_febfc ,_fgead );_febfc ++{if _bcee =_ccfaf .SetPixel (_febfc ,_fgead ,0);_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u0032n\u0064\u0020\u0073\u0065\u0074");};};if _bcee =_gebg (_ccebc ,_bdga ,_febfc -1,_agbb ._gdda ,_agbb ._gfff ,_cbfb ,&_efcdg );
_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"n\u006f\u0072\u006d\u0061\u006c\u0020\u0070\u0075\u0073\u0068");};if _febfc > _agbb ._efcee {if _bcee =_gebg (_ccebc ,_agbb ._efcee +1,_febfc -1,_agbb ._gdda ,-_agbb ._gfff ,_cbfb ,&_efcdg );_bcee !=nil {return nil ,_g .Wrap (_bcee ,_cddaf ,"\u006ce\u0061k\u0020\u006f\u006e\u0020\u0072i\u0067\u0068t\u0020\u0073\u0069\u0064\u0065");
};};for _febfc ++;_febfc <=_agbb ._efcee +1&&_febfc <=_egccd &&!_ccfaf .GetPixel (_febfc ,_fgead );_febfc ++{};_bdga =_febfc ;if _febfc > _agbb ._efcee +1||_febfc > _egccd {break ;};};};_efcdg .Max .X ++;_efcdg .Max .Y ++;return &_efcdg ,nil ;};func (_ceeg *Bitmap )RasterOperation (dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _gbee (_ceeg ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );
};type Boxes []*_b .Rectangle ;func _fgd (_gaag *Bitmap ,_eg ...int )(_ee *Bitmap ,_eed error ){const _dgg ="\u0072\u0065\u0064uc\u0065\u0052\u0061\u006e\u006b\u0042\u0069\u006e\u0061\u0072\u0079\u0043\u0061\u0073\u0063\u0061\u0064\u0065";if _gaag ==nil {return nil ,_g .Error (_dgg ,"\u0073o\u0075\u0072\u0063\u0065 \u0062\u0069\u0074\u006d\u0061p\u0020n\u006ft\u0020\u0064\u0065\u0066\u0069\u006e\u0065d");
};if len (_eg )==0||len (_eg )> 4{return nil ,_g .Error (_dgg ,"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 _eg [0]<=0{_de .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");_ee ,_eed =_bgff (nil ,_gaag );if _eed !=nil {return nil ,_g .Wrap (_eed ,_dgg ,"l\u0065\u0076\u0065\u006c\u0031\u0020\u003c\u003d\u0020\u0030");
};return _ee ,nil ;};_bfb :=_bggf ();_ee =_gaag ;for _ccbd ,_cbe :=range _eg {if _cbe <=0{break ;};_ee ,_eed =_fbf (_ee ,_cbe ,_bfb );if _eed !=nil {return nil ,_g .Wrapf (_eed ,_dgg ,"\u006c\u0065\u0076\u0065\u006c\u0025\u0064\u0020\u0072\u0065\u0064\u0075c\u0074\u0069\u006f\u006e",_ccbd );
};};return _ee ,nil ;};func (_cgfb Points )XSorter ()func (_bbaeb ,_bgbc int )bool {return func (_bcbd ,_dfbe int )bool {return _cgfb [_bcbd ].X < _cgfb [_dfbe ].X };};const (PixSrc RasterOperator =0xc;PixDst RasterOperator =0xa;PixNotSrc RasterOperator =0x3;
PixNotDst RasterOperator =0x5;PixClr RasterOperator =0x0;PixSet RasterOperator =0xf;PixSrcOrDst RasterOperator =0xe;PixSrcAndDst RasterOperator =0x8;PixSrcXorDst RasterOperator =0x6;PixNotSrcOrDst RasterOperator =0xb;PixNotSrcAndDst RasterOperator =0x2;
PixSrcOrNotDst RasterOperator =0xd;PixSrcAndNotDst RasterOperator =0x4;PixNotPixSrcOrDst RasterOperator =0x1;PixNotPixSrcAndDst RasterOperator =0x7;PixNotPixSrcXorDst RasterOperator =0x9;PixPaint =PixSrcOrDst ;PixSubtract =PixNotSrcAndDst ;PixMask =PixSrcAndDst ;
);func RasterOperation (dest *Bitmap ,dx ,dy ,dw ,dh int ,op RasterOperator ,src *Bitmap ,sx ,sy int )error {return _gbee (dest ,dx ,dy ,dw ,dh ,op ,src ,sx ,sy );};func _adbc (_geaabe *Bitmap ,_ggef *_db .Stack ,_gbgdec ,_dbeb ,_fdfd int )(_dace *_b .Rectangle ,_gdbg error ){const _dfdgg ="\u0073e\u0065d\u0046\u0069\u006c\u006c\u0053\u0074\u0061\u0063\u006b\u0042\u0042";
if _geaabe ==nil {return nil ,_g .Error (_dfdgg ,"\u0070\u0072\u006fvi\u0064\u0065\u0064\u0020\u006e\u0069\u006c\u0020\u0027\u0073\u0027\u0020\u0042\u0069\u0074\u006d\u0061\u0070");};if _ggef ==nil {return nil ,_g .Error (_dfdgg ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0027\u0073\u0074ac\u006b\u0027");
};switch _fdfd {case 4:if _dace ,_gdbg =_edgg (_geaabe ,_ggef ,_gbgdec ,_dbeb );_gdbg !=nil {return nil ,_g .Wrap (_gdbg ,_dfdgg ,"");};return _dace ,nil ;case 8:if _dace ,_gdbg =_ddgd (_geaabe ,_ggef ,_gbgdec ,_dbeb );_gdbg !=nil {return nil ,_g .Wrap (_gdbg ,_dfdgg ,"");
};return _dace ,nil ;default:return nil ,_g .Errorf (_dfdgg ,"\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",_fdfd );
};};func _ca (_gd *Bitmap ,_gaa int )(*Bitmap ,error ){const _dcc ="\u0065x\u0070a\u006e\u0064\u0042\u0069\u006ea\u0072\u0079P\u006f\u0077\u0065\u0072\u0032";if _gd ==nil {return nil ,_g .Error (_dcc ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");
};if _gaa ==1{return _bgff (nil ,_gd );};if _gaa !=2&&_gaa !=4&&_gaa !=8{return nil ,_g .Error (_dcc ,"\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");
};_aab :=_gaa *_gd .Width ;_gae :=_gaa *_gd .Height ;_dg :=New (_aab ,_gae );var _acb error ;switch _gaa {case 2:_acb =_fc (_dg ,_gd );case 4:_acb =_af (_dg ,_gd );case 8:_acb =_dff (_dg ,_gd );};if _acb !=nil {return nil ,_g .Wrap (_acb ,_dcc ,"");};return _dg ,nil ;
};func (_cgb *Bitmap )SetDefaultPixel (){for _bfc :=range _cgb .Data {_cgb .Data [_bfc ]=byte (0xff);};};type Point struct{X ,Y float32 ;};func (_baed Points )Get (i int )(Point ,error ){if i > len (_baed )-1{return Point {},_g .Errorf ("\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0047\u0065\u0074","\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );
};return _baed [i ],nil ;};func RankHausTest (p1 ,p2 ,p3 ,p4 *Bitmap ,delX ,delY float32 ,maxDiffW ,maxDiffH ,area1 ,area3 int ,rank float32 ,tab8 []int )(_gbce bool ,_beaag error ){const _ceaae ="\u0052\u0061\u006ek\u0048\u0061\u0075\u0073\u0054\u0065\u0073\u0074";
_aaed ,_abdc :=p1 .Width ,p1 .Height ;_dbed ,_efcg :=p3 .Width ,p3 .Height ;if _db .Abs (_aaed -_dbed )> maxDiffW {return false ,nil ;};if _db .Abs (_abdc -_efcg )> maxDiffH {return false ,nil ;};_ggdf :=int (float32 (area1 )*(1.0-rank )+0.5);_fbda :=int (float32 (area3 )*(1.0-rank )+0.5);
var _aeb ,_ddbb int ;if delX >=0{_aeb =int (delX +0.5);}else {_aeb =int (delX -0.5);};if delY >=0{_ddbb =int (delY +0.5);}else {_ddbb =int (delY -0.5);};_dcfd :=p1 .CreateTemplate ();if _beaag =_dcfd .RasterOperation (0,0,_aaed ,_abdc ,PixSrc ,p1 ,0,0);
_beaag !=nil {return false ,_g .Wrap (_beaag ,_ceaae ,"p\u0031\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _beaag =_dcfd .RasterOperation (_aeb ,_ddbb ,_aaed ,_abdc ,PixNotSrcAndDst ,p4 ,0,0);_beaag !=nil {return false ,_g .Wrap (_beaag ,_ceaae ,"\u0074 \u0026\u0020\u0021\u0070\u0034");
};_gbce ,_beaag =_dcfd .ThresholdPixelSum (_ggdf ,tab8 );if _beaag !=nil {return false ,_g .Wrap (_beaag ,_ceaae ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0031");};if _gbce {return false ,nil ;};if _beaag =_dcfd .RasterOperation (_aeb ,_ddbb ,_dbed ,_efcg ,PixSrc ,p3 ,0,0);
_beaag !=nil {return false ,_g .Wrap (_beaag ,_ceaae ,"p\u0033\u0020\u002d\u0053\u0052\u0043\u002d\u003e\u0020\u0074");};if _beaag =_dcfd .RasterOperation (0,0,_dbed ,_efcg ,PixNotSrcAndDst ,p2 ,0,0);_beaag !=nil {return false ,_g .Wrap (_beaag ,_ceaae ,"\u0074 \u0026\u0020\u0021\u0070\u0032");
};_gbce ,_beaag =_dcfd .ThresholdPixelSum (_fbda ,tab8 );if _beaag !=nil {return false ,_g .Wrap (_beaag ,_ceaae ,"\u0074\u002d\u003e\u0074\u0068\u0072\u0065\u0073\u0068\u0033");};return !_gbce ,nil ;};func (_agafc *Points )Add (pt *Points )error {const _edb ="\u0050\u006f\u0069\u006e\u0074\u0073\u002e\u0041\u0064\u0064";
if _agafc ==nil {return _g .Error (_edb ,"\u0070o\u0069n\u0074\u0073\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if pt ==nil {return _g .Error (_edb ,"a\u0072\u0067\u0075\u006d\u0065\u006et\u0020\u0070\u006f\u0069\u006e\u0074\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};*_agafc =append (*_agafc ,*pt ...);return nil ;};func (_cddga *Bitmap )setEightFullBytes (_afcb int ,_fbbg uint64 )error {if _afcb +7> len (_cddga .Data )-1{return _g .Error ("\u0073\u0065\u0074\u0045\u0069\u0067\u0068\u0074\u0042\u0079\u0074\u0065\u0073","\u0069n\u0064e\u0078\u0020\u006f\u0075\u0074 \u006f\u0066 \u0072\u0061\u006e\u0067\u0065");
};_cddga .Data [_afcb ]=byte ((_fbbg &0xff00000000000000)>>56);_cddga .Data [_afcb +1]=byte ((_fbbg &0xff000000000000)>>48);_cddga .Data [_afcb +2]=byte ((_fbbg &0xff0000000000)>>40);_cddga .Data [_afcb +3]=byte ((_fbbg &0xff00000000)>>32);_cddga .Data [_afcb +4]=byte ((_fbbg &0xff000000)>>24);
_cddga .Data [_afcb +5]=byte ((_fbbg &0xff0000)>>16);_cddga .Data [_afcb +6]=byte ((_fbbg &0xff00)>>8);_cddga .Data [_afcb +7]=byte (_fbbg &0xff);return nil ;};func TstAddSymbol (t *_f .T ,bms *Bitmaps ,sym *Bitmap ,x *int ,y int ,space int ){bms .AddBitmap (sym );
_ggeff :=_b .Rect (*x ,y ,*x +sym .Width ,y +sym .Height );bms .AddBox (&_ggeff );*x +=sym .Width +space ;};func (_ggfe *ClassedPoints )YAtIndex (i int )float32 {return (*_ggfe .Points )[_ggfe .IntSlice [i ]].Y };func (_gdeb *ClassedPoints )Less (i ,j int )bool {return _gdeb ._bdde (i ,j )};
func (_afb *Bitmap )CreateTemplate ()*Bitmap {return _afb .createTemplate ()};func (_aedd *Selection )findMaxTranslations ()(_dfagc ,_bgffc ,_afec ,_dbfdd int ){for _baca :=0;_baca < _aedd .Height ;_baca ++{for _fece :=0;_fece < _aedd .Width ;_fece ++{if _aedd .Data [_baca ][_fece ]==SelHit {_dfagc =_gcee (_dfagc ,_aedd .Cx -_fece );
_bgffc =_gcee (_bgffc ,_aedd .Cy -_baca );_afec =_gcee (_afec ,_fece -_aedd .Cx );_dbfdd =_gcee (_dbfdd ,_baca -_aedd .Cy );};};};return _dfagc ,_bgffc ,_afec ,_dbfdd ;};func (_fega MorphProcess )getWidthHeight ()(_faec ,_gged int ){return _fega .Arguments [0],_fega .Arguments [1];
};func (_gcagd Points )Size ()int {return len (_gcagd )};func (_dge *Bitmap )SetPixel (x ,y int ,pixel byte )error {_eca :=_dge .GetByteIndex (x ,y );if _eca > len (_dge .Data )-1{return _g .Errorf ("\u0053\u0065\u0074\u0050\u0069\u0078\u0065\u006c","\u0069\u006e\u0064\u0065x \u006f\u0075\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065\u003a\u0020%\u0064",_eca );
};_gafe :=_dge .GetBitOffset (x );_ddc :=uint (7-_gafe );_eafg :=_dge .Data [_eca ];var _dgeb byte ;if pixel ==1{_dgeb =_eafg |(pixel &0x01<<_ddc );}else {_dgeb =_eafg &^(1<<_ddc );};_dge .Data [_eca ]=_dgeb ;return nil ;};func (_agba *Bitmap )RemoveBorderGeneral (left ,right ,top ,bot int )(*Bitmap ,error ){return _agba .removeBorderGeneral (left ,right ,top ,bot );
};func (_ddg *Bitmap )countPixels ()int {var (_bfda int ;_dfcg uint8 ;_daad byte ;_ggcf int ;);_ead :=_ddg .RowStride ;_eacg :=uint (_ddg .Width &0x07);if _eacg !=0{_dfcg =uint8 ((0xff<<(8-_eacg ))&0xff);_ead --;};for _edce :=0;_edce < _ddg .Height ;_edce ++{for _ggcf =0;
_ggcf < _ead ;_ggcf ++{_daad =_ddg .Data [_edce *_ddg .RowStride +_ggcf ];_bfda +=int (_fee [_daad ]);};if _eacg !=0{_bfda +=int (_fee [_ddg .Data [_edce *_ddg .RowStride +_ggcf ]&_dfcg ]);};};return _bfda ;};type byWidth Bitmaps ;func (_ggfd *ClassedPoints )validateIntSlice ()error {const _bcab ="\u0076\u0061l\u0069\u0064\u0061t\u0065\u0049\u006e\u0074\u0053\u006c\u0069\u0063\u0065";
for _ ,_abag :=range _ggfd .IntSlice {if _abag >=(_ggfd .Points .Size ()){return _g .Errorf (_bcab ,"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",_abag ,_ggfd .Points .Size ());
};};return nil ;};func (_dbabf *Selection )setOrigin (_eeage ,_abdg int ){_dbabf .Cy ,_dbabf .Cx =_eeage ,_abdg };func (_fdg *Bitmap )clearAll ()error {return _fdg .RasterOperation (0,0,_fdg .Width ,_fdg .Height ,PixClr ,nil ,0,0);};const (_ SizeSelection =iota ;
SizeSelectByWidth ;SizeSelectByHeight ;SizeSelectByMaxDimension ;SizeSelectByArea ;SizeSelectByPerimeter ;);func CombineBytes (oldByte ,newByte byte ,op CombinationOperator )byte {return _bagb (oldByte ,newByte ,op );};func (_bfgb *Boxes )selectWithIndicator (_dabec *_db .NumSlice )(_fgda *Boxes ,_abe error ){const _eeb ="\u0042o\u0078\u0065\u0073\u002es\u0065\u006c\u0065\u0063\u0074W\u0069t\u0068I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _bfgb ==nil {return nil ,_g .Error (_eeb ,"b\u006f\u0078\u0065\u0073 '\u0062'\u0020\u006e\u006f\u0074\u0020d\u0065\u0066\u0069\u006e\u0065\u0064");};if _dabec ==nil {return nil ,_g .Error (_eeb ,"\u0027\u006ea\u0027\u0020\u006eo\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");
};if len (*_dabec )!=len (*_bfgb ){return nil ,_g .Error (_eeb ,"\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 _ccdd ,_fcgf int ;for _aggg :=0;_aggg < len (*_dabec );_aggg ++{if _ccdd ,_abe =_dabec .GetInt (_aggg );_abe !=nil {return nil ,_g .Wrap (_abe ,_eeb ,"\u0063\u0068\u0065\u0063\u006b\u0069\u006e\u0067\u0020c\u006f\u0075\u006e\u0074");};if _ccdd ==1{_fcgf ++;
};};if _fcgf ==len (*_bfgb ){return _bfgb ,nil ;};_ccc :=Boxes {};for _geg :=0;_geg < len (*_dabec );_geg ++{_ccdd =int ((*_dabec )[_geg ]);if _ccdd ==0{continue ;};_ccc =append (_ccc ,(*_bfgb )[_geg ]);};_fgda =&_ccc ;return _fgda ,nil ;};func (_dee *Bitmap )GetChocolateData ()[]byte {if _dee .Color ==Vanilla {_dee .inverseData ();
};return _dee .Data ;};func _acaf (_accc ,_bea ,_gebc *Bitmap )(*Bitmap ,error ){const _gbaf ="\u0062\u0069\u0074\u006d\u0061\u0070\u002e\u0078\u006f\u0072";if _bea ==nil {return nil ,_g .Error (_gbaf ,"'\u0062\u0031\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");
};if _gebc ==nil {return nil ,_g .Error (_gbaf ,"'\u0062\u0032\u0027\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _accc ==_gebc {return nil ,_g .Error (_gbaf ,"'\u0064\u0027\u0020\u003d\u003d\u0020\u0027\u0062\u0032\u0027");};if !_bea .SizesEqual (_gebc ){_de .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",_gbaf );
};var _fae error ;if _accc ,_fae =_bgff (_accc ,_bea );_fae !=nil {return nil ,_g .Wrap (_fae ,_gbaf ,"\u0063\u0061n\u0027\u0074\u0020c\u0072\u0065\u0061\u0074\u0065\u0020\u0027\u0064\u0027");};if _fae =_accc .RasterOperation (0,0,_accc .Width ,_accc .Height ,PixSrcXorDst ,_gebc ,0,0);
_fae !=nil {return nil ,_g .Wrap (_fae ,_gbaf ,"");};return _accc ,nil ;};func TstWordBitmapWithSpaces (t *_f .T ,scale ...int )*Bitmap {_afdaa :=1;if len (scale )> 0{_afdaa =scale [0];};_agfac :=3;_gfeba :=9+7+15+2*_agfac +2*_agfac ;_ggca :=5+_agfac +5+2*_agfac ;
_adeaf :=New (_gfeba *_afdaa ,_ggca *_afdaa );_eaaf :=&Bitmaps {};var _bccec *int ;_agfac *=_afdaa ;_eecfd :=_agfac ;_bccec =&_eecfd ;_aege :=_agfac ;_fabc :=TstDSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );_fabc =TstOSymbol (t ,scale ...);
TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,_agfac );_fabc =TstISymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );_fabc =TstTSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,_agfac );_fabc =TstNSymbol (t ,scale ...);
TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );_fabc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );_fabc =TstWSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,0);*_bccec =_agfac ;_aege =5*_afdaa +_agfac ;
_fabc =TstOSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );_fabc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,_agfac );_fabc =TstNSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );
_fabc =TstESymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );_fabc =TstVSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );_fabc =TstESymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,1*_afdaa );
_fabc =TstRSymbol (t ,scale ...);TstAddSymbol (t ,_eaaf ,_fabc ,_bccec ,_aege ,0);TstWriteSymbols (t ,_eaaf ,_adeaf );return _adeaf ;};func (_acee *Bitmaps )SortByWidth (){_gcccb :=(*byWidth )(_acee );_dd .Sort (_gcccb )};func _gbcc (_ecda *Bitmap ,_gcb ,_ccbga int ,_egbf ,_afa int ,_fgce RasterOperator ){var (_edcb bool ;
_fadfg bool ;_gfage int ;_deff int ;_gbbd int ;_afgb int ;_bega bool ;_cbbg byte ;);_ageg :=8-(_gcb &7);_bgbg :=_eebb [_ageg ];_facb :=_ecda .RowStride *_ccbga +(_gcb >>3);if _egbf < _ageg {_edcb =true ;_bgbg &=_gebag [8-_ageg +_egbf ];};if !_edcb {_gfage =(_egbf -_ageg )>>3;
if _gfage !=0{_fadfg =true ;_deff =_facb +1;};};_gbbd =(_gcb +_egbf )&7;if !_edcb &&_gbbd !=0{_bega =true ;_cbbg =_gebag [_gbbd ];_afgb =_facb +1+_gfage ;};var _egbga ,_afcbb int ;switch _fgce {case PixClr :for _egbga =0;_egbga < _afa ;_egbga ++{_ecda .Data [_facb ]=_fcac (_ecda .Data [_facb ],0x0,_bgbg );
_facb +=_ecda .RowStride ;};if _fadfg {for _egbga =0;_egbga < _afa ;_egbga ++{for _afcbb =0;_afcbb < _gfage ;_afcbb ++{_ecda .Data [_deff +_afcbb ]=0x0;};_deff +=_ecda .RowStride ;};};if _bega {for _egbga =0;_egbga < _afa ;_egbga ++{_ecda .Data [_afgb ]=_fcac (_ecda .Data [_afgb ],0x0,_cbbg );
_afgb +=_ecda .RowStride ;};};case PixSet :for _egbga =0;_egbga < _afa ;_egbga ++{_ecda .Data [_facb ]=_fcac (_ecda .Data [_facb ],0xff,_bgbg );_facb +=_ecda .RowStride ;};if _fadfg {for _egbga =0;_egbga < _afa ;_egbga ++{for _afcbb =0;_afcbb < _gfage ;
_afcbb ++{_ecda .Data [_deff +_afcbb ]=0xff;};_deff +=_ecda .RowStride ;};};if _bega {for _egbga =0;_egbga < _afa ;_egbga ++{_ecda .Data [_afgb ]=_fcac (_ecda .Data [_afgb ],0xff,_cbbg );_afgb +=_ecda .RowStride ;};};case PixNotDst :for _egbga =0;_egbga < _afa ;
_egbga ++{_ecda .Data [_facb ]=_fcac (_ecda .Data [_facb ],^_ecda .Data [_facb ],_bgbg );_facb +=_ecda .RowStride ;};if _fadfg {for _egbga =0;_egbga < _afa ;_egbga ++{for _afcbb =0;_afcbb < _gfage ;_afcbb ++{_ecda .Data [_deff +_afcbb ]=^(_ecda .Data [_deff +_afcbb ]);
};_deff +=_ecda .RowStride ;};};if _bega {for _egbga =0;_egbga < _afa ;_egbga ++{_ecda .Data [_afgb ]=_fcac (_ecda .Data [_afgb ],^_ecda .Data [_afgb ],_cbbg );_afgb +=_ecda .RowStride ;};};};};func (_eec *Bitmap )connComponentsBB (_cabg int )(_gbdaf *Boxes ,_dbac error ){const _ceff ="\u0042\u0069\u0074ma\u0070\u002e\u0063\u006f\u006e\u006e\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074\u0073\u0042\u0042";
if _cabg !=4&&_cabg !=8{return nil ,_g .Error (_ceff ,"\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 _eec .Zero (){return &Boxes {},nil ;
};_eec .setPadBits (0);_edeef ,_dbac :=_bgff (nil ,_eec );if _dbac !=nil {return nil ,_g .Wrap (_dbac ,_ceff ,"\u0062\u006d\u0031");};_ceef :=&_db .Stack {};_ceef .Aux =&_db .Stack {};_gbdaf =&Boxes {};var (_ddef ,_ddbe int ;_affb _b .Point ;_bbg bool ;
_edeb *_b .Rectangle ;);for {if _affb ,_bbg ,_dbac =_edeef .nextOnPixel (_ddbe ,_ddef );_dbac !=nil {return nil ,_g .Wrap (_dbac ,_ceff ,"");};if !_bbg {break ;};if _edeb ,_dbac =_adbc (_edeef ,_ceef ,_affb .X ,_affb .Y ,_cabg );_dbac !=nil {return nil ,_g .Wrap (_dbac ,_ceff ,"");
};if _dbac =_gbdaf .Add (_edeb );_dbac !=nil {return nil ,_g .Wrap (_dbac ,_ceff ,"");};_ddbe =_affb .X ;_ddef =_affb .Y ;};return _gbdaf ,nil ;};type MorphProcess struct{Operation MorphOperation ;Arguments []int ;};type shift int ;func _fgfd (_face ,_aega *Bitmap ,_gecgb *Selection )(*Bitmap ,error ){const _ffca ="\u006f\u0070\u0065\u006e";
var _ddbbg error ;_face ,_ddbbg =_aaa (_face ,_aega ,_gecgb );if _ddbbg !=nil {return nil ,_g .Wrap (_ddbbg ,_ffca ,"");};_ecfa ,_ddbbg :=_adbe (nil ,_aega ,_gecgb );if _ddbbg !=nil {return nil ,_g .Wrap (_ddbbg ,_ffca ,"");};_ ,_ddbbg =_gdc (_face ,_ecfa ,_gecgb );
if _ddbbg !=nil {return nil ,_g .Wrap (_ddbbg ,_ffca ,"");};return _face ,nil ;};func TstCSymbol (t *_f .T )*Bitmap {t .Helper ();_eadf :=New (6,6);_e .NoError (t ,_eadf .SetPixel (1,0,1));_e .NoError (t ,_eadf .SetPixel (2,0,1));_e .NoError (t ,_eadf .SetPixel (3,0,1));
_e .NoError (t ,_eadf .SetPixel (4,0,1));_e .NoError (t ,_eadf .SetPixel (0,1,1));_e .NoError (t ,_eadf .SetPixel (5,1,1));_e .NoError (t ,_eadf .SetPixel (0,2,1));_e .NoError (t ,_eadf .SetPixel (0,3,1));_e .NoError (t ,_eadf .SetPixel (0,4,1));_e .NoError (t ,_eadf .SetPixel (5,4,1));
_e .NoError (t ,_eadf .SetPixel (1,5,1));_e .NoError (t ,_eadf .SetPixel (2,5,1));_e .NoError (t ,_eadf .SetPixel (3,5,1));_e .NoError (t ,_eadf .SetPixel (4,5,1));return _eadf ;};func _cddge (_fdca ,_ecff *Bitmap ,_dfg ,_cecde int )(*Bitmap ,error ){const _cegc ="\u0063\u006c\u006f\u0073\u0065\u0053\u0061\u0066\u0065B\u0072\u0069\u0063\u006b";
if _ecff ==nil {return nil ,_g .Error (_cegc ,"\u0073\u006f\u0075\u0072\u0063\u0065\u0020\u0069\u0073\u0020\u006e\u0069\u006c");};if _dfg < 1||_cecde < 1{return nil ,_g .Error (_cegc ,"\u0068s\u0069\u007a\u0065\u0020\u0061\u006e\u0064\u0020\u0076\u0073\u0069z\u0065\u0020\u006e\u006f\u0074\u0020\u003e\u003d\u0020\u0031");
};if _dfg ==1&&_cecde ==1{return _bgff (_fdca ,_ecff );};if MorphBC ==SymmetricMorphBC {_efab ,_degf :=_becd (_fdca ,_ecff ,_dfg ,_cecde );if _degf !=nil {return nil ,_g .Wrap (_degf ,_cegc ,"\u0053\u0079m\u006d\u0065\u0074r\u0069\u0063\u004d\u006f\u0072\u0070\u0068\u0042\u0043");
};return _efab ,nil ;};_agac :=_gcee (_dfg /2,_cecde /2);_bcca :=8*((_agac +7)/8);_edfg ,_fgea :=_ecff .AddBorder (_bcca ,0);if _fgea !=nil {return nil ,_g .Wrapf (_fgea ,_cegc ,"\u0042\u006f\u0072\u0064\u0065\u0072\u0053\u0069\u007ae\u003a\u0020\u0025\u0064",_bcca );
};var _dcgc ,_bae *Bitmap ;if _dfg ==1||_cecde ==1{_gagca :=SelCreateBrick (_cecde ,_dfg ,_cecde /2,_dfg /2,SelHit );_dcgc ,_fgea =_bccb (nil ,_edfg ,_gagca );if _fgea !=nil {return nil ,_g .Wrap (_fgea ,_cegc ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};}else {_eabb :=SelCreateBrick (1,_dfg ,0,_dfg /2,SelHit );_accf ,_gfdfb :=_gdc (nil ,_edfg ,_eabb );if _gfdfb !=nil {return nil ,_g .Wrap (_gfdfb ,_cegc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0066\u0069\u0072\u0073\u0074\u0020\u0064\u0069\u006c\u0061t\u0065");
};_gcaf :=SelCreateBrick (_cecde ,1,_cecde /2,0,SelHit );_dcgc ,_gfdfb =_gdc (nil ,_accf ,_gcaf );if _gfdfb !=nil {return nil ,_g .Wrap (_gfdfb ,_cegc ,"\u0072\u0065\u0067ul\u0061\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0064\u0069\u006c\u0061\u0074\u0065");
};if _ ,_gfdfb =_adbe (_accf ,_dcgc ,_eabb );_gfdfb !=nil {return nil ,_g .Wrap (_gfdfb ,_cegc ,"r\u0065\u0067\u0075\u006car\u0020-\u0020\u0066\u0069\u0072\u0073t\u0020\u0065\u0072\u006f\u0064\u0065");};if _ ,_gfdfb =_adbe (_dcgc ,_accf ,_gcaf );_gfdfb !=nil {return nil ,_g .Wrap (_gfdfb ,_cegc ,"\u0072\u0065\u0067\u0075la\u0072\u0020\u002d\u0020\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0065\u0072\u006fd\u0065");
};};if _bae ,_fgea =_dcgc .RemoveBorder (_bcca );_fgea !=nil {return nil ,_g .Wrap (_fgea ,_cegc ,"\u0072e\u0067\u0075\u006c\u0061\u0072");};if _fdca ==nil {return _bae ,nil ;};if _ ,_fgea =_bgff (_fdca ,_bae );_fgea !=nil {return nil ,_fgea ;};return _fdca ,nil ;
};func NewWithUnpaddedData (width ,height int ,data []byte )(*Bitmap ,error ){const _dac ="\u004e\u0065\u0077\u0057it\u0068\u0055\u006e\u0070\u0061\u0064\u0064\u0065\u0064\u0044\u0061\u0074\u0061";_eda :=_cff (width ,height );_eda .Data =data ;if _aeg :=((width *height )+7)>>3;
len (data )< _aeg {return nil ,_g .Errorf (_dac ,"\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 ),_aeg );
};if _daca :=_eda .addPadBits ();_daca !=nil {return nil ,_g .Wrap (_daca ,_dac ,"");};return _eda ,nil ;};func TstDSymbol (t *_f .T ,scale ...int )*Bitmap {_agbae ,_fagde :=NewWithData (4,5,[]byte {0xf0,0x90,0x90,0x90,0xE0});_e .NoError (t ,_fagde );return TstGetScaledSymbol (t ,_agbae ,scale ...);
};func (_aec *Bitmap )Equals (s *Bitmap )bool {if len (_aec .Data )!=len (s .Data )||_aec .Width !=s .Width ||_aec .Height !=s .Height {return false ;};for _fdfg :=0;_fdfg < _aec .Height ;_fdfg ++{_bfga :=_fdfg *_aec .RowStride ;for _bbaa :=0;_bbaa < _aec .RowStride ;
_bbaa ++{if _aec .Data [_bfga +_bbaa ]!=s .Data [_bfga +_bbaa ]{return false ;};};};return true ;};func TstISymbol (t *_f .T ,scale ...int )*Bitmap {_bgec ,_gdcc :=NewWithData (1,5,[]byte {0x80,0x80,0x80,0x80,0x80});_e .NoError (t ,_gdcc );return TstGetScaledSymbol (t ,_bgec ,scale ...);
};func (_fcaa *ClassedPoints )GetIntYByClass (i int )(int ,error ){const _bded ="\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 >=_fcaa .IntSlice .Size (){return 0,_g .Errorf (_bded ,"\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 (_fcaa .YAtIndex (i )),nil ;};func (_gfbf *Bitmap )Zero ()bool {_cgbf :=_gfbf .Width /8;_cfaa :=_gfbf .Width &7;var _deea byte ;if _cfaa !=0{_deea =byte (0xff<<uint (8-_cfaa ));};var _cgg ,_cgbe ,_ace int ;for _cgbe =0;_cgbe < _gfbf .Height ;
_cgbe ++{_cgg =_gfbf .RowStride *_cgbe ;for _ace =0;_ace < _cgbf ;_ace ,_cgg =_ace +1,_cgg +1{if _gfbf .Data [_cgg ]!=0{return false ;};};if _cfaa > 0{if _gfbf .Data [_cgg ]&_deea !=0{return false ;};};};return true ;};func init (){const _ffcg ="\u0062\u0069\u0074\u006dap\u0073\u002e\u0069\u006e\u0069\u0074\u0069\u0061\u006c\u0069\u007a\u0061\u0074\u0069o\u006e";
_efdb =New (50,40);var _ebfa error ;_efdb ,_ebfa =_efdb .AddBorder (2,1);if _ebfa !=nil {panic (_g .Wrap (_ebfa ,_ffcg ,"f\u0072\u0061\u006d\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));};_cfdf ,_ebfa =NewWithData (50,22,_daadf );if _ebfa !=nil {panic (_g .Wrap (_ebfa ,_ffcg ,"i\u006d\u0061\u0067\u0065\u0042\u0069\u0074\u006d\u0061\u0070"));
};};func Extract (roi _b .Rectangle ,src *Bitmap )(*Bitmap ,error ){_cfgc :=New (roi .Dx (),roi .Dy ());_bfbe :=roi .Min .X &0x07;_edece :=8-_bfbe ;_acfd :=uint (8-_cfgc .Width &0x07);_dcd :=src .GetByteIndex (roi .Min .X ,roi .Min .Y );_bgdd :=src .GetByteIndex (roi .Max .X -1,roi .Min .Y );
_fcgdg :=_cfgc .RowStride ==_bgdd +1-_dcd ;var _adf int ;for _beg :=roi .Min .Y ;_beg < roi .Max .Y ;_beg ++{_ceag :=_dcd ;_age :=_adf ;switch {case _dcd ==_bgdd :_efba ,_bdbd :=src .GetByte (_ceag );if _bdbd !=nil {return nil ,_bdbd ;};_efba <<=uint (_bfbe );
_bdbd =_cfgc .SetByte (_age ,_agaf (_acfd ,_efba ));if _bdbd !=nil {return nil ,_bdbd ;};case _bfbe ==0:for _ecdff :=_dcd ;_ecdff <=_bgdd ;_ecdff ++{_affd ,_daed :=src .GetByte (_ceag );if _daed !=nil {return nil ,_daed ;};_ceag ++;if _ecdff ==_bgdd &&_fcgdg {_affd =_agaf (_acfd ,_affd );
};_daed =_cfgc .SetByte (_age ,_affd );if _daed !=nil {return nil ,_daed ;};_age ++;};default:_gffc :=_bfae (src ,_cfgc ,uint (_bfbe ),uint (_edece ),_acfd ,_dcd ,_bgdd ,_fcgdg ,_ceag ,_age );if _gffc !=nil {return nil ,_gffc ;};};_dcd +=src .RowStride ;
_bgdd +=src .RowStride ;_adf +=_cfgc .RowStride ;};return _cfgc ,nil ;};func (_baec *Bitmaps )String ()string {_eaab :=_d .Builder {};for _ ,_cdbef :=range _baec .Values {_eaab .WriteString (_cdbef .String ());_eaab .WriteRune ('\n');};return _eaab .String ();
};func _bced (_gdgf ,_ggede *Bitmap ,_fadc ,_eccf int )(_cffa error ){const _babd ="\u0073e\u0065d\u0066\u0069\u006c\u006c\u0042i\u006e\u0061r\u0079\u004c\u006f\u0077\u0034";var (_ggea ,_edde ,_dcdb ,_degg int ;_decaa ,_aged ,_adda ,_fcfe ,_bdgf ,_eabe ,_gebf byte ;
);for _ggea =0;_ggea < _fadc ;_ggea ++{_dcdb =_ggea *_gdgf .RowStride ;_degg =_ggea *_ggede .RowStride ;for _edde =0;_edde < _eccf ;_edde ++{_decaa ,_cffa =_gdgf .GetByte (_dcdb +_edde );if _cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0066i\u0072\u0073\u0074\u0020\u0067\u0065t");
};_aged ,_cffa =_ggede .GetByte (_degg +_edde );if _cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0073\u0065\u0063\u006f\u006e\u0064\u0020\u0067\u0065\u0074");};if _ggea > 0{_adda ,_cffa =_gdgf .GetByte (_dcdb -_gdgf .RowStride +_edde );if _cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0069\u0020\u003e \u0030");
};_decaa |=_adda ;};if _edde > 0{_fcfe ,_cffa =_gdgf .GetByte (_dcdb +_edde -1);if _cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u006a\u0020\u003e \u0030");};_decaa |=_fcfe <<7;};_decaa &=_aged ;if _decaa ==0||(^_decaa )==0{if _cffa =_gdgf .SetByte (_dcdb +_edde ,_decaa );
_cffa !=nil {return _g .Wrap (_cffa ,_babd ,"b\u0074\u0020\u003d\u003d 0\u0020|\u007c\u0020\u0028\u005e\u0062t\u0029\u0020\u003d\u003d\u0020\u0030");};continue ;};for {_gebf =_decaa ;_decaa =(_decaa |(_decaa >>1)|(_decaa <<1))&_aged ;if (_decaa ^_gebf )==0{if _cffa =_gdgf .SetByte (_dcdb +_edde ,_decaa );
_cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0073\u0065\u0074\u0074\u0069\u006e\u0067\u0020\u0070\u0072\u0065\u0076 \u0062\u0079\u0074\u0065");};break ;};};};};for _ggea =_fadc -1;_ggea >=0;_ggea --{_dcdb =_ggea *_gdgf .RowStride ;_degg =_ggea *_ggede .RowStride ;
for _edde =_eccf -1;_edde >=0;_edde --{if _decaa ,_cffa =_gdgf .GetByte (_dcdb +_edde );_cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0072\u0065\u0076\u0065\u0072\u0073\u0065\u0020\u0066\u0069\u0072\u0073t\u0020\u0067\u0065\u0074");};if _aged ,_cffa =_ggede .GetByte (_degg +_edde );
_cffa !=nil {return _g .Wrap (_cffa ,_babd ,"r\u0065\u0076\u0065\u0072se\u0020g\u0065\u0074\u0020\u006d\u0061s\u006b\u0020\u0062\u0079\u0074\u0065");};if _ggea < _fadc -1{if _bdgf ,_cffa =_gdgf .GetByte (_dcdb +_gdgf .RowStride +_edde );_cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0072\u0065v\u0065\u0072\u0073e\u0020\u0069\u0020\u003c\u0020\u0068\u0020\u002d\u0031");
};_decaa |=_bdgf ;};if _edde < _eccf -1{if _eabe ,_cffa =_gdgf .GetByte (_dcdb +_edde +1);_cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0072\u0065\u0076\u0065rs\u0065\u0020\u006a\u0020\u003c\u0020\u0077\u0070\u006c\u0020\u002d\u0020\u0031");};_decaa |=_eabe >>7;
};_decaa &=_aged ;if _decaa ==0||(^_decaa )==0{if _cffa =_gdgf .SetByte (_dcdb +_edde ,_decaa );_cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\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 {_gebf =_decaa ;_decaa =(_decaa |(_decaa >>1)|(_decaa <<1))&_aged ;if (_decaa ^_gebf )==0{if _cffa =_gdgf .SetByte (_dcdb +_edde ,_decaa );_cffa !=nil {return _g .Wrap (_cffa ,_babd ,"\u0072e\u0076\u0065\u0072\u0073e\u0020\u0073\u0065\u0074\u0074i\u006eg\u0020p\u0072\u0065\u0076\u0020\u0062\u0079\u0074e");
};break ;};};};};return nil ;};func (_bcdg *BitmapsArray )AddBox (box *_b .Rectangle ){_bcdg .Boxes =append (_bcdg .Boxes ,box )};func _ebba (_cead ,_dega *Bitmap ,_cbbb ,_fdga int )(*Bitmap ,error ){const _acbfa ="\u0065\u0072\u006f\u0064\u0065\u0042\u0072\u0069\u0063\u006b";
if _dega ==nil {return nil ,_g .Error (_acbfa ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _cbbb < 1||_fdga < 1{return nil ,_g .Error (_acbfa ,"\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 _cbbb ==1&&_fdga ==1{_agdg ,_cacc :=_bgff (_cead ,_dega );if _cacc !=nil {return nil ,_g .Wrap (_cacc ,_acbfa ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u0026\u0026 \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _agdg ,nil ;};if _cbbb ==1||_fdga ==1{_fbbdf :=SelCreateBrick (_fdga ,_cbbb ,_fdga /2,_cbbb /2,SelHit );_gbbb ,_cfga :=_adbe (_cead ,_dega ,_fbbdf );if _cfga !=nil {return nil ,_g .Wrap (_cfga ,_acbfa ,"\u0068S\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031\u0020\u007c\u007c \u0076\u0053\u0069\u007a\u0065\u0020\u003d\u003d\u0020\u0031");
};return _gbbb ,nil ;};_bffc :=SelCreateBrick (1,_cbbb ,0,_cbbb /2,SelHit );_dafe :=SelCreateBrick (_fdga ,1,_fdga /2,0,SelHit );_afbe ,_ffee :=_adbe (nil ,_dega ,_bffc );if _ffee !=nil {return nil ,_g .Wrap (_ffee ,_acbfa ,"\u0031s\u0074\u0020\u0065\u0072\u006f\u0064e");
};_cead ,_ffee =_adbe (_cead ,_afbe ,_dafe );if _ffee !=nil {return nil ,_g .Wrap (_ffee ,_acbfa ,"\u0032n\u0064\u0020\u0065\u0072\u006f\u0064e");};return _cead ,nil ;};func (_deg *Bitmap )AddBorder (borderSize ,val int )(*Bitmap ,error ){if borderSize ==0{return _deg .Copy (),nil ;
};_eafe ,_efe :=_deg .addBorderGeneral (borderSize ,borderSize ,borderSize ,borderSize ,val );if _efe !=nil {return nil ,_g .Wrap (_efe ,"\u0041d\u0064\u0042\u006f\u0072\u0064\u0065r","");};return _eafe ,nil ;};type SizeComparison int ;type RasterOperator int ;
func (_aedc *Bitmaps )AddBitmap (bm *Bitmap ){_aedc .Values =append (_aedc .Values ,bm )};func _acbb (_ffb *Bitmap ,_fcg ,_dgc int )(*Bitmap ,error ){const _bf ="e\u0078\u0070\u0061\u006edB\u0069n\u0061\u0072\u0079\u0052\u0065p\u006c\u0069\u0063\u0061\u0074\u0065";
if _ffb ==nil {return nil ,_g .Error (_bf ,"\u0073o\u0075r\u0063\u0065\u0020\u006e\u006ft\u0020\u0064e\u0066\u0069\u006e\u0065\u0064");};if _fcg <=0||_dgc <=0{return nil ,_g .Error (_bf ,"\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 _fcg ==_dgc {if _fcg ==1{_ab ,_bbf :=_bgff (nil ,_ffb );if _bbf !=nil {return nil ,_g .Wrap (_bbf ,_bf ,"\u0078\u0046\u0061\u0063\u0074\u0020\u003d\u003d\u0020y\u0046\u0061\u0063\u0074");};return _ab ,nil ;};if _fcg ==2||_fcg ==4||_fcg ==8{_cbg ,_gcf :=_ca (_ffb ,_fcg );
if _gcf !=nil {return nil ,_g .Wrap (_gcf ,_bf ,"\u0078\u0046a\u0063\u0074\u0020i\u006e\u0020\u007b\u0032\u002c\u0034\u002c\u0038\u007d");};return _cbg ,nil ;};};_fccb :=_fcg *_ffb .Width ;_cea :=_dgc *_ffb .Height ;_dfa :=New (_fccb ,_cea );_bfa :=_dfa .RowStride ;
var (_afc ,_fa ,_cag ,_bdf ,_bdfc int ;_gaf byte ;_afcg error ;);for _fa =0;_fa < _ffb .Height ;_fa ++{_afc =_dgc *_fa *_bfa ;for _cag =0;_cag < _ffb .Width ;_cag ++{if _cbd :=_ffb .GetPixel (_cag ,_fa );_cbd {_bdfc =_fcg *_cag ;for _bdf =0;_bdf < _fcg ;
_bdf ++{_dfa .setBit (_afc *8+_bdfc +_bdf );};};};for _bdf =1;_bdf < _dgc ;_bdf ++{_caf :=_afc +_bdf *_bfa ;for _ecg :=0;_ecg < _bfa ;_ecg ++{if _gaf ,_afcg =_dfa .GetByte (_afc +_ecg );_afcg !=nil {return nil ,_g .Wrapf (_afcg ,_bf ,"\u0072\u0065\u0070\u006cic\u0061\u0074\u0069\u006e\u0067\u0020\u006c\u0069\u006e\u0065\u003a\u0020\u0027\u0025d\u0027",_bdf );
};if _afcg =_dfa .SetByte (_caf +_ecg ,_gaf );_afcg !=nil {return nil ,_g .Wrap (_afcg ,_bf ,"\u0053\u0065\u0074\u0074in\u0067\u0020\u0062\u0079\u0074\u0065\u0020\u0066\u0061\u0069\u006c\u0065\u0064");};};};};return _dfa ,nil ;};func (_dbdg *Bitmap )GetVanillaData ()[]byte {if _dbdg .Color ==Chocolate {_dbdg .inverseData ();
};return _dbdg .Data ;};func (_gaac *Bitmaps )selectByIndicator (_ccfb *_db .NumSlice )(_ddeed *Bitmaps ,_beae error ){const _edcbe ="\u0042i\u0074\u006d\u0061\u0070s\u002e\u0073\u0065\u006c\u0065c\u0074B\u0079I\u006e\u0064\u0069\u0063\u0061\u0074\u006fr";
if _gaac ==nil {return nil ,_g .Error (_edcbe ,"\u0027\u0062\u0027 b\u0069\u0074\u006d\u0061\u0070\u0073\u0020\u006e\u006f\u0074\u0020\u0064\u0065\u0066\u0069\u006e\u0065\u0064");};if _ccfb ==nil {return nil ,_g .Error (_edcbe ,"'\u006e\u0061\u0027\u0020\u0069\u006ed\u0069\u0063\u0061\u0074\u006f\u0072\u0073\u0020\u006eo\u0074\u0020\u0064e\u0066i\u006e\u0065\u0064");
};if len (_gaac .Values )==0{return _gaac ,nil ;};if len (*_ccfb )!=len (_gaac .Values ){return nil ,_g .Errorf (_edcbe ,"\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 (*_ccfb ),len (_gaac .Values ));
};var _fdcg ,_ebdg ,_ccab int ;for _ebdg =0;_ebdg < len (*_ccfb );_ebdg ++{if _fdcg ,_beae =_ccfb .GetInt (_ebdg );_beae !=nil {return nil ,_g .Wrap (_beae ,_edcbe ,"f\u0069\u0072\u0073\u0074\u0020\u0063\u0068\u0065\u0063\u006b");};if _fdcg ==1{_ccab ++;
};};if _ccab ==len (_gaac .Values ){return _gaac ,nil ;};_ddeed =&Bitmaps {};_egfee :=len (_gaac .Values )==len (_gaac .Boxes );for _ebdg =0;_ebdg < len (*_ccfb );_ebdg ++{if _fdcg =int ((*_ccfb )[_ebdg ]);_fdcg ==0{continue ;};_ddeed .Values =append (_ddeed .Values ,_gaac .Values [_ebdg ]);
if _egfee {_ddeed .Boxes =append (_ddeed .Boxes ,_gaac .Boxes [_ebdg ]);};};return _ddeed ,nil ;};const (ComponentConn Component =iota ;ComponentCharacters ;ComponentWords ;);func TstPSymbol (t *_f .T )*Bitmap {t .Helper ();_adeae :=New (5,8);_e .NoError (t ,_adeae .SetPixel (0,0,1));
_e .NoError (t ,_adeae .SetPixel (1,0,1));_e .NoError (t ,_adeae .SetPixel (2,0,1));_e .NoError (t ,_adeae .SetPixel (3,0,1));_e .NoError (t ,_adeae .SetPixel (4,1,1));_e .NoError (t ,_adeae .SetPixel (0,1,1));_e .NoError (t ,_adeae .SetPixel (4,2,1));
_e .NoError (t ,_adeae .SetPixel (0,2,1));_e .NoError (t ,_adeae .SetPixel (4,3,1));_e .NoError (t ,_adeae .SetPixel (0,3,1));_e .NoError (t ,_adeae .SetPixel (0,4,1));_e .NoError (t ,_adeae .SetPixel (1,4,1));_e .NoError (t ,_adeae .SetPixel (2,4,1));
_e .NoError (t ,_adeae .SetPixel (3,4,1));_e .NoError (t ,_adeae .SetPixel (0,5,1));_e .NoError (t ,_adeae .SetPixel (0,6,1));_e .NoError (t ,_adeae .SetPixel (0,7,1));return _adeae ;};func _dff (_ff ,_ccb *Bitmap )(_dfb error ){const _fdd ="\u0065\u0078\u0070\u0061nd\u0042\u0069\u006e\u0061\u0072\u0079\u0046\u0061\u0063\u0074\u006f\u0072\u0038";
_ga :=_ccb .RowStride ;_efg :=_ff .RowStride ;var _fb ,_gee ,_gc ,_bge ,_ea int ;for _gc =0;_gc < _ccb .Height ;_gc ++{_fb =_gc *_ga ;_gee =8*_gc *_efg ;for _bge =0;_bge < _ga ;_bge ++{if _dfb =_ff .setEightBytes (_gee +_bge *8,_aebe [_ccb .Data [_fb +_bge ]]);
_dfb !=nil {return _g .Wrap (_dfb ,_fdd ,"");};};for _ea =1;_ea < 8;_ea ++{for _bge =0;_bge < _efg ;_bge ++{if _dfb =_ff .SetByte (_gee +_ea *_efg +_bge ,_ff .Data [_gee +_bge ]);_dfb !=nil {return _g .Wrap (_dfb ,_fdd ,"");};};};};return nil ;};const (_ LocationFilter =iota ;
LocSelectWidth ;LocSelectHeight ;LocSelectXVal ;LocSelectYVal ;LocSelectIfEither ;LocSelectIfBoth ;);func _ccgc (_eabc ,_bef *Bitmap ,_bcfe ,_bde ,_bbbf ,_egcc ,_bbcb ,_ggbfc ,_bbdf ,_ccfa int ,_gcaa CombinationOperator ,_gaea int )error {var _geaab int ;
_gecf :=func (){_geaab ++;_bbbf +=_bef .RowStride ;_egcc +=_eabc .RowStride ;_bbcb +=_eabc .RowStride };for _geaab =_bcfe ;_geaab < _bde ;_gecf (){var _fccc uint16 ;_edac :=_bbbf ;for _bgd :=_egcc ;_bgd <=_bbcb ;_bgd ++{_dgdeg ,_fgec :=_bef .GetByte (_edac );
if _fgec !=nil {return _fgec ;};_gbebb ,_fgec :=_eabc .GetByte (_bgd );if _fgec !=nil {return _fgec ;};_fccc =(_fccc |(uint16 (_gbebb )&0xff))<<uint (_ccfa );_gbebb =byte (_fccc >>8);if _fgec =_bef .SetByte (_edac ,_bagb (_dgdeg ,_gbebb ,_gcaa ));_fgec !=nil {return _fgec ;
};_edac ++;_fccc <<=uint (_bbdf );if _bgd ==_bbcb {_gbebb =byte (_fccc >>(8-uint8 (_ccfa )));if _gaea !=0{_gbebb =_agaf (uint (8+_ggbfc ),_gbebb );};_dgdeg ,_fgec =_bef .GetByte (_edac );if _fgec !=nil {return _fgec ;};if _fgec =_bef .SetByte (_edac ,_bagb (_dgdeg ,_gbebb ,_gcaa ));
_fgec !=nil {return _fgec ;};};};};return nil ;};func (_ccfg *Bitmaps )GetBitmap (i int )(*Bitmap ,error ){const _fecd ="\u0047e\u0074\u0042\u0069\u0074\u006d\u0061p";if _ccfg ==nil {return nil ,_g .Error (_fecd ,"p\u0072o\u0076\u0069\u0064\u0065\u0064\u0020\u006e\u0069l\u0020\u0042\u0069\u0074ma\u0070\u0073");
};if i > len (_ccfg .Values )-1{return nil ,_g .Errorf (_fecd ,"\u0069n\u0064\u0065\u0078\u003a\u0020\u0027\u0025\u0064\u0027\u0020\u006fu\u0074\u0020\u006f\u0066\u0020\u0072\u0061\u006e\u0067\u0065",i );};return _ccfg .Values [i ],nil ;};func (_egab *ClassedPoints )SortByY (){_egab ._bdde =_egab .ySortFunction ();
_dd .Sort (_egab )};func (_ffbc *Bitmap )ToImage ()_b .Image {_dfff ,_ffg :=_cg .NewImage (_ffbc .Width ,_ffbc .Height ,1,1,_ffbc .Data ,nil ,nil );if _ffg !=nil {_de .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",_ffg );
};return _dfff ;};func _bcb ()(_dfd [256]uint64 ){for _baa :=0;_baa < 256;_baa ++{if _baa &0x01!=0{_dfd [_baa ]|=0xff;};if _baa &0x02!=0{_dfd [_baa ]|=0xff00;};if _baa &0x04!=0{_dfd [_baa ]|=0xff0000;};if _baa &0x08!=0{_dfd [_baa ]|=0xff000000;};if _baa &0x10!=0{_dfd [_baa ]|=0xff00000000;
};if _baa &0x20!=0{_dfd [_baa ]|=0xff0000000000;};if _baa &0x40!=0{_dfd [_baa ]|=0xff000000000000;};if _baa &0x80!=0{_dfd [_baa ]|=0xff00000000000000;};};return _dfd ;};func (_daga *Bitmaps )GroupByWidth ()(*BitmapsArray ,error ){const _eagab ="\u0047\u0072\u006fu\u0070\u0042\u0079\u0057\u0069\u0064\u0074\u0068";
if len (_daga .Values )==0{return nil ,_g .Error (_eagab ,"\u006eo\u0020v\u0061\u006c\u0075\u0065\u0073 \u0070\u0072o\u0076\u0069\u0064\u0065\u0064");};_egfe :=&BitmapsArray {};_daga .SortByWidth ();_dged :=-1;_bfee :=-1;for _ccega :=0;_ccega < len (_daga .Values );
_ccega ++{_deeb :=_daga .Values [_ccega ].Width ;if _deeb > _dged {_dged =_deeb ;_bfee ++;_egfe .Values =append (_egfe .Values ,&Bitmaps {});};_egfe .Values [_bfee ].AddBitmap (_daga .Values [_ccega ]);};return _egfe ,nil ;};
|