diff --git a/adaptsmooth.h b/adaptsmooth.h
new file mode 100644
index 0000000000000000000000000000000000000000..b3fb5bdfc0b9b2b4f63ecc9cf02a1b2db76c72db
--- /dev/null
+++ b/adaptsmooth.h
@@ -0,0 +1,288 @@
+#include <string.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <math.h>
+#include "fitsio.h"
+
+#define PI 3.1415926535
+
+#define MAXRING 27 /* maximum radius for median smoothing */
+#define SNMIN 20. /* minimum S/N in the pixel */
+#define SLCUT 0  /* specifies which levels must be excluded from median
+computations. 0: no exclusions; 1: exclude first level (1pix scale) from all
+others; N<0: exclude up to the (-N)th level below current. */
+#define MSKMAX 100 /* mask value for pixel not set because of S/N too low */
+#define NULVAL -1e10 /* null value for pixel that do not reach minimum S/N */
+#define DELTA_SL_RMS 2 /* use a radius DELTA_SL_RMS pixels larger than
+			  current smoothing level to comput local
+			  rms*/
+
+float select_FR(float arr[], int l_par, int r_par, int k);
+
+int medsmooth_local (long int x, long int y, float **image, int **mask, float rms, float **outimage);
+int medsmooth_mask (long int x, long int y, float **image, int **mask, float rms, float **outimage);
+int medsmooth_bkg (long int x, long int y, float **image, int **mask, float rms, float **outimage);
+int medsmooth_poisson (long int x, long int y, float **image, int **mask, float rms, float **outimage);
+int meansmooth_local (long int x, long int y, float **image, int **mask, float rms, float **outimage);
+int meansmooth_mask (long int x, long int y, float **image, int **mask, float rms, float **outimage);
+int meansmooth_bkg (long int x, long int y, float **image, int **mask, float rms, float **outimage);
+int meansmooth_poisson (long int x, long int y, float **image, int **mask, float rms, float **outimage);
+int (*fsmooth) (long int x, long int y, float **image, int **mask, float rms, float **outimage);
+
+
+long naxes1[2];
+int maskflag=0;
+int slconst=SLCUT;
+int slcut_relative(int sl);
+int slcut_absolute(int sl);
+int (*slcut) (int sl);
+float sn=SNMIN;
+int maxsmooth=MAXRING;
+float inv_e_gain=-1.0; /* 1./effective gain for poisson mode */
+
+static int kernel_pix[][2]={ \
+{  0,  0},{ -1,  0},{  0,  1},{  0, -1},{  1,  1},{  1, -1},{  1,  0},{ -1, -1},{ -1,  1},{ -1, -2},\
+{  0, -2},{ -2,  1},{  1, -2},{ -2,  0},{  2,  1},{  2, -1},{  0,  2},{  2,  0},{ -2, -1},{ -1,  2},\
+{  1,  2},{  3,  0},{  0,  3},{ -1,  3},{  0, -3},{  3,  1},{  2,  2},{ -1, -3},{ -3, -1},{ -3,  1},\
+{ -2, -2},{ -3,  0},{  2, -2},{  3, -1},{  1, -3},{ -2,  2},{  1,  3},{ -4,  1},{  4, -2},{  3, -2},\
+{ -4, -2},{ -3, -2},{  4,  0},{ -4,  0},{ -4,  2},{ -3,  2},{  4,  1},{  3,  2},{  4,  2},{ -3,  3},\
+{ -2,  3},{  2,  3},{  3,  3},{ -2, -4},{ -1, -4},{  0, -4},{  1, -4},{  2, -4},{  4, -1},{ -2,  4},\
+{ -1,  4},{  0,  4},{ -3, -3},{ -2, -3},{  1,  4},{  2,  4},{ -4, -1},{  2, -3},{  3, -3},{  4, -3},\
+{  3, -4},{  5,  0},{ -5, -2},{ -3, -4},{  4,  3},{ -5, -1},{ -2,  5},{  5,  2},{  5,  1},{ -3,  4},\
+{  5, -1},{ -2, -5},{ -1, -5},{  0, -5},{  1, -5},{  2, -5},{ -1,  5},{  0,  5},{  5, -2},{ -5,  2},\
+{ -5,  0},{ -4, -3},{  1,  5},{ -4,  3},{  2,  5},{ -5,  1},{  3,  4},{  2, -6},{ -4, -5},{ -3, -5},\
+{  3, -5},{  4, -5},{  1, -6},{  6,  2},{ -6,  0},{ -5,  3},{ -4,  5},{ -3,  5},{ -1, -6},{  0, -6},\
+{ -2, -6},{  0,  6},{ -5, -4},{ -4, -4},{ -1,  6},{ -2,  6},{  4, -4},{  5,  3},{  6, -1},{  5, -3},\
+{ -6,  2},{  6,  1},{  6,  0},{ -5,  4},{  5, -4},{  2,  6},{ -4,  4},{ -6,  1},{  1,  6},{ -5, -3},\
+{  3,  5},{  4,  5},{  4,  4},{  5,  4},{ -6, -2},{  6, -2},{ -6, -1},{ -3, -6},{  1, -7},{  7,  1},\
+{ -7,  1},{  2, -7},{  7,  0},{ -4, -6},{  3, -6},{  4, -6},{ -5, -5},{  5, -5},{ -6, -4},{  6, -4},\
+{ -6, -3},{  6, -3},{  2,  7},{  1,  7},{  0,  7},{ -1,  7},{ -2,  7},{ -7, -2},{  4,  6},{  3,  6},\
+{ -3,  6},{ -4,  6},{  7, -2},{  5,  5},{ -5,  5},{ -7, -1},{  6,  4},{ -6,  4},{  6,  3},{ -6,  3},\
+{ -2, -7},{  7, -1},{ -7,  0},{ -1, -7},{  7,  2},{ -7,  2},{  0, -7},{ -3,  7},{ -8, -1},{  4, -7},\
+{  7, -4},{ -2, -8},{ -8,  2},{ -7,  4},{  1, -8},{ -7,  3},{ -4, -7},{ -2,  8},{  3, -7},{ -1,  8},\
+{  8, -1},{  0,  8},{  1,  8},{ -8,  0},{  8,  0},{  4,  7},{ -6,  5},{  7,  4},{  8,  1},{  8,  2},\
+{ -8,  1},{  6, -5},{ -6, -5},{ -3, -7},{  2,  8},{  8, -2},{  6,  6},{  5,  6},{  6, -6},{  5, -6},\
+{  3,  7},{  7,  3},{ -8, -2},{  7, -3},{  2, -8},{ -5, -6},{ -6, -6},{ -5,  6},{ -6,  6},{  0, -8},\
+{ -1, -8},{ -7, -4},{ -7, -3},{ -4,  7},{  6,  5},{ -3, -9},{  9,  1},{ -8,  3},{ -9,  3},{  9,  0},\
+{  9, -1},{ -9,  0},{  8, -5},{  7, -5},{ -9,  1},{  9,  2},{ -7, -5},{ -8, -5},{  7, -6},{  3, -8},\
+{ -9, -2},{ -7,  6},{  4, -8},{ -6,  7},{ -5,  7},{  7,  6},{ -7, -6},{  9, -2},{  5, -8},{  8,  5},\
+{  7,  5},{  6, -7},{  5,  7},{  6,  7},{  9, -3},{  8, -3},{ -5,  8},{ -4,  8},{  5, -7},{ -7,  5},\
+{ -8,  5},{ -6, -7},{ -9, -1},{ -3,  8},{ -5, -7},{  8,  4},{  3,  8},{  4,  8},{  5,  8},{ -8, -3},\
+{ -9, -3},{  8, -4},{ -8,  4},{ -3, -8},{ -3,  9},{ -2,  9},{ -1,  9},{  0,  9},{  1,  9},{  2,  9},\
+{  3,  9},{  9,  3},{  8,  3},{ -9,  2},{ -4, -8},{ -5, -8},{ -8, -4},{  3, -9},{  2, -9},{  1, -9},\
+{  0, -9},{ -1, -9},{ -2, -9},{ -4, -9},{  3, 10},{  2, 10},{  1, 10},{  0, 10},{ -1, 10},{ -2, 10},\
+{ -3, 10},{  5,  9},{  4,  9},{ -4,  9},{ -5,  9},{  6,  8},{ -6,  8},{  7,  7},{ -7,  7},{  8,  6},\
+{ -8,  6},{  9,  5},{ -9,  5},{  9,  4},{ -9,  4},{ 10,  3},{-10,  3},{ 10,  2},{-10,  2},{ 10,  1},\
+{-10,  1},{ 10,  0},{-10,  0},{ 10, -1},{-10, -1},{ 10, -2},{-10, -2},{ 10, -3},{-10, -3},{  9, -4},\
+{ -9, -4},{  9, -5},{ -9, -5},{  8, -6},{ -8, -6},{  7, -7},{ -7, -7},{  6, -8},{ -6, -8},{  5, -9},\
+{  4, -9},{ -5, -9},{  3,-10},{  2,-10},{  1,-10},{  0,-10},{ -1,-10},{ -2,-10},{ -3,-10},{  5,-10},\
+{  2, 11},{  3, 11},{ -9,  6},{ -7, -9},{  9,  6},{ -9, -6},{ 11,  1},{-11,  1},{ -6, -9},{  6, -9},\
+{-10,  4},{  9, -7},{  8, -7},{ -9,  7},{ -8,  7},{ 10,  4},{  7, -9},{ -8, -8},{-11, -2},{ -8, -7},\
+{ -9, -7},{ -7, -8},{  7, -8},{  8, -8},{ 11, -3},{  8,  7},{  9,  7},{ 11,  0},{ -8,  8},{ -7,  8},\
+{  7,  8},{  8,  8},{-10,  5},{-11, -3},{ -3,-11},{ -2,-11},{-11, -1},{ 10, -4},{ -1,-11},{ -7,  9},\
+{ -6,  9},{  6,  9},{  7,  9},{-11,  3},{ 11,  2},{  0,-11},{  1,-11},{-11,  2},{ 11,  3},{ -5, 10},\
+{ -4, 10},{  2,-11},{-10, -4},{  3,-11},{ 11, -2},{ 10, -5},{  4, 10},{  5, 10},{ 10,  5},{ -5,-10},\
+{ 11, -1},{ -3, 11},{ -2, 11},{ -1, 11},{  0, 11},{ -4,-10},{-10, -5},{  4,-10},{  9, -6},{-11,  0},\
+{  1, 11},{  1,-12},{-12,  0},{ 10, -6},{-12,  3},{ -9,  8},{  5,-11},{-12,  2},{ -5, 11},{  4, 11},\
+{  5, 11},{-10,  6},{  6, 10},{  6,-10},{  7,-10},{ -8, -9},{  9,  8},{-11,  5},{ 10,  6},{ -2,-12},\
+{ -3, 12},{-11,  4},{  2,-12},{-10, -6},{  3,-12},{ -5,-11},{ -7, 10},{ -4,-11},{ -6, 10},{ 10, -7},\
+{-12, -3},{ -3,-12},{-10,  7},{ -2, 12},{ -1, 12},{  0, 12},{  1, 12},{  2, 12},{  3, 12},{  7, 10},\
+{ 12,  3},{ -4, 11},{ 11, -4},{  8, -9},{ -9, -8},{ -7,-10},{-11, -4},{-12, -1},{ -8,  9},{-10, -7},\
+{-12, -2},{ 12, -2},{ -6,-10},{  4,-11},{ 11,  4},{  9, -8},{-12,  1},{  0,-12},{ 12, -1},{ 12, -3},\
+{-11, -5},{ -1,-12},{  8,  9},{ 11, -5},{ 10,  7},{ 12,  2},{ 11,  5},{ 12,  0},{ 12,  1},{ -9, -9},\
+{-13,  3},{ 13,  3},{-12,  4},{ 12,  4},{-12,  5},{-13, -1},{ 13, -2},{ -4,-12},{ 12,  5},{-12,  6},\
+{-11,  6},{ 11,  6},{ 12,  6},{-11,  7},{ -5,-12},{-13, -2},{ 13, -3},{ -6,-12},{ 11,  7},{-10,  8},\
+{ 10,  8},{-10,  9},{-13, -3},{ 12, -4},{ -9,  9},{  9,  9},{ 10,  9},{ -9, 10},{ -8, 10},{-12, -4},\
+{ 12, -5},{  8, 10},{  9, 10},{ -7, 11},{ -6, 11},{-12, -5},{ 12, -6},{ 11, -6},{  3,-13},{  6, 11},\
+{  7, 11},{ -6, 12},{ -5, 12},{ -4, 12},{  2,-13},{-11, -6},{-12, -6},{ 11, -7},{  1,-13},{  4, 12},\
+{  5, 12},{  6, 12},{  0,-13},{-11, -7},{ 10, -8},{ -1,-13},{ -3, 13},{ -2, 13},{ -1, 13},{  0, 13},\
+{  1, 13},{  2, 13},{  3, 13},{ -2,-13},{-10, -8},{ 10, -9},{  9, -9},{ -3,-13},{ 13, -1},{-10, -9},\
+{  9,-10},{  8,-10},{ -8,-10},{ -9,-10},{  7,-11},{  6,-11},{ -6,-11},{ -7,-11},{  6,-12},{  5,-12},\
+{  4,-12},{ 13,  0},{-13,  1},{ 13,  1},{-13,  2},{ 13,  2},{-13,  0},{ -1, 14},{  1, 14},{  2, 14},\
+{  3, 14},{ -3,-14},{ -5,-13},{-13, -6},{ -7, 12},{ -8, 12},{ 13,  6},{-13,  6},{-11, -9},{ 10,-10},\
+{ 14,  3},{ 14,  1},{  9, 11},{  8, 11},{ 13, -6},{-13, -5},{ -6,-13},{  3,-14},{  2,-14},{  1,-14},\
+{  0,-14},{ -1,-14},{ -2,-14},{  4,-13},{ -8, 11},{ -9, 11},{ 10, 10},{-14,  2},{ 14, -1},{-10,-10},\
+{  9,-11},{  8,-11},{ 13,  5},{ 14, -2},{  5,-13},{ 13, -5},{-13, -4},{  6,-13},{-10, 10},{ 11,  9},\
+{ -8,-12},{ 13, -4},{-14, -3},{ -7,-12},{-11,  9},{-14, -1},{-13,  5},{ -8,-11},{ -9,-11},{  8,-12},\
+{  7,-12},{-14,  0},{ 14,  2},{ 11, -8},{ 12, -8},{-14,  3},{ -4, 13},{ 12,  8},{ 11,  8},{-11,  8},\
+{-12,  8},{ 12,  7},{ 14, -3},{ 13,  4},{  4, 13},{  5, 13},{  6, 13},{ 14,  0},{-12, -7},{ -5, 13},\
+{ -6, 13},{-14,  1},{-11, -8},{-12, -8},{ 11, -9},{-13,  4},{-14, -2},{  8, 12},{  7, 12},{ 12, -7},\
+{-12,  7},{ -4,-13},{ -3, 14},{ -2, 14},{  0, 14},{  4, 14},{ -3,-15},{ -2,-15},{ -1,-15},{  0,-15},\
+{  1,-15},{  2,-15},{  3,-15},{ -6,-14},{ -5,-14},{ -4,-14},{  4,-14},{  5,-14},{  6,-14},{ -8,-13},\
+{ -7,-13},{  7,-13},{  8,-13},{ -9,-12},{  9,-12},{-10,-11},{ 10,-11},{-11,-10},{ 11,-10},{-12, -9},\
+{ 12, -9},{-13, -8},{ 13, -8},{-13, -7},{ 13, -7},{-14, -6},{ 14, -6},{-14, -5},{ 14, -5},{-14, -4},\
+{ 14, -4},{-15, -3},{ 15, -3},{-15, -2},{ 15, -2},{-15, -1},{ 15, -1},{-15,  0},{ 15,  0},{-15,  1},\
+{ 15,  1},{-15,  2},{ 15,  2},{-15,  3},{ 15,  3},{-14,  4},{ 14,  4},{-14,  5},{ 14,  5},{-14,  6},\
+{ 14,  6},{-13,  7},{ 13,  7},{-13,  8},{ 13,  8},{-12,  9},{ 12,  9},{-11, 10},{ 11, 10},{-10, 11},\
+{ 10, 11},{ -9, 12},{  9, 12},{ -8, 13},{ -7, 13},{  7, 13},{  8, 13},{ -6, 14},{ -5, 14},{ -4, 14},\
+{  5, 14},{  6, 14},{ -3, 15},{ -2, 15},{ -1, 15},{  0, 15},{  1, 15},{  2, 15},{  3, 15},{ -3,-16},\
+{ 10,-12},{ 11,-12},{-12, 10},{-14,  8},{ 15, -4},{  7,-14},{ -4, 16},{ 13,  9},{ 12, 10},{ 13, 10},\
+{ 16, -2},{ -3, 16},{-16,  0},{  9,-13},{ 16, -3},{-15,  6},{ -2, 16},{ -1, 16},{  0, 16},{  1, 16},\
+{ 10, 13},{  9, 13},{  2, 16},{  3, 16},{ -9,-13},{  6,-15},{ -6,-15},{ 14,  7},{-13, 10},{-16, -2},\
+{-15, -6},{-10,-13},{ -9, 13},{-12,-11},{-11,-11},{-10, 13},{ -4,-16},{-15, -5},{ -7,-14},{  7, 14},\
+{-14, -8},{ 16, -1},{  4, 16},{  8, 14},{ 13,-10},{ 10,-13},{ 14,  8},{ -5,-15},{ -4,-15},{-16,  3},\
+{-15,  5},{ 15, -6},{ 12,-10},{  4,-15},{ 14, -7},{ 16,  4},{ 11,-11},{ 12,-11},{ 11, 11},{ -4, 15},\
+{ 12, 11},{-16,  1},{ 11, 12},{-13, -9},{ 10, 12},{ 15,  4},{ -8,-14},{-16, -3},{-14, -7},{  5,-15},\
+{  4, 15},{ -5, 15},{ 16,  0},{-10,-12},{-10, 12},{-11, 12},{-11,-12},{ 13, -9},{  8,-14},{ -8, 14},\
+{ 15, -5},{-16,  2},{ -7, 14},{ 15,  6},{ 16,  1},{ -6, 15},{ 16,  3},{-13,-10},{-12,-10},{-16, -1},\
+{  5, 15},{ 16, -4},{  6, 15},{ 15,  5},{-14,  7},{-16,  4},{-15,  4},{-15, -4},{ 14, -8},{  4,-16},\
+{  3,-16},{  2,-16},{  1,-16},{  0,-16},{ -1,-16},{ -2,-16},{ 16,  2},{-12, 11},{-11, 11},{-16, -4},\
+{-13,  9},{-16,  5},{ 14,-10},{-17, -4},{  3, 17},{  4, 17},{-10,-14},{  7,-15},{  8,-15},{  9,-15},\
+{ 17,  1},{ 13, 11},{-17,  0},{-14,  9},{-15, -8},{ -9,-14},{-15,  8},{  9, 15},{-15, -9},{-14, -9},\
+{-17,  2},{ 15, -9},{  4,-17},{  3,-17},{  2,-17},{  1,-17},{  0,-17},{ -1,-17},{ -2,-17},{ -3,-17},\
+{ -4,-17},{ 17, -3},{-10, 14},{ 16, -5},{ 14, -9},{ 16,  5},{ 15,  7},{ 17, -2},{-16,  6},{ 16,  7},\
+{ 11, 13},{-17, -2},{-16, -5},{-11, 13},{ -7, 16},{ 17,  4},{ 16, -6},{ -6, 16},{-17,  4},{-17, -3},\
+{ 10, 14},{  9, 14},{ -5, 16},{ 17,  3},{ 17,  0},{ 10,-14},{-15,  7},{ 16,  6},{  7,-16},{  6,-16},\
+{  5,-16},{ 12,-12},{ -7, 15},{ -8, 15},{ 11,-13},{ 14, 10},{ -7,-15},{ -8,-15},{ -9,-15},{ -9, 15},\
+{ 14,  9},{ 17, -4},{ 15,  9},{ 12, 12},{-14, 10},{-13,-11},{-16, -6},{ -5,-16},{ -6,-16},{ -7,-16},\
+{-11,-13},{  5, 16},{  6, 16},{  7, 16},{-16,  7},{-17,  3},{-17, -1},{ 16, -7},{ 15, -7},{ 13,-11},\
+{-17,  1},{ 15,  8},{ 17, -1},{-13, 11},{-15, -7},{-16, -7},{ -9, 14},{ 17,  2},{-12, 12},{-15,  9},\
+{-12,-12},{-14,-10},{ 15, -8},{  7, 15},{  8, 15},{ -4, 17},{ -3, 17},{ -2, 17},{ -1, 17},{  0, 17},\
+{  1, 17},{  9,-14},{  2, 17},{-16,  9},{-12, 14},{ 11,-14},{-18,  4},{-11, 14},{-18, -3},{-10, 15},\
+{-18, -1},{ 12,-14},{-17,  7},{  8,-16},{ 18, -3},{ 10,-15},{-17,  6},{ 18, -2},{-18, -2},{ 12, 14},\
+{ 11, 14},{ 18,  3},{ 17,  6},{ 13,-12},{ 14,-12},{-10,-15},{ 15, 10},{-14,-11},{ -8,-16},{ -9,-16},\
+{ 16,  8},{-18,  3},{ 14,-11},{-14, 11},{-14,-12},{ 16,  9},{  4, 18},{ 18,  2},{-15,-10},{  3, 18},\
+{  2, 18},{  1, 18},{  0, 18},{ -1, 18},{ -2, 18},{ -3, 18},{ -4, 18},{-17,  5},{ 15,-10},{ 14, 11},\
+{-16, -9},{  7,-17},{  6,-17},{  5,-17},{ -5,-17},{ -6,-17},{ -7,-17},{ 16, -9},{-18,  2},{-16,  8},\
+{  7, 17},{  6, 17},{-16, -8},{ 18,  1},{  5, 17},{ -5, 17},{ -6, 17},{-11,-14},{ -7, 17},{ 16, -8},\
+{-13,-12},{-12,-14},{ 13,-13},{-14, 12},{-13, 12},{-17, -7},{  4,-18},{  3,-18},{  2,-18},{  1,-18},\
+{  0,-18},{ -1,-18},{ -2,-18},{ -3,-18},{ -4,-18},{ 17, -7},{-18,  1},{  9, 16},{  8, 16},{ 12,-13},\
+{-15, 10},{-17, -6},{ 13, 12},{ 14, 12},{ 18,  0},{ 17, -6},{ -8, 16},{ -9, 16},{-13, 13},{-12, 13},\
+{ 17,  7},{-17, -5},{ 12, 13},{ 13, 13},{ 17, -5},{ 17,  5},{ 10, 15},{-18,  0},{ 18,  4},{-18, -4},\
+{  9,-16},{-13,-13},{-12,-13},{ 18, -1},{ 18, -4},{ 18, -6},{-19,  4},{ 12,-15},{ 18, -7},{-14, 13},\
+{-16, 11},{ 11,-16},{-19,  0},{-10, 16},{-11, 16},{-19,  1},{ 10,-16},{ 18,  7},{ 11, 16},{ 19, -1},\
+{ 11,-15},{ 19, -4},{ 10, 16},{-18, -5},{-19, -1},{-15, 12},{ 16,-11},{  4, 19},{ 17,  8},{ 15,-11},\
+{-19, -2},{-11,-16},{-10,-16},{-16, 10},{ 17,  9},{ 19, -2},{-13, 14},{ 14, 13},{  5, 18},{-13,-14},\
+{-18,  6},{-18, -6},{  6, 18},{  7,-18},{-15,-11},{  4,-19},{  3,-19},{  2,-19},{  1,-19},{  0,-19},\
+{ -1,-19},{ -2,-19},{ -3,-19},{ -4,-19},{  2, 19},{ -7,-18},{  6,-18},{ 19, -3},{-12, 15},{  5,-18},\
+{-16,-11},{ -3, 19},{ -9,-17},{ -8,-17},{  8,-17},{ 18, -5},{ 17, -9},{  7, 18},{  9,-17},{ 17, -8},\
+{ -5, 18},{ -4, 19},{-18, -7},{-17, -9},{-11, 15},{ 15, 12},{-19, -4},{  9, 17},{  8, 17},{ 19,  4},\
+{-14,-13},{ 16, 10},{-19,  2},{-15,-12},{ 19,  2},{-17,  8},{-12,-15},{-17, -8},{-11,-15},{-17,  9},\
+{ 16, 11},{ -2, 19},{ 14,-13},{ 15, 11},{ 19,  1},{ 18,  5},{ 13,-14},{ 15,-12},{  0, 19},{ 18,  6},\
+{ 16,-10},{ 19,  0},{-18,  5},{-18,  7},{ -5,-18},{ -6,-18},{ -7, 18},{ -6, 18},{ 19,  3},{ 12, 15},\
+{ 11, 15},{-19, -3},{ -8, 17},{ -9, 17},{ 13, 14},{  3, 19},{ -1, 19},{  1, 19},{-15, 11},{-16,-10},\
+{-19,  3},{-17, 10},{ -6, 19},{ 18, -8},{-16, 12},{ -4,-20},{-17,-10},{ 15,-13},{ -3, 20},{  7, 19},\
+{-20, -4},{  8, 18},{-19, -7},{  9, 18},{ 20,  2},{ 12, 16},{-14,-14},{ 17,-11},{ -7, 19},{ 12,-16},\
+{  9,-18},{  8,-18},{-20, -3},{ -3,-20},{ -2,-20},{ -1,-20},{  6, 19},{ -6,-19},{ -7,-19},{  0,-20},\
+{  1,-20},{-17, 11},{-20,  3},{ -4, 20},{ 19, -7},{-20,  0},{ 20, -1},{-12,-16},{-20,  1},{ 20, -4},\
+{-19, -6},{  2,-20},{ 18,  8},{ -8,-18},{ -9,-18},{-17,-11},{ 14,-14},{  3,-20},{  4,-20},{ 16, 12},\
+{ 17, 10},{-13,-15},{ 16,-12},{ 20,  0},{ 19,  6},{-18,  9},{ 14, 14},{ 20,  3},{-20, -1},{ 19, -6},\
+{ 20,  4},{-15, 13},{ 13,-15},{  0, 20},{ -1, 20},{-12, 16},{ 19,  7},{ -2, 20},{-19, -5},{  1, 20},\
+{  2, 20},{-19,  7},{-16,-12},{-20, -2},{  3, 20},{-13, 15},{  4, 20},{-14, 14},{ 15, 13},{ 20, -2},\
+{-19,  6},{  7,-19},{  6,-19},{  5,-19},{ -5,-19},{  5, 19},{ 20, -3},{-10,-17},{-11,-17},{ 18, -9},\
+{ 10,-17},{ 11,-17},{ 19, -5},{ 11, 17},{ 10, 17},{-20,  4},{-18, -9},{-20,  2},{ 20,  1},{-18, -8},\
+{-15,-13},{ 17, 11},{-18,  8},{ 18,  9},{ 19,  5},{ 17,-10},{ -5, 19},{-19,  5},{ -9, 18},{ -8, 18},\
+{ 13, 15},{-10, 17},{-11, 17},{ 15,-14},{-19,  9},{ 21,  4},{ 19,  8},{-20,  5},{-19,  8},{-10, 19},\
+{ 13,-16},{ 20,  7},{ 20,  5},{-20,  6},{-20,  7},{ 20,  6},{ -9, 19},{ 17,-12},{-14,-15},{-15,-15},\
+{ 16,-14},{-18,-11},{ -8, 19},{-13,-16},{-14,-16},{ 18,-11},{ 11, 18},{ 10, 18},{-19,-10},{-18,-10},\
+{-10, 18},{-11, 18},{ 13,-17},{ 12,-17},{ 18,-10},{ 19,-10},{-19, -9},{ 19, -9},{ 13, 17},{ 12, 17},\
+{-19, -8},{-12,-17},{-13,-17},{-12, 17},{ 19, -8},{-13, 17},{ 14, 16},{-20, -7},{ 13, 16},{ 11,-18},\
+{ 10,-18},{ 20, -7},{-15,-14},{-16,-14},{-20, -6},{-10,-18},{-11,-18},{ 20, -6},{-13, 16},{-14, 16},\
+{-20, -5},{-17,-13},{-16,-13},{ 10,-19},{  9,-19},{  8,-19},{ 20, -5},{ 15, 15},{ 14, 15},{-21, -4},\
+{ -8,-19},{ -9,-19},{-10,-19},{ 21, -4},{ -5, 20},{ -6, 20},{-21, -3},{  8, 19},{-14, 15},{  7,-20},\
+{  6,-20},{  5,-20},{ -5,-20},{ -6,-20},{  9, 19},{ 21, -3},{ 15,-15},{-15, 15},{ 14,-15},{-21, -2},\
+{ 10, 19},{ -7,-20},{ 16, 14},{ 15, 14},{ -7, 20},{  5, 20},{  6, 20},{  7, 20},{ 21, -2},{-21, -1},\
+{-15, 14},{-16, 14},{  4,-21},{  3,-21},{  2,-21},{  1,-21},{  0,-21},{ -1,-21},{ -2,-21},{ -3,-21},\
+{ -4,-21},{ 21, -1},{ 17, 13},{ 16, 13},{ 14,-16},{-21,  0},{-16, 13},{-17, 13},{ 21,  0},{ 17, 12},\
+{-21,  1},{ 16,-13},{-17, 12},{ 21,  1},{ 17,-13},{ 18, 11},{-21,  2},{ -4, 21},{ -3, 21},{ -2, 21},\
+{ -1, 21},{  0, 21},{  1, 21},{  2, 21},{ 21,  2},{-18, 11},{-21,  3},{ 19, 10},{ 18, 10},{  3, 21},\
+{  4, 21},{ 21,  3},{-17,-12},{-21,  4},{-18, 10},{-19, 10},{ 19,  9},{ 21, -6},{-21,  7},{ 21,  8},\
+{ 22,  3},{  5, 21},{  6, 21},{  7, 21},{ -5,-21},{ -6,-21},{ -7,-21},{ -8,-21},{  8, 21},{ 22, -1},\
+{ 15,-16},{-17, 14},{ 18, 13},{-22,  0},{-12,-19},{-11,-19},{-22, -4},{-12, 19},{-11, 19},{ 21, -5},\
+{ 11,-19},{ 12,-19},{ 16, 15},{  9, 20},{ 10, 20},{-15, 16},{-21, -5},{-18,-13},{-22,  4},{ 22,  4},\
+{-18, 13},{ 19, 12},{ 18, 12},{  5,-21},{-21,  6},{ 22,  0},{-17,-14},{-13,-18},{-12,-18},{-21, -6},\
+{-22,  1},{ 21, -7},{ 12,-18},{ 13,-18},{-21, -7},{ 15, 16},{  4,-22},{  3,-22},{  2,-22},{  1,-22},\
+{  0,-22},{ -1,-22},{ -2,-22},{ -3,-22},{ -4,-22},{-14, 17},{ 21, -8},{ 20, -8},{-14,-17},{-20, -8},\
+{ 21,  5},{ 22,  1},{ -4, 22},{-18, 12},{-19, 12},{ 19, 11},{ 21,  7},{ 18,-13},{-22,  2},{-21, -8},\
+{ 14, 17},{ 20, -9},{-20, -9},{ -8, 21},{ -7, 21},{ -6, 21},{ -5, 21},{-13, 18},{-12, 18},{ 20,-10},\
+{ -2, 22},{-21,  8},{-20,  8},{-20, 10},{ 14,-17},{-20,-10},{ 12, 18},{ 13, 18},{ 22,  2},{ -1, 22},\
+{ 19,-11},{ 20,  9},{  0, 22},{-22,  3},{-20,  9},{  4, 22},{  3, 22},{  2, 22},{ 17,-14},{-19, 11},\
+{ 20, 10},{ -3, 22},{-21,  5},{  1, 22},{-15,-16},{-19,-11},{-19,-12},{-18,-12},{-16,-15},{-10,-20},\
+{ -8, 20},{ -9,-20},{ -8,-20},{-22, -2},{ 19,-12},{ 18,-12},{  8, 20},{ 11, 19},{ 17, 14},{-16, 15},\
+{ 20,  8},{ 22, -2},{ -9, 20},{-10, 20},{ 22, -3},{  8,-20},{  9,-20},{ 10,-20},{-22, -1},{ 16,-15},\
+{-22, -3},{ 12, 19},{ 22, -4},{ 21,  6},{  8,-21},{  7,-21},{  6,-21},{-16,-16},{ 23, -2},{-23,  2},\
+{  4,-23},{ 22,  7},{-22,  7},{  3,-23},{-22, -8},{  2,-23},{ 23,  3},{ 23,  4},{ 21, -9},{  1,-23},\
+{  0,-23},{-21, -9},{ 15, 17},{ 16, 17},{  8, 22},{ -9,-21},{ 13, 19},{  3, 23},{  2, 23},{  1, 23},\
+{  0, 23},{-13,-19},{  7, 22},{  6, 22},{ 23, -1},{-10, 21},{ -9, 21},{-18, 14},{ 19, 13},{ -1,-23},\
+{  9, 21},{ 10, 21},{ -5, 22},{-23,  0},{ -2,-23},{-23,  4},{ -3,-23},{ -4,-23},{-22,  8},{-23, -4},\
+{ 22, -5},{ 19,-13},{-10,-21},{  5, 22},{-15, 18},{-14, 18},{-20,-11},{ 13,-19},{-20,-12},{ 17, 15},\
+{ 18, 15},{-17, 16},{-12, 20},{ 21,-10},{ 23, -3},{ 11, 20},{ 12, 20},{-16, 16},{ 16,-16},{-18,-15},\
+{-22, -5},{-17,-15},{-19,-13},{ 22, -6},{ 22,  8},{-21,  9},{-23, -3},{-19, 13},{ 20, 12},{-21, 10},\
+{-12,-20},{ 15,-17},{ -1, 23},{ -2, 23},{ -3, 23},{ -4, 23},{ 18,-15},{ 16,-17},{-11,-20},{ 23,  0},\
+{-18,-14},{-22,  6},{-21,-10},{-15,-18},{-14,-18},{-11, 20},{ 20,-12},{ 21,  9},{-23,  1},{-13, 19},\
+{ -7, 22},{-22, -6},{ 22, -7},{ 23,  2},{ 23, -4},{ 14, 18},{ 14,-18},{ 15,-18},{ 18,-14},{-22, -7},\
+{ 20,-11},{ 16, 16},{ 17, 16},{-16, 17},{-15, 17},{  8,-22},{  7,-22},{  6,-22},{  5,-22},{ 10,-21},\
+{ 15, 18},{  4, 23},{-23, -2},{-23,  3},{-23, -1},{  9,-21},{-22,  5},{ -6, 22},{ -5,-22},{ -6,-22},\
+{ -7,-22},{ -8,-22},{ 11,-20},{ -8, 22},{ 22, -8},{ 12,-20},{ 22,  5},{-17,-16},{-16,-17},{-15,-17},\
+{ 18, 14},{-20, 11},{ 21, 10},{-18, 15},{ 23,  1},{-17, 15},{ 22,  6},{ 17,-15},{-20, 12},{ 20, 11},\
+{ 17,-16},{-15, 19},{ 19,-14},{ 20,-14},{-20,-13},{-14, 19},{ 18,-16},{ 20,-13},{-21,-12},{ 21,-12},\
+{-21,-11},{-18,-16},{ 21,-11},{-22,-10},{ 17,-17},{ 22,-10},{-22, -9},{ 22, -9},{-23, -8},{-17,-17},\
+{ -8, 23},{ 23, -8},{-23, -7},{ 16,-18},{ 23, -7},{-23, -6},{-16,-18},{ -7, 23},{ -6, 23},{ -5, 23},\
+{ 23, -6},{-23, -5},{ 15,-19},{ 14,-19},{ 23, -5},{-24, -4},{-14,-19},{-15,-19},{  5, 23},{  6, 23},\
+{  7, 23},{ 24, -4},{-24, -3},{ 14,-20},{ 13,-20},{ 24, -3},{-24, -2},{-13,-20},{-14,-20},{  8, 23},\
+{ 24, -2},{-24, -1},{ 12,-21},{ 11,-21},{ 24, -1},{-24,  0},{ 14, 19},{-11,-21},{-12,-21},{ 15, 19},\
+{ 24,  0},{-24,  1},{ 10,-22},{  9,-22},{ -9,-22},{-10,-22},{ 24,  1},{-24,  2},{ -4, 24},{ -3, 24},\
+{ -2, 24},{ -1, 24},{  0, 24},{  1, 24},{  2, 24},{  3, 24},{  4, 24},{ 24,  2},{-24,  3},{  8,-23},\
+{  7,-23},{  6,-23},{  5,-23},{ -5,-23},{ -6,-23},{ -7,-23},{ -8,-23},{ 24,  3},{-24,  4},{ 24,  4},\
+{-23,  5},{  4,-24},{  3,-24},{  2,-24},{  1,-24},{  0,-24},{ -1,-24},{ -2,-24},{ -3,-24},{ -4,-24},\
+{ 23,  5},{-23,  6},{ 23,  6},{-23,  7},{ 23,  7},{-23,  8},{ -9, 22},{-10, 22},{ 23,  8},{-22,  9},\
+{ 22,  9},{-22, 10},{ 12, 21},{ 11, 21},{ 22, 10},{-21, 11},{-11, 21},{-12, 21},{ 21, 11},{-21, 12},\
+{ 21, 12},{-20, 13},{-14, 20},{ 14, 20},{ 13, 20},{-13, 20},{ 20, 13},{-20, 14},{-19, 14},{ 19, 14},\
+{ 20, 14},{-19, 15},{ 19, 15},{-18, 16},{ 18, 16},{ 10, 22},{-17, 17},{ 17, 17},{  9, 22},{-16, 18},\
+{ 16, 18},{-19,-15},{ 19,-15},{-20,-14},{-19,-14},{  1,-25},{-15, 20},{-21, 13},{ 22, 12},{ 25,  0},\
+{-25,  1},{-24,  8},{ -2, 25},{ 14, 21},{ 13, 21},{ 16, 19},{-11, 22},{-25,  4},{ -6,-24},{-12, 22},\
+{ 12,-22},{ -5,-24},{ 25,  3},{ 11,-22},{-11,-22},{-12,-22},{ 17, 19},{  5,-24},{  6,-24},{-11,-23},\
+{-10,-23},{ -9,-23},{  9,-23},{ 10,-23},{ 11,-23},{  7,-24},{ 25,  1},{ 23, 10},{  8,-24},{ 21,-14},\
+{-22, 12},{ 23, 11},{ 22, 11},{-16, 19},{-25,  2},{  0,-25},{-23, 11},{-22, 11},{-14, 21},{ -1,-25},\
+{-13, 21},{-25,  3},{ -2,-25},{-21,-14},{ -8, 24},{ -3, 25},{ 25,  2},{ -7, 24},{ -6, 24},{ -5, 24},\
+{-21,-13},{ 19,-16},{ 21,-13},{-22,-12},{ 22,-12},{-23,-11},{ -3,-25},{ -4,-25},{-22,-11},{-20,-15},\
+{-19,-16},{ 18, 18},{ 17, 18},{ 22,-11},{ 23,-11},{-23,-10},{ 19,-17},{ 18,-17},{ 23,-10},{-17, 18},\
+{-18, 18},{ 19, 17},{ 18, 17},{ -5,-25},{ 24,  6},{-23, -9},{ 23, -9},{-24,  5},{-25,  5},{-24,  6},\
+{-24, -8},{-18,-17},{ 20,-15},{ 25,  4},{-19,-17},{-11, 23},{ 24,  8},{-17, 19},{-10, 23},{ -9, 23},\
+{ 24, -8},{-18, 17},{-19, 17},{ -5, 25},{-23,  9},{ 11, 22},{ 12, 22},{ 19, 16},{-24, -7},{ 18,-18},\
+{ 17,-18},{ 24, -7},{-24, -6},{-17,-18},{-18,-18},{ 24, -6},{ -4, 25},{ 25,  5},{ 24,  5},{-25, -5},\
+{-24, -5},{-19, 16},{ 20, 15},{ 17,-19},{ 16,-19},{ 24, -5},{ 25, -5},{-25, -4},{-16,-19},{  5, 25},\
+{  4, 25},{  3, 25},{-24,  7},{  5,-25},{  4,-25},{ -8,-24},{ -7,-24},{  3,-25},{ 24,  7},{-17,-19},\
+{ 25, -4},{-25, -3},{ 15,-20},{ 25, -3},{-20, 15},{ 21, 14},{  2,-25},{  2, 25},{  1, 25},{-25, -2},\
+{ 23,  9},{  0, 25},{-15,-20},{  9, 23},{ 10, 23},{ 11, 23},{ 25, -2},{-25, -1},{ -1, 25},{-23, 10},\
+{ 14,-21},{  8, 24},{  7, 24},{  6, 24},{  5, 24},{ 13,-21},{ 25, -1},{-21, 14},{ 21, 13},{-25,  0},\
+{-13,-21},{-14,-21},{ 15, 20},{ 26,  5},{  8,-25},{  7,-25},{  6,-25},{ -6,-25},{ -7,-25},{ -8,-25},\
+{-11,-24},{-10,-24},{ -9,-24},{ 21,-15},{ 25,  7},{-25,  8},{  9,-24},{ 10,-24},{ 11,-24},{  7, 25},\
+{  8, 25},{ -5, 26},{ -4, 26},{-26,  5},{ 26,  4},{ 25,  8},{-24,  9},{ -3, 26},{ -2, 26},{ -1, 26},\
+{  5,-26},{  4,-26},{  3,-26},{  2,-26},{  1,-26},{  0,-26},{ -1,-26},{ -2,-26},{ -3,-26},{ -4,-26},\
+{ 11, 24},{ 10, 24},{  9, 24},{ 24,  9},{-24, 10},{ -5,-26},{ 16, 21},{ 15, 21},{-26,  4},{ 26,  3},\
+{-13,-23},{-12,-23},{ 12,-23},{ 24, 10},{-24, 11},{ 13,-23},{-26,  3},{ 26,  2},{-22,-14},{-15, 21},\
+{-16, 21},{-14,-22},{-13,-22},{ 18, 19},{-26,  2},{ 24, 11},{-23, 12},{ 26,  1},{ 13,-22},{ 14,-22},\
+{-17, 20},{-14, 22},{-13, 22},{-16, 20},{-26,  1},{ 26,  0},{-22,-13},{ 23, 12},{-23, 13},{-22, 13},\
+{-23,-13},{ -9, 24},{-10, 24},{-11, 24},{ 17, 20},{ 16, 20},{-16,-21},{-15,-21},{-26,  0},{ 22, 13},\
+{ 23, 13},{-22, 14},{ 26, -1},{ 15,-21},{ 16,-21},{-26, -1},{ 26, -2},{ 13, 23},{ 12, 23},{-17,-20},\
+{-16,-20},{-26, -2},{ 22, 14},{-21, 15},{ 22,-14},{ 26, -3},{ 16,-20},{ 17,-20},{-26, -3},{ 26, -4},\
+{-18,-19},{-26, -4},{ 26, -5},{ 18,-19},{ 21, 15},{ 14, 22},{  5, 26},{-21, 16},{-20, 16},{-26, -5},\
+{ 25, -6},{-19,-18},{-25, -6},{ 25, -7},{-25, -7},{-18, 19},{ 20, 16},{ 21, 16},{  4, 26},{ 13, 22},\
+{  3, 26},{-20, 17},{ 25, -8},{ 19,-18},{-12, 23},{-20,-17},{-25, -8},{ 24, -9},{-24, -9},{ 20, 17},\
+{  2, 26},{  1, 26},{-19, 18},{ 24,-10},{ 20,-17},{-13, 23},{-24,-10},{ 24,-11},{ 19, 18},{  0, 26},\
+{-21,-16},{-20,-16},{-21,-15},{-24,-11},{ 23,-12},{-23,-12},{ 23,-13},{ 22,-13},{ 20,-16},{ 21,-16},\
+{  6, 25},{ -6, 25},{ -7, 25},{ -8, 25},{ 25,  6},{-25,  7},{-25,  6},{ -2,-27},{  3, 27},{  2, 27},\
+{ 17,-21},{-27, -5},{ -1,-27},{ 26, -6},{ -5,-27},{ 27,  2},{ 19, 19},{-13, 24},{-25, 10},{ 14,-23},\
+{ -4,-27},{-27, -1},{-20,-18},{ 27, -2},{ 15,-23},{-15, 23},{ 24,-12},{-14, 23},{-26, -6},{ -7,-26},\
+{-15, 22},{ 26, -7},{  0,-27},{-11, 25},{ 21,-17},{-10, 25},{  1,-27},{ 23,-15},{-26, -7},{ 18, 20},\
+{ 22,-15},{ 15, 23},{-26,  8},{ 14, 23},{ 22, 16},{ 27,  5},{ -9, 25},{  0, 27},{ 26,  7},{ 13,-24},\
+{ -1, 27},{-22,-15},{-12,-24},{ 25,-10},{ -8, 26},{-16, 22},{-21, 17},{-13,-24},{-25,  9},{-17,-21},\
+{-23,-15},{ -8,-26},{ 26, -8},{  2,-27},{  3,-27},{-17, 21},{ 20,-18},{  9, 25},{-24, 13},{-26,  6},\
+{-18,-20},{ 15,-22},{ 26,  8},{-20, 18},{-25, -9},{ 21, 17},{-10,-25},{ -7, 26},{ 10,-25},{-21,-17},\
+{ -6, 26},{  4, 27},{ 27,  4},{-27,  5},{-11,-25},{-26, -8},{ 25,  9},{ 24, 12},{-24,-12},{ 25, -9},\
+{ 12,-24},{-24,-13},{ 23,-14},{ 12, 24},{  1, 27},{ 23, 14},{-27,  0},{ -9,-25},{ 27, -1},{  8, 26},\
+{ -5, 27},{  7, 26},{ 27,  3},{ 20, 18},{-23, 15},{-22, 15},{-15,-23},{ 13, 24},{-26,  7},{-27, -2},\
+{ 27, -3},{-25,-11},{ 24, 13},{ 10, 25},{  5, 27},{-14,-23},{ 18,-20},{  9,-25},{ 27,  0},{ 25,-11},\
+{  4,-27},{ 27,  1},{ -6,-26},{-27, -3},{ 27, -4},{ 25, 10},{-24, 12},{  5,-27},{-12, 24},{ 25, 11},\
+{-27,  1},{ 11, 25},{-19,-19},{-23, 14},{-27,  2},{  6,-26},{  7,-26},{ 24,-13},{-27, -4},{ 27, -5},\
+{ 11,-25},{  8,-26},{ 26,  6},{ 17, 21},{ -4, 27},{ -3, 27},{ 16,-22},{-25, 11},{-25,-10},{ 22, 15},\
+{ 23, 15},{ -3,-27},{-15,-22},{  6, 26},{ 16, 22},{ 15, 22},{-27,  4},{-16,-22},{-18, 20},{ -2, 27},\
+{-22, 16},{-23,-14},{ 22,-16},{-27,  3},{-19, 19},{ 19,-19},{-22,-16}};
+
+    
+static int kernel_limits[]={   1,   9,  21,  37,  69,  97, 137, 177, 225, 293, 349, 421, 489, 577, \
+665, 749, 861, 973,1085,1201,1313,1457,1597,1741,1885,2053,2217};
+
+#define MAXKERN 2217