1 module dcv.features.corner.fast.fast_12;
2 
3 /*
4 Authors: Edward Rosten
5 Copyright: Copyright (c) 2006, 2008 Edward Rosten, All rights reserved.
6 
7 Additional notice:
8 Module integrates FAST implementation present in the Edward Rosten's
9 github repository: https://github.com/edrosten/fast-C-src
10 */
11 
12 import core.stdc.stdlib : malloc, free, realloc;
13 
14 import dcv.features.corner.fast.base;
15 
16 
17 int fast12_corner_score(const ubyte* p, const int *pixel, int bstart)
18 {    
19     int bmin = bstart;
20     int bmax = 255;
21     int b = (bmax + bmin)/2;
22     
23     /*Compute the score using binary search*/
24     for(;;)
25     {
26         int cb = *p + b;
27         int c_b= *p - b;
28 
29         
30         if( p[pixel[0]] > cb)
31             if( p[pixel[1]] > cb)
32                 if( p[pixel[2]] > cb)
33                     if( p[pixel[3]] > cb)
34                         if( p[pixel[4]] > cb)
35                             if( p[pixel[5]] > cb)
36                                 if( p[pixel[6]] > cb)
37                                     if( p[pixel[7]] > cb)
38                                         if( p[pixel[8]] > cb)
39                                             if( p[pixel[9]] > cb)
40                                                 if( p[pixel[10]] > cb)
41                                                     if( p[pixel[11]] > cb)
42                                                         goto is_a_corner;
43                                                     else
44                                                         if( p[pixel[15]] > cb)
45                                                             goto is_a_corner;
46                                                         else
47                                                             goto is_not_a_corner;
48         else
49             if( p[pixel[14]] > cb)
50                 if( p[pixel[15]] > cb)
51                     goto is_a_corner;
52                 else
53                     goto is_not_a_corner;
54         else
55             goto is_not_a_corner;
56         else
57             if( p[pixel[13]] > cb)
58                 if( p[pixel[14]] > cb)
59                     if( p[pixel[15]] > cb)
60                         goto is_a_corner;
61                     else
62                         goto is_not_a_corner;
63         else
64             goto is_not_a_corner;
65         else
66             goto is_not_a_corner;
67         else
68             if( p[pixel[12]] > cb)
69                 if( p[pixel[13]] > cb)
70                     if( p[pixel[14]] > cb)
71                         if( p[pixel[15]] > cb)
72                             goto is_a_corner;
73                         else
74                             goto is_not_a_corner;
75         else
76             goto is_not_a_corner;
77         else
78             goto is_not_a_corner;
79         else
80             goto is_not_a_corner;
81         else
82             if( p[pixel[11]] > cb)
83                 if( p[pixel[12]] > cb)
84                     if( p[pixel[13]] > cb)
85                         if( p[pixel[14]] > cb)
86                             if( p[pixel[15]] > cb)
87                                 goto is_a_corner;
88                             else
89                                 goto is_not_a_corner;
90         else
91             goto is_not_a_corner;
92         else
93             goto is_not_a_corner;
94         else
95             goto is_not_a_corner;
96         else
97             goto is_not_a_corner;
98         else
99             if( p[pixel[10]] > cb)
100                 if( p[pixel[11]] > cb)
101                     if( p[pixel[12]] > cb)
102                         if( p[pixel[13]] > cb)
103                             if( p[pixel[14]] > cb)
104                                 if( p[pixel[15]] > cb)
105                                     goto is_a_corner;
106                                 else
107                                     goto is_not_a_corner;
108         else
109             goto is_not_a_corner;
110         else
111             goto is_not_a_corner;
112         else
113             goto is_not_a_corner;
114         else
115             goto is_not_a_corner;
116         else
117             goto is_not_a_corner;
118         else
119             if( p[pixel[9]] > cb)
120                 if( p[pixel[10]] > cb)
121                     if( p[pixel[11]] > cb)
122                         if( p[pixel[12]] > cb)
123                             if( p[pixel[13]] > cb)
124                                 if( p[pixel[14]] > cb)
125                                     if( p[pixel[15]] > cb)
126                                         goto is_a_corner;
127                                     else
128                                         goto is_not_a_corner;
129         else
130             goto is_not_a_corner;
131         else
132             goto is_not_a_corner;
133         else
134             goto is_not_a_corner;
135         else
136             goto is_not_a_corner;
137         else
138             goto is_not_a_corner;
139         else
140             goto is_not_a_corner;
141         else if( p[pixel[4]] < c_b)
142             if( p[pixel[8]] > cb)
143                 if( p[pixel[9]] > cb)
144                     if( p[pixel[10]] > cb)
145                         if( p[pixel[11]] > cb)
146                             if( p[pixel[12]] > cb)
147                                 if( p[pixel[13]] > cb)
148                                     if( p[pixel[14]] > cb)
149                                         if( p[pixel[15]] > cb)
150                                             goto is_a_corner;
151                                         else
152                                             goto is_not_a_corner;
153         else
154             goto is_not_a_corner;
155         else
156             goto is_not_a_corner;
157         else
158             goto is_not_a_corner;
159         else
160             goto is_not_a_corner;
161         else
162             goto is_not_a_corner;
163         else
164             goto is_not_a_corner;
165         else if( p[pixel[8]] < c_b)
166             if( p[pixel[5]] < c_b)
167                 if( p[pixel[6]] < c_b)
168                     if( p[pixel[7]] < c_b)
169                         if( p[pixel[9]] < c_b)
170                             if( p[pixel[10]] < c_b)
171                                 if( p[pixel[11]] < c_b)
172                                     if( p[pixel[12]] < c_b)
173                                         if( p[pixel[13]] < c_b)
174                                             if( p[pixel[14]] < c_b)
175                                                 if( p[pixel[15]] < c_b)
176                                                     goto is_a_corner;
177                                                 else
178                                                     goto is_not_a_corner;
179         else
180             goto is_not_a_corner;
181         else
182             goto is_not_a_corner;
183         else
184             goto is_not_a_corner;
185         else
186             goto is_not_a_corner;
187         else
188             goto is_not_a_corner;
189         else
190             goto is_not_a_corner;
191         else
192             goto is_not_a_corner;
193         else
194             goto is_not_a_corner;
195         else
196             goto is_not_a_corner;
197         else
198             goto is_not_a_corner;
199         else
200             if( p[pixel[8]] > cb)
201                 if( p[pixel[9]] > cb)
202                     if( p[pixel[10]] > cb)
203                         if( p[pixel[11]] > cb)
204                             if( p[pixel[12]] > cb)
205                                 if( p[pixel[13]] > cb)
206                                     if( p[pixel[14]] > cb)
207                                         if( p[pixel[15]] > cb)
208                                             goto is_a_corner;
209                                         else
210                                             goto is_not_a_corner;
211         else
212             goto is_not_a_corner;
213         else
214             goto is_not_a_corner;
215         else
216             goto is_not_a_corner;
217         else
218             goto is_not_a_corner;
219         else
220             goto is_not_a_corner;
221         else
222             goto is_not_a_corner;
223         else
224             goto is_not_a_corner;
225         else if( p[pixel[3]] < c_b)
226             if( p[pixel[15]] > cb)
227                 if( p[pixel[7]] > cb)
228                     if( p[pixel[8]] > cb)
229                         if( p[pixel[9]] > cb)
230                             if( p[pixel[10]] > cb)
231                                 if( p[pixel[11]] > cb)
232                                     if( p[pixel[12]] > cb)
233                                         if( p[pixel[13]] > cb)
234                                             if( p[pixel[14]] > cb)
235                                                 goto is_a_corner;
236                                             else
237                                                 goto is_not_a_corner;
238         else
239             goto is_not_a_corner;
240         else
241             goto is_not_a_corner;
242         else
243             goto is_not_a_corner;
244         else
245             goto is_not_a_corner;
246         else
247             goto is_not_a_corner;
248         else
249             goto is_not_a_corner;
250         else if( p[pixel[7]] < c_b)
251             if( p[pixel[4]] < c_b)
252                 if( p[pixel[5]] < c_b)
253                     if( p[pixel[6]] < c_b)
254                         if( p[pixel[8]] < c_b)
255                             if( p[pixel[9]] < c_b)
256                                 if( p[pixel[10]] < c_b)
257                                     if( p[pixel[11]] < c_b)
258                                         if( p[pixel[12]] < c_b)
259                                             if( p[pixel[13]] < c_b)
260                                                 if( p[pixel[14]] < c_b)
261                                                     goto is_a_corner;
262                                                 else
263                                                     goto is_not_a_corner;
264         else
265             goto is_not_a_corner;
266         else
267             goto is_not_a_corner;
268         else
269             goto is_not_a_corner;
270         else
271             goto is_not_a_corner;
272         else
273             goto is_not_a_corner;
274         else
275             goto is_not_a_corner;
276         else
277             goto is_not_a_corner;
278         else
279             goto is_not_a_corner;
280         else
281             goto is_not_a_corner;
282         else
283             goto is_not_a_corner;
284         else
285             if( p[pixel[4]] < c_b)
286                 if( p[pixel[5]] < c_b)
287                     if( p[pixel[6]] < c_b)
288                         if( p[pixel[7]] < c_b)
289                             if( p[pixel[8]] < c_b)
290                                 if( p[pixel[9]] < c_b)
291                                     if( p[pixel[10]] < c_b)
292                                         if( p[pixel[11]] < c_b)
293                                             if( p[pixel[12]] < c_b)
294                                                 if( p[pixel[13]] < c_b)
295                                                     if( p[pixel[14]] < c_b)
296                                                         goto is_a_corner;
297                                                     else
298                                                         goto is_not_a_corner;
299         else
300             goto is_not_a_corner;
301         else
302             goto is_not_a_corner;
303         else
304             goto is_not_a_corner;
305         else
306             goto is_not_a_corner;
307         else
308             goto is_not_a_corner;
309         else
310             goto is_not_a_corner;
311         else
312             goto is_not_a_corner;
313         else
314             goto is_not_a_corner;
315         else
316             goto is_not_a_corner;
317         else
318             goto is_not_a_corner;
319         else
320             if( p[pixel[7]] > cb)
321                 if( p[pixel[8]] > cb)
322                     if( p[pixel[9]] > cb)
323                         if( p[pixel[10]] > cb)
324                             if( p[pixel[11]] > cb)
325                                 if( p[pixel[12]] > cb)
326                                     if( p[pixel[13]] > cb)
327                                         if( p[pixel[14]] > cb)
328                                             if( p[pixel[15]] > cb)
329                                                 goto is_a_corner;
330                                             else
331                                                 goto is_not_a_corner;
332         else
333             goto is_not_a_corner;
334         else
335             goto is_not_a_corner;
336         else
337             goto is_not_a_corner;
338         else
339             goto is_not_a_corner;
340         else
341             goto is_not_a_corner;
342         else
343             goto is_not_a_corner;
344         else
345             goto is_not_a_corner;
346         else if( p[pixel[7]] < c_b)
347             if( p[pixel[4]] < c_b)
348                 if( p[pixel[5]] < c_b)
349                     if( p[pixel[6]] < c_b)
350                         if( p[pixel[8]] < c_b)
351                             if( p[pixel[9]] < c_b)
352                                 if( p[pixel[10]] < c_b)
353                                     if( p[pixel[11]] < c_b)
354                                         if( p[pixel[12]] < c_b)
355                                             if( p[pixel[13]] < c_b)
356                                                 if( p[pixel[14]] < c_b)
357                                                     if( p[pixel[15]] < c_b)
358                                                         goto is_a_corner;
359                                                     else
360                                                         goto is_not_a_corner;
361         else
362             goto is_not_a_corner;
363         else
364             goto is_not_a_corner;
365         else
366             goto is_not_a_corner;
367         else
368             goto is_not_a_corner;
369         else
370             goto is_not_a_corner;
371         else
372             goto is_not_a_corner;
373         else
374             goto is_not_a_corner;
375         else
376             goto is_not_a_corner;
377         else
378             goto is_not_a_corner;
379         else
380             goto is_not_a_corner;
381         else
382             goto is_not_a_corner;
383         else if( p[pixel[2]] < c_b)
384             if( p[pixel[6]] > cb)
385                 if( p[pixel[7]] > cb)
386                     if( p[pixel[8]] > cb)
387                         if( p[pixel[9]] > cb)
388                             if( p[pixel[10]] > cb)
389                                 if( p[pixel[11]] > cb)
390                                     if( p[pixel[12]] > cb)
391                                         if( p[pixel[13]] > cb)
392                                             if( p[pixel[14]] > cb)
393                                                 if( p[pixel[15]] > cb)
394                                                     goto is_a_corner;
395                                                 else
396                                                     if( p[pixel[3]] > cb)
397                                                         if( p[pixel[4]] > cb)
398                                                             if( p[pixel[5]] > cb)
399                                                                 goto is_a_corner;
400                                                             else
401                                                                 goto is_not_a_corner;
402         else
403             goto is_not_a_corner;
404         else
405             goto is_not_a_corner;
406         else
407             goto is_not_a_corner;
408         else
409             goto is_not_a_corner;
410         else
411             goto is_not_a_corner;
412         else
413             goto is_not_a_corner;
414         else
415             goto is_not_a_corner;
416         else
417             goto is_not_a_corner;
418         else
419             goto is_not_a_corner;
420         else
421             goto is_not_a_corner;
422         else if( p[pixel[6]] < c_b)
423             if( p[pixel[4]] < c_b)
424                 if( p[pixel[5]] < c_b)
425                     if( p[pixel[7]] < c_b)
426                         if( p[pixel[8]] < c_b)
427                             if( p[pixel[9]] < c_b)
428                                 if( p[pixel[10]] < c_b)
429                                     if( p[pixel[11]] < c_b)
430                                         if( p[pixel[12]] < c_b)
431                                             if( p[pixel[13]] < c_b)
432                                                 if( p[pixel[3]] < c_b)
433                                                     goto is_a_corner;
434                                                 else
435                                                     if( p[pixel[14]] < c_b)
436                                                         if( p[pixel[15]] < c_b)
437                                                             goto is_a_corner;
438                                                         else
439                                                             goto is_not_a_corner;
440         else
441             goto is_not_a_corner;
442         else
443             goto is_not_a_corner;
444         else
445             goto is_not_a_corner;
446         else
447             goto is_not_a_corner;
448         else
449             goto is_not_a_corner;
450         else
451             goto is_not_a_corner;
452         else
453             goto is_not_a_corner;
454         else
455             goto is_not_a_corner;
456         else
457             goto is_not_a_corner;
458         else
459             goto is_not_a_corner;
460         else
461             goto is_not_a_corner;
462         else
463             if( p[pixel[6]] > cb)
464                 if( p[pixel[7]] > cb)
465                     if( p[pixel[8]] > cb)
466                         if( p[pixel[9]] > cb)
467                             if( p[pixel[10]] > cb)
468                                 if( p[pixel[11]] > cb)
469                                     if( p[pixel[12]] > cb)
470                                         if( p[pixel[13]] > cb)
471                                             if( p[pixel[14]] > cb)
472                                                 if( p[pixel[15]] > cb)
473                                                     goto is_a_corner;
474                                                 else
475                                                     if( p[pixel[3]] > cb)
476                                                         if( p[pixel[4]] > cb)
477                                                             if( p[pixel[5]] > cb)
478                                                                 goto is_a_corner;
479                                                             else
480                                                                 goto is_not_a_corner;
481         else
482             goto is_not_a_corner;
483         else
484             goto is_not_a_corner;
485         else
486             goto is_not_a_corner;
487         else
488             goto is_not_a_corner;
489         else
490             goto is_not_a_corner;
491         else
492             goto is_not_a_corner;
493         else
494             goto is_not_a_corner;
495         else
496             goto is_not_a_corner;
497         else
498             goto is_not_a_corner;
499         else
500             goto is_not_a_corner;
501         else if( p[pixel[6]] < c_b)
502             if( p[pixel[4]] < c_b)
503                 if( p[pixel[5]] < c_b)
504                     if( p[pixel[7]] < c_b)
505                         if( p[pixel[8]] < c_b)
506                             if( p[pixel[9]] < c_b)
507                                 if( p[pixel[10]] < c_b)
508                                     if( p[pixel[11]] < c_b)
509                                         if( p[pixel[12]] < c_b)
510                                             if( p[pixel[13]] < c_b)
511                                                 if( p[pixel[14]] < c_b)
512                                                     if( p[pixel[3]] < c_b)
513                                                         goto is_a_corner;
514                                                     else
515                                                         if( p[pixel[15]] < c_b)
516                                                             goto is_a_corner;
517                                                         else
518                                                             goto is_not_a_corner;
519         else
520             goto is_not_a_corner;
521         else
522             goto is_not_a_corner;
523         else
524             goto is_not_a_corner;
525         else
526             goto is_not_a_corner;
527         else
528             goto is_not_a_corner;
529         else
530             goto is_not_a_corner;
531         else
532             goto is_not_a_corner;
533         else
534             goto is_not_a_corner;
535         else
536             goto is_not_a_corner;
537         else
538             goto is_not_a_corner;
539         else
540             goto is_not_a_corner;
541         else if( p[pixel[1]] < c_b)
542             if( p[pixel[5]] > cb)
543                 if( p[pixel[6]] > cb)
544                     if( p[pixel[7]] > cb)
545                         if( p[pixel[8]] > cb)
546                             if( p[pixel[9]] > cb)
547                                 if( p[pixel[10]] > cb)
548                                     if( p[pixel[11]] > cb)
549                                         if( p[pixel[12]] > cb)
550                                             if( p[pixel[13]] > cb)
551                                                 if( p[pixel[14]] > cb)
552                                                     if( p[pixel[15]] > cb)
553                                                         goto is_a_corner;
554                                                     else
555                                                         if( p[pixel[3]] > cb)
556                                                             if( p[pixel[4]] > cb)
557                                                                 goto is_a_corner;
558                                                             else
559                                                                 goto is_not_a_corner;
560         else
561             goto is_not_a_corner;
562         else
563             if( p[pixel[2]] > cb)
564                 if( p[pixel[3]] > cb)
565                     if( p[pixel[4]] > cb)
566                         goto is_a_corner;
567                     else
568                         goto is_not_a_corner;
569         else
570             goto is_not_a_corner;
571         else
572             goto is_not_a_corner;
573         else
574             goto is_not_a_corner;
575         else
576             goto is_not_a_corner;
577         else
578             goto is_not_a_corner;
579         else
580             goto is_not_a_corner;
581         else
582             goto is_not_a_corner;
583         else
584             goto is_not_a_corner;
585         else
586             goto is_not_a_corner;
587         else
588             goto is_not_a_corner;
589         else if( p[pixel[5]] < c_b)
590             if( p[pixel[4]] < c_b)
591                 if( p[pixel[6]] < c_b)
592                     if( p[pixel[7]] < c_b)
593                         if( p[pixel[8]] < c_b)
594                             if( p[pixel[9]] < c_b)
595                                 if( p[pixel[10]] < c_b)
596                                     if( p[pixel[11]] < c_b)
597                                         if( p[pixel[12]] < c_b)
598                                             if( p[pixel[3]] < c_b)
599                                                 if( p[pixel[2]] < c_b)
600                                                     goto is_a_corner;
601                                                 else
602                                                     if( p[pixel[13]] < c_b)
603                                                         if( p[pixel[14]] < c_b)
604                                                             goto is_a_corner;
605                                                         else
606                                                             goto is_not_a_corner;
607         else
608             goto is_not_a_corner;
609         else
610             if( p[pixel[13]] < c_b)
611                 if( p[pixel[14]] < c_b)
612                     if( p[pixel[15]] < c_b)
613                         goto is_a_corner;
614                     else
615                         goto is_not_a_corner;
616         else
617             goto is_not_a_corner;
618         else
619             goto is_not_a_corner;
620         else
621             goto is_not_a_corner;
622         else
623             goto is_not_a_corner;
624         else
625             goto is_not_a_corner;
626         else
627             goto is_not_a_corner;
628         else
629             goto is_not_a_corner;
630         else
631             goto is_not_a_corner;
632         else
633             goto is_not_a_corner;
634         else
635             goto is_not_a_corner;
636         else
637             goto is_not_a_corner;
638         else
639             if( p[pixel[5]] > cb)
640                 if( p[pixel[6]] > cb)
641                     if( p[pixel[7]] > cb)
642                         if( p[pixel[8]] > cb)
643                             if( p[pixel[9]] > cb)
644                                 if( p[pixel[10]] > cb)
645                                     if( p[pixel[11]] > cb)
646                                         if( p[pixel[12]] > cb)
647                                             if( p[pixel[13]] > cb)
648                                                 if( p[pixel[14]] > cb)
649                                                     if( p[pixel[15]] > cb)
650                                                         goto is_a_corner;
651                                                     else
652                                                         if( p[pixel[3]] > cb)
653                                                             if( p[pixel[4]] > cb)
654                                                                 goto is_a_corner;
655                                                             else
656                                                                 goto is_not_a_corner;
657         else
658             goto is_not_a_corner;
659         else
660             if( p[pixel[2]] > cb)
661                 if( p[pixel[3]] > cb)
662                     if( p[pixel[4]] > cb)
663                         goto is_a_corner;
664                     else
665                         goto is_not_a_corner;
666         else
667             goto is_not_a_corner;
668         else
669             goto is_not_a_corner;
670         else
671             goto is_not_a_corner;
672         else
673             goto is_not_a_corner;
674         else
675             goto is_not_a_corner;
676         else
677             goto is_not_a_corner;
678         else
679             goto is_not_a_corner;
680         else
681             goto is_not_a_corner;
682         else
683             goto is_not_a_corner;
684         else
685             goto is_not_a_corner;
686         else if( p[pixel[5]] < c_b)
687             if( p[pixel[4]] < c_b)
688                 if( p[pixel[6]] < c_b)
689                     if( p[pixel[7]] < c_b)
690                         if( p[pixel[8]] < c_b)
691                             if( p[pixel[9]] < c_b)
692                                 if( p[pixel[10]] < c_b)
693                                     if( p[pixel[11]] < c_b)
694                                         if( p[pixel[12]] < c_b)
695                                             if( p[pixel[13]] < c_b)
696                                                 if( p[pixel[3]] < c_b)
697                                                     if( p[pixel[2]] < c_b)
698                                                         goto is_a_corner;
699                                                     else
700                                                         if( p[pixel[14]] < c_b)
701                                                             goto is_a_corner;
702                                                         else
703                                                             goto is_not_a_corner;
704         else
705             if( p[pixel[14]] < c_b)
706                 if( p[pixel[15]] < c_b)
707                     goto is_a_corner;
708                 else
709                     goto is_not_a_corner;
710         else
711             goto is_not_a_corner;
712         else
713             goto is_not_a_corner;
714         else
715             goto is_not_a_corner;
716         else
717             goto is_not_a_corner;
718         else
719             goto is_not_a_corner;
720         else
721             goto is_not_a_corner;
722         else
723             goto is_not_a_corner;
724         else
725             goto is_not_a_corner;
726         else
727             goto is_not_a_corner;
728         else
729             goto is_not_a_corner;
730         else
731             goto is_not_a_corner;
732         else if( p[pixel[0]] < c_b)
733             if( p[pixel[1]] > cb)
734                 if( p[pixel[5]] > cb)
735                     if( p[pixel[4]] > cb)
736                         if( p[pixel[6]] > cb)
737                             if( p[pixel[7]] > cb)
738                                 if( p[pixel[8]] > cb)
739                                     if( p[pixel[9]] > cb)
740                                         if( p[pixel[10]] > cb)
741                                             if( p[pixel[11]] > cb)
742                                                 if( p[pixel[12]] > cb)
743                                                     if( p[pixel[3]] > cb)
744                                                         if( p[pixel[2]] > cb)
745                                                             goto is_a_corner;
746                                                         else
747                                                             if( p[pixel[13]] > cb)
748                                                                 if( p[pixel[14]] > cb)
749                                                                     goto is_a_corner;
750                                                                 else
751                                                                     goto is_not_a_corner;
752         else
753             goto is_not_a_corner;
754         else
755             if( p[pixel[13]] > cb)
756                 if( p[pixel[14]] > cb)
757                     if( p[pixel[15]] > cb)
758                         goto is_a_corner;
759                     else
760                         goto is_not_a_corner;
761         else
762             goto is_not_a_corner;
763         else
764             goto is_not_a_corner;
765         else
766             goto is_not_a_corner;
767         else
768             goto is_not_a_corner;
769         else
770             goto is_not_a_corner;
771         else
772             goto is_not_a_corner;
773         else
774             goto is_not_a_corner;
775         else
776             goto is_not_a_corner;
777         else
778             goto is_not_a_corner;
779         else
780             goto is_not_a_corner;
781         else if( p[pixel[5]] < c_b)
782             if( p[pixel[6]] < c_b)
783                 if( p[pixel[7]] < c_b)
784                     if( p[pixel[8]] < c_b)
785                         if( p[pixel[9]] < c_b)
786                             if( p[pixel[10]] < c_b)
787                                 if( p[pixel[11]] < c_b)
788                                     if( p[pixel[12]] < c_b)
789                                         if( p[pixel[13]] < c_b)
790                                             if( p[pixel[14]] < c_b)
791                                                 if( p[pixel[15]] < c_b)
792                                                     goto is_a_corner;
793                                                 else
794                                                     if( p[pixel[3]] < c_b)
795                                                         if( p[pixel[4]] < c_b)
796                                                             goto is_a_corner;
797                                                         else
798                                                             goto is_not_a_corner;
799         else
800             goto is_not_a_corner;
801         else
802             if( p[pixel[2]] < c_b)
803                 if( p[pixel[3]] < c_b)
804                     if( p[pixel[4]] < c_b)
805                         goto is_a_corner;
806                     else
807                         goto is_not_a_corner;
808         else
809             goto is_not_a_corner;
810         else
811             goto is_not_a_corner;
812         else
813             goto is_not_a_corner;
814         else
815             goto is_not_a_corner;
816         else
817             goto is_not_a_corner;
818         else
819             goto is_not_a_corner;
820         else
821             goto is_not_a_corner;
822         else
823             goto is_not_a_corner;
824         else
825             goto is_not_a_corner;
826         else
827             goto is_not_a_corner;
828         else
829             goto is_not_a_corner;
830         else if( p[pixel[1]] < c_b)
831             if( p[pixel[2]] > cb)
832                 if( p[pixel[6]] > cb)
833                     if( p[pixel[4]] > cb)
834                         if( p[pixel[5]] > cb)
835                             if( p[pixel[7]] > cb)
836                                 if( p[pixel[8]] > cb)
837                                     if( p[pixel[9]] > cb)
838                                         if( p[pixel[10]] > cb)
839                                             if( p[pixel[11]] > cb)
840                                                 if( p[pixel[12]] > cb)
841                                                     if( p[pixel[13]] > cb)
842                                                         if( p[pixel[3]] > cb)
843                                                             goto is_a_corner;
844                                                         else
845                                                             if( p[pixel[14]] > cb)
846                                                                 if( p[pixel[15]] > cb)
847                                                                     goto is_a_corner;
848                                                                 else
849                                                                     goto is_not_a_corner;
850         else
851             goto is_not_a_corner;
852         else
853             goto is_not_a_corner;
854         else
855             goto is_not_a_corner;
856         else
857             goto is_not_a_corner;
858         else
859             goto is_not_a_corner;
860         else
861             goto is_not_a_corner;
862         else
863             goto is_not_a_corner;
864         else
865             goto is_not_a_corner;
866         else
867             goto is_not_a_corner;
868         else
869             goto is_not_a_corner;
870         else if( p[pixel[6]] < c_b)
871             if( p[pixel[7]] < c_b)
872                 if( p[pixel[8]] < c_b)
873                     if( p[pixel[9]] < c_b)
874                         if( p[pixel[10]] < c_b)
875                             if( p[pixel[11]] < c_b)
876                                 if( p[pixel[12]] < c_b)
877                                     if( p[pixel[13]] < c_b)
878                                         if( p[pixel[14]] < c_b)
879                                             if( p[pixel[15]] < c_b)
880                                                 goto is_a_corner;
881                                             else
882                                                 if( p[pixel[3]] < c_b)
883                                                     if( p[pixel[4]] < c_b)
884                                                         if( p[pixel[5]] < c_b)
885                                                             goto is_a_corner;
886                                                         else
887                                                             goto is_not_a_corner;
888         else
889             goto is_not_a_corner;
890         else
891             goto is_not_a_corner;
892         else
893             goto is_not_a_corner;
894         else
895             goto is_not_a_corner;
896         else
897             goto is_not_a_corner;
898         else
899             goto is_not_a_corner;
900         else
901             goto is_not_a_corner;
902         else
903             goto is_not_a_corner;
904         else
905             goto is_not_a_corner;
906         else
907             goto is_not_a_corner;
908         else
909             goto is_not_a_corner;
910         else if( p[pixel[2]] < c_b)
911             if( p[pixel[3]] > cb)
912                 if( p[pixel[15]] < c_b)
913                     if( p[pixel[7]] > cb)
914                         if( p[pixel[4]] > cb)
915                             if( p[pixel[5]] > cb)
916                                 if( p[pixel[6]] > cb)
917                                     if( p[pixel[8]] > cb)
918                                         if( p[pixel[9]] > cb)
919                                             if( p[pixel[10]] > cb)
920                                                 if( p[pixel[11]] > cb)
921                                                     if( p[pixel[12]] > cb)
922                                                         if( p[pixel[13]] > cb)
923                                                             if( p[pixel[14]] > cb)
924                                                                 goto is_a_corner;
925                                                             else
926                                                                 goto is_not_a_corner;
927         else
928             goto is_not_a_corner;
929         else
930             goto is_not_a_corner;
931         else
932             goto is_not_a_corner;
933         else
934             goto is_not_a_corner;
935         else
936             goto is_not_a_corner;
937         else
938             goto is_not_a_corner;
939         else
940             goto is_not_a_corner;
941         else
942             goto is_not_a_corner;
943         else
944             goto is_not_a_corner;
945         else if( p[pixel[7]] < c_b)
946             if( p[pixel[8]] < c_b)
947                 if( p[pixel[9]] < c_b)
948                     if( p[pixel[10]] < c_b)
949                         if( p[pixel[11]] < c_b)
950                             if( p[pixel[12]] < c_b)
951                                 if( p[pixel[13]] < c_b)
952                                     if( p[pixel[14]] < c_b)
953                                         goto is_a_corner;
954                                     else
955                                         goto is_not_a_corner;
956         else
957             goto is_not_a_corner;
958         else
959             goto is_not_a_corner;
960         else
961             goto is_not_a_corner;
962         else
963             goto is_not_a_corner;
964         else
965             goto is_not_a_corner;
966         else
967             goto is_not_a_corner;
968         else
969             goto is_not_a_corner;
970         else
971             if( p[pixel[4]] > cb)
972                 if( p[pixel[5]] > cb)
973                     if( p[pixel[6]] > cb)
974                         if( p[pixel[7]] > cb)
975                             if( p[pixel[8]] > cb)
976                                 if( p[pixel[9]] > cb)
977                                     if( p[pixel[10]] > cb)
978                                         if( p[pixel[11]] > cb)
979                                             if( p[pixel[12]] > cb)
980                                                 if( p[pixel[13]] > cb)
981                                                     if( p[pixel[14]] > cb)
982                                                         goto is_a_corner;
983                                                     else
984                                                         goto is_not_a_corner;
985         else
986             goto is_not_a_corner;
987         else
988             goto is_not_a_corner;
989         else
990             goto is_not_a_corner;
991         else
992             goto is_not_a_corner;
993         else
994             goto is_not_a_corner;
995         else
996             goto is_not_a_corner;
997         else
998             goto is_not_a_corner;
999         else
1000             goto is_not_a_corner;
1001         else
1002             goto is_not_a_corner;
1003         else
1004             goto is_not_a_corner;
1005         else if( p[pixel[3]] < c_b)
1006             if( p[pixel[4]] > cb)
1007                 if( p[pixel[8]] > cb)
1008                     if( p[pixel[5]] > cb)
1009                         if( p[pixel[6]] > cb)
1010                             if( p[pixel[7]] > cb)
1011                                 if( p[pixel[9]] > cb)
1012                                     if( p[pixel[10]] > cb)
1013                                         if( p[pixel[11]] > cb)
1014                                             if( p[pixel[12]] > cb)
1015                                                 if( p[pixel[13]] > cb)
1016                                                     if( p[pixel[14]] > cb)
1017                                                         if( p[pixel[15]] > cb)
1018                                                             goto is_a_corner;
1019                                                         else
1020                                                             goto is_not_a_corner;
1021         else
1022             goto is_not_a_corner;
1023         else
1024             goto is_not_a_corner;
1025         else
1026             goto is_not_a_corner;
1027         else
1028             goto is_not_a_corner;
1029         else
1030             goto is_not_a_corner;
1031         else
1032             goto is_not_a_corner;
1033         else
1034             goto is_not_a_corner;
1035         else
1036             goto is_not_a_corner;
1037         else
1038             goto is_not_a_corner;
1039         else if( p[pixel[8]] < c_b)
1040             if( p[pixel[9]] < c_b)
1041                 if( p[pixel[10]] < c_b)
1042                     if( p[pixel[11]] < c_b)
1043                         if( p[pixel[12]] < c_b)
1044                             if( p[pixel[13]] < c_b)
1045                                 if( p[pixel[14]] < c_b)
1046                                     if( p[pixel[15]] < c_b)
1047                                         goto is_a_corner;
1048                                     else
1049                                         goto is_not_a_corner;
1050         else
1051             goto is_not_a_corner;
1052         else
1053             goto is_not_a_corner;
1054         else
1055             goto is_not_a_corner;
1056         else
1057             goto is_not_a_corner;
1058         else
1059             goto is_not_a_corner;
1060         else
1061             goto is_not_a_corner;
1062         else
1063             goto is_not_a_corner;
1064         else if( p[pixel[4]] < c_b)
1065             if( p[pixel[5]] < c_b)
1066                 if( p[pixel[6]] < c_b)
1067                     if( p[pixel[7]] < c_b)
1068                         if( p[pixel[8]] < c_b)
1069                             if( p[pixel[9]] < c_b)
1070                                 if( p[pixel[10]] < c_b)
1071                                     if( p[pixel[11]] < c_b)
1072                                         goto is_a_corner;
1073                                     else
1074                                         if( p[pixel[15]] < c_b)
1075                                             goto is_a_corner;
1076                                         else
1077                                             goto is_not_a_corner;
1078         else
1079             if( p[pixel[14]] < c_b)
1080                 if( p[pixel[15]] < c_b)
1081                     goto is_a_corner;
1082                 else
1083                     goto is_not_a_corner;
1084         else
1085             goto is_not_a_corner;
1086         else
1087             if( p[pixel[13]] < c_b)
1088                 if( p[pixel[14]] < c_b)
1089                     if( p[pixel[15]] < c_b)
1090                         goto is_a_corner;
1091                     else
1092                         goto is_not_a_corner;
1093         else
1094             goto is_not_a_corner;
1095         else
1096             goto is_not_a_corner;
1097         else
1098             if( p[pixel[12]] < c_b)
1099                 if( p[pixel[13]] < c_b)
1100                     if( p[pixel[14]] < c_b)
1101                         if( p[pixel[15]] < c_b)
1102                             goto is_a_corner;
1103                         else
1104                             goto is_not_a_corner;
1105         else
1106             goto is_not_a_corner;
1107         else
1108             goto is_not_a_corner;
1109         else
1110             goto is_not_a_corner;
1111         else
1112             if( p[pixel[11]] < c_b)
1113                 if( p[pixel[12]] < c_b)
1114                     if( p[pixel[13]] < c_b)
1115                         if( p[pixel[14]] < c_b)
1116                             if( p[pixel[15]] < c_b)
1117                                 goto is_a_corner;
1118                             else
1119                                 goto is_not_a_corner;
1120         else
1121             goto is_not_a_corner;
1122         else
1123             goto is_not_a_corner;
1124         else
1125             goto is_not_a_corner;
1126         else
1127             goto is_not_a_corner;
1128         else
1129             if( p[pixel[10]] < c_b)
1130                 if( p[pixel[11]] < c_b)
1131                     if( p[pixel[12]] < c_b)
1132                         if( p[pixel[13]] < c_b)
1133                             if( p[pixel[14]] < c_b)
1134                                 if( p[pixel[15]] < c_b)
1135                                     goto is_a_corner;
1136                                 else
1137                                     goto is_not_a_corner;
1138         else
1139             goto is_not_a_corner;
1140         else
1141             goto is_not_a_corner;
1142         else
1143             goto is_not_a_corner;
1144         else
1145             goto is_not_a_corner;
1146         else
1147             goto is_not_a_corner;
1148         else
1149             if( p[pixel[9]] < c_b)
1150                 if( p[pixel[10]] < c_b)
1151                     if( p[pixel[11]] < c_b)
1152                         if( p[pixel[12]] < c_b)
1153                             if( p[pixel[13]] < c_b)
1154                                 if( p[pixel[14]] < c_b)
1155                                     if( p[pixel[15]] < c_b)
1156                                         goto is_a_corner;
1157                                     else
1158                                         goto is_not_a_corner;
1159         else
1160             goto is_not_a_corner;
1161         else
1162             goto is_not_a_corner;
1163         else
1164             goto is_not_a_corner;
1165         else
1166             goto is_not_a_corner;
1167         else
1168             goto is_not_a_corner;
1169         else
1170             goto is_not_a_corner;
1171         else
1172             if( p[pixel[8]] < c_b)
1173                 if( p[pixel[9]] < c_b)
1174                     if( p[pixel[10]] < c_b)
1175                         if( p[pixel[11]] < c_b)
1176                             if( p[pixel[12]] < c_b)
1177                                 if( p[pixel[13]] < c_b)
1178                                     if( p[pixel[14]] < c_b)
1179                                         if( p[pixel[15]] < c_b)
1180                                             goto is_a_corner;
1181                                         else
1182                                             goto is_not_a_corner;
1183         else
1184             goto is_not_a_corner;
1185         else
1186             goto is_not_a_corner;
1187         else
1188             goto is_not_a_corner;
1189         else
1190             goto is_not_a_corner;
1191         else
1192             goto is_not_a_corner;
1193         else
1194             goto is_not_a_corner;
1195         else
1196             goto is_not_a_corner;
1197         else
1198             if( p[pixel[7]] > cb)
1199                 if( p[pixel[4]] > cb)
1200                     if( p[pixel[5]] > cb)
1201                         if( p[pixel[6]] > cb)
1202                             if( p[pixel[8]] > cb)
1203                                 if( p[pixel[9]] > cb)
1204                                     if( p[pixel[10]] > cb)
1205                                         if( p[pixel[11]] > cb)
1206                                             if( p[pixel[12]] > cb)
1207                                                 if( p[pixel[13]] > cb)
1208                                                     if( p[pixel[14]] > cb)
1209                                                         if( p[pixel[15]] > cb)
1210                                                             goto is_a_corner;
1211                                                         else
1212                                                             goto is_not_a_corner;
1213         else
1214             goto is_not_a_corner;
1215         else
1216             goto is_not_a_corner;
1217         else
1218             goto is_not_a_corner;
1219         else
1220             goto is_not_a_corner;
1221         else
1222             goto is_not_a_corner;
1223         else
1224             goto is_not_a_corner;
1225         else
1226             goto is_not_a_corner;
1227         else
1228             goto is_not_a_corner;
1229         else
1230             goto is_not_a_corner;
1231         else
1232             goto is_not_a_corner;
1233         else if( p[pixel[7]] < c_b)
1234             if( p[pixel[8]] < c_b)
1235                 if( p[pixel[9]] < c_b)
1236                     if( p[pixel[10]] < c_b)
1237                         if( p[pixel[11]] < c_b)
1238                             if( p[pixel[12]] < c_b)
1239                                 if( p[pixel[13]] < c_b)
1240                                     if( p[pixel[14]] < c_b)
1241                                         if( p[pixel[15]] < c_b)
1242                                             goto is_a_corner;
1243                                         else
1244                                             goto is_not_a_corner;
1245         else
1246             goto is_not_a_corner;
1247         else
1248             goto is_not_a_corner;
1249         else
1250             goto is_not_a_corner;
1251         else
1252             goto is_not_a_corner;
1253         else
1254             goto is_not_a_corner;
1255         else
1256             goto is_not_a_corner;
1257         else
1258             goto is_not_a_corner;
1259         else
1260             goto is_not_a_corner;
1261         else
1262             if( p[pixel[6]] > cb)
1263                 if( p[pixel[4]] > cb)
1264                     if( p[pixel[5]] > cb)
1265                         if( p[pixel[7]] > cb)
1266                             if( p[pixel[8]] > cb)
1267                                 if( p[pixel[9]] > cb)
1268                                     if( p[pixel[10]] > cb)
1269                                         if( p[pixel[11]] > cb)
1270                                             if( p[pixel[12]] > cb)
1271                                                 if( p[pixel[13]] > cb)
1272                                                     if( p[pixel[14]] > cb)
1273                                                         if( p[pixel[3]] > cb)
1274                                                             goto is_a_corner;
1275                                                         else
1276                                                             if( p[pixel[15]] > cb)
1277                                                                 goto is_a_corner;
1278                                                             else
1279                                                                 goto is_not_a_corner;
1280         else
1281             goto is_not_a_corner;
1282         else
1283             goto is_not_a_corner;
1284         else
1285             goto is_not_a_corner;
1286         else
1287             goto is_not_a_corner;
1288         else
1289             goto is_not_a_corner;
1290         else
1291             goto is_not_a_corner;
1292         else
1293             goto is_not_a_corner;
1294         else
1295             goto is_not_a_corner;
1296         else
1297             goto is_not_a_corner;
1298         else
1299             goto is_not_a_corner;
1300         else if( p[pixel[6]] < c_b)
1301             if( p[pixel[7]] < c_b)
1302                 if( p[pixel[8]] < c_b)
1303                     if( p[pixel[9]] < c_b)
1304                         if( p[pixel[10]] < c_b)
1305                             if( p[pixel[11]] < c_b)
1306                                 if( p[pixel[12]] < c_b)
1307                                     if( p[pixel[13]] < c_b)
1308                                         if( p[pixel[14]] < c_b)
1309                                             if( p[pixel[15]] < c_b)
1310                                                 goto is_a_corner;
1311                                             else
1312                                                 if( p[pixel[3]] < c_b)
1313                                                     if( p[pixel[4]] < c_b)
1314                                                         if( p[pixel[5]] < c_b)
1315                                                             goto is_a_corner;
1316                                                         else
1317                                                             goto is_not_a_corner;
1318         else
1319             goto is_not_a_corner;
1320         else
1321             goto is_not_a_corner;
1322         else
1323             goto is_not_a_corner;
1324         else
1325             goto is_not_a_corner;
1326         else
1327             goto is_not_a_corner;
1328         else
1329             goto is_not_a_corner;
1330         else
1331             goto is_not_a_corner;
1332         else
1333             goto is_not_a_corner;
1334         else
1335             goto is_not_a_corner;
1336         else
1337             goto is_not_a_corner;
1338         else
1339             goto is_not_a_corner;
1340         else
1341             if( p[pixel[5]] > cb)
1342                 if( p[pixel[4]] > cb)
1343                     if( p[pixel[6]] > cb)
1344                         if( p[pixel[7]] > cb)
1345                             if( p[pixel[8]] > cb)
1346                                 if( p[pixel[9]] > cb)
1347                                     if( p[pixel[10]] > cb)
1348                                         if( p[pixel[11]] > cb)
1349                                             if( p[pixel[12]] > cb)
1350                                                 if( p[pixel[13]] > cb)
1351                                                     if( p[pixel[3]] > cb)
1352                                                         if( p[pixel[2]] > cb)
1353                                                             goto is_a_corner;
1354                                                         else
1355                                                             if( p[pixel[14]] > cb)
1356                                                                 goto is_a_corner;
1357                                                             else
1358                                                                 goto is_not_a_corner;
1359         else
1360             if( p[pixel[14]] > cb)
1361                 if( p[pixel[15]] > cb)
1362                     goto is_a_corner;
1363                 else
1364                     goto is_not_a_corner;
1365         else
1366             goto is_not_a_corner;
1367         else
1368             goto is_not_a_corner;
1369         else
1370             goto is_not_a_corner;
1371         else
1372             goto is_not_a_corner;
1373         else
1374             goto is_not_a_corner;
1375         else
1376             goto is_not_a_corner;
1377         else
1378             goto is_not_a_corner;
1379         else
1380             goto is_not_a_corner;
1381         else
1382             goto is_not_a_corner;
1383         else
1384             goto is_not_a_corner;
1385         else if( p[pixel[5]] < c_b)
1386             if( p[pixel[6]] < c_b)
1387                 if( p[pixel[7]] < c_b)
1388                     if( p[pixel[8]] < c_b)
1389                         if( p[pixel[9]] < c_b)
1390                             if( p[pixel[10]] < c_b)
1391                                 if( p[pixel[11]] < c_b)
1392                                     if( p[pixel[12]] < c_b)
1393                                         if( p[pixel[13]] < c_b)
1394                                             if( p[pixel[14]] < c_b)
1395                                                 if( p[pixel[15]] < c_b)
1396                                                     goto is_a_corner;
1397                                                 else
1398                                                     if( p[pixel[3]] < c_b)
1399                                                         if( p[pixel[4]] < c_b)
1400                                                             goto is_a_corner;
1401                                                         else
1402                                                             goto is_not_a_corner;
1403         else
1404             goto is_not_a_corner;
1405         else
1406             if( p[pixel[2]] < c_b)
1407                 if( p[pixel[3]] < c_b)
1408                     if( p[pixel[4]] < c_b)
1409                         goto is_a_corner;
1410                     else
1411                         goto is_not_a_corner;
1412         else
1413             goto is_not_a_corner;
1414         else
1415             goto is_not_a_corner;
1416         else
1417             goto is_not_a_corner;
1418         else
1419             goto is_not_a_corner;
1420         else
1421             goto is_not_a_corner;
1422         else
1423             goto is_not_a_corner;
1424         else
1425             goto is_not_a_corner;
1426         else
1427             goto is_not_a_corner;
1428         else
1429             goto is_not_a_corner;
1430         else
1431             goto is_not_a_corner;
1432         else
1433             goto is_not_a_corner;
1434         else
1435             if( p[pixel[4]] > cb)
1436                 if( p[pixel[5]] > cb)
1437                     if( p[pixel[6]] > cb)
1438                         if( p[pixel[7]] > cb)
1439                             if( p[pixel[8]] > cb)
1440                                 if( p[pixel[9]] > cb)
1441                                     if( p[pixel[10]] > cb)
1442                                         if( p[pixel[11]] > cb)
1443                                             if( p[pixel[12]] > cb)
1444                                                 if( p[pixel[3]] > cb)
1445                                                     if( p[pixel[2]] > cb)
1446                                                         if( p[pixel[1]] > cb)
1447                                                             goto is_a_corner;
1448                                                         else
1449                                                             if( p[pixel[13]] > cb)
1450                                                                 goto is_a_corner;
1451                                                             else
1452                                                                 goto is_not_a_corner;
1453         else
1454             if( p[pixel[13]] > cb)
1455                 if( p[pixel[14]] > cb)
1456                     goto is_a_corner;
1457                 else
1458                     goto is_not_a_corner;
1459         else
1460             goto is_not_a_corner;
1461         else
1462             if( p[pixel[13]] > cb)
1463                 if( p[pixel[14]] > cb)
1464                     if( p[pixel[15]] > cb)
1465                         goto is_a_corner;
1466                     else
1467                         goto is_not_a_corner;
1468         else
1469             goto is_not_a_corner;
1470         else
1471             goto is_not_a_corner;
1472         else
1473             goto is_not_a_corner;
1474         else
1475             goto is_not_a_corner;
1476         else
1477             goto is_not_a_corner;
1478         else
1479             goto is_not_a_corner;
1480         else
1481             goto is_not_a_corner;
1482         else
1483             goto is_not_a_corner;
1484         else
1485             goto is_not_a_corner;
1486         else
1487             goto is_not_a_corner;
1488         else if( p[pixel[4]] < c_b)
1489             if( p[pixel[5]] < c_b)
1490                 if( p[pixel[6]] < c_b)
1491                     if( p[pixel[7]] < c_b)
1492                         if( p[pixel[8]] < c_b)
1493                             if( p[pixel[9]] < c_b)
1494                                 if( p[pixel[10]] < c_b)
1495                                     if( p[pixel[11]] < c_b)
1496                                         if( p[pixel[12]] < c_b)
1497                                             if( p[pixel[3]] < c_b)
1498                                                 if( p[pixel[2]] < c_b)
1499                                                     if( p[pixel[1]] < c_b)
1500                                                         goto is_a_corner;
1501                                                     else
1502                                                         if( p[pixel[13]] < c_b)
1503                                                             goto is_a_corner;
1504                                                         else
1505                                                             goto is_not_a_corner;
1506         else
1507             if( p[pixel[13]] < c_b)
1508                 if( p[pixel[14]] < c_b)
1509                     goto is_a_corner;
1510                 else
1511                     goto is_not_a_corner;
1512         else
1513             goto is_not_a_corner;
1514         else
1515             if( p[pixel[13]] < c_b)
1516                 if( p[pixel[14]] < c_b)
1517                     if( p[pixel[15]] < c_b)
1518                         goto is_a_corner;
1519                     else
1520                         goto is_not_a_corner;
1521         else
1522             goto is_not_a_corner;
1523         else
1524             goto is_not_a_corner;
1525         else
1526             goto is_not_a_corner;
1527         else
1528             goto is_not_a_corner;
1529         else
1530             goto is_not_a_corner;
1531         else
1532             goto is_not_a_corner;
1533         else
1534             goto is_not_a_corner;
1535         else
1536             goto is_not_a_corner;
1537         else
1538             goto is_not_a_corner;
1539         else
1540             goto is_not_a_corner;
1541         else
1542             goto is_not_a_corner;
1543 
1544     is_a_corner:
1545         bmin=b;
1546         goto end_if;
1547 
1548     is_not_a_corner:
1549         bmax=b;
1550         goto end_if;
1551 
1552     end_if:
1553 
1554         if(bmin == bmax - 1 || bmin == bmax)
1555             return bmin;
1556         b = (bmin + bmax) / 2;
1557     }
1558     return 0;
1559 }
1560 
1561 static void make_offsets(int *pixel, int row_stride)
1562 {
1563     pixel[0] = 0 + row_stride * 3;
1564     pixel[1] = 1 + row_stride * 3;
1565     pixel[2] = 2 + row_stride * 2;
1566     pixel[3] = 3 + row_stride * 1;
1567     pixel[4] = 3 + row_stride * 0;
1568     pixel[5] = 3 + row_stride * -1;
1569     pixel[6] = 2 + row_stride * -2;
1570     pixel[7] = 1 + row_stride * -3;
1571     pixel[8] = 0 + row_stride * -3;
1572     pixel[9] = -1 + row_stride * -3;
1573     pixel[10] = -2 + row_stride * -2;
1574     pixel[11] = -3 + row_stride * -1;
1575     pixel[12] = -3 + row_stride * 0;
1576     pixel[13] = -3 + row_stride * 1;
1577     pixel[14] = -2 + row_stride * 2;
1578     pixel[15] = -1 + row_stride * 3;
1579 }
1580 
1581 
1582 
1583 int* fast12_score(const ubyte* i, int stride, xy* corners, int num_corners, int b)
1584 {	
1585     int* scores = cast(int*)malloc(int.sizeof* num_corners);
1586     int n;
1587 
1588     int [16]pixel;
1589     make_offsets(pixel.ptr, stride);
1590 
1591     for(n=0; n < num_corners; n++)
1592         scores[n] = fast12_corner_score(i + corners[n].y*stride + corners[n].x, pixel.ptr, b);
1593 
1594     return scores;
1595 }
1596 
1597 
1598 xy* fast12_detect(const ubyte* im, int xsize, int ysize, int stride, int b, int* ret_num_corners)
1599 {
1600     int num_corners=0;
1601     xy* ret_corners;
1602     int rsize=512;
1603     int [16]pixel;
1604     int x, y;
1605 
1606     ret_corners = cast(xy*)malloc(xy.sizeof*rsize);
1607     make_offsets(pixel.ptr, stride);
1608 
1609     for(y=3; y < ysize - 3; y++)
1610         for(x=3; x < xsize - 3; x++)
1611     {
1612         const ubyte* p = im + y*stride + x;
1613         
1614         int cb = *p + b;
1615         int c_b= *p - b;
1616         if(p[pixel[0]] > cb)
1617             if(p[pixel[1]] > cb)
1618                 if(p[pixel[2]] > cb)
1619                     if(p[pixel[3]] > cb)
1620                         if(p[pixel[4]] > cb)
1621                             if(p[pixel[5]] > cb)
1622                                 if(p[pixel[6]] > cb)
1623                                     if(p[pixel[7]] > cb)
1624                                         if(p[pixel[8]] > cb)
1625                                             if(p[pixel[9]] > cb)
1626                                                 if(p[pixel[10]] > cb)
1627                                                     if(p[pixel[11]] > cb)
1628                                                 {}
1629         else
1630             if(p[pixel[15]] > cb)
1631         {}
1632         else
1633             continue;
1634         else
1635             if(p[pixel[14]] > cb)
1636                 if(p[pixel[15]] > cb)
1637             {}
1638         else
1639             continue;
1640         else
1641             continue;
1642         else
1643             if(p[pixel[13]] > cb)
1644                 if(p[pixel[14]] > cb)
1645                     if(p[pixel[15]] > cb)
1646                 {}
1647         else
1648             continue;
1649         else
1650             continue;
1651         else
1652             continue;
1653         else
1654             if(p[pixel[12]] > cb)
1655                 if(p[pixel[13]] > cb)
1656                     if(p[pixel[14]] > cb)
1657                         if(p[pixel[15]] > cb)
1658                     {}
1659         else
1660             continue;
1661         else
1662             continue;
1663         else
1664             continue;
1665         else
1666             continue;
1667         else
1668             if(p[pixel[11]] > cb)
1669                 if(p[pixel[12]] > cb)
1670                     if(p[pixel[13]] > cb)
1671                         if(p[pixel[14]] > cb)
1672                             if(p[pixel[15]] > cb)
1673                         {}
1674         else
1675             continue;
1676         else
1677             continue;
1678         else
1679             continue;
1680         else
1681             continue;
1682         else
1683             continue;
1684         else
1685             if(p[pixel[10]] > cb)
1686                 if(p[pixel[11]] > cb)
1687                     if(p[pixel[12]] > cb)
1688                         if(p[pixel[13]] > cb)
1689                             if(p[pixel[14]] > cb)
1690                                 if(p[pixel[15]] > cb)
1691                             {}
1692         else
1693             continue;
1694         else
1695             continue;
1696         else
1697             continue;
1698         else
1699             continue;
1700         else
1701             continue;
1702         else
1703             continue;
1704         else
1705             if(p[pixel[9]] > cb)
1706                 if(p[pixel[10]] > cb)
1707                     if(p[pixel[11]] > cb)
1708                         if(p[pixel[12]] > cb)
1709                             if(p[pixel[13]] > cb)
1710                                 if(p[pixel[14]] > cb)
1711                                     if(p[pixel[15]] > cb)
1712                                 {}
1713         else
1714             continue;
1715         else
1716             continue;
1717         else
1718             continue;
1719         else
1720             continue;
1721         else
1722             continue;
1723         else
1724             continue;
1725         else
1726             continue;
1727         else if(p[pixel[4]] < c_b)
1728             if(p[pixel[8]] > cb)
1729                 if(p[pixel[9]] > cb)
1730                     if(p[pixel[10]] > cb)
1731                         if(p[pixel[11]] > cb)
1732                             if(p[pixel[12]] > cb)
1733                                 if(p[pixel[13]] > cb)
1734                                     if(p[pixel[14]] > cb)
1735                                         if(p[pixel[15]] > cb)
1736                                     {}
1737         else
1738             continue;
1739         else
1740             continue;
1741         else
1742             continue;
1743         else
1744             continue;
1745         else
1746             continue;
1747         else
1748             continue;
1749         else
1750             continue;
1751         else if(p[pixel[8]] < c_b)
1752             if(p[pixel[5]] < c_b)
1753                 if(p[pixel[6]] < c_b)
1754                     if(p[pixel[7]] < c_b)
1755                         if(p[pixel[9]] < c_b)
1756                             if(p[pixel[10]] < c_b)
1757                                 if(p[pixel[11]] < c_b)
1758                                     if(p[pixel[12]] < c_b)
1759                                         if(p[pixel[13]] < c_b)
1760                                             if(p[pixel[14]] < c_b)
1761                                                 if(p[pixel[15]] < c_b)
1762                                             {}
1763         else
1764             continue;
1765         else
1766             continue;
1767         else
1768             continue;
1769         else
1770             continue;
1771         else
1772             continue;
1773         else
1774             continue;
1775         else
1776             continue;
1777         else
1778             continue;
1779         else
1780             continue;
1781         else
1782             continue;
1783         else
1784             continue;
1785         else
1786             if(p[pixel[8]] > cb)
1787                 if(p[pixel[9]] > cb)
1788                     if(p[pixel[10]] > cb)
1789                         if(p[pixel[11]] > cb)
1790                             if(p[pixel[12]] > cb)
1791                                 if(p[pixel[13]] > cb)
1792                                     if(p[pixel[14]] > cb)
1793                                         if(p[pixel[15]] > cb)
1794                                     {}
1795         else
1796             continue;
1797         else
1798             continue;
1799         else
1800             continue;
1801         else
1802             continue;
1803         else
1804             continue;
1805         else
1806             continue;
1807         else
1808             continue;
1809         else
1810             continue;
1811         else if(p[pixel[3]] < c_b)
1812             if(p[pixel[15]] > cb)
1813                 if(p[pixel[7]] > cb)
1814                     if(p[pixel[8]] > cb)
1815                         if(p[pixel[9]] > cb)
1816                             if(p[pixel[10]] > cb)
1817                                 if(p[pixel[11]] > cb)
1818                                     if(p[pixel[12]] > cb)
1819                                         if(p[pixel[13]] > cb)
1820                                             if(p[pixel[14]] > cb)
1821                                         {}
1822         else
1823             continue;
1824         else
1825             continue;
1826         else
1827             continue;
1828         else
1829             continue;
1830         else
1831             continue;
1832         else
1833             continue;
1834         else
1835             continue;
1836         else if(p[pixel[7]] < c_b)
1837             if(p[pixel[4]] < c_b)
1838                 if(p[pixel[5]] < c_b)
1839                     if(p[pixel[6]] < c_b)
1840                         if(p[pixel[8]] < c_b)
1841                             if(p[pixel[9]] < c_b)
1842                                 if(p[pixel[10]] < c_b)
1843                                     if(p[pixel[11]] < c_b)
1844                                         if(p[pixel[12]] < c_b)
1845                                             if(p[pixel[13]] < c_b)
1846                                                 if(p[pixel[14]] < c_b)
1847                                             {}
1848         else
1849             continue;
1850         else
1851             continue;
1852         else
1853             continue;
1854         else
1855             continue;
1856         else
1857             continue;
1858         else
1859             continue;
1860         else
1861             continue;
1862         else
1863             continue;
1864         else
1865             continue;
1866         else
1867             continue;
1868         else
1869             continue;
1870         else
1871             if(p[pixel[4]] < c_b)
1872                 if(p[pixel[5]] < c_b)
1873                     if(p[pixel[6]] < c_b)
1874                         if(p[pixel[7]] < c_b)
1875                             if(p[pixel[8]] < c_b)
1876                                 if(p[pixel[9]] < c_b)
1877                                     if(p[pixel[10]] < c_b)
1878                                         if(p[pixel[11]] < c_b)
1879                                             if(p[pixel[12]] < c_b)
1880                                                 if(p[pixel[13]] < c_b)
1881                                                     if(p[pixel[14]] < c_b)
1882                                                 {}
1883         else
1884             continue;
1885         else
1886             continue;
1887         else
1888             continue;
1889         else
1890             continue;
1891         else
1892             continue;
1893         else
1894             continue;
1895         else
1896             continue;
1897         else
1898             continue;
1899         else
1900             continue;
1901         else
1902             continue;
1903         else
1904             continue;
1905         else
1906             if(p[pixel[7]] > cb)
1907                 if(p[pixel[8]] > cb)
1908                     if(p[pixel[9]] > cb)
1909                         if(p[pixel[10]] > cb)
1910                             if(p[pixel[11]] > cb)
1911                                 if(p[pixel[12]] > cb)
1912                                     if(p[pixel[13]] > cb)
1913                                         if(p[pixel[14]] > cb)
1914                                             if(p[pixel[15]] > cb)
1915                                         {}
1916         else
1917             continue;
1918         else
1919             continue;
1920         else
1921             continue;
1922         else
1923             continue;
1924         else
1925             continue;
1926         else
1927             continue;
1928         else
1929             continue;
1930         else
1931             continue;
1932         else if(p[pixel[7]] < c_b)
1933             if(p[pixel[4]] < c_b)
1934                 if(p[pixel[5]] < c_b)
1935                     if(p[pixel[6]] < c_b)
1936                         if(p[pixel[8]] < c_b)
1937                             if(p[pixel[9]] < c_b)
1938                                 if(p[pixel[10]] < c_b)
1939                                     if(p[pixel[11]] < c_b)
1940                                         if(p[pixel[12]] < c_b)
1941                                             if(p[pixel[13]] < c_b)
1942                                                 if(p[pixel[14]] < c_b)
1943                                                     if(p[pixel[15]] < c_b)
1944                                                 {}
1945         else
1946             continue;
1947         else
1948             continue;
1949         else
1950             continue;
1951         else
1952             continue;
1953         else
1954             continue;
1955         else
1956             continue;
1957         else
1958             continue;
1959         else
1960             continue;
1961         else
1962             continue;
1963         else
1964             continue;
1965         else
1966             continue;
1967         else
1968             continue;
1969         else if(p[pixel[2]] < c_b)
1970             if(p[pixel[6]] > cb)
1971                 if(p[pixel[7]] > cb)
1972                     if(p[pixel[8]] > cb)
1973                         if(p[pixel[9]] > cb)
1974                             if(p[pixel[10]] > cb)
1975                                 if(p[pixel[11]] > cb)
1976                                     if(p[pixel[12]] > cb)
1977                                         if(p[pixel[13]] > cb)
1978                                             if(p[pixel[14]] > cb)
1979                                                 if(p[pixel[15]] > cb)
1980                                             {}
1981         else
1982             if(p[pixel[3]] > cb)
1983                 if(p[pixel[4]] > cb)
1984                     if(p[pixel[5]] > cb)
1985                 {}
1986         else
1987             continue;
1988         else
1989             continue;
1990         else
1991             continue;
1992         else
1993             continue;
1994         else
1995             continue;
1996         else
1997             continue;
1998         else
1999             continue;
2000         else
2001             continue;
2002         else
2003             continue;
2004         else
2005             continue;
2006         else
2007             continue;
2008         else if(p[pixel[6]] < c_b)
2009             if(p[pixel[4]] < c_b)
2010                 if(p[pixel[5]] < c_b)
2011                     if(p[pixel[7]] < c_b)
2012                         if(p[pixel[8]] < c_b)
2013                             if(p[pixel[9]] < c_b)
2014                                 if(p[pixel[10]] < c_b)
2015                                     if(p[pixel[11]] < c_b)
2016                                         if(p[pixel[12]] < c_b)
2017                                             if(p[pixel[13]] < c_b)
2018                                                 if(p[pixel[3]] < c_b)
2019                                             {}
2020         else
2021             if(p[pixel[14]] < c_b)
2022                 if(p[pixel[15]] < c_b)
2023             {}
2024         else
2025             continue;
2026         else
2027             continue;
2028         else
2029             continue;
2030         else
2031             continue;
2032         else
2033             continue;
2034         else
2035             continue;
2036         else
2037             continue;
2038         else
2039             continue;
2040         else
2041             continue;
2042         else
2043             continue;
2044         else
2045             continue;
2046         else
2047             continue;
2048         else
2049             if(p[pixel[6]] > cb)
2050                 if(p[pixel[7]] > cb)
2051                     if(p[pixel[8]] > cb)
2052                         if(p[pixel[9]] > cb)
2053                             if(p[pixel[10]] > cb)
2054                                 if(p[pixel[11]] > cb)
2055                                     if(p[pixel[12]] > cb)
2056                                         if(p[pixel[13]] > cb)
2057                                             if(p[pixel[14]] > cb)
2058                                                 if(p[pixel[15]] > cb)
2059                                             {}
2060         else
2061             if(p[pixel[3]] > cb)
2062                 if(p[pixel[4]] > cb)
2063                     if(p[pixel[5]] > cb)
2064                 {}
2065         else
2066             continue;
2067         else
2068             continue;
2069         else
2070             continue;
2071         else
2072             continue;
2073         else
2074             continue;
2075         else
2076             continue;
2077         else
2078             continue;
2079         else
2080             continue;
2081         else
2082             continue;
2083         else
2084             continue;
2085         else
2086             continue;
2087         else if(p[pixel[6]] < c_b)
2088             if(p[pixel[4]] < c_b)
2089                 if(p[pixel[5]] < c_b)
2090                     if(p[pixel[7]] < c_b)
2091                         if(p[pixel[8]] < c_b)
2092                             if(p[pixel[9]] < c_b)
2093                                 if(p[pixel[10]] < c_b)
2094                                     if(p[pixel[11]] < c_b)
2095                                         if(p[pixel[12]] < c_b)
2096                                             if(p[pixel[13]] < c_b)
2097                                                 if(p[pixel[14]] < c_b)
2098                                                     if(p[pixel[3]] < c_b)
2099                                                 {}
2100         else
2101             if(p[pixel[15]] < c_b)
2102         {}
2103         else
2104             continue;
2105         else
2106             continue;
2107         else
2108             continue;
2109         else
2110             continue;
2111         else
2112             continue;
2113         else
2114             continue;
2115         else
2116             continue;
2117         else
2118             continue;
2119         else
2120             continue;
2121         else
2122             continue;
2123         else
2124             continue;
2125         else
2126             continue;
2127         else if(p[pixel[1]] < c_b)
2128             if(p[pixel[5]] > cb)
2129                 if(p[pixel[6]] > cb)
2130                     if(p[pixel[7]] > cb)
2131                         if(p[pixel[8]] > cb)
2132                             if(p[pixel[9]] > cb)
2133                                 if(p[pixel[10]] > cb)
2134                                     if(p[pixel[11]] > cb)
2135                                         if(p[pixel[12]] > cb)
2136                                             if(p[pixel[13]] > cb)
2137                                                 if(p[pixel[14]] > cb)
2138                                                     if(p[pixel[15]] > cb)
2139                                                 {}
2140         else
2141             if(p[pixel[3]] > cb)
2142                 if(p[pixel[4]] > cb)
2143             {}
2144         else
2145             continue;
2146         else
2147             continue;
2148         else
2149             if(p[pixel[2]] > cb)
2150                 if(p[pixel[3]] > cb)
2151                     if(p[pixel[4]] > cb)
2152                 {}
2153         else
2154             continue;
2155         else
2156             continue;
2157         else
2158             continue;
2159         else
2160             continue;
2161         else
2162             continue;
2163         else
2164             continue;
2165         else
2166             continue;
2167         else
2168             continue;
2169         else
2170             continue;
2171         else
2172             continue;
2173         else
2174             continue;
2175         else if(p[pixel[5]] < c_b)
2176             if(p[pixel[4]] < c_b)
2177                 if(p[pixel[6]] < c_b)
2178                     if(p[pixel[7]] < c_b)
2179                         if(p[pixel[8]] < c_b)
2180                             if(p[pixel[9]] < c_b)
2181                                 if(p[pixel[10]] < c_b)
2182                                     if(p[pixel[11]] < c_b)
2183                                         if(p[pixel[12]] < c_b)
2184                                             if(p[pixel[3]] < c_b)
2185                                                 if(p[pixel[2]] < c_b)
2186                                             {}
2187         else
2188             if(p[pixel[13]] < c_b)
2189                 if(p[pixel[14]] < c_b)
2190             {}
2191         else
2192             continue;
2193         else
2194             continue;
2195         else
2196             if(p[pixel[13]] < c_b)
2197                 if(p[pixel[14]] < c_b)
2198                     if(p[pixel[15]] < c_b)
2199                 {}
2200         else
2201             continue;
2202         else
2203             continue;
2204         else
2205             continue;
2206         else
2207             continue;
2208         else
2209             continue;
2210         else
2211             continue;
2212         else
2213             continue;
2214         else
2215             continue;
2216         else
2217             continue;
2218         else
2219             continue;
2220         else
2221             continue;
2222         else
2223             continue;
2224         else
2225             if(p[pixel[5]] > cb)
2226                 if(p[pixel[6]] > cb)
2227                     if(p[pixel[7]] > cb)
2228                         if(p[pixel[8]] > cb)
2229                             if(p[pixel[9]] > cb)
2230                                 if(p[pixel[10]] > cb)
2231                                     if(p[pixel[11]] > cb)
2232                                         if(p[pixel[12]] > cb)
2233                                             if(p[pixel[13]] > cb)
2234                                                 if(p[pixel[14]] > cb)
2235                                                     if(p[pixel[15]] > cb)
2236                                                 {}
2237         else
2238             if(p[pixel[3]] > cb)
2239                 if(p[pixel[4]] > cb)
2240             {}
2241         else
2242             continue;
2243         else
2244             continue;
2245         else
2246             if(p[pixel[2]] > cb)
2247                 if(p[pixel[3]] > cb)
2248                     if(p[pixel[4]] > cb)
2249                 {}
2250         else
2251             continue;
2252         else
2253             continue;
2254         else
2255             continue;
2256         else
2257             continue;
2258         else
2259             continue;
2260         else
2261             continue;
2262         else
2263             continue;
2264         else
2265             continue;
2266         else
2267             continue;
2268         else
2269             continue;
2270         else
2271             continue;
2272         else if(p[pixel[5]] < c_b)
2273             if(p[pixel[4]] < c_b)
2274                 if(p[pixel[6]] < c_b)
2275                     if(p[pixel[7]] < c_b)
2276                         if(p[pixel[8]] < c_b)
2277                             if(p[pixel[9]] < c_b)
2278                                 if(p[pixel[10]] < c_b)
2279                                     if(p[pixel[11]] < c_b)
2280                                         if(p[pixel[12]] < c_b)
2281                                             if(p[pixel[13]] < c_b)
2282                                                 if(p[pixel[3]] < c_b)
2283                                                     if(p[pixel[2]] < c_b)
2284                                                 {}
2285         else
2286             if(p[pixel[14]] < c_b)
2287         {}
2288         else
2289             continue;
2290         else
2291             if(p[pixel[14]] < c_b)
2292                 if(p[pixel[15]] < c_b)
2293             {}
2294         else
2295             continue;
2296         else
2297             continue;
2298         else
2299             continue;
2300         else
2301             continue;
2302         else
2303             continue;
2304         else
2305             continue;
2306         else
2307             continue;
2308         else
2309             continue;
2310         else
2311             continue;
2312         else
2313             continue;
2314         else
2315             continue;
2316         else
2317             continue;
2318         else if(p[pixel[0]] < c_b)
2319             if(p[pixel[1]] > cb)
2320                 if(p[pixel[5]] > cb)
2321                     if(p[pixel[4]] > cb)
2322                         if(p[pixel[6]] > cb)
2323                             if(p[pixel[7]] > cb)
2324                                 if(p[pixel[8]] > cb)
2325                                     if(p[pixel[9]] > cb)
2326                                         if(p[pixel[10]] > cb)
2327                                             if(p[pixel[11]] > cb)
2328                                                 if(p[pixel[12]] > cb)
2329                                                     if(p[pixel[3]] > cb)
2330                                                         if(p[pixel[2]] > cb)
2331                                                     {}
2332         else
2333             if(p[pixel[13]] > cb)
2334                 if(p[pixel[14]] > cb)
2335             {}
2336         else
2337             continue;
2338         else
2339             continue;
2340         else
2341             if(p[pixel[13]] > cb)
2342                 if(p[pixel[14]] > cb)
2343                     if(p[pixel[15]] > cb)
2344                 {}
2345         else
2346             continue;
2347         else
2348             continue;
2349         else
2350             continue;
2351         else
2352             continue;
2353         else
2354             continue;
2355         else
2356             continue;
2357         else
2358             continue;
2359         else
2360             continue;
2361         else
2362             continue;
2363         else
2364             continue;
2365         else
2366             continue;
2367         else if(p[pixel[5]] < c_b)
2368             if(p[pixel[6]] < c_b)
2369                 if(p[pixel[7]] < c_b)
2370                     if(p[pixel[8]] < c_b)
2371                         if(p[pixel[9]] < c_b)
2372                             if(p[pixel[10]] < c_b)
2373                                 if(p[pixel[11]] < c_b)
2374                                     if(p[pixel[12]] < c_b)
2375                                         if(p[pixel[13]] < c_b)
2376                                             if(p[pixel[14]] < c_b)
2377                                                 if(p[pixel[15]] < c_b)
2378                                             {}
2379         else
2380             if(p[pixel[3]] < c_b)
2381                 if(p[pixel[4]] < c_b)
2382             {}
2383         else
2384             continue;
2385         else
2386             continue;
2387         else
2388             if(p[pixel[2]] < c_b)
2389                 if(p[pixel[3]] < c_b)
2390                     if(p[pixel[4]] < c_b)
2391                 {}
2392         else
2393             continue;
2394         else
2395             continue;
2396         else
2397             continue;
2398         else
2399             continue;
2400         else
2401             continue;
2402         else
2403             continue;
2404         else
2405             continue;
2406         else
2407             continue;
2408         else
2409             continue;
2410         else
2411             continue;
2412         else
2413             continue;
2414         else
2415             continue;
2416         else if(p[pixel[1]] < c_b)
2417             if(p[pixel[2]] > cb)
2418                 if(p[pixel[6]] > cb)
2419                     if(p[pixel[4]] > cb)
2420                         if(p[pixel[5]] > cb)
2421                             if(p[pixel[7]] > cb)
2422                                 if(p[pixel[8]] > cb)
2423                                     if(p[pixel[9]] > cb)
2424                                         if(p[pixel[10]] > cb)
2425                                             if(p[pixel[11]] > cb)
2426                                                 if(p[pixel[12]] > cb)
2427                                                     if(p[pixel[13]] > cb)
2428                                                         if(p[pixel[3]] > cb)
2429                                                     {}
2430         else
2431             if(p[pixel[14]] > cb)
2432                 if(p[pixel[15]] > cb)
2433             {}
2434         else
2435             continue;
2436         else
2437             continue;
2438         else
2439             continue;
2440         else
2441             continue;
2442         else
2443             continue;
2444         else
2445             continue;
2446         else
2447             continue;
2448         else
2449             continue;
2450         else
2451             continue;
2452         else
2453             continue;
2454         else
2455             continue;
2456         else if(p[pixel[6]] < c_b)
2457             if(p[pixel[7]] < c_b)
2458                 if(p[pixel[8]] < c_b)
2459                     if(p[pixel[9]] < c_b)
2460                         if(p[pixel[10]] < c_b)
2461                             if(p[pixel[11]] < c_b)
2462                                 if(p[pixel[12]] < c_b)
2463                                     if(p[pixel[13]] < c_b)
2464                                         if(p[pixel[14]] < c_b)
2465                                             if(p[pixel[15]] < c_b)
2466                                         {}
2467         else
2468             if(p[pixel[3]] < c_b)
2469                 if(p[pixel[4]] < c_b)
2470                     if(p[pixel[5]] < c_b)
2471                 {}
2472         else
2473             continue;
2474         else
2475             continue;
2476         else
2477             continue;
2478         else
2479             continue;
2480         else
2481             continue;
2482         else
2483             continue;
2484         else
2485             continue;
2486         else
2487             continue;
2488         else
2489             continue;
2490         else
2491             continue;
2492         else
2493             continue;
2494         else
2495             continue;
2496         else if(p[pixel[2]] < c_b)
2497             if(p[pixel[3]] > cb)
2498                 if(p[pixel[15]] < c_b)
2499                     if(p[pixel[7]] > cb)
2500                         if(p[pixel[4]] > cb)
2501                             if(p[pixel[5]] > cb)
2502                                 if(p[pixel[6]] > cb)
2503                                     if(p[pixel[8]] > cb)
2504                                         if(p[pixel[9]] > cb)
2505                                             if(p[pixel[10]] > cb)
2506                                                 if(p[pixel[11]] > cb)
2507                                                     if(p[pixel[12]] > cb)
2508                                                         if(p[pixel[13]] > cb)
2509                                                             if(p[pixel[14]] > cb)
2510                                                         {}
2511         else
2512             continue;
2513         else
2514             continue;
2515         else
2516             continue;
2517         else
2518             continue;
2519         else
2520             continue;
2521         else
2522             continue;
2523         else
2524             continue;
2525         else
2526             continue;
2527         else
2528             continue;
2529         else
2530             continue;
2531         else if(p[pixel[7]] < c_b)
2532             if(p[pixel[8]] < c_b)
2533                 if(p[pixel[9]] < c_b)
2534                     if(p[pixel[10]] < c_b)
2535                         if(p[pixel[11]] < c_b)
2536                             if(p[pixel[12]] < c_b)
2537                                 if(p[pixel[13]] < c_b)
2538                                     if(p[pixel[14]] < c_b)
2539                                 {}
2540         else
2541             continue;
2542         else
2543             continue;
2544         else
2545             continue;
2546         else
2547             continue;
2548         else
2549             continue;
2550         else
2551             continue;
2552         else
2553             continue;
2554         else
2555             continue;
2556         else
2557             if(p[pixel[4]] > cb)
2558                 if(p[pixel[5]] > cb)
2559                     if(p[pixel[6]] > cb)
2560                         if(p[pixel[7]] > cb)
2561                             if(p[pixel[8]] > cb)
2562                                 if(p[pixel[9]] > cb)
2563                                     if(p[pixel[10]] > cb)
2564                                         if(p[pixel[11]] > cb)
2565                                             if(p[pixel[12]] > cb)
2566                                                 if(p[pixel[13]] > cb)
2567                                                     if(p[pixel[14]] > cb)
2568                                                 {}
2569         else
2570             continue;
2571         else
2572             continue;
2573         else
2574             continue;
2575         else
2576             continue;
2577         else
2578             continue;
2579         else
2580             continue;
2581         else
2582             continue;
2583         else
2584             continue;
2585         else
2586             continue;
2587         else
2588             continue;
2589         else
2590             continue;
2591         else if(p[pixel[3]] < c_b)
2592             if(p[pixel[4]] > cb)
2593                 if(p[pixel[8]] > cb)
2594                     if(p[pixel[5]] > cb)
2595                         if(p[pixel[6]] > cb)
2596                             if(p[pixel[7]] > cb)
2597                                 if(p[pixel[9]] > cb)
2598                                     if(p[pixel[10]] > cb)
2599                                         if(p[pixel[11]] > cb)
2600                                             if(p[pixel[12]] > cb)
2601                                                 if(p[pixel[13]] > cb)
2602                                                     if(p[pixel[14]] > cb)
2603                                                         if(p[pixel[15]] > cb)
2604                                                     {}
2605         else
2606             continue;
2607         else
2608             continue;
2609         else
2610             continue;
2611         else
2612             continue;
2613         else
2614             continue;
2615         else
2616             continue;
2617         else
2618             continue;
2619         else
2620             continue;
2621         else
2622             continue;
2623         else
2624             continue;
2625         else if(p[pixel[8]] < c_b)
2626             if(p[pixel[9]] < c_b)
2627                 if(p[pixel[10]] < c_b)
2628                     if(p[pixel[11]] < c_b)
2629                         if(p[pixel[12]] < c_b)
2630                             if(p[pixel[13]] < c_b)
2631                                 if(p[pixel[14]] < c_b)
2632                                     if(p[pixel[15]] < c_b)
2633                                 {}
2634         else
2635             continue;
2636         else
2637             continue;
2638         else
2639             continue;
2640         else
2641             continue;
2642         else
2643             continue;
2644         else
2645             continue;
2646         else
2647             continue;
2648         else
2649             continue;
2650         else if(p[pixel[4]] < c_b)
2651             if(p[pixel[5]] < c_b)
2652                 if(p[pixel[6]] < c_b)
2653                     if(p[pixel[7]] < c_b)
2654                         if(p[pixel[8]] < c_b)
2655                             if(p[pixel[9]] < c_b)
2656                                 if(p[pixel[10]] < c_b)
2657                                     if(p[pixel[11]] < c_b)
2658                                 {}
2659         else
2660             if(p[pixel[15]] < c_b)
2661         {}
2662         else
2663             continue;
2664         else
2665             if(p[pixel[14]] < c_b)
2666                 if(p[pixel[15]] < c_b)
2667             {}
2668         else
2669             continue;
2670         else
2671             continue;
2672         else
2673             if(p[pixel[13]] < c_b)
2674                 if(p[pixel[14]] < c_b)
2675                     if(p[pixel[15]] < c_b)
2676                 {}
2677         else
2678             continue;
2679         else
2680             continue;
2681         else
2682             continue;
2683         else
2684             if(p[pixel[12]] < c_b)
2685                 if(p[pixel[13]] < c_b)
2686                     if(p[pixel[14]] < c_b)
2687                         if(p[pixel[15]] < c_b)
2688                     {}
2689         else
2690             continue;
2691         else
2692             continue;
2693         else
2694             continue;
2695         else
2696             continue;
2697         else
2698             if(p[pixel[11]] < c_b)
2699                 if(p[pixel[12]] < c_b)
2700                     if(p[pixel[13]] < c_b)
2701                         if(p[pixel[14]] < c_b)
2702                             if(p[pixel[15]] < c_b)
2703                         {}
2704         else
2705             continue;
2706         else
2707             continue;
2708         else
2709             continue;
2710         else
2711             continue;
2712         else
2713             continue;
2714         else
2715             if(p[pixel[10]] < c_b)
2716                 if(p[pixel[11]] < c_b)
2717                     if(p[pixel[12]] < c_b)
2718                         if(p[pixel[13]] < c_b)
2719                             if(p[pixel[14]] < c_b)
2720                                 if(p[pixel[15]] < c_b)
2721                             {}
2722         else
2723             continue;
2724         else
2725             continue;
2726         else
2727             continue;
2728         else
2729             continue;
2730         else
2731             continue;
2732         else
2733             continue;
2734         else
2735             if(p[pixel[9]] < c_b)
2736                 if(p[pixel[10]] < c_b)
2737                     if(p[pixel[11]] < c_b)
2738                         if(p[pixel[12]] < c_b)
2739                             if(p[pixel[13]] < c_b)
2740                                 if(p[pixel[14]] < c_b)
2741                                     if(p[pixel[15]] < c_b)
2742                                 {}
2743         else
2744             continue;
2745         else
2746             continue;
2747         else
2748             continue;
2749         else
2750             continue;
2751         else
2752             continue;
2753         else
2754             continue;
2755         else
2756             continue;
2757         else
2758             if(p[pixel[8]] < c_b)
2759                 if(p[pixel[9]] < c_b)
2760                     if(p[pixel[10]] < c_b)
2761                         if(p[pixel[11]] < c_b)
2762                             if(p[pixel[12]] < c_b)
2763                                 if(p[pixel[13]] < c_b)
2764                                     if(p[pixel[14]] < c_b)
2765                                         if(p[pixel[15]] < c_b)
2766                                     {}
2767         else
2768             continue;
2769         else
2770             continue;
2771         else
2772             continue;
2773         else
2774             continue;
2775         else
2776             continue;
2777         else
2778             continue;
2779         else
2780             continue;
2781         else
2782             continue;
2783         else
2784             if(p[pixel[7]] > cb)
2785                 if(p[pixel[4]] > cb)
2786                     if(p[pixel[5]] > cb)
2787                         if(p[pixel[6]] > cb)
2788                             if(p[pixel[8]] > cb)
2789                                 if(p[pixel[9]] > cb)
2790                                     if(p[pixel[10]] > cb)
2791                                         if(p[pixel[11]] > cb)
2792                                             if(p[pixel[12]] > cb)
2793                                                 if(p[pixel[13]] > cb)
2794                                                     if(p[pixel[14]] > cb)
2795                                                         if(p[pixel[15]] > cb)
2796                                                     {}
2797         else
2798             continue;
2799         else
2800             continue;
2801         else
2802             continue;
2803         else
2804             continue;
2805         else
2806             continue;
2807         else
2808             continue;
2809         else
2810             continue;
2811         else
2812             continue;
2813         else
2814             continue;
2815         else
2816             continue;
2817         else
2818             continue;
2819         else if(p[pixel[7]] < c_b)
2820             if(p[pixel[8]] < c_b)
2821                 if(p[pixel[9]] < c_b)
2822                     if(p[pixel[10]] < c_b)
2823                         if(p[pixel[11]] < c_b)
2824                             if(p[pixel[12]] < c_b)
2825                                 if(p[pixel[13]] < c_b)
2826                                     if(p[pixel[14]] < c_b)
2827                                         if(p[pixel[15]] < c_b)
2828                                     {}
2829         else
2830             continue;
2831         else
2832             continue;
2833         else
2834             continue;
2835         else
2836             continue;
2837         else
2838             continue;
2839         else
2840             continue;
2841         else
2842             continue;
2843         else
2844             continue;
2845         else
2846             continue;
2847         else
2848             if(p[pixel[6]] > cb)
2849                 if(p[pixel[4]] > cb)
2850                     if(p[pixel[5]] > cb)
2851                         if(p[pixel[7]] > cb)
2852                             if(p[pixel[8]] > cb)
2853                                 if(p[pixel[9]] > cb)
2854                                     if(p[pixel[10]] > cb)
2855                                         if(p[pixel[11]] > cb)
2856                                             if(p[pixel[12]] > cb)
2857                                                 if(p[pixel[13]] > cb)
2858                                                     if(p[pixel[14]] > cb)
2859                                                         if(p[pixel[3]] > cb)
2860                                                     {}
2861         else
2862             if(p[pixel[15]] > cb)
2863         {}
2864         else
2865             continue;
2866         else
2867             continue;
2868         else
2869             continue;
2870         else
2871             continue;
2872         else
2873             continue;
2874         else
2875             continue;
2876         else
2877             continue;
2878         else
2879             continue;
2880         else
2881             continue;
2882         else
2883             continue;
2884         else
2885             continue;
2886         else if(p[pixel[6]] < c_b)
2887             if(p[pixel[7]] < c_b)
2888                 if(p[pixel[8]] < c_b)
2889                     if(p[pixel[9]] < c_b)
2890                         if(p[pixel[10]] < c_b)
2891                             if(p[pixel[11]] < c_b)
2892                                 if(p[pixel[12]] < c_b)
2893                                     if(p[pixel[13]] < c_b)
2894                                         if(p[pixel[14]] < c_b)
2895                                             if(p[pixel[15]] < c_b)
2896                                         {}
2897         else
2898             if(p[pixel[3]] < c_b)
2899                 if(p[pixel[4]] < c_b)
2900                     if(p[pixel[5]] < c_b)
2901                 {}
2902         else
2903             continue;
2904         else
2905             continue;
2906         else
2907             continue;
2908         else
2909             continue;
2910         else
2911             continue;
2912         else
2913             continue;
2914         else
2915             continue;
2916         else
2917             continue;
2918         else
2919             continue;
2920         else
2921             continue;
2922         else
2923             continue;
2924         else
2925             continue;
2926         else
2927             if(p[pixel[5]] > cb)
2928                 if(p[pixel[4]] > cb)
2929                     if(p[pixel[6]] > cb)
2930                         if(p[pixel[7]] > cb)
2931                             if(p[pixel[8]] > cb)
2932                                 if(p[pixel[9]] > cb)
2933                                     if(p[pixel[10]] > cb)
2934                                         if(p[pixel[11]] > cb)
2935                                             if(p[pixel[12]] > cb)
2936                                                 if(p[pixel[13]] > cb)
2937                                                     if(p[pixel[3]] > cb)
2938                                                         if(p[pixel[2]] > cb)
2939                                                     {}
2940         else
2941             if(p[pixel[14]] > cb)
2942         {}
2943         else
2944             continue;
2945         else
2946             if(p[pixel[14]] > cb)
2947                 if(p[pixel[15]] > cb)
2948             {}
2949         else
2950             continue;
2951         else
2952             continue;
2953         else
2954             continue;
2955         else
2956             continue;
2957         else
2958             continue;
2959         else
2960             continue;
2961         else
2962             continue;
2963         else
2964             continue;
2965         else
2966             continue;
2967         else
2968             continue;
2969         else
2970             continue;
2971         else if(p[pixel[5]] < c_b)
2972             if(p[pixel[6]] < c_b)
2973                 if(p[pixel[7]] < c_b)
2974                     if(p[pixel[8]] < c_b)
2975                         if(p[pixel[9]] < c_b)
2976                             if(p[pixel[10]] < c_b)
2977                                 if(p[pixel[11]] < c_b)
2978                                     if(p[pixel[12]] < c_b)
2979                                         if(p[pixel[13]] < c_b)
2980                                             if(p[pixel[14]] < c_b)
2981                                                 if(p[pixel[15]] < c_b)
2982                                             {}
2983         else
2984             if(p[pixel[3]] < c_b)
2985                 if(p[pixel[4]] < c_b)
2986             {}
2987         else
2988             continue;
2989         else
2990             continue;
2991         else
2992             if(p[pixel[2]] < c_b)
2993                 if(p[pixel[3]] < c_b)
2994                     if(p[pixel[4]] < c_b)
2995                 {}
2996         else
2997             continue;
2998         else
2999             continue;
3000         else
3001             continue;
3002         else
3003             continue;
3004         else
3005             continue;
3006         else
3007             continue;
3008         else
3009             continue;
3010         else
3011             continue;
3012         else
3013             continue;
3014         else
3015             continue;
3016         else
3017             continue;
3018         else
3019             continue;
3020         else
3021             if(p[pixel[4]] > cb)
3022                 if(p[pixel[5]] > cb)
3023                     if(p[pixel[6]] > cb)
3024                         if(p[pixel[7]] > cb)
3025                             if(p[pixel[8]] > cb)
3026                                 if(p[pixel[9]] > cb)
3027                                     if(p[pixel[10]] > cb)
3028                                         if(p[pixel[11]] > cb)
3029                                             if(p[pixel[12]] > cb)
3030                                                 if(p[pixel[3]] > cb)
3031                                                     if(p[pixel[2]] > cb)
3032                                                         if(p[pixel[1]] > cb)
3033                                                     {}
3034         else
3035             if(p[pixel[13]] > cb)
3036         {}
3037         else
3038             continue;
3039         else
3040             if(p[pixel[13]] > cb)
3041                 if(p[pixel[14]] > cb)
3042             {}
3043         else
3044             continue;
3045         else
3046             continue;
3047         else
3048             if(p[pixel[13]] > cb)
3049                 if(p[pixel[14]] > cb)
3050                     if(p[pixel[15]] > cb)
3051                 {}
3052         else
3053             continue;
3054         else
3055             continue;
3056         else
3057             continue;
3058         else
3059             continue;
3060         else
3061             continue;
3062         else
3063             continue;
3064         else
3065             continue;
3066         else
3067             continue;
3068         else
3069             continue;
3070         else
3071             continue;
3072         else
3073             continue;
3074         else if(p[pixel[4]] < c_b)
3075             if(p[pixel[5]] < c_b)
3076                 if(p[pixel[6]] < c_b)
3077                     if(p[pixel[7]] < c_b)
3078                         if(p[pixel[8]] < c_b)
3079                             if(p[pixel[9]] < c_b)
3080                                 if(p[pixel[10]] < c_b)
3081                                     if(p[pixel[11]] < c_b)
3082                                         if(p[pixel[12]] < c_b)
3083                                             if(p[pixel[3]] < c_b)
3084                                                 if(p[pixel[2]] < c_b)
3085                                                     if(p[pixel[1]] < c_b)
3086                                                 {}
3087         else
3088             if(p[pixel[13]] < c_b)
3089         {}
3090         else
3091             continue;
3092         else
3093             if(p[pixel[13]] < c_b)
3094                 if(p[pixel[14]] < c_b)
3095             {}
3096         else
3097             continue;
3098         else
3099             continue;
3100         else
3101             if(p[pixel[13]] < c_b)
3102                 if(p[pixel[14]] < c_b)
3103                     if(p[pixel[15]] < c_b)
3104                 {}
3105         else
3106             continue;
3107         else
3108             continue;
3109         else
3110             continue;
3111         else
3112             continue;
3113         else
3114             continue;
3115         else
3116             continue;
3117         else
3118             continue;
3119         else
3120             continue;
3121         else
3122             continue;
3123         else
3124             continue;
3125         else
3126             continue;
3127         else
3128             continue;
3129         if(num_corners == rsize)
3130         {
3131             rsize*=2;
3132             ret_corners = cast(xy*)realloc(ret_corners, xy.sizeof*rsize);
3133         }
3134 
3135         ret_corners[num_corners].x = x;
3136         ret_corners[num_corners].y = y;
3137         num_corners++;
3138     }
3139     
3140     *ret_num_corners = num_corners;
3141     return ret_corners;
3142 
3143 }
3144