From a3eb7b4b5614425367178299f3c6c1f0c83b24c1 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Fri, 10 Jul 2015 22:18:01 -0400 Subject: [PATCH] Replace chicken macro with code that can be auto-generated --- Makefile | 5 +-- dispatch.c | 79 +++---------------------------------------- generate-c.scm | 2 +- runtime.c | 92 -------------------------------------------------- 4 files changed, 9 insertions(+), 169 deletions(-) diff --git a/Makefile b/Makefile index fba6c099..01a4c09c 100644 --- a/Makefile +++ b/Makefile @@ -52,9 +52,10 @@ parser.so: parser.scm libcyclone.so.1: runtime.c runtime.h gcc -g -c -fPIC runtime.c -o runtime.o gcc -shared -Wl,-soname,libcyclone.so.1 -o libcyclone.so.1.0.1 runtime.o -libcyclone.a: runtime.c runtime.h +libcyclone.a: runtime.c runtime.h dispatch.c + gcc -g -c dispatch.c -o dispatch.o gcc -g -c runtime.c -o runtime.o - ar rcs libcyclone.a runtime.o + ar rcs libcyclone.a runtime.o dispatch.o # Instructions from: http://www.adp-gmbh.ch/cpp/gcc/create_lib.html # Note compiler will have to link to this, eg: #Linking against static library diff --git a/dispatch.c b/dispatch.c index 3473b525..e5fec0ab 100644 --- a/dispatch.c +++ b/dispatch.c @@ -1,78 +1,9 @@ -// TODO: rewrite this so it works without the crazy macro ( :( ). -// then use cyclone to generate this file + +#include "cyclone.h" +#include "runtime.h" void do_dispatch(int argc, function_type func, object clo, object *b) { - -/* PTR_O_p

_(o): list of COUNT = ((2 ** P) * B) '*(b+I)' arguments, - * with offset I in range [o, o+COUNT-1]. - */ -#define PTR_O_p0_0(o) -#define PTR_O_p1_0(o) -#define PTR_O_p2_0(o) -#define PTR_O_p3_0(o) -#define PTR_O_p4_0(o) -#define PTR_O_p5_0(o) -#define PTR_O_p6_0(o) -#define PTR_O_p7_0(o) -#define PTR_O_p0_1(o) , *(b+(o)) -#define PTR_O_p1_1(o) , *(b+(o)), *(b+(o+1)) -#define PTR_O_p2_1(o) PTR_O_p1_1(o) PTR_O_p1_1(o+2) -#define PTR_O_p3_1(o) PTR_O_p2_1(o) PTR_O_p2_1(o+4) -#define PTR_O_p4_1(o) PTR_O_p3_1(o) PTR_O_p3_1(o+8) -#define PTR_O_p5_1(o) PTR_O_p4_1(o) PTR_O_p4_1(o+16) -#define PTR_O_p6_1(o) PTR_O_p5_1(o) PTR_O_p5_1(o+32) -#define PTR_O_p7_1(o) PTR_O_p6_1(o) PTR_O_p6_1(o+64) - -/* CASE_C_PROC_p0 (n0, p6,p5,p4,p3,p2,p1,p0): - * let's note = - 2; the macro inserts: - * case : ((C_cproc)pr) (, fn, k, ); - * where is: *(b+1), ..., *(b+) - * ( is empty for == 2). - * We must have: n0 = SUM (i = 7 to 0, p * (1 << i)). - * CASE_C_PROC_p (...): - * like CASE_C_PROC_p, but with doubled output... - */ -// case (n0-2): (Cyc_proc##n0)func(n0-2, clo -#define CASE_C_PROC_p0(n0, p6,p5,p4,p3,p2,p1,p0) \ - case (n0-2): func(n0-2, clo \ -PTR_O_p6_##p6(((n0-2)&0x80)+0)\ -PTR_O_p5_##p5(((n0-2)&0xC0)+0)\ -PTR_O_p4_##p4(((n0-2)&0xE0)+0)\ -PTR_O_p3_##p3(((n0-2)&0xF0)+0)\ -PTR_O_p2_##p2(((n0-2)&0xF8)+0)\ -PTR_O_p1_##p1(((n0-2)&0xFC)+0)\ -PTR_O_p0_##p0(((n0-2)&0xFE)+0)); -#define CASE_C_PROC_p1( n0,n1, p6,p5,p4,p3,p2,p1) \ - CASE_C_PROC_p0 (n0, p6,p5,p4,p3,p2,p1,0) \ - CASE_C_PROC_p0 (n1, p6,p5,p4,p3,p2,p1,1) -#define CASE_C_PROC_p2( n0,n1,n2,n3, p6,p5,p4,p3,p2) \ - CASE_C_PROC_p1 (n0,n1, p6,p5,p4,p3,p2,0) \ - CASE_C_PROC_p1 (n2,n3, p6,p5,p4,p3,p2,1) -#define CASE_C_PROC_p3( n0,n1,n2,n3,n4,n5,n6,n7, p6,p5,p4,p3) \ - CASE_C_PROC_p2 (n0,n1,n2,n3, p6,p5,p4,p3,0) \ - CASE_C_PROC_p2 (n4,n5,n6,n7, p6,p5,p4,p3,1) - switch(argc) { - CASE_C_PROC_p3 (2,3,4,5,6,7,8,9, 0,0,0,0) - CASE_C_PROC_p3 (10,11,12,13,14,15,16,17, 0,0,0,1) - CASE_C_PROC_p3 (18,19,20,21,22,23,24,25, 0,0,1,0) - CASE_C_PROC_p3 (26,27,28,29,30,31,32,33, 0,0,1,1) - CASE_C_PROC_p3 (34,35,36,37,38,39,40,41, 0,1,0,0) - CASE_C_PROC_p3 (42,43,44,45,46,47,48,49, 0,1,0,1) - CASE_C_PROC_p3 (50,51,52,53,54,55,56,57, 0,1,1,0) - CASE_C_PROC_p3 (58,59,60,61,62,63,64,65, 0,1,1,1) - CASE_C_PROC_p0 (66, 1,0,0,0,0,0,0) - CASE_C_PROC_p0 (67, 1,0,0,0,0,0,1) - CASE_C_PROC_p1 (68,69, 1,0,0,0,0,1) - CASE_C_PROC_p2 (70,71,72,73, 1,0,0,0,1) - CASE_C_PROC_p3 (74,75,76,77,78,79,80,81, 1,0,0,1) - CASE_C_PROC_p3 (82,83,84,85,86,87,88,89, 1,0,1,0) - CASE_C_PROC_p3 (90,91,92,93,94,95,96,97, 1,0,1,1) - CASE_C_PROC_p3 (98,99,100,101,102,103,104,105, 1,1,0,0) - CASE_C_PROC_p3 (106,107,108,109,110,111,112,113, 1,1,0,1) - CASE_C_PROC_p3 (114,115,116,117,118,119,120,121, 1,1,1,0) - CASE_C_PROC_p2 (122,123,124,125, 1,1,1,1,0) - CASE_C_PROC_p1 (126,127, 1,1,1,1,1,0) - CASE_C_PROC_p0 (128, 1,1,1,1,1,1,0) + switch(argc) {case 0:func(0,clo);case 1:func(1,clo,*(b+0));case 2:func(2,clo,*(b+0),*(b+1));case 3:func(3,clo,*(b+0),*(b+1),*(b+2));case 4:func(4,clo,*(b+0),*(b+1),*(b+2),*(b+3));case 5:func(5,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4));case 6:func(6,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5));case 7:func(7,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6));case 8:func(8,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7));case 9:func(9,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8));case 10:func(10,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9));case 11:func(11,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10));case 12:func(12,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11));case 13:func(13,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12));case 14:func(14,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13));case 15:func(15,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14));case 16:func(16,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15));case 17:func(17,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16));case 18:func(18,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17));case 19:func(19,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18));case 20:func(20,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19));case 21:func(21,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20));case 22:func(22,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21));case 23:func(23,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22));case 24:func(24,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23));case 25:func(25,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24));case 26:func(26,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25));case 27:func(27,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26));case 28:func(28,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27));case 29:func(29,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28));case 30:func(30,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29));case 31:func(31,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30));case 32:func(32,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31));case 33:func(33,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32));case 34:func(34,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33));case 35:func(35,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34));case 36:func(36,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35));case 37:func(37,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36));case 38:func(38,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37));case 39:func(39,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38));case 40:func(40,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39));case 41:func(41,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40));case 42:func(42,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41));case 43:func(43,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42));case 44:func(44,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43));case 45:func(45,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44));case 46:func(46,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45));case 47:func(47,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46));case 48:func(48,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47));case 49:func(49,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48));case 50:func(50,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49));case 51:func(51,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50));case 52:func(52,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51));case 53:func(53,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52));case 54:func(54,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53));case 55:func(55,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54));case 56:func(56,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55));case 57:func(57,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56));case 58:func(58,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57));case 59:func(59,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58));case 60:func(60,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59));case 61:func(61,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60));case 62:func(62,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61));case 63:func(63,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62));case 64:func(64,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63));case 65:func(65,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64));case 66:func(66,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65));case 67:func(67,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66));case 68:func(68,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67));case 69:func(69,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68));case 70:func(70,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69));case 71:func(71,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70));case 72:func(72,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71));case 73:func(73,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72));case 74:func(74,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73));case 75:func(75,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74));case 76:func(76,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75));case 77:func(77,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76));case 78:func(78,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77));case 79:func(79,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78));case 80:func(80,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79));case 81:func(81,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80));case 82:func(82,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81));case 83:func(83,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82));case 84:func(84,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83));case 85:func(85,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84));case 86:func(86,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85));case 87:func(87,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86));case 88:func(88,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87));case 89:func(89,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88));case 90:func(90,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89));case 91:func(91,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90));case 92:func(92,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91));case 93:func(93,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92));case 94:func(94,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93));case 95:func(95,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94));case 96:func(96,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95));case 97:func(97,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96));case 98:func(98,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97));case 99:func(99,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98));case 100:func(100,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99));case 101:func(101,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100));case 102:func(102,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101));case 103:func(103,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102));case 104:func(104,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103));case 105:func(105,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104));case 106:func(106,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105));case 107:func(107,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106));case 108:func(108,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107));case 109:func(109,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108));case 110:func(110,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109));case 111:func(111,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110));case 112:func(112,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111));case 113:func(113,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112));case 114:func(114,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113));case 115:func(115,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113),*(b+114));case 116:func(116,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113),*(b+114),*(b+115));case 117:func(117,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113),*(b+114),*(b+115),*(b+116));case 118:func(118,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113),*(b+114),*(b+115),*(b+116),*(b+117));case 119:func(119,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113),*(b+114),*(b+115),*(b+116),*(b+117),*(b+118));case 120:func(120,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113),*(b+114),*(b+115),*(b+116),*(b+117),*(b+118),*(b+119));case 121:func(121,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113),*(b+114),*(b+115),*(b+116),*(b+117),*(b+118),*(b+119),*(b+120));case 122:func(122,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113),*(b+114),*(b+115),*(b+116),*(b+117),*(b+118),*(b+119),*(b+120),*(b+121));case 123:func(123,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113),*(b+114),*(b+115),*(b+116),*(b+117),*(b+118),*(b+119),*(b+120),*(b+121),*(b+122));case 124:func(124,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113),*(b+114),*(b+115),*(b+116),*(b+117),*(b+118),*(b+119),*(b+120),*(b+121),*(b+122),*(b+123));case 125:func(125,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113),*(b+114),*(b+115),*(b+116),*(b+117),*(b+118),*(b+119),*(b+120),*(b+121),*(b+122),*(b+123),*(b+124));case 126:func(126,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113),*(b+114),*(b+115),*(b+116),*(b+117),*(b+118),*(b+119),*(b+120),*(b+121),*(b+122),*(b+123),*(b+124),*(b+125));case 127:func(127,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113),*(b+114),*(b+115),*(b+116),*(b+117),*(b+118),*(b+119),*(b+120),*(b+121),*(b+122),*(b+123),*(b+124),*(b+125),*(b+126));case 128:func(128,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113),*(b+114),*(b+115),*(b+116),*(b+117),*(b+118),*(b+119),*(b+120),*(b+121),*(b+122),*(b+123),*(b+124),*(b+125),*(b+126),*(b+127));case 129:func(129,clo,*(b+0),*(b+1),*(b+2),*(b+3),*(b+4),*(b+5),*(b+6),*(b+7),*(b+8),*(b+9),*(b+10),*(b+11),*(b+12),*(b+13),*(b+14),*(b+15),*(b+16),*(b+17),*(b+18),*(b+19),*(b+20),*(b+21),*(b+22),*(b+23),*(b+24),*(b+25),*(b+26),*(b+27),*(b+28),*(b+29),*(b+30),*(b+31),*(b+32),*(b+33),*(b+34),*(b+35),*(b+36),*(b+37),*(b+38),*(b+39),*(b+40),*(b+41),*(b+42),*(b+43),*(b+44),*(b+45),*(b+46),*(b+47),*(b+48),*(b+49),*(b+50),*(b+51),*(b+52),*(b+53),*(b+54),*(b+55),*(b+56),*(b+57),*(b+58),*(b+59),*(b+60),*(b+61),*(b+62),*(b+63),*(b+64),*(b+65),*(b+66),*(b+67),*(b+68),*(b+69),*(b+70),*(b+71),*(b+72),*(b+73),*(b+74),*(b+75),*(b+76),*(b+77),*(b+78),*(b+79),*(b+80),*(b+81),*(b+82),*(b+83),*(b+84),*(b+85),*(b+86),*(b+87),*(b+88),*(b+89),*(b+90),*(b+91),*(b+92),*(b+93),*(b+94),*(b+95),*(b+96),*(b+97),*(b+98),*(b+99),*(b+100),*(b+101),*(b+102),*(b+103),*(b+104),*(b+105),*(b+106),*(b+107),*(b+108),*(b+109),*(b+110),*(b+111),*(b+112),*(b+113),*(b+114),*(b+115),*(b+116),*(b+117),*(b+118),*(b+119),*(b+120),*(b+121),*(b+122),*(b+123),*(b+124),*(b+125),*(b+126),*(b+127),*(b+128)); default: { char buf[1024]; @@ -80,4 +11,4 @@ PTR_O_p0_##p0(((n0-2)&0xFE)+0)); Cyc_rt_raise_msg(buf); } } -} +} \ No newline at end of file diff --git a/generate-c.scm b/generate-c.scm index 4ae8683d..dff482df 100644 --- a/generate-c.scm +++ b/generate-c.scm @@ -3,7 +3,7 @@ (scheme write)) (with-output-to-file - "tmp.c" + "dispatch.c" (lambda () (display " #include \"cyclone.h\" diff --git a/runtime.c b/runtime.c index 5f577812..0bd1e6b7 100644 --- a/runtime.c +++ b/runtime.c @@ -1955,98 +1955,6 @@ void dispatch_va(int argc, function_type_va func, object clo, object cont, objec do_dispatch(argc, (function_type)func, clo, b); } -/** - * Take list of args and call a function with them as params. - * - * All of the clever C macro expansions were taken from the - * macro expansion code from CHICKEN's do_apply. TBD if this will - * remain. On the one hand it reduces the size of the C code, but - * on the other I think it ties this code to CHICKEN's license terms. - * - * Note memory scheme we are using is not compatible with GC, - * so macro calls funcs directly. - */ -void do_dispatch(int argc, function_type func, object clo, object *b) { - -/* PTR_O_p

_(o): list of COUNT = ((2 ** P) * B) '*(b+I)' arguments, - * with offset I in range [o, o+COUNT-1]. - */ -#define PTR_O_p0_0(o) -#define PTR_O_p1_0(o) -#define PTR_O_p2_0(o) -#define PTR_O_p3_0(o) -#define PTR_O_p4_0(o) -#define PTR_O_p5_0(o) -#define PTR_O_p6_0(o) -#define PTR_O_p7_0(o) -#define PTR_O_p0_1(o) , *(b+(o)) -#define PTR_O_p1_1(o) , *(b+(o)), *(b+(o+1)) -#define PTR_O_p2_1(o) PTR_O_p1_1(o) PTR_O_p1_1(o+2) -#define PTR_O_p3_1(o) PTR_O_p2_1(o) PTR_O_p2_1(o+4) -#define PTR_O_p4_1(o) PTR_O_p3_1(o) PTR_O_p3_1(o+8) -#define PTR_O_p5_1(o) PTR_O_p4_1(o) PTR_O_p4_1(o+16) -#define PTR_O_p6_1(o) PTR_O_p5_1(o) PTR_O_p5_1(o+32) -#define PTR_O_p7_1(o) PTR_O_p6_1(o) PTR_O_p6_1(o+64) - -/* CASE_C_PROC_p0 (n0, p6,p5,p4,p3,p2,p1,p0): - * let's note = - 2; the macro inserts: - * case : ((C_cproc)pr) (, fn, k, ); - * where is: *(b+1), ..., *(b+) - * ( is empty for == 2). - * We must have: n0 = SUM (i = 7 to 0, p * (1 << i)). - * CASE_C_PROC_p (...): - * like CASE_C_PROC_p, but with doubled output... - */ -// case (n0-2): (Cyc_proc##n0)func(n0-2, clo -#define CASE_C_PROC_p0(n0, p6,p5,p4,p3,p2,p1,p0) \ - case (n0-2): func(n0-2, clo \ -PTR_O_p6_##p6(((n0-2)&0x80)+0)\ -PTR_O_p5_##p5(((n0-2)&0xC0)+0)\ -PTR_O_p4_##p4(((n0-2)&0xE0)+0)\ -PTR_O_p3_##p3(((n0-2)&0xF0)+0)\ -PTR_O_p2_##p2(((n0-2)&0xF8)+0)\ -PTR_O_p1_##p1(((n0-2)&0xFC)+0)\ -PTR_O_p0_##p0(((n0-2)&0xFE)+0)); -#define CASE_C_PROC_p1( n0,n1, p6,p5,p4,p3,p2,p1) \ - CASE_C_PROC_p0 (n0, p6,p5,p4,p3,p2,p1,0) \ - CASE_C_PROC_p0 (n1, p6,p5,p4,p3,p2,p1,1) -#define CASE_C_PROC_p2( n0,n1,n2,n3, p6,p5,p4,p3,p2) \ - CASE_C_PROC_p1 (n0,n1, p6,p5,p4,p3,p2,0) \ - CASE_C_PROC_p1 (n2,n3, p6,p5,p4,p3,p2,1) -#define CASE_C_PROC_p3( n0,n1,n2,n3,n4,n5,n6,n7, p6,p5,p4,p3) \ - CASE_C_PROC_p2 (n0,n1,n2,n3, p6,p5,p4,p3,0) \ - CASE_C_PROC_p2 (n4,n5,n6,n7, p6,p5,p4,p3,1) - switch(argc) { - CASE_C_PROC_p3 (2,3,4,5,6,7,8,9, 0,0,0,0) - CASE_C_PROC_p3 (10,11,12,13,14,15,16,17, 0,0,0,1) - CASE_C_PROC_p3 (18,19,20,21,22,23,24,25, 0,0,1,0) - CASE_C_PROC_p3 (26,27,28,29,30,31,32,33, 0,0,1,1) - CASE_C_PROC_p3 (34,35,36,37,38,39,40,41, 0,1,0,0) - CASE_C_PROC_p3 (42,43,44,45,46,47,48,49, 0,1,0,1) - CASE_C_PROC_p3 (50,51,52,53,54,55,56,57, 0,1,1,0) - CASE_C_PROC_p3 (58,59,60,61,62,63,64,65, 0,1,1,1) - CASE_C_PROC_p0 (66, 1,0,0,0,0,0,0) - CASE_C_PROC_p0 (67, 1,0,0,0,0,0,1) - CASE_C_PROC_p1 (68,69, 1,0,0,0,0,1) - CASE_C_PROC_p2 (70,71,72,73, 1,0,0,0,1) - CASE_C_PROC_p3 (74,75,76,77,78,79,80,81, 1,0,0,1) - CASE_C_PROC_p3 (82,83,84,85,86,87,88,89, 1,0,1,0) - CASE_C_PROC_p3 (90,91,92,93,94,95,96,97, 1,0,1,1) - CASE_C_PROC_p3 (98,99,100,101,102,103,104,105, 1,1,0,0) - CASE_C_PROC_p3 (106,107,108,109,110,111,112,113, 1,1,0,1) - CASE_C_PROC_p3 (114,115,116,117,118,119,120,121, 1,1,1,0) - CASE_C_PROC_p2 (122,123,124,125, 1,1,1,1,0) - CASE_C_PROC_p1 (126,127, 1,1,1,1,1,0) - CASE_C_PROC_p0 (128, 1,1,1,1,1,1,0) - default: - { - char buf[1024]; - snprintf(buf, 1023, "Unhandled number of function arguments: %d\n", argc); - Cyc_rt_raise_msg(buf); - } - } -} - static primitive_type Cyc_91global_91vars_primitive = {primitive_tag, "Cyc-global-vars", &_Cyc_91global_91vars}; static primitive_type Cyc_91get_91cvar_primitive = {primitive_tag, "Cyc-get-cvar", &_Cyc_91get_91cvar}; static primitive_type Cyc_91set_91cvar_67_primitive = {primitive_tag, "Cyc-set-cvar!", &_Cyc_91set_91cvar_67};